WO2010038280A1 - 仮想計算機システム及びデッドロック解除方法 - Google Patents
仮想計算機システム及びデッドロック解除方法 Download PDFInfo
- Publication number
- WO2010038280A1 WO2010038280A1 PCT/JP2008/067796 JP2008067796W WO2010038280A1 WO 2010038280 A1 WO2010038280 A1 WO 2010038280A1 JP 2008067796 W JP2008067796 W JP 2008067796W WO 2010038280 A1 WO2010038280 A1 WO 2010038280A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- deadlock
- virtual machine
- program
- lock word
- instruction
- Prior art date
Links
Images
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
- G06F9/524—Deadlock detection or avoidance
Abstract
ハイパーバイザ1が、ゲストOS2の2つのCPUのそれぞれについて同一の命令アドレスが所定時間継続したかを判断し、2つのCPUのそれぞれについて同一の命令アドレスが所定時間継続したと判断した場合に、ゲストOS2内でデッドロックが発生したと推定し、デッドロックが発生したと推定されたときに、ゲストOS2の命令をCPU毎に交互に1ステップずつ実行して、ゲストOS2内でデッドロックが発生したことを確定する。そして、ハイパーバイザ1が、デッドロックを発生させたプログラムを特定し、管理OS3に対して、特定されたプログラムの停止を指示することによって、ゲストOS2内におけるデッドロックを解除する。
Description
本発明は、仮想計算機システム及びデッドロック解除方法に関し、特に、仮想計算機において発生するデッドロックを確実に検出して解消する仮想計算機システム及びデッドロック解除方法に関する。
一般に、対称型マルチプロセッサ(SMP:Symmetric Multiple Processor)等のマルチCPU(Central Processing Unit:中央処理装置)で動作するOSカーネル、及び、OSカーネル上で動作するアプリケーションプログラム等の一般のプログラムは、他のCPUの動作をシリアライズ処理しながら、目的の処理を行う。シリアライズ処理は、1つの処理をCPUと他のCPUとが同時に実行することがないように排他制御する処理である。例えば、シリアライズ処理は、SMPの各CPUから参照・更新可能なメモリに、自CPUの制御権をロックワードに書き込んでロックワードを獲得することによって実現される。すなわち、メモリに自CPUに対応する制御権がロックワードに書き込まれている間は、自CPUの処理と他のCPUの処理とが同時に実行されない。上記ロックワードは、例えば、細分化され、プログラムが必要とする資源(例えば、注文データベースと在庫データベース)毎に用意される。また、プログラムが複数のロックワードを獲得しながら動作する場合もある。
なお、定期的に収集されたCPUの動作情報に基づいて暴走プロセスを検知し、暴走プロセスを検知した場合に、このプロセスを強制終了させる計算機システムが提案されている。
特開平10-269110号公報
複数のロックワードを獲得しながら動作するプログラムの実行時に、プログラミングミスにより、デッドロックが発生することがある。デッドロックは、プログラムが他のプログラムが獲得対象とするロックワードを獲得している状態である。
図9及び図10を参照して、デッドロックの発生を説明する。各々がロックワードA及びBの獲得を必要とする、プログラムXとプログラムYという2つのプログラムが存在するとする。図9に示すステップS1乃至S9の処理がプログラムXの処理であり、図10に示すステップS11乃至S19の処理がプログラムYの処理である。図9に示すように、プログラムXは、ロックワードAを参照し(ステップS1)、ロックワードAが空きであるか(制御権が書き込まれていないか)を判断する(ステップS2)。プログラムXが、ロックワードAが空きでないと判断した場合は、ステップS1に戻る。プログラムXが、ロックワードAが空きであると判断した場合は、プログラムXは、ロックワードAに制御権を書き込む(ステップS3)。プログラムXがロックワードAに制御権を書き込むことによって、プログラムXはロックワードAを獲得する。
続いて、プログラムXが、ロックワードAの獲得に成功したかを判断する(ステップS4)。プログラムXが、ロックワードAの獲得に成功しないと判断した場合はステップS1に戻る。プログラムXが、ロックワードAの獲得に成功したと判断した場合は、プログラムXは、ロックワードBを参照し(ステップS5)、ロックワードBが空きであるかを判断する(ステップS6)。プログラムXが、ロックワードBが空きでないと判断した場合は、ステップS5に戻る。プログラムXが、ロックワードBが空きであると判断した場合は、プログラムXは、ロックワードBに制御権を書き込む(ステップS7)。プログラムXがロックワードBに制御権を書き込むことによって、プログラムXはロックワードBを獲得する。続いて、プログラムXが、ロックワードBの獲得に成功したかを判断する(ステップS8)。プログラムXが、ロックワードBの獲得に成功しないと判断した場合はステップS5に戻る。プログラムXが、ロックワードBの獲得に成功したと判断した場合は、プログラムXは、目的の処理を実行する(ステップS9)。
一方、図10に示すように、プログラムYは、ロックワードBを参照し(ステップS11)、ロックワードBが空きであるか(制御権が書き込まれていないか)を判断する(ステップS12)。プログラムYが、ロックワードBが空きでないと判断した場合は、ステップS11に戻る。プログラムYが、ロックワードBが空きであると判断した場合は、プログラムYは、ロックワードBに制御権を書き込む(ステップS13)。プログラムYがロックワードBに制御権を書き込むことによって、プログラムYはロックワードBを獲得する。
続いて、プログラムYが、ロックワードBの獲得に成功したかを判断する(ステップS14)。プログラムYが、ロックワードBの獲得に成功しないと判断した場合はステップS11に戻る。プログラムYが、ロックワードBの獲得に成功したと判断した場合は、プログラムYは、ロックワードAを参照し(ステップS15)、ロックワードAが空きであるかを判断する(ステップS16)。プログラムYが、ロックワードAが空きでないと判断した場合は、ステップS15に戻る。プログラムYが、ロックワードAが空きであると判断した場合は、プログラムYは、ロックワードBに制御権を書き込む(ステップS17)。プログラムYがロックワードAに制御権を書き込むことによって、プログラムYはロックワードAを獲得する。続いて、プログラムYが、ロックワードAの獲得に成功したかを判断する(ステップS18)。プログラムYが、ロックワードAの獲得に成功しないと判断した場合はステップS15に戻る。プログラムYが、ロックワードAの獲得に成功したと判断した場合は、プログラムYは、目的の処理を実行する(ステップS19)。
上記図9、図10に示すプログラムX,Yの処理において、プログラムXが図9のステップS1乃至4の処理によってロックワードAを獲得し、プログラムYが図10のステップS11乃至14の処理によってロックワードBを獲得したものとする。その後、プログラムXはロックワードBを獲得しようとし、プログラムYはロックワードAを獲得しようとするが、相手プログラムが自プログラムが獲得しようとするロックワードを獲得している状態であるデッドロックが発生しているので、自プログラムが獲得しようとするロックワードは空きにならない。具体的には、プログラムXは、図9のステップS6においてロックワードBが空きでないと判断するので、プログラムXは、ステップS5とS6の処理を繰り返す(ループする)。また、プログラムYは、図10のステップS16においてロックワードAが空きでないと判断するので、プログラムYは、ステップS15とS16の処理を繰り返す。すなわち、デッドロックの発生によって、プログラムX、Y双方の処理がループして進まなくなる。
デッドロックを発生させないためには、ロックワードを獲得する順番を事前に決定して、プログラムは獲得順番を遵守することが必要であるが、ロックワードの獲得順番は紳士協定であるので、プログラムミスによりデッドロックが容易に発生する。
また、問題となるプログラムのロックワード獲得処理がほぼ同時に走行しなければ、デッドロック状態とならないため、デッドロックをプログラムのテストで検出することは難しい。その結果、実際の業務中にデッドロックが発生して、システムを止めてしまうという大きな問題となる場合がある。
なお、デッドロックが発生してしまった場合、一方のプログラムをkillする(停止させる)などの対処が必要であるが、どのプログラムがデッドロックを発生させているかを外部から特定するのは困難であり、ダンプを採取するなど、システムを停止する必要がある。
本発明は、デッドロックを容易に自動で検出し、検出したデッドロックを解消することができる仮想計算機システムの提供を目的とする。
また、本発明は、デッドロックを容易に自動で検出し、検出したデッドロックを解消することができるデッドロック解除情報の提供を目的とする。
本仮想計算機システムは、仮想計算機と前記仮想計算機を制御する仮想計算機モニタとを備える仮想計算機システムであって、前記仮想計算機モニタが、前記仮想計算機の2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したかを判断し、前記2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したと判断した場合に、前記仮想計算機内で、プログラムが他のプログラムが獲得対象とするロックワードを獲得している状態であるデッドロックが発生したと推定するデッドロック発生推定手段と、前記デッドロック発生推定手段が、前記デッドロックが発生したと推定した場合に、前記仮想計算機の命令を前記仮想計算機の制御手段毎に交互に1ステップずつ実行して、前記仮想計算機内でデッドロックが発生したことを確定するデッドロック発生確定手段と、前記デッドロックを発生させたプログラムを特定するプログラム特定手段と、前記特定されたプログラムを停止することによって前記仮想計算機内におけるデッドロックを解除するデッドロック解除手段とを備える。
また、本デッドロック解除方法は、仮想計算機と前記仮想計算機を制御する仮想計算機モニタとを備える仮想計算機システムにおける、デッドロック解除方法であって、前記仮想計算機モニタが、前記仮想計算機の2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したかを判断し、前記2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したと判断した場合に、前記仮想計算機内で、プログラムが他のプログラムが獲得対象とするロックワードを獲得している状態であるデッドロックが発生したと推定し、前記仮想計算機モニタが、前記デッドロックが発生したと推定した場合に、前記仮想計算機モニタが、前記仮想計算機の命令を前記仮想計算機の制御手段毎に交互に1ステップずつ実行して、前記仮想計算機内でデッドロックが発生したことを確定し、前記仮想計算機モニタが、前記特定されたプログラムを停止することによって前記仮想計算機内におけるデッドロックを解除する。
本仮想計算機システム及び本デッドロック解除方法は、仮想計算機モニタが、仮想計算機の2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続した場合に仮想計算機内でデッドロックが発生したと推定する。また、上記仮想計算機モニタが、仮想計算機の命令を制御手段毎に交互に1ステップずつ実行して、上記仮想計算機内でデッドロックが発生したことを確定し、デッドロックを発生させたプログラムを停止して、仮想計算機内におけるデッドロックを解除する。従って、本仮想計算機システム及び本デッドロック解除方法によれば、仮想計算機内におけるデッドロックを容易に自動で検出し、検出したデッドロックを解消することができる。
1 ハイパーバイザ
2 ゲストOS
3 管理OS
4 ドライバOS
11 デッドロック発生推定部
12 デッドロック発生確定部
13 デッドロック発生プログラム特定部
14 デッドロック解除部
31 デッドロックプログラム終了部
32 ログ採取部
40 データ記憶部
41 ネットワーク
111 命令アドレス継続判定データ記憶部
121 ロックワード記憶部
2 ゲストOS
3 管理OS
4 ドライバOS
11 デッドロック発生推定部
12 デッドロック発生確定部
13 デッドロック発生プログラム特定部
14 デッドロック解除部
31 デッドロックプログラム終了部
32 ログ採取部
40 データ記憶部
41 ネットワーク
111 命令アドレス継続判定データ記憶部
121 ロックワード記憶部
図1は、本実施形態の仮想計算機システムの全体構成例を示す図である。図1に示す仮想計算機システムは、ゲストOS(Operating System)2、管理OS3、ドライバOS4といった、情報処理装置上に構築された仮想計算機(仮想マシン)と、仮想計算機を制御するハイパーバイザ(Hypervisor)1とを備える。
ハイパーバイザ1は、仮想計算機システム全体を制御する仮想計算機モニタである。ハイパーバイザ1は、仮想マシンとハードウェアとの間の階層であり、例えば、仮想マシン専用のカーネルを用意することにより実現することができる。ハイパーバイザ1は、ゲストOS(Operating System)2、管理OS3、ドライバOS4のディスパッチや、各OSが実行する特権命令のエミュレーション、CPUに関するハードウェア資源の全体的なハードウェア制御等を行う。すなわち、ハイパーバイザ1は、ハードウェア資源としての物理CPU(図示を省略)をゲストOS2等に配分することによって、CPUの仮想化を行う。ハイパーバイザ1は、本実施形態に特有の処理として、ゲストOS2内でデッドロックが発生したことを検出し、このデッドロックを発生させたプログラムの停止要求を管理OS3に送信して管理OSにこのプログラムを停止させることによって、ゲストOS2内におけるデッドロックを解除する。
ゲストOS2は、仮想マシン構成上、実I/O(Input/Output) ドライバを持たないOSである。ゲストOS2は、ハイパーバイザ1によって配分された複数のCPU上で動作する。なお、本実施形態においては、ゲストOS2は、例えば、CPU0、CPU1という2つのCPU上で動作するものとする。ゲストOS2は、図2中の矢印に示すように、フロントエンドドライバ200、ハイパーバイザ1、バックエンドドライバ201を介してドライバOS4にI/Oデータを渡し、ドライバOS4に実I/O処理(例えば、図1、図2に示すデータ記憶部40、図1に示すネットワーク41へのアクセス処理)を実行させる。ゲストOS2からI/Oデータを受けたドライバOS4は、実I/Oドライバ202によってデータ記憶部40等への実I/O処理を実行する。管理OS3は、仮想計算機システムのboot時に自動で起動され、ドライバOS4やゲストOS2の制御(起動、停止処理等)を実行する。また、管理OS3は、ゲストOS2内で動作するプログラムを管理する管理装置としての機能を有する。具体的には、管理OS3は、本実施形態に特有の処理として、デッドロックを発生させたプログラムの停止要求をハイパーバイザ1から受け取って、このプログラムを停止する。また、管理OS3は、デッドロックを発生させたプログラムの情報をログする。
図3は、本実施形態の仮想計算機システムの機能ブロック図の例である。図3中に示すハイパーバイザ1は、デッドロック発生推定部11、デッドロック発生確定部12、デッドロック発生プログラム特定部13、デッドロック解除部14を備える。
ハイパーバイザ1は、周知のように、図示を省略するレジスタやメモリを参照して、ゲストOS2が実行しているプログラムの命令を特定する機能を有する。また、ゲストOS2内でデッドロックが発生した場合、ゲストOS2が実行しているプログラムの処理はループ状態に陥るため、同一の命令アドレスが継続して実行される。そこで、デッドロック発生推定部11は、ゲストOS2がCPU0、CPU1上で実行しているプログラムの命令アドレスを取得し、CPU0、CPU1のそれぞれについて、同一の命令アドレスが所定時間継続したかを判断し、CPU0、CPU1のそれぞれについて同一の命令アドレスが所定時間継続したと判断される場合に、ゲストOS2内でデッドロックが発生したと推定する。
具体的には、デッドロック発生推定部11は、図3中に示す命令アドレス継続判定データ記憶部111内の命令アドレス継続判定データに、各CPUが実行中の命令の命令アドレスと上記命令の実行開始時刻とを格納する。そして、デッドロック発生推定部11は、格納された命令の実行開始時刻から現在時刻までの経過時間と所定時間とを比較することによって、同一の命令アドレスが所定時間継続したかを判断する。
デッドロック発生確定部12は、デッドロック発生推定部11によって、デッドロックが発生したと推定されたときに、ゲストOS2が実行しているプログラムの命令をゲストOS2が動作しているCPU毎に交互に1ステップずつ実行し、この命令の実行結果に基づいて、ゲストOS2内でデッドロックが発生したことを確定、すなわち、デッドロックの発生を検出する。具体的には、デッドロック発生確定部12は、プログラムをステップ実行する周知のデバッガであるGDB等を用いて、CPU0が実行するプログラムの処理とCPU1が実行するプログラムの処理とを交互に1ステップずつ実行する。デッドロック発生確定部12は、上記プログラムの実行中に、CPU(CPU0又はCPU1)がロックワードの判定命令を実行したかを判断する。ロックワードの判定命令は、例えば図9のステップS1乃至S4を参照して前述したような、ロックワードの参照処理、ロックワードが空きであるかの判断処理、ロックワードへの制御権の書き込み処理、ロックワードの獲得に成功したかの判断処理を実行する命令である。
デッドロック発生確定部12が、CPUがロックワードの判定命令を実行したと判断した場合、デッドロック発生確定部12は、ロックワード記憶用データをロックワード記憶部121に記憶する。ロックワード記憶用データは、CPUに対応付けられた、ロックループする命令の命令アドレスと、ロックワードの判定命令の実行後におけるロックワードへの書き込み内容(制御権)を示すデータである。具体的には、CPU0が実行するロックワードの判定命令の実行後におけるロックワードの書き込み内容は、このロックワードの判定命令において行われるロックワードの参照処理、ロックワードが空きであるかの判断処理において、このロックワードが空きでないと判断された場合、すなわち、既にCPU1が実行するプログラムがこのロックワードに制御権を書き込んでいた場合には、このロックワードに既に書き込まれている制御権である。また、このロックワードに空きがあると判断された場合には、CPU0が実行するロックワードの判定命令の実行後におけるロックワードの書き込み内容は、CPU0が実行するプログラムがこのロックワードに書き込む自分の制御権である。
また、デッドロック発生確定部12は、同一のCPUについて、第2回目のロックワードの判定命令を実行したと判断した場合、ロックワード記憶部121から、そのCPUに対応する、第1回目のロックワードの判定命令後に記憶されたロックワード記憶用データを抽出する。そして、デッドロック発生確定部12は、第2回目のロックワードの判定命令の実行後におけるロックワードへの書き込み内容が上記抽出された第1回目のロックワードの判定命令後に記憶されたロックワード記憶用データに含まれるロックワードへの書き込み内容と同じであるか、すなわち、ロックワードへの書き込み内容が変化しないかを判断する。デッドロック発生確定部12が、第2回目のロックワードの判定命令の実行後におけるロックワードへの書き込み内容が第1回目のロックワードの判定命令後に記憶されたロックワード記憶用データに含まれるロックワードへの書き込み内容と同じであって、ロックワードへの書き込み内容が変化しないと判断した場合、デッドロック発生確定部12は、ゲストOS2内でデッドロックが発生したことを確定する。ロックワードへの書き込み内容が変化しないということは、CPUが実行するロックワードの判定処理において行われるロックワードの参照処理及びロックワードが空きであるかの判断処理がループしていることを意味するからである。
デッドロック発生確定部12が、第2回目のロックワードの判定命令の実行後におけるロックワードへの書き込み内容が第1回目のロックワードの判定命令後に記憶されたロックワード記憶用データに含まれるロックワードへの書き込み内容と同じでないと判断した場合、すなわち、ロックワードへの書き込み内容が変化したと判断した場合、デッドロック発生確定部12は、デッドロックが発生していないと判断して、処理を終了する。ロックワードへの書き込み内容が変化したということは、ロックワードの解放と獲得とが繰り返されているだけであって、デッドロックが発生しているということではないことを意味するからである。
デッドロック発生プログラム特定部13は、デッドロック発生確定部12によってデッドロックが発生したことが確定された場合に、デッドロックを発生させているプログラムを特定する。具体的には、デッドロック発生プログラム特定部13は、ゲストOS2が実行している命令を遡って探索することによって、CPU0が実行するプログラムのうちデッドロックを発生させているプログラム(第1のデッドロックプログラム)と、CPU1が実行するプログラムプログラムのうちデッドロックを発生させているプログラム(第2のデッドロックプログラム)とを特定する。
デッドロック解除部14は、デッドロック発生プログラム特定部13によって特定されたプログラムを停止することによってゲストOS2内におけるデッドロックを解除する。具体的には、デッドロック解除部14が、管理OS3が備えるデッドロックプログラム終了部31に対して、上記デッドロック発生プログラム特定部13によって特定されたプログラムの停止を指示、すなわち、プログラムの停止要求を送信して、このプログラムを停止させる。なお、デッドロック解除部14は、例えば、上記第1のデッドロックプログラムと第2のデッドロックプログラムのうち、いずれか一方のデッドロックプログラムの停止を指示するようにしてもよい。
管理OS3は、デッドロックプログラム終了部31、ログ採取部32を備える。デッドロックプログラム終了部31は、ハイパーバイザ1が備えるデッドロック解除部14の指示に従って、ゲストOS2内でデッドロックを発生させているプログラムを停止する。具体的には、デッドロックプログラム終了部31が、ゲストOS2へコンソールを接続し、ハイパーバイザ1から送信されたプログラムの停止要求に含まれるプログラム名に対応するプログラムを停止(kill)させる。このプログラムが停止することによって、ゲストOS2内のデッドロックが解除される。ログ採取部32は、上記ハイパーバイザ1が備えるデッドロック解除部14が停止を指示したプログラム(デッドロックを発生させているプログラム)のログ情報を所定の記憶手段に記憶する。ログ採取部32がデッドロックを発生させているプログラムのログ情報を記憶することによって、このログ情報をプログラムの改修に利用することができる。
図4は、ハイパーバイザが備える命令アドレス継続判定データ記憶部内の命令アドレス継続判定データのデータ構成例を説明する図である。命令アドレス継続判定データは、ゲストOS2が動作している各CPUが実行中の命令の命令アドレスと上記命令の実行開始時刻を含む。例えば、図4中、cpuは、ゲストOS2のcpuアドレス(ゲストOSが動作しているCPUの識別情報)を示し、そのcpuアドレスとして例えば1が命令アドレス継続判定データに格納される。addressは、CPUが実行する命令の命令アドレスを示す。この命令の処理がロックループする場合には、例えば、0x00102030-0x00102040等の、ロックループする命令アドレスの範囲がaddressに格納される。timeは、上記CPUが実行する命令の実行開始時刻を示し、その実行開始時刻として、例えば、10:20:30が格納される。
図5は、ハイパーバイザが備えるロックワード記憶部内のロックワード記憶用データのデータ構成例を説明する図である。図5中、cpuは、ゲストOSのcpuアドレスを示し、そのcpuアドレスとして、例えば1がロックワード記憶用データに格納される。addressは、CPUが実行する、ロックループする命令の命令アドレスを示し、その命令アドレスとして、例えば、0x00102030-0x00102040が格納される。lockwordは、ロックワードの判定命令の実行後におけるロックワードへの書き込み内容(制御権)を示し、そのロックワードへの書き込み内容として、例えばabcdefgが格納される。
図6は、ハイパーバイザが備えるデッドロック解除部が管理OSに送信する、プログラムの停止要求に含まれるデータの構成例を説明する図である。図6に示す例では、プログラムの停止要求には、domein、program、function-1、lockword-1、function-2、lockword-2が含まれる。domeinはドメイン名である。ドメイン名は、ハイパーバイザが停止を指示するプログラムを実行中のゲストOS2の名前であり、そのドメイン名として、例えばdomein1がドメイン名として停止要求のデータに格納される。programは、ハイパーバイザが停止を指示するプログラムのプログラム名であり、そのプログラム名として、例えばprogram001が格納される。function-1、function-2は、デッドロックを発生させているプログラムの関数名(デッドロック関数名)であり、その関数名として、例えば、serialize-1()、serialize-2()が格納される。lockword-1、lockword-2は、それぞれ、serialize-1()、serialize-2()によって発生したデッドロックによって、書き込み内容が変化しないロックワード(デッドロックロックワード)の書き込み内容である。例えば、lockword-1、lockword-2として、それぞれ、abcd、efghが格納される。
図7及び図8は、本実施形態のデッドロック解除処理フローの例を示す図である。まず、ゲストOS2の各CPU(例えば、CPU0とCPU1)が命令を実行する(図7のステップS21)。次に、ハイパーバイザ1が備えるデッドロック発生推定部11が、各CPUが実行している命令の命令アドレスを取得し(ステップS22)、取得した命令アドレスに対応する命令アドレス継続判定データを命令アドレス継続判定データ記憶部111に記憶する(ステップS23)。
続いて、デッドロック発生推定部11が、CPU0に対応する命令アドレス継続判定データを参照して、CPU0について、同一の命令アドレスが所定時間継続しているかを判断する(ステップS24)。デッドロック発生推定部11が、CPU0について、同一の命令アドレスが所定時間継続していないと判断した場合は、上記ステップS21に戻る。デッドロック発生推定部11が、CPU0について、同一の命令アドレスが所定時間継続したと判断した場合は、デッドロック発生推定部11が、CPU1に対応する命令アドレス継続判定データを参照して、CPU1について、同一の命令アドレスが所定時間継続しているかを判断する(ステップS25)。デッドロック発生推定部11が、CPU1について、同一の命令アドレスが所定時間継続していないと判断した場合は、上記ステップS21に戻る。デッドロック発生推定部11が、CPU1について、同一の命令アドレスが所定時間継続したと判断した場合は、デッドロック発生確定部12が、ゲストOS2が実行しているプログラムの命令をCPU毎に交互に1ステップずつ実行する(ステップS26)。そして、デッドロック発生推定部11が、ゲストOS2のCPUが実行しているプログラムの命令がロックワードの判定命令であるかを判断する(ステップS27)。デッドロック発生推定部11が、ゲストOS2のCPUが実行しているプログラムの命令がロックワードの判定命令でないと判断した場合は上記ステップS26に戻る。デッドロック発生推定部11が、ゲストOS2のCPUが実行しているプログラムの命令がロックワードの判定命令であると判断した場合、デッドロック発生推定部11は、ロックワードの判定命令の実行後のロックワードへの書き込み内容を含むロックワード記憶用データをロックワード記憶部121に記憶して(ステップS28)、図8のステップS29に進む。
続いて、デッドロック発生推定部11が、ゲストOS2が実行しているプログラムの命令をCPU毎に交互に1ステップずつ実行する(図8のステップS29)。そして、デッドロック発生推定部11が、ゲストOSのCPUが実行しているプログラムの命令がロックワードの判定命令であるかを判断する(ステップS30)。なお、ステップS30における判断処理は、図7のステップS27における判断処理の対象となるプログラムの命令を実行したCPUと同一のCPUについて実行する。デッドロック発生推定部11が、ゲストOS2のCPUが実行しているプログラムの命令がロックワードの判定命令でないと判断した場合は上記ステップS29に戻る。デッドロック発生推定部11が、ゲストOS2のCPUが実行しているプログラムの命令がロックワードの判定命令であると判断した場合、デッドロック発生推定部11は、このロックワードの判定命令の実行後のロックワードへの書き込み内容が、図7のステップS28において記憶されたロックワード記憶用データに含まれるロックワードへの書き込み内容と同じであるか、すなわち、ロックワードへの書き込み内容が変更されていないかを判断する(ステップS31)。
デッドロック発生推定部11が、ロックワードへの書き込み内容が変更されたと判断した場合は、図7のステップS21に戻る。デッドロック発生推定部11が、ロックワードへの書き込み内容が変更されていないと判断した場合は、デッドロック発生プログラム特定部13が、デッドロックを発生させているプログラム(デッドロックプログラム)を特定する(ステップS32)。そして、デッドロック解除部14が、管理OS3のデッドロックプログラム終了部31に対してデッドロックプログラムの停止を指示する(ステップS33)。
続いて、デッドロックプログラム終了部31が、ゲストOS2へコンソールを接続し(ステップS34)、デッドロックプログラムを停止する(ステップS35)。また、ログ採取部32が、デッドロックプログラムをログする(ステップS36)。上記ステップS35においてデッドロックプログラムが停止されることによって、ゲストOS2において、デッドロックが解消する(ステップS37)。
本仮想計算機システム及び本デッドロック解除方法によれば、仮想計算機内におけるデッドロックを容易に自動で検出し、検出したデッドロックを解消することができる。
Claims (8)
- 仮想計算機と前記仮想計算機を制御する仮想計算機モニタとを備える仮想計算機システムであって、
前記仮想計算機モニタが、
前記仮想計算機の2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したかを判断し、前記2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したと判断した場合に、前記仮想計算機内で、プログラムが他のプログラムが獲得対象とするロックワードを獲得している状態であるデッドロックが発生したと推定するデッドロック発生推定手段と、
前記デッドロック発生推定手段が、前記デッドロックが発生したと推定した場合に、前記仮想計算機の命令を前記仮想計算機の制御手段毎に交互に1ステップずつ実行して、前記仮想計算機内でデッドロックが発生したことを確定するデッドロック発生確定手段と、
前記デッドロックを発生させたプログラムを特定するプログラム特定手段と、
前記特定されたプログラムを停止することによって前記仮想計算機内におけるデッドロックを解除するデッドロック解除手段とを備える
ことを特徴とする仮想計算機システム。 - 前記デッドロック発生確定手段が、前記仮想計算機が実行する第1回目のロックワードの判定命令の実行後のロックワードの内容と第2回目のロックワードの判定命令の実行後のロックワードの内容とが同じであるかを判断し、第1回目のロックワードの判定命令の実行後のロックワードの内容と第2回目のロックワードの判定命令の実行後のロックワードの内容とが同じであると判断された場合に、前記仮想計算機内でデッドロックが発生したことを確定する
ことを特徴とする請求項1記載の仮想計算機システム。 - 前記仮想計算機内で動作するプログラムを管理する管理装置を備え、
前記デッドロック解除手段が、前記管理装置に対して、前記特定されたプログラムの停止を指示し、
前記管理装置が、前記デッドロック解除手段の指示に従って、前記特定されたプログラムを停止する
ことを特徴とする請求項1記載の仮想計算機システム。 - 前記管理装置が、前記デッドロック解除手段によって停止を指示されたプログラムのログ情報を所定の記憶手段に記憶する
ことを特徴とする請求項1記載の仮想計算機システム。 - 仮想計算機と前記仮想計算機を制御する仮想計算機モニタとを備える仮想計算機システムにおける、デッドロック解除方法であって、
前記仮想計算機モニタが、前記仮想計算機の2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したかを判断し、前記2つの制御手段のそれぞれについて同一の命令アドレスが所定時間継続したと判断した場合に、前記仮想計算機内で、プログラムが他のプログラムが獲得対象とするロックワードを獲得している状態であるデッドロックが発生したと推定し、
前記仮想計算機モニタが、前記デッドロックが発生したと推定した場合に、前記仮想計算機モニタが、前記仮想計算機の命令を前記仮想計算機の制御手段毎に交互に1ステップずつ実行して、前記仮想計算機内でデッドロックが発生したことを確定し、
前記仮想計算機モニタが、前記特定されたプログラムを停止することによって前記仮想計算機内におけるデッドロックを解除する
ことを特徴とするデッドロック解除方法。 - 前記仮想計算機モニタが、前記仮想計算機が実行する第1回目のロックワードの判定命令の実行後のロックワードの内容と第2回目のロックワードの判定命令の実行後のロックワードの内容とが同じであるかを判断し、第1回目のロックワードの判定命令の実行後のロックワードの内容と第2回目のロックワードの判定命令の実行後のロックワードの内容とが同じであると判断された場合に、前記仮想計算機内でデッドロックが発生したことを確定する
ことを特徴とする請求項5記載のデッドロック解除方法。 - 前記仮想計算機システムが、仮想計算機内で動作するプログラムを管理する管理装置を備え、
前記仮想計算機モニタが、前記管理装置に対して、前記特定されたプログラムの停止を指示し、
前記管理装置が、前記仮想計算機モニタの指示に従って、前記特定されたプログラムを停止する
ことを特徴とする請求項5記載のデッドロック解除方法。 - 前記管理装置が、前記仮想計算機モニタによって停止を指示されたプログラムのログ情報を所定の記憶手段に記憶する
ことを特徴とする請求項5記載のデッドロック解除方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2008/067796 WO2010038280A1 (ja) | 2008-10-01 | 2008-10-01 | 仮想計算機システム及びデッドロック解除方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2008/067796 WO2010038280A1 (ja) | 2008-10-01 | 2008-10-01 | 仮想計算機システム及びデッドロック解除方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2010038280A1 true WO2010038280A1 (ja) | 2010-04-08 |
Family
ID=42073073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2008/067796 WO2010038280A1 (ja) | 2008-10-01 | 2008-10-01 | 仮想計算機システム及びデッドロック解除方法 |
Country Status (1)
Country | Link |
---|---|
WO (1) | WO2010038280A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015075871A (ja) * | 2013-10-08 | 2015-04-20 | 株式会社リコー | 排他制御プログラム、情報処理装置、排他制御方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06337798A (ja) * | 1993-03-30 | 1994-12-06 | Fujitsu Ltd | デッドロック検出装置 |
JP2000222228A (ja) * | 1999-01-29 | 2000-08-11 | Hitachi Ltd | リソース占有順序の検証によるデッドロック防止方法 |
JP2003030166A (ja) * | 2001-07-17 | 2003-01-31 | Nec Corp | 疎結合マルチプロセッサシステム及びデッドロック解除方法 |
-
2008
- 2008-10-01 WO PCT/JP2008/067796 patent/WO2010038280A1/ja active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06337798A (ja) * | 1993-03-30 | 1994-12-06 | Fujitsu Ltd | デッドロック検出装置 |
JP2000222228A (ja) * | 1999-01-29 | 2000-08-11 | Hitachi Ltd | リソース占有順序の検証によるデッドロック防止方法 |
JP2003030166A (ja) * | 2001-07-17 | 2003-01-31 | Nec Corp | 疎結合マルチプロセッサシステム及びデッドロック解除方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015075871A (ja) * | 2013-10-08 | 2015-04-20 | 株式会社リコー | 排他制御プログラム、情報処理装置、排他制御方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8176489B2 (en) | Use of rollback RCU with read-side modifications to RCU-protected data structures | |
US5815651A (en) | Method and apparatus for CPU failure recovery in symmetric multi-processing systems | |
US7788664B1 (en) | Method of virtualizing counter in computer system | |
US7415699B2 (en) | Method and apparatus for controlling execution of a child process generated by a modified parent process | |
US6493741B1 (en) | Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit | |
JP3571976B2 (ja) | デバッグ装置及び方法並びにプログラム記録媒体 | |
US8661450B2 (en) | Deadlock detection for parallel programs | |
US7191445B2 (en) | Method using embedded real-time analysis components with corresponding real-time operating system software objects | |
JP4222370B2 (ja) | デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム | |
US20090235262A1 (en) | Efficient deterministic multiprocessing | |
US20110258608A1 (en) | Method and apparatus to locate bottleneck of java program | |
US7093262B2 (en) | Detecting deadlocks in multithreaded programs | |
US20040199927A1 (en) | Enhanced runtime hosting | |
US20070288939A1 (en) | Detecting Deadlocks In Interop-Debugging | |
KR102025078B1 (ko) | 단일 스텝 실행을 이용한 코드 진단 | |
US7650259B2 (en) | Method for tuning chipset parameters to achieve optimal performance under varying workload types | |
JP2004259258A (ja) | 改良された診断実行器およびその方法 | |
EP1934749A2 (en) | Profiling using a user-level control mechanism | |
JP2006277115A (ja) | 異常検出プログラムおよび異常検出方法 | |
US10394557B2 (en) | Debugging data processing transactions | |
US20040168157A1 (en) | System and method for creating a process invocation tree | |
WO2009123343A1 (ja) | 競合分析装置、競合分析方法、及びプログラム | |
US20180307493A1 (en) | Enhanced managed runtime environments that support deterministic record and replay | |
WO2010038280A1 (ja) | 仮想計算機システム及びデッドロック解除方法 | |
KR102141620B1 (ko) | 멀티 프로세스/멀티 스레드에서 사용하는 공유 메모리에 대한 원자성 위반 결함 탐지 방법 및 장치 |
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: 08877139 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: 08877139 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: JP |