(57)【要約】【課題】  改善されたロック機構を提供すること。【解決手段】  各々が少なくとも１つのプロセッサ及びキャッシュ・メモリを有する複数の処理ノードを含むシステムにおいてスピン・ロックを実装する方法であって、この方法は、キャッシュ・メモリに対する排他性を獲得するステップと、スピン・ロックの可用性をチェックするステップと、スピン・ロックが利用可能である場合、スピン・ロックを論理１に設定するステップと、処理が完了すると、スピン・ロックを論理０に設定するステップと、キャッシュ・メモリの排他性を明示的に明け渡すステップとを含む。キャッシュ・メモリの排他性を明け渡すことは、キャッシュ・メモリを非排他的なものとしてマーク付けするように、キャッシュ・コヒーレント・ハードウェアに命令することを含む。キャッシュ・メモリは、一般的に、レベル２キャッシュと呼ばれる。【選択図】  図４【特許請求の範囲】
【請求項１】
各々が少なくとも１つのプロセッサ及びキャッシュ・メモリを有する複数の処理ノードを含むシステムにおいてスピン・ロックを実装する方法であって、
前記キャッシュ・メモリに対する排他性を取得するステップと、
前記スピン・ロックが利用可能であるかどうかを判断するステップと、
前記スピン・ロックが利用可能であると判断すると同時に、前記スピン・ロックを獲得するステップと、
処理が完了すると、前記スピン・ロックを解放するステップと、
前記キャッシュ・メモリに対する前記排他性を明け渡すステップと
を含む方法。
【請求項２】
前記獲得するステップは、
前記スピン・ロックを、他のプロセッサが利用できないことを示す論理状態に設定するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記スピン・ロックを、利用できないことを示す前記論理状態に設定する前記ステップは、前記スピン・ロックを０以外の整数に設定するステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記解放するステップは、
前記スピン・ロックを、前記他のプロセッサが利用できないことを示す論理状態に設定するステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記スピン・ロックを、前記他のプロセッサが利用できないことを示す論理状態に設定する前記ステップは、前記スピン・ロックを０に設定するステップをさらに含む、請求項４に記載の方法。
【請求項６】
前記キャッシュ・メモリの排他性を明け渡す前記ステップは、前記キャッシュ・メモリを非排他的なものとしてマーク付けするように、前記システム内のキャッシュ・コヒーレント・ハードウェアに命令するステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記キャッシュ・メモリの排他性を明け渡す前記ステップは、前記解放するステップの後に自動的に実行される、請求項６に記載の方法。
【請求項８】
前記獲得するステップは、
主メモリから前記スピン・ロックにアクセスするステップと、
前記スピン・ロックを前記キャッシュ・メモリにコピーするステップと
をさらに含む、請求項１に記載の方法。
【請求項９】
前記解放するステップは、
前記キャッシュ・メモリの排他性を再獲得するステップをさらに含む、請求項１に記載の方法。
【請求項１０】
前記判断するステップは、
前記スピン・ロックが、前記他のプロセッサが利用できることを示す前記論理状態に設定されたかどうかを判断するために、前記キャッシュ・メモリに問い合わせるステップをさらに含む、請求項１に記載の方法。
【請求項１１】
スピン・ロックを含む主メモリと、
前記主メモリに作働的に接続され、各々が、
キャッシュ・メモリと、
前記種々のメモリに作動的に接続され、かつ、
前記キャッシュ・メモリに対する排他性を獲得し、
前記スピン・ロックの可用性を判断し、
前記スピン・ロックが利用可能であると判断すると同時に前記スピン・ロックを獲得し、
処理が完了すると前記スピン・ロックを解放し、
前記キャッシュ・メモリに対する前記排他性を明け渡す、
ための命令を実行するように構成された、１つ又は複数のプロセッサと、
キャッシュ・コヒーレント・ハードウェアと
を含む複数のノードと
を備える情報処理システム。
【請求項１２】
前記キャッシュ・メモリは、レベル２キャッシュ・メモリである、請求項１１に記載の情報処理システム。
【請求項１３】
前記１つ又は複数のプロセッサは、
前記キャッシュ・メモリを非排他的なものとしてマーク付けするように、前記キャッシュ・コヒーレント・ハードウェアに命令することによって、前記キャッシュ・メモリに対する前記排他性を明示的に明け渡すための命令を実行するようにさらに構成される、請求項１１に記載の情報処理システム。
【請求項１４】
前記１つ又は複数のプロセッサは、
前記スピン・ロックを、他のプロセッサが利用できないことを示す論理状態に設定するための命令を実行するようにさらに構成される、請求項１１に記載の情報処理システム。
【請求項１５】
前記スピン・ロックは、前記主メモリに常駐する、請求項１１に記載の情報処理システム。
【請求項１６】
前記１つ又は複数のプロセッサは、
前記スピン・ロックを、他のプロセッサが利用できることを示す論理状態に設定するための命令を実行するようにさらに構成される、請求項１１に記載の情報処理システム。
【請求項１７】
前記論理状態は０である、請求項１６に記載の情報処理システム。
【請求項１８】
前記論理状態は０以外の整数である、請求項１４に記載の情報処理システム。
【請求項１９】
前記１つ又は複数のプロセッサは、単一のキャッシュ・コヒーレント・ハードウェアを共有する、請求項１１に記載の情報処理システム。
【請求項２０】
各々が少なくとも１つのプロセッサ及びキャッシュ・メモリを有する複数の処理ノードを含むシステムにおいてスピン・ロックを実装するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
前記キャッシュ・メモリに対する排他性を取得するステップと、
前記スピン・ロックが利用可能であるかどうかを判断するステップと、
前記スピン・ロックが利用可能であると判断すると同時に、前記スピン・ロックを獲得するステップと、
処理が完了すると、前記スピン・ロックを解放するステップと、
前記キャッシュ・メモリに対する前記排他性を明け渡すステップと
を行なうための論理を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
開示される本発明は、広義には、ロック操作を最適化する分野に関し、より具体的には、スピン・ロックの分野に関する。
【背景技術】
【０００２】
コンピュータ・システムは、高いロック競合の結果として、深刻な性能低下に見舞われることがある。ロック操作は、ソフトウェアのロックと関連付けられ、一度に１つのプロセスだけがメモリ領域などの共有リソースにアクセスできることを保証するために用いられる。共有リソースにアクセスする動作は、クリティカル領域（critical region）に入るとも言われる。また、ＳＭＰ（Symmetric Multi-Processor、対称型マルチ・プロセッサ）アーキテクチャ及びＮＵＭＡ（Non-Uniform Memory Access、不均等メモリ・アクセス）アーキテクチャのような大部分の共有メモリ・アーキテクチャは、共有キャッシュ・データに相互排他的にアクセスするためのハードウェア支援を提供する。このハードウェア支援は、キャッシュ・コヒーレント機構として知られている。ロックは、共有データへの同時アクセスを制御するための基本的なソフトウェア同期プリミティブである。１つのＣＰＵだけがロックを獲得し、有用な作業を行なうことができ、その間、他の全てのＣＰＵは、ロックの解放を待たなければならないので、高いロック競合状態の下では性能低下が生じる。
【０００３】
スピン・ロック（spin-lock）は、非常に単純であり、正しく言えば、共有リソースへのアクセスを同期させる有効な方法である。「スピン・ロック」は、スピン・ロックが利用可能でない場合、呼び出し側は、ロックが利用可能になるまでビジー・ウェイト（又は「スピン」）することから、そのように名付けられる。これは、「ソフトウェアのスピン待機（spin-waiting）」と呼ばれる。スピン待機のためのアルゴリズムは、非常に単純である。各プロセスは、共有ロック変数をチェックしなければならない。共有リソースが必要であるとき、プロセスは、ｌｏｃｋ（）を呼び出して変数をテスト及び設定し、リソースを解放する準備ができると、プロセスは、ｕｎｌｏｃｋ（）を呼び出して変数を消去する。ｌｏｃｋ（）関数は、リソースが利用可能になるまで待機プロセスをループさせる。リソースの利用可能性は、共有ロック変数の値によって定められる。従来より、この変数の値が０である場合、リソースは利用可能であり、他の場合には、リソースは別のプロセスによって使用中である。リソースがロックされるとき、共有変数は、ゼロでない値を保持する。
【０００４】
ロックを利用するシステムは、一般的に、共有データ構造へのアクセスを得るために、所定のプロセスがアトミック操作を行なうことを必要とする。言い換えると、別のプロセスは、アトミック操作のテスト部分と設定部分との間、ロックにアクセスすることができない。テスト・アンド・セット操作（test-and-set operation）を行って、共有データ構造と関連付けられたロック変数が消去されたかどうかを判断し、ロック変数をアトミックに設定する。つまり、このテストにより、共有データ構造に別のプロセスによるロックがないかどうかを、プロセスが判断することが可能になり、設定操作により、ロック変数が消去された場合に、プロセスがロックを獲得することが可能になる。
【０００５】
ロック設計への鍵は、高競合状態（high contention）における公平性（fairness）と、低競合状態（low contention）における性能との両方を達成することである。ロック設計の文脈における公平性は、既存のロック保持者に対するロック競争者の位置及び／又は関係に関係なく、そのロックを獲得するために、ロックをめぐって競争する全ての競争者の能力を等しくすることと定義される。既存のロッキング機構は、公平性又は高性能を達成するものであるが、両方を達成するものではない。具体的には、最も広く用いられるロック設計のうちの３つは、スピン・ロック（spin lock）、待ち行列ロック（queue lock）、適応ロック（adaptive lock）、及び公平ロック（fairlock）である。
【０００６】
スピン・ロックは、低競合状態における高性能のために広く用いられている。（非特許文献１を参照されたい。）スピン・ロックの実装において、ロック変数のテストが、別のプロセスが共有メモリ領域へのロックを獲得したことを示す場合、ロックの要求者は、ループを開始し、そこで、ロック変数が消去されるまでロック変数を連続的に読み取り、ロック変数が消去された時点で待機プロセスがアトミックのテスト・アンド・セット操作を再開する。ＮＵＭＡアーキテクチャにおいて、スピン・ロックは、ノード間の大きなメモリ・アクセス待ち時間の相違によって生じるロッキングの不公平（locking unfairness）に起因するロッキング飢餓状態（locking starvation）をもたらすことがある。ＣＰＵは、別のノードから同じスピン・ロックにアクセスするよりもずっと速く、そのローカル・キャッシュ内のスピン・ロックにアクセスできるためである。従って、スピン・ロックが位置するものと同じノード上にあるＣＰＵは、別のノード上に常駐するＣＰＵに比べて、ロックを獲得する可能性がずっと高い。
【０００７】
待ち行列ロック（非特許文献２を参照されたい）、及び適応ロック（非特許文献３を参照されたい）は、複雑なロック・データ構造及びアルゴリズムを導入し、ロックの使用及び所有者（ownership）を常時監視することによって、高競合状態の下での不公平を回避する。しかしながら、これらのデータ構造及びアルゴリズムにより、付加的なロッキング待ち時間のオーバーヘッドも導入され、よって、低競合状態におけるロッキング性能が犠牲になる。
【０００８】
公平ロックは、ビット・マスクを用いて競合するＣＰＵを常時監視することによって、高競合状態における公平性を提供し、他の競合するＣＰＵに対してロックを明示的に明け渡す（explicitly yield）よう、ロックを解放するＣＰＵに要求することによって、公平性を強化する。（非特許文献４を参照されたい。）単純なデータ構造及びアルゴリズムが用いられるために、公平ロックは、低競合状態において、待ち行列ロック及び適応ロックよりも良好なロッキング性能を有する。しかしながら、低競合状態におけるそれらのロッキング性能は、依然としてスピン・ロックのものより劣っている。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Ｔ．Ｅ．Ａｎｄｅｒｓｏｎ著、「Ｔｈｅ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｉｍｐｌｉｃａｔｉｏｎｓ  ｏｆ  Ｓｐｉｎ  Ｌｏｃｋ  Ａｌｔｅｒｎａｔｉｖｅｓ  ｆｏｒ  Ｓｈａｒｅｄ−Ｍｅｍｏｒｙ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒｓ」、ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎ  ｏｎ  Ｐａｒａｌｌｅｌ  ａｎｄ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｙｓｔｅｍｓ、１（１）：６−１６、１９９０年１月
【非特許文献２】Ｊ．Ｍ．Ｍｅｌｌｏｒ−Ｃｒｕｍｍｅｙ及びＭ．Ｌ．Ｓｃｏｔｔ著、「Ａｌｇｏｒｉｔｈｍ  ｆｏｒ  Ｓｃａｌａｂｌｅ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｏｎ  Ｓｈａｒｅｄ−Ｍｅｍｏｒｙ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒｓ」、ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ、９（１）：２１−６５、１９９１年２月
【非特許文献３】Ｂ．−Ｈ．Ｌｉｍ及びＡ．Ａｇａｒｗａｌ著、「Ｒｅａｃｔｉｖｅ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒｓ」、ＡＳＰＬＯＳ  １９９４年
【非特許文献４】Ｓ．Ｓｗａｍｉｎａｔｈａｎ、Ｊ．Ｓｔｕｌｔｚ、Ｊ．Ｆ．Ｖｏｇｅｌ、Ｐ．ＭｃＫｅｎｎｅｙ、Ｆａｉｒｌｏｃｋｓ著、「Ａ  Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｆａｉｒ  Ｌｏｃｋｉｎｇ  Ｓｃｈｅｍｅ」、第１４回Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｐａｒａｌｌｅｌ  ａｎｄ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｃｏｍｐｕｔｉｎｇ  ａｎｄ  Ｓｙｓｔｅｍｓ、２００２年１１月
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来技術の欠点を克服する、改善されたロック機構に対する必要性がある。
【課題を解決するための手段】
【００１１】
簡単に言うと、本発明の実施形態によれば、各々が少なくとも１つのプロセッサ及びキャッシュ・メモリを有する複数の処理ノードを含むシステムにおいてスピン・ロックを実装する方法が、キャッシュ・メモリに対する排他性を獲得するステップと、スピン・ロックの利用可能性をチェックするステップと、スピン・ロックが利用可能な場合、スピン・ロックを論理１に設定するステップと、処理が完了すると、スピン・ロックを論理０に設定するステップと、キャッシュ・メモリの排他性を明示的に明け渡すステップとを含む。キャッシュ・メモリの排他性を明け渡すことは、キャッシュ・メモリを非排他的なものとしてマーク付けするように、キャッシュ・コヒーレント・ハードウェアに命令することを含む。レベル２（Ｌ２）キャッシュと呼ばれるキャッシュ・メモリは、多数の処理ノード間で物理的に分けられるが、多数の処理ノード間で、単一のアドレス可能ユニットとして論理的に共有される。
【００１２】
本発明の特徴であると考えられる特徴が、添付の特許請求の範囲に記載される。しかしながら、本発明自体、並びに好ましい使用形態、さらなる目的及び利点は、添付の図面と併せて読んだときに、例示的な実施形態の以下の詳細な説明を参照することによって、最も良く理解されるであろう。
【図面の簡単な説明】
【００１３】
【図１】既知の技術及び本発明の実施形態の両方による、スピン・ロックを作働させるように構成されたコンピュータ・システムの簡単化されたブロック図である。
【図２】既知の技術及び本発明の実施形態の両方による、ＮＵＭＡ分散型共有メモリ・アーキテクチャにおける例示的なロッキング機能を示す図である。
【図３】既知の技術による、スピン・ロックを用いる典型的な手順を示すフローチャートである。
【図４】本発明の実施形態による、「協働的」機能を示すフローチャートである。
【発明を実施するための形態】
【００１４】
特許請求される本発明は、代替的な形態に変更することができるが、その特定の実施形態が、図面に一例として示され、ここで詳細に説明されるであろう。しかしながら、図面及びその詳細な説明は、本発明を開示された特定の形態に限定することを意図するものではなく、反対に、本発明は、本発明の範囲内に含まれる全ての変更物、同等物及び代替物を網羅することを理解すべきである。
【００１５】
本発明の実施形態による、大規模の不均等メモリ・アクセス（ＮＵＭＡ）分散型共有メモリ・マルチプロセッサ・アーキテクチャのための、低競合状態におけるロッキング性能を犠牲にすることなく、高競合状態におけるロッキング公平性を提供する方法を説明する。これは、本発明の主要な態様によって達成される。
【００１６】
既存のスピン・ロック機構と「協働的」な機能（cooperative feature）は、如何なる付加的なロック・データ構造及びアルゴリズムも必要とせずに、高競合状態における統計的なロッキング公平性をもたらし、よって、低競合状態におけるロッキング性能を保持する。既存のロッキング機構が目標とにする絶対的なロッキング公平性ではなく、統計的なロッキング公平性を提供することは、より有益である。統計的公平性とは、全てのロック競争者が、ロックを獲得する等しい機会を有することを意味し、絶対的公平性とは、全てのロック競争者が、ロックを実際に等しい回数獲得することを意味する。統計的公平性は、絶対的公平性よりも弱い条件であるが、統計的公平性は、実際の用途に適しており、ロッキングのオーバーヘッドの低減によって性能を最適化する。統計的公平性は、いつでも、各ロック競争者がロックを正確に同じ回数だけ獲得することを保証するものではないので、弱い条件であると考えられる。寧ろ、統計的公平性は、各ロック競争者がロックを獲得する等しい機会を有することを提供するだけである。従って、いつでも、各ロック競争者がロックを何回獲得したかを調べるとき、回数がみな同じではない可能性がある。しかしながら、時間が無限に経過するにつれて、各ロック競争者は、同じ回数だけロックを獲得するはずである。
【００１７】
本発明は、不均等メモリ・アクセス（ＮＵＭＡ）分散型共有メモリ・マイクロプロセッサ・アーキテクチャにおいて、ロッキング性能及びロッキング公平性の両方を同時に提供する問題に取り組むものである。既存のスピン・ロック機構と「協働的」な機能は、低競合状態の下でのロッキング性能を犠牲にすることなく、高競合状態の下でのロッキング公平性を可能にする。この協働的機能は、現在のスピン・ロックの使用インターフェース及び意味論への如何なる変更も必要とせず、よって、スピン・ロックを利用するアプリケーションへの如何なる変更も必要としない。
【００１８】
別のプロセッサが利用できるようにするために、ロックを解放する前に処理を途中停止する、まれな状況のために、ロック復元可能性機構（lock recoverability mechanism）を用いることができる。
【００１９】
簡単にするために、メモリ・アドレスは、ロックと関連付けられたリソースの一例として用いられ、ＣＰＵは、リソースを捜すデバイスの一例として用いられる。ロックが適用可能である、入力／出力インターフェースのような他のデバイス及び他のリソースも、本発明に従った実施形態から利益を得ることができ、本発明の範囲内に含まれ得ることに留意すべきである。
【００２０】
ターゲット環境
ここで、図面、特に図１を具体的に詳細に参照すると、既知の技術及び本発明の実施形態の両方による、ロッキング・スキームを作働させるように構成された情報処理システム１００のブロック図が示される。システム１００は、多数のマルチプロセッサ・ノードを含むが、１つのノード、すなわちノード１１０５だけがここに示されている。ノード１１０５は、多数のプロセッサを含み、そのうちの２つ、すなわちＣＰＵ１１５及びＣＰＵ１２０が示されている。プロセッサ１１５及び１２０は、マイクロプロセッサ又は複数のマイクロプロセッサとすることができる。主メモリ１５０は、ランダム・アクセス・メモリ、又はハード・ディスク・ドライブなどの磁気媒体大容量記憶装置のような大容量記憶装置を表す。主メモリ１５０は、揮発性又は不揮発性とすることができる。ノード１１０５はまた、レベル２キャッシュ・メモリ１３５も含む。ノード１１０５の各プロセッサにより、キャッシュ・コヒーレント・ハードウェア１８０が共有される。
【００２１】
本発明の別の実施形態によると、ＣＤＲＯＭ又はＤＶＤＲＯＭ１９０のようなコンピュータ可読媒体が、本発明によるシステム１００の一部を作働させるためのプログラム命令を含むことができる。示され、説明されているのは、非常に簡単化されたプログラマブル・コンピュータ装置の表示である。当業者であれば、コンピュータ装置のいずれの実際の適用においても、他の低レベル・コンポーネント及び接続が必要であることを理解するであろう。
【００２２】
ここで図２を参照すると、例示的なＮＵＭＡ分散型共有メモリ・マルチプロセッサ・アーキテクチャの図が示される。本発明のためのターゲット環境は、ＮＵＭＡ分散型共有メモリ・マルチプロセッサ・アーキテクチャ（以下、単にＮＵＭＡアーキテクチャと呼ぶ）である。従って、図２は、アーキテクチャ及びそのメモリ・アクセス特性を示すための一例として与えられる。図２の説明及び表示によって、本発明を用いることができる環境の制限を意図又は暗示するものではない。
【００２３】
ここで図２を参照すると、各々が２つのＣＰＵを有する２つのアフィニティ・ノード、すなわちノード１１０５及びノード２２１０をもつＮＵＭＡアーキテクチャの図形的表示が示される。ＣＰＵ１１１５及びＣＰＵ２１２０はノード１内に常駐し、ＣＰＵ３２２５及びＣＰＵ４２３０はノード２内に常駐する。実際には、ノードの数及びノード当たりのＣＰＵの数は、任意の数の組み合わせとすることができ、唯一の制限は、ハードウェアの実装である。全てのノード上の全てのＣＰＵは、単一のアドレス空間で表される同じ主メモリ１５０を共有する。ノード内の各ＣＰＵは、同じＬ２キャッシュ・メモリを共有する。Ｌ２キャッシュは、レベル２キャッシュ、又はマイクロプロセッサの外部にあるキャッシュ・メモリである。Ｌ２キャッシュ・メモリは、マイクロプロセッサ・チップ上に常駐するレベル１キャッシュとは対照的に、マイクロプロセッサ・チップから分離したチップ上に常駐する。多数のＣＰＵがキャッシュ・メモリを共有するために、Ｌ２キャッシュが必要である。
【００２４】
ＣＰＵがメモリからデータ項目を捜すとき、ＣＰＵが、メモリ階層内のデータ項目を検索する論理的進行をたどるに伴って、アクセス待ち時間が次第に増大する。最初に、ＣＰＵは、そのプライベート・レベル１（Ｌ１）キャッシュ（本発明には無関係であるため、図には示されていない）においてデータ項目が入手可能であるかどうかを判断する。プライベートＬ１キャッシュにおいてデータ項目が入手可能でない場合、ローカルＬ２キャッシュをチェックする。ローカルＬ２キャッシュにおいてデータ項目が入手可能でない場合、同じネットワーク内の全ての他のノードのＬ２キャッシュをチェックする。最終的に、Ｌ２キャッシュのいずれからもデータ項目を入手可能でない場合、主メモリ１５０からデータ項目をフェッチする。心に留めるべき重要なメモリ・アクセス特性は、ａ）ローカルＬ２キャッシュにアクセスすることは、一般的に、所望の項目への最速の、最も直接的な経路であること、ｂ）遠隔のＬ２キャッシュにアクセスすることは、一般的に、ローカルＬ２キャッシュにアクセスするよりも２〜３倍遅くなること、ｃ）主メモリ１５０にアクセスすることは、一般的に、遠隔のＬ２キャッシュにアクセスするよりも２〜３倍遅くなること、である。
【００２５】
ロッキングの不公平
現在のスピン・ロックが、図２に示されるようなＮＵＭＡアーキテクチャにおいてロッキングの不公平をもたらす理由を理解するために、ここで、スピン・ロックを用いる標準的な手順を詳述する図３を参照する。スピン・ロックを獲得するために、ＣＰＵは、一般的に、処理ループ（ソフトウェアの「スピン待機」）を用いて、スピン・ロック１５５が成功裏に獲得されたかどうかをテストする。このテストは、ＣＰＵが、スピン・ロック１５５に対するＬ２キャッシュの排他性を取得するステップ３０５で開始される。スピン・ロック１５５の獲得を試みるために、ＣＰＵは、最初に、スピン・ロック１５５を保持するキャッシュに対する排他性を取得しなければならない。キャッシュの排他性を獲得することは、周知のキャッシュ・コヒーレント・プロトコルの部分である。キャッシュ・コヒーレント・プロトコルは、現在どのＣＰＵがキャッシュに対する排他性を保持しているかを見つけ、キャッシュの値が変化した場合に、キャッシュ・コヒーレント・ハードウェア１８０がキャッシュを再び主メモリに書き込めることを、ＣＰＵに知らせることを必要とする。次に、保持中のＣＰＵは、キャッシュに対する排他性を解放し、別の要求中のＣＰＵがキャッシュに対する排他性を取得できるようにする。
【００２６】
一旦キャッシュの排他性を取得すると、ステップ３１０において、スピン・ロック１５５をテストして、その値をチェックする。スピン・ロック１５５が０に等しくない場合、これは、スピン・ロック１５５が別のプロセッサによってロックされていることを示す。ＣＰＵは、ゼロでない値をもつスピン・ロックを獲得できないので、処理ループはステップ３０５に戻り、ＣＰＵは、再びスピン・ロック１５５の獲得を試みる。このループは、保持中のＣＰＵがスピン・ロック１５５を解放するまで続く。スピン・ロックの解放は、スピン・ロックに「０」の値を書き込むことによって達成される。値が０に設定されると、これは、保持中のＣＰＵがスピン・ロック１５５を解放したことを示す。従って、今や、獲得中のＣＰＵが、値「１」をスピン・ロック１５５に書き込むことができる。
【００２７】
スピン・ロック１５５が０に等しい場合、今や別のプロセッサが利用可能である。この時点で、処理はステップ３１５に進み、論理１がスピン・ロック１５５に格納される。スピン・ロック１５５を論理１に設定することは、スピン・ロック１５５が獲得されたことを表示する。これにより、別のプロセスがスピン・ロック１５５を利用できなくなる。ここで、スピン・ロック１５５のコピー１４５が、主メモリ１５０からＬ２キャッシュ内にもたらされ、獲得中のＣＰＵは、今や、Ｌ２キャッシュに対する排他性を保持する。次に、ステップ３２０において、ＣＰＵは、ＣＰＵが必要とするどのような共有データも読み取る及び／又は書き込む等といった、通常のデータ処理ルーティンを実行し続けることができると同時に、スピン・ロック１４５を制御する。スピン・ロックを０又は１に設定することは、ロックを「オン」又は「オフ」に切り替える一例であることに留意されたい。
【００２８】
ＣＰＵがその処理を終えると、ＣＰＵは、スピン・ロック１４５の解放を準備する。スピン・ロック１４５を解放するためには、それを解放するために値０をスピン・ロック１４５に格納しなければならないので、ステップ３２５において、ＣＰＵは、再びＬ２キャッシュに対する排他性を取得しなければならない。スピン・ロック１４５の獲得を試みる間、別のプロセッサが排他性を得ることが可能であったので、保持中のＣＰＵは、Ｌ２キャッシュの排他性を一時的に失うことがある。ＣＰＵは、以前、Ｌ２キャッシュに対する排他性を保持していたが、スピン・ロックの獲得を試みている（しかしながら、第１のＣＰＵが依然としてＬ２キャッシュに対する排他性を保持しているため失敗する）別のＣＰＵが、第１のＣＰＵからＬ２の排他性を「奪った」。ソフトウェアのスピン・ロックを獲得すること、及び、ハードウェア・キャッシュの排他性を取得することは、２つの異なるプロセスであることに留意されたい。ソフトウェアのスピン・ロックを獲得するため、すなわち、スピン・ロックに１を格納するために、ＣＰＵは、スピン・ロックに対するハードウェア・キャッシュの排他性を取得しなければならない。しかしながら、スピン・ロックが値０を有しない限り、すなわち、スピン・ロックが別のＣＰＵによって保持されない限り、スピン・ロックに対するハードウェア・キャッシュの排他性を取得したことが、ＣＰＵがソフトウェアのスピン・ロックを獲得したことを意味するものではない。ＣＰＵは、スピン・ロックが位置するキャッシュに対する排他的権利を有することなく、スピン・ロックに書き込むことはできない。データにアクセスできるように、２つのレベルの排他性を破らなくてならないことに留意されたい。キャッシュの排他性が取り戻されると、ステップ３３０において、ロック１４５が、論理０に設定される。スピン・ロック１４５をゼロに設定することにより、本質的にスピン・ロックが解放され、待機プロセスが利用できるようになる。
【００２９】
値をスピン・ロック１４５に格納しなければならないことから、スピン・ロック１４５を獲得し、かつ、これを解放するために、ハードウェアは、最初に、Ｌ２キャッシュ内のスピン・ロック１４５に対する排他性を取得しなければならない（３３０及び３３５）ことに留意することが重要である。以下に、スピン・ロック１４５の獲得（ステップ２０５）及びその解放（ステップ３３０）の両方のために、Ｌ２キャッシュ内のスピン・ロック１４５に対する排他性を取得する必要性が、ロッキングの不公平をもたらすことが分かるであろう。
【００３０】
図２及び図３の両方を参照しながら、ここで、例を用いて、ロッキングの不公平がどのように生じ得るかを示す。図２に示されるＮＵＭＡアーキテクチャの２つのノード（１０５及び２１０）上の４つのＣＰＵ（１１５、１２０、２２５及び２３０）の全てが、主メモリ１５０に格納された共有データ項目（図示せず）を取り出すことを望むと仮定する。これを行なうために、ＣＰＵは、主メモリ１５０内に常駐するスピン・ロック１５５を獲得する必要がある。この時点で、スピン・ロック１５５は主メモリ１５０内に常駐しており、主メモリ１５０へのアクセス待ち時間は同じなので、４つのＣＰＵの全てが、スピン・ロック１５５を獲得する等しい機会を有する。ノード１上のＣＰＵ１（１１５）が、スピン・ロックに対するＬ２キャッシュの排他性の取得に成功し、次に、スピン・ロック１５５を獲得する（ロック１５５を「オン」に設定する）と仮定しよう。一旦獲得すると、スピン・ロック１５５のコピー１４５が、Ｌ２キャッシュ１１３５にもたらされる。今や、ＣＰＵ１１１５は、Ｌ２キャッシュ１１３５に対する排他性を保持する。ノード１１０５上のＣＰＵ１１１５がキャッシュに対する排他性を獲得した後、ステップ３２０に示されるように、ＣＰＵ１１１５は、データ処理を実行し続けることができる。
【００３１】
ロックの所有者
この間、他の３つのＣＰＵ、すなわちＣＰＵ２１２０、ＣＰＵ３２２５及びＣＰＵ４２３０は、「スピン待機」によって、スピン・ロック１５５を獲得する自分らの試みを続け、Ｌ２キャッシュ１１３５（ＣＰＵ２がスピン・ロックの獲得を試みる場合）又はＬ２キャッシュ２２４０（ＣＰＵ３又はＣＰＵ４がスピン・ロックの獲得を試みる場合）のいずれかが、交代でスピン・ロック１５５に対する排他性を保持することができる。しかしながら、ＣＰＵ１１１５がスピン・ロック１５５を解放する前に、スピン・ロックの値は論理１のままなので、３つのＣＰＵのいずれも、スピン・ロック１５５を獲得することができない。
【００３２】
ステップ３３０において、ＣＰＵ１１１５がデータ処理を終え、スピン・ロック１５５を解放した後、その関連したＬ２キャッシュ１１３５は、スピン・ロックを「オフ」にする（０をこれに書き込む）ために、最初に、スピン・ロック１５５に対する排他性を再取得しなければならない。ＣＰＵ１１５が排他性を取得し、スピン・ロック１５５を解放した後、ＣＰＵ１１５は、Ｌ２キャッシュに対する排他性を自発的には放棄しない。この点こそ、不公平が証明されるところである。スピン・ロック１５５は、たとえ解放されても、現在のところノード１１０５のＬ２キャッシュ１１３５内に常駐していることを思い起こされたい。これは、ＣＰＵ１１１５がそのキャッシュに対する排他性を再取得しなければならなかったためである。また、排他性を取得するために、ローカル・キャッシュにアクセスする方が、遠隔キャッシュにアクセスするよりも速いことに留意されたい。従って、ＣＰＵ１１１５がスピン・ロック１４５を保持していた間、スピン・ロック１４５を獲得するために、どのノードのＬ２キャッシュ（１３５又は２４０）がスピン・ロック１４５に対する排他性を保持していたかどうかに関係なく、ここで、排他性はＬ２キャッシュ１１３５に戻る。その後、ＣＰＵ２１２０は、ＣＰＵ３２２５又はＣＰＵ４２３０のいずれよりも、解放されたばかりのスピン・ロック１５５を獲得する可能性が高いであろう。これは、ＣＰＵ１１１５によるスピン・ロック１５５の解放に起因して、Ｌ２キャッシュ１１３５がスピン・ロック１４５に対する排他性を既に保持していることから、スピン・ロック１５５の獲得に必要な、Ｌ２キャッシュ内のスピン・ロック１４５に対する排他性を取得するためのステップ（ステップ２０５）が、ＣＰＵ３又はＣＰＵ４（２２５又は２３０）の場合よりもＣＰＵ２１２０の場合にずっと速く完了するためである。他方、Ｌ２キャッシュ２２４０がスピン・ロック１４５に対する排他性を獲得するためには、Ｌ２キャッシュ２２４０は、キャッシュ・コヒーレント・ハードウェア１８０を通してノード間のキャッシュ問い合わせ（点線２６０で表される）を行なうことが必要であり、これは、一般に、同じＬ２キャッシュ内で排他性を獲得するより２〜３倍遅くなる。
【００３３】
ＣＰＵの現在の実施は、ロック解放後にそのキャッシュの排他性を自発的には放棄しないので、スピン・ロックの排他性の現在の方法は、同じノード内のコプロセッサに利点を与える。
【００３４】
協働的機能
現在のスピン・ロックが、ＮＵＭＡアーキテクチャにおける高競合状態の下でロッキングの不公平を引き起こす理由が理解された今、問題を解決するために、本発明の「協働的」機能を用いて、ロッキングの不公平を除去する方法を説明する。保持中のＣＰＵによってスピン・ロックが解放された（ステップ３３０）後、付加的なステップ（４４０）が影付きボックス内に示される以外は、図３とほぼ全く同じである図４を参照されたい。前のセクションから、ＣＰＵ１１１５がスピン・ロック１５５を解放した結果、Ｌ２キャッシュ１１３５がスピン・ロック１４５に対する排他性を既に保持しているので、ＣＰＵ２１２０は、ＣＰＵ１１１５によって解放されたばかりのスピン・ロック１５５を獲得する、ＣＰＵ３又はＣＰＵ４（２２５又は２３０）を凌ぐ公平な利点を有していないことが分かっている。
【００３５】
ステップ４４０において、協働的機能が作用し始める。論理０がスピン・ロック１５５に格納された（ステップ３３０において）後、Ｌ２キャッシュ１１３５は、実際面でＣＰＵ１１１５がキャッシュに対する排他性を有していても、Ｌ２キャッシュ１１３５を、いずれのＣＰＵに対しても非排他的なものとしてマーク付けするように、キャッシュ・コヒーレント・ハードウェアに命じることによって、スピン・ロック１５５に対するその排他性を明示的に明け渡す。結果的に、そのノード内に常駐するレベル２キャッシュがスピン・ロック１４５に対する排他性を既に保持しているため、ＣＰＵ２１２０は、もはや利点を有さない。従って、スピン・ロック１５５に対する排他性を取得するために、Ｌ２キャッシュ１１３５及びＬ２キャッシュ２２４０の両方が、キャッシュ間の問い合わせ２６０を行なわなければならない。その結果、他の３つのＣＰＵ、すなわちＣＰＵ２１２０、ＣＰＵ３２２５及びＣＰＵ４２３０は、ＣＰＵ１１１５によって解放されたばかりのスピン・ロック１５５を獲得するために平等に競争し、高競合状態の下での統計的なロッキング公平性が達成される。
【００３６】
協働的機能は、いずれの付加的なロック・データ構造及びアルゴリズムも必要としないので、低競合状態の下でのロッキング性能が保持される。さらに、現在のスピン・ロック使用インターフェース及び意味論への如何なる変更も必要とせず、よって、スピン・ロックを利用するアプリケーションへの如何なる変更も必要としない。
【００３７】
従って、現在のところ好ましい実施形態であると考えられるものを説明してきたが、当業者であれば、本発明の範囲内で他の修正を行ない得ることを理解するであろう。
【符号の説明】
【００３８】
１００、２００：情報処理システム
１０５、２１０：ノード
１１５、１２０、２２５、２３０：ＣＰＵ
１３５、２４０：Ｌ２キャッシュ・メモリ
１４５：スピン・ロックのコピー
１５０：主メモリ
１５５：スピン・ロック
１８０：キャッシュ・コヒーレント・ハードウェア
１９０：ＣＤＲＯＭ／ＤＶＤＲＯＭ
２６０：問い合わせ
【図１】
2010517144.tif 000002
【図２】
2010517144.tif 000003
【図３】
2010517144.tif 000004
【図４】
2010517144.tif 000005
【国際調査報告】
2010517144.tif 000006
2010517144.tif 000007