(57)【要約】【課題】スピンロックをプロセッサ外部で検出するためには、プロセッサから出力される排他制御のためのロック信号やポーリング命令といった特殊な信号が必要になること。【解決手段】複数のプロセッサが共有メモリに接続されたデータ処理装置は、バッファメモリと判定部とを有する。判定部は、プロセッサから共有メモリに対して発行された所定の命令種別のメモリアクセス命令をバッファメモリに記憶し、バッファメモリに記憶したメモリアクセス命令のうち所定の条件を満たす複数のメモリアクセス命令の数を算出し、算出した数に基づいてスピンロックを検出する。【選択図】図１
2016015066.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサが共有メモリに接続されたデータ処理装置に接続されたスピンロック検出装置であって、
バッファメモリと、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
を有する
スピンロック検出装置。
【請求項２】
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうちアクセス先アドレスがお互いに一致する複数の前記メモリアクセス命令の数を算出する
請求項１に記載のスピンロック検出装置。
【請求項３】
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうち命令発行元とアクセス先アドレスとがお互いに一致する複数の前記メモリアクセス命令の数を算出する
請求項１または２に記載のスピンロック検出装置。
【請求項４】
前記判定部は、前記算出した数と閾値とを比較して前記スピンロックを検出する
請求項１乃至３の何れかに記載のスピンロック検出装置。
【請求項５】
前記判定部は、前記プロセッサから発行された命令の数に対する前記算出した数の割合を算出し、前記割合と閾値とを比較して前記スピンロックを検出する
請求項１乃至３の何れかに記載のスピンロック検出装置。
【請求項６】
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有するアクセス先アドレスを決定する
請求項１乃至５の何れかに記載のスピンロック検出装置。
【請求項７】
前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部を有し、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定したアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
請求項６に記載のスピンロック検出装置。
【請求項８】
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有する命令発行元とアクセス先アドレスとを決定する
請求項１乃至５の何れかに記載のスピンロック検出装置。
【請求項９】
前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部を有し、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定した命令発行元およびアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
請求項８に記載のスピンロック検出装置。
【請求項１０】
前記転送部は、前記共有メモリへの送信を制限した前記メモリアクセス命令の発行元に対してリトライを指示する
請求項７または９に記載のスピンロック検出装置。
【請求項１１】
前記プロセッサは、スヌープ方式のキャッシュメモリを有し、
前記転送部は、前記決定したアクセス先アドレスに対する書き込みを検出した時、前記決定した前記命令種別とアクセス先アドレスとを有する前記メモリアクセス命令の前記共有メモリへの送信の制限を開始する
請求項７または９に記載のスピンロック検出装置。
【請求項１２】
前記データ処理装置は、１以上の前記プロセッサと１以上の前記共有メモリとを有する複数のノードがノード間接続装置により接続されており、
前記判定部は、前記記憶では、前記ノード間接続装置を通過する命令のうち、何れかの前記ノードの前記プロセッサから他の前記ノードの前記共有メモリに対して発行された前記所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶する
請求項１乃至１１の何れかに記載のスピンロック検出装置。
【請求項１３】
バッファメモリと判定部とを有し、複数のプロセッサが共有メモリに接続されたデータ処理装置が実行するスピンロック検出方法であって、
前記判定部が、前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する
スピンロック検出方法。
【請求項１４】
バッファメモリを有し、複数のプロセッサが共有メモリに接続されたデータ処理装置に接続されたコンピュータを、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
して機能させるためのプログラム。
【請求項１５】
複数のプロセッサが共有メモリに接続されたデータ処理装置であって、
バッファメモリと、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
を有する
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スピンロック検出装置、スピンロック検出方法、データ処理装置、およびプログラムに関する。
【背景技術】
【０００２】
複数のプロセッサが共有メモリに接続されたデータ処理装置において、プロセッサで動作するスレッドやプロセスの単位で排他制御を行う手法として、ロックによる排他制御がある。ロックによる排他制御では、まず共有リソースのロックを試行し、ロックを獲得できたならば共有リソースをアクセスし、その後にアンロックしてロックを解放する。そして、ロックの獲得を高速に行う手法として、ロックの獲得に失敗した場合にロックを獲得できるまでロックの試行を繰り返す手法がある（例えば特許文献１参照）。この手法はスピンロックと呼ばれている。
【０００３】
また、スピンロックを検出しその影響を軽減する技術として、例えば、各々のプロセッサに当該プロセッサがスピンロック状態であるか否かを検出するスピンロック検出部を接続し、スピンロック状態を検出したスピンロック検出部がプロセッサからキャッシュメモリに対して送出されるメモリアクセス要求を抑止することにより、スピンロック状態にあるプロセッサの消費電力を削減することが、本発明に関連する第１の関連技術として提案されている（例えば特許文献２参照）。
【０００４】
そして上記第１の関連技術のスピンロック検出部では、ロック変数を書き込むべき共有メモリのアドレスを保持するアドレスバッファと、書き込むべきロック変数を保持するデータバッファと、プロセッサからキャッシュメモリに対して送出されたアドレスおよびデータが上記アドレスバッファおよびデータバッファに保持されているアドレスおよびデータと一致するか否かを検出する２つの比較器と、プロセッサから出力される排他制御のためのロック信号とリード／ライト信号と上記２つの比較器の出力とを入力とする４入力ＡＮＤ回路とにより、プロセッサがロックの獲得に失敗してスピンロックしていることを検出している。また上記第１の関連技術では、上記４入力ＡＮＤ回路の代わりに、プロセッサから出力されるポーリング命令という命令と上記２つの比較器の出力とを入力とする３入力ＡＮＤ回路を使用する形態が他の形態として示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−３２７９３４号公報
【特許文献２】特開２００５−３２７０８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記第１の関連技術によれば、プロセッサがスピンロックしているか否かをプロセッサの外部において検出することができる。しかしながら、上記第１の関連技術では、スピンロックを検出するために、プロセッサから出力される排他制御のためのロック信号やポーリング命令といった特殊な信号が必要になる。
【０００７】
本発明の目的は、上述した課題、すなわち、スピンロックをプロセッサ外部で検出するためには、プロセッサから出力される排他制御のためのロック信号やポーリング命令といった特殊な信号が必要になる、という課題を解決するスピンロック検出装置を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の第１の観点に係るスピンロック検出装置は、
複数のプロセッサが共有メモリに接続されたデータ処理装置に接続されたスピンロック検出装置であって、
バッファメモリと、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
を有する。
【０００９】
本発明の第２の観点に係るスピンロック検出方法は、
バッファメモリと判定部とを有し、複数のプロセッサが共有メモリに接続されたデータ処理装置が実行するスピンロック検出方法であって、
前記判定部が、前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する。
【００１０】
本発明の第３の観点に係るプログラムは、
バッファメモリを有し、複数のプロセッサが共有メモリに接続されたデータ処理装置に接続されたコンピュータを、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
して機能させる。
【００１１】
本発明の第４の観点に係るデータ処理装置は、
複数のプロセッサが共有メモリに接続されたデータ処理装置であって、
バッファメモリと、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
を有する。
【発明の効果】
【００１２】
本発明は上述した構成を有するため、プロセッサから出力される排他制御のためのロック信号やポーリング命令といった特殊な信号を使わずに、プロセッサ外部でスピンロックを検出することができる。
【図面の簡単な説明】
【００１３】
【図１】コンピュータシステムの共有リソースへのアクセスをセマフォにより制御する方法の一例を示す概念図である。
【図２】Ｔ＆Ｓ命令とその応答のフォーマットの一例を示す図である。
【図３】コンピュータシステムの共有リソースへのアクセスをセマフォにより制御する方法の他の例を示す概念図である。
【図４】リード命令とその応答のフォーマットの一例を示す図である。
【図５】スピンロック中に繰り返し送信されるメモリアクセス命令の例を示す図である。
【図６】本発明の第１の実施形態に係るスピンロック検出装置のブロック図である。
【図７】本発明の第１の実施形態に係るスピンロック検出装置の転送部の動作の一例を示すフローチャートである。
【図８】本発明の第１の実施形態に係るスピンロック検出装置の判定部の動作の一例を示すフローチャートである。
【図９】本発明の第１の実施形態に係るスピンロック検出装置のバッファメモリの内容の一例を示す図である。
【図１０】本発明の第２の実施形態に係るスピンロック検出装置のブロック図である。
【図１１】本発明の第２の実施形態に係るスピンロック検出装置の転送部の動作の一例を示すフローチャートである。
【図１２】本発明の第２の実施形態に係るスピンロック検出装置の判定部の動作の一例を示すフローチャートである。
【図１３】本発明の第２の実施形態に係るスピンロック検出装置のバッファメモリの内容の一例を示す図である。
【図１４】本発明の第３の実施形態に係るスピンロック検出装置のブロック図である。
【図１５】本発明の第３の実施形態に係るスピンロック検出装置の判定部の動作の一例を示すフローチャートである。
【図１６】本発明の第３の実施形態に係るスピンロック検出装置のバッファメモリの内容の一例を示す図である。
【図１７】本発明の第４の実施形態に係るスピンロック検出装置のブロック図である。
【図１８】本発明の第４の実施形態に係るスピンロック検出装置の判定部の動作の一例を示すフローチャートである。
【図１９】本発明の第４の実施形態に係るスピンロック検出装置のバッファメモリの内容の一例を示す図である。
【図２０】本発明の第５の実施形態に係るスピンロック検出装置のブロック図である。
【図２１】本発明の他の実施形態に係るスピンロック検出装置のブロック図である。
【図２２】本発明の他の実施形態に係るスピンロック検出装置の転送部の動作の一例を示すフローチャートである。
【図２３】本発明の他の実施形態に係るスピンロック検出装置の判定部の動作の一例を示すフローチャートである。
【図２４】本発明の他の実施形態に係るデータ処理装置のブロック図である。
【図２５】本発明の他の実施形態に係るデータ処理装置のノード間接続装置に配置されるスピンロック検出装置のブロック図である。
【図２６】本発明の第２６の実施形態に係るスピンロック検出装置のブロック図である。
【発明を実施するための形態】
【００１４】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
まず本実施形態で検出するスピンロックについて説明する。
【００１５】
図１は、コンピュータシステムの共有リソースへのアクセスをセマフォにより制御する方法の一例を示す概念図であり、共有メモリ上のセマフォの構造例とプロセッサ上のセマフォ利用プロセスの動作例とを示している。共有メモリ上のセマフォは、特定の共有リソースに関連付けられている。特定の共有リソースがどのプロセスにも利用されておらず、要求者もいない場合、アドレス０ｘ００の値は０である。また何れかのプロセスが特定のリソースを利用しているときはアドレス０ｘ００の値は当該プロセスの番号になっている。
【００１６】
或るプロセスが共有リソースへのアクセスを望むときは、その共有リソースに関連付けられたセマフォに対して、自プロセス番号のＴ＆Ｓ命令（テスト・アンド・セット命令）を発行する（Ｓ１）。Ｔ＆Ｓ命令は、図２に示すような命令種別と書き込み先アドレスと発行元番号とから構成される。Ｔ＆Ｓ命令は、書き込み先アドレスの内容が０の場合に成功して発行元番号の書き込みが実行され、それ以外の場合は書き込みを実行せずに失敗が返却される。成功時および失敗時には、図２に示すような命令種別と返却先番号と結果とから構成される応答が返される。
【００１７】
セマフォ利用プロセスは、Ｔ＆Ｓ命令が失敗した場合は所定時間待機した後、再びＴ＆Ｓ命令を発行し、その成功の可否を判断する。このＴ＆Ｓ命令を用いて成功するまでセマフォのテストを繰り返す状態がスピンロックである。セマフォ利用プロセスは、Ｔ＆Ｓ命令が成功した場合はセマフォに関連付けられている共有リソースの利用権を獲得したので、共有リソースの利用を開始する。そして、セマフォ利用プロセスは、共有リソースの利用を終了すると、セマフォに対して０を書き込む（Ｓ２）。
【００１８】
このように図１に示される方法は、セマフォの構造およびセマフォ利用プロセスのセマフォ利用手順が簡易になる。しかし、セマフォ利用プロセスに対してセマフォを要求した順にそのセマフォを割り当てることを保証することはできない。
【００１９】
図３は、コンピュータシステムの共有リソースへのアクセスをセマフォにより制御する方法の他の例を示す概念図であり、共有メモリ上のセマフォの構造例とプロセッサ上のセマフォ利用プロセスの動作例とスケジューラの動作例とを示している。共有メモリ上のセマフォは、特定の共有リソースに関連付けられている。特定の共有リソースがどのプロセスにも利用されておらず、要求者もいない場合、アドレス０ｘ２０の最終チケット番号とアドレス０ｘ１８のチケットカウンタとは等しくなっている。また何れかのプロセスが特定のリソースを利用しているときは、最終チケット番号とチケットカウンタとは相違し、アドレス０ｘ００の値は当該プロセスの番号になっている。さらにセマフォ利用待ちのプロセスがｋ個存在する場合、チケットカウンタ＋ｋ＋１＝最終チケット番号になる。
【００２０】
或るプロセスが共有リソースへのアクセスを望むときは、スケジューラに対してチケット番号を要求する（Ｓ１１）。スケジューラは、セマフォから最終チケット番号を読み出して要求元に渡し（Ｓ１２、Ｓ１３）、セマフォ上の最終チケット番号を１加算した値に書き換える（Ｓ１４）。
【００２１】
チケット番号を取得したセマフォ利用プロセスは、リード命令を用いてセマフォ上のチケットカウンタを読み出し（Ｓ１５）、この値が自身が取得したチケット番号と同じか否かを判断する。リード命令は、図４に示すような命令種別と読み出し先アドレスと発行元番号とから構成される。またリード命令の応答は、図４に示すような命令種別と返却先番号とデータ（チケットカウンタ）とから構成される。
【００２２】
セマフォ利用プロセスは、セマフォ上のチケットカウンタが自身のチケット番号と相違する場合は所定時間待機した後、再びセマフォ上のチケットカウンタを読み出し、この値が自身のチケット番号と同じか否かを判断する。セマフォ上のチケットカウンタが自身のチケット番号に一致するまでセマフォ上のチケットカウンタの読み出しを繰り返す状態がスピンロックである。セマフォ利用プロセスは、セマフォ上のチケットカウンタが自身のチケット番号に一致した場合はセマフォに関連付けられている共有リソースの利用権を獲得したので、セマフォ上に自プロセス番号を書き込んで共有リソースの利用を開始する（Ｓ１６）。そして、セマフォ利用プロセスは、共有リソースの利用を終了すると、セマフォ上から自プロセス番号を消去し（Ｓ１７）、セマフォ上のチケットカウンタの値を１加算した値に書き換える（Ｓ１８）。
【００２３】
このように図３に示される方法は、セマフォの構造およびセマフォ利用プロセスのセマフォ利用手順が図１に示される方法に比べて複雑になるけれども、セマフォ利用プロセスに対してセマフォを要求した順にそのセマフォを割り当てることが可能になる。
【００２４】
さて、図１に示される方法では、スピンロック中、セマフォ利用プロセスが動作するプロセッサから共有メモリに対して、図５（ａ）に示すように、書き込み先アドレスが同じＴ＆Ｓ命令が繰り返し送信される。また図３に示される方法では、スピンロック中、セマフォ利用プロセスが動作するプロセッサから共有メモリに対して、図５（ｂ）に示すように、読み出し先アドレスが同じリード命令が繰り返し送信される。本実施形態では、このように、スピンロック中には、書き込み先アドレスが同じＴ＆Ｓ命令がプロセッサから共有メモリに対して繰り返し送信され、あるいは読み出し先アドレスが同じリード命令がプロセッサから共有メモリに対して繰り返し送信される、という点に着目し、プロセッサの外部でスピンロックを検出する。
【００２５】
以下、本発明の第１の実施形態に係るスピンロック検出装置について詳細に説明する。本実施形態に係るスピンロック検出装置が接続されるデータ処理装置は、図３を参照して説明した方法を使用して、共有リソースへのアクセスをセマフォにより制御するものとする。
【００２６】
図６を参照すると、本実施形態にかかるスピンロック検出装置１００は、複数のプロセッサ１４０が共有メモリ１５０に接続されたデータ処理装置に接続される。スピンロック検出装置１００は、バッファメモリ１１０と判定部１２０と転送部１３０とから構成される。
【００２７】
転送部１３０は、プロセッサ１４０から共有メモリ１５０に対して発行された命令が通過する経路の途中に配置されている。転送部１３０は、プロセッサ１４０から発行されたメモリアクセス命令などの命令を受信すると、受信した命令を共用メモリ１５０に対して送信する機能を有する。また転送部１３０は、判定部１２０からアクセス先アドレスと制限時間とを添えた送信制限要求を受け取ると、以後受信する命令のうち、上記アクセス先アドレスと同じアクセス先アドレスを有するリード命令の共用メモリ１５０への送信を上記制限時間だけ制限する機能を有する。
【００２８】
バッファメモリ１１０は、プロセッサ１４０から共有メモリ１５０に対して発行されたリード命令を記憶する機能を有する履歴バッファである。バッファメモリ１１０は、ＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成される。
【００２９】
判定部１２０は、プロセッサ１４０から共有メモリ１５０に対して発行されたリード命令を受信し、バッファメモリ１１０に記憶する機能を有する。また判定部１２０は、過去一定期間内にバッファメモリ１１０に記憶したリード命令のうち、お互いのアクセス先アドレスが同一であるという条件を満たす複数のリード命令の数を算出し、この算出した数と予め定められた閾値とを比較してスピンロックを検出する機能を有する。具体的には、判定部１２０は、上記算出した数と閾値とを比較し、算出した数が閾値より大きければスピンロック状態であると決定し、そうでなければスピンロック状態でないと決定する。さらに判定部１２０は、スピンロックを検出すると、上記複数のリード命令が共通に有するアクセス先アドレスと制限時間とを決定する機能と、この決定したアクセス先アドレスと制限時間とを添えた送信制限要求を転送部１３０に送信する機能とを有する。
【００３０】
判定部１２０は、制限時間の決定では、例えば予め定められた時間を制限時間として決定してよい。あるいは判定部１２０は、プロセッサ１４０から単位時間あたりに受信するメモリアクセス命令等の命令の受信数、即ち転送部１３０を通過する命令数がより多いほどより長くなる時間を制限時間として決定してよい。あるいは判定部１２０は、通過する命令の応答時間がより長いほどより長くなる時間を制限時間として決定してよい。
【００３１】
スピンロック検出装置１００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ１１０、判定部１２０、および転送部１３０を実現する。
【００３２】
以下、本実施形態に係るスピンロック検出装置１００の動作を説明する。
【００３３】
図７は本実施形態に係るスピンロック検出装置１００の転送部１３０の動作の一例を示すフローチャートである。図７を参照すると、スピンロック検出装置１００の転送部１３０は、プロセッサ１４０から共有メモリ１５０に対して発行された命令を受信すると（ステップＳ１０１）、受信した命令がリード命令か否かを判定する（ステップＳ１０２）。次に転送部１３０は、受信した命令がリード命令以外の命令であれば、受信した命令を共有メモリ１５０へ送信する（ステップＳ１０５）。また転送部１３０は、受信した命令がリード命令であれば、自身が保持する送信制限フラグの値が制限ありを示す値１になっているか否かを判定し（ステップＳ１０３）、値１であれば当該リード命令のアクセス先アドレスが自身が保持する送信制限対象アドレスに一致するか否かを判定する（ステップＳ１０４）。転送部１３０は、送信制限フラグの値が１でない場合、および送信制限フラグの値が１であっても当該リード命令のアクセス先アドレスが送信制限対象アドレスに一致しない場合、当該リード命令を共有メモリ１５０へ送信する（ステップＳ１０５）。しかし、転送部１３０は、送信制限フラグの値が１であり、且つ、当該リード命令のアクセス先アドレスが送信制限対象アドレスに一致する場合、当該リード命令は共有メモリ１５０へは送信しない。
【００３４】
転送部１３０は、判定部１２０からアクセス先アドレスと制限時間とを添えた送信制限要求を受信すると（ステップＳ１０６）、送信制限フラグを値１に設定し（ステップＳ１０７）、送信制限要求で通知されたアクセス先アドレスを制限対象アドレスに設定し（ステップＳ１０８）、送信制限要求で通知された制限時間をタイマに設定してタイマを起動する（ステップＳ１０９）。そして転送部１３０は、設定した制限時間経過時にタイマがタイムアウトすると（ステップＳ１１０）、送信制限フラグの値を０に設定する（ステップＳ１１１）。
【００３５】
図８は本実施形態に係るスピンロック検出装置１００の判定部１２０の動作の一例を示すフローチャートである。図８を参照すると、スピンロック検出装置１００の判定部１２０は、バッファメモリ１１０の内容を消去してから予め定められた時間が経過したか否か（ステップＳ１２１）、プロセッサ１４０から命令を受信したか否か（ステップＳ１２３）を、判定する。予め定められた時間が経過していれば、判定部１２０はバッファメモリ１１０の内容を消去する（ステップＳ１２２）。このように判定部１２０は、規定時間毎にバッファメモリ１１０の内容を消去する。また判定部１２０は、命令を受信すると、受信した命令がリード命令か否かを判定し（ステップＳ１２４）、リード命令であれば、以下のような処理を行う。
【００３６】
まず判定部１２０は、今回受信したリード命令のアクセス先アドレスと同じアクセス先アドレスのリード命令がバッファメモリ１１０に記憶されているか否かを調べる（ステップＳ１２５）。同じアクセス先アドレスのリード命令が記憶されていなければ、判定部１２０は今回受信したリード命令をバッファメモリ１１０に記憶し（ステップＳ１２６）、当該リード命令のアクセス先アドレスと同じアクセス先アドレスを有するリード命令のカウントに１を設定してバッファメモリ１１０に記憶し（ステップＳ１２７）、スピンロック判定を解除する（ステップＳ１２８）。ここで、スピンロック判定を解除するとは、スピンロック状態でないと判定することを意味する。
【００３７】
他方、判定部１２０は、今回受信したリード命令のアクセス先アドレスと同じアクセス先アドレスのリード命令がバッファメモリ１１０に記憶されていれば、当該リード命令のアクセス先アドレスと同じアクセス先アドレスを有するリード命令のカウントに１を加算してバッファメモリ１１０に記憶し（ステップＳ１２９）、当該カウントが閾値を超えているか否かを判定する（ステップＳ１３０）。そして、判定部１２０は、カウントが閾値を超えていなければ、スピンロック判定を解除し（ステップＳ１２８）、カウントが閾値を超えていれば、スピンロック判定を設定する（ステップＳ１３１）。ここで、スピンロック判定を設定するとは、スピンロック状態であると判定することを意味する。判定部１２０は、スピンロック判定を設定すると、カウントが閾値を超えたリード命令からアクセス先アドレスを抽出すると共に制限時間を設定し、このアクセス先アドレスと制限時間とを添えた送信制限要求を転送部１３０に送信する（ステップＳ１３２）。
【００３８】
図９はバッファメモリ１１０の内容の一例を示している。図９の例では、判定部１２０は、リード命令を受信する毎に、受信したリード命令の命令種別とアクセス先アドレスと発行元番号とカウントとから成るエントリをバッファメモリ１１０に追加する。このとき、カウントの値は、バッファメモリ１１０に既に記憶されているリード命令のうち同じアクセス先アドレスを有するリード命令の数に自リード命令を加えた値としてカウントしている。しかし、バッファメモリ１１０の内容は図９に記載される形式に限定されない。例えば、命令種別および発行元番号の何れか一方あるいは双方は記憶せず、命令種別とアドレスとカウントの組、アドレスと発行元番号とカウントの組、あるいはアドレスとカウントの組をバッファメモリ１１０に記憶するようにしてもよい。また同じ組が既に記憶されている場合には、既に記憶されている同じ組のカウントを１だけ加算するようにしてもよい。
【００３９】
このように本実施形態によれば、プロセッサ１４０から共有メモリ１５０に対して送信されるリード命令に基づいて、プロセッサ１４０の外部でスピンロックを検出することができ、その検出には、排他制御のためのロック信号やポーリング命令といった特殊な信号は不要になる。その理由は、プロセッサ１４０から共有メモリ１５０に対して発行されたリード命令をバッファメモリ１１０に記憶し、バッファメモリ１１０に記憶したリード命令のうちアクセス先アドレスが同じ複数のリード命令の数を算出し、この算出した数を閾値と比較してスピンロックを検出するためである。
【００４０】
また本実施形態によれば、セマフォを獲得しているプロセスが実行する共有メモリ１５０に対するアクセスが、セマフォ獲得待ちプロセスが実行する共有メモリ１５０に対するアクセスと競合してしまうことを防止できる。その理由は、プロセッサ１４０から発行されたリード命令を受信して共有メモリ１５０へ送信する転送部１３０は、判定部１２０によるスピンロックの検出後、スピンロックに係るリード命令の共有メモリ１５０への送信を所定時間だけ制限するためである。セマフォを獲得しているプロセスが実行する共有メモリ１５０に対するアクセスが他のプロセスと競合して待ち合わせ時間が発生すると、セマフォを解放するまでの時間が長くなり、その結果、全プロセスの処理時間が伸長してしまう。本実施形態ではこのような問題を解消することができる。特に、並列実行しているプロセス（あるいはスレッド）数が多数ある場合には、処理時間を短縮する効果が累積的に発揮される。
【００４１】
また本実施形態によれば、転送部１３０は、スピンロックに係るリード命令の共有メモリ１５０への送信を所定時間だけ制限するため、所定時間経過後はスピンロックに係るリード命令の共有メモリ１５０への送信が再開される。このため、セマフォ獲得待ちプロセスがセマフォの獲得を長く待ち続けることを防止できる。
【００４２】
[第２の実施形態]
本発明の第２の実施形態に係るスピンロック検出装置について詳細に説明する。本実施形態に係るスピンロック検出装置が接続されるデータ処理装置は、図３を参照して説明した方法を使用して、共有リソースへのアクセスをセマフォにより制御するものとする。
【００４３】
図１０を参照すると、本実施形態にかかるスピンロック検出装置２００は、複数のプロセッサ２４０が共有メモリ２５０に接続されたデータ処理装置に接続される。プロセッサ２４０と共有メモリ２５０とは、図６に示した第１の実施形態のプロセッサ１４０と共有メモリ１５０と同様の機能を有する。スピンロック検出装置２００は、バッファメモリ２１０と判定部２２０と転送部２３０とから構成される。このうち、バッファメモリ２１０は、図６に示した第１の実施形態のスピンロック検出装置１００のバッファメモリ１１０と同様の機能を有する。
【００４４】
転送部２３０は、プロセッサ２４０から共有メモリ２５０に対して発行された命令が通過する経路の途中に配置されている。転送部２３０は、プロセッサ２４０から発行されたメモリアクセス命令などの命令を受信すると、受信した命令を共用メモリ２５０に対して送信する機能を有する。また転送部２３０は、判定部２２０から命令発行元とアクセス先アドレスと制限時間とを添えた送信制限要求を受け取ると、以後受信する命令のうち、上記命令発行元と同じ命令発行元を有し、且つ上記アクセス先アドレスと同じアクセス先アドレスを有するリード命令の共用メモリ２５０への送信を上記制限時間だけ制限する機能を有する。
【００４５】
判定部２２０は、プロセッサ２４０から共有メモリ２５０に対して発行されたリード命令を受信し、バッファメモリ２１０に記憶する機能を有する。また判定部２２０は、過去一定期間内にバッファメモリ２１０に記憶したリード命令のうち、お互いの命令発行元とアクセス先アドレスとが同一であるという条件を満たす複数のリード命令の数を算出し、この算出した数と予め定められた閾値とを比較してスピンロックを検出する機能を有する。具体的には、判定部２２０は、上記算出した数と閾値とを比較し、算出した数が閾値より大きければスピンロック状態であると決定し、そうでなければスピンロック状態でないと決定する。さらに判定部２２０は、スピンロックを検出すると、上記複数のリード命令が共通に有する命令発行元とアクセス先アドレスと制限時間とを決定する機能と、この決定した命令発行元とアクセス先アドレスと制限時間とを添えた送信制限要求を転送部２３０に送信する機能とを有する。判定部２２０は、判定部１２０と同様の方法を使用して制限時間を決定する。
【００４６】
スピンロック検出装置２００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ２１０、判定部２２０、および転送部２３０を実現する。
【００４７】
以下、本実施形態に係るスピンロック検出装置２００の動作を説明する。
【００４８】
図１１は本実施形態に係るスピンロック検出装置２００の転送部２３０の動作の一例を示すフローチャートである。図１１を参照すると、スピンロック検出装置２００の転送部２３０は、プロセッサ２４０から共有メモリ２５０に対して発行された命令を受信すると（ステップＳ２０１）、受信した命令がリード命令か否かを判定する（ステップＳ２０２）。次に転送部２３０は、受信した命令がリード命令以外の命令であれば、受信した命令を共有メモリ２５０へ送信する（ステップＳ２０５）。また転送部２３０は、受信した命令がリード命令であれば、自身が保持する送信制限フラグの値が制限ありを示す値１になっているか否かを判定し（ステップＳ２０３）、値１であれば当該リード命令の命令発行元が自身が保持する送信制限対象命令発行元に一致し、かつ当該リード命令のアクセス先アドレスが自身が保持する送信制限対象アドレスに一致するか否かを判定する（ステップＳ２０４）。転送部２３０は、送信制限フラグの値が１でない場合、および送信制限フラグの値が１であっても当該リード命令の命令発行元およびアクセス先アドレスの少なくとも一方が送信制限対象命令発行元および送信制限対象アドレスに一致しない場合、当該リード命令を共有メモリ２５０へ送信する（ステップＳ２０５）。しかし、転送部２３０は、送信制限フラグの値が１であり、且つ、当該リード命令の命令発行元およびアクセス先アドレスが送信制限対象命令発行元および送信制限対象アドレスに一致する場合、当該リード命令は共有メモリ２５０へは送信しない。
【００４９】
転送部２３０は、判定部２２０から命令発行元とアクセス先アドレスと制限時間とを添えた送信制限要求を受信すると（ステップＳ２０６）、送信制限フラグを値１に設定し（ステップＳ２０７）、送信制限要求で通知された命令発行元およびアクセス先アドレスを制限対象命令発行元および制限対象アドレスに設定し（ステップＳ２０８）、送信制限要求で通知された制限時間をタイマに設定してタイマを起動する（ステップＳ２０９）。そして転送部２３０は、設定した制限時間経過時にタイマがタイムアウトすると（ステップＳ２１０）、送信制限フラグの値を０に設定する（ステップＳ２１１）。
【００５０】
図１２は本実施形態に係るスピンロック検出装置２００の判定部２２０の動作の一例を示すフローチャートである。図１２を参照すると、スピンロック検出装置２００の判定部２２０は、バッファメモリ２１０の内容を消去してから予め定められた時間が経過したか否か（ステップＳ２２１）、プロセッサ２４０から命令を受信したか否か（ステップＳ２２３）を、判定する。予め定められた時間が経過していれば、判定部２２０はバッファメモリ２１０の内容を消去する（ステップＳ２２２）。また判定部２２０は、命令を受信すると、受信した命令がリード命令か否かを判定し（ステップＳ２２４）、リード命令であれば、以下のような処理を行う。
【００５１】
まず判定部２２０は、今回受信したリード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスのリード命令がバッファメモリ２１０に記憶されているか否かを調べる（ステップＳ２２５）。同じ命令発行元およびアクセス先アドレスのリード命令が記憶されていなければ、判定部２２０は今回受信したリード命令をバッファメモリ２１０に記憶し（ステップＳ２２６）、当該リード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有するリード命令のカウントに１を設定してバッファメモリ２１０に記憶し（ステップＳ２２７）、スピンロック判定を解除する（ステップＳ２２８）。
【００５２】
他方、判定部２２０は、今回受信したリード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスのリード命令がバッファメモリ２１０に記憶されていれば、当該リード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有するリード命令のカウントに１を加算してバッファメモリ２１０に記憶し（ステップＳ２２９）、当該カウントが閾値を超えているか否かを判定する（ステップＳ２３０）。そして、判定部２２０は、カウントが閾値を超えていなければ、スピンロック判定を解除し（ステップＳ２２８）、カウントが閾値を超えていれば、スピンロック判定を設定する（ステップＳ２３１）。判定部２２０は、スピンロック判定を設定すると、カウントが閾値を超えたリード命令から命令発行元およびアクセス先アドレスを抽出すると共に制限時間を設定し、この命令発行元とアクセス先アドレスと制限時間とを添えた送信制限要求を転送部２３０に送信する（ステップＳ２３２）。
【００５３】
図１３はバッファメモリ２１０の内容の一例を示している。図１３の例では、判定部２２０は、リード命令を受信する毎に、受信したリード命令の命令種別とアクセス先アドレスと発行元番号とカウントとから成るエントリをバッファメモリ２１０に追加する。このとき、カウントの値は、バッファメモリ２１０に既に記憶されているリード命令のうち同じ発行元番号とアクセス先アドレスとを有するリード命令の数に自リード命令を加えた値としてカウントしている。しかし、バッファメモリ２１０の内容は図１３に記載される形式に限定されない。例えば、命令種別は記憶せず、アドレスと発行元番号とカウントの組をバッファメモリ２１０に記憶するようにしてもよい。また同じ組が既に記憶されている場合には、既に記憶されている同じ組のカウントを１だけ加算するようにしてもよい。
【００５４】
このように本実施形態によれば、プロセッサ２４０から共有メモリ２５０に対して送信されるリード命令に基づいて、プロセッサ２４０の外部でスピンロックを検出することができ、その検出には、排他制御のためのロック信号やポーリング命令といった特殊な信号は不要になる。その理由は、プロセッサ２４０から共有メモリ２５０に対して発行されたリード命令をバッファメモリ２１０に記憶し、バッファメモリ２１０に記憶したリード命令のうち命令発行元とアクセス先アドレスとが同じ複数のリード命令の数を算出し、この算出した数を閾値と比較してスピンロックを検出するためである。
【００５５】
また本実施形態によれば、命令発行元の単位でスピンロックを検出することができる。その理由は、バッファメモリ２１０に記憶したリード命令のうち命令発行元とアクセス先アドレスとが同じ複数のリード命令の数を算出し、この算出した数を閾値と比較してスピンロックを検出するためである。
【００５６】
また本実施形態によれば、セマフォを獲得しているプロセスが実行する共有メモリ２５０に対するアクセスが、セマフォ獲得待ちプロセスが実行する共有メモリ２５０に対するアクセスと競合してしまうことを防止できる。その理由は、プロセッサ２４０から発行されたリード命令を受信して共有メモリ２５０へ送信する転送部２３０は、判定部２２０によるスピンロックの検出後、スピンロックに係るリード命令の共有メモリ２５０への送信を所定時間だけ制限するためである。セマフォを獲得しているプロセスが実行する共有メモリ２５０に対するアクセスが他のプロセスと競合して待ち合わせ時間が発生すると、セマフォを解放するまでの時間が長くなり、その結果、全プロセスの処理時間が伸長してしまう。本実施形態ではこのような問題を解消することができる。
【００５７】
また本実施形態によれば、転送部２３０は、スピンロックに係るリード命令の共有メモリ２５０への送信を所定時間だけ制限するため、所定時間経過後はスピンロックに係るリード命令の共有メモリ２５０への送信が再開される。このため、セマフォ獲得待ちプロセスがセマフォの獲得を長く待ち続けることを防止できる。
【００５８】
また本実施形態によれば、転送部２３０は、スピンロックに係るリード命令と同じアクセス先アドレスを有していても命令発行元がスピンロックに係るリード命令の命令発行元と相違するリード命令の共有メモリ２５０への送信は制限しない。このため、他の命令発行元がセマフォ獲得待ちのプロセス数を調査する等のために、図３のアドレス０ｘ１８のチケットカウンタを読み出す動作は支障なく実施することができる。
【００５９】
[第３の実施形態]
本発明の第３の実施形態に係るスピンロック検出装置について詳細に説明する。本実施形態に係るスピンロック検出装置が接続されるデータ処理装置は、図３を参照して説明した方法を使用して、共有リソースへのアクセスをセマフォにより制御するものとする。
【００６０】
図１４を参照すると、本実施形態にかかるスピンロック検出装置３００は、複数のプロセッサ３４０が共有メモリ３５０に接続されたデータ処理装置に接続される。プロセッサ３４０と共有メモリ３５０とは、図６に示した第１の実施形態のプロセッサ１４０と共有メモリ１５０と同様の機能を有する。スピンロック検出装置３００は、バッファメモリ３１０と判定部３２０と転送部３３０とから構成される。このうち、バッファメモリ３１０と転送部３３０とは、図６に示した第１の実施形態に係るスピンロック検出装置１００のバッファメモリ１１０と転送部１３０と同様の機能を有する。
【００６１】
判定部３２０は、過去一定期間内にプロセッサ３４０から受信したメモリアクセス命令等の命令の数を算出する機能を有する。また判定部３２０は、プロセッサ３４０から共有メモリ３５０に対して発行されたリード命令を受信し、バッファメモリ３１０に記憶する機能を有する。また判定部３２０は、過去一定期間内にバッファメモリ３１０に記憶したリード命令のうち、お互いのアクセス先アドレスが同一であるという条件を満たす複数のリード命令の数を算出し、上記算出した命令の数に対する上記算出したリード命令の数の割合を算出し、この算出した割合と予め定められた閾値とを比較してスピンロックを検出する機能を有する。具体的には、判定部３２０は、上記算出した割合と閾値とを比較し、算出した割合が閾値より大きければスピンロック状態であると決定し、そうでなければスピンロック状態でないと決定する。さらに判定部３２０は、スピンロックを検出すると、上記複数のリード命令が共通に有するアクセス先アドレスと制限時間とを決定する機能と、この決定したアクセス先アドレスと制限時間とを添えた送信制限要求を転送部３３０に送信する機能とを有する。
【００６２】
判定部３２０は、制限時間の決定では、例えば予め定められた時間を制限時間として決定してよい。あるいは判定部３２０は、プロセッサ３４０から単位時間あたりに受信するメモリアクセス命令等の命令の受信数、即ち転送部３３０を通過する命令数がより多いほどより長くなる時間を制限時間として決定してよい。あるいは判定部３２０は、通過する命令の応答時間がより長いほどより長くなる時間を制限時間として決定してよい。
【００６３】
スピンロック検出装置３００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ３１０、判定部３２０、および転送部３３０を実現する。
【００６４】
以下、本実施形態に係るスピンロック検出装置３００の動作を説明する。本実施形態に係るスピンロック検出装置３００の転送部３３０の動作は、図６に示した第１の実施形態に係るスピンロック検出装置１００の転送部１３０の動作と同じである。
【００６５】
図１５は本実施形態に係るスピンロック検出装置３００の判定部３２０の動作の一例を示すフローチャートである。図１５を参照すると、スピンロック検出装置３００の判定部３２０は、バッファメモリ３１０の内容を消去してから予め定められた時間が経過したか否か（ステップＳ３２１）、プロセッサ３４０から命令を受信したか否か（ステップＳ３２３）を、判定する。予め定められた時間が経過していれば、判定部３２０はバッファメモリ３１０の内容を消去する（ステップＳ３２２）。また判定部３２０は、命令を受信すると、バッファメモリ３１０に記憶する命令数を１だけ加算する（ステップＳ３２４）。また判定部３２０は、受信した命令がリード命令か否かを判定し（ステップＳ３２５）、リード命令であれば、以下のような処理を行う。
【００６６】
まず判定部３２０は、今回受信したリード命令のアクセス先アドレスと同じアクセス先アドレスのリード命令がバッファメモリ３１０に記憶されているか否かを調べる（ステップＳ３２６）。同じアクセス先アドレスのリード命令が記憶されていなければ、判定部３２０は今回受信したリード命令をバッファメモリ３１０に記憶し（ステップＳ３２７）、当該リード命令のアクセス先アドレスと同じアクセス先アドレスを有するリード命令のカウントに１を設定してバッファメモリ３１０に記憶し（ステップＳ３２８）、スピンロック判定を解除する（ステップＳ３２９）。
【００６７】
他方、判定部３２０は、今回受信したリード命令のアクセス先アドレスと同じアクセス先アドレスのリード命令がバッファメモリ３１０に記憶されていれば、当該リード命令のアクセス先アドレスと同じアクセス先アドレスを有するリード命令のカウントに１を加算してバッファメモリ３１０に記憶し（ステップＳ３３０）、ステップＳ３２４で算出した命令数に対するステップＳ３３０で更新したカウントの割合を算出し（ステップＳ３３１）、その割合が閾値を超えているか否かを判定する（ステップＳ３３２）。そして、判定部３２０は、割合が閾値を超えていなければ、スピンロック判定を解除し（ステップＳ３２９）、カウントが閾値を超えていれば、スピンロック判定を設定する（ステップＳ３３３）。判定部３２０は、スピンロック判定を設定すると、割合が閾値を超えたリード命令からアクセス先アドレスを抽出すると共に制限時間を設定し、このアクセス先アドレスと制限時間とを添えた送信制限要求を転送部３３０に送信する（ステップＳ３３４）。
【００６８】
図１６はバッファメモリ３１０の内容の一例を示している。図１６の例では、判定部３２０は、命令を受信する毎に、命令数を格納するエントリの値（初期値は０）を１加算する。また判定部３２０は、受信した命令がリード命令であれば、受信したリード命令の命令種別とアクセス先アドレスと発行元番号とカウントとから成るエントリをバッファメモリ３１０に追加する。このとき、カウントの値は、バッファメモリ３１０に既に記憶されているリード命令のうち同じアクセス先アドレスを有するリード命令の数に自リード命令を加えた値としてカウントしている。しかし、バッファメモリ３１０の内容は図１６に記載される形式に限定されない。例えば、命令種別および発行元番号の何れか一方あるいは双方は記憶せず、命令種別とアドレスとカウントの組、アドレスと発行元番号とカウントの組、あるいはアドレスとカウントの組をバッファメモリ３１０に記憶するようにしてもよい。また同じ組が既に記憶されている場合には、既に記憶されている同じ組のカウントを１だけ加算するようにしてもよい。
【００６９】
このように本実施形態によれば、プロセッサ３４０から共有メモリ３５０に対して送信されるリード命令に基づいて、プロセッサ３４０の外部でスピンロックを検出することができ、その検出には、排他制御のためのロック信号やポーリング命令といった特殊な信号は不要になる。その理由は、プロセッサ３４０から共有メモリ３５０に対して発行されたリード命令をバッファメモリ３１０に記憶し、バッファメモリ３１０に記憶したリード命令のうちアクセス先アドレスが同じ複数のリード命令の数を算出し、受信した命令数に対する上記算出した数の割合を閾値と比較してスピンロックを検出するためである。即ち、本実施形態は、スピンロックが発生するとスピンロックに係るリード命令が増加して転送部３３０を通過する命令数に占める割合が増大する、という点に着目してスピンロックを検出するためである。
【００７０】
また本実施形態によれば、セマフォを獲得しているプロセスが実行する共有メモリ３５０に対するアクセスが、セマフォ獲得待ちプロセスが実行する共有メモリ３５０に対するアクセスと競合してしまうことを防止できる。その理由は、プロセッサ３４０から発行されたリード命令を受信して共有メモリ３５０へ送信する転送部３３０は、判定部３２０によるスピンロックの検出後、スピンロックに係るリード命令の共有メモリ３５０への送信を所定時間だけ制限するためである。セマフォを獲得しているプロセスが実行する共有メモリ３５０に対するアクセスが他のプロセスと競合して待ち合わせ時間が発生すると、セマフォを解放するまでの時間が長くなり、その結果、全プロセスの処理時間が伸長してしまう。本実施形態ではこのような問題を解消することができる。
【００７１】
また本実施形態によれば、転送部３３０は、スピンロックに係るリード命令の共有メモリ３５０への送信を所定時間だけ制限するため、所定時間経過後はスピンロックに係るリード命令の共有メモリ３５０への送信が再開される。このため、セマフォ獲得待ちプロセスがセマフォの獲得を長く待ち続けることを防止できる。
【００７２】
[第４の実施形態]
本発明の第４の実施形態に係るスピンロック検出装置について詳細に説明する。本実施形態に係るスピンロック検出装置が接続されるデータ処理装置は、図３を参照して説明した方法を使用して、共有リソースへのアクセスをセマフォにより制御するものとする。
【００７３】
図１７を参照すると、本実施形態にかかるスピンロック検出装置４００は、複数のプロセッサ４４０が共有メモリ４５０に接続されたデータ処理装置に接続される。プロセッサ４４０と共有メモリ４５０とは、図６に示した第１の実施形態のプロセッサ１４０と共有メモリ１５０と同様の機能を有する。スピンロック検出装置４００は、バッファメモリ４１０と判定部４２０と転送部４３０とから構成される。このうち、バッファメモリ４１０は、図６に示した第１の実施形態のスピンロック検出装置１００のバッファメモリ１１０と同様の機能を有する。また転送部４３０は、図１０に示した第２の実施形態のスピンロック検出装置２００の転送部２３０と同様の機能を有する。
【００７４】
判定部４２０は、過去一定期間内にプロセッサ４４０から受信したメモリアクセス命令等の命令の数を算出する機能を有する。また判定部４２０は、プロセッサ４４０から共有メモリ４５０に対して発行されたリード命令を受信し、バッファメモリ４１０に記憶する機能を有する。また判定部４２０は、過去一定期間内にバッファメモリ４１０に記憶したリード命令のうち、お互いの命令発行元およびアクセス先アドレスが同一であるという条件を満たす複数のリード命令の数を算出し、上記算出した命令の数に対する上記算出したリード命令の数の割合を算出し、この算出した割合と予め定められた閾値とを比較してスピンロックを検出する機能を有する。具体的には、判定部４２０は、上記算出した割合と閾値とを比較し、算出した割合が閾値以上であればスピンロック状態であると決定し、そうでなければスピンロック状態でないと決定する。さらに判定部４２０は、スピンロックを検出すると、上記複数のリード命令が共通に有する命令発行元とアクセス先アドレスと制限時間とを決定する機能と、この決定した命令発行元とアクセス先アドレスと制限時間とを添えた送信制限要求を転送部４３０に送信する機能とを有する。
【００７５】
判定部４２０は、制限時間の決定では、例えば予め定められた時間を制限時間として決定してよい。あるいは判定部４２０は、プロセッサ４４０から単位時間あたりに受信するメモリアクセス命令等の命令の受信数、即ち転送部４３０を通過する命令数がより多いほどより長くなる時間を制限時間として決定してよい。あるいは判定部４２０は、通過する命令の応答時間がより長いほどより長くなる時間を制限時間として決定してよい。
【００７６】
スピンロック検出装置４００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ４１０、判定部４２０、および転送部４３０を実現する。
【００７７】
以下、本実施形態に係るスピンロック検出装置４００の動作を説明する。本実施形態に係るスピンロック検出装置４００の転送部４３０の動作は、図１０に示した第２の実施形態に係るスピンロック検出装置２００の転送部２３０の動作と同じである。
【００７８】
図１８は本実施形態に係るスピンロック検出装置４００の判定部４２０の動作の一例を示すフローチャートである。図１８を参照すると、スピンロック検出装置４００の判定部４２０は、バッファメモリ４１０の内容を消去してから予め定められた時間が経過したか否か（ステップＳ４２１）、プロセッサ４４０から命令を受信したか否か（ステップＳ４２３）を、判定する。予め定められた時間が経過していれば、判定部４２０はバッファメモリ４１０の内容を消去する（ステップＳ４２２）。また判定部４２０は、命令を受信すると、バッファメモリ４１０に記憶する命令数を１だけ加算する（ステップＳ４２４）。また判定部４２０は、受信した命令がリード命令か否かを判定し（ステップＳ４２５）、リード命令であれば、以下のような処理を行う。
【００７９】
まず判定部４２０は、今回受信したリード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスのリード命令がバッファメモリ４１０に記憶されているか否かを調べる（ステップＳ４２６）。命令発行元およびアクセス先アドレスの双方が同じリード命令が記憶されていなければ、判定部４２０は今回受信したリード命令をバッファメモリ４１０に記憶し（ステップＳ４２７）、当該リード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有するリード命令のカウントに１を設定してバッファメモリ４１０に記憶し（ステップＳ４２８）、スピンロック判定を解除する（ステップＳ４２９）。
【００８０】
他方、判定部４２０は、今回受信したリード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスのリード命令がバッファメモリ４１０に記憶されていれば、当該リード命令の命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有するリード命令のカウントに１を加算してバッファメモリ４１０に記憶し（ステップＳ４３０）、ステップＳ４２４で算出した命令数に対するステップＳ４３０で更新したカウントの割合を算出し（ステップＳ４３１）、その割合が閾値を超えているか否かを判定する（ステップＳ４３２）。そして、判定部４２０は、割合が閾値を超えていなければ、スピンロック判定を解除し（ステップＳ４２９）、カウントが閾値を超えていれば、スピンロック判定を設定する（ステップＳ４３３）。判定部４２０は、スピンロック判定を設定すると、割合が閾値を超えたリード命令から命令発行元およびアクセス先アドレスを抽出すると共に制限時間を設定し、この命令発行元とアクセス先アドレスと制限時間とを添えた送信制限要求を転送部４３０に送信する（ステップＳ４３４）。
【００８１】
図１９はバッファメモリ４１０の内容の一例を示している。図１９の例では、判定部４２０は、命令を受信する毎に、命令数を格納するエントリの値（初期値は０）を１加算する。また判定部４２０は、受信した命令がリード命令であれば、受信したリード命令の命令種別とアクセス先アドレスと発行元番号とカウントとから成るエントリをバッファメモリ４１０に追加する。このとき、カウントの値は、バッファメモリ４１０に既に記憶されているリード命令のうち同じ命令発行元およびアクセス先アドレスを有するリード命令の数に自リード命令を加えた値としてカウントしている。しかし、バッファメモリ４１０の内容は図１９に記載される形式に限定されない。例えば、命令種別は記憶せず、アドレスと発行元番号とカウントの組をバッファメモリ４１０に記憶するようにしてもよい。また同じ組が既に記憶されている場合には、既に記憶されている同じ組のカウントを１だけ加算するようにしてもよい。
【００８２】
このように本実施形態によれば、プロセッサ４４０から共有メモリ４５０に対して送信されるリード命令に基づいて、プロセッサ４４０の外部でスピンロックを検出することができ、その検出には、排他制御のためのロック信号やポーリング命令といった特殊な信号は不要になる。その理由は、プロセッサ４４０から共有メモリ４５０に対して発行されたリード命令をバッファメモリ４１０に記憶し、バッファメモリ４１０に記憶したリード命令のうち命令発行元とアクセス先アドレスとが同じ複数のリード命令の数を算出し、受信した命令数に対する上記算出した数の割合を閾値と比較してスピンロックを検出するためである。
【００８３】
また本実施形態によれば、命令発行元の単位でスピンロックを検出することができる。その理由は、バッファメモリ４１０に記憶したリード命令のうち命令発行元とアクセス先アドレスとが同じ複数のリード命令の数を算出し、命令数に対する上記算出した数の割合を閾値と比較してスピンロックを検出するためである。
【００８４】
また本実施形態によれば、セマフォを獲得しているプロセスが実行する共有メモリ４５０に対するアクセスが、セマフォ獲得待ちプロセスが実行する共有メモリ４５０に対するアクセスと競合してしまうことを防止できる。その理由は、プロセッサ４４０から発行されたリード命令を受信して共有メモリ４５０へ送信する転送部４３０は、判定部４２０によるスピンロックの検出後、スピンロックに係るリード命令の共有メモリ４５０への送信を所定時間だけ制限するためである。セマフォを獲得しているプロセスが実行する共有メモリ４５０に対するアクセスが他のプロセスと競合して待ち合わせ時間が発生すると、セマフォを解放するまでの時間が長くなり、その結果、全プロセスの処理時間が伸長してしまう。本実施形態ではこのような問題を解消することができる。
【００８５】
また本実施形態によれば、転送部４３０は、スピンロックに係るリード命令の共有メモリ４５０への送信を所定時間だけ制限するため、所定時間経過後はスピンロックに係るリード命令の共有メモリ４５０への送信が再開される。このため、セマフォ獲得待ちプロセスがセマフォの獲得を長く待ち続けることを防止できる。
【００８６】
また本実施形態によれば、転送部４３０は、スピンロックに係るリード命令と同じアクセス先アドレスを有していても命令発行元がスピンロックに係るリード命令の命令発行元と相違するリード命令の共有メモリ４５０への送信は制限しない。このため、他の命令発行元がセマフォ獲得待ちのプロセス数を調査する等のために、図３のアドレス０ｘ１８のチケットカウンタを読み出す動作は支障なく実施することができる。
【００８７】
[第５の実施形態]
本発明の第５の実施形態に係るスピンロック検出装置について詳細に説明する。本実施形態に係るスピンロック検出装置が接続されるデータ処理装置は、図３を参照して説明した方法を使用して、共有リソースへのアクセスをセマフォにより制御するものとする。
【００８８】
図２０を参照すると、本実施形態にかかるスピンロック検出装置５００は、複数のプロセッサ５４０が共有メモリ５５０に接続されたデータ処理装置に接続される。プロセッサ５４０と共有メモリ５５０とは、図６に示した第１の実施形態のプロセッサ１４０と共有メモリ１５０と同様の機能を有する。スピンロック検出装置５００は、バッファメモリ５１０と判定部５２０と転送部５３０とから構成される。このうち、バッファメモリ５１０と判定部５２０とは、図６に示した第１の実施形態のスピンロック検出装置１００のバッファメモリ１１０と判定部５２０と同様の機能を有する。
【００８９】
転送部５３０は、プロセッサ５４０から受信したリード命令を共有メモリ５５０へ送信しなかった場合、当該リード命令の命令発行元に対して当該リード命令を再び発行するように指示するリトライ指示を発行する機能を有する点で、図６に示した第１の実施形態のスピンロック検出装置１００の転送部１３０と相違し、その他の機能は転送部１３０と同様の機能を有する。
【００９０】
スピンロック検出装置５００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ５１０、判定部５２０、および転送部５３０を実現する。
【００９１】
以下、本実施形態に係るスピンロック検出装置５００の動作を説明する。本実施形態に係るスピンロック検出装置５００の判定部５２０の動作は、図６に示した第１の実施形態に係るスピンロック検出装置１００の判定部１２０の動作と同じである。また本実施形態に係るスピンロック検出装置５００の転送部５３０の動作は、以下に説明する動作を除き、図６に示した第１の実施形態に係るスピンロック検出装置１００の転送部１３０の動作と同じである。
【００９２】
転送部５３０は、プロセッサ５４０から受信したリード命令を送信制限のために共有メモリ４５０に送信しなかった場合、当該リード命令の命令発行元に対してリトライ指示を送信する。
【００９３】
このように本実施形態によれば、プロセッサ５４０から受信したスピンロックに係るリード命令の共有メモリ５５０への転送を制限すると共に、リトライ指示をリード命令発行元のプロセッサ５４０へ送信する。このため、リトライ指示を受信したプロセッサ５４０は、他に実行可能な処理を持っている場合、当該他の処理を実行することが可能になる。これに対して、リトライ指示を送信しない場合、リード命令発行元のプロセッサ５４０は、応答待ちになり、他に実行可能な処理を持っていてもそれを実行することができない。なお、リトライ指示を受信したプロセッサ５４０が他に実行可能な処理を持っていないために直ちにリード命令の再実行を行ったとしても、再実行されたリード命令は転送部５３０で遮断されて共有メモリ５５０へは送信されない。
【００９４】
[第６乃至第８の実施形態]
上記第５の実施形態に係るスピンロック検出装置５００は、図６に示した第１の実施形態に係るスピンロック検出装置１００の転送部１３０に対して、送信制限したリード命令の発行元へリトライ指示を送信する機能を付加している。
【００９５】
しかし、本発明の第６の実施形態として、図１０に示した第２の実施形態に係るスピンロック検出装置２００の転送部２３０に対して、送信制限したリード命令の発行元へリトライ指示を送信する機能を付加してよい。また本発明の第７の実施形態として、図１４に示した第３の実施形態に係るスピンロック検出装置３００の転送部３３０に対して、送信制限したリード命令の発行元へリトライ指示を送信する機能を付加してよい。また本発明の第８の実施形態として、図１７に示した第４の実施形態に係るスピンロック検出装置４００の転送部４３０に対して、送信制限したリード命令の発行元へリトライ指示を送信する機能を付加してよい。
【００９６】
[第９乃至第１６の実施形態]
上記第１乃至第８の実施形態では、スピンロック検出装置が接続されるデータ処理装置は図３を参照して説明した方法を使用して、共有リソースへのアクセスをセマフォにより制御するものとした。しかし、スピンロック検出装置が接続されるデータ処理装置は図１を参照して説明した方法を使用して、共有リソースへのアクセスをセマフォにより制御するものであってもよい。図３を参照して説明した方法の代わりに図１を参照して説明した方法を使用して共有リソースへのアクセスをセマフォにより制御する実施形態は、上記第１乃至第８の実施形態における「リード命令」を「Ｔ＆Ｓ命令」に読み替えればよい。以下、第１乃至第８の実施形態における「リード命令」を「Ｔ＆Ｓ命令」に読み替えた実施形態を第９乃至第１６の実施形態と記す。
【００９７】
[第１７の実施形態]
本発明の第１７の実施形態に係るスピンロック検出装置について詳細に説明する。本実施形態に係るスピンロック検出装置が接続されるデータ処理装置は、図１を参照して説明した方法を使用して共有リソースへのアクセスをセマフォにより制御するものとする。本実施形態に係るスピンロック検出装置は、第９の実施形態に係るスピンロック検出装置と比較して、命令の転送の制限を開始する契機が相違し、それ以外は第９の実施形態と同じである。
【００９８】
図２１を参照すると、本実施形態にかかるスピンロック検出装置１７００は、複数のプロセッサ１７４０が共有メモリ１７５０に接続されたデータ処理装置に接続される。各々のプロセッサ１７４０は、無効型プロトコルを用いたスヌープ方式のキャッシュメモリ１７６０を有する。キャッシュメモリ１７６０は、自キャッシュにデータを書き込む場合、書き込み要求を他のキャッシュメモリに通知する一方、他のキャッシュメモリからの書き込み要求を監視し、書き込まれるデータと同じアドレスのデータが自分のキャッシュにある場合、当該データを格納するキャッシュラインを無効にする。
【００９９】
スピンロック検出装置１７００は、バッファメモリ１７１０と判定部１７２０と転送部１７３０とから構成される。このうちバッファメモリ１７１０は、図６に示した第１の実施形態に係るスピンロック検出装置１００のバッファメモリ１１０と同様の機能を有する。
【０１００】
転送部１７３０は、プロセッサ１７４０から共有メモリ１７５０に対して発行された命令が通過する経路の途中に配置されている。また転送部１７３０は、キャッシュメモリ１７６０が自キャッシュにデータを書き込んだ際に他のキャッシュメモリに対して送信される書き込み要求を監視する機能を有する。また転送部１７３０は、プロセッサ１７４０から発行されたメモリアクセス命令などの命令を受信すると、受信した命令を共用メモリ１７５０に対して送信する機能を有する。また転送部１７３０は、判定部１７２０からアクセス先アドレスと制限時間とを添えた送信制限要求を受け取ると、上記書き込み要求の監視を開始し、上記アクセス先アドレスに対する書き込み要求を検出すると、以後、上記制限時間にわたり、受信する命令のうち、上記アクセス先アドレスと同じアクセス先アドレスを有するＴ＆Ｓ命令の共用メモリ１７５０への送信を制限する機能を有する。
【０１０１】
判定部１７２０は、プロセッサ１７４０から共有メモリ１７５０に対して発行されたＴ＆Ｓ命令を受信し、バッファメモリ１７１０に記憶する機能を有する。また判定部１７２０は、過去一定期間内にバッファメモリ１７１０に記憶したＴ＆Ｓ命令のうち、お互いのアクセス先アドレスが同一であるという条件を満たす複数のＴ＆Ｓ命令の数を算出し、この算出した数と予め定められた閾値とを比較してスピンロックを検出する機能を有する。具体的には、判定部１７２０は、上記算出した数と閾値とを比較し、算出した数が閾値より大きければスピンロック状態であると決定し、そうでなければスピンロック状態でないと決定する。さらに判定部１７２０は、スピンロックを検出すると、上記複数のＴ＆Ｓ命令が共通に有するアクセス先アドレスと制限時間とを決定する機能と、この決定したアクセス先アドレスと制限時間とを添えた送信制限要求を転送部１７３０に送信する機能とを有する。
【０１０２】
判定部１７２０は、制限時間の決定では、例えば予め定められた時間を制限時間として決定してよい。あるいは判定部１７２０は、プロセッサ１７４０から単位時間あたりに受信するメモリアクセス命令等の命令の受信数、即ち転送部１７３０を通過する命令数がより多いほどより長くなる時間を制限時間として決定してよい。あるいは判定部１７２０は、通過する命令の応答時間がより長いほどより長くなる時間を制限時間として決定してよい。あるいは判定部１７２０は、スマフォ獲得から解放までの平均時間に応じた時間を制限時間として決定してよい。
【０１０３】
スピンロック検出装置１７００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ１７１０、判定部１７２０、および転送部１７３０を実現する。
【０１０４】
以下、本実施形態に係るスピンロック検出装置１７００の動作を説明する。
【０１０５】
図２２は本実施形態に係るスピンロック検出装置１７００の転送部１７３０の動作の一例を示すフローチャートである。図２２を参照すると、スピンロック検出装置１７００の転送部１７３０は、プロセッサ１７４０から共有メモリ１７５０に対して発行された命令を受信すると（ステップＳ１７０１）、受信した命令がＴ＆Ｓ命令か否かを判定する（ステップＳ１７０２）。次に転送部１７３０は、受信した命令がＴ＆Ｓ命令以外の命令であれば、受信した命令を共有メモリ１７５０へ送信する（ステップＳ１７０５）。また転送部１７３０は、受信した命令がＴ＆Ｓ命令であれば、自身が保持する送信制限フラグの値が制限ありを示す値１になっているか否かを判定し（ステップＳ１７０３）、値１であれば当該Ｔ＆Ｓ命令のアクセス先アドレスが自身が保持する送信制限対象アドレスに一致するか否かを判定する（ステップＳ１７０４）。転送部１７３０は、送信制限フラグの値が１でない場合、および送信制限フラグの値が１であっても当該Ｔ＆Ｓ命令のアクセス先アドレスが送信制限対象アドレスに一致しない場合、当該Ｔ＆Ｓ命令を共有メモリ１７５０へ送信する（ステップＳ１７０５）。しかし、転送部１７３０は、送信制限フラグの値が１であり、且つ、当該Ｔ＆Ｓ命令のアクセス先アドレスが送信制限対象アドレスに一致する場合、当該Ｔ＆Ｓ命令は共有メモリ１７５０へは送信しない。
【０１０６】
転送部１７３０は、判定部１７２０からアクセス先アドレスと制限時間とを添えた送信制限要求を受信すると（ステップＳ１７０６）、監視フラグを監視ありを示す値１に設定し（ステップＳ１７０７）、送信制限要求で通知されたアクセス先アドレスを制限対象アドレスに設定する（ステップＳ１７０８）。転送部１７３０は、監視フラグの値が１になると、制限対象アドレスに対する書き込み要求の監視を行う（ステップＳ１７０９、Ｓ１７１０）。そして、制限対象アドレスに対する書き込み要求を検出すると、転送部１７３０は、送信制限フラグを制限有りを示す値１に設定すると共に監視フラグの値を０にし（ステップＳ１７１１）、送信制限要求で通知された制限時間をタイマに設定してタイマを起動する（ステップＳ１７１２）。そして転送部１７３０は、設定した制限時間経過時にタイマがタイムアウトすると（ステップＳ１７１３）、送信制限フラグの値を０に設定する（ステップＳ１７１４）。
【０１０７】
図２３は本実施形態に係るスピンロック検出装置１７００の判定部１７２０の動作の一例を示すフローチャートである。図２３を参照すると、スピンロック検出装置１７００の判定部１７２０は、バッファメモリ１７１０の内容を消去してから予め定められた時間が経過したか否か（ステップＳ１７２１）、プロセッサ１７４０から命令を受信したか否か（ステップＳ１７２３）を、判定する。予め定められた時間が経過していれば、判定部１７２０はバッファメモリ１７１０の内容を消去する（ステップＳ１７２２）。また判定部１７２０は、命令を受信すると、受信した命令がＴ＆Ｓ命令か否かを判定し（ステップＳ１７２４）、Ｔ＆Ｓ命令であれば、以下のような処理を行う。
【０１０８】
まず判定部１７２０は、今回受信したＴ＆Ｓ命令のアクセス先アドレスと同じアクセス先アドレスのＴ＆Ｓ命令がバッファメモリ１７１０に記憶されているか否かを調べる（ステップＳ１７２５）。同じアクセス先アドレスのＴ＆Ｓ命令が記憶されていなければ、判定部１７２０は今回受信したＴ＆Ｓ命令をバッファメモリ１７１０に記憶し（ステップＳ１７２６）、当該Ｔ＆Ｓ命令のアクセス先アドレスと同じアクセス先アドレスを有するＴ＆Ｓ命令のカウントに１を設定してバッファメモリ１７１０に記憶し（ステップＳ１７２７）、スピンロック判定を解除する（ステップＳ１７２８）。
【０１０９】
他方、判定部１７２０は、今回受信したＴ＆Ｓ命令のアクセス先アドレスと同じアクセス先アドレスのＴ＆Ｓ命令がバッファメモリ１７１０に記憶されていれば、当該Ｔ＆Ｓ命令のアクセス先アドレスと同じアクセス先アドレスを有するＴ＆Ｓ命令のカウントに１を加算してバッファメモリ１７１０に記憶し（ステップＳ１７２９）、当該カウントが閾値を超えているか否かを判定する（ステップＳ１７３０）。そして、判定部１７２０は、カウントが閾値を超えていなければ、スピンロック判定を解除し（ステップＳ１７２８）、カウントが閾値を超えていれば、スピンロック判定を設定する（ステップＳ１７３１）。判定部１７２０は、スピンロック判定を設定すると、カウントが閾値を超えたＴ＆Ｓ命令からアクセス先アドレスを抽出すると共に制限時間を設定し、このアクセス先アドレスと制限時間とを添えた送信制限要求を転送部１７３０に送信する（ステップＳ１７３２）。
【０１１０】
このように本実施形態によれば、プロセッサ１７４０から共有メモリ１７５０に対して送信されるＴ＆Ｓ命令に基づいて、プロセッサ１７４０の外部でスピンロックを検出することができ、その検出には、排他制御のためのロック信号やポーリング命令といった特殊な信号は不要になる。その理由は、プロセッサ１７４０から共有メモリ１７５０に対して発行されたＴ＆Ｓ命令をバッファメモリ１７１０に記憶し、バッファメモリ１７１０に記憶したＴ＆Ｓ命令のうちアクセス先アドレスが同じ複数のＴ＆Ｓ命令の数を算出し、この算出した数を閾値と比較してスピンロックを検出するためである。
【０１１１】
また本実施形態によれば、セマフォを獲得しているプロセスが実行する共有メモリ１７５０に対するアクセスが、セマフォ獲得待ちプロセスが実行する共有メモリ１７５０に対するアクセスと競合してしまうことを防止できる。その理由は、プロセッサ１７４０から発行されたＴ＆Ｓ命令を受信して共有メモリ１７５０へ送信する転送部１７３０は、判定部１７２０によるスピンロックの検出後、スピンロックに係るＴ＆Ｓ命令の共有メモリ１７５０への送信を所定時間だけ制限するためである。セマフォを獲得しているプロセスが実行する共有メモリ１７５０に対するアクセスが他のプロセスと競合して待ち合わせ時間が発生すると、セマフォを解放するまでの時間が長くなり、その結果、全プロセスの処理時間が伸長してしまう。本実施形態ではこのような問題を解消することができる。
【０１１２】
また本実施形態によれば、転送部１７３０は、判定部１７２０によるスピンロックの検出後、制限対象アドレスに対する書き込みを検出したことを契機に、当該アクセス先アドレスに対するＴ＆Ｓ命令の共有メモリ１７５０への送信の制限を開始する。このため、制限対象アドレスへの書き込みがセマフォ獲得時に現れた場合は、セマフォを獲得したプロセッサが処理を開始し、その後にセマフォ解放処理を行う期間中、他のプロセッサに係るスピンロックに係るＴ＆Ｓ命令を抑止することができる。
【０１１３】
また本実施形態によれば、転送部１７３０は、スピンロックに係るＴ＆Ｓ命令の共有メモリ１７５０への送信を所定時間だけ制限した後はスピンロックに係るＴ＆Ｓ命令の共有メモリ１７５０への送信を再開するため、セマフォ獲得待ちプロセスがセマフォの獲得を長く待ち続けることを防止できる。
【０１１４】
[第１８乃至第２４の実施形態]
上記第１７の実施形態に係るスピンロック検出装置１７００は、第９の実施形態に係るスピンロック検出装置の転送部に対して、制限対象アドレスへの書き込みを検出した時点でＴ＆Ｓ命令の共有メモリへの転送制限を開始する機能を付加している。しかし、本発明の第１８乃至第２４の実施形態として、本発明の第１０乃至第１６の実施形態に係るスピンロック検出装置の転送部に対して、制限対象アドレスへの書き込みを検出した時点でＴ＆Ｓ命令の共有メモリへの転送制限を開始する機能を付加した実施形態が考えられる。
【０１１５】
[第２５の実施形態]
図２４を参照すると、本発明の第２５の実施形態に係るデータ処理装置２４０１は、４個のノード２４０２から構成される。各ノード２４０２は、２個のプロセッサ２４１３と、２個の主記憶装置２４１４と、１個の入出力装置２４１５と、自ノードと他ノードとを接続するノード間接続装置２４０６とを有する。各ノード２４０２の主記憶装置２４１４は、全てのノード２４０２のプロセッサ２４１３により共用される。即ち、主記憶装置２１１４は共有メモリである。図２４では、各ノード２４０２は、２個のプロセッサと２個の主記憶装置と１個の入出力装置２４１５を有するが、それらの数は１以上であれば、任意の数であってよい。また図２４では、４個のノード２４０２を有するが、ノード２４０２の数は２以上であれば、任意の数であってよい。
【０１１６】
各ノード間接続装置２４０６には、当該ノード間接続装置２４０６を通過する所定の命令種別のメモリアクセス命令に基づいてスピンロックを検出するスピンロック検出装置２４００が配置されている。データ処理装置２４０１が図１を参照して説明した方法を使用して共有リソースへのアクセスをセマフォにより制御する場合、上記所定の命令種別のメモリアクセス命令はＴ＆Ｓ命令である。またデータ処理装置２４０１が図３を参照して説明した方法を使用して共有リソースへのアクセスをセマフォにより制御する場合、上記所定の命令種別のメモリアクセス命令はリード命令である。
【０１１７】
各ノード間接続装置２４０６のスピンロック検出装置２４００は、自ノード間接続装置２４０６を通過する命令のうち、自ノード２４０２のプロセッサ２４０３から他ノードの主記憶装置２４０４に対する上記所定の命令種別のメモリアクセス命令に基づいてスピンロックを検出する機能を有する。また各ノード間接続装置２４０６のスピンロック検出装置２４００は、自ノード間接続装置２４０６を通過する命令のうち、他ノード２４０２のプロセッサ２４０３から自ノードまたは他ノードの主記憶装置２４０４に対する上記所定の命令種別のメモリアクセス命令に基づいてスピンロックを検出する機能を有する。
【０１１８】
スピンロック検出装置２４００は、第１乃至第２４の実施形態のうちの何れかのスピンロック検出装置により実現することができる。以下、スピンロック検出装置２４００の内部構成の一例について説明する。
【０１１９】
図２５はスピンロック検出装置２４００の構成例を示すブロック図である。この例のスピンロック検出装置２４００は、バッファメモリ２４１０と判定部２４２０と転送部２４３０とから構成される。
【０１２０】
転送部２４３０は、第１の転送部２４４０と第２の転送部２４５０とから構成される。第１の転送部２４４０は、受信部２４４１と受信側調停部２４４２と内部バッファ２４４３と送信側調停部２４４４と送信部２４４５とを有する。受信部２４４１は、他のノード間接続装置から命令を受信し、判定部２４２０と受信側調停部２４４２とに送信する。受信側調停部２４４２は、受信部２４４２から受信した命令を内部バッファ２４４３に記憶する。内部バッファ２４４３は、命令を一時的に記憶するメモリである。送信側調停部２４４４は、内部バッファ２４４３から命令を読み出し、送信部２４４５に送信する。送信部２４４５は、送信側調停部２４４４から受信した命令をそのアクセス先アドレスに従って自ノードのプロセッサまたは他のノード間接続装置へ送信する。
【０１２１】
第２の転送部２４５０は、受信部２４５１と受信側調停部２４５２と内部バッファ２４５３と送信側調停部２４５４と送信部２４５５とを有する。受信部２４５１は、自ノードのプロセッサから命令を受信し、判定部２４２０と受信側調停部２４５２とに送信する。受信側調停部２４５２は、受信部２４５１から受信した命令を内部バッファ２４５３に記憶する。内部バッファ２４５３は、命令を一時的に記憶するメモリである。送信側調停部２４５４は、内部バッファ２４５３から命令を読み出し、送信部２４５５に送信する。送信部２４５５は、送信側調停部２４５４から受信した命令をそのアクセス先アドレスに従って他のノード間接続装置へ送信する。
【０１２２】
バッファメモリ２４１０は、図６に示した第１の実施形態に係るスピンロック検出装置１００のバッファメモリ１１０と同様の機能を有する。
【０１２３】
判定部２４２０は、自ノードおよび他ノードのプロセッサから各ノードの主記憶に対して発行された命令を転送部２４３０から受信し、そのうちの所定の命令種別のメモリアクセス命令をバッファメモリ２４１０に記憶する。そして、判定部２４２０は、バッファメモリ２４１０に記憶した上記所定の命令種別のメモリアクセス命令のうち所定の条件を満たす複数のメモリアクセス命令の数を算出し、この算出した数に基づいてスピンロックを検出する。この判定部２４２０は、第１乃至第２４の実施形態のうちの何れかに係るスピンロック検出装置の判定部と同様の機能を有する。従って、上記所定の命令種別のメモリアクセス命令はＴ＆Ｓ命令またはリード命令であり、上記所定の条件はアクセス先アドレスが同一であること、あるいは命令発行元とアクセス先アドレスとが同一であることである。
【０１２４】
スピンロック検出装置２４００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ２４１０、判定部２４２０、および転送部２４３０を実現する。
【０１２５】
次にスピンロック検出装置２４００の動作を説明する。
【０１２６】
転送部２４３０の第１の転送部２４４０の受信部２４４１は、他のノード間接続装置から命令を受信すると、判定部２４２０と受信側調停部２４４２とに送信する。また転送部２４３０の第２の転送部２４５０の受信部２４５１は、自ノードのプロセッサから命令を受信すると、判定部２４２０と受信側調停部２４５２とに送信する。
【０１２７】
判定部２４２０は、上記受信した命令のうち所定の命令種別のメモリアクセス命令をバッファメモリ２４１０に記憶し、この記憶したメモリアクセス命令のうち所定の条件を満たす複数のメモリアクセス命令の数を算出し、この算出した数に基づいてスピンロックを検出する。判定部２４２０は、スピンロックを検出すると、上記所定の条件を満たす複数のメモリアクセス命令が共通に有するアクセス先アドレスと制限時間、あるいは上記所定の条件を満たす複数のメモリアクセス命令が共通に有する命令発行元とアクセス先アドレスと制限時間とを決定する。そして、この決定した事項を添えて送信制限要求を転送部２４３０の調停部２４４２、２４４４、２４５２、２４５４に送信する。
【０１２８】
受信側調停部２４４２は、受信部２４４１から受信した命令を内部バッファ２４４３に記憶する。またリトライ指示を行う形態の場合、受信側調停部２４４２は、受信した命令が所定の命令種別のメモリアクセス命令であって、判定部２４２０から受信した送信制限要求で指定されるアクセス先アドレスと同じアクセス先アドレスを有する命令か、或いは送信制限要求で指定される命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有する命令であり、しかも制限時間帯であれば、その命令発行元に対してリトライ指示を送信する。また送信側調停部２４４４は、内部バッファ２４４３から命令を読み出し、この読み出した命令が所定の命令種別のメモリアクセス命令であって、判定部２４２０から受信した送信制限要求で指定されるアクセス先アドレスと同じアクセス先アドレスを有する命令か、或いは送信制限要求で指定される命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有する命令であり、しかも制限時間帯であれば破棄し、そうでなければ送信部２４４５に送信する。送信部２４４５は、受信した命令を自ノードのプロセッサあるいは他のノード間接続装置へ送信する。
【０１２９】
一方、受信側調停部２４５２は、受信部２４５１から受信した命令を内部バッファ２４５３に記憶する。またリトライ指示を行う形態の場合、受信側調停部２４５２は、受信した命令が所定の命令種別のメモリアクセス命令であって、判定部２４２０から受信した送信制限要求で指定されるアクセス先アドレスと同じアクセス先アドレスを有する命令か、或いは送信制限要求で指定される命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有する命令であり、しかも制限時間帯であれば、その命令発行元に対してリトライ指示を送信する。また送信側調停部２４５４は、内部バッファ２４５３から命令を読み出し、この読み出した命令が所定の命令種別のメモリアクセス命令であって、判定部２４２０から受信した送信制限要求で指定されるアクセス先アドレスと同じアクセス先アドレスを有する命令か、或いは送信制限要求で指定される命令発行元およびアクセス先アドレスと同じ命令発行元およびアクセス先アドレスを有する命令であり、しかも制限時間帯であれば破棄し、そうでなければ送信部２４５５に送信する。送信部２４５５は、受信した命令を他のノード間接続装置へ送信する。
【０１３０】
このように本実施形態によれば、プロセッサ２４０３と主記憶装置２４０４とを有する複数のノード２４０２をノード間接続装置２４０６により接続したデータ処理装置２４０１で生じるスピンロックを、排他制御のためのロック信号やポーリング命令といった特殊な信号を使用せずに、プロセッサ２４０３外部で検出することができる。その理由は、各ノード間接続装置２４０６に配置したスピンロック検出装置２４００を使用して、各ノード間接続装置２４０６を通過する所定の命令種別のメモリアクセス命令の数に基づいてスピンロックを検出するためである。
【０１３１】
なお、図２４のデータ処理装置２４０１では、各ノード２４０２の一方のプロセッサ２４０３が他方のプロセッサ２４０３に接続された主記憶装置２４０４をアクセスする場合、ノード間接続装置２４０６を経由せず、プロセッサ間通信路を経由してアクセスを行うようになっている。従って、単一のノードのみで構成されるデータ処理装置でスピンロックを検出する場合は、プロセッサと主記憶装置との間、または／および、プロセッサ間通信路上にスピンロック検出装置を配置することにより、スピンロックを検出することができる。このように各ノードのプロセッサと主記憶装置との間、または／および、プロセッサ間通信路上にスピンロック検出装置を配置する構成と、図２４に示すようにノード間接続装置上にスピンロック検出装置を配置する構成とを組み合わせることも可能である。
【０１３２】
[第２６の実施形態]
図２６を参照すると、本発明の第２６の実施形態に係るスピンロック検出装置２６００は、複数のプロセッサが共有メモリに接続されたデータ処理装置に接続され、バッファメモリ２６１０と判定部２６２０とを有する。
【０１３３】
判定部２６２０は、プロセッサから共有メモリに対して発行された所定の命令種別のメモリアクセス命令をバッファメモリ２６１０に記憶する機能を有する。また判定部２６２０は、バッファメモリ２６１０に記憶したメモリアクセス命令のうち所定の条件を満たす複数のメモリアクセス命令の数を算出し、この算出した数に基づいてスピンロックを検出する機能を有する。
【０１３４】
スピンロック検出装置２６００は、例えばコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスク装置や半導体メモリ等のコンピュータ可読記録媒体に記憶されており、コンピュータの起動時にコンピュータにより読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にバッファメモリ２６１０、および判定部２４２０を実現する。
【０１３５】
このように構成された本実施形態に係るスピンロック検出装置２６００にあっては、判定部２６２０が、プロセッサから共有メモリに対して発行された所定の命令種別のメモリアクセス命令をバッファメモリ２６１０に記憶し、バッファメモリ２６１０に記憶したメモリアクセス命令のうち所定の条件を満たす複数のメモリアクセス命令の数を算出し、この算出した数に基づいてスピンロックを検出する。
【０１３６】
このように本実施形態によれば、プロセッサから出力される排他制御のためのロック信号やポーリング命令といった特殊な信号を使わずに、プロセッサ外部でスピンロックを検出することができる。その理由は、判定部２６２０が、プロセッサから共有メモリに対して発行された所定の命令種別のメモリアクセス命令のうち所定の条件を満たす複数のメモリアクセス命令の数に基づいてスピンロックを検出するためである。
【０１３７】
以上、本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態に限定されず、その他各種の付加変更が可能である。例えば、スピンロックに係る所定の命令種別のメモリアクセス命令（例えばＴ＆Ｓ命令あるいはリード命令）の共有メモリへの送信を所定時間だけ制限する際、所定時間中に出現する全ての当該メモリアクセス命令を転送せずに破棄する以外に、所定時間中に出現する当該メモリアクセス命令を１つ置き、或いは２つ置き等、所定の割合だけ転送せずに破棄するようにしてもよい。
【産業上の利用可能性】
【０１３８】
本発明は、複数のプロセッサが共有メモリに接続されたデータ処理装置において、スピンロックを検出する分野に利用できる。
【０１３９】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
複数のプロセッサが共有メモリに接続されたデータ処理装置に接続されたスピンロック検出装置であって、
バッファメモリと、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
を有する
スピンロック検出装置。
［付記２］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうちアクセス先アドレスがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記１に記載のスピンロック検出装置。
［付記３］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうち命令発行元とアクセス先アドレスとがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記１または２に記載のスピンロック検出装置。
［付記４］
前記判定部は、前記算出した数と閾値とを比較して前記スピンロックを検出する
付記１乃至３の何れかに記載のスピンロック検出装置。
［付記５］
前記判定部は、前記プロセッサから発行された命令の数に対する前記算出した数の割合を算出し、前記割合と閾値とを比較して前記スピンロックを検出する
付記１乃至３の何れかに記載のスピンロック検出装置。
［付記６］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有するアクセス先アドレスを決定する
付記１乃至５の何れかに記載のスピンロック検出装置。
［付記７］
前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部を有し、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定したアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記６に記載のスピンロック検出装置。
［付記８］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有する命令発行元とアクセス先アドレスとを決定する
付記１乃至５の何れかに記載のスピンロック検出装置。
［付記９］
前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部を有し、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定した命令発行元およびアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記８に記載のスピンロック検出装置。
［付記１０］
前記転送部は、前記共有メモリへの送信を制限した前記メモリアクセス命令の発行元に対してリトライを指示する
付記７または９に記載のスピンロック検出装置。
［付記１１］
前記プロセッサは、スヌープ方式のキャッシュメモリを有し、
前記転送部は、前記決定したアクセス先アドレスに対する書き込みを検出した時、前記決定した前記命令種別とアクセス先アドレスとを有する前記メモリアクセス命令の前記共有メモリへの送信の制限を開始する
付記７または９に記載のスピンロック検出装置。
［付記１２］
前記所定の命令種別は、Ｔ＆Ｓ命令である
付記１乃至１１の何れかに記載のスピンロック検出装置。
［付記１３］
前記所定の命令種別は、リード命令である
付記１乃至１１の何れかに記載のスピンロック検出装置。
［付記１４］
前記データ処理装置は、１以上の前記プロセッサと１以上の前記共有メモリとを有する複数のノードがノード間接続装置により接続されており、
前記判定部は、前記記憶では、前記ノード間接続装置を通過する命令のうち、何れかの前記ノードの前記プロセッサから他の前記ノードの前記共有メモリに対して発行された前記所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶する
付記１乃至１３の何れかに記載のスピンロック検出装置。
［付記１５］
バッファメモリと判定部とを有し、複数のプロセッサが共有メモリに接続されたデータ処理装置が実行するスピンロック検出方法であって、
前記判定部が、前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する
スピンロック検出方法。
［付記１６］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうちアクセス先アドレスがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記１５に記載のスピンロック検出方法。
［付記１７］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうち命令発行元とアクセス先アドレスとがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記１５または１６に記載のスピンロック検出方法。
［付記１８］
前記判定部は、前記算出した数と閾値とを比較して前記スピンロックを検出する
付記１５乃至１７の何れかに記載のスピンロック検出方法。
［付記１９］
前記判定部は、前記プロセッサから発行された命令の数に対する前記算出した数の割合を算出し、前記割合と閾値とを比較して前記スピンロックを検出する
付記１５乃至１７の何れかに記載のスピンロック検出方法。
［付記２０］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有するアクセス先アドレスを決定する
付記１５乃至１９の何れかに記載のスピンロック検出方法。
［付記２１］
前記データ処理装置は、前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置された転送部を有し、
前記転送部は、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信し、前記判定部による前記スピンロックの検出後、前記決定したアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記２０に記載のスピンロック検出方法。
［付記２２］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有する命令発行元とアクセス先アドレスとを決定する
付記１５乃至１９の何れかに記載のスピンロック検出方法。
［付記２３］
前記データ処理装置は、前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置された転送部を有し、
前記転送部は、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信し、前記判定部による前記スピンロックの検出後、前記決定した命令発行元とアクセス先アドレスとを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記２２に記載のスピンロック検出方法。
［付記２４］
前記転送部は、前記共有メモリへの送信を制限した前記メモリアクセス命令の発行元に対してリトライを指示する
付記２１または２３に記載のスピンロック検出方法。
［付記２５］
前記プロセッサは、スヌープ方式のキャッシュメモリを有し、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定したアクセス先アドレスに対する書き込みを検出した時、前記制限を開始する
付記２１または２３に記載のスピンロック検出方法。
［付記２６］
前記所定の命令種別は、Ｔ＆Ｓ命令である
付記１５乃至２５の何れかに記載のスピンロック検出方法。
［付記２７］
前記所定の命令種別は、リード命令である
付記１５乃至２５の何れかに記載のスピンロック検出方法。
［付記２８］
前記データ処理装置は、１以上の前記プロセッサと１以上の前記共有メモリとを有する複数のノードがノード間接続装置により接続されており、
前記判定部は、前記記憶では、前記ノード間接続装置を通過する命令のうち、何れかの前記ノードの前記プロセッサから他の前記ノードの前記共有メモリに対して発行された前記所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶する
付記１５乃至２７の何れかに記載のスピンロック検出方法。
［付記２９］
バッファメモリを有し、複数のプロセッサが共有メモリに接続されたデータ処理装置に接続されたコンピュータを、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
して機能させるためのプログラム。
［付記３０］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうちアクセス先アドレスがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記２９に記載のプログラム。
［付記３１］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうち命令発行元とアクセス先アドレスとがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記２９または３０に記載のプログラム。
［付記３２］
前記判定部は、前記算出した数と閾値とを比較して前記スピンロックを検出する
付記２９乃至３１の何れかに記載のプログラム。
［付記３３］
前記判定部は、前記プロセッサから発行された命令の数に対する前記算出した数の割合を算出し、前記割合と閾値とを比較して前記スピンロックを検出する
付記２９乃至３１の何れかに記載のプログラム。
［付記３４］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有するアクセス先アドレスを決定する
付記２９乃至３３の何れかに記載のプログラム。
［付記３５］
前記コンピュータは、前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、
前記コンピュータを、さらに、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部として機能させ、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定したアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記３４に記載のプログラム。
［付記３６］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有する命令発行元とアクセス先アドレスとを決定する
付記２９乃至３３の何れかに記載のプログラム。
［付記３７］
前記コンピュータは、前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、
前記コンピュータを、さらに、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部として機能させ、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定した命令発行元およびアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記３６に記載のプログラム。
［付記３８］
前記転送部は、前記共有メモリへの送信を制限した前記メモリアクセス命令の発行元に対してリトライを指示する
付記３５または３７に記載のプログラム。
［付記３９］
前記プロセッサは、スヌープ方式のキャッシュメモリを有し、
前記転送部は、前記決定したアクセス先アドレスに対する書き込みを検出した時、前記決定した前記命令種別とアクセス先アドレスとを有する前記メモリアクセス命令の前記共有メモリへの送信の制限を開始する
付記３５または３７に記載のプログラム。
［付記４０］
前記所定の命令種別は、Ｔ＆Ｓ命令である
付記２９乃至３９の何れかに記載のプログラム。
［付記４１］
前記所定の命令種別は、リード命令である
付記２９乃至３９の何れかに記載のプログラム。
［付記４２］
前記データ処理装置は、１以上の前記プロセッサと１以上の前記共有メモリとを有する複数のノードがノード間接続装置により接続されており、
前記判定部は、前記記憶では、前記ノード間接続装置を通過する命令のうち、何れかの前記ノードの前記プロセッサから他の前記ノードの前記共有メモリに対して発行された前記所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶する
付記２９乃至３１の何れかに記載のプログラム。
［付記４３］
複数のプロセッサが共有メモリに接続されたデータ処理装置であって、
バッファメモリと、
前記プロセッサから前記共有メモリに対して発行された所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶し、前記バッファメモリに記憶した前記メモリアクセス命令のうち所定の条件を満たす複数の前記メモリアクセス命令の数を算出し、該算出した数に基づいてスピンロックを検出する判定部と
を有する
データ処理装置。
［付記４４］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうちアクセス先アドレスがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記４３に記載のデータ処理装置。
［付記４５］
前記判定部は、前記算出では、前記バッファメモリに記憶した前記メモリアクセス命令のうち命令発行元とアクセス先アドレスとがお互いに一致する複数の前記メモリアクセス命令の数を算出する
付記４３または４４に記載のデータ処理装置。
［付記４６］
前記判定部は、前記算出した数と閾値とを比較して前記スピンロックを検出する
付記４３乃至４５の何れかに記載のデータ処理装置。
［付記４７］
前記判定部は、前記プロセッサから発行された命令の数に対する前記算出した数の割合を算出し、前記割合と閾値とを比較して前記スピンロックを検出する
付記４３乃至４５の何れかに記載のデータ処理装置。
［付記４８］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有するアクセス先アドレスを決定する
付記４３乃至４７の何れかに記載のデータ処理装置。
［付記４７］
前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部を有し、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定したアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記４８に記載のデータ処理装置。
［付記５０］
前記判定部は、前記スピンロックを検出すると、前記所定の条件を満たす複数の前記メモリアクセス命令が共通に有する命令発行元とアクセス先アドレスとを決定する
付記４３乃至４７の何れかに記載のデータ処理装置。
［付記５１］
前記プロセッサから前記共有メモリに対して発行された前記所定の命令種別の前記メモリアクセス命令が通過する経路の途中に配置され、前記プロセッサから発行された前記所定の命令種別の前記メモリアクセス命令を受信して前記共有メモリへ送信する転送部を有し、
前記転送部は、前記判定部による前記スピンロックの検出後、前記決定した命令発行元とアクセス先アドレスを有する前記所定の命令種別の前記メモリアクセス命令の前記共有メモリへの送信を所定時間だけ制限する
付記５０に記載のデータ処理装置。
［付記５２］
前記転送部は、前記共有メモリへの送信を制限した前記メモリアクセス命令の発行元に対してリトライを指示する
付記４９または５１に記載のデータ処理装置。
［付記５３］
前記プロセッサは、スヌープ方式のキャッシュメモリを有し、
前記転送部は、前記決定したアクセス先アドレスに対する書き込みを検出した時、前記決定した前記命令種別とアクセス先アドレスとを有する前記メモリアクセス命令の前記共有メモリへの送信の制限を開始する
付記４９または５１に記載のデータ処理装置。
［付記５４］
前記所定の命令種別は、Ｔ＆Ｓ命令である
付記４３乃至５３の何れかに記載のデータ処理装置。
［付記５５］
前記所定の命令種別は、リード命令である
付記４３乃至５３の何れかに記載のデータ処理装置。
［付記５６］
１以上の前記プロセッサと１以上の前記共有メモリとを有する複数のノードがノード間接続装置により接続されており、
前記判定部は、前記記憶では、前記ノード間接続装置を通過する命令のうち、何れかの前記ノードの前記プロセッサから他の前記ノードの前記共有メモリに対して発行された前記所定の命令種別のメモリアクセス命令を前記バッファメモリに記憶する
付記４３乃至５５の何れかに記載のデータ処理装置。
【符号の説明】
【０１４０】
１００…スピンロック検出装置
１１０…バッファメモリ
１２０…判定部
１３０…転送部
１４０…プロセッサ
１５０…共有メモリ
【図１】
2016015066.tif 000003
【図２】
2016015066.tif 000004
【図３】
2016015066.tif 000005
【図４】
2016015066.tif 000006
【図５】
2016015066.tif 000007
【図６】
2016015066.tif 000008
【図７】
2016015066.tif 000009
【図８】
2016015066.tif 000010
【図９】
2016015066.tif 000011
【図１０】
2016015066.tif 000012
【図１１】
2016015066.tif 000013
【図１２】
2016015066.tif 000014
【図１３】
2016015066.tif 000015
【図１４】
2016015066.tif 000016
【図１５】
2016015066.tif 000017
【図１６】
2016015066.tif 000018
【図１７】
2016015066.tif 000019
【図１８】
2016015066.tif 000020
【図１９】
2016015066.tif 000021
【図２０】
2016015066.tif 000022
【図２１】
2016015066.tif 000023
【図２２】
2016015066.tif 000024
【図２３】
2016015066.tif 000025
【図２４】
2016015066.tif 000026
【図２５】
2016015066.tif 000027
【図２６】
2016015066.tif 000028