(57)【要約】【課題】スヌープ操作を管理するデータ処理装置を提供する。【解決手段】データ処理装置が、共有メモリ内のデータをアクセスするデータ処理操作を行って多数の処理を実行する複数の処理ユニットを含む。各処理ユニットは、データのサブセットを記憶し、その処理ユニットによりアクセスされるキャッシュを有する。  データ処理装置はスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルを採用し、各処理ユニットによってアクセスされるデータが最新であることを保証する。各処理ユニットは、スヌープ制御データを識別するように、処理ユニットに関連するストレージ・エレメントを有する。  前記処理ユニットのうちの一つがキャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されていると判断したときに、その処理ユニットは複数の処理ユニットのうちのいずれがスヌープ操作の対象とされているのかを判断するために、関連するストレージ・エレメント内のスヌープ制御データを参照する。【選択図】図１
2007004802.tif 000002
【特許請求の範囲】
【請求項１】
共有メモリ内のデータに対するアクセスを要求するデータ処理動作を実行することによって、多数の処理を実行するように動作可能な複数の処理ユニットを備え、
各処理ユニットは、その処理ユニットによりアクセスされる前記データのサブセットを記憶するように動作可能なキャッシュを有し、データ処理装置は、各処理ユニットによりアクセスされるデータが最新であることを保証するようにスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルを採用し、
各処理ユニットは、スヌープ制御データを識別する処理ユニットに関連したストレージ・エレメントを有するデータ処理装置であって、
前記処理ユニットのうちの一つが、キャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されていると判断したときに、その処理ユニットが、複数の処理ユニットのうちのいずれがスヌープ操作の対象とされているのかを判断するために、関連するストレージ・エレメント内のスヌープ制御データを参照するように動作可能である
データ処理装置。
【請求項２】
各処理用の処理記述子を記憶する処理記述子ストレージを備え、この処理記述子は、対応する処理を実行した前記複数のうちの処理ユニットを識別するように動作可能であり、
各処理ユニットに対して、関連するストレージ・エレメント内のスヌープ制御データは、当該処理ユニットにより現在実行されている処理に依存している
請求項１記載のデータ処理装置。
【請求項３】
処理ユニットが少なくとも１つの他の処理ユニットにより現在実行されている処理の実行を引き受けるときは、前記処理ユニットは、その処理に対する処理記述子を更新させ、かつ他の少なくとも１つの処理ユニットのそれぞれに更新信号を発行し、少なくとも１つの他の処理ユニットのそれぞれが更新信号に応答して更新された処理記述子に基づいて関連するストレージ・エレメント内のスヌープ制御データを更新するように動作可能である
請求項２記載のデータ処理装置。
【請求項４】
更新信号は割り込み信号である請求項３記載のデータ処理装置。
【請求項５】
各処理は、共有メモリ内のその処理のみに使用されるデータを記憶可能とする処理特定領域と関連し、かつ
各処理ユニットは、データをアクセスするときに、スヌープ操作がキャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されているか否かを判断し、スヌープ操作が要求されていてかつアクセスされているデータが処理特定領域と関連している場合、複数の処理ユニットのうちのいずれがスヌープ操作の対象とされるべきかを判断するために、関連するストレージ・エレメント内のスヌープ制御データを参照するように動作可能な、請求項１記載のデータ処理装置。
【請求項６】
各処理は、多重処理間で共有されるべきデータが記憶される共有メモリ内の共有領域に対してアクセスを行うように構築され、
各処理ユニットは、データをアクセスするときに、スヌープ操作がキャッシュ・コヒーレンシー・プロトコルを考慮して要求されているか否かを判断し、スヌープ操作が要求されていて、かつアクセスされているデータが共有領域に関連している場合、複数の処理ユニットの全てをスヌープ操作の対象とするよう動作可能な、請求項１記載のデータ処理装置。
【請求項７】
各処理に対する処理記述子は、オペレーティング・システム・ソフトウェアにより管理され、
オペレーティング・システム・ソフトウェアは、各処理記述子のために予め定めた基準を適用して、対応する処理を実行した処理ユニットがその処理記述子において識別されるのを停止すべき時を判断するように動作可能であり、
このような判断により、対応する処理に関係したデータを記憶する処理ユニットのキャッシュ内のエントリは、クリーンにされ、かつ無効化され、処理記述子は、その処理ユニットの識別を削除するようにオペレーティング・システム・ソフトウェアにより更新される
請求項２記載のデータ処理装置。
【請求項８】
各処理ユニットにおいて、関連するストレージ・エレメント内のスヌープ制御データは、どの処理ユニット上で、現在採用されている処理が作動している、または作動していたかについて、オペレーティング・システム・ソフトウェアによる指示に基づいて、セットされる請求項１記載のデータ処理装置。
【請求項９】
スヌープ制御データは、データ処理装置の各処理ユニット毎に個別のビットを備えたマスクの形式を取り、各ストレージ・エレメント毎に、そこに記憶されているマスクが、関連する処理ユニットにより現在実行されている処理に依存している請求項１記載のデータ処理装置。
【請求項１０】
データ処理装置におけるスヌープ操作の管理方法であって、
データ処理装置は、共有メモリ内のデータに対するアクセスを要求するデータ処理操作を実行することにより、多数の処理を実行するように動作可能な複数の処理ユニットを有し、各処理ユニットは、その処理ユニットによりアクセスされる前記データのサブセットを記憶するように動作可能なキャッシュを有し、
各処理ユニットによりアクセスされるデータが最新であることを保証するためにスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルを採用するステップと、
各処理ユニット毎に、スヌープ制御データを記憶するステップと、
複数の処理ユニットのうちの一つがキャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されていると判断したときは、複数のうちのどの処理ユニットがスヌープ操作の対象とされるのかを判断するために、複数の処理ユニットのうちの前記一つのためのスヌープ制御データを参照するステップと
を備えているスヌープ操作の管理方法。
【請求項１１】
複数の処理ユニットが共有メモリ内のデータに対してアクセスを要求するデータ処理操作を実行することにより、多数の処理を実行するように動作可能であるデータ処理装置のための処理ユニットであって、
処理ユニットによってアクセスされる前記データのサブセットを記憶する様に動作可能なキャッシュであって、各処理ユニットによってアクセスされるデータが最新であることを保証するために、スヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルが採用されている、キャッシュと、
スヌープ制御データを識別するストレージ・エレメントとを備え、
前記キャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されていると処理ユニットが判断したときに、処理ユニットは、データ処理装置の複数の処理ユニットのうちのいずれがスヌープ操作の対象にされるべきかを判断するために、ストレージ・エレメント内のスヌープ制御データを参照するように動作可能な
処理ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置におけるスヌープ操作の管理に関する。
【背景技術】
【０００２】
２以上の処理ユニット装置、例えば複数のプロセッサ・コアが共有メモリをアクセスする多重処理システムを設けることは、知られている。このようなシステムは、高いパフォーマンスを得るために、並列に異なる複数のプロセッサ・コアを配列してそれぞれのデータ処理オペレーションを実行することで通常的に使用されている。このような多重処理能力を提供する既知の処理システムには、ＩＢＭ３７０システムおよびＳＰＡＲＣ多重処理システムがある。これら特殊な多重処理システムは、電力効率および電力消費に殆ど感心を払っていない高いパフォーマンス・システムであり、主たる目的が最大処理速度にある。
【０００３】
このような多重処理システム内のデータに対するアクセス速度を更に改善するために、各処理ユニットがそれ自身のローカル・キャッシュを設けて共有メモリに保持されたサブセットのデータを記憶させることが知られている。これはデータに対するアクセスの速度を改善する一方、データのコヒーレンシー（ｃｏｈｅｒｅｎｃｙ）の問題を複雑にする。特に、特定のプロセッサがそのローカル・キャッシュに保持したデータ値に関連した書き込み動作を実行するときは、そのデータ値はキャッシュ内で局部的に更新されるが、しかし共有メモリにおいて同時に更新されなくともよいことは、理解されるだろう。特に、問題のデータ値がメモリの書き戻し領域に関係するのであれば、キャッシュから順次追い出されるときに、キャッシュ内の更新データ値が単に共有メモリに書き戻されることとなる。
【０００４】
データは他のプロセッサと共有されてもよいので、これらのプロセッサは、共有メモリにおける関連アドレスをアクセスするためのシーク時は、最新データをアクセスするのを保証することが重要である。これが発生するのを保証するために、キャッシュ・コヒーレンシー・プロトコルを多重処理システム内に採用して、特定のプロセッサがそのローカル・キャッシュに保持されたデータ値を更新するときは、そのデータに対してアクセスを引き続き要求する他のプロセッサに対して最新データが利用可能にすることを保証することが知られている。
【０００５】
１形式のキャッシュ・コヒーレンシー・プロトコルは、スヌープ・ベース（スヌープに基づく）のキャッシュ・コヒーレンシー・プロトコルである。このようなプロトコルによれば、プロセッサにより実行される一定のアクセスでは、スヌープ操作を実行することがそのプロセッサに求められる。このスヌープ操作は、通知を他のプロセッサに送り、実行しているアクセスの形式とアクセス中のアドレスとを認識させることになる。これは、他のプロセッサにキャッシュ・コヒーレンシー・プロトコルにより定義された一定のアクションを実行させ、更にある場合では、ある情報が１以上のこれらプロセッサからスヌープ操作を開始したプロセッサにフィードバックされる結果となる。このような技術により、種々のローカル・キャッシュに保持されているデータのコヒーレンスが維持され、かつ各プロセッサが最新のデータをアクセスするのを保証する。このようなスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルは、「変更、排他的、共有、無効」（Ｍｏｄｉｆｉｅｄ，Ｅｘｃｌｕｓｉｖｅ，Ｓｈａｒｅｄ，Ｉｎｖａｌｉｄ：ＭＥＳＩ）キャッシュ・コヒーレンシー・プロトコルである。
【０００６】
特定のデータ・ピースが複数のプロセッサのうちの一プロセッサのみによって排他的に使用されるのが保証され得るのであれば、そのプロセッサがそのデータをアクセスするときに、スヌープ操作を発行する必要はない。しかしながら、典型的な多重処理システムでは、データが通常共有データとして分類されるため、または多重処理システムが複数のプロセッサ間での処理の移動もしくは実際に特定の処理が多重プロセッサ上で並列に実行されることを許容するために、大抵のデータが複数のプロセッサ間で共有されることになり、その結果、特定の処理に特有のデータであっても、特定のプロセッサにより排他的に使用されるのを保証することができない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
以上のように、既知の多重処理システムにおいて、特定のプロセッサが、キャッシュ・コヒーレンシー・ポリシーを考慮してスヌープ操作が要求されると判断したときは、他の全プロセッサがスヌープ操作の対象とされる。
従って、これらのローカル・キャッシュがアクセスされているアドレスにおけるデータ値のコピーを含むか否かを判断するために、他のプロセッサのそれぞれがスヌープ操作により要求されるキャッシュ・タグ・ルックアップを実行するためにエネルギを消費することになる。更に、これらのキャッシュ・タグ・ルックアップは、多重処理システムのパフォーマンスに影響する可能性がある。なぜならば、プロセッサは、要求されたキャッシュ・タグ・ルックアップを実行するために、現在実行中の処理を停止しなければならい場合もあるからである。実際において、他の全てのプロセッサは、スヌープ操作を開始させることになるデータ・アクセスにより影響されなくても（プロセッサが、そのデータ・アドレスに対してアクセスしないか、またはそのローカル・キャッシュ内に当該データ・アドレスのデータをキャッシュしていないため）、スヌープ操作の対象とされるので、スヌープ操作の対象とされる特定のプロセッサに起因するエネルギ消費とパフォーマンスの影響は、その特定のプロセッサが問題とするデータ・アクセスにより影響されないのであれば、無駄な目的にサービスすることになることを理解すべきである（ここでは、このようなスヌープ操作の結果は、スヌープ・ミスと呼ばれる）。
【０００８】
従って、データ処理装置におけるスヌープ操作をより効率的に管理するための改善された技術を提供することが望ましい。
【課題を解決するための手段】
【０００９】
第１の特徴から見ると、本発明は、共有メモリ内のデータに対するアクセスを要求するデータ処理動作を実行することによって、多数の処理を実行するように動作可能な複数の処理ユニットを備えたデータ処理装置を提供するものであって、各処理ユニットは、その処理ユニットによりアクセスされる前記データのサブセットを記憶するように動作可能なキャッシュを有し、データ処理装置は、各処理ユニットによりアクセスされたデータが最新であることを保証するようにスヌープに基づくキャッシュ・コヒーレンシー・プロトコルを採用し、各処理ユニットは、スヌープ制御データを識別するように、処理ユニットに関連したストレージ・エレメントを有し、前記処理ユニットのうちの一つは、スヌープ操作がキャッシュ・コヒーレンシー・プロトコルを考慮して要求されていると判断したときに、その処理ユニットが、複数の処理ユニットのうちのいずれがスヌープ操作の対象とされているのかを判断するために、関連するストレージ・エレメント内のスヌープ制御データを参照するように動作可能である。
【００１０】
本発明によれば、各処理ユニットは、処理ユニットに関連するストレージ・エレメントを有し、これは、例えば、レジスタの形式を取ることができ、このストレージ・エレメントがスヌープ制御データを識別する。従って、複数の処理ユニットのうちの一つが、キャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されていると判断したときに、その処理ユニットは、複数の処理ユニットのうちのいずれがスヌープ操作の対象とされているのかを判断するために、関連するストレージ・エレメント内のスヌープ制御データを参照するように動作可能である。従って、スヌープ制御データは、いずれの処理ユニットが特定の処理ユニットにより起動されたスヌープ操作の対象とされるのかを制御するように、処理ユニット単位で処理ユニット上で指定可能とされる。このようなアプローチは、不必要なキャッシュ・タグ・ルックアップが原因とされるスヌープ・ミスを低減することにより、かなりのエネルギ節約に帰結することができ、更にデータ処理装置の総合パフォーマンスを改善することができることが解った。
【００１１】
スヌープ制御データは種々の形式を取ることができる。一実施例において、データ処理装置は、各処理用の記述子を記憶する処理記述子ストレージを更に備えるものであって、この処理記述子は、対応する処理を実行した処理ユニットを識別するように動作可能であり、かつ各処理ユニットのために、関連するストレージ・エレメント内のスヌープ制御データは、その処理ユニットにより現在実行中の処理に依存する。プロセッサが特定の処理を実行したときは、そのプロセッサのキャッシュはそのプロセッサに関係するデータを内蔵する可能性があり、一方プロセッサがその特定的なその処理を実行しなかったときは、プロセッサのキャッシュはその処理に関するデータを内蔵できない。
【００１２】
従って、このような実施例において、特定の処理ユニットに関連したスヌープ制御データは、その処理ユニットにより現在実行されている処理に従って変動する。従って、例えば処理１がプロセッサＡ上で実行中であり、かつ処理１に対する処理記述子が多重処理システムのプロセッサＡおよびプロセッサＢのみが処理１を実行したことを識別したときに、このようなスヌープ操作がプロセッサＡにより起動されたのであれば、プロセッサＡに関連したストレージ・エレメントに記憶されたスヌープ制御データは、プロセッサＢのみがスヌープ操作の対象とされるべきことを識別することになる。
【００１３】
処理記述子ストレージは種々の形式を取り得る。しかしながら、一実施例において、処理記述子ストレージは共有メモリの一領域により形成される。
【００１４】
処理記述子は、種々の方法により指定可能である。しかしながら、一実施例において、処理記述子はマスクを含み、マスクはＮビットを有する。ただし、Ｎは、多重処理システムにおけるプロセッサの数であり、かつマスクの各ビットは、関連するプロセッサが処理を実行すれば、セットされる。
【００１５】
このような実施例において、スヌープ制御データは、プロセッサが現在実行している処理の処理記述子により提供されたマスクを、プロセッサのストレージ・エレメント内で単に複製することにより指定されてもよい。
【００１６】
新しい処理スレッドが特定のプロセッサ上に作成された、または既存の処理スレッドが一つのプロセッサから他のプロセッサに切り換えられたときは、その処理を作動させている他の処理ユニットのストレージ・エレメントに記憶されているスヌープ制御データの更新に関連した問題が発生する。一実施例において、ある処理ユニットが他の少なくとも１つの処理ユニットにより現在実行されている処理の実行を引き受けるとすれば、その処理ユニットは、その処理に対する処理記述子を更新し、かつ他の少なくとも１つの処理ユニットのそれぞれに対して更新信号を発行し、他の少なくとも１つの処理ユニットのそれぞれは、更新された処理記述子に基づきその関連ストレージ・エレメント内のスヌープ制御データを更新する更新信号に応答して動作可能である。従って、このアプローチにより、他の関連処理ユニット上のスヌープ制御データは、処理記述子ストレージに記憶した更新処理記述子を参照して、更新される。
【００１７】
更新信号は種々の形式を取ることができる。しかしながら、一実施例において、更新信号は割り込み信号である。特定的な一実施例において、割り込み信号は、少なくとも１つの他の処理ユニットにより現在実行されている処理の実行を引き受けようとする処理ユニットにより発行されるプロセッサ間割り込み(Ｉｎｔｅｒ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｒｕｐｔ：ＩＰＩ）の形式を取る。
【００１８】
一実施例において、共有メモリは、多数の領域からなるように考慮されてもよい。特に、一実施例において、各処理は、その処理のみにより使用されるデータを記憶できる共有メモリ内の処理特定領域に関連する。各処理ユニットは、データをアクセスする際に、複数の処理ユニットのうちのどれがスヌープ操作の対象であるべきかを判断するために、キャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されるか否かを判断し、及びスヌープ操作が要求されてかつアクセスしているデータが処理特定領域に関連しているか否かを、関連するストレージ・エレメント内のスヌープ制御データを参照して、判断するように動作可能である。従って、この実施例により、スヌープ制御データは、共有メモリの処理特定領域内のデータに関係するスヌープ操作を管理するときに、参照される。
【００１９】
一実施例において、各処理は、多重処理間で共有されるべきデータを記憶する共有メモリ内の共有領域に対してアクセスを行うように構成され、かつ各処理ユニットは、データをアクセスする際に、各コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されるか否かを判断するように動作可能であり、もしスヌープ操作が要求されていて、かつアクセスされているデータが共有領域に関連しているならば、複数の処理ユニットの全てをスヌープ操作の対象とする。
【００２０】
一実施例において、共有メモリは、１以上の共有領域、および１以上の処理特定領域を有する。
【００２１】
処理記述子は種々の方法により管理され得る。しかしながら、一実施例において、各処理に対する処理記述子は、オペレーティング・システム・ソフトウェアにより管理される。一実施例において、オペレーティング・システム・ソフトウェアは、各処理記述子に対し予め定めた基準を適用して、対応する処理を実行した処理ユニットがその処理記述子内で識別されるのを中止するべき時か否かを判断するように動作可能であり、このような判断により、その処理ユニットの対応する処理に関連したデータを記憶したキャッシュ内のエントリは、クリーンにされ、かつ無効にされ、かつ処理記述子は、オペレーティング・システムのソフトウェアにより更新されてその処理ユニットの識別を削除する。従って、このような処理は、予め定めた基準を考慮する事が適当である限り、必要以上の処理ユニットがスヌープ操作の対象とならないことを保証するために、処理記述子の更新に使用されてもよい。特に、一実施例において、予め定めた基準は、例えば特定のプロセッサが予め定めた期間に処理を実行しなかったときには、そのプロセッサに対する参照は、その処理の処理記述子から削除される、といったようなタイミング基準の形式である。同時に、処理に関連するデータを記憶する各プロセッサのキャッシュのエントリは、そのキャッシュ内のその処理に係わるダーティ（ｄｉｒｔｙ）および有効なデータが共有メモリに書き戻されるのを保証するために、クリーン（ｃｌｅａｎ）にされ、かつ無効化される。
【００２２】
従って、任意選択的に、このような方法における処理記述子を変更するためにオペレーティング・システムを使用するときは、オペレーティング・システムは、これらのスヌープ制御データを更新できるように、対応する処理を現在実行している処理ユニットに更新を勧めるように構成されてもよい。これらのスヌープ制御データが更新されないときは、単に処理記述子において識別されるのを止めた処理ユニットが、不必要ないくつかのスヌープ操作の対象となり得ることを意味することになる。
【００２３】
第２の特徴によれば、本発明は、データ処理装置内のスヌープ操作を管理する方法を提供するものであって、データ処理装置は、共有メモリ内のデータに対するアクセスを要求するデータ処理の動作を実行することにより、多数の処理を実行可能な複数の処理ユニットを有し、各処理ユニットは、その処理ユニットによりアクセスされる前記データのサブセットを記憶するように動作可能なキャッシュを有する。この方法は、スヌープ制御データを記憶している各処理ユニットについて、各処理ユニットによりアクセスされたデータが最新であることを保証するように、スヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルを採用するステップと、処理ユニットのうちの一つがキャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されると判断するときは、複数の処理ユニットのうちのいずれがスヌープ操作の対象となるべきかを判断するために、処理ユニットのうちの前記一つのスヌープ制御データを参照するステップとを備えている。
【００２４】
第３の特徴によれば、本発明は、複数の処理ユニットが、共有メモリ内のデータに対するアクセスを必要とするデータ処理動作を実行することにより、多数の処理を実行し得るデータ処理装置用の処理ユニットを設け、処理ユニットは、処理ユニットによりアクセスされる前記データのサブセットを記憶可能なキャッシュと、データ処理装置の各処理ユニットによりアクセスされたデータが最新である事を保証するために採用されるスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルと、スヌープ制御データを識別するストレージ・エレメントとを備え、キャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されると判断したときに、処理ユニットは、データ処理装置の複数の処理ユニットのうちのいずれが、スヌープ操作の対象とされるべきかを判断するために、ストレージ・エレメント内のスヌープ制御データを参照するように動作可能である。
【００２５】
添付図面に示すように、本発明を、その一実施例を単なる例として参照し、更に詳細に説明する。
【実施例】
【００２６】
図１はバス６０を介して共有メモリ領域７０に接続されている多重プロセッサ２０、３０、４０、５０を備えたデータ処理装置１０のブロック図である。各プロセッサ２０、３０、４０、５０は、それぞれ関連するローカル・キャッシュ２４、３４、４４、５４を有し、これにはプロセッサを介するそのデータに対するアクセス速度を増加させるために共有メモリに保持されたデータのサブセットを記憶することができる。
【００２７】
図１に示す本発明の実施例によれば、各プロセッサ２０、３０、４０、５０は、それぞれマスクレジスタ２２、３２、４２、５２を更に備え、スヌープ操作が作動したときにそのプロセッサによって使用されるスヌープ制御データを記憶するために使用される。一実施例において、スヌープ制御データは、データ処理装置の各プロセッサ用の個別ビットを備えたマスクの形式を取り、従って図１の例において、マスクは４ビットからなる。マスクの各ビットは、特定のプロセッサに関連する。任意の時点において、マスク・レジスタに記憶されたマスク・データは、関連するプロセッサにより実行されている処理に依存しており、従って例えばプロセッサ・ワン２０が処理Ｘを実行していていれば、マスク・レジスタ２２は処理Ｘに適切なマスク・データを含む。特に、マスクの個々のビットは、そのビットに関連するプロセッサが処理Ｘを作動させたときにセットされる。従って、論理１の値がマスク・ビットのセット状態を表し、かつ論理０の値がマスク・ビットのクリア状態を表すものとすると、プロセッサ２０のマスク・レジスタ２２に記憶された”００１１”（プロセッサ４に関連した第１ビット、プロセッサ３に関連した次のビット、プロセッサ２に関連した次のビット、プロセッサ１に関連した最後のビット）のマスク値は、プロセッサ・ツー３０が作動したこと、または現在作動しており、プロセッサ・ワン２０により処理が実行されているが、しかしプロセッサ・スリーおよびフォー４０、５０は（少なくともマスク・データが基づく時間フレーム内で）その処理を作動させなかったことを表すことになる。
【００２８】
データ処理装置１０は、プロセッサがある形式のデータ・アクセスをするときに、そのプロセッサにより開始されるスヌープ操作を必要とするようにスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルを採用している。上の例を参照して、マスク・レジスタ２２に”００１１”のマスク値が与えられると、そのキャッシュ・コヒーレンシー・プロトコルの結果として、スヌープ操作が要求されているとプロセッサ・ワン２０が判断すると、プロセッサ・ツー３０のみをスヌープ操作の対象とする必要があり、プロセッサ・スリー４０および５０をスヌープ操作の対象とする必要はない。
【００２９】
図１に示すように、処理記述子ストレージ８０として共有メモリ７０の一部を使用して、データ処理装置１０上で実行されている各処理についてのある情報を提供する処理記述子を記憶する。図１の右側に示すように、個々の処理記述子８５は、処理のパラメータ、例えば処理ＩＤ、処理名等を識別する多数のフィールドを含む。加えて、本発明の実施例によれば、処理マスク９０は、その処理を実行したこれらのプロセッサを識別するために処理記述子内に記憶される。一実施例では、処理マスクは各プロセッサ２０、３０、４０、５０用のビットを含み、そのビットは、対応するプロセッサが関連する処理を実行するとセットされる。処理記述子は、データ処理装置１０により使用されたオペレーティング・システムにより維持され、かつ各マスク・レジスタ２２、３２、４２、５２に記憶されたマスクは、マスク・レジスタが存在するプロセッサにより実行されている処理の処理マスクに依存してセットされる。
【００３０】
比較的に短命の処理に対しては、その処理の新しいスレッドが異なるプロセッサ上で起動される度に、または処理が一方のプロセッサから他のプロセッサへ移動される度に、マスクのセット・ビットがクリアされることなく、オペレーティング・システムは、単に処理マスクを更新するように構成されてもよい。しかしながら、より長く継続する処理に対しては、このようなアプローチは、特に処理が一方のプロセッサから他のプロセッサへ時を経て移動された場合に、不必要なスヌープ操作の対象とされる処理ユニットを減少させる点において、本発明の実施例の効果に逆に作用する可能性がある。
【００３１】
特定例として、処理Ｘが最初にプロセッサ・ワン２０上で実行されるが、時間とともにプロセッサ・ツー３０、次にプロセッサ・スリー４０に、次にプロセッサ・フォー５０に移行する場合を考慮する。処理がプロセッサ・フォー５０に移行したときに、処理マスク９０の全てのビットがセットされる。従って、プロセッサ・フォー５０のマスク・レジスタ５２内に記憶されたマスクは、全ビットがセットされ、従ってスヌープ操作が要求されているとプロセッサ・フォー５０が判断したときは、他の全てのプロセッサ２０、３０、４０をスヌープ操作の対象にすることが必要となる。
【００３２】
実際において、問題ありと証明できないようなこのような事柄が発生する可能性は比較的低い。しかし、このような事柄が十分に問題となることがしばしば発生する恐れがあるときは、特定の処理を実行したプロセッサが対応する処理記述子から識別されなくなったときを判断するために、予め定めた基準を適用するようにオペレーティング・システム・ソフトウェアを構成することが可能である。特に、予め定めた基準は、問題の処理に対して、特定のプロセッサがある特定のタイムアウト期間でその処理を実行しなかったときに、オペレーティング・システム・ソフトウェアは処理マスクを更新してそのプロセッサに対する参照を削除させるような、時間ベースの基準であってもよい。同時に、問題とする処理に関連するデータを記憶するために使用された当該プロセッサのキャッシュ内のエントリをクリアし、かつ無効にすることが必要となる。このようなクリーニングおよび無効手順は、当該技術分野において習熟する者に周知となり、特に、このような手順の目的は、問題とするキャッシュ・ラインが無効としてマークされる前に、問題とするキャッシュ内のダーティで有効なデータを共有メモリ７０に書き戻すのを保証することにあるのを理解すべきである。
【００３３】
図２は、ＭＥＳＩキャッシュ・コヒーレンシー・プロトコルと呼ばれる特定形式のスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルを説明する状態遷移図であり、一実施例において、ＭＥＳＩキャッシュ・コヒーレンシー・プロトコルは図１のデータ処理装置１０内で使用される。図２に示すように、キャッシュの各キャッシュ・ラインは、４つの状態のうちの１状態、即ちＩ（無効）状態、Ｓ（共有）状態、Ｅ（排他的）状態またはＭ（変更）状態に存在し得る。Ｉ状態はキャッシュ・ラインが無効であるときに存在し、Ｓ状態はキャッシュ・ラインが他のプロセッサのキャッシュにも保持されているデータを含むときに存在し、Ｅ状態はキャッシュ・ラインが他のプロセッサのキャッシュに保持されていないデータを含むときに存在し、Ｍ状態はキャッシュ・ラインが変更データを含むときに存在する。
【００３４】
図２は種々の読み出し動作および書き込み動作の結果として発生し得る状態における遷移を示す。ローカル読み出しまたは書き込み動作は、キャッシュが存在するプロセッサにより起動された読み出し動作または書き込み動作であり、一方リモート読み出し動作または書き込み動作は、データ処理装置の他のプロセッサのうちの一プロセッサ上で発生してスヌープ要求を発行する読み出し動作または書き込み動作に起因する。
【００３５】
多数の読み出し活動および書き込み活動は、図２から、スヌープ操作が実行されることを必要としないが、しかしスヌープ操作が実行されることを必要とする一定数の読み出し活動および書き込み活動が存在することに注意すべきである。特に、キャッシュが存在するプロセッサがローカル読み出し動作を実行してキャッシュ・ミスになったのであれば、これは、キャッシュの特定キャッシュ・ラインに対してライン・フィル処理（ｌｉｎｅ  ｆｉｌｌ  ｐｒｏｃｅｓｓ）を実行する結果となり、従ってキャッシュ・ラインの状態はＩビット・セットを有することから、ＳビットまたはＥビット・セットを有するように変更される。セットされるべきはＳビット、Ｅビットのうちのいずれかを決定するために、プロセッサは、セットするのはＳビットか、Ｅビットかを選択をする前に、問題とするアドレスのデータをローカルにキャッシュしている可能性のある他のプロセッサに対してスヌープ操作を起動させて、そのスヌープ操作の結果を待つ必要がある。問題とするアドレスのデータをキャッシュした可能性のあった他のどのプロセッサもデータをキャッシュしていなかったときは、Ｅビットをセットでき、そうでなければ、Ｓビットをセットする必要がある。Ｅビットがセットされ、続いて他のプロセッサが同一アドレスのデータに対して、そのキャッシュへのローカル読み出しを実行した時には、これが前にＥビットをセットされたキャッシュによるリモート読み出しとして観察され、かつ図２に示すように、Ｅビットが消去されてＳビットがセットされる遷移を発生させることになる点に注意すべきである。
【００３６】
更に図２に示すように、ローカル書き込み処理はキャッシュのキャッシュ・ラインに保持されたデータを更新する結果となり、従ってＭビットをセットさせることになる。Ｉビットのセット（キャッシュ・ラインの割り当て後のキャッシュ・ミス、従って書き込み動作の場合）、またはＳビット状態のセットからの遷移として、Ｍビットのセットが発生すると、プロセッサにより再びスヌープ操作を起動させる必要がある。この場合、プロセッサは、スヌープされたプロセッサからのフィードバックを受け取る必要はないが、しかしこれらのプロセッサは、それら自身のキャッシュに対して必要な操作を取る必要があり、書き込みはリモート書き込み手順とみなされる。Ｅビットがセットされているキャッシュ・ラインにおけるローカル書き込みの場合、その時に書き込みが実行され、そのアドレスへのデータが他のプロセッサにキャッシュされていないことが解っているので、スヌープ操作の起動なしに、Ｅビットが消去され、かつＭビットがセットされることに注意すべきである。
【００３７】
図２を参照して説明したＭＥＳＩキャッシュ・コヒーレンシー・プロトコルは既知のキャッシュ・コヒーレンシー・プロトコルであると同時に、従来技術の多重処理システムに存在する問題は、スヌープ操作が要求されたときに、他の全てのプロセッサをスヌープ操作の対象とする必要があり、これがエネルギ消費、およびパフォーマンス上の潜在的な逆効果の増加に帰結することである。このようなエネルギ消費および逆パフォーマンスは、問題とするデータをキャッシュしたプロセッサにとって必要な副作用であり、従ってキャッシュ・コヒーレンシーを維持するためにスヌープ操作を必要とする。一方、このようなエネルギおよび逆効果のパフォーマンスは、プロセッサがデータをローカルにキャッシュしていない、またはプロセッサ上で実行されている処理が問題とするデータに対するいかなるアクセスも行わず、従ってデータをキャッシュすることが全くなかったかのどちらかにより、実際にスヌープ操作を必要としないプロセッサにとっては無駄となる。ここで説明する本発明の実施例は、どのプロセッサが要求されたスヌープ操作の対象であるかに関して更なる選択により、このようなエネルギ消費および逆パフォーマンスを軽減することを目的としている。これを達成する方法を、図３〜図７のフロー・チャートを参照して以下で説明する。
【００３８】
図３は、新しい処理がプロセッサ上で最初に実行されるときに、実行されるいくつかのステップを示すフロー・チャートである。ステップ１００において、処理を実行しようとするプロセッサに関連した処理マスク内にＣＰＵビットがセットされ、以上で説明したように、これはオペレーティング・システム・ソフトウェアにより典型的に実行される。それから、ステップ１１０として、処理を実行しようとするプロセッサのマスク・レジスタ内のＣＰＵマスクは、処理マスク値に等しくセットされる。その後、ステップ１２０において、プロセッサ上で処理が作動する。図３は、新しい処理をセットして実行するときに実行されるべき全ステップを示すものではないが、その代わりに、処理マスクを更新し、それに続いて関連するプロセッサのマスク・レジスタ内のＣＰＵマスクの更新に関わるステップを単に示すことを意図することを理解すべきである。
【００３９】
新しい処理がスタートして実行されると、処理の更なるスレッドが異なるプロセッサ上に確立されてもよく、かつ／または処理の実行が一方のプロセッサから他のプロセッサへ切り換えられてもよい。図４は、これらのシナリオが発生するときに、データ処理装置１０により実行されるステップを示す。ステップ２００において、問題とする処理の処理記述子８５内の処理マスク９０は、新しいスレッドを作動させようとする、または他のプロセッサから切り換えられたスレッドを作動させようとする、プロセッサにロードされる。この処理マスクは、典型的には、プロセッサのワーキング・レジスタのうちの一つにロードされる。次にステップ２１０において、現在のＣＰＵビットは処理マスクにセットされているか否か、即ち新しいスレッドを作動しようとする、または切り換えられたスレッドを作動させようとするプロセッサに対応する処理マスクのビットがセットされているか否かを判断する。処理マスクに現在のＣＰＵビットがセットされているときは、処理はステップ２５０に直接進み、プロセッサのマスク・レジスタにＣＰＵマスクが現在の処理マスク値に等しくセットされ、その後、ステップ２６０において、処理はそのプロセッサ上で作動される。
【００４０】
しかしながら、ステップ２１０において、処理マスク内の現在のＣＰＵビットがセットされていないときは、処理はステップ２２０に進行し、現在のＣＰＵビットが処理マスクにセットされる。その後、ステップ２３０において、処理は、他のＣＰＵ上で、即ち図１に示す他のプロセッサ２０、３０、４０、５０のうちのいずれか上で、活性であるか否かを判断する。ノーのときは、処理は直接ステップ２５０に進み、ＣＰＵマスクを現在処理マスクに等しくセットさせ、その後、ステップ２６０において処理を作動させる。しかしながら、他のいずれかのＣＰＵ上で処理が活性のときは、処理はステップ２４０へ分岐し、互いに他のプロセッサへプロセッサ間割り込み（ＩＰＩ）を送出し、ステップ２２０において、処理マスクに発生した更新を反映させるように、これらのプロセッサにこれらのＣＰＵマスクを更新させる。各プロセッサ上でどの処理が作動しているかについての詳細は、共有メモリ７０内に典型的に維持され、従ってステップ２３０において、情報がプロセッサに利用可能となり、要求された判断をすることが可能となる。
【００４１】
図５のフロー・チャートに、ＩＰＩを受け取るプロセッサがそのＩＰＩを取り扱う方法を示す。特に、ＩＰＩを受け取る際に、そのプロセッサは、そのワーキング・レジスタのうちの一つに処理マスクをロードし、その後、ステップ３１０において、そのマスク・レジスタに、処理マスクの現在値に等しいＣＰＵマスクをセットすることになる。その後、ステップ３２０において、プロセッサは処理の実行を続けることになる。
【００４２】
図４を参照して以上で述べたように、ステップ２２０において、新しいスレッドが、その処理のスレッドを前に実行していなかったプロセッサ上に作成される度に、または処理が、その処理を前に実行していなかったプロセッサへ切り換えられる度に、特定の処理に関連した処理記述子に設けられた処理マスクが更新される。比較的に短命である処理のときに、処理マスク内の情報は、プロセッサが不必要にスヌープ操作の対象となるのを避けることにより、かなりのエネルギおよびパフォーマンス節約を実現可能となる可能性がある。しかしながら、長く継続する処理のときに、時間の経過により、処理マスクの全ビットがセットされることがあり、これによって、このようなエネルギまたはパフォーマンス節約を達成する可能性がさまたげられる。このような状況が許容できない頻度で発生する可能性があるならば、特定の処理の処理マスクから、特定のプロセッサに関連したマスク・ビットを消去できる状況を判断するために、予め定めた基準を適用するようにオペレーティング・システムを構成することができる。
【００４３】
特に、例えば、あるプロセッサがある限られた時間長の間、処理を実行しなかったならば、その処理に関連した処理記述子の処理マスク内の対応するビットを消去することができるように、タイミングに基づく基準を使用することができる。図６に処理マスク内の１ビットを消去する決定をしたときに実行される処理を概要的に示す。特に、ステップ３５０において、関連するＣＰＵビットを消去しようとするプロセッサのワーキング・レジスタに問題の処理のための処理マスクをロードする。次にステップ３６０において、問題とする処理に関連するデータを含むそのプロセッサのキャッシュ内のキャッシュ・エントリは、消去されて無効化される。その結果、その（問題とする処理に関連する）キャッシュ内のダーティで有効なデータは、共有メモリ７０内の関連アドレス（複数アドレス）に戻されて記憶されることになる。その後、ステップ３７０において、処理マスク内の現在のＣＰＵビットは消去され、また変更された処理マスクはメモリに書き戻される。
【００４４】
処理記述子の処理マスクがプロセッサ間で共有されるので、例えばプロセッサ間の相互排他を提供するプロテクト・ロックを使うことにより、またはビット・マスクのビットを更新するための原子（ａｔｏｍｉｃ）セット／消去ビット操作の使用により、処理マスクは異なるプロセッサによる同時更新から保護される必要がある。
【００４５】
図７は、本発明の一実施例によるスヌープ操作を管理するために実行されるステップを示すフロー・チャートである。ステップ４００において、特定のアドレスのデータ値をアクセスするときに、プロセッサはキャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されているか否かを判断する。これは図２を参照して以上で説明した。ノーのときは、更なるアクションが必要とされず、プロセッサはステップ４５０で終了する。しかしながら、キャッシュ・コヒーレンシー・プロトコルを考慮してスヌープ操作が要求されていると判断されたとすると、処理はステップ４１０へ進み、共有ページ・テーブル属性がセットされているか否かを判断する。メモリに対するアクセスは、特定のメモリ領域に関連したページ・テーブルにより制御される。ページ・テーブルは、例えば仮想・物理アドレス変換、アクセス許可などを識別する。各ページ・テーブルはまた共有ページ・テーブル・属性をもつ。
【００４６】
本発明の一実施例において、共有メモリは、多数の領域に構成され、特に、１以上の共有領域が識別されてもよく、そこに多重処理の中で共有されるべきデータが記憶される。更に、１以上の処理特定領域は、処理特定領域に記憶されたデータがその特定処理によってのみアクセス可能とされるように、識別されてもよい。アクセスされているデータが共有領域内のデータに関連するときは、共有ページ・テーブル属性が関連するページ・テーブルにセットされることになり、従って処理はステップ４４０に分岐して、スヌープがデータ処理装置１０の他の全プロセッサに送出される。
【００４７】
しかしながら、データ・アドレスが共有メモリの処理特定領域にあることにより、共有ページ・テーブル属性がセットされていないときは、ステップ４２０において、現在のＣＰＵビット以外のビットがプロセッサのマスク・レジスタに記憶されたＣＰＵマスクにセットされているか否かが判断される。ノーであれば、何もアクションが必要とされず、処理はステップ４５０で終了する。しかしながら、他のビットがセットされていれば、処理はステップ４３０に進み、スヌープがＣＰＵマスクのセットされたビットにより示された他の全プロセッサに送出される。その後、ステップ４５０において処理が終了する。
【００４８】
以上で説明した本発明の実施例のＣＰＵマスクを使用する代わりに、スヌープ操作を実行すべきか否かを判断を共有ページ・テーブル属性のセッティングのみを基にする場合、いくつかの困難に帰結する。特に最初は、特定のページ・テーブルが単一プロセッサ上で作動している処理に特有であっても、スレッドが他のプロセッサ上で発生し、または処理そのものが他のプロセッサに移行するや直ちに、影響のあったページ・テーブルに共有ページ・テーブル属性をセットさせることが必要となる。潜在的に影響した多数のページ・テーブルが存在するので、これはきわめて複雑かつ時間が掛かることになるかも知れず、その結果、このようなシステムにおいては、始めに共有ページ・テーブル属性をセットするのが簡単となる。しかしながら、これは全てのスヌープ操作を他の全プロセッサに（即ち、図７におけるステップ４４０と同様のステップを介して）伝達させなければならない結果となる。
【００４９】
本発明の実施例によれば、処理記述子内の処理マスクを使用することによって、その処理マスクを使用して次に個々のプロセッサのマスク・レジスタにＣＰＵマスクをセットすると共に、処理の新しいスレッドが異なるプロセッサ上に発生した、または処理が一方のプロセッサから他のプロセッサへ移動したときに、処理マスクの適当なビットに必要とされる事は、セットされることであり、従ってこの更新は個々のプロセッサの関連マスク・レジスタに反映される。従って、共有ページ・テーブル属性が消去されたままとなり得る多くの例が存在し、かなりの数のスヌープ操作が図７のステップ４１０、４２０、４３０を介して、ステップ４４０を介して行く必要性なしに、進めることができ、かなりのエネルギ消費低減および特定処理の不必要なスヌーピングから発生するかも知れない関連する不利なパフォーマンス影響の回避に帰結する。
【００５０】
本発明の実施例に関する以上の説明から、このような実施例は、どのプロセッサ上でどのメモリ領域を使用したかのソフトウェア知識を利用することにより特定のプロセッサに対するスヌープ要求の範囲を規制して、無駄なエネルギを低減することが明らかである。これは、スヌープ要求が全プロセッサに無差別に放送される既存の機構と対照をなすべきものである。
【００５１】
本発明の実施例の更なる効果は、技術を実施するために必要となるハードウェアは、複数のプロセッサのそれぞれにマスク・レジスタを備えること、および各処理記述子内に処理マスクを備えることだけなので、非常に安価なことである。実際に、いくつかの実施において、このような処理マスクは、既に異なる理由のために既に提供されている可能性があり、従って必要とされる真の付加は、各プロセッサ内にマスク・レジスタを備えることである。
【００５２】
以上、説明したように、本発明の一実施例は、各プロセッサに新しいレジスタを採用して、システムにおいてどのプロセッサが現在採用されている処理を作動させている、または前に作動していたのかを、オペレーティング・システムに指示可能にさせる。更に、オペレーティング・システムは、既存の共有ページ・テーブル属性を使用してどのページがこの処理の専用であり、かつどのページが他の処理と共有されているかを示す。従って、現在の処理に専用のメモリ領域に対するスヌープ要求を実行するときに、プロセッサは、問題とするデータを含むかも知れないキャッシュをもつこれらのプロセッサにのみ、スヌープ要求を送出することを保証するようにレジスタを参照することができ、従って、オペレーティング・システムが、アクセスされるべきデータを含まないことを予め知っているキャッシュへの無駄となるタグ・ルックアップを削除する。
【００５３】
ここでは特定の実施例を説明したが、本発明はこれらに限定されずに、かつ本発明の範囲内で多くの変形および付加が可能とされることは、理解されるべきである。例えば、以下の従属項の本発明の特徴の種々の組み合わせは、本発明の範囲から逸脱することなく、独立項の特徴とともに実施され得る。
【図面の簡単な説明】
【００５４】
【図１】本発明の一実施例によるデータ処理装置のブロック図である。
【図２】図１のプロセッサ内で採用し得るスヌープ・ベースのキャッシュ・コヒーレンシー・プロトコルを概要的に示す図である。
【図３】本発明の一実施例による新しい処理を開始するときに、プロセッサ内にＣＰＵマスクをセットするために取るステップを説明する流れ図である。
【図４】新しいスレッドを開始する、または処理切替を実行するときに、本発明の一実施例により実行されるステップを示す流れ図である。
【図５】プロセッサ間割り込みを取り扱うときに、本発明の一実施例により実行されるステップを説明するフロー・チャートである。
【図６】処理マスクから特定のプロセッサに対する参照を削除するときに、本発明の一実施例において実行されるステップを説明するフロー・チャートである。
【図７】スヌープ操作を開始するときに、本発明の一実施例においてプロセッサにより実行されるステップを示すフロー・チャートである。
【符号の説明】
【００５５】
１  データ処理装置
２０、３０、４０、５０  プロセッサ
２２、３２、４２、５２  マスク・レジスタ
２４、３４、４４、５４  キャッシュ
７０  共有メモリ
８０  処理記述子ストレージ
８５  処理記述子
９０  処理マスク
【図１】
2007004802.tif 000003
【図２】
2007004802.tif 000004
【図３】
2007004802.tif 000005
【図４】
2007004802.tif 000006
【図５】
2007004802.tif 000007
【図６】
2007004802.tif 000008
【図７】
2007004802.tif 000009