JP4006428B2 - 計算機システム - Google Patents
計算機システム Download PDFInfo
- Publication number
- JP4006428B2 JP4006428B2 JP2004281270A JP2004281270A JP4006428B2 JP 4006428 B2 JP4006428 B2 JP 4006428B2 JP 2004281270 A JP2004281270 A JP 2004281270A JP 2004281270 A JP2004281270 A JP 2004281270A JP 4006428 B2 JP4006428 B2 JP 4006428B2
- Authority
- JP
- Japan
- Prior art keywords
- spin lock
- lock
- virtual
- processor
- spin
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Description
メモリ装置をエミュレートして、仮想計算機実行環境を構築(提供)する。VMMは、この仮想計算機実行環境にゲストOSと呼ばれる適切なOSをロードし、実行する。具体的には、VMMは、仮想HWとしての仮想メモリ装置にゲストOSのコードを展開し、その実行コードを仮想プロセッサのエミュレートという形で実行することで、ゲストOSの処理を進める。ゲストOSからのI/O要求は、VMMが仮想I/O装置のエミュレートを行うことにより処理される。
ここで、上記複数の仮想プロセッサのうちのいずれかの仮想プロセッサがスピンロックの取得に失敗したことを検出する検出手段と、スピンロックの取得に失敗したことが当該検出手段によって検出された場合に、上記選択手段を呼び出す手段とを追加して、スピンロックの取得に失敗したことが検出された場合に、当該取得に失敗したスピンロックを取得していて、かつ非実行中の状態にある仮想プロセッサが上記選択手段により優先的に選択される構成とすると良い。
ロック取得個数は、仮想プロセッサ331-iが現在取得しているスピンロックの個数を示す。
WAIT_PROC_BIT_MAP(ロック待ちプロセッサビットマップ)は、ロックを待っている仮想プロセッサの集合を示すビットマップである。本実施形態では、WAIT_PROC_BIT_MAPは16ビットであり、仮想プロセッサの数が16個までのシステムに適用可能である。ここでは、WAIT_PROC_BIT_MAPの各ビット(ビット26〜11)は、仮想プロセッサ番号15〜0の仮想プロセッサに対応する。したがって、OWNER_PROC_IDの最上位ビットは0である。なお、OWNER_PROC_IDをビット30〜27の4ビットで構成し、ビット31を空きビットとしても良い。
LOCK_BIT(ロックビット)は、ロックされているか否かを示す。LOCK_BITは、ロックされているとき1に、そうでないとき0にセットされる。
1)ゲストOSが使うスピンロックのアドレスのVMMへの登録
vmm_register_spinlock_address()
2)VMMへ登録されたスピンロックの使用開始の宣言
vmm_start_use_spinlock()
3)ゲストOSが使うスピンロック確保処理
vmm_acquire_spinlock()
4)ゲストOSが使うスピンロック解放処理
vmm_release_spinlock()
5)VMMへ登録したスピンロックの使用終了(中断)の宣言
vmm_end_use_spinlock()
6)ゲストOSが使うスピンロックのアドレスのVMMからの登録解除
vmm_deregister_spinlock_address()
を使って「スピンロックの状況」等を通知する。これらインターフェイスは、VMM31の機能を呼び出すためのシステムコールとしてゲストOS340に提供される。ここでは、各インターフェイスは、予めライブラリのような形でゲストOS340に呼び出し方法が提供されているものとする。
1)ゲストOSが使うスピンロックのアドレスのVMMへの登録
vmm_register_spinlock_address()
引数は「スピンロックのアドレス」である。後述するスピンロックの管理方法でゲストOS340がVMM31にスピンロックを管理してもらいたいときには、当該ゲストOS340は予めこのインターフェイスを呼び出して「スピンロックのアドレス」をVMM31に通知する。この結果、「スピンロックのアドレス(スピンロック変数のアドレス、つまりロックアドレス)」はスピンロック変数アドレステーブル311に登録され、後述するようにVMM31によるロックの管理の対象になる。
vmm_start_use_spinlock()
引数は「スピンロックのアドレス」である。ゲストOS340は、上記1)で登録されたスピンロックを実際に使用する前に、このインターフェイスを呼び出して使用開始をVMM31に教える。VMM31は、このインターフェイスの呼び出しの後に、スピンロック変数の値を参照して、仮想プロセッサの実行制御に用いる。よって、ゲストOS340は、このインターフェイスを呼び出す前に、予めスピンロック変数の値を適切に初期化しておく必要がある。
vmm_acquire_spinlock()
引数は「スピンロックのアドレス」である。このインターフェイスは、ゲストOS340がロックを確保(取得)する際に次のように使用される、スピンロック取得インターフェイスである。
VMM31は、仮想プロセッサがロックを取得できる(即ちLOCK_BITが0であった)場合、スピンロック変数のOWNER_PROC_IDに当該仮想プロセッサのID(仮想プロセッサ番号)をセットし、かつLOCK_BITをセットするという処理を「アトミック」に行う(OWNER_PROC_IDとLOCK_BITをまとめてアトミックに更新)。「アトミック」については後述する。
一方、仮想プロセッサがロックを取得できない(既にLOCK_BITが1だった)場合には、VMM31は、スピンロック変数のWAIT_PROC_BIT_MAP中の、当該仮想プロセッサに固有のビットをセットする。そしてVMM31は、必要に応じて、他の仮想プロセッサを選択し直す。仮想プロセッサは、他の仮想プロセッサに切り替えられない限り、ロックを取得できるまでスピンループする。
このインターフェイス(ロック取得インターフェイス)の処理の詳細については、後述する。
vmm_release_spinlock()
引数は「スピンロックのアドレス」である。このインターフェイスは、ゲストOS340がロックを解放する際に使用される、スピンロック解放インターフェイスである。このインターフェイスの処理(スピンロック解放処理)の詳細については、後述する。
vmm_end_use_spinlock()
引数は「スピンロックのアドレス」である。このインターフェイスは、ゲストOS340がVMM31に対して、対応するスピンロック変数を参照をしないように要求するのに用いられる。
vmm_deregister_spinlock_address()
引数は「スピンロックのアドレス」である。このインターフェイスは、ゲストOS340がVMM31に対して、対応するスピンロック変数をスピンロック変数アドレステーブル311から削除するように要求するのに用いられる。
OWNER_PROC_ID=ロック取得インターフェイスを呼び出した仮想プロセッサ#iのID(仮想プロセッサ番号)
WAIT_PROC_BIT_MAP=全て0
LOCK_BIT=1
が設定されたスピンロック変数がロックアドレスAで指定されるメモリにアトミックに書き込まれ、呼び出し元のゲストOS340に制御が戻る。この状態は、呼び出し元の仮想プロセッサ#iがロックを確保した状態である。「メモリにアトミックに書き込む」とは、複数の仮想プロセッサからのロック取得インターフェイスの呼び出しに応じて、それぞれステップS4の排他制御処理が計算機システム内で同時に実行されたとしても、この排他制御処理に関しては互いに不可分に参照と修正が行われることを意味する。例えばインテル社のPentium(登録商標)プロセッサを使っている場合には、ロック付きXCHG命令を使うことにより、ここに述べたステップS4b,S4cの処理を連続して行うことができる。このことは、図5及び図6のフローチャートで示されるロック取得処理がゲストOS340の処理(ステップS12を除く)として実装されている場合にも同様である。なお、このロック取得処理が、本実施形態のようにVMM31内の処理として実装されている場合には、排他的に実行される必要があるステップS4とステップS10の両排他制御処理自体を、VMM31内に設けた専用のロック変数を用いることで簡単に実現できる。
当該スピンロック変数のWAIT_PROC_BIT_MAPのうちの呼び出し元仮想プロセッサ#iに対応するビットがセットされる(ステップS9)。また、呼び出し元仮想プロセッサ#iは、他の仮想プロセッサに切り替えられない限り、ロックが取得できるまでスピンループする(S3→S4a→S4b→S7)。更に、必要に応じて、他の仮想プロセッサの選択のための処理(ステップS12)に切り替えられる。
次に、スピンロック解放処理の変形例について、図9のフローチャートを参照して説明する。まずVMM31は、上記ステップS31,S32と同様の処理を実行する。即ちVMM31は、ロックアドレスAで指定されるスピンロック変数を0に設定して、ロックを解放すると共に、呼び出し元の仮想プロセッサのIDで指定されるVPROC_TBL312内のエントリの「ロック取得個数」を1デクリメントする(ステップS41,S42)。そしてVMM31は、再スケジューリング関数vmm_resched()を呼び出す(ステップS43)。この再スケジューリング関数vmm_resched()は、前述したロックを取得できなかった場合にステップS12で呼び出される再スケジューリング関数vmm_resched_with_lock_addr()と異なって、引数を持たない。以下、このvmm_resched()が呼び出されることにより実行される再スケジューリング関数の処理(仮想プロセッサ再スケジューリング処理)について、図10のフローチャートを参照して説明する。
図1に示される上記実施形態の計算機システム1では、VMM31は、OS20上で動作する1つのVMアプリケーション30として実装されている。しかし、図1の計算機システム(第1の計算機システム)1に代えて、図11に示す計算機システム(第2の計算機システム)100を適用することも可能である。図11において、図1と等価な部分には同一符号が付されている。
Claims (7)
- 仮想計算機マネージャによって構築される仮想計算機環境で、複数の仮想プロセッサが動作するマルチプロセッサ環境を前提としてゲストOSが動作し、前記複数の仮想プロセッサ間の排他制御のため、ゲストOS内に予め定められた実行対象毎に用意されるスピンロック変数が用いられる計算機システムにおいて、
前記ゲストOSは、
前記スピンロック変数が格納されているメモリ上の前記ゲストOS内のアドレスであるスピンロックアドレスを前記仮想計算機マネージャに通知するためのスピンロックアドレス通知手段を具備し、
前記仮想計算機マネージャは、
前記スピンロックアドレス通知手段が前記スピンロックアドレスを前記仮想計算機マネージャに通知するのに用いられるインターフェイスと、
前記インターフェイスを用いて通知された前記スピンロックアドレスに基づき前記ゲストOS内のスピンロック変数を参照及び書き換えするためのスピンロック変数参照・書き換え手段と、
前記スピンロック変数参照・書き換え手段により参照及び書き換えされる前記スピンロック変数に基づく排他制御の処理を行う排他制御手段と、
前記スピンロック変数参照・書き換え手段によるスピンロック変数の参照結果に基づき、前記複数の仮想プロセッサの中から、目的の実行対象に関するスピンロックを取得していて、かつ実プロセッサが割り当てられていない非実行中の状態にある仮想プロセッサを優先的に選択する選択手段と、
前記選択手段によって選択された仮想プロセッサに実プロセッサを割り当てるプロセッサ割り当て手段とを具備する
ことを特徴とする計算機システム - 前記仮想計算機マネージャは、
前記複数の仮想プロセッサのうちのいずれかの仮想プロセッサが前記目的の実行対象に関するスピンロックの取得に失敗したことを検出する検出手段と、
スピンロックの取得に失敗したことが前記検出手段によって検出された場合、前記選択手段を呼び出す手段とを更に具備し、
前記選択手段は、スピンロックの取得に失敗したことが前記検出手段によって検出された場合、前記スピンロック変数参照・書き換え手段を用いて前記ゲストOS内のスピンロック変数を取得して、当該スピンロック変数に基づき、前記取得に失敗したスピンロックを所有する仮想プロセッサを特定することにより、前記取得に失敗した前記スピンロックを取得していて、かつ前記非実行中の状態にある仮想プロセッサを優先的に選択する
ことを特徴とする請求項1記載の計算機システム。 - 前記選択手段は、前記取得に失敗した前記スピンロックを取得していて、かつ前記非実行中の状態にある仮想プロセッサが存在しない場合、前記取得に失敗した前記スピンロックの待ち状態になく、かつ前記非実行中の状態にある仮想プロセッサを選択することを特徴とする請求項2記載の計算機システム。
- 前記仮想計算機マネージャは、前記仮想プロセッサによって取得されているスピンロックが解放される際に前記選択手段を呼び出す手段を更に具備し、
前記選択手段は、スピンロックが解放される際には、任意のスピンロックを取得していて、スピンロック待ちでなく、かつ前記非実行中の状態にある仮想プロセッサを優先的に選択する
ことを特徴とする請求項1記載の計算機システム。 - 前記選択手段は、スピンロックが解放される際に選択すべき仮想プロセッサの候補が複数存在する場合、その時点において最も多くのスピンロックを取得している仮想プロセッサを選択することを特徴とする請求項4記載の計算機システム。
- 前記仮想計算機マネージャは、前記複数の仮想プロセッサ各々のスピンロックの取得状況を保持する、前記仮想計算機マネージャに設けられたスピンロック取得状況保持手段とを更に具備し、
前記インターフェイスは、前記ゲストOSの前記スピンロックアドレス通知手段から呼び出されることにより、前記目的の実行対象に関するスピンロックに対応するスピンロック変数が格納されている前記メモリ上の前記スピンロックアドレスを前記仮想計算機マネージャに通知するのに用いられ、
前記スピンロック変数参照・書き換え手段は、前記インターフェイスを用いて通知されたスピンロックアドレスに基づき当該アドレスによって指定されるスピンロック変数を参照することにより、当該スピンロック変数の値を取得し、
前記選択手段は、前記スピンロック変数参照・書き換え手段によって取得されたスピンロック変数の値及び前記スピンロック取得状況保持手段によって示される前記複数の仮想プロセッサ各々のスピンロックの取得状況に基づいて仮想プロセッサを選択する
ことを特徴とする請求項1記載の計算機システム。 - 前記仮想計算機マネージャは、前記プロセッサ割り当て手段による実プロセッサ割り当てに応じて前記スピンロック取得状況保持手段に保持されている対応する仮想プロセッサのスピンロック取得状況を更新する更新手段を更に具備することを特徴とする請求項6記載の計算機システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004281270A JP4006428B2 (ja) | 2004-09-28 | 2004-09-28 | 計算機システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004281270A JP4006428B2 (ja) | 2004-09-28 | 2004-09-28 | 計算機システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006099182A JP2006099182A (ja) | 2006-04-13 |
JP4006428B2 true JP4006428B2 (ja) | 2007-11-14 |
Family
ID=36238964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004281270A Active JP4006428B2 (ja) | 2004-09-28 | 2004-09-28 | 計算機システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4006428B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8230203B2 (en) * | 2007-03-30 | 2012-07-24 | Intel Corporation | Detecting spin loops in a virtual machine environment |
US7899663B2 (en) * | 2007-03-30 | 2011-03-01 | International Business Machines Corporation | Providing memory consistency in an emulated processing environment |
US9396012B2 (en) * | 2013-03-14 | 2016-07-19 | Qualcomm Incorporated | Systems and methods of using a hypervisor with guest operating systems and virtual processors |
-
2004
- 2004-09-28 JP JP2004281270A patent/JP4006428B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2006099182A (ja) | 2006-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6952827B1 (en) | User program and operating system interface in a multithreaded environment | |
JP5479416B2 (ja) | スレッドレベルの投機実行を拡張するためのプリミティブ | |
US9513959B2 (en) | Contention management for a hardware transactional memory | |
US7734879B2 (en) | Efficiently boosting priority of read-copy update readers in a real-time data processing system | |
JP2866241B2 (ja) | コンピュータシステムおよびスケジューリング方法 | |
JP5546529B2 (ja) | 待機状態にあるプロセッサ実行リソースの共有 | |
US9201689B2 (en) | Software emulation of massive hardware threading for tolerating remote memory references | |
Attiya et al. | Transactional scheduling for read-dominated workloads | |
US20080209422A1 (en) | Deadlock avoidance mechanism in multi-threaded applications | |
JP2004272894A (ja) | グラフィックス処理ユニットのマルチスレッド式カーネル | |
Brandenburg | Multiprocessor real-time locking protocols | |
JP2009151793A (ja) | スリープ‐起動機構を用いた比較および交換動作 | |
US8321874B2 (en) | Intelligent context migration for user mode scheduling | |
US10423467B2 (en) | Data processing apparatus and method for performing lock-protected processing operations for multiple threads | |
US20120284720A1 (en) | Hardware assisted scheduling in computer system | |
JP2010170210A (ja) | 仮想計算機管理機構、同管理機構を有する仮想計算機システム及び同システムにおけるページング処理方法 | |
US10599477B1 (en) | Methods and apparatus for command list processing in performing parallel IO operations | |
US6662364B1 (en) | System and method for reducing synchronization overhead in multithreaded code | |
EP1693743A2 (en) | System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock | |
US20190073243A1 (en) | User-space spinlock efficiency using c-state and turbo boost | |
US10740028B1 (en) | Methods and apparatus for LRU buffer management in performing parallel IO operations | |
Takada et al. | A novel approach to multiprogrammed multiprocessor synchronization for real-time kernels | |
JP4006428B2 (ja) | 計算機システム | |
US7996848B1 (en) | Systems and methods for suspending and resuming threads | |
JP2002163121A (ja) | 仮想マルチスレッドプロセッサ及びスレッド実行方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070312 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070417 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070618 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070710 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070730 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070821 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070827 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4006428 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100831 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100831 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110831 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120831 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120831 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130831 Year of fee payment: 6 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |