(57)【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
論理パーティション内で単一スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で構成可能な複数のコア及びオペレーティングシステム（ＯＳ）イメージを含むコンフィギュレーションであって、前記ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートする、コンフィギュレーションと、
前記複数のコアのうちの起動コア上でクエリ命令を実行することを含む方法を行うように構成されたマルチスレッディング・ファシリティと、
を含み、前記実行することは、
前記ＯＳイメージにより、前記論理パーティション内の前記複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることと、
前記起動コアにより、前記コアの各々について、前記ＭＴモードで前記コアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得ることと、
前記起動コアにより、前記コアの各々について、前記コアの各々がディスパッチされた累計時間として、総ディスパッチ時間を得ること、
前記論理パーティションが前記ＳＴモードにあるとの判定に基づいて、ＭＴディスエーブル逸失機会値を、前記コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数よりも１つ小さい数でスケール調整された前記論理パーティション内の前記コアの全てについての前記総ディスパッチ時間の合計として決定することと、
前記論理パーティションが前記ＭＴモードにあるとの判定に基づいて、ＭＴイネーブル逸失機会値を、前記論理パーティション内の前記コアの全てについての前記マルチスレッディング・アイドル時間値の合計として決定することと、
を含む、コンピュータシステム。
【請求項２】
前記クエリ命令が、前記最大スレッド識別値、前記マルチスレッディング・アイドル時間値、及び前記総ディスパッチ時間を格納するための場所を指定する、請求項１に記載のコンピュータシステム。
【請求項３】
前記ＭＴディスエーブル逸失機会値は、前記ＳＴモードである論理パーティション内の各コア上でイネーブルされる１つのスレッド以外にハードウェアとしてサポート可能な他のスレッドのアイドル時間の合計時間を示す、請求項１に記載のコンピュータシステム。
【請求項４】
前記最大スレッド識別値が、前記論理パーティションが前記ＳＴモード又は前記ＭＴモードのどちらであるかを判定するために用いられる、請求項１に記載のコンピュータシステム。
【請求項５】
各々がＯＳイメージ及び１以上のコアを含む論理パーティションを有する複数のコンフィギュレーションをさらに含み、前記クエリ命令が、前記論理パーティションの各々についての前記最大スレッド識別値と、前記論理パーティションの各々の中の前記コアの各々についての前記マルチスレッディング・アイドル時間値と、前記論理パーティションの各々の中の前記コアの各々についての前記総ディスパッチ時間とを得る、請求項１に記載のコンピュータシステム。
【請求項６】
前記マルチスレッディング・ファシリティが、前記論理パーティションそれぞれにおける前記ＭＴディスエーブル逸失機会値又は前記ＭＴイネーブル逸失機会値の合計を、前記コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数でスケール調整された前記論理パーティションの全てについての前記総ディスパッチ時間の合計で割ったものとして、機会率を計算するようにさらに構成される、請求項４に記載のコンピュータシステム。
【請求項７】
前記コンピュータシステムが、
無効状態、又は待機状態のイネーブルメントに対する変化を検出及び計上することにより、スレッドごとのベースで前記マルチスレッディング・アイドル時間を維持することと、
ハイパーバイザにより、各コアについてアイドル時間の総計量を累積することと、
前記アイドル時間の総計量を累積として前記ＯＳイメージに提供することと、
を行うようにさらに構成される、請求項１に記載のコンピュータシステム。
【請求項８】
論理パーティション内で単一スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で構成可能な複数のコア及びオペレーティングシステム（ＯＳ）イメージを含むコンフィギュレーションを含むコンピュータシステムにおけるアイドル時間累積のためのコンピュータ実装の方法であって、前記ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートし、前記方法は、
前記複数のコアのうちの起動コア上でクエリ命令を実行すること、
を含み、前記実行することは、
前記ＯＳイメージにより、前記論理パーティション内の前記複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることと、
前記起動コアにより、前記コアの各々について、前記ＭＴモードで前記コアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得ることと、
前記起動コアにより、前記コアの各々について、前記コアの各々がディスパッチされた累計時間として、総ディスパッチ時間を得ること、
前記論理パーティションが前記ＳＴモードにあるとの判定に基づいて、ＭＴディスエーブル逸失機会値を、前記コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数よりも１つ小さい数でスケール調整された前記論理パーティション内の前記コアの全てについての前記総ディスパッチ時間の合計として決定することと、
前記論理パーティションが前記ＭＴモードにあるとの判定に基づいて、ＭＴイネーブル逸失機会値を、前記論理パーティション内の前記コアの全てについての前記マルチスレッディング・アイドル時間値の合計として決定することと、
を含む、方法。
【請求項９】
請求項１乃至７の何れか一項に記載のコンピュータシステムの起動コアによりクエリ命令を実行することを含む方法。
【請求項１０】
論理パーティション内で単一スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で構成可能な複数のコア及びオペレーティングシステム（ＯＳ）イメージを含むコンフィギュレーションを含むコンピュータシステムにおけるアイドル時間累積のためのコンピュータ・プログラムであって、前記ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートし、前記コンピュータ・プログラムは、
前記複数のコアのうちの起動コアに実行させるクエリ命令を含み、前記実行させることは、
前記ＯＳイメージにより、前記論理パーティション内の前記複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることと、
前記起動コアにより、前記コアの各々について、前記ＭＴモードで前記コアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得ることと、
前記起動コアにより、前記コアの各々について、前記コアの各々がディスパッチされた累計時間として、総ディスパッチ時間を得ること、
前記論理パーティションが前記ＳＴモードにあるとの判定に基づいて、ＭＴディスエーブル逸失機会値を、前記コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数よりも１つ小さい数でスケール調整された前記論理パーティション内の前記コアの全てについての前記総ディスパッチ時間の合計として決定することと、
前記論理パーティションが前記ＭＴモードにあるとの判定に基づいて、ＭＴイネーブル逸失機会値を、前記論理パーティション内の前記コアの全てについての前記マルチスレッディング・アイドル時間値の合計として決定することと、
を含む、コンピュータ・プログラム。
【請求項１１】
請求項１乃至７の何れか一項に記載のコンピュータシステムの起動コアにクエリ命令を実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に多重スレッドをサポートするコンピュータシステムに関し、より詳細には、マルチスレッディング・コンピュータシステムにおけるアイドル時間累積に関する。
【背景技術】
【０００２】
コンピュータシステムのプロセッサ速度は、過去１０年間にわたって速くなってきているが、このようなコンピュータシステムのメモリにアクセスすることができる速度はそれに比例して速くなっていない。それゆえ、プロセッサのサイクル時間が速くなるにつれ、メモリからデータをフェッチするための待機の遅延がますます顕著になってきている。このような遅延の影響は、種々のレベルのキャッシングにより軽減されており、最近のプロセッサではマルチスレッディング（ＭＴ）により軽減されている。
【０００３】
ＭＴは、プロセッサの種々のコア・リソースを、スレッドとして知られる複数の命令ストリームで共有することを可能にする。コア・リソースは、実行ユニット、キャッシュ、変換ルックアサイド・バッファ（ＴＬＢ）などを含むことができ、これらを集合的に一般にコアと呼ぶことができる。１つのスレッドにおけるキャッシュ・ミス又はその他の遅延により生じる待ち時間の間、１つ又は複数の他のスレッドがコア・リソースを利用することができ、これによりコア・リソースの使用率が高まる。スーパー・スカラー・プロセッサの同時マルチスレッディング（ＳＭＴ）実装では、多重スレッドが、１つ又は複数のコアのコア・リソースによるサービスを同時に受けることができる。
【０００４】
現代のハードウェア・プラットフォームにおいて、ＭＴは、典型的には、ＭＴハードウェア上で実行されるオペレーティングシステム（ＯＳ）に対して透過的な方式で実装される。この特徴の１つの態様は、ＯＳがＭＴハードウェアを利用するのに修正を必要としないことである。しかしながら、ＯＳに関して透過的ＭＴ動作の結果として、応答時間、容量（capacity）の準備、容量の計画、及びビリングの高い変動性が生じることがある。この変動性は、ＯＳが、そのタスクがコアの排他的制御を有しているのか又はそのタスクがコアを共有するスレッドとして実行されているのか気づかない（unaware）ことにより生じる場合がある。設計により、ＭＴ可能ハードウェア上のメモリ集約的作業負荷のための最高容量は、コア使用時に高い平均スレッド密度がある場合に達成可能である。付加的な容量は、ＭＴにより提供されるキャッシュ活用の増大によるものであり得る。ＯＳが、利用されるコアに対して高い平均スレッド密度を一貫して維持しない場合、ＭＴにより提供される付加的な総スループット容量は利用可能にならない。例えば、ハードウェアが、コンピュータ利用率が低いときには１コア当たり単一のＭＴスレッドを実行し、コンピュータ利用率が高いときには高いスレッド密度で実行する場合、作業負荷に対してどれだけの総ＭＴコンピュート容量が利用可能であるのかを判定することは非常に困難であり得る。このＭＴスレッド活用におけるハードウェア変動性は、トランザクション応答時間及びビリングの両方において、容量に関して先に説明したのと同様の様式で変動性をもたらす場合がある。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」ＩＢＭ刊行番号ＳＡ２２−７８３２−０９、２０１２年８月
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、マルチスレッディング・コンピュータシステムにおけるアイドル時間累積のためのシステム、方法、及びコンピュータ・プログラム製品を提供することである。
【課題を解決するための手段】
【０００７】
実施形態は、マルチスレッディング・コンピュータシステムにおけるアイドル時間累積のためのシステム、方法、及びコンピュータ・プログラム製品を含む。１つの態様によれば、コンピュータシステムは、論理パーティション内で単一スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で構成可能な複数のコア及びオペレーティングシステム（ＯＳ）イメージを含むコンフィギュレーションを含む。ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートする。コンピュータシステムはまた、複数のコアのうちの起動コア上でクエリ命令を実行することを含む方法を行うように構成されたマルチスレッディング・ファシリティを含む。実行することは、ＯＳイメージにより、論理パーティション内の複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることを含む。起動コアはまた、コアの各々について、ＭＴモードでコアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得る。
【０００８】
別の態様によれば、コンピュータシステムにおけるアイドル時間累積のためのコンピュータ実装の方法が提供される。コンピュータシステムは、論理パーティション内でＳＴモードとＭＴモードとの間で構成可能な複数のコア及びＯＳイメージを含むコンフィギュレーションを含む。ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートする。方法は、複数のコアのうちの起動コア上でクエリ命令を実行することを含む。実行することは、ＯＳイメージにより、論理パーティション内の複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることを含む。起動コアはまた、コアの各々について、ＭＴモードでコアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得る。
【０００９】
さらなる態様は、コンピュータシステムにおけるアイドル時間累積のためのコンピュータ・プログラム製品を含む。コンピュータシステムは、論理パーティション内でＳＴモードとＭＴモードとの間で構成可能な複数のコア及びＯＳイメージを含むコンフィギュレーションを含む。ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートする。コンピュータ・プログラム製品は、具体化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含み、ここでコンピュータ可読媒体は、信号ではない。プログラム命令は、処理回路により可読であり、複数のコアのうちの起動コアに実行させるクエリ命令を含む。実行させることは、ＯＳイメージにより、論理パーティション内の複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることを含む。起動コアはまた、コアの各々について、ＭＴモードでコアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得る。
【００１０】
実施形態であるとみなされる主題は、本明細書の結論部にある特許請求の範囲において特に指摘され、明確に特許請求される。実施形態の上記及び他の特徴、並びに利点は、添付図面と共に解釈される以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１１】
【図１】実施形態により実装することができるコンピューティング環境を示す。
【図２】実施形態により実装することができるコンピューティング環境を示す。
【図３】実施形態により実装することができるコアの処理回路を示す。
【図４】実施形態により実装することができるコンピューティング環境を示す。
【図５】実施形態により実装することができるコンピューティング環境におけるハイパーバイザ・コンテキスト保持の例を示す。
【図６】実施形態によるマルチスレッディングの動的イネーブルメントのプロセスフローを示す。
【図７】実施形態によるＣＰＵアドレス拡張プロセスの例を示す。
【図８】実施形態によるＣＰＵアドレス短縮プロセスの例を示す。
【図９】実施形態によるマルチスレッディング設定（ｓｅｔ−ｍｕｌｔｉｔｈｒｅａｄｉｎｇ）指令のプロセスフローを示す。
【図１０】実施形態による累積されたアイドル時間をキャプチャして利用するコンフィギュレーションの例を示す。
【図１１】実施形態によるアイドル時間累積及び機会定量化ためのプロセスフローを示す。
【図１２】実施形態によるコンピュータ可読媒体を示す。
【発明を実施するための形態】
【００１２】
例示的な実施形態は、単一スレッド及びマルチスレッディング（ＭＴ）動作モードをサポートするコンピュータシステムにおける、マルチスレッディング動作を提供する。本明細書で説明するシステムは、オペレーティングシステム（ＯＳ、ＯＳイメージとも呼ばれる）がＭＴハードウェアを活用すること明示的に「オプトイン」するよう要求することにより、ハードウェアの変動性を軽減するためのソフトウェアをイネーブルにする。ＯＳが実行環境のＭＴの性質を理解している場合、ＯＳは、プロセッサ・コア当たりのスレッド密度を明示的に管理する能力を有する（所与の作業負荷ディスパッチパターンで、その能力の及ぶ限りで）。ＯＳは、コンピュート・リソースの利用が少ないときでも高スレッド密度を維持するオプションを有し、これにより他のＭＴ実装で見られる総コンピュート・容量におけるかなりの変動性を軽減する。高スレッド密度を維持することの直接的結果として、トランザクション応答時間及びビリングの態様の両方をより一貫したものにすることができる。プロセッサ・コア当たりのスレッド密度が一貫して高いときに、マルチスレッディング値を高めることができる。例示的な実施形態は、所与の作業負荷混合（workload mix）に対して、プロセッサ・コア当たり１つのスレッドのみが実行されることに起因して生じる逸失された機会の量を理解することを可能にする。中央処理複合体（Central Processing Complex、ＣＰＣ）のように多くのＯＳイメージが単一のコンピュータシステムを共有している場合のシステムにおけるマルチスレッディング機能の利用率に関する知識は、システムオペレータが、そのシステムが再構成又はその他の更新から利益を得るか否かを定量化することを可能にすることができる。
【００１３】
例示的な実施形態は、単一スレッド及びマルチスレッディング動作モードをサポートするコンピュータシステムにおいてマルチスレッディング動作を提供する。本明細書において用いる場合、論理スレッドは、単一命令ストリーム及びそれに関連付けられた状態を指す。すなわち、アーキテクチャ・レベルにおいて、各論理スレッドは、独立した中央処理ユニット（ＣＰＵ）又はプロセッサを表す。ハードウェア・レベルにおいて、スレッドは、論理スレッドに関連付けられた命令ストリームの実行であり、スレッドがディスパッチされる場合、そのゲスト状態の維持と組み合わされる。したがって、「スレッド」及び「ＣＰＵ」という用語は、本明細書において互換的に用いることができる。
【００１４】
例示的な実施形態において、ＣＰＵは、命令実行、割込み動作、タイミング機能、初期プログラム・ロード、及び他のマシン関連機能のための、順番付け及び処理ファシリティを収容する。ＣＰＵは、種々の下層の物理的実装にマップすることができる論理関数を定義する。ＣＰＵは、命令を実行する際に、固定長の２進整数及び浮動小数点数（例えば、２進、１０進、１６進）、可変長の１０進整数、並びに固定長又は可変長いずれかの論理情報を処理することができる。処理は、並列又は直列とすることができる。処理要素の幅、シフティング経路の多重度、及び異なる型式の算術を実行する同時性度は、論理的結果に影響を与えることなく、ＣＰＵの型式ごとに異なったものであり得る。
【００１５】
ＣＰＵが実行する命令は、汎用命令、１０進命令、浮動小数点サポート（ＦＰＳ）命令、２進浮動小数点（ＢＦＰ）命令、１０進浮動小数点（ＤＦＰ）命令、１６進浮動小数点（ＨＦＰ）命令、制御命令、及びＩ／Ｏ命令などの、多数の命令クラスを含むことができる。汎用命令は、２進整数算術演算、並びに論理演算、分岐演算、及びその他の非算術演算を行う際に用いることができる。１０進命令は、１０進形式のデータ上で動作する。ＢＦＰ、ＤＦＰ、及びＨＦＰ命令は、それぞれＢＦＰ、ＤＦＰ、及びＨＦＰ形式のデータ上で動作し、一方、ＦＰＳ命令は、形式に無関係に浮動小数点データ上で動作し、又は１つの形式を別の形式に変換する。特権制御命令及びＩ／Ｏ命令は、ＣＰＵがスーパバイザ状態にあるときに実行されることができ、準特権制御命令は、適切な認証機構に従属する、問題状態（problem state）において実行されることができる。
【００１６】
ＣＰＵは、レジスタを提供し、これはプログラムに対して利用可能であるが、主ストレージ内でアドレス指定可能な表現を有さない。レジスタは、例えば、現行プログラム・ステータス・ワード（ＰＳＷ）、汎用レジスタ、浮動小数点レジスタ及び浮動小数点制御レジスタ、ベクトル・レジスタ、制御レジスタ、アクセス・レジスタ、プリフィックス・レジスタ、時刻（ＴＯＤ）プログラム可能レジスタ、並びに時刻コンパレータ及びＣＵＰタイマ用レジスタを含むことができる。このレジスタの組をＣＰＵのアーキテクチャ化レジスタ・コンテキスト（architected register context）と呼ぶことができる。コンフィギュレーション内の各ＣＰＵは、ＴＯＤクロックへのアクセスを提供することができ、これはコンフィギュレーション内の全てのＣＰＵで共有することができる。命令動作コードは、ある動作にどの型式のレジスタを使用すべきかを決定することができる。
【００１７】
各ＣＰＵは、それが機能及びファシリティの完全な一揃い（fullcomplement）を提供するものであるか（例えば汎用ＣＰＵ）又は特定の型式の作業負荷を処理することを意図したものであるか（例えば、専用ＣＰＵ）を示す、型式属性を有することができる。一次ＣＰＵは、汎用ＣＰＵ又は最後の初期プログラム・ロード（ＩＰＬ）動作に続いて始動したＣＰＵ（ＩＰＬ  ＣＰＵ）と同じ型式を有するＣＰＵのいずれかである。二次ＣＰＵは、汎用ＣＰＵ以外の、ＩＰＬ  ＣＰＵとは異なるＣＰＵ型式を有する任意のＣＰＵである。
【００１８】
マルチスレッディング・ファシリティは、サポーティング・アーキテクチャを実装するコンピュータシステム上で利用可能であり得る。マルチスレッディング・ファシリティは、マルチスレッディングのためのサポートを提供して、コアを共有する、ＣＰＵと呼ばれることもある一群のスレッドをイネーブルにする。マルチスレッディング・ファシリティがイネーブルにされている場合、コア内のＣＰＵは、実行ユニット又はキャッシュなどの特定のハードウェアリソースを共有することができる。コア内の１つのＣＰＵがハードウェアリソースを（典型的にはメモリ・アクセスを待機しながら）待機しているとき、コア内の他のＣＰＵは、コア内の共有リソースをアイドルのままにしておくのではなく、むしろ利用することができる。マルチスレッディング・ファシリティがインストールされており、かつイネーブルにされている場合、スレッドは、コアのメンバであるＣＰＵと同義である。マルチスレッディング・ファシリティがインストールされていない場合、又はファシリティはインストールされているがイネーブルにされていない場合、コアは、単一のＣＰＵ又はスレッドを含む。
【００１９】
マルチスレッディング・ファシリティがインストールされている場合、これをマルチスレッディング設定（ｓｅｔ−ｍｕｌｔｉｔｈｒｅａｄｉｎｇ）信号プロセッサ（ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ、ＳＩＧＰ）指令の実行によりイネーブルにすることができる。例示的な実施形態において、マルチスレッディング・ファシリティがイネーブルにされている場合、コンフィギュレーション内のＣＰＵの数は、倍数で増加し、その値は、プログラム指定最大スレッド識別（ｐｒｏｇｒａｍ−ｓｐｅｃｉｆｉｅｄ  ｍａｘｉｍｕｍ  ｔｈｒｅａｄ  ｉｄｅｎｔｉｆｉｃａｔｉｏｎ、ＰＳＭＴＩＤ）により決定される。コア内のＣＰＵの数は、ＰＳＭＴＩＤよりも１つだけ多くすることができる。この倍数に対応する数のＣＰＵがグループ化されて１つのコアになる。コンフィギュレーション内の同じＣＰＵ型式の各コアは、同数のＣＰＵを有することができる。コア内の各ＣＰＵは、同じＣＰＵ型式のものであるが、モデル及びＣＰＵ型式に基づいて、コア内の幾つかのＣＰＵは、オペレーショナルでなくてもよい。
【００２０】
例示的な実施形態において、制御プログラム、例えばオペレーティングシステム（ＯＳ）は、そのＯＳが管理するコンフィギュレーションがマルチスレッディングを使用できるようにするために、マルチスレッディングを明示的にイネーブルにする。代替的に、ハイパーバイザがマルチスレッディングをイネーブルにすることができ、ハイパーバイザのゲスト及びそれらのアプリケーションは、透過的に利益を得ることできる。アプリケーションプログラムは一般に、マルチスレッディングがイネーブルになっているかどうか気づかない。マルチスレッディングがイネーブルにされるとき、コンフィギュレーション内の全てのＣＰＵのＣＰＵアドレスは、アドレスの左端のビット内にコア識別（又はコアＩＤ）を含み、かつアドレスの右端ビット内にスレッド識別（スレッドＩＤ、又はＴＩＤ）を含むように調整される。コアＩＤは、コア・アドレス値と呼ばれることもあり、ＴＩＤは、スレッド・アドレス値と呼ばれることもある。コア内のＣＰＵは、実行ユニット又は下位レベル・キャッシュなどの特定のハードウェア・ファシリティを共有することができ、それゆえコアの１つのＣＰＵ内の実行がコア内の他のＣＰＵの性能に影響を与えることがある。
【００２１】
コンフィギュレーションの１つ又は複数のコアを、単一スレッド・モードとマルチスレッディング・モードとの間で動的に切り換えることに関連した変化を管理するために、多数のサポート機能が含められる。マルチスレッディングをサポートしないプログラムとの互換性を維持するために、リセット又は非アクティブ化したときに単一スレッド・モードをデフォルト・モードとすることができる。例示的な実施形態は、マルチスレッディング・モードから単一スレッド・モードへの移行後にスレッド・コンテキストの解析及び／又は復元をサポートするために、マルチスレッディング・モードからのコンテキストを保存し、通信し、及び復元する機能を含む。
【００２２】
例示的な実施形態により実装することができるコンピューティング環境は、例えばニューヨーク州Ａｒｍｏｎｋのインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づくものとすることができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、その全体が引用により本明細書に組み入れられる非特許文献１のＩＢＭ（登録商標）刊行物に説明されている。一例において、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づくコンピューティング環境は、ニューヨーク州Ａｒｍｏｎｋのインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、ｅＳｅｒｖｅｒ、ｚＳｅｒｉｅｓを含む。コンピューティング環境は、例えば、１つ又は複数のコア（例えば、プロセッサ・コア）を有する１つ又は複数のパーティション（例えば、論理パーティション）を有するプロセッサ複合体、及び本明細書でさらに説明するような１つ又は複数のレベルのハイパーバイザを含むことができる。
【００２３】
図１は、マルチスレッディング（ＭＴ）をサポートするコンピューティング環境の例としてコンピュータシステム１００を示す。図１の例において、コンピュータシステム１００は、複数のプロセッサ・コア１０２、入力／出力（Ｉ／Ｏ）サブシステム１０４、及びシステムメモリ１６０を含む。Ｉ／Ｏサブシステム１０４は、当該分野で知られたＩ／Ｏデバイスへのアクセスを提供することができる。プロセッサ・コア１０２は、本明細書においては単に「コア」とも呼ばれ、処理回路をサポート要素と共に含むことができる。図１の例において、５つのコア１０２は、コア１  １１０、コア２  １２０、コア３  １３０、コア４  １４０、及びコア５  １５０として示されているが、より多数の又は少数のコア１０２もまた企図される。ＭＴファシリティ１０３は、コア１０２の各々のハードウェア・コンポーネントとすることができる。この例において、コア１０２の各々は、上限４つまでのスレッドをサポートすることが可能である。例えば、コア１  １１０は、スレッド１１１、１１２、１１３及び１１４をサポートすることができる。コア２  １２０は、スレッド１２１、１２２、１２３及び１２４をサポートすることができる。コア３  １３０は、スレッド１３１、１３２、１３３及び１３４をサポートすることができる。コア４  １４０は、スレッド１４１、１４２、１４３及び１４４をサポートすることができる。コア５  １５０は、スレッド１５１、１５２、１５３及び１５４をサポートすることができる。いずれの時点でも、各コア１０２の４つ全てのスレッドがオペレーショナルである必要はないことに留意されたい。例えば、コア３  １３０において、スレッド１３１及び１３２はオペレーショナルであり得るが、一方でスレッド１３３及び１３４はオペレーショナルとなることが許容されない（網掛けで示される）。
【００２４】
図１はまた、コンピュータシステム１００のシステムメモリ１６０示し、ここでシステムメモリ１６０の部分は、論理パーティション１（ＬＰＡＲ１）１７０、ＬＰＡＲ２  １８０、及びＬＰＡＲ３  １９０に分割されている。ＬＰＡＲ１７０、１８０、１９０は、仮想コンピューティングシステム（コンフィギュレーションとしても知られる）を表し、この中でＬｉｎｕｘ（商標）又はＩＢＭ（登録商標）ｚ／ＯＳ（商標）、ｚ／ＶＭ、又はｚＴＰＦオペレーティングシステムなどのオペレーティングシステムを実行することができる。図１はまた、ＬＰＡＲ１７０、１８０、１９０に対するコア１０２の割当ても示す。この図において、コア１  １１０及びコア２  １２０は、ＬＰＡＲ１  １７０による使用専用である。コア３  １３０は、ＬＰＡＲ２  １８０による使用専用であり、コア５  １５０は、ＬＰＡＲ３  １９０による使用専用である。コア４  １４０は、ＬＰＡＲ２  １８０とＬＰＡＲ３  １９０との間で共有することができるが、図１ではＬＰＡＲ２  １８０に割り当てられているように示されている。ＬＰＡＲ３  １９０は、コア１０２の２つの異なる型式がパーティションにより使用されている例を示し、ここでコア４  １４０は、多重スレッドがオペレーショナルであることを許容するが、コア５  １５０は、この例では多重スレッドがオペレーショナルであることを許容しない。図１の例において、ＬＰＡＲ１  １７０は、ＯＳ１７１並びにプログラム１７２、１７３、１７４及び１７５のための処理リソースを提供する。ＬＰＡＲ２  １８０は、ＯＳ１８１並びにプログラム１８２、１８３及び１８４のための処理リソースを提供する。ＬＰＡＲ３  １９０は、ＯＳ１９１並びにプログラム１９２及び１９３のための処理リソースを提供する。
【００２５】
ＬＰＡＲ内で実行するオペレーティングシステムの制御下で、プログラムは、コアのスレッド上で実行される。例示的な実施形態において、個々のスレッドは、一度に１つのプログラムのみを実行するが、しかし、再入可能になるように設計されたプログラムは、多重スレッド又はコア上で同時に実行されることができる。例えば、ＬＰＡＲ１  １７０のＯＳ１７１のプログラム１７２を、コア１  １１０内のスレッド１１１及び１１３上並びにコア２  １２０のスレッド１２１及び１２４内で実行することができる。ＯＳの制御に従って、異なるプログラムを、ディスパッチ規則及びサービス品質協定に従って、同じスレッド又は異なるスレッド上にディスパッチすることができる。
【００２６】
また、システムメモリ１６０内には、例えばミリコード（Ｍｉｌｌｉｃｏｄｅ）１６２及びＬＰＡＲハイパーバイザ１６３を含む、種々のレベルのファームウェアが存在する。ミリコード１６２は、下位レベルのシステム機能をサポートするためのファームウェアとして具体化することができる。ＬＰＡＲハイパーバイザ１６３は、例えば、ＩＢＭ  Ｐｒｏｃｅｓｓｏｒ−Ｒｅｓｏｕｒｃｅ／Ｓｙｓｔｅｍ  Ｍａｎａｇｅｒ（商標）（ＰＲ／ＳＭ（商標））などの、ライセンスされた内部コードとすることができる。ＬＰＡＲハイパーバイザ１６３は、ＬＰＡＲ１７０、１８０、１９０を確立することができ、コア１０２上のディスパッチを管理することができる。ＭＴファシリティ１０３がコンピュータシステム１００にインストールされている場合、ミリコード１６２及びＬＰＡＲハイパーバイザ１６３はまた、ＭＴファシリティ・サポートコード１６４及び１６５をそれぞれ含む。ＭＴをサポートするための論理は、ミリコード１６２と、ＬＰＡＲハイパーバイザ１６３と、コア１０２との間に分散させることができるので、ＭＴファシリティ・サポートコード１６４及び１６５は、ＭＴファシリティ１０３の一部と考えることができる。図示していないが、ＯＳ１７１、１８１、１９１の各々もまた、それぞれのＬＰＡＲ１７０、１８０、１９０内のＭＴをイネーブルにして活用するためにＭＴファシリティ・サポートコードを含むことができる。
【００２７】
図２は、図１と同じコンピュータシステム１００を示すが、但し、図２のコンピューティング環境において、コア４  １４０は、ここではＬＰＡＲ２  １８０の代わりにＬＰＡＲ３  １９０に割り当てられている。スレッド１４３及び１４４がオペレーショナルではなかった図１とは異なり、図２では、ＬＰＡＲ３  １９０がコア４  １４０上にディスパッチされたとき、４つ全てのスレッド１４１−１４４が現在オペレーショナルであることにもまた留意されたい。コア１０２上にＬＰＡＲをディスパッチすること及びアンディスパッチすること（undispatching）は動的であり、他の時点では他のＬＰＡＲ（図示せず）が同じコア１０２上で動作することができる。
【００２８】
ここで図３を参照すると、実施形態により、処理コア、例えば図１及び図２のコア１０２のうちの１つを実装するための処理回路２００のブロック図が一般的に示される。処理回路２００は、ＭＴ環境内で１つ又は複数のスレッドを同時にサポートすることができる処理回路の一例である。図３に示す処理回路２００は、処理回路２００を他のプロセッサ及び周辺デバイスに結合することができるシステムコントローラ・インタフェース・ユニット２０２を含む。システムコントローラ・インタフェース・ユニット２０２はまた、データ値を読み出して格納するＤキャッシュ２０４、プログラム命令を読み出すＩキャッシュ２０８、及びキャッシュ・インタフェース・ユニット２０６を、外部メモリ、プロセッサ、及び他の周辺デバイスに接続することができる。
【００２９】
Ｉキャッシュ２０８は、命令フェッチ・ユニット（ＩＦＵ）２１０と共同して命令ストリームのローディングを提供することができ、命令フェッチ・ユニットは、命令を予めフェッチし、推論的ローディング及び分岐予測能力を含むことができる。フェッチされた命令は、デコードして命令処理データにするために、命令デコード・ユニット（ＩＤＵ）２１２に提供されることができる。
【００３０】
ＩＤＵ２１２は、命令を発行ユニット２１４に提供することができ、これは、一般演算を実行するための１つ又は複数の固定小数点ユニット（ＦＸＵ）２１６及び浮動小数点演算を実行するための１つ又は複数の浮動小数点ユニット（ＦＰＵ）２１８などの種々の実行ユニットに対する命令の発行を制御することができる。ＦＰＵ２１８は、２進浮動小数点ユニット（ＢＦＵ）２２０、１０進浮動小数点ユニット（ＤＦＵ）２２２、又はその他のいずれかの浮動小数点ユニットを含むことができる。発行ユニット２１４はまた、１つ又は複数のロード／格納ユニット（ＬＳＵ）２１８に１つ又は複数のＬＳＵパイプラインを介して結合することができる。多重ＬＳＵパイプラインは、ロード及び格納並びに分岐のためのアドレス生成を行うための実行ユニットとして扱われる。ＬＳＵ２２８及びＩＦＵ２１０の両方が、変換ルックアサイド・バッファ（ＴＬＢ）２３０を利用して、オペランド及び命令アドレスに対するバッファされた変換を提供することができる。
【００３１】
ＦＸＵ２１６及びＦＰＵ２１８は、汎用レジスタ（ＧＰＲ）２２４及び浮動小数点レジスタ（ＦＰＲ）２２６などの種々のリソースに結合される。ＧＰＲ２２４及びＦＰＲ２２６は、Ｄキャッシュ２０４からＬＳＵ２２８によりロードされて格納されるデータ値のためのデータ値ストレージを提供する。
【００３２】
処理回路２００はまた、システム時間ベースの生成及び診断アクションをサポートするためのカウンタ及び／又はタイマ２５０を含むことができる。例えば、カウンタ及び／又はタイマ２５０を用いて、時刻、並びに種々の診断及び測定ファシリティをサポートすることができる。
【００３３】
ここで図４を参照すると、図１と類似のコンピューティング環境が示されているが、但し、図４では、第２レベル・ハイパーバイザ３００がコンピュータシステム１００のＬＰＡＲ２  １８０内で実行されている。第２レベル・ハイパーバイザ３００は、例えば、ＩＢＭのｚ／ＶＭオペレーティングシステムであり、ＬＰＡＲ（第１レベル）ハイパーバイザ１６３により提供されるＭＴサポートコード１６５と同様のＭＴサポートコード３０１を含む。第２レベル・ハイパーバイザ３００は、複数の仮想マシン３１０、３２０、及び３３０（コンフィギュレーションとも呼ばれる）のためのサポートを提供し、その中でゲスト・オペレーティングシステム３１１、３２１、及び３３１がそれぞれ動作する。ゲスト・オペレーティングシステム３１１、３２１、及び３３１は、例えば、Ｌｉｎｕｘ（商標）又はＩＢＭ（登録商標）ｚ／ＯＳ（商標）、ｚ／ＶＭ、若しくはｚ／ＴＰＦ  ＯＳを含むことができ、又はＩＢＭ会話型モニタシステム（ＣＭＳ）などのゲスト開発環境を含むことができる。各ゲストＯＳ３１１、３２１、及び３３１は、マルチスレッディングをイネーブルにすることができる場合もできない場合もあり、その場合、第２レベル・ハイパーバイザ３００は、第２レベル・ハイパーバイザ３００が動作しているＬＰＡＲ２  １８０にとって利用可能な物理的処理リソース（コア１３０、１４０及びスレッド１３１−１３４、１４１−１４４）を用いて、ゲストＯＳ３１１、３２１、３３１及び関連付けられたプログラム３１２、３１３、３２２、３２３、３３２、及び３３３のディスパッチを担当することができる。種々の仮想マシン３１０、３２０、３３０のプログラム３１２、３１３、３２２、３２３、３３２、３３３は、それぞれのゲストＯＳ３１１、３２１、及び３３１が利用可能なスレッド１３１−１３４、１４１−１４４上で実行することができる。ゲストＯＳ３１１、３２１、及び３３１は、第２レベル・ハイパーバイザ３００がマルチスレッディングを活用している場合、ＭＴから透過的に利益を得ることができるので、ＭＴサポートコードを含む必要はない。
【００３４】
ここで図５を参照すると、実施形態により実装することができるコンピューティング環境内のハイパーバイザ・コンテキスト保持の例が示される。図５の例において、多数のサポート構造体が、図１及び図２のＬＰＡＲハイパーバイザ１６３内に示されている。例えば、構造体４１０は、図１のＬＰＡＲ１  １７０をサポートすることができ、図１に示すような物理スレッド１１１、１１２、１１３、１１４、１２１、１２２、１２３、１２４上で現在実行されている論理スレッド４１１、４１２、４１３、４１４、４２１、４２２、４２３、４２４のアーキテクチャ化レジスタ・コンテキスト（すなわち、スレッド・コンテキスト）を格納する、状態記述（state description）及びサテライト・ブロックを含む。これらの論理スレッドがディスパッチされている間、物理スレッドは、スレッドの現行アーキテクチャ化レジスタ・コンテキストを保持する。アーキテクチャ化レジスタ・コンテキストは、これらがもはやディスパッチされないときには、状態記述及びサテライト・ブロック内で維持される。構造体４３０は、図１のＬＰＡＲ２  １８０をサポートすることができ、図１に示すように物理スレッド１３１、１３２、１４１、１４２上で現在実行されている論理スレッド４３１、４３２、４４１、４４２のアーキテクチャ化レジスタ・コンテキストを格納する状態記述及びサテライト・ブロックを含む。構造体４５０は、図１のＬＰＡＲ３  １９０をサポートすることができ、図１に示すように物理スレッド１５１上で現在実行されている論理スレッド４５１のアーキテクチャ化レジスタ・コンテキストを格納する状態記述及びサテライト・ブロックを含む。構造体４５０はまた、物理プロセッサ上に現在ディスパッチされていない（網掛けで示される）論理スレッド４６１、４６２、４６３及び４６４のアーキテクチャ化レジスタ・コンテキストを格納する状態記述及びサテライト・ブロックも含む。物理コア上にディスパッチされていないＬＰＡＲをサポートする他の構造体、例えば、論理スレッド４７１、４７２、４７３及び４７４の状態記述及びサテライト構造体を含むＬＰＡＲ  Ａ（図１には示されていない）のための構造体４７０もまた、ＬＰＡＲハイパーバイザ１６３によって保持することができる。さらなる構造体の例は、論理スレッド４８１及び４８２の状態記述及びサテライト構造体を含む非ディスパッチＬＰＡＲ  Ｂ（図１には示されていない）をサポートする構造体４８０、並びに論理スレッド４８５のための非ディスパッチＬＰＡＲ  Ｃ（図１には示されていない）構造体４８４を含む。
【００３５】
図５には多数の構造体が示されているが、マルチスレッディングを管理するために、付加的な構造体を、ＬＰＡＲハイパーバイザ１６３及びコンピュータシステム１００内のどこか他の場所により、サポートすることができることが理解される。
【００３６】
ここで図６を参照すると、実施形態により、マルチスレッディングの動的イネーブルメントのためのプロセスフロー５００が示される。ブロック５０２において、第一スレッドが単一スレッド（ＳＴ）モードで実行される。ブロック５０４において、マルチスレッディング（ＭＴ）モード設定命令がＳＴモードでフェッチされる。まとめて５０５で示されるこの命令の実行の際に、ブロック５０６において、ＭＴモード設定命令により指定された場所から要求されるスレッドの数が得られる。場所は、ｓｅｔ−ＭＴモード命令を発行するときにパラメータ・レジスタにより指定することができる。ＭＴモード設定命令は、ｓｅｔ−ＭＴ指令と、要求されたスレッドの数に関連付けられるプログラム指定最大スレッドｉｄ（ＰＳＭＴＩＤ）とを含む、信号プロセッサ（ＳＩＧＰ）命令とすることができる。ＳＩＧＰ命令のｓｅｔ−ＭＴ指令に関連付けられたプロセスの例は、図９を参照して本明細書でさらに説明される。
【００３７】
プロセス５００の続きで、ブロック５０８において、要求されたスレッドの数が多重スレッドを示しているか否かの判定が行われる。例えば、多重スレッドは、１より大きい値により示されるものとすることができる。値ゼロが単一スレッドを示す実施形態において、１又は１より大きい値は、多重スレッドを示すことができる。要求されたスレッドの数が多重スレッドを示していないとの判定に基づいて、ブロック５１０において、コアはＳＴモードのままであり、ｓｅｔ−ＭＴモード命令の実行は完了し、制御はブロック５０２に戻る。要求されたスレッドの数が多重スレッドを示しているとの判定に基づいて、ブロック５１２において、ＭＴモードがイネーブルにされ、ｓｅｔ−ＭＴモード命令の実行が完了する。ブロック５１４において、第一スレッド及び１つ又は複数の第二スレッドを含む多重スレッドが実行される。ブロック５１６において、リセット又は非アクティブ化がない場合には、プロセス５００は、ブロック５１４にループバックし、そうでない場合には、ブロック５１８において、ＳＴモードに復帰するコンフィギュレーションのリセット又は非アクティブ化に基づいて、ＭＴモードがディスエーブルにされる。ＭＴモードをディスエーブルにすることの一部として、スレッドの数（ＰＳＭＴＩＤ）は、非クリアリング・リセット（non-clearing reset）の場合には保持され、クリアリング・リセット（clearingreset)の場合にはゼロにされる。プロセス５００は、ブロック５０２に戻る
【００３８】
ＣＰＵは、ｌｏａｄ−ｎｏｒｍａｌ、ｌｏａｄ−ｗｉｔｈ−ｄｕｍｐ、ｌｏａｄ−ｃｌｅａｒ、又はｌｏａｄ−ｃｌｅａｒ−ｌｉｓｔ−ｄｉｒｅｃｔｅｄキーがアクティブ化されたとき、ロード状態に入ることができる。チャネル・コマンド・ワード（ＣＣＷ）型初期プログラム・ローディング動作が成功裡に完了した場合、ＣＰＵは、ロード状態から動作状態に変化する。
【００３９】
ＣＰＵリセットは、破壊される情報量を最小限にして、装置チェック表示及び結果として生じるＣＰＵ状態におけるあらゆる不確定要素をクリアするために用いることができる。特に、これは解析又は動作再開のためにＣＰＵ状態を保存すべき場合に、チェック条件をクリアするために用いることができる。ＣＰＵリセットがｌｏａｄ−ｎｏｒｍａｌ又はｌｏａｄ−ｗｉｔｈ−ｄｕｍｐキーのアクティブ化により引き起こされた場合、（ａ）これはアーキテクチャ・モード（architectural mode）をデフォルト・モードに設定することができ、（ｂ）マルチスレッディング・ファシリティがインストールされており、かつイネーブルにされている場合には、マルチスレッディングがディスエーブルにされる。ＣＰＵリセットがデフォルト・モードを設定する場合、ＰＳＷを復元することができるように現行ＰＳＷを保存することができる。
【００４０】
初期ＣＰＵリセットは、ＣＰＵリセットの機能を、現行ＰＳＷ、ＣＰＵタイマ、クロック・コンパレータ、及び他のレジスタ、例えば中断イベント・アドレス・レジスタ、キャプチャＰＳＷレジスタ、制御レジスタ、浮動小数点制御レジスタ、プリフィックス・レジスタ、及びＴＯＤプラグラム可能レジスタなどの初期化と共に、提供する。初期ＣＰＵリセットは、ｌｏａｄ−ｎｏｒｍａｌ又はｌｏａｄ−ｗｉｔｈ−ｄｕｍｐキーのアクティブ化により引き起こされた場合、アーキテクチャ・モードをデフォルト・モードに設定することができる。初期ＣＰＵリセットがｌｏａｄ−ｎｏｒｍａｌ又はｌｏａｄ−ｗｉｔｈ−ｄｕｍｐキーのアクティブ化により引き起こされた場合にマルチスレッディングがイネーブルにされた場合、初期ＣＰＵリセット機能は、コアの最小番号ＣＰＵに対して行われることができ、コア内の他の全てのＣＰＵに対して、ＣＰＵリセットが行われる。クリアリング・リセットは、初期ＣＰＵリセット及びサブシステム・リセットの実行を引き起こし、加えて、ＴＯＤクロック以外の、コンフィギュレーション内の全てのＣＰＵ内の全てのストレージ位置及びレジスタがクリアされ又は初期化される。クリアリングは、外部ストレージ、例えばアドレス指定できないページの内容を保持するために制御プログラムにより用いられる直接アクセス・ストレージ・デバイスなどには影響を及ぼさない。
【００４１】
ＣＰＵ電源投入リセットは、初期ＣＰＵリセットの実行を引き起こし、有効チェック・ブロックコードにより、汎用レジスタ、アクセス・レジスタ、制御レジスタ、及び浮動小数点レジスタの内容をクリアしてゼロ／デフォルト値にする。状態のクリア又は初期化は必ずしもゼロ値になる必要はなく、クリアされた状態においてデフォルトで非ゼロ値にすることができることが理解される。ＣＰＵ電源投入リセットがコンフィギュレーションを確立する場合、アーキテクチャ・モードをデフォルト・モードに設定することができる。そうでない場合には、アーキテクチャ・モードを、すでにコンフィギュレーション内にあるＣＰＵのものに設定することができる。ＣＰＵリセット、初期ＣＰＵリセット、サブシステム・リセット、及びクリア・リセットは、手動で始動することができる。
【００４２】
例示的な実施形態において、各ＣＰＵは、そのＣＰＵアドレスと呼ばれる割り当てられた番号を有する。ＣＰＵアドレスは、コンフィギュレーション内の１つのＣＰＵを一意に識別する。ＣＰＵは、ＳＩＧＰ命令のＣＰＵアドレス・フィールド内でこのアドレスを指定することにより示される。誤動作警報、緊急信号、又は外部コールの信号を送信しているＣＰＵは、このアドレスを、中断を伴うＣＰＵアドレス・フィールド内に格納することにより識別することができる。ＣＰＵアドレスは、コンフィギュレーション定義プロセスにより割り当てられ、典型的には再構成による変化の結果として変更されない。プログラムは、ＣＰＵアドレス格納（ｓｔｏｒｅ  ＣＰＵ  ａｄｄｒｅｓｓ）命令を用いて、ＣＰＵのアドレスを決定することができる。ＣＰＵアドレス格納命令は、また、多重処理コンフィギュレーションにおいてＣＰＵを識別するＣＰＵアドレスを識別するために用いることもできる。
【００４３】
マルチスレッディングがイネーブルにされている場合、ＣＰＵアドレスは、コア内のＣＰＵの識別と連結されるコア識別（コアＩＤ）含むことができる。コア内のＣＰＵ識別は、スレッド識別（スレッドＩＤ、又はＴＩＤ）である。コンフィギュレーション内で、全てのコアは、同数のＣＰＵを提供するが、モデル及びＣＰＵ型式に応じて、コア内の幾つかのＣＰＵがオペレーショナルではない場合がある。
【００４４】
信号プロセッサのマルチスレッディング設定指令により用いられるパラメータ・レジスタのＰＳＭＴＩＤに基づいて、固定数のビットがスレッド識別を表す。このビット数は、ＴＩＤ幅と呼ばれる。
【００４５】
コアＩＤは、マルチスレッディングがイネーブルにされる前のＣＰＵアドレスの右側ビットから形成することができる。コアＩＤは、ＴＩＤ幅ビットだけ左にシフトされ、マルチスレッディングが利用可能になった後でＣＰＵアドレスの左側ビットをもたらす。スレッドＩＤは、同じＴＩＤ幅ビット数を有し、マルチスレッディングがイネーブルにされた後、ＣＰＵアドレスの右側ビットを占める。スレッドＩＤは、数の連続範囲内に割り当てることができる。表１は、ＰＳＭＴＩＤ、ＴＩＤ幅、並びにコア識別及びスレッド識別を含むＣＰＵアドレス・ビットの例示的な関係を示す。
【表１】
0006495319.tif 000002
【００４６】
アドレス拡張は、実施形態によるＣＰＵアドレス拡張プロセス６００Ａの例として図７に示される。ブロック６０２において、第一スレッドは、ＣＰＵアドレス・ビット数としてコア・アドレス値６０４を用いて、ＳＴモードでアクセスすることができる。矢印６０６は、ＳＴモードからＭＴモードへの切り換えを示す。ブロック６０８において、第一スレッド又は１つ若しくは複数の第二スレッドは、拡張アドレス値６１０を用いて、ＭＴモードでアクセスすることができる。拡張アドレス値６１０は、シフト・コアアドレス値６１２としてシフトされてスレッド・アドレス値６１４と連結された、コア・アドレス値６０４を含む。シフト・コアアドレス値６１２は、コア識別子（コアＩＤ）であり、スレッド・アドレス値６１４は、スレッド識別子（ＴＩＤ）である。シフト・コアアドレス値６１２は、要求された最大スレッド識別子、すなわちＰＳＭＴＩＤに基づく量だけシフトされることができる。スレッド・アドレス値６１４内のＴＩＤビット数は、上記表１に示すように、ＰＳＭＴＩＤに基づいて決定することができる。スレッド・アドレス値６１４をシフト・コアアドレス値６１２の下位桁ビットに連結して、拡張アドレス値６１０を形成することができる。全てがゼロのスレッド・アドレス値６１４は、第一スレッドを示し、ゼロより大きい値は、第二スレッドを識別して、アドドレス指定する。
【００４７】
ＭＴモードとＳＴモードとの間で切り換えるとき、コア・アドレス値６０４（ＳＴモード）又は拡張アドレス値６１０（ＭＴモード）のいずれかが選択され、それぞれＳＴモード又はＭＴモードでＣＰＵアドレスとして用いられる。コア・アドレス値６０４は、ＳＴモードで用いられる標準フォーマットアドレスの例であり、コアは、ＭＴモードをディスエーブルにしたことに基づいて、ＭＴモードからＳＴモードへ復帰する。例示的な実施形態において、第一スレッド（すなわち、第二スレッドではない）のみが、ＭＴモードをディスエーブルにしたことに基づいて、アクセス可能である。図８は、実施形態よるＣＰＵアドレス短縮プロセス６００Ｂの例を示す。図８の矢印６１６は、ブロック６０８のＭＴモードからブロック６０２のＳＴモードへの切換えを示す。ＭＴモードからＳＴモードへの復帰は、拡張アドレス値６１０を右へシフトし、スレッド・アドレス値６１４を排除して、シフト・コアアドレス値６１２からコア・アドレス値６０４（コアＩＤ）をＣＰＵアドレスとして含む標準フォーマットアドレスを形成することを含むことができる。
【００４８】
リセット機能がマルチスレッディングをディスエーブルにするとき、（ａ）スレッドＩＤゼロを有するＣＰＵのＣＰＵアドレスは、イネーブルメントに用いたのと同じＴＩＤ幅ビット数だけ右にシフトされ、（ｂ）アドレスの左側のＴＩＤ幅ビット数にゼロが挿入され、（ｃ）ＣＰＵアドレスは、元の非マルチスレッディング形式（すなわち、標準フォーマットアドレス）に復帰する。マルチスレッディングがイネーブルにされたときに非ゼロスレッドＩＤを有するコア内の全てのＣＰＵは、マルチスレッディングがディスエーブルにされたときにはもはやオペレーショナルではなくなる。
【００４９】
マルチスレッディングがイネーブルにされていないとき、ＣＰＵアドレスは、コンフィギュレーション定義プロセスにより割り当てられた値から変化せずにそのままである。この場合、スレッド識別は存在しない。
【００５０】
多数の信号プロセッサ指令は、ＣＰＵに対して、例えば、始動、停止、再始動、「停止及びステータス格納」（ｓｔｏｐ  ａｎｄ  ｓｔｏｒｅ  ｓｔａｔｕｓ）、初期ＣＰＵリセット（ｉｎｉｔｉａｌ  ＣＰＵ  ｒｅｓｅｔ）、ＣＰＵリセット（ＣＰＵ  ｒｅｓｅｔ）、「アドレスにステータス格納」（ｓｔｏｒｅ  ｓｔａｔｕｓ  ａｔ  ａｄｄｒｅｓｓ）、アーキテクチャ設定（ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）、実行ステータス検知（ｓｅｎｓｅ  ｒｕｎｎｉｎｇ  ｓｔａｔｕｓ）、マルチスレッディング設定（ｓｅｔ  ｍｕｌｔｉｔｈｒｅａｄｉｎｇ）、「アドレスに付加的ステータス格納」（ｓｏｒｅ  ａｄｄｉｔｉｏｎａｌ  ｓｔａｔｕｓ  ａｔ  ａｄｄｒｅｓｓ）などを含む指令を与えることができる。初期ＣＰＵリセット又はＣＰＵリセットは、信号プロセッサ命令により起動することができ、アーキテクチャ・モード又は他のＣＰＵに影響を及ぼさず、マルチスレッディングをディスエーブルにせず、Ｉ／Ｏのリセットを引き起こさない。
【００５１】
アーキテクチャ設定指令は、コンフィギュレーション内の全てのＣＰＵが設定されることになるアーキテクチャ・モードを指定する。アーキテクチャの差異は、異なるアドレス指定モード、レジスタ定義、及びＣＰＵによりサポートされる命令を含むことができる。アーキテクチャ・モードが変更されると、レジスタの選択ビットフィールドをデフォルト状態に設定する（例えばゼロにする）ことができ、コンフィギュレーション内の全てのＣＰＵのアクセス・レジスタ変換ルックアサイド・バッファ（ＡＬＢ）及び変換ルックアサイド・バッファ（ＴＬＢ）がクリアされ、コンフィギュレーション内の全てのＣＰＵに対してシリアル化及びチェックポイント同期機能を行うことができる。
【００５２】
実行ステータス検知指令は、アドレス指定されたＣＰＵが実行されているか否かを示すことができる。ＳＴモードでは、実行／非実行ステータスとしてインジケータを返すことができる。ＭＴモードでは、アドレス指定されたＣＰＵがそのメンバであるコアのいずれかのＣＰＵが実行しているか否か、又はアドレス指定されたＣＰＵがそのメンバであるコアの全てのＣＰＵが実行していないか否かを、インジケータを用いて識別することができる。
【００５３】
ｓｅｔ−ＭＴ指令は、マルチスレッディング・ファシリティをイネーブルにする。パラメータ・レジスタのビット位置は、コンフィギュレーション内で提供されるＰＳＭＴＩＤを収容することができる。ＰＳＭＴＩＤは、各コア内でアクセス可能にされるＣＰＵの数よりも１だけ少なくなるように定めることができる。例えば、指定されたビット位置における値３は、最大で４スレッドが提供されることを示す。コンフィギュレーション内の全てのＣＰＵはアドレス指定されていると考えることができるので、ＳＩＧＰ命令のＣＰＵアドレス・レジスタの内容は、無視することができる。ｓｅｔ−ＭＴ指令を受け取った場合、これはＳＩＧＰ命令の実行中に全てのＣＰＵにより完了される。図９を参照すると、ＳＩＧＰ  ｓｅｔ−ＭＴ指令７０２のためのプロセス７００が示される。図９のプロセス７００を参照して本明細書でさらに説明されるように、エラー表示を与えることができ、ＳＩＧＰ  ｓｅｔ−ＭＴ指令７０２が、無効指令、不正状態、及び無効パラメータのうちの１つ又は複数を伴って発行されたことの判定に基づいて、ＭＴモードのイネーブルメントが防止される。
【００５４】
ブロック７０４において、マルチスレッディング・ファシリティがインストールされていない場合、又は７０８でＣＰＵが有効アーキテクチャ・モードでイネーブルにされていない場合、ｓｅｔ−ＭＴ指令は受け入れられず、それぞれブロック７０６又は７１０において無効指令表示を返すことができる。ブロック７１２において、コンフィギュレーション内の他のＣＰＵが停止されていない又はチェック・ストップ状態にない場合、又はブロック７１６において、コンフィギュレーションがマルチスレッディングに関して既にイネーブルにされている場合、ｓｅｔ−ＭＴ指令は受け入れられず、それぞれブロック７１４又は７１８において不正状態表示を返すことができる。
【００５５】
ブロック７２０において、ＰＳＭＴＩＤが無効である場合、ｓｅｔ−ＭＴ指令は受け入れられず、ブロック７２２において無効パラメータ表示を返すことができる。ブロック７２４において、ＰＳＭＴＩＤがゼロのとき、コンフィギュレーションはマルチスレッディングに関してイネーブルにされず、ＳＴモードのままであり、ブロック７２８において条件コードとしていずれかのステータスを提供する。例示的な実施形態において、ＰＳＭＴＩＤが有効かつ非ゼロであるとき、ブロック７２６において、コンフィギュレーションはマルチスレッディングに関してイネーブルにされ、その結果、ＣＰＵアドレス拡張が生じ、コンフィギュレーション内の全てのＣＰＵのＡＬＢ及びＴＬＢは、その内容がクリアされ、コンフィギュレーション内の全てのＣＰＵ上でシリアル化及びチェックポイント同期機能が実行される。ブロック７２８において、ステータスが条件コードとして提供される。成功裡に完了すると、ｓｅｔ−ＭＴ指令を実行しているＣＰＵ以外の全てのＣＰＵは、停止された状態又はチェック・ストップ状態のままである。しかしながら、マルチスレッディングがイネーブルにされる前にＣＰＵがチェック・ストップ状態にあった場合、同じコア内で非ゼロスレッドＩＤを有するＣＰＵが停止状態又はチェック・ストップ状態に置かれることが予測できない場合がある。
【００５６】
スレッド・コンテキストは、アーキテクチャ化レジスタ・コンテキストとも呼ばれる。マルチスレッディングがイネーブルにされる前の各ＣＰＵのアーキテクチャ化レジスタ・コンテキスト（すなわち、ＰＳＷ、ＣＰＵタイマ、クロック・コンパレータ、汎用レジスタ、浮動小数点レジスタ及び浮動小数点制御レジスタ、ベクトル・レジスタ、制御レジスタ、アクセス・レジスタ、プリフィックス・レジスタ、並びにＴＯＤプログラム可能レジスタ、等）は、マルチスレッディングがイネーブルにされた後、各コアそれぞれのＴＩＤゼロを有するＣＰＵのアーキテクチャ化レジスタ・コンテキストになる。同様に、ＭＴイネーブルにされたコンフィギュレーションの各コアのＴＩＤゼロを有するＣＰＵのアーキテクチャ化レジスタ・コンテキストは、ｌｏａｄ−ｎｏｒｍａｌ又はｌｏａｄ−ｗｉｔｈ−ｄｕｍｐキーのアクティブ化の結果としてマルチスレッディングがディスエーブルにされたとき、各ＣＰＵそれぞれのアーキテクチャ化レジスタ・コンテキストになる。
【００５７】
非ゼロスレッド表示を有する全てのＣＰＵのアーキテクチャ化レジスタ・コンテキストを、ｌｏａｄ−ｎｏｒｍａｌ又はｌｏａｄ−ｗｉｔｈ−ｄｕｍｐキー動作のアクティブ化の結果としてマルチスレッディング・ファシリティがディスエーブルにされるときに保持することができる。マルチスレッディング・ファシリティがその後、介在するクリア・リセットを伴わずに再イネーブルにされた場合、非ゼロ・スレッドを有する全てのＣＰＵのアーキテクチャ化レジスタ・コンテキストは、復元される。
【００５８】
ｌｏａｄ−ｎｏｒｍａｌ又はｌｏａｄ−ｗｉｔｈ−ｄｕｍｐキーのアクティブ化によりディスエーブルにされた後でマルチスレッディングが再イネーブルされたとき、パラメータ・レジスタ内のビットでのＰＳＭＴＩＤの値が以前のイネーブルメントにおいて用いられた値と違う場合、非ゼロ・スレッドＩＤを有する全てのＣＰＵのアーキテクチャ化レジスタ・コンテキストは、予測できない場合がある。
【００５９】
システム情報格納（ｓｔｏｒｅ  ｓｙｓｔｅｍ  ｉｎｆｏｒｍａｔｉｏｎ）命令を用いて、コンフィギュレーションのコンポーネントに関する情報をシステム情報ブロック（ＳＹＳＩＢ）に格納することができる。ＳＹＳＩＢは、ＭＴインストール・フィールド、ＭＴ汎用フィールド、総ＣＰＵ／コアカウント、構成ＣＰＵ／コアカウント、スタンバイＣＰＵ／コアカウント、リザーブＣＵＰ／コアカウント、及びその他のフィールドを含むことができる。ＭＴインストール・フィールドは、マルチスレッディング・ファシリティがインストールされているか否かを示すことができ、また第１のコア型式、例えば専門コア型式に対する最大サポートＴＩＤを示すことができる。ＭＴ汎用フィールドは、第２のコア型式、例えば汎用コア型式に対する最大サポートＴＩＤを示すことができる。ＭＴ汎用フィールド内の最大サポートＴＩＤは、ＭＴインストール・フィールド内の最大サポートＴＩＤを下回るか又は等しいものに限定することができる。特定の動作及びエミュレーションは、ＳＴモードのＣＰＵに適用され、ＭＴモードのコアには適用されない。ＣＰＵ／コアという用語は一般に、適宜ＳＴ又はＭＴモードで、このような動作又はエミュレーションを受けるエンティティを指す。したがって、総ＣＰＵ／コアカウントは、構成状態、スタンバイ状態、又はリザーブ状態のいずれかにある、コンフィギュレーション内の汎用ＣＰＵ又は汎用ＣＰＵを含むコアの総数を示すことができる。構成ＣＰＵ／コアカウントは、構成状態にある、すなわちコンフィギュレーション内にあり、かつプログラムを実行する準備ができている汎用ＣＰＵ又は汎用ＣＰＵを含むコアの数を示すことができる。スタンバイＣＰＵ／コアカウントは、スタンバイ状態にある、すなわち構成状態に置かれるまでプログラムの実行に用いることができない汎用ＣＰＵ又は汎用ＣＰＵを含むコアの数を示す。リザーブＣＰＵ／コアカウントは、リザーブ状態にある、すなわちプログラムを実行するために使用することはできず、かつ構成状態におくことができない汎用ＣＰＵ又は汎用ＣＰＵを含むコアの数を示す。
【００６０】
図１０は、実施形態による、累積されたアイドル時間をキャプチャして利用するコンフィギュレーション８５０の例を示す。システム性能を特徴付けて、マルチスレッディング機能の利用率を高めることによりシステム性能を高める機会を識別するために、実施形態は、システム性能情報にアクセスするクエリ命令をサポートすることができる。クエリ命令の一例は、物理及び論理ＣＰＵ／コア利用率の両方に関する（すなわち、ＳＴモードのＣＰＵの利用率又はＭＴモードのコアの利用率に関する）情報を格納する、ＤＩＡＧＮＯＳＥ命令である。実施形態において、ＤＩＡＧＮＯＳＥ命令は、正規情報ブロック又は拡張情報ブロックなど、戻される情報ブロックの型式、並びにブロックサイズ情報及び場所を定義する、多数のパラメータを含むことができる。図１０の例において、ＭＴモードで動作するコンフィギュレーション８５０は、一対のコア８００Ａ及び８００Ｂを含み、ここでコンフィギュレーション８５０は、論理パーティション（ＬＰＡＲ）とすることができ、コア８００Ａ及び８００Ｂは、論理コアとすることができる。コア８００Ａ及び８００Ｂの各々は、一対のスレッド、すなわちスレッド０及びスレッド１を含む。コンフィギュレーション８５０のメモリ８０１は、行われる命令のシーケンスを定めるＯＳイメージ８２０を含むことができる。ＯＳイメージ８２０は、別個のプログラムの集まり又は単一のプログラムを表すことができる。
【００６１】
図１０の例において、ＯＳイメージ８２０は、クエリ命令８２１、例えばＤＩＡＧＮＯＳＥ命令を含み、これは、起動コアとしてのコア８００Ａのスレッド１上で実行８３０されることができる。クエリ命令８２１の実行のためのサポートは、ハイパーバイザ・レベル（例えば、図１及び図２のＬＰＡＲハイパーバイザ１６３）、ミリコード・レベル（例えば、図１及び図２のミリコード１６２）、及び物理ハードウェア・レベル（例えば、図３のカウンタ／タイマ２５０及び／又は図１０のカウンタ８２５）に含めることができる。クエリ命令８２１は、時間ベースの性能を定義する多数の値を含むシステム性能情報を格納するための場所８３２を、例えば拡張時間情報（ｅｘｔｅｎｄｅｄ−ｔｉｍｅ−ｉｎｆｏｒｍａｔｉｏｎ、ＥＴＩ）ブロック８３６の一部として指定することができる。ＥＴＩブロック８３６は、コンフィギュレーション８５０並びにシステム内の他のコンフィギュレーションに関連した性能情報を含むことができる。例えば、図１及び図２を参照すると、ＯＳ１７１、１８１、又は１９１の１つから実行されるクエリ命令は、コンピュータシステム１００のＬＰＡＲ１７０、１８０、及び１９０などの全てのコンフィギュレーションにわたる情報を要約するＥＴＩブロックをもたらすことができる。
【００６２】
図１０の例において、ＥＴＩブロック８３６は、ＥＴＩブロックヘッダ８４０及び１つ又は複数の拡張パーティション時間情報（ｅｘｔｅｎｄｅｄ  ｐａｒｔｉｔｉｏｎ−ｔｉｍｅ−ｉｎｆｏｒｍａｔｉｏｎ、ＥＰＴＩ）ブロック８３４Ａ−８３４Ｎ（一般に８３４）を含み、ここでシステムの各パーティション又はコンフィギュレーションは、別個のＥＰＴＩブロック８３４を含むことができる。例えば、図１及び図２のコンピュータシステム１００を参照すると、各ＬＰＡＲに１つずつ、３つのＥＰＴＩブロックを定義することができる。図１０の例において、コンフィギュレーション８５０がシステム内で定義された唯一のコンフィギュレーション（すなわち論理パーティション）である場合、１つのＥＰＴＩブロック８３４、例えばＥＰＴＩブロック８３４Ａのみが必要とされることになる。各ＥＰＴＩブロック８３４は、拡張パーティション（ＥＰ）ヘッダ８０２及び１つ又は複数の拡張ＣＰＵ／コア情報（ＥＣＩ）ブロック８１０Ａ−８１０Ｍ（一般に８１０）を含むことができる。ＥＰヘッダ８０２は、コンフィギュレーション／パーティション又はＯＳイメージ・レベルにおける値を定義することができ、一方、ＥＣＩブロック８１０Ａ−８１０Ｍは、コア・レベルにおける値を定義する。
【００６３】
図１０の例において、ＥＴＩブロックヘッダ８４０は、それについてのシステム性能情報が提供される論理パーティションの数（Ｎｐａｒ）を含む。ＥＴＩブロックヘッダ８４０はまた、報告するマシン・コンフィギュレーション内の物理ＣＰＵ／コア（ＰｈｙｓＣＰＵｓ）の数も含むことができる。ＥＴＩブロックヘッダ８４０はまた、時間値、ステータス値、識別子、ポインタ／オフセット等といった、その他の値を含むこともできる。
【００６４】
ＥＰヘッダ８０２は、ＬＰＡＲに関連付けることができるパーティション番号（ＰＮ）識別子８０４、そのパーティションに関連付けられる論理ＣＰＵ／コアの数を識別することができるＣＰＵカウント８０６などの、多数の値を含むことができる。ＥＰヘッダ８０２はまた、例えばＳＩＧＮＡＬ  ＰＲＯＣＥＳＳＯＲ（ＳＩＧＰ）ｓｅｔ−ＭＴ指令により設定されるような、報告されるパーティションについてのプログラム指定最大スレッド識別（ＭＴＩＤ）８０８を含むこともできる。ＭＴＩＤ８０８を用いて、ＳＴモード（例えば、ＭＴＩＤは０）又はＭＴモード（例えば、ＭＴＩＤはゼロより大きい）のどちらがイネーブルにされているかを判定することができる。ＥＰヘッダ８０２はまた、コンフィギュレーション・ステータス値、ステータス値、識別子、ポインタ／オフセット等といった、その他の値を含むこともできる。
【００６５】
ＥＣＩブロック８１０Ａ−８１０Ｍの各々は、総ディスパッチ時間８１２、ＭＴアイドル時間８１４、ＣＰＵアドレス８１６、及びその他の値を含むことができる。総ディスパッチ時間８１２は、コアがディスパッチされた（例えば、物理ＣＰＵ／コアが論理ＣＰＵ／コアに割り当てられた）累積時間を含むことができる。総ディスパッチ時間８１２は、対応する論理ＣＰＵ／コアが定義されている間はリセットされないものとすることができる。報告するコンフィギュレーション（例えば、論理パーティション）に対してＭＴモードがイネーブルにされているとき、ＭＴアイドル時間８１４の内容は、ＭＴモードでディスパッチされたコア上の全てのＣＰＵ（すなわち、スレッド）についてのスレッド・アイドル時間の総計である。ＭＴアイドル時間８１４は、コアの個別のディスパッチされたＣＰＵが、イネーブル待機状態、又は無効状態（例えば、停止状態、チェック・ストップ状態、ディスエーブル待機状態、又はプログラム中断ループ内）のいずれかにあるときの時間を含むことができる。１つの実施形態において、マシンは、無効状態、又はイネーブル待機状態に出入りする際の変化を検出し、計上する（account for）ことにより、このアイドル時間値をスレッドごとのベースで維持することができる。ハイパーバイザ（例えば、図１及び図２のＬＰＡＲハイパーバイザ１６３）は、次に、各コアについてアイドル時間の総計を累積することができ、クエリ命令８２１に応答して、この累積情報をＯＳイメージ８２０に提供する。ＭＴアイドル時間８１４は、ＭＴＩＤ８０８が非ゼロ（すなわちＭＴモード）の場合のみ有効であり、ＭＴアイドル時間８１４は、コアがディスパッチされていない時間は計上しない。ＣＰＵアドレス８１６は、報告されているＣＰＵ又はコアの、論理ＣＰＵアドレス又は論理コア識別子を識別することができる。ＥＣＩブロック８１０に含めることができる他の情報の例は、種々の時間値、重み、ステータス値などを含む。
【００６６】
ひとたびＥＴＩブロック８３６が得られると、ＯＳイメージ８２０は、８２２、８２３、及び８２４において多数の計算を行うことができる。ＭＴＩＤ８０８は、論理パーティション全体がＭＴを活用したかどうかを記述するという点で、粒度が粗いデータを提供する。ＭＴアイドル時間８１４は、ひとたびＯＳイメージがＭＴを動的にイネーブルにすると、ハイパーバイザによりディスパッチされたコア内のＣＰＵ（スレッド）がアイドルであった時間量を定義するので、粒度が細かい。総ディスパッチ時間８１２は、所与のコアが対応する論理パーティションに対してハイパーバイザによりディスパッチされた時間量を記述する。
【００６７】
例えば、ＭＴ容量増大のため存在した機会の逸失量（missedopportunity）を判定するために、種々の機会値計算を行うことができる。図１０の例に示すような、コア当たり２つのスレッドを含むシステムを考えると、システム上に表された全ての論理パーティションについて、全てのコア・ディスパッチ時間がコア当たり２つのスレッドを実行したならば、ＭＴの完全な値が達成されることになる。それゆえ、コンフィギュレーションの全てのコアにわたる総コア・ディスパッチ時間に、コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数を掛けると、機会率（opportunity ratio）の分母になる。機会率の分子は、以下のように、ディスパッチされたコアがコア当たり２つのスレッドを実行しなかった時間量を特定することができる。
【００６８】
ＭＴを動的にイネーブルにしなかった（すなわち、ＭＴＩＤ８０８がゼロに等しい）論理パーティション内のＯＳイメージの場合、分子は、その論理パーティションにより消費されたコアについての総ディスパッチ時間８１２の合計とすることができる（ＭＴディスエーブル逸失機会値（MT-disabled missed opportunity value）８２２）。これは、これらのディスパッチされたコア、すなわちその論理パーティションに対するあらゆるコア・ディスパッチ・インターバルにわたって（２つのうち）１つのスレッドが事実上アイドルであったコアについて、逸失機会の量を定義する。ＭＴを動的にイネーブルにした（すなわち、ＭＴＩＤ８０８はゼロに等しくない）論理パーティション内のＯＳイメージの場合、分子は、その論理パーティションにより消費されたコアについてのＭＴアイドル時間８１４の合計とすることができる（ＭＴイネーブル逸失機会値８２３）。これは、論理パーティションの容量増大のためのＭＴの過渡的な逸失機会を表すことができる。機会率８２４は、全ての論理パーティションについてのＭＴディスエーブル逸失機会値８２２とＭＴイネーブル逸失機会値８２３との組合せを、コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数によりスケール調整された（scaled）全ての論理パーティションについての総ディスパッチ時間８１２で割ったものとして、計算することができる。コア当たりサポートされるスレッドの最大数は、特定のコンピュータシステム・モデルに関連付けられる定数として定めることができ、必ずしもＭＴＩＤ８０８と揃える必要はない。図１及び図２における例において、コア当たりサポートされるスレッドの最大数は４であり、一方、図１０において、コア当たりサポートされるスレッドの最大数は２である。コア当たりサポートされるスレッドの最大数が２である例において、機会率８２４は、全ての論理パーティションについてのＭＴディスエーブル逸失機会値８２２又はＭＴイネーブル逸失機会値８２３の合計を、その論理パーティションにより消費される全てのコアについての総ディスパッチ時間８１２の全ての論理パーティションについての合計の２倍で割ったものとして定義することができる。
【００６９】
機会率８２４は、インターバルにわたって組み合わされた作業負荷についての逸失機会のパーセンテージを示すことができる。ハードウェアがコア当たり２つのスレッドのみをサポートしている場合、結果が５０％に近いということは、ＭＴ活用により最小限の容量増大のみが可能であったことを述べていることになり、結果が０％であるということは、システム内の全ての論理パーティションにわたって完全なＭＴ活用があったことを述べていることになる。これを用いて、論理パーティションにわたるＭＴ活用の増大を促進することができ、又は、ＭＴがシステムに対して与えることができる潜在的なキャッシュの影響を推論することができる。
【００７０】
図１１は、実施形態によるアイドル時間累積及び機会定量化のためのプロセスフロー９００を示す。ブロック９０２において、図１０のコア８００Ａ上のクエリ命令８２１のように、複数のコアのうちの起動コア上でクエリ命令が実行される。クエリ命令は最大スレッド識別値、マルチスレッディング・アイドル時間値、及び総ディスパッチ時間を格納するための場所、例えば図１０のＥＴＩブロック８３６のための場所８３２を指定することができる。ブロック９０４において、ＯＳイメージ、例えば図１０のＯＳイメージ８２０は、論理パーティション内のコアの現行最大スレッド識別子を示す最大スレッド識別値（例えばＭＴＩＤ８０８）を得ることができる。ＭＴＩＤ８０８は、クエリ命令が発行されたときの、例えば論理パーティションがＳＴモード又はＭＴモードにあるときの、相対的タイミングに応じて、所与の論理パーティションに対して変化することができる。起動コアはまた、コアの各々について、ＭＴモードでコアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値（例えば、ＭＴアイドル時間８１４）を得ることができる。起動コアはまた、コアの各々についての総ディスパッチ時間（例えば、総ディスパッチ時間８１２）を、コアの各々がディスパッチされた累積時間として得ることができる。ブロック９０６において、最大スレッド識別値を用いて、論理パーティションがＳＴモード又はＭＴモードのどちらであるかを判定することができる。ブロック９０８において、論理パーティションがＭＴモードにあるとの判定に基づいて、ＭＴイネーブル逸失機会値、例えば図１０のＭＴイネーブル逸失機会値８２３を、論理パーティション内のコアの全てについてのマルチスレッディング・アイドル時間値の合計として決定することができる。ブロック９１０において、論理パーティションがＳＴモードにあるとの判定に基づいて、ＭＴディスエーブル逸失機会値、例えば図１０のＭＴディスエーブル逸失機会値８２２を、コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数より１つ小さい数によりスケール調整された、論理パーティション内のコアの全てについての総ディスパッチ時間の合計として決定することができる。
【００７１】
先に説明したように、システムは、各々がＯＳイメージ及び１つ又は複数のコアを有する論理パーティションを有する複数のコンフィギュレーションを含むことができる。従って、ブロック９０２のクエリ命令実行は、論理パーティションの各々についての最大スレッド識別値、論理パーティションの各々の中のコアの各々についてのマルチスレッディング・アイドル時間値、及び論理パーティションの各々の中のコアの各々についての総ディスパッチ時間を得ることができる。ブロック９０４、９０６、９０８及び９１０を含むシーケンス９１１を各論理パーティションに対して繰り返すことができ、全てのＭＴイネーブル及びＭＴディスエーブル論理パーティションにわたって、ＭＴイネーブル逸失機会値及びＭＴディスエーブル逸失機会値をそれぞれ累積する。ブロック９１２において、機会率、例えば図１０の機会率８２４が、論理パーティションの全てについての総ＭＴディスエーブル逸失機会値及び総ＭＴイネーブル逸失機会値の組合せを、コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数でスケール調整された論理パーティションの全てについての総ディスパッチ時間により割ったものとして計算される。
【００７２】
技術的効果及び利益は、動作の単一スレッド・モード及びマルチスレッディング・モードをサポートするコンピュータシステムにおけるアイドル時間累積を含む。
【００７３】
実施形態は、マルチスレッディング・コンピュータシステムにおけるアイドル時間累積のためのシステム、方法、及びコンピュータ・プログラム製品を含む。１つの態様によれば、コンピュータシステムは、論理パーティション内で単一スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で構成可能な複数のコア及びオペレーティングシステム（ＯＳ）イメージを含むコンフィギュレーションを含む。ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートする。コンピュータシステムはまた、複数のコアのうちの起動コア上でクエリ命令を実行することを含む方法を行うように構成されたマルチスレッディング・ファシリティを含む。実行することは、ＯＳイメージにより、論理パーティション内の複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることを含む。起動コアはまた、コアの各々について、ＭＴモードでコアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得る。
【００７４】
別の態様によれば、コンピュータシステムにおけるアイドル時間累積のためのコンピュータ実装の方法が提供される。コンピュータシステムは、論理パーティション内でＳＴモードとＭＴモードとの間で構成可能な複数のコア及びＯＳイメージを含むコンフィギュレーションを含む。ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートする。方法は、複数のコアのうちの起動コア上でクエリ命令を実行することを含む。実行することは、ＯＳイメージにより、論理パーティション内の複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることを含む。起動コアはまた、コアの各々について、ＭＴモードでコアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得る。
【００７５】
さらなる態様は、コンピュータシステムにおけるアイドル時間累積のためのコンピュータ・プログラム製品を含む。コンピュータシステムは、論理パーティション内でＳＴモードとＭＴモードとの間で構成可能な複数のコア及びＯＳイメージを含むコンフィギュレーションを含む。ＭＴモードは、コアごとに共有リソース上の複数のスレッドを同時にサポートする。コンピュータ・プログラム製品は、具体化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含み、ここでコンピュータ可読媒体は、信号ではない。プログラム命令は、処理回路により可読であり、複数のコアのうちの起動コアに実行させるクエリ命令を含む。実行させることは、ＯＳイメージにより、論理パーティション内の複数のコアの現行最大スレッド識別子を示す最大スレッド識別値を得ることを含む。起動コアはまた、コアの各々について、ＭＴモードでコアの各々の上でイネーブルにされた全てのスレッドのアイドル時間の総計量を示すマルチスレッディング・アイドル時間値を得る。
【００７６】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、起動コアにより、コアの各々について、コアの各々がディスパッチされた累計時間として、総ディスパッチ時間を得ることを含むことができる。
【００７７】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、クエリ命令が、最大スレッド識別値、マルチスレッディング・アイドル時間値、及び総ディスパッチ時間を格納するための場所を指定する場合を含むことができる。
【００７８】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、論理パーティションがＳＴモードにあるとの判定に基づいて、ＭＴディスエーブル逸失機会値を、コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数よりも１つ小さい数でスケール調整された論理パーティション内のコアの全てについての総ディスパッチ時間の合計として決定することを含むことができる。
【００７９】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、論理パーティションがＭＴモードにあるとの判定に基づいて、ＭＴイネーブル逸失機会値を、論理パーティション内のコアの全てについてのマルチスレッディング・アイドル時間値の合計として決定することを含むことができる。
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、ＭＴディスエーブル逸失機会値が、ＳＴモードである論理パーティション内の各コア上でイネーブルされる１つのスレッド以外にハードウェアとしてサポート可能な他のスレッドのアイドル時間の合計時間を示す場合を含むことができる。
【００８０】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、最大スレッド識別値が、論理パーティションがＳＴモード又はＭＴモードのどちらであるかを判定するために用いられる場合を含むことができる。
【００８１】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、各々がＯＳイメージ及び１以上のコアを含む論理パーティションを有する複数のコンフィギュレーションを含むことができる。クエリ命令は、論理パーティションの各々についての最大スレッド識別値と、論理パーティションの各々の中のコアの各々についてのマルチスレッディング・アイドル時間値と、論理パーティションの各々の中のコアの各々についての総ディスパッチ時間とを得ることができる。
【００８２】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、マルチスレッディング・ファシリティが、論理パーティションそれぞれにおけるＭＴディスエーブル逸失機会値又はＭＴイネーブル逸失機会値の合計せを、コンピュータシステムのハードウェアによりコア当たりサポートされるスレッドの最大数でスケール調整された論理パーティションの全てについての総ディスパッチ時間の合計で割ったものとして、機会率を計算するようにさらに構成される場合を含むことができる。
【００８３】
上記の特徴の１つ又は複数に加えて、又は代替的に、さらなる実施形態は、無効状態、又は待機状態のイネーブルメントに対する変化を検出及び計上することにより、スレッドごとのベースでマルチスレッディング・アイドル時間を維持することを含むことができる。ハイパーバイザは、各コアについてアイドル時間の総計量を累積することができる。アイドル時間の総計量を累積としてＯＳイメージに提供することができる。
【００８４】
本明細書において用いられる用語は、特定の例を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈が明らかにそうでないことを示していない限り、複数形もまた同様に含むことを意図したものである。「備える、含む」及び／又は「備えている、含んでいる」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指定するが、１つ又は複数のその他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はそれらの群の存在又は付加を排除するものではないことが更に理解されるであろう。
【００８５】
以下の特許請求の範囲における全ての「手段又はステップと機能との組み合わせ（ミーンズ又はステップ・プラス・ファンクション）」要素の対応する構造、材料、動作、及び均等物は、その機能を、明確に特許請求された他の請求要素との組み合わせで実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明を目的として提示されたものであるが、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。本発明の範囲及び思想から逸脱しない多くの修正及び変形が当業者には明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最も良く説明するために、そして、当業者が、企図した特定の用途に適した種々の修正を伴う種々の実施形態に関して本発明を理解できるように、選択及び説明したものである。
【００８６】
本発明の種々の実施形態の説明を例証のために提示したが、これらは網羅的であること又は開示された実施形態に限定することを意図したものではない。当業者には、説明した実施形態の範囲及び思想から逸脱しない多くの修正及び変形が明白となるであろう。本明細書で用いた用語は、実施形態の原理、実際的用途、又は市場で見いだされる技術に対する技術的改良点を最も良く説明するように、又は、当業者が本明細書で開示した実施形態を理解することができるように、選択されたものである。
【００８７】
ここで図１２を参照すると、コンピュータ可読媒体１００２及びプログラム命令１００４を含む、実施形態によるコンピュータ・プログラム製品１０００が一般的に示されている。
【００８８】
本発明は、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を有する１つ又は複数のコンピュータ可読ストレージ媒体を含むことができる。
【００８９】
コンピュータ可読ストレージ媒体は、命令実行デバイスが使用するための命令を保持し、格納することができる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、半導体ストレージ・デバイス、又は上記のものの任意の適切な組合せとすることが出来るがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュメモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多目的ディスク（ＤＶＤ）、メモリスティック、フロッピーディスク、パンチカード若しくは記録された命令を有する溝内に隆起した構造のような機械式コード化デバイス、及び上記のものの任意の適切な組合せを含む。コンピュータ可読ストレージ媒体は、本明細書で用いられる場合、無線波若しくは他の自由に伝搬する電磁波、導波路若しくは他の伝送媒体を通って伝搬する電磁波（例えば光ファイバケーブルを通る光パルス）、又は電線を通って伝送される電気信号のような、それ自体が一時的な信号と解釈されるべきではない。
【００９０】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスにダウンロードすることも、又は、例えばインターネット、ローカルエリアネットワーク、広域ネットワーク及び／又は無線ネットワークを経由して、外部コンピュータ若しくは外部ストレージ・デバイスにダウンロードすることもできる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ及び／又はエッジサーバを含むことができる。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カード又はネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令をそれぞれのコンピューティング／処理装置内のコンピュータ可読ストレージ媒体にストレージのために転送する。
【００９１】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ（state-setting data）、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語及び「Ｃ」プログラミング言語若しくは類似のプログラミング言語のような従来の手続き型プログラミング言語を含む１つ若しくは複数のプログラミング言語の任意の組合せで記述されたソースコード若しくはオブジェクトコードのいずれか、とすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいては、遠隔コンピュータは、ローカルエリアネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続が為される場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えばプログラム可能論理回路、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することにより、コンピュータ可読プログラム命令を実行することができる。
【００９２】
本発明の態様は、本明細書において、本発明の実施形態による方法、装置（システム）、及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図のブロックの組合せは、コンピュータ可読プログラム命令によって実装することができることが理解されよう。
【００９３】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実装するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、プログラム可能データ処理装置、及び／又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、その中に格納された命令を有するコンピュータ可読媒体が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作の態様を実装する命令を含む製品を含むようにすることもできる。
【００９４】
コンピュータ可読プログラム命令を、コンピュータ、他のプログラム可能データ処理装置又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置又は他のデバイス上で行わせてコンピュータ実装のプロセスを生成し、それにより、コンピュータ、他のプログラム可能装置又は他のデバイス上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するようにすることもできる。
【００９５】
図面内のフローチャート及びブロック図は、本開示の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又は命令の一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図中に記された順序とは異なる順序で行われることがある。例えば、連続して示された２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図中のブロックの組合せは、指定された機能又は動作を実行する専用ハードウェア・ベースのシステムによって実装することもでき、又は専用ハードウェアとコンピュータ命令との組合せを実行することもできることにも留意されたい。
【符号の説明】
【００９６】
１００：コンピュータシステム
２００：処理回路
【図１】
0006495319.tif 000003
【図２】
0006495319.tif 000004
【図３】
0006495319.tif 000005
【図４】
0006495319.tif 000006
【図５】
0006495319.tif 000007
【図６】
0006495319.tif 000008
【図７】
0006495319.tif 000009
【図８】
0006495319.tif 000010
【図９】
0006495319.tif 000011
【図１０】
0006495319.tif 000012
【図１１】
0006495319.tif 000013
【図１２】
0006495319.tif 000014