WO2009123343A1 - 競合分析装置、競合分析方法、及びプログラム - Google Patents
競合分析装置、競合分析方法、及びプログラム Download PDFInfo
- Publication number
- WO2009123343A1 WO2009123343A1 PCT/JP2009/057034 JP2009057034W WO2009123343A1 WO 2009123343 A1 WO2009123343 A1 WO 2009123343A1 JP 2009057034 W JP2009057034 W JP 2009057034W WO 2009123343 A1 WO2009123343 A1 WO 2009123343A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- access right
- access
- shared resource
- right acquisition
- contention
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Abstract
共有資源に対するアクセス競合の状態が正常か否かを分析するのに好適な競合分析装置、競合分析方法、およびプログラムを提供する。分析対象プログラムに従って、該共有資源をアクセスする実行手段と、共有資源をアクセスするアクセス権を獲得するアクセス権獲得手段と、アクセス権獲得部による、アクセス権の獲得に関して得られる特徴量を検出する検出手段と、特徴量に基づいて、共有資源に対するアクセス競合の状態を判定する判定手段を備える。
Description
明細書
競合分析装置、競合分析方法、及びプログラム
技術分野
[0001 ] 本発明は、アクセス競合の状態を判定する、競合分析装置、競合分析方法、及びプ ログラムに関する。
背景の技術
[0002] メモリやファイルなどの資源を共有してデータ処理を行う、マルチタスクシステム及びマ ルチプロセッサシステムが知られている。マルチタスクシステムでは、プロセス及び同一 プロセス内で実行されるスレッドを含む、複数のタスクが、時間分割処理により、 1つの CP U ( Central Processing Unit)で処理される。マルチプロセッサシステムでは、複数の プロセスが、複数の CPU (プロセッサ)に分散して、並列して実行される。 CPUのそれぞ れが、マルチタスクシステムとして動作する、マルチプロセッサシステムも知られている。
[0003] いずれの場合も、プロセスが共有資源のクリティカルセクションにアクセスする際に、口 ックが必要である。即ち、プロセスは、排他的なアクセス権を獲得して、他のプロセスが クリティカルセクションにアクセスするのを'防ぐ必要がある。クリティカルセクションは、 1つ の共有資源に対して複数の処理が同時に行われると、整合性が保てなくなる部分を意 味する。ここでは、理解を容易にするために、プロセスについて説明するが、プロセスに 替えてスレッドについても説明は同様である。プロセスは、共有資源へのアクセスを終了 すると、ロックを開放して、アクセス権を他のプロセスに譲る。
[0004] 共有資源へのアクセスを効率よく行うために、特許文献 1は、排他制御区間での命令 の実行に要する時間を求める技術を開示する。
[0005] 特許文献 1:特開平 5— 66972号公報
発明の開示
発明が解決しょうとする課題
[0006] 本発明は、共有資源へのアクセスの状態を、共有資源の利用状況に応じて精度良く 判定する、競合分析装置を提供することを課題とする。
[0007] 上記のマルチタスクシステム或はマルチプロセッサシステムにおいては、ロックの獲得 に対して多くの競合が生じた場合、他のプロセスがロックの解放を待つ時間が増え、プ ロセス全体の処理効率が下がる。このため、共有資源へのアクセスを効率よく行うため に、特許文献 1は、排他制御区間での命令の実行に要する時間を求める技術を開示
する。
[0008] 特許文献 1では、トレースファイル、即ち、動作プログラムにおいて実行された命令の 情報を記憶したファイルを解析して、排他制御区間を抽出し、排他制御区間での平均 命令実行時間を計算する。
[0009] し力、し、共有資源へのアクセスのタイミングは、実行時の環境に応じて変化する。この ため、特許文献 1のように一度プログラムを実行して取得したトレースファイルを用いる だけの処理では、共有資源への厳しい競合状態や、デッドロックなどの異常状態を検出 できないことがある。なお、デッドロックとは、 2つ以上のタスクが互いに相手の占有して いる資源の解放を待つ状態を意味する。
[0010] また、記録された時間データに基づいて、想定範囲内の競合が発生しているのか、或 は、異常な状態が発生しているのかを判別するためには、異常と判定するための判定 基準を予め定めておく必要がある。異常な状態とは、例えば、ロックの不正な残留状態 やデッドロック状態である。しかし、ロックによって排他制御される資源の利用状況は、 一般に均一でない。このため、ロック獲得要求後に、実際に獲得するまでに要する時間 も同一ではない。このため、例えば、コンピュータ内の別のプロセスによる CPUの使用の ために、ロック獲得までに時間を要した場合でも、異常が発生していると誤って判定され ること力ある。 .
[001 1 ] 本発明の目的は、上述した課題を解決する、競合分析装置、競合分析方法およびプ ログラムを提供することにある。
課題を解決するための手段
[0012] 本発明に係る競合分析装置は、共有資源に対するアクセス競合の状態を判定する 競合分析装置であって、分析対象プログラムに従って、共有資源をアクセスする実行手 段と、共有資源をアクセスするアクセス権を獲得するアクセス権獲得手段と、アクセス権 獲得部による、アクセス権の獲得に関して得られる特徴量を検出する検出手段と、特 徵量に基づいて、共有資源に対するアクセス競合の状態を判定する判定手段を備え る。
[0013] 本発明に係る競合分析方法は、共有資源に対するアクセス競合の状態を判定する 競合分析方法であって、分析対象プログラムに従って、共有資源をアクセスするァクセ ス実行ステップと、共有資源をアクセスするアクセス権を獲得するアクセス権獲得ステツ プと、アクセス権の獲得に関して得られる特徴量を検出する検出ステップと、特徴量に
基づいて、共有資源に対するアクセス,競合の状態を判定する判定ステップを備える。
[0014] 本発明に係るプログラムは、コンピュータに、共有資源に対するアクセス競合の状態 を判定させるプログラムであって、コンピュータに、分析対象プログラムに従って、共有 資源をアクセスするアクセス実行処理と、共有資源をアクセスするアクセス権を獲得す るアクセス権獲得処理と、アクセス権の獲得に関して得られる特徴量を検出する検出 処理と、特徴量に基づいて、共有資源に対するアクセス競合の状態を判定する判定処 理を実行させる。
発明の効果
[001 5] 本発明によれば、共有資源の利用状況に応じて、共有資源に対するアクセス競合の 状態を判定するので、共有資源へのアクセスの状態を、精度良く判定する競合分析装 置、競合分析方法、及びプログラムを提供することができる。
図面の簡単な説明
[0016] [図 1 ]第 1実施の形態に係る競合分析装置の概要構成を示すブロック図である。
[図 2]第 1の実施の形態に係る競合分析処理の例を示すフロー図である。
[図 3]第 2実施の形態に係る競合分析装置の概要構成を示すブロック図である。
[図 4]第 2の実施の形態に係る蓄積部の構成例を示す図である。
[図 5]第 2の実施の形態に係る競合分析処理の例を示すフロー図である。
[図 6A]本実施の形態に係る分析対象プログラムの例の前半部を示す図である。
[図 6 B]本実施の形態に係る分析対象プログラムの例の後半部を示す図である。
[図 7]第 2の実施の形態に係る分析対象プログラムの動作を説明する図である。
[図 8]第 3の実施の形態に係る制御部の構成例を示す図である。
[図 9A]第 3の実施の形態で利用するロック基礎情報ファイルの例を示す図である。
[図 9 B]ロック基礎情報ファイルを元に得られたロック属性ファイルの例を示す図であ る。
発明を実施するための最良の形態
[001 7] (第 1の実施形態)
[0018] 図 1を参照して、本実施の形態に係る競合分析装置 1 00の概要構成について説明 する。
[0019] 第 1の実施の形態に係る競合分析装置 1 00は、図 1に示すように、制御部 1 1 OA、 制御部 1 1 0X、該制御部とバス 1 30を介して接続されたメインメモリ 1 20と、を備える。
競合分析装置 1 00は、制御部 1 1 OA及び 1 1 0X上で、共有資源であるメインメモリ 1 2 0へのアクセスを行うプログラムを実行した場合に、該プログラムの実行によって生じる 共有資源に対するァク スの競合状態が、正常であるのか、或は異常であるのかを判 定する。
[0020] 本実施の形態において、制御部 1 1 OXは、アクセス権獲得部 1 1 6Xと、検出部 1 50X と、判定部 1 1 5Xとを含む。
[0021] 分析対象プログラムを実行する制御部 1 1 OAは、該分析対象プログラムを実行する 実行部 1 1 7Aを含む。
[0022] メインメモリ 1 20は、揮発性メモリを含み、制御部 1 1 OA及び 1 1 OXによって共有され る共有メモリ(共有資源)を含み、さらに、共有資源に排他的にアクセスするために必要 なロックの所在の情報等を格納する。
[0023] 図 2を参照して、本実施の形態に係る競合分析装置 1 00の動作を説明する。制御部
1 1 OXでは競合分析用アプリケーションプログラムが起動されており、制御部 1 1 OAで は分析対象プログラムが起動されている。
[0024] まず、制御部 1 1 OXは、制御部 1 1 OAで実行されている分析対象プログラムの分析処 理を開始する。
[0025] 制御部 1 1 0Xは、バス 1 30を介して、獲得すべきロックの所在等の情報(ロックの属 ' 性)を取得する。これにより、制御部 1 1 OXのアクセス権獲得部 1 1 6Xは、バス 1 30を介 して、該ロックの獲得を実行する(ステップ S203)。
[0026] 制御部 1 1 0Xの検出部 1 50Xは、ロック獲得に成功すると、アクセス権の獲得に関し て得られる特徴量を検出する (ステップ S220)。制御部 1 1 0Xは、ロックを開放する。
[0027] 次に、制御部 1 1 0Xは、現在処理中のロックについて、所定の基準に従って、検出さ れたロックに関する特徴量を取得する。
[0028] 次に、制御部 1 1 0Xの判定部 1 1 5Xは、ステップ S220で求めた、現在処理中のロッ クの特徴量と、所定の基準に従って取得された特徴量とを参照し、所定の条件に基づ いて、競合状態を判定する(ステップ S221 )。所定の条件を満足する場合(ステップ S2 21; Yes)、制御部 1 1 OXの CPU 1 1 1 Xの判定部 1 1 5Xは、共有資源への競合は正常 な状態であると判定する(ステップ S21 0)。そうでなかった場合(ステップ S221 ; No)、 判定部 1 1 5Xは、共有資源への競合は異常な状態であると判定する(ステップ S 21 D o
[0029] このように、本発明に係る実施の形態は、あるクリティカルセクションの競合状態を動 的に分析する。すなわち、固定的な判定基準を用いることな 所定の基準で取得され た、アクセス権の獲得に関する特徴量から、ロック獲得処理に異常が生じているかが判 定される。クリティカルセクションへのアクセス状況は均一でないため、状況に応じて柔 軟に異常を検出することが必要である。本実施形態では、固定基準を用いないので、こ のような検出が可能である。
[0030] (第 2の実施形態)
[0031 ] 第 2の実施の形態に係る競合分析装置 1 00は、図 3に示すように、 N個の制御部 1 1 OA乃至 1 1 ON、制御部 1 1 0X、該複数の制御部とバス 1 30を介して接続されたメイン メモリ 1 20と、を備える。ただし、 Nは任意である。競合分析装置 1 00は、複数の制御部 1 1 0A乃至 1 1 0N、 1 1 OX上で、共有資源であるメインメモリ 1 20へのアクセスを行うプ ログラムを実行した場合 ίこ、該プログラムの実行によって生じる共有資源に対するァク セスの競合状態が、正常であるのか、或は異常であるのかを判定する。
[0032] 複数の制御部 1 1 OA乃至 1 1 0Ν、 1 1 OXのそれぞれは、 CPU (Central Processing Unit) 1 1 1 A乃至 1 1 1 N、 1 1 1 Xと、キャッシュメモリ 1 1 2A乃至 1 1 2N、 1 1 2Xを含む。 制御部 1 1 OXはさら【こ、蓄積部 1 40を含む。
[0033] 制御部 1 1 OAにおいて、キャッシュメモリ 1 1 2Aは、後述するメインメモリ 1 20よりも小 さい容量を有し、高速に動作する揮発性メモリである。キャッシュメモリ 1 1 2Aは、メイン メモリ 1 20が記憶する情報のコピーを、メインメモリ 1 20と整合性を取りつつ、適宜記憶 する。 CPU 1 1 1 Aがメインメモリ 1 20へアクセスする回数が減るので、種々の処理が高 速に実行される。制御部 1 1 0Aの CPU 1 1 1 Aは、キャッシュメモリ 1 1 2Aに記憶されるプ ログラムに従って処理を行う。 この動作は、制御部 1 1 OB乃至 1 1 0N及び 1 1 0Xにつ いても同様である。
[0034] メインメモリ 1 20は、揮発性メモリを含み、複数の制御部" M OA乃至 1 1 0N、 1 1 OXに よって共有される共有メモリ(共有資源)を含む。
[0035] なお、本実施の形態においては、制御部 1 1 OA乃至 1 1 ON上で、共有資源にアクセス する分析対象のプログラムが実行され、制御部 1 1 OX上で、競合分析用アプリケーショ ンプログラムが実行される。制御部 1 1 OXは、該分析対象プログラムの分析処理を行う。 制御部 1 1 0Xは,制御部 1 1 OA乃至 1 1 ONとは異なる構成をもつことが好ましい。
[0036] —方、分析対象プログラムを実行する制御部 1 1 OA乃至 1 1 ONのそれぞれのキヤッ
シュメモリ 1 1 2A乃至 1 1 2Nには、分析対象プログラムが記憶される。 CPU 1 1 1 A乃至 1 1 1 Nのそれぞれは、該分析対象プログラムを実行する実行部 1 1フ Aないし 1 1 7 Nを 含む。ただし、実行部として機能する制御部の数は、分析対象プログラムの内容により 異なってよい。
[0037] 本実施の形態において、制御部 1 1 OXの CPU 1 1 1 Xは、アクセス権獲得部 1 1 6Xと、 算出部 1 1 3Xと、半 IJ定部 1 1 5Xとを含む。さらに、制御部 1 1 0Xの CPU 1 1 1 Xは、計測 部 1 1 4Xを含む。該計測部 1 1 4Xは、発振回路を備えたクロック(図示せず)を含む。制 御部 1 1 OXのキャッシュメモリ 1 1 2Xは、競合分析用アプリケーションプログラムを記憶 する。ここで、算出部 1 1 3Xと、判定部 1 1 5Xと、蓄積部 1 40Xとは、第 1の実施形態に おける検出部 1 50Xに対応する。 i
[0038] 図 4は、蓄積部 1 40Xに記録されるデータの書式を示す。このデータは、制御部 1 1 0 A乃至 1 1 ONにおける、分析対象プログラムにより定義される。すなわち、共有資源の それぞれに用意されるアクセス権毎に、処理時刻がレコードとして記録される。該レコ一 ドは、該アクセス権の獲得処理を開始した時刻(開始時刻)、獲得処理が成功した時刻 (終了時刻)、獲得処理に要した蒔間(ロック獲得所要時間:終了時刻一開始時刻)を 含む。そして、最新の M件分(M:所定の整数)のレコードが記憶される。以降、本実施 の形態においては、排他的なアクセス権をロックと呼ぶ。
[0039] (競合の分析処理)
[0040] 図 5を参照して、本実施の形態に係る競合分析装置 1 00の動作を説明する。制御部
1 1 OXでは競合分析用アプリケ一シヨンプログラムが起動されており、制御部 1 1 OA乃 至 1 1 ONでは分析対象プログラムが起動されている。
[0041] まず、制御部 1 1 OXは、最後に競合の分析処理を開始した時刻(以下、最終実行時 刻と呼ぷ)を現在時刻として記憶する(ステップ S 201 )。その時刻は、蓄積部 1 40Xに 記憶される。次に、制御部 1 1 OXは、制御部 1 1 OA乃至 1 1 ONで実行されている分析 対象プログラムの分析処理を開始する。一例として、制御部 1 1 OXは、制御部 1 1 ONに おける分析対象プログラムの実行によりアクセスされる共有資源に対するロックのそれ ぞれについて、以下に説明するステップ S202乃至 S21 1の処理を実行するものとす る。
[0042] 制御部 1 1 OXは、バス 1 30を介して、獲得すべきロックの所在等の情報(ロックの属 性)を取得する。これにより、制御部 1 1 0 Xは、ロックの獲得処理を開始した時間(開始
時刻)として、現在時刻を、蓄積部 1 40の対応する領域に記憶する(ステップ S202)。 次【こ、制御部 1 1 OXの CPU 1 "M Xのアクセス権獲得咅 [Π 1 6Xは、ハ *ス 1 30を介して、該 ロックの獲得を実行する(ステップ S204)。
[0043] この場合、制御部 1 1 0Xは、分析対象プログラムと同様にして、ロックを獲得する。制 御部 1 1 ONにおける、分析対象プログラムのプログラムリストを図 6Aおよび 6Bに示す。 以下、図 6A及び 6Bで示されるソースプログラムを分析対象とする処理を、例として示 す。
[0044] 最初に、制御部 1 1 ONにおいて、図 6Aおよび 6Bの分析対象プログラムが実行された 場合、図 7に示すよう Iこ、缶 II御部 1 1 0Nの CPU 1 1 1 Nにより、初期^ (匕を うプロセス PO ("- init"を指定して実行されるプロセス)と、それ以外のプロセス Ρ 1 (引数の指定なしで 実行されるプロセス)を実行し、メインメモリ 1 20に含まれる共有メモリ中に実現される口 ックを獲得する。該プロセス POおよび P1 は、クリティカルセクションへの排他的なァクセ ス(A)処理を繰り返す(図 6Aの 45行目では 1 000回)。図 6A及び 6Bで示されるプログ ラムは、 C言語で記述されており、 U NIXシステム V系の OS (Operating System)が提供 するシステムコールを呼び出して動作する。
[0045] 上記いずれのプロセスにおいても、制御部 1 1 ONの CPU 1 1 1 Nは、共有メモリの割り 当てを行し、(図 6の 21行目)、割り当てられた共有メモリセグメントを、自プロセスのアド レス空間に結び付ける(アタッチする)(図 6の 33行目)。そして、制御部 1 1 ONは、ァタ ツチしたメモリ空間中のロックに対して、獲得処理を行う(図 6の 46行目)。該プロセスは、 ロックを獲得すると、クリティカルセクションへのアクセスを行し、(図 6の 47行目)、ロック を解放する(図 6の 48行目)。
[0046] このほか、プロセス POは、共有メモリの作成(図 6の 21行目)やロックの初期化などの 処理も行う(図 6の 40乃至 43行目等)。
[0047] そこで、制御部 1 1 OXのアクセス権獲得部 1 1 6Xは、制御部 1 1 ONにおいて実行され る分析対象プログラムに記載される命令と同様の命令を発行して、ロック獲得処理を実 行する。即ち、図 6の例であれば、制御部 1 1 OXのアクセス権獲得部 1 1 6Xは; 21行目 と同様に、パス名を" sample"、プロジェクト IDを 'A'として、共有メモリを割り当て、 33行 目と同様に共有メモリを自分のアドレス空間にアタッチし、 46行目と同様にして、ロック を獲得する。
[0048] アクセス権獲得部 1 1 6Xにおいて、ロックを獲得する命令は、分析対象プログラムに
基づいて、例えば、所定のファイル(以降、ロック属性ファイルと呼ぶ)に予め登録される。 すなわち、該命令は、メインメモリ 120などに記憶され、プログラムの実行時に、制御部 110Xのキャッシュメモリ 112に読み出される。図 9Bにロック属性ファイルの一例を示す。 図 9Bに示すように、ロック属性ファイルには、ロック獲得のために必要な、一連の定義 や処理が記載される。制御部 110Xは、ロック属性ファイルに登録されている情報に基 づいて、ロック獲得命令を発行するために必要な変数定義などを行う。
[0049] 図 5に戻り、制御部 110Xの CPU111Xは、ロック獲得に成功すると、現在時刻を終 了時刻とする(ステップ S204)。制御部 110Xの CPU111Xの計測部 114Xは、ロック の獲得に要したロック獲得所要時間を、特徴量の一つとして、計測する(ステップ S 20 5)。即ち、計測部 114Xは、ステップ S202で記憶した開始時刻から、ロック獲得が終 了した時刻までを計測する。そして、 CPU111Xは、終了時刻とロック獲得所要時間を 蓄積部 140Xの対応する領域に記憶(ステップ S206)し、直ちにロックを開放する(ステ ップ S207)。ここで、ロック開放命令は、ロック獲得命令と同様にロック属性ファイルに 登録されている。制御部 110Xは、ロック属性ファイルからロック開放命令を読み出して、 ロックを開放する。
[0050] なお、本実施の形態では、上記のように UNIXシステム V系のシステムコールを呼び出 してクリティカルセクションを排他的にアクセスする C言語で記載のプログラムを分析対 象として説明した。しかし、それ以外の種類のプログラムを分析対象としてもよい。即ち、 C言語以外で記述されたプログラムに対しても、或は、 UNIXシステム V系以外のシステ ムコールを用いたプログラムに対しても、該プログラムが明示的に排他制御を行うプロ グラムであれば、本実施の形態に記載の方法でアクセス競合の状態を分析することが 可能である。
[0051] 次に、制御部 110Xは、現在処理中のロックについて、直近の所定の数の履歴のロッ ク(例えば最新の値を除いた、 M— 1件の履歴のロック)のロック獲得所要時間を蓄積 部 140Xから取得する。そして、制御部 110Xの CPU111Xの算出部 113Xは、これら M— 1件の履歴のロックのロック獲得所要時間に基づいて、ロック獲得所要時間として の通常値の範囲 (判定基準)を算出する(ステップ S208)。この通常値の範囲力 他の 特徴量となる。
[0052] このとき、通常値の範囲として、例えば、統計的に許容される範囲が求められる。例え ば、直近の M— 1件の口ック獲得所要時間について求められた平均値と標準偏差を用
いて、平均値と標準偏差の 2倍との差から平均値と標準偏差の 2倍との和までの範囲 が採用される。なお、蓄積されたロック獲得所要時間の履歴の件数が所定の数に満た ない場合は、所定の下限値と上限値を通常値の範囲として使用する。或は、所定の件 数のロック獲得所要時間の履歴が蓄積するまで、ステップ S208乃至 S21 1の処理を 省略してもよい。
[0053] 次に、制御部 1 1 OXの判定部 1 1 5Xは、ステップ S205で求めた、現在処理中のロッ クの最新のロック獲得所要時間が、ステップ S208で求められた通常値の範囲(判定基 準)内であるか否かを判定する(ステップ S209 )。該ロック獲得所要時間が通常値の範 囲内であった場合(ステップ S209 ; Yes)、制御部 1 1 OXの CPU 1 1 1 Xの半 IJ定部 1 1 5X は、最新の 1件のロック獲得所要時間に基づいて、該ロックを管理する共有資源への 競合は正常な状態であると判定する(ステップ S21 0)。一方、最新の 1件のロック獲得 所要時間が通常値の範囲(判定基準)外であった場合(ステップ S209 ; No)、判定部 " 5Xは、該ロックを管理する共有資源への競合は異常な状態であると判定する(ステ ップ S21 1 )。
[0054] 以上の処理が終了すると、 CPU 1 1 1 Xにより、現在時刻力、最終実行時刻から所定 の時間(例えば、時間 T)だけ経過したかが判定される(ステップ S 21 2 )。時間 Tが経過 していなければ(ステップ S21 2 ; No)、処理はステップ S202に戻る。一方、時間 Tが経 過している場合(ステップ S2 i2 ; Yes)は、処理が終了する。即ち、制御部 1 1 0Xは、時 間 T毎に、制御部 1 1 ONにおける分析対象プログラムの実行によりアクセスされる共有 資源に対するロックのそれぞれについて、上記で説明したステップ S202乃至 S21 1の 処理を実行する。制御部 1 1 0Xは、ロック属性ファイルに登録されている情報に基いて、 ロック獲得命令を発行するために必要な変数定義などを行い、時間 Tごとに、ロック属 性ファイルに登録されているロック獲得命令を実行する。
[0055] このように、本発明に係る実施の形態は、あるクリティカルセクションの競合状態を動 的に分析する。すなわち、固定的な判定基準を用いることなく、蓄積された過去のロック 獲得所要時間から統計的に、ロック獲得処理に異常が生じているかが判定される。クリ ティカルセクションへのアクセス状況は均一でないため、状況に応じて柔軟に異常を検 出することが必要である。本実施形態では、固定基準を用いないので、このような検出 が可能である。
[0056] また、本発明に係る実施の形態は、ロック変数のセット/リセットを不可分(アトミック)
に行うロック機構に限定されない。例えば、排他制御管理用のデーモンプロセスが、あ る特定の共有資源(クリティカルセクション)へのアクセスを一元管理するロック機構にも、 本発明に係る実施の形態は適用できる。例えば、共有資源へアクセスするために、該 排他制御管理用デーモンのポート番号を指定して、ロック獲得要求を送信する、ロック 機構をもつプログラムについて、以下の処理が行われる。すなわち、ロック属性ファイル に、該デーモンのポート番号、引き渡すデータ構造とその値、成功時、或は失敗時に返 却されるデータ構造とその値、等が対応付けて記憶される。制御部 1 1 oxは、該ロック 属性ファイルに登録されている内容に基づいて、ロックの獲得を実行する。
[0057] 以上、本発明の実施の形態について説明したが、本発明は、上述した実施形態に限 定されず、種々の変形及び応用が可能である。また、上述した実施形態の各構成要素 を自由に組み合わせることも可能である。
[0058] 例えば、図 5を参照して、上記実施の形態において、判定部 1 1 5Xは、競合の状態が 正常であるか否かを判定した後に(ステップ S21 0、S21 1 )、分析結果を、ロック獲得 所要時間、及び通常値の範囲とともに、ログファイルなどに出力してもよい。さらに、競 ' 合状態が異常であると判定された場合(ステップ S21 1 )は、ログファイルに出力した情 報と同様の情報が、モニタなどが備える表示部(図示せず)に、ダイァログボックスなど の表示とともに、出力されてもよい。ユーザは、表示部に出力された情報により、競合状 態が異常であることを通知される。ユーザは、処理を中断するか否かを選択してもよい。 図 8に示すように、制御部 1 1 0Xの CPU 1 1 I Xは、上記の処理を行う出力部 1 1 8Xを備 えてもよい。
[0059] また、図 5を参照して、上記実施の形態において、ステップ S203で獲得中のロックが デッドロック状態にある場合、ステップ S203は終了しない。このような状況を避けるため、 制御部 1 1 OXは、ステップ S 203を実行してから、現在時刻がステップ S 202で記録した 開始時刻から所定の時間 T2よりも長い時間が経過している場合に、口ック獲得処理を 強制的に終了してもよい。
[0060] 即ち、例えば、制御部 1 1 0Xのアクセス権獲得部 1 1 6Xは、定期的にロック獲得処理 を中断して、現在時刻がステップ S 202で記録した開始時刻から所定の時間 T2よりも 長い時間が経過しているか否かを判定する。現在時刻が、所定の時間 T2よりも長い時 間が経過していれば、アクセス権獲得部 1 1 6Xは、ロック獲得処理を終了してもよい。 一方 所定の時間 T2がまだ経過していない場合は、アクセス権獲得部 1 1 6Xは、ロック
獲得処理を再開してもよい。
[0061 ] このように、制御部 1 1 OXは、口ックを獲得できずに所定の時間 T2が経過した場合、 デッドロックが生じているものと判定し、競合分析処理をステップ S21 へと進めればよ い。また、直前のステップ S202で記録した最新の開始時刻は以後利用しないため、削 除してよい。
[0062] また、ロックを獲得できずに所定の時間 T2が経過した場合、制御部 1 1 0Xは、ログフ アイルへの分析結果を出力するときに、ロック獲得所要時間に替えて、デッドロックの可 能性があるという情報を出力してもよい。
[0063] (第 3の実施形態)
[0064] 上記実施の形態では、制御部" OXが実行するロック獲得の命令は、分析対象プロ グラムに基づいて、ロック属性ファイル等に登録されており、該ロック属性ファイルはメイ ンメモリ 1 20に記憶されている。しかしながら、制御部 1 1 0Xはまた、図 8に示すように、 ロック属性ファイルを分析対象プログラムのソースファイルから自動的に抽出する、ァク セス権情報抽出部 1 1 9Xを備えてもよい。
[0065] この場合、例えば、制御部 1 1 0Xは、まず、プログラム内で呼び出される、ロックに関 連するシステムコールについての基礎情報を予め所定のファイルに登録する(以降、口 ック基礎情報ファイルと呼ぶ)。制御部 1 1 OXの CPU 1 1 1のアクセス権情報抽出部 1 1 9Xは、該ロック基礎情報ファイルを参照して、既存の構文解析手法、或は、意味解析 手法などを、分析対象プログラムのソースファイルに適用する。これにより、アクセス権 情報抽出部 1 1 9Xは、口ック獲得に必要な一連の命令を抽出する。
[0066] 図 9Aは、図 6Aおよび 6Bに示すプログラムを分析対象とした場合の、ロック基礎情 報ファイルの例を示す。ロック基礎情報ファイルには、例えば、プログラムの記述言語、 OSのタイプ、ロック獲得命令、ロック解放命令、共有メモリの割当命令、共有メモリ空 間のアタッチ命令、共有メモリのデタツチ命令、などの情報が記載される。
[0067] 制御部 1 1 OXは、ロック基礎情報ファイルに記載されたロック獲得命令を参照して、ソ ースファイルを分析することにより、ソースファイルの 46行目:
"pthread_mutex_lock(&shmptr->mutex);" がロックを獲得している箇所であることを特 定する。さらに、制御部 1 1 OXは、ロックの獲得に利用される構造体 shmptrが 7行目: "typedef struct shared—mem"で定義されていること、及び、 33行目:
〃shmat(shmid,0,0)"で、値が代入されていることを特定する。
[0068] 制御部 1 1 OXは、ロック基礎情報ファイルを参照して、 shmat "システムコールが、第 1引数の指定する共有メモリセグメントを、コールしたプロセスのアドレス空間(即ち s mptrの指す空間)にアタッチすることを特定する。
[0069] また、制御部 1 1 OXは、 shmatシステムコールの第 1引数である、 int型変数、 shmid力
21行目: "shmget(ftok("sample"/A'), sizeof(shared_mem), IPG一 GREAT)"で、値を代 入されていることを特定する。制御部 1 1 OXは、ロック基礎情報ファイルを参照すること により、 shmgetの第 1引数である" ftok("sample ,'A')"が、共有メモリのキーを生成する こと、また、 shmgetが、該生成されたキ一を指定して、共有メモリセグメントを割り当てる ことを特定する。
[0070] このように制御部 1 1 OXは、ロック基礎情報ファイルに記載されているロック獲得命令 をソースファイルから抽出し、ロック獲得命令の引数の値をまず特定する。そして、制御 部 1 1 0Xは、該引数の値を得るために必要な処理を、順次ロック基礎情報ファイルを参 照しながら取得する。以上の処理により取得された情報は、例えば、図 9 Bに示される、 ロック J1†生フアイゾレとして出力される。
[0071 ] なお、同様のシステムコールを用いるプログラムが分析対象であれば、ロック基礎情 報ファイルが再利用されてもよい。
[0072] 上記実施の形態によれば、ロックの所在などを全てアプリケーションプログラムのソ一 スファイルから読取るため、ロックの数が非常に多い場合であっても、ロック競合分析の 手間は殆ど変わらない、という効果がある。
[0073] 上記実施の形態では、アクセス権獲得に要する時間を計測し、計測値から算出した 判定基準を参照してアクセス競合の状態を判定したが、判定に用いる計測値は、ロック 獲得所要時間に限定されない。また、上記実施形態では、所定の基準を、直近の所定 の件数の計測値から求めた統計値を基にして求めた範囲を採用したが、このような判 定基準に限定されない。
[0074] また、上記実施の形態では、競合分析装置 1 00において、種々の動作プログラムが キャッシュメモリ等に予め記憶されているものとして説明した。し力、し、上述の処理動作 を実行させるためのプログラムを、フレキシブルディスク、 CD— ROM (Compact Disk Read - Only Memory)、 MO (Magneto-Optical disk) , DVD(Digital Versatile Disk)、 CD - RW (Compact Disk ReWritable) . U S B(Universal Serial Bus)メモリ等のコンピュータ 読み取り可能な記録媒体に格納して配布し、該プログラムをコンピュータにインストール
することにより、上述の処理動作を実行する装置を構成してもよい。
[0075] また、コンピュータに通信インタフェース等を有する通信部が備えられてもよい。そして、 プログラムがインターネット等の通信ネットワーク上の所定のサーバ装置が有するデイス ク装置等に格納され、例えば、搬送波に重畳されて、通信部を介してコンピュータにダ ゥンロード等されてもよい。さらに、通信ネットワークを介してプログラムを転送しながら 実行することによつても、上述の処理が達成される。
[0076] また、上述の機能を、 OSが分担して実現する場合、又は OSとアプリケーションプログ ラムとの協働により実現する場合等は、 OS以外の部分のみを媒体に格納して配布して もよく、また、コンピュータにダウンロード等してもよい。
[0077] また、上記実施の形態に係る競合分析装置 1 00は、専用のハードウェアによっても 実現することもできる。
[0078] この出願は、 2008年 4月 4日に出願された日本出願特願 2008— 0981 45を基礎 とする優先権を主張し、その開示の全てをここに取り込む。
Claims
14
請求の範囲
共有資源に対するアクセス競合の状態を判定する競合分析装置であって、 分析対象プログラムに従って、該共有資源をアクセスする、実行手段と、 前記共有資源をアクセスするアクセス権を獲得する、アクセス権獲得手段と、 前記アクセス権獲得部による、前記アクセス権の獲得に関して得られる特徴 量を検出する、検出手段と、
前記特徴量に基づいて、前記共有資源に対するアクセス競合の状態を判定 する、判定手段と、
を備えることを特徴とする競合分析装置。
前記分析対象プログラムは、前記共有資源を排他的にアクセスする指示を含 み、 '
前記アクセス権は、前記共有資源を排他的にアクセスし、
前記検出手段は、
前記アクセス権獲得部力 前記アクセス権の獲得に要したアクセス権獲得 時間を計測する、計測手段と、
前記計測されたアクセス権獲得時間を蓄積する、蓄積手段と、
前記蓄積されたアクセス権獲得時間に基づいて、判定基準を算出する、算 出手段を含み、
前記特徴量は、前記算出された判定基準と、前記計測されたアクセス権獲得 時間とを含む
ことを特徴とする請求項 1に記載の競合分析装置
前記蓄積手段は、所定の件数のアクセス権獲得時間を蓄積し、
前記算出手段は、前記蓄積された所定の件数のアクセス権獲得時間に基づ いて、アクセス権獲得時間の許容範囲として、前記判定基準を算出し、 前記判定手段は、前記計測された最新のアクセス権獲得時間が前記許容範 囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると 判定し、該計測された最新のアクセス権獲得時間が該許容範囲に含まれない 場合、該共有資源へのアクセス競合の状態は異常であると判定する、
ことを特徴とする請求項 2に記載の競合分析装置
前記分析対象プログラムのソースファイルを解析し、前記共有資源をアクセス
15
するアクセス権を獲得する、アクセス権獲得命令を抽出する、アクセス権情報抽 出手段をさらに備え、
前記アクセス権獲得手段は、前記抽出されたアクセス権獲得命令に基づいて、 アクセス権を獲得する、
ことを特徴とする請求項 2に記載の競合分析装置。
[5] 前記判定手段が判定する結果を、ログファイル、および、表示用画面、の少な 〈とも 1つに出力する、出力手段をさらに備える、
ことを特徴とする請求項 2に記載の競合分析装置。
[6] 前記アクセス権獲得手段は、前記アクセス権の獲得を開始してから、所定の 時間が経過した場合に、前記アクセス権の獲得を中止する、
ことを特徴とする請求項 2に記載の競合分析装置。
[7] 共有資源に対するアクセス競合の状態を判定する競合分析方法であって、 分析対象プログラムに従って、該共有資源をアクセスする、アクセス実行ス亍 ップと、
前記共有資源をアクセスするアクセス権を獲得する、アクセス権獲得ステップ と、
前記アクセス権の獲得に関して得られる特徴量を検出する、検出ステップと、 前記特徴量に基づいて、前記共有資源に対するアクセス競合の状態を判定 する、判定ステップと、
を備えることを特徴とする競合分析方法。
[8] 前記分析対象プログラムは、前記共有資源を排他的にアクセスする指示を含 み、
前記アクセス権は、前記共有資源を排他的にアクセスし、
前記アクセス権の獲得に要したアクセス権獲得時間を計測する、計測ステップ と、 ' 前記計測されたアクセス権獲得時間を蓄積する、蓄積ステップと、
前記蓄積されたアクセス権獲得時間に基づいて、判定基準を算出する、算出 ステップと、
をさらに含み、
前記特徴量は、前記算出された判定基準と、前記計測されたアクセス権獲得
時間とを含む、
ことを特徴とする請求項 7に記載の競合分析方法。
[9] 前記蓄積ステップは、所定の件数のアクセス権獲得時間を蓄積し、
前記算出ステップは、前記蓄積された所定の件数のアクセス権獲得時間に基 づいて、アクセス権獲得時間の許容範囲として、前記判定基準を算出し、 前記判定ステップは、前記計測された最新のアクセス権獲得時間が前記許容 範囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であ ると判定し、該計測された最新のアクセス権獲得時間が該許容範囲に含まれな い場合、該共有資源へのアクセス競合の状態は異常であると判定する、 ことを特徴とする請求項 8に記載の競合分析方法。
[10] 前記分析対象プログラムのソースファイルを解析し、前記共有資源をアクセス するアクセス権を獲得する、アクセス権獲得命令を抽出する、アクセス権情報抽 出ステップをさらに備え、
前記アクセス権獲得ステップは、前記抽出されたアクセス権獲得命令に基づ いて、アクセス権を獲得する、
ことを特徴とする請求項 8に記載の競合分析方法。
[1 1 ] 前記判定ステップにより判定された結果を、ログファイル、及び、表示用画面、 の少なくとも 1つに出力する、出力ステップをさらに備える、
ことを特徴とする請求項 8に記載の競合分析方法。
[12] 前記ァクセズ権獲得ステップは、前記アクセス権の獲得を開始してから、所定 の時間が経過した場合に、前記アクセス権の獲得を中止する、
ことを特徴とする請求項 8に記載の競合分析方法。
[13] コンピュータに、共有資源に対するアクセス競合の状態を判定させるプログラ 厶であって、コンピュータに、
分析対象プログラムに従って、該共有資源をアクセスする、アクセス実行処理 と、
j記共有資源をアクセスするアクセス権を獲得する、アクセス権獲得処理と、 前記アクセス権の獲得に関して得られる特徴量を検出する、検出処理と、 前記特徴量に基づいて 前記共有資源に対するアクセス競合の状態を判定 する、判定処理と、
17
を実行させることを特徴とするプログラム。
[14] 前記分析対象プログラムは、共有資源を排他的にアクセスする指示を含み、 前記アクセス権は、前記共有資源を排他的にアクセスし、
前記アクセス権の獲得に要したアクセス権獲得時間を計測する、計測処理 と、
前記計測されたアクセス権獲得時間を蓄積する、蓄積処理と、
前記蓄積されたアクセス権獲得時間に基づいて、判定基準を算出する、算出 処理と、
をさらに含み、
前記特徴量は、前記算出された判定基準と、前記計測されたアクセス権獲得 時間とを含む、
ことを特徴とする請求項 1 3に記載のプログラム。 '
[15] 前記蓄積処理は、所定の件数のアクセス権獲得時間を蓄積し、
前記算出処理は、前記蓄積された所定の件数のアクセス権獲得時間に基づ いて、アクセス権獲得時間の許容範囲として、前記判定基準を算出し、 前記判定処理は、前記計測された最新のアクセス権獲得時間が前記許容範 囲に含まれる場合、前記共有資源に対するアクセス競合の状態は正常であると 判定し、該計測された最新のアクセス権獲得時間が該許容範囲に含まれない 場合、該共有資源へのアクセス競合の状態は異常であると判定する、
ことを特徴とする請求項 1 4に記載のプログラム。
[16] コンピュータに、前記分析対象プログラムのソースファイルを解析し、前記共有 資源をアクセスするアクセス権を獲得する、 クセス権獲得命令を抽出する、ァ クセス権情報抽出処理をさらに実行させ、
前記アクセス権獲得処理は、前記抽出されたアクセス権獲得命令に基づいて、 アクセス権を獲得する、
ことを特徴とする請求項 1 4に記載のプログラム。
[17] コンピュータに、前記判定処理により判定された結果を、ログファイル、および、 表示用画面、の少なくとも 1つに出力する、出力処理をさらに実行させる、 ことを特徴とする請求項 1 4に記載のプログラム。
[18] 前記アクセス権獲得処理は、前記アクセス権の獲得を開始してから、所定の
時間が経過した場合に、前記アクセス権の獲得を中止する、 ことを特徴とする請求項 1 4に記載のプログラム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008098145A JP2009251871A (ja) | 2008-04-04 | 2008-04-04 | 競合分析装置、競合分析方法、およびプログラム |
JP2008-098145 | 2008-04-04 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2009123343A1 true WO2009123343A1 (ja) | 2009-10-08 |
Family
ID=41135692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2009/057034 WO2009123343A1 (ja) | 2008-04-04 | 2009-03-31 | 競合分析装置、競合分析方法、及びプログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP2009251871A (ja) |
WO (1) | WO2009123343A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8510281B2 (en) * | 2008-12-18 | 2013-08-13 | Sap Ag | Ultimate locking mechanism |
JP5541355B2 (ja) * | 2010-03-18 | 2014-07-09 | 富士通株式会社 | マルチコアプロセッサシステム、調停回路制御方法、制御方法、および調停回路制御プログラム |
JP6263940B2 (ja) * | 2013-10-08 | 2018-01-24 | 株式会社リコー | 排他制御プログラム、情報処理装置、排他制御方法 |
JP5696807B2 (ja) * | 2014-05-08 | 2015-04-08 | 富士通株式会社 | マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム |
JP6895719B2 (ja) * | 2016-06-24 | 2021-06-30 | 日立Astemo株式会社 | 車両制御装置 |
JP6666216B2 (ja) * | 2016-08-31 | 2020-03-13 | 日立オートモティブシステムズ株式会社 | 電子制御装置、解析システム |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01125637A (ja) * | 1987-11-10 | 1989-05-18 | Nippon Telegr & Teleph Corp <Ntt> | データアクセス制御方法 |
JPH03266170A (ja) * | 1990-03-16 | 1991-11-27 | Nec Corp | ロック機構 |
JPH1185574A (ja) * | 1997-09-11 | 1999-03-30 | Nec Corp | ロック動作測定方法 |
JP2001084235A (ja) * | 1999-09-10 | 2001-03-30 | Nec Corp | ロック粒度統計情報を利用した排他制御方法及びプログラムを記録した機械読み取り可能な記録媒体 |
JP2005339437A (ja) * | 2004-05-31 | 2005-12-08 | Nec Corp | 性能ボトルネック解析システム及び性能ボトルネック解析方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01125537A (ja) * | 1987-11-10 | 1989-05-18 | Fuji Heavy Ind Ltd | 内燃機関の燃料噴射制御装置 |
JPH0354660A (ja) * | 1989-07-21 | 1991-03-08 | Nec Corp | マルチプロセッサシステムにおける共有メモリ管理方式 |
JPH04330529A (ja) * | 1991-05-02 | 1992-11-18 | Mitsubishi Electric Corp | 共有資源の管理方式 |
JPH10257127A (ja) * | 1997-03-06 | 1998-09-25 | Omron Corp | 無線データ伝送装置 |
US20030023716A1 (en) * | 2001-07-25 | 2003-01-30 | Loyd Aaron Joel | Method and device for monitoring the performance of a network |
FR2862171B1 (fr) * | 2003-11-06 | 2006-04-28 | Cegetel Groupe | Procede securise d'etablissement d'une communication ou d'une transaction entre un terminal et un element d'une infrastructure reseau |
-
2008
- 2008-04-04 JP JP2008098145A patent/JP2009251871A/ja active Pending
-
2009
- 2009-03-31 WO PCT/JP2009/057034 patent/WO2009123343A1/ja active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01125637A (ja) * | 1987-11-10 | 1989-05-18 | Nippon Telegr & Teleph Corp <Ntt> | データアクセス制御方法 |
JPH03266170A (ja) * | 1990-03-16 | 1991-11-27 | Nec Corp | ロック機構 |
JPH1185574A (ja) * | 1997-09-11 | 1999-03-30 | Nec Corp | ロック動作測定方法 |
JP2001084235A (ja) * | 1999-09-10 | 2001-03-30 | Nec Corp | ロック粒度統計情報を利用した排他制御方法及びプログラムを記録した機械読み取り可能な記録媒体 |
JP2005339437A (ja) * | 2004-05-31 | 2005-12-08 | Nec Corp | 性能ボトルネック解析システム及び性能ボトルネック解析方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2009251871A (ja) | 2009-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8230201B2 (en) | Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system | |
US8191069B2 (en) | Method of monitoring performance of virtual computer and apparatus using the method | |
US9594582B2 (en) | Detection and management of dynamic migration of virtual environments | |
KR100898315B1 (ko) | 인핸스드 런타임 호스팅 | |
US8225120B2 (en) | Wake-and-go mechanism with data exclusivity | |
US8423997B2 (en) | System and method of controlling virtual machine | |
US8732683B2 (en) | Compiler providing idiom to idiom accelerator | |
US8250396B2 (en) | Hardware wake-and-go mechanism for a data processing system | |
CN102222015B (zh) | 检测多线程程序中的死锁的方法及系统 | |
JP5440935B2 (ja) | Itシステムの挙動測定・解析システム、およびその方法 | |
KR101393992B1 (ko) | 정보 처리 장치, 정보 처리 방법, 및 프로그램을 기록한 컴퓨터 판독가능한 기록 매체 | |
US20090199029A1 (en) | Wake-and-Go Mechanism with Data Monitoring | |
US9875141B2 (en) | Managing pools of dynamic resources | |
US20110173630A1 (en) | Central Repository for Wake-and-Go Mechanism | |
US20110072437A1 (en) | Computer job scheduler with efficient node selection | |
US20100293341A1 (en) | Wake-and-Go Mechanism with Exclusive System Bus Response | |
WO2009123343A1 (ja) | 競合分析装置、競合分析方法、及びプログラム | |
WO2011045119A1 (en) | Managing availability of a component having a closed address space | |
JP2010086364A (ja) | 情報処理装置、動作状態監視装置および方法 | |
JP2006277115A (ja) | 異常検出プログラムおよび異常検出方法 | |
US20090158294A1 (en) | Dynamic critical-path recalculation facility | |
EP2113859A1 (en) | Computer, operation rule application method, and operating system | |
JP4992740B2 (ja) | マルチプロセッサシステム、障害検出方法および障害検出プログラム | |
US9864637B2 (en) | Adaptable software resource managers based on intentions | |
JP2008107875A (ja) | ジョブ制御装置及びジョブ制御プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 09728682 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 09728682 Country of ref document: EP Kind code of ref document: A1 |