(57)【特許請求の範囲】
【請求項１】
コンピューティングのための装置であって：
１つ又は複数のマルチコアプロセッサであって、その各々は様々なケーパビリティの複数のコアを有する、マルチコアプロセッサ；及び
オペレーティングシステムのスケジューラ又は仮想マシンモニタであるモジュール；
を備え、前記モジュールが前記スケジューラである場合に、前記スケジューラは、前記コアのケーパビリティを取得又は受信し、複数の実行スレッドの特徴及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された１つ又は複数のものにおいて実行するための複数の実行スレッドをスケジューリングし；及び
前記モジュールが前記仮想マシンモニタである場合に、前記仮想マシンモニタは、前記コアのケーパビリティを取得又は受信し、前記仮想マシンの各自の優先度及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された１つ又は複数のものにおける実行のための前記装置の複数の仮想マシンをスケジューリングし；
前記モジュールは、前記コアのケーパビリティに少なくとも部分的に基づいて、ケーパビリティにより順序付けられたコアセットを１つ以上形成する
ことを特徴とする装置。
【請求項２】
前記モジュールは、前記装置のスタートアップ時又はリセット時に、前記コアのケーパビリティが取り出されるように利用可能であるか否かを判断し、前記コアのケーパビリティは取り出されるように利用可能である旨の判断に応じて取得を実行し、前記コアのケーパビリティを取得すると、前記コアのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングを実行する
ことを特徴とする請求項１に記載の装置。
【請求項３】
前記モジュールは、前記１つ又は複数のマルチコアプロセッサの個々のプロセッサ識別子を検査することにより、前記コアのケーパビリティが利用可能であるか否かを判断する
ことを特徴とする請求項２に記載の装置。
【請求項４】
前記モジュールは、前記コアのケーパビリティを、前記コアの各自のレジスタから取得する
ことを特徴とする請求項３に記載の装置。
【請求項５】
前記モジュールは、ｎ個のコアに対してｎ個のコアセットを形成し、ｋ番目のコアセットは、ケーパビリティの高い順にｋ個のコアを含むように形成され、ｋは１以上ｎ以下の自然数である
ことを特徴とする請求項１に記載の装置。
【請求項６】
ケーパビリティにより順序付けられたコアセットを１つ以上形成すると、前記モジュールは、前記ケーパビリティにより順序付けられたコアセットのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記ケーパビリティにより順序付けられたコアセットのうち選択された１つ又は複数のものにおける実行のために、前記複数の実行スレッド又は仮想マシンをスケジューリングする
ことを特徴とする請求項５に記載の装置。
【請求項７】
前記モジュールは、前記複数の実行スレッドの特徴を学習する
ことを特徴とする請求項１に記載の装置。
【請求項８】
前記モジュールは、より高い能力のコア又はコアセットにおける実行に関し、実行時間閾値を超える予想実行時間にわたってフォアグラウンドで動作する実行スレッドをスケジューリングする
ことを特徴とする請求項７に記載の装置。
【請求項９】
前記モジュールは、より高い能力のコア又はコアセットにおける実行に関し、優先度閾値を超える優先度を有する実行スレッドをスケジューリングする
ことを特徴とする請求項７に記載の装置。
【請求項１０】
前記モジュールは、より高い能力のコア又はコアセットにおいて、プリフェッチ閾値を超える回数のプリフェッチを実行する実行スレッドをスケジューリングする
ことを特徴とする請求項７に記載の装置。
【請求項１１】
前記実行スレッドの特徴を更に学習すると、前記モジュールは、前記コアのケーパビリティと前記複数の実行スレッドの特徴とに少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする請求項７ないし１０のうち何れか一項に記載の装置。
【請求項１２】
１つ以上のコアのうちの１つ以上のケーパビリティに対する１つ以上の更新を受信すると、前記モジュールは、前記コアの更新されたケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする請求項１ないし１０のうちの何れか一項に記載の装置。
【請求項１３】
コンピューティングのための方法であって：
オペレーティングシステムのスケジューラ又はコンピューティングデバイスの仮想マシンモニタであるモジュールが、前記コンピューティングデバイスの１つ以上のマルチコアプロセッサの複数のコアのケーパビリティを取得又は受信するステップであって、前記複数のコアは異なるケーパビリティを有する、ステップ；
前記モジュールが前記スケジューラである場合に、前記スケジューラが、複数の実行スレッドの特徴及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された１つ又は複数のものにおいて実行するための複数の実行スレッドをスケジューリングするステップ；及び
前記モジュールが前記仮想マシンモニタである場合に、前記仮想マシンモニタが、前記仮想マシンの優先度及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された１つ又は複数のものにおける実行のための前記コンピューティングデバイスの複数の仮想マシンをスケジューリングするステップ；
を有し、前記モジュールは、前記コアのケーパビリティに少なくとも部分的に基づいて、ケーパビリティにより順序付けられたコアセットを１つ以上形成する
ことを特徴とする方法。
【請求項１４】
前記モジュールが、前記コンピューティングデバイスのスタートアップ時又はリセット時に、前記コアのケーパビリティが取り出されるように利用可能であるか否かを判断し、前記コアのケーパビリティは取り出されるように利用可能である旨の判断に応じて取得を実行するステップ；及び
前記コアのケーパビリティを取得すると、前記コアのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングを実行するステップ；
を更に有することを特徴とする請求項１３に記載の方法。
【請求項１５】
前記コアのケーパビリティが利用可能であるか否かの判断が、前記１つ以上のマルチコアプロセッサの個々のプロセッサ識別子を検査することを含む
ことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記コアのケーパビリティを取得することが、前記コアの各自のレジスタから取得することを含む
ことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記コアのケーパビリティを取得すると、前記モジュールが、ｎ個のコアに対してｎ個のコアセットを形成するステップを更に有し、ｋ番目のコアセットは、ケーパビリティの高い順にｋ個のコアを含むように形成され、ｋは１以上ｎ以下の自然数である
ことを特徴とする請求項１３に記載の方法。
【請求項１８】
ケーパビリティにより順序付けられたコアセットを１つ以上形成した場合において、前記のスケジューリングは、前記ケーパビリティにより順序付けられたコアセットのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記ケーパビリティにより順序付けられたコアセットのうち選択された１つ又は複数のものにおける実行のために、前記複数の実行スレッド又は仮想マシンをスケジューリングすることを含む
ことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記モジュールが、前記複数の実行スレッドの特徴を学習するステップ
を更に有することを特徴とする請求項１３に記載の方法。
【請求項２０】
前記のスケジューリングは、前記モジュールが、より高い能力のコア又はコアセットにおける実行に関し、（ｉ）実行時間閾値を超える予想実行時間にわたってフォアグラウンドで動作する実行スレッド、（ｉｉ）優先度閾値を超える優先度を有する実行スレッド、又は（ｉｉｉ）プリフェッチ閾値を超える回数のプリフェッチを実行する実行スレッドをスケジューリングすることを含む
ことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記実行スレッドの特徴を更に学習した場合において、前記のスケジューリングが、前記コアのケーパビリティと前記複数の実行スレッドの特徴とに少なくとも部分的に基づいて、スケジューリングすることを含む
ことを特徴とする請求項１９に記載の方法。
【請求項２２】
１つ以上のコアのうちの１つ以上のケーパビリティに対する１つ以上の更新を受信した場合において、前記のスケジューリングが、前記コアの更新されたケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングすることを含む
ことを特徴とする請求項１３に記載の方法。
【請求項２３】
請求項１３ないし２２のうちの何れか一項に記載の方法を、装置のコンピュータに実行させるコンピュータプログラム。
【請求項２４】
請求項２３に記載のコンピュータプログラムを保存する記憶媒体。
【請求項２５】
コンピューティングのための装置であって：
前記装置の１つ以上のマルチコアプロセッサの複数のコアのケーパビリティを取得する第１手段であって、前記複数のコアは異なるケーパビリティを有する、第１手段；及び
第２手段又は第３手段であるモジュール；
を有し、前記モジュールが前記第２手段である場合、前記第２手段は、複数の実行スレッドの特徴及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された１つ又は複数のものにおいて実行するための前記装置の複数の実行スレッドをスケジューリングし；及び
前記モジュールが前記第３手段である場合、前記第３手段は、仮想マシンの優先度及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された１つ又は複数のものにおいて実行するための前記装置の複数の仮想マシンをスケジューリングし；
前記モジュールは、前記コアのケーパビリティに少なくとも部分的に基づいて、ケーパビリティにより順序付けられたコアセットを１つ以上形成する、ことを特徴とする装置。
【請求項２６】
前記モジュールは、ｎ個のコアに対してｎ個のコアセットを形成し、ｋ番目のコアセットは、ケーパビリティの高い順にｋ個のコアを含むように形成され、ｋは１以上ｎ以下の自然数である
ことを特徴とする請求項２５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はコンピュータの技術分野に関連する。より具体的には、本開示は、様々なケーパビリティを有するコアに関するスレッド及び/又は仮想マシンスケジューリング方法及び装置に関連する。
【背景技術】
【０００２】
本願に記載される背景技術は、本願の内容を一般的に説明するためのものである。本願では別段の言及がない限り、この欄に記載される事項は、本願の特許請求の範囲に対する従来技術ではなく、この欄に包含されることをもって従来技術であると自認したわけでもない。
【０００３】
インダイバリエーション(In-Die  Variation：IDV)は、本来的に、(例えば、より高いパフォーマンス或いはより低い電圧等のような)他よりも優れる幾つかのコアを有するマルチコアプロセッサを製造する。それら本来のケーパビリティ(capability)によるそれらのコアの列挙及び利用は、実現する及び市場に出すことが可能な高いターボパフォーマンス(turbo  performance)を提供する。インテルx64マルチコアプロセッサ(登録商標)等のような或る種のマルチコアプロセッサは、標準の周波数レンジより高い周波数で動作することが可能なコアを識別する。x64マルチコアプロセッサの場合、これら識別されるハイパフォーマンスコアは、「好ましいコア」(Favored  Cores)と呼ばれ、そのハードウェア的な特徴は、ACT(Asymmetric  Core  Turbo)と呼ばれる。
【０００４】
既存のオペレーティングシステム(OS)のソフトウェアは、様々なコアのケーパビリティを実行する際に、この黙示的な異種性(implicit  heterogeneity)に気付かない。従って、その特徴を活用するために、システムアドミニストレータは、重要な、パフォーマンスの影響を受ける、或いは、高優先度の実行スレッドをマニュアルで識別するために、ホワイトリストを使用しなければならず、そして、ドライバを利用して、ホワイトリスト中のスレッドと「好ましいコア」との間にアフィニティ(affinity)を設定する。
【０００５】
主な欠点は、アドミニストレータが、様々な状況/ワークロードに関するホワイトリストを維持しなければならず、しかもホワイトリストは全くスケーラブルなソリューションではない。また、しばしばユーザーアプリケーションは(ホワイトリストに含まれていない)他のワークロードに関して「好ましいコア」とのアフィニティを設定し、このことはパフォーマンスに悪影響を及ぼしかねない。
【図面の簡単な説明】
【０００６】
実施形態は、添付図面に関連する以下の詳細な説明により更に容易に理解される。明細書の説明を促すために、同様な参照番号は同様な構造要素を示している。実施形態は例示として示されており、添付図面の表現には限定されない。
【図１】本開示のスレッドスケジューリングテクノロジを有する様々な実施形態によるコンピューティングデバイス例を示す図。
【図２】実行スレッドをスケジューリングする様々な実施形態によるプロセス例を示す図。
【図３】様々な実施形態によるプロセッサ識別及びケーパビリティランク付けコアセットの概念を説明するための図。
【図４】スレッド特徴及びコア又はコアセットケーパビリティに基づいてスレッドの実行をスケジューリングするための様々な実施形態によるプロセス例を示す図。
【図５】本開示の仮想マシンスケジューリングテクノロジを有する様々な実施形態によるコンピューティングデバイス例を示す図。
【図６】仮想マシンをスケジューリングするための様々な実施形態によるプロセス例を示す図。
【図７】様々な実施形態による本開示の一形態の実現に使用することに適したコンピューティングシステム例を示す図。
【図８】様々な実施形態による図2ないし4及び6に関して説明される方法を実現するための命令を有する記憶媒体を示す図。
【発明を実施するための形態】
【０００７】
仮想マシン及び/又はスレッドのスケジューリングに関連する装置、方法及び記憶媒体が本願で開示される。一実施形態において、装置は1つ又は複数のマルチコアプロセッサを含み、その各々は様々なケーパビリティ(capability)の複数のコアを有する。更に、装置は、オペレーティングシステムのスケジューラ及び/又は仮想マシンモニタを備える。スケジューラは、コアのケーパビリティを取得又は受信し、複数の実行スレッドの特徴(characteristic)及びコアのケーパビリティに少なくとも部分的に基づいて、コアのうち選択された1つ又は複数のものにおいて実行するための、装置の複数の実行スレッドをスケジューリングするように構成される。仮想マシンモニタは、コアのケーパビリティを取得又は受信し、仮想マシンの各自の優先度及びコアのケーパビリティに少なくとも部分的に基づいて、コアのうち選択された1つ又は複数のものにおいて実行するための、装置の複数の仮想マシンをスケジューリングするように構成される。
【０００８】
以下の詳細な説明では本願の一部を為す添付図面が参照され、図中、同様な番号は同様な部分を示し、図面は実施される形態を例示的に示す。本開示の範囲から逸脱することなく、他の実施形態が使用されてもよく、構造的又は論理的な変更がなされてよいことが、理解されるべきである。すなわち、以下の詳細な説明は限定的な意味にとられるべきではなく、実施形態の範囲は添付の特許請求の範囲及び均等物によって規定される。
【０００９】
本開示の実施形態は付随する説明により開示される。本開示の精神又は範囲から逸脱することなく、本開示の代替的な実施形態及びそれらの均等物ももたらされる。以下に開示される同様な要素は、図中、同様な参照番号で指定されることに留意すべきである。
【００１０】
様々な動作が、請求項に係る事項を理解するのに最も有用な方法で、複数の別個のアクション又はオペレーションとして説明される。しかしながら、説明の順序は、それらのオペレーションが依存する必須の順序を示唆するように解釈されるべきではない。特に、これらのオペレーションは、説明の順序で実行されなくてもよい。説明されるオペレーションは、説明された実施形態とは異なる順序で実行されてもよい。様々な追加的なオペレーションが実行されてもよく、及び/又は、説明されたオペレーションが別の実施形態では省略されてもよい。
【００１１】
本開示の目的に関し、「A及び/又はB」という言い回しは、(A)，(B)又は(A及びB)を意味する。本開示の目的に関し、「A，B及び/又はC」という言い回しは、(A)，(B)，(C)，(A及びB)，(A及びC)，(B及びC)又は(A，B及びC)を意味する。
【００１２】
本説明は「一実施形態において」又は「実施例では」等の言い回しを使用しており、これら各々は1つ以上の同一又は相違する実施形態を指してよい。更に、本開示の実施形態に関連して使用される「構成される」、「含む」、「有する」等の用語は同義語である。
【００１３】
本願で使用されるように、「コア」という用語は、マルチコアプロセッサのプロセッサコアを指す。「モジュール」という用語は、特定よと向け集積回路(ASIC)、電子回路、1つ以上のソフトウェア又はファームウェアプログラムを実行するプロセッサ(共有されるもの、専用のもの、又はグループ的なものであってよい)及び/又はメモリ(共有されるもの、専用のもの、又はグループ的なものであってよい)、組み合わせ論理回路、及び/又は、説明される機能を提供する他の適切なコンポーネントを指してもよいし、それらの一部であってもよいし、或いは、それらを包含してもよい。
【００１４】
図1を参照すると、本開示のスレッド及び/又は仮想マシンスケジューリングテクノロジを有する様々な実施形態によるコンピューティングデバイスが示されている。図示されるように、一実施形態では、コンピューティングデバイス100は、ハードウェア101と、ファームウェア(FW)/ベーシック入力/出力サービス(BIOS)106と、OS112と、アプリケーション114とを有し、それらは図示されているように動作可能に互いに結合される。ハードウェア101は1つ又は複数のマルチコアプロセッサ102を含み、それら各々は、あるものは他のものより優れているダイバース(diverse)ケーパビリティの複数のコアを有する。コアケーパビリティの具体例は、最大動作周波数及び/又は電圧などを含んでもよいが、これらに限定されない。OS112は複数のサービス及びユーティリティ130を含んでよい。アプリケーション114及び/又はOS112は1つ以上の実行スレッドを有していてもよい(「実行スレッド」は、単に、「スレッド」のように言及されてもよい)。サービス及びユーティリティ130は、メモリ管理、入力/出力(I/O)デバイス等のようなサービス/ユーティリティを含んでよい。特に、サービス及びユーティリティ130はスケジューラ128を含み、スケジューラ128は、マルチコアプロセッサ102のコアのうちの選択されたものにおけるアプリケーション114及びOS112の実行スレッドの実行をスケジューリングするように構成される。以下において詳細に説明されるように、スケジューラ128は、本開示の実行スレッドスケジューリングテクノロジとともに構成され、実行スレッドの特徴とコアのケーパビリティとに少なくとも部分的に基づいて、マルチコアプロセッサ102のコアのうちの選択された1つ又は複数のものにおける実行スレッドの実行をスケジューリングする。実行スレッドの特徴の具体例は、(i)スレッドがフォアグラウンド又はバックグラウンドで実行されるべきか否か或いは指定された優先度などのような静的な特徴、及び(ii)スレッドが、実行時間閾値を超える長期的スレッドであるか否か、プリフェッチ閾値を超える多数のプリフェッチを伴うスレッドであるか否か等のような動的な特徴を含むが、これらに限定されない。一実施形態では、スケジューラ128は、コアセットのケーパビリティと実行スレッドの特徴とに少なくとも部分的に基づいて、マルチコアプロセッサ102のコアのうちの選択された1つ又は複数のセット(各セットが1つ以上のコアを有する)における実行スレッドの実行をスケジューリングするように構成される。その結果、システムアドミニストレータの介在無しに、例えばより重要な、より決定的に重大な、よりパフォーマンスの影響を受けやすい、或いは、より演算負担の重い実行スレッドのような所定の実行スレッドが、より能力の高いコア又はコアセットで実行されるように自動的にスケジューリングされる。コアケーパビリティに基づく実行スレッドスケジューリングに関連するこれら及び他の側面は、図2ないし4に関連して更に説明される。
【００１５】
高い能力を有するコアを利用することを除いて、マルチコアプロセッサ102は、当該技術分野で既知の多数のマルチコアプロセッサの任意の何れかであってもよい。一実施形態において、ハードウェア101は、メモリ104、I/Oデバイス108又は他の要素(図示せず)を更に含んでもよい。メモリ104はデータを保存するのに相応しい当該技術分野における何らかの既知の揮発性又は不揮発性メモリであってよい。メモリ104はキャッシュメモリ及びシステムメモリの階層を含んでもよい。キャッシュ及びシステムメモリは、それぞれキャッシュページ及びメモリページに組織されてよい。I/Oデバイス108の具体例は、(i)イーサーネット(登録商標)、WiFi、3G/4G、ブルートゥース(登録商標)、近距離無線通信(NFC)、ユニバーサルシリアルバス(USB)等のような通信又はネットワーキングインターフェース、(ii)ソリッドステート、磁気的及び/又は光学的なデバイス等のようなストレージデバイス、(iii)キーボード、マウス、タッチ検出スクリーン等のような入力デバイス、及び(iv)表示装置、プリンタ等のような出力デバイスを含んでよい。
【００１６】
FW/BIOS106は当該技術分野で知られている多くの任意のFW/BIOSであってよい。スケジューラ128が本開示による実行スレッドスケジューリングに基づくコアケーパビリティ及びスレッド特徴を備えていることを除いて、OS112は、例えばマイクロソフト(登録商標)コーポレーションによるウィンドウズOS(登録商標)等のような当該技術分野で既知の多くの任意のOSと同様であってよい。同様に、アプリケーション114は当該技術分野で既知の多くの任意のアプリケーションであってよい。
【００１７】
図2を参照すると、様々な実施形態によるスレッドをスケジューリングするためのプロセス例が示されている。図示されるように、実行スレッドのスケジューリングに基づくコアケーパビリティ及び/又はスレッド特徴に関するプロセスは、ブロック202-216で実行されるオペレーションを含んでよい。ブロック202-216におけるオペレーションは、例えば図1のスケジューラ128により実行されてもよい(図1では、マルチコアプロセッサ102の1つ以上のプロセッサコアにより実行される)。
【００１８】
プロセス200はブロック202において始まる。ブロック202では、コアケーパビリティ情報が利用可能であるか否かについての判断が為される。スケジューラ128により実行される場合、その判断は、例えばスケジューラ128のスタートアップ時になされてもよい。一実施形態において、その判断は、マルチコアプロセッサの身元(又は識別子)にアクセスすることにより為されてもよく、その身元はコアケーパビリティ情報が例えば各自のプロセッサコアから利用可能であるか否かを黙示的に伝達してもよい。
【００１９】
図3を参照しながら、実施形態によるプロセッサ識別及びケーパビリティランク付けコアセットの概念が説明される。図示されるように、マルチコアプロセッサ102はn個のコア302a-302nを含む。更に、マルチコアプロセッサ102は、例えばCPUIDのような識別子とともに構成されてもよい。一実施形態において、識別子は、様々なコア302a-302nについてのコアケーパビリティ情報(例えば、周波数、電圧など)が利用可能であるか否かを、スケジューラ128に情報提供する。一実施形態では、様々なコア302a-302nのコアケーパビリティ情報は、それぞれ、例えば様々なコア302a-302nのモデル固有レジスタ(model  specific  register：MSR)のような指定された制御レジスタ306に保存されてもよい。
【００２０】
図2に戻り、コアケーパビリティ情報が利用可能であることが判断されると、プロセス200はブロック204に進む。ブロック204では、個々のコアケーパビリティが様々なコアから読み取られ及び取り込まれる(例えば、図3の例の場合、それぞれの制御レジスタ306から取得される)。一実施形態において、個々のコアケーパビリティの取得の際に、コアは、各自のケーパビリティにより論理的にランク付けされ、各自のランキングにより識別されてもよい。更に、ケーパビリティによりランク付けされ及び識別されたコアは、ケーパビリティでランク付けされ且つ識別されたコア(ケーパビリティランク付け識別コア)(capability  ranked  and  identified  cores)は、ケーパビリティランク付けコアセットに論理的に更に組織化され、各々のコアセットは1つ以上のケーパビリティでランク付けされたコアを有する。
【００２１】
図3を再び参照すると、図示されているように、コアは各自のケーパビリティに従ってコア1，コア2，...コアn(302a-302n)のように論理的にランキングされ、順序付けられ及び識別される。説明される実施形態に関し、様々なコア302a-302nのうちコア1(302a)が最も能力が高く、コア2(302b)は次に能力が高く、…以下同様である。そこで、コアセット1(304a)はコア1(302a)とともに論理的に形成され；コアセット2(304b)はコア1(302a)及びコア2(302b)とともに論理的に形成され；...最終的に、コアセットn(304n)はn個全てのコア302a-302nとともに論理的に形成される。従って、コアセット1(304a)は唯1つの最も能力の高いコアを含み、コアセット2(304b)は能力が高い上位2つのコアを含み、以下同様である。
【００２２】
再び図2を参照して説明すると、ブロック204からプロセス200は、スケジューリングブランチ及び学習ブランチという2つの並列的な分岐に分かれ、それぞれブロック206及び212に進む。スケジューリングブランチでは、ブロック206において、スケジューリングを必要とする少なくとも1つのスレッドの存否が判定される。全てのスレッドがスケジューリングされる場合、プロセス200のスケジューリグブランチはブロック206において、スケジューリングされるべき少なくとも1つのスレッドが存在する限りループする。スケジューリングされるべき少なくとも1つのスレッドが存在することが確認されると、プロセス200はブロック208に進む。ブロック208では、必要に応じて、スケジューリングされる次の実行スレッドの既に学習済みの特徴(characteristic)が取得される。スケジューリングされる実行スレッドの学習済みの特徴は、例えば、スケジューラ128に関連する永続的なデータ構造等のような永続的なデータ構造、又は、スレッドのコントロールセクションに保存されてもよい。
【００２３】
次に、ブロック210において、コアのケーパビリティ及び/又はスレッド特徴に少なくとも部分的に基づいて、選択される個々のコア又はコアセットにおける実行のためにスレッドがスケジューリングされる。ブロック210におけるオペレーションの例示的な形態は図4に関連して更に説明される。その後、プロセス200のスケジューリングブランチはブロック206に戻り、上述したような処理を続ける。ブロック206-210でのオペレーションは、システム100が動作している限り、反復されてもよい。
【００２４】
学習ブランチの場合、ブロック212において、実行しているスレッドの有無が判断される。実行しているスレッドが無い場合、プロセス200の学習ブランチは、実行している少なくとも1つのスレッドが存在するようになるまで、ブロック212でループしてもよい。実行している少なくとも1つのスレッドの存在が確認されると、プロセス200の学習ブランチはブロック214に進む。214では、実行しているスレッドの動的な特徴(例えば、動作時間(又はランニングタイム)、プリフェッチ数などであるが、これらに限定されない)が学習され及び更新される。その後、プロセス200の学習ブランチはブロック212に戻り、上述したような処理を続ける。ブロック212-214でのオペレーションは、システム100が動作している限り、反復されてもよい。
【００２５】
一実施形態において、コアのケーパビリティ又は1つ以上のコアのケーパビリティ(例えば、周波数又は電圧など)は、動作中にシステムアドミニストレータにより再設定/調整されるかもしれない。これらの実施形態では、更新されたコアのケーパビリティは、例えば通知(例えばインタラプト等)によりスケジューラに提供されてもよい。それを受信すると、必要に応じて、ケーパビリティに基づいて順序付けられるコアセットが、再形成されてもよい。その後、プロセス200のスケジューリングブランチは、更新されたコアケーパビリティを利用して、上述したように処理される。
【００２６】
ブロック202において、判定結果が、コアケーパビリティ情報は利用可能でないことを示す場合、プロセス200はブロック216に進む。ブロック216では、スレッドの実行のスケジューリングは、コアのケーパビリティ及び/又はスレッドの特徴を考慮せずに、従来通りに進んでもよい。ブロック216におけるオペレーションは、システム100が動作している限り、反復されてもよい。
【００２７】
図4を参照すると、コアのケーパビリティ及び/又はスレッドの特徴に少なくとも部分的に基づいてスレッドの実行をスケジューリングする様々な実施形態に関するプロセス例が示されている。図示されるように、コアのケーパビリティ及び/又はスレッドの特徴に少なくとも部分的に基づいてスレッドの実行をスケジューリングするプロセス400は、ブロック402-414で実行されるオペレーションを含む。ブロック402-414におけるオペレーションは、例えば図1のスケジューラ128により実行される(図1では、マルチコアプロセッサ102の1つ以上のコアにより実行される)。
【００２８】
プロセス400はブロック402において始まる。ブロック402では、実行スレッドがフォアグラウンド、長期間スレッド(long  running  thread)又は双方で実行されるべきか否かの判断が為される。一実施形態では、長期間スレッドであると考えられるべきスレッドのためのランニングタイム閾値は、デフォルトで設定されていてもよいし、或いは、アドミニストレータにより設定されてもよい。実行スレッドはフォアグラウンド及び/又は長期間スレッドで実行されるべき旨の判断に応じて、プロセス400はブロック404に進み、より能力の高いコアで実行されるようにスレッドをスケジューリングする。指定されるコアのケーパビリティレベルは、1つ以上のデフォルト設定のオペレーションポリシーに従ってもよいし、或いは、システムアドミニストレータによりカスタマイズされてもよい。スケジューリングが為されると、プロセスは、スケジューリングされるべき次のスレッドのためにブロック402に戻る。
【００２９】
ブロック402における判定結果が否定的であった場合、プロセス400はブロック406に進む。ブロック406では、(例えば、OSにより)スレッドが高い優先度に指定されているか否かの判断が為される。一実施形態では、高い優先度に指定されていると考えられるべきスレッドのための優先度閾値は、上記の閾値と同様に、デフォルト設定の閾値でも良いし、或いは、アドミニストレータにより設定されてもよい。実行スレッドは高優先度のスレッドである旨の判断に応じて、プロセス400はブロック408に進み、より能力の高いコアでの実現に備えてそのスレッドをスケジューリングする。上記と同様に、指定されるコアのケーパビリティレベルは、1つ以上のデフォルト設定のオペレーションポリシーに従ってもよいし、或いは、システムアドミニストレータによりカスタマイズされてもよい。スケジューリングが為されると、プロセス400は、スケジューリングされるべき次のスレッドのためにブロック402に戻る。
【００３０】
ブロック406における判定結果が否定的であった場合、プロセス400はブロック410に進む。ブロック410では、実行中に、スレッドが、プリフェッチ閾値を超える回数のプリフェッチを実行するか否かの判断が為される。実行中に、実行スレッドが、プリフェッチ閾値を超える回数のプリフェッチを実行する旨の判断がなされると、プロセス400はブロック412に進み、より能力の高いコアで実行されるようにスレッドをスケジューリングする。指定されるコアのケーパビリティレベルは、1つ以上のデフォルト設定のオペレーションポリシーに従ってもよいし、或いは、システムアドミニストレータによりカスタマイズされてもよい。スケジューリングが為されると、プロセス400は、スケジューリングされるべき次のスレッドのためにブロック402に戻る。
【００３１】
ブロック410における判定結果が否定的であった場合、プロセス400はブロック414に進む。ブロック414では、スレッドは、その特徴を考慮することなく、すなわち、コア又はコアセットのケーパビリティ及び/又は利用可能性を考慮することなく、実行するスレッドがスケジューリングされる。スケジューリングが為されると、プロセス400は、スケジューリングされるべき次のスレッドのためにブロック402に戻る。
【００３２】
図4は、より能力の高いコアでの実行に関し、スケジューリングされるべき3種類のスレッドを説明しているが、代替実施形態では、より多くの又はより少ない種類のスレッドが、より高い能力のコアでの実行に関してスケジューリングされてよい。
【００３３】
このように図1ないし4を参照しながら、本来の実行環境に関してスレッド特徴及び/又はコアのケーパビリティに少なくとも部分的に基づくスレッドスケジューリングに関する装置、方法及び記憶媒体が、説明されている。
【００３４】
図5を参照すると、本開示の仮想マシンスケジューリングテクノロジを備える様々な実施形態による例示的なコンピューティングデバイスが、示されている。図示されるように、コンピューティングデバイス100と同様に、コンピューティングデバイス500は、ハードウェア101(マルチコアプロセッサ102、メモリ104、I/Oデバイス108を有する)と、FW/BIOS106とを含む。更に、コンピューティングデバイス500は、アプリケーション114及びOS112(システム及びユーティリティ130を有する)も含む。しかしながら、様々なアプリケーション114及びOS112は様々な仮想マシン504の中に位置し、それら各々は1つ以上の仮想プロセッサ506を有し、プロセッサのコア102のうち選択されたものにおける実行のためにスケジューリングされる。更に、コンピューティングデバイス500は仮想マシンモニタ(VMM)502とともに構成され、VMM502は仮想マシン504のオペレーションを監視及び管理する。VMM502は、従来の機能を実行するように構成されてもよく、その機能は、例えば、プロセッサ102のコアのうち選択されたものに仮想プロセッサ506をマッピングし、VM504の仮想メモリをメモリ104にマッピングすること等を含むが、これらに限定されない。一実施形態では、VMM502は、本開示の仮想マシンスケジューリングテクノロジとともに構成され、仮想マシン504の優先度及びコアのケーパビリティに少なくとも部分的に基づいて、プロセッサ102のプロセッサコアのうち選択されたものにおける実行に関し、仮想マシンをスケジューリングする。
【００３５】
図6を参照すると、実行のための仮想マシンをスケジューリングする様々な実施形態によるプロセス例が示されている。図示されるように、コアケーパビリティに基づく仮想マシンのスケジューリングのためのプロセス600は、ブロック602-612で実行されるオペレーションを含む。ブロック602-612におけるオペレーションは、例えば図5のＶＭＭ502により実行される(図5では、マルチコアプロセッサ102のうちの1つ以上のコアにより実行される)。
【００３６】
プロセス600はブロック602において始まる。ブロック602において、コアのケーパビリティ情報が利用可能であるか否かの判断が為される。VMM502により実行される場合、その判断は例えばVMM502のスタートアップ時になされてもよい。一実施形態では、その判断はマルチコアプロセッサの識別子にアクセスすることにより為されてもよく、識別子は、コアのケーパビリティ情報が例えば個々のプロセッサコアから利用可能であるか否かを黙示的に伝達してもよい。一実施形態では、上述したようにVMM502は、マルチコアプロセッサのCPUIDを読み込み、コアのケーパビリティ情報が利用可能であるか否かをCPUIDから推定してもよい。
【００３７】
コアのケーパビリティ情報が利用可能である旨の判断が為されると、プロセス600はブロック604に進む。ブロック604では、個々のコアのケーパビリティが、様々なプロセッサコアから読み取られて取り込まれる(例えば、図3の実施形態では、上述したように、MSR等のような各自の制御レジスタ306から取得される)。一実施形態では、本来の実行に関する上記のスケジューラの実施形態と同様に、それぞれのコアケーパビリティを取得すると、プロセッサコアは、各自のケーパビリティにより論理的にランク付けされ、各自のランキングにより識別されてもよい。更に、ケーパビリティに基づいてランク付けされ識別されたコアは、ケーパビリティランク付けプロセッサコアセットに論理的に組織化され、各々のコアセットは1つ以上のコアを有する。
【００３８】
次に、ブロック606において、スケジューリングを要する少なくとも1つのVMの存否が判断される。全てのVMがスケジューリングされる場合、プロセス600は、スケジューリングされるべき少なくとも1つのVMが存在する限り、ブロック606でループする。スケジューリングされるべき少なくとも1つのVMが存在する旨の判断に応じて、プロセス600はブロック608に進む。ブロック608では、OSにより指定されるようなVMの優先度が取得される。一実施形態では、OSにより指定されるようなVMの優先度は、VMの各自のコントロールセクション、或いは、OSに関連付けられる永続的な制御データ構造に保存されてもよい。
【００３９】
次に、ブロック610において、VMは、VMの優先度及び/又はコアのケーパビリティに少なくとも部分的に基づいて、選択される個々のコア又はコアセットにおける実行に関してスケジューリングされる。その後、プロセス600はブロック606に戻り、上述のような処理を続ける。ブロック606-610におけるオペレーションは、システム100が動作している限り、反復されてもよい。
【００４０】
一実施形態では、コアのケーパビリティ又は1つ以上のコアのケーパビリティ(例えば、周波数又は電圧など)は、動作中にシステムアドミニストレータにより再設定/調整されてもよい。これらの実施形態に関し、例えば通知(例えば、インタラプト)により、更新されたコアケーパビリティがVMMに提供されてもよい。それを受信すると、必要に応じて、ケーパビリティで順序付けられるコアセットが再構築されてもよい。その後、プロセス600は、更新されたコアケーパビリティを利用して上述したように進行してもよい。
【００４１】
ブロック602において、判定結果が、コアケーパビリティは利用可能でないことを示す場合、プロセス600はブロック612に進む。ブロック612では、VMの実行のスケジューリングは、コアのケーパビリティ及び/又はVMの優先度を考慮せずに、従来通りに進んでもよい。ブロック612におけるオペレーションは、システム100が動作している限り、反復されてもよい。
【００４２】
このように図5ないし6を参照しながら、仮想化された実行環境に関し、コアケーパビリティに基づくVMスケジューリングに関する装置、方法及び記憶媒体が、説明されている。
【００４３】
図7は本開示のうち選択された形態の実施に使用するのに適したコンピューティングデバイス例を示す。図示されるように、コンピューティングデバイス700は、1つ以上のプロセッサ又はプロセッサコア702と、リードオンリメモリ(ROM)703と、システムメモリ704とを含んでよい。更に、コンピューティングデバイス700は大容量ストレージデバイス706を含む。大容量ストレージデバイス706の具体例は、限定ではないが、テープドライブ、ハードドライブ、コンパクトディスクリードオンリメモリ(CD-ROM)等を含んでよい。更に、コンピュータデバイス700は、入力/出力デバイス708(例えば、ディスプレイ、キーボード、カーソルコントロール等)及び通信インターフェース710(ネットワークインターフェースカード、モデム等)を含んでもよい。これらの要素はシステムバス712を介して互いに結合され、システムバス712は1つ以上のバスを表現する。複数のバスが存在する場合、それらは1つ以上のバスブリッジ(図示せず)によりブリッジされる。
【００４４】
これらの要素各々は当該技術分野で知られる通常の機能を実行してもよい。特に、ROM703は、ベーシック入力/出力システムサービス(BIOS)705を含み、これは上述したようにスケジューラ128及び/又はVMM502を含む。システムメモリ704及び大容量ストレージデバイス706は、上述したように、(まとめて演算論理装置722と言及される)スケジューラ128及び/又はVMM502に関連するオペレーションを実現するプログラミング命令のワーキングコピー及び永続的なコピーを保存するために使用される。これら様々な要素は、例えば「C」のようなハイレベル言語又はプロセッサ702によりサポートされるアセンブラ命令によって実現されてもよく、ハイレベル言語はそのような命令にコンパイルされることが可能である。
【００４５】
これらの要素710-712の数、能力(ケーパビリティ)及び/又は容量(キャパシティ)は、コンピューティングデバイス700がモバイルデバイス(例えば、ウェラブルデバイス、スマートフォン、コンピュータタブレット、ラップトップ等)として使用されるか、或いは、静的なデバイス(例えば、デスクトップコンピュータ、サーバー、ゲームコンソール、セットトップボックス、インフォテインメント(infotainment)コンソール等)として使用されるか等に依存して異なってよい。その他の点に関しては、構成要素710-712は既知であり、従って更には説明しない。
【００４６】
当業者に認められるように、本開示は方法又はコンピュータプログラムプロダクトとして実現されてよい。従って、本開示は、上述したようにハードウェアに組み込まれることに加えて、完全にソフトウェアの形態(フェームウェア、常駐ソフトウェア、マイクロコード等を含む)、ソフトウェア及びハードウェアの形態を含む形態をとってもよい(これらは何れも一般的に「回路」、「モジュール」又は「システム」と言及されてよい)。更に、本開示は、媒体に組み込まれるコンピュータ利用可能なプログラムコードを有する何らかの有形の又は非一時的な媒体形式で実現されるコンピュータプログラムプロダクトの形態をとってもよい。
【００４７】
図8はコンピュータ読み取り可能な非一時的な記憶媒体の一例を示し、記憶媒体は命令の保存に使用することに適しており、命令は、装置による命令の実行に応じて、本開示のうち選択された形態を装置に実行させる。図示されるように、非一時的なコンピュータ読み取り可能な記憶媒体802は、複数のプログラミング命令704を含んでよい。プログラミング命令804は、プログラミング命令の実行に応じて、スケジューラ128及び/又はVMM502の実現を、例えばコンピューティングデバイス700のようなデバイスが実行できるように構成されてよい。代替的な実施形態では、プログラミング命令804は、複数のコンピュータ読み取り可能な非一時的な記憶媒体に配置されてもよい。更に別の実施形態では、プログラミング命令804は、信号のようなコンピュータ読み取り可能な一時的な記憶媒体802に配置されてもよい。
【００４８】
1つ以上のコンピュータ利用可能な又はコンピュータ読み取り可能な媒体の任意の組み合わせが利用されてよい。コンピュータ利用可能な又はコンピュータ読み取り可能な媒体は、限定ではないが、例えば、電子、磁気、光、電磁波、赤外線、半導体系、装置、デバイス、又は、伝送媒体などであってもよい。コンピュータ読み取り可能な媒体のより具体的な例(網羅的ではないリスト)は：1つ以上のワイヤを有する電気接続、携帯用コンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、イレーザブルプログラマブルリードオンリメモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、光ストレージデバイス、伝送媒体(例えば、インターネット又はイントラネットをサポートするもの)、或いは、磁気ストレージデバイス等を含む。コンピュータ利用可能な又はコンピュータ読み取り可能な媒体は、紙あるいはプログラムが印刷される他の適切な任意の媒体とすることさえ可能であることに留意を要し、その理由は、プログラムが例えば紙又は他の媒体の光学的なスキャニングにより電子的に取り込まれ、コンパイルされ、インタープリットされ、或いは、必要に応じて適切な方法で処理され、コンピュータメモリに保存されることが可能だからである。本明細書の文脈において、コンピュータ利用可能な又はコンピュータ読み取り可能な媒体は、命令実行システム、装置又はデバイスにより又はそれに関連して使用するプログラムを包含、保存、通信、伝搬、又は輸送することが可能な任意の媒体であってよい。コンピュータ利用可能な媒体は、ベースバンドで又は搬送波の一部として、そこに組み込まれるコンピュータプログラムを有する伝搬するデータ信号を含んでもよい。コンピュータ利用可能なプログラムコードは、限定ではないが、無線、有線、光ファイバケーブル、RF等を含む適切な任意の媒体を利用して送信されてよい。
【００４９】
本開示によるオペレーションを実行するためのコンピュータプログラムコードは、1つ又は複数のプログラミング言語の任意の組み合わせで書かれてよく、プログラミング言語は、例えば、Java（登録商標）、Smalltalk、C++等のようなオブジェクト指向プログラミング言語、「C」プログラミング言語又は同様なプログラミング言語のような通常のプロシジャのプログラミング言語を含む。プログラミングコードは、ユーザーのコンピュータで完全に、ユーザーのコンピュータで部分的に、スタンドアローンソフトウェアパッケージとして、ユーザーのコンピュータで部分的に及びリモートコンピュータで部分的に、或いは、リモートコンピュータ又はサーバーで完全に実行してもよい。後者の状況では、リモートコンピュータは、任意のタイプのネットワークを介してユーザーのコンピュータに接続され、ネットワークは例えばローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含み、接続は(例えばインターネットサービスプロバイダを利用するインターネットにより)外部コンピュータに対してなされてもよい。
【００５０】
本開示は、開示の実施形態に応じて、方法、装置(システム)及びコンピュータプログラムプロダクトについてのフローチャート表現及び/又はブロック図を参照しながら説明される。フローチャート表現及び/又はブロック図の各々、及び、フローチャート表現及び/又はブロック図におけるブロックの組み合わせは、コンピュータプログラム命令により実現可能であることが、理解されるであろう。これらのコンピュータプログラム命令は、汎用コンピュータ、特定目的のコンピュータ、又は、マシンを生成する他のプログラム可能なデータ処理装置のプロセッサに提供され、そのため、コンピュータ又は他のプログラム可能なデータ処理装置により実行される命令は、フローチャート及び/又はブロック図又はブロックで指定される機能/処理を実現する手段を構築する。
【００５１】
コンピュータプログラム命令は、コンピュータ読み取り可能な媒体に保存されてもよく、命令は、特定の方法機能するようにコンピュータ又は他のプログラム可能なデータ処理装置に指図することが可能であり、そのため、コンピュータ読み取り可能な媒体に保存される命令は、命令手段を含む製品をもたらし、その製品はフローチャート及び/又はブロック図又はブロックで指定される機能/処理を実現する。
【００５２】
コンピュータプログラム命令は、コンピュータ又は他のプログラム可能なデータ処理装置にロードされてもよく、一連の処理ステップがコンピュータ又は他のプログラム可能な装置で実行されることを引き起こし、コンピュータで実現されるプロセスを生じさせ、そのため、コンピュータ又は他のプログラム可能な装置で実行される命令は、フローチャート及び/又はブロック図又はブロックで指定される機能/処理を実現する手段を提供する。
【００５３】
図中のフローチャート及びブロック図は、本開示の様々な実施形態に従って、アーキテクチャ、機能、システムの可能な実現手段の動作、方法及びコンピュータプログラムプロダクトを示す。この点に関し、フローチャート又はブロック図における各ブロックは、モジュール、セグメント又はコード部分を表現し、特定の論理機能を実現するための1つ以上の実行可能な命令を含む。代替的な実現手段では、ブロックで示される機能は、図に示される順序以外で行われてよいことに留意を要する。例えば、連続的に示される2つのブロックは、包含される機能に依存して、事実上、実質的に同時に実行されてもよいし、或いは、そのブロックはしばしば逆の順序で実行されてもよい。ブロック図及び/又はフローチャート表現中の各ブロック、及び、ブロック図及び/又はフローチャート表現中のブロックの組み合わせは、指定された機能又は処理を実行する特定目的のハードウェアに基づくシステム、或いは、特定目的のハードウェア及びコンピュータ命令の組み合わせで実現されることが可能であることに留意を要する。
【００５４】
本願で使用される技術用語は、専ら特定の実施形態を説明するためのものであり、本開示を限定であるようには意図されていない。本願で使用されるように、「ある」(“a”,  “an”)及び「その」(the)のような形式の語は、明示的に別意の内容が示されていない限り、複数個の形式を包含するように意図される。「有する」及び「有している」という用語は、本明細書で使用される場合、言及される特徴、整数(integers)、ステップ、オペレーション、エレメント及び/又はコンポーネントを具体的に示していても、1つ以上の他の特徴、整数、ステップ、オペレーション、エレメント、コンポーネント及び/又はそれらのグループの存在又は追加を排除していないことが、更に理解されるであろう。
【００５５】
実施形態は、コンピュータプロセス、コンピューティングシステム、又は、製品(例えば、コンピュータ読み取り可能な媒体のコンピュータプログラムプロダクト)として実現されてもよい。コンピュータプログラムプロダクトは、コンピュータシステムにより読み取ることが可能であり、コンピュータプロセスを実行するためのコンピュータプログラム命令をエンコードするコンピュータ記憶媒体であってもよい。
【００５６】
特許請求の範囲における全ての手段又はステップ及び機能要素についての対応する構造、材料、処理及び均等物は、具体的に請求される構成要素以外の組み合わせにおける機能を実行するための、任意の構造、材料又は処理を包含するように意図されている。本開示の記述は、例示及び説明を目的として提示されており、網羅的であるようには意図されておらず、開示内容を開示された形式に限定するようにも意図されていない。本開示の目的及び精神から逸脱することなく、多くの修正及び変形が当業者に明らかであろう。実施形態は、開示の原理及び実用的用途を最良に説明するために、及び、想定される特定の利用に相応しいように様々な修正とともに実施形態の開示を、他の当業者が理解できるように、選択及び記述されている。
【００５７】
図7を再び参照すると、一実施形態に関し、少なくとも1つのプロセッサ702は、スケジューラ128及び/又はVMM502の一形態を有するメモリと一緒にパッケージ化されてもよい。一実施形態に関し、少なくとも1つのプロセッサ702は、システムインパッケージ(SiP)を形成するように、一形態のスケジューラ128及び/又はVMM502を有するメモリと一緒にパッケージ化されてもよい。一実施形態に関し、少なくとも1つのプロセッサ702は、一形態のスケジューラ128及び/又はVMM502を有するメモリと同じダイに統合されてもよい。一実施形態において、少なくとも1つのプロセッサ702は、システムオンチップ(SoC)を形成するように、一形態のスケジューラ128及び/又はVMM502を有するメモリと一緒にパッケージ化されてもよい。少なくとも一実施形態において、SoCはスマートフォン又はコンピューティングタブレットで使用されてもよいが、これらの例に限定されない。
【００５８】
以下、本開示による様々な実施形態を例示的に列挙するが、実施形態は以下のものに限定されない：
具体例1はコンピューティングのための装置であり、本装置は：
1つ又は複数のマルチコアプロセッサであって、その各々は様々なケーパビリティの複数のコアを有する、マルチコアプロセッサ；及び
オペレーティングシステムのスケジューラ又は仮想マシンモニタ；
を備え、前記スケジューラは、前記コアのケーパビリティを取得又は受信し、複数の実行スレッドの特徴及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおいて実行するための複数の実行スレッドをスケジューリングし；及び
前記仮想マシンモニタは、前記コアのケーパビリティを取得又は受信し、前記仮想マシンの各自の優先度及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおける実行のための前記装置の複数の仮想マシンをスケジューリングする；
ことを特徴とする装置である。
【００５９】
具体例2は具体例1の装置であって、
前記スケジューラ又は前記仮想マシンモニタは、前記装置のスタートアップ時又はリセット時に、前記コアのケーパビリティが取り出されるように利用可能であるか否かを判断し、前記コアのケーパビリティは取り出されるように利用可能である旨の判断に応じて取得を実行し、前記コアのケーパビリティを取得すると、前記コアのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングを実行する
ことを特徴とする装置である。
【００６０】
具体例3は具体例2の装置であって、
前記スケジューラ又は前記仮想マシンモニタが、前記1つ以上のマルチコアプロセッサの個々のプロセッサの識別子を検査することにより、前記コアのケーパビリティが利用可能であるか否かを判断する
ことを特徴とする装置である。
【００６１】
具体例4は具体例3の装置であって、
前記スケジューラ又は前記仮想マシンモニタは、前記コアのケーパビリティを、前記コアの各自のレジスタから取得する
ことを特徴とする装置である。
【００６２】
具体例5は具体例1の装置であって、
前記スケジューラ又は前記仮想マシンモニタは、前記コアのケーパビリティを取得すると、前記コアのケーパビリティに少なくとも部分的に基づいて、ケーパビリティにより順序付けられたコアセットを1つ以上形成する
ことを特徴とする装置である。
【００６３】
具体例6は具体例5の装置であって、
ケーパビリティにより順序付けられたコアセットを1つ以上形成すると、前記スケジューラ又は前記仮想マシンモニタは、前記ケーパビリティにより順序付けられたコアセットのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記ケーパビリティにより順序付けられたコアセットのうち選択された1つ又は複数のものにおける実行のために、前記複数の実行スレッド又は仮想マシンをスケジューリングする
ことを特徴とする装置である。
【００６４】
具体例7は具体例1の装置であって、
前記スケジューラが、前記複数の実行スレッドの特徴を学習する
ことを特徴とする装置である。
【００６５】
具体例8は具体例7の装置であって、
前記スケジューラは、より高い能力のコア又はコアセットにおける実行に関し、実行時間閾値を超える予想実行時間にわたってフォアグラウンドで動作する実行スレッドをスケジューリングする
ことを特徴とする装置である。
【００６６】
具体例9は具体例7の装置であって、
前記スケジューラは、より高い能力のコア又はコアセットにおける実行に関し、優先度閾値を超える優先度を有する実行スレッドをスケジューリングする
ことを特徴とする装置である。
【００６７】
具体例10は具体例7の装置であって、
前記スケジューラは、より高い能力のコア又はコアセットにおいて、プリフェッチ閾値を超える回数のプリフェッチを実行する実行スレッドをスケジューリングする
ことを特徴とする装置である。
【００６８】
具体例11は具体例7ないし10のうちの何れかの装置であって、
前記実行スレッドの特徴を更に学習すると、前記スケジューラは、前記コアの特徴と前記複数の実行スレッドの特徴についての更なる理解とに少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする装置である。
【００６９】
具体例12は具体例1ないし10のうちの何れかの装置であって、
1つ以上のコアのうちの1つ以上のケーパビリティに対する1つ以上の更新を受信すると、前記スケジューラ又は前記仮想マシンモニタは、前記コアの更新されたケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする装置である。
【００７０】
具体例13はコンピューティングのための方法であって：
オペレーティングシステムのスケジューラ又はコンピューティングデバイスの仮想マシンモニタが、前記コンピューティングシステムの1つ以上のマルチコアプロセッサの複数のコアのケーパビリティを取得又は受信するステップであって、前記複数のコアは異なるケーパビリティを有する、ステップ；及び
前記スケジューラが、複数の実行スレッドの特徴及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおいて実行するための複数の実行スレッドをスケジューリングするステップ；又は
前記仮想マシンモニタが、前記仮想マシンの優先度及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおける実行のための前記コンピューティングデバイスの複数の仮想マシンをスケジューリングするステップ；
を有することを特徴とする方法である。
【００７１】
具体例14は具体例13の方法であって、
前記スケジューラ又は前記仮想マシンモニタが、前記装置のスタートアップ時又はリセット時に、前記コアのケーパビリティが取り出されるように利用可能であるか否かを判断し、前記コアのケーパビリティは取り出されるように利用可能である旨の判断に応じて取得を実行するステップ；及び
前記コアのケーパビリティを取得すると、前記コアのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングを実行するステップ；
を更に有することを特徴とする方法である。
【００７２】
具体例15は具体例14の方法であって、
前記コアのケーパビリティが利用可能であるか否かの判断が、前記1つ以上のマルチコアプロセッサの個々のプロセッサの識別子を検査することを含む
ことを特徴とする方法である。
【００７３】
具体例16は具体例15の方法であって、前記コアのケーパビリティを取得することが、前記コアの各自のレジスタから取得することを含む
ことを特徴とする方法である。
【００７４】
具体例17は具体例13の方法であって、
前記コアのケーパビリティを取得すると、前記スケジューラ又は前記仮想マシンモニタが、前記コアのケーパビリティに少なくとも部分的に基づいて、ケーパビリティにより順序付けられたコアセットを1つ以上形成するステップ
を更に有することを特徴とする方法である。
【００７５】
具体例18は具体例17の方法であって、
ケーパビリティにより順序付けられたコアセットを1つ以上形成した場合において、前記のスケジューリングは、前記ケーパビリティにより順序付けられたコアセットのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記ケーパビリティにより順序付けられたコアセットのうち選択された1つ又は複数のものにおける実行のために、前記複数の実行スレッド又は仮想マシンをスケジューリングすることを含む
ことを特徴とする方法である。
【００７６】
具体例19は具体例13の方法であって、
前記スケジューラが、前記複数の実行スレッドの特徴を学習するステップ
を更に有することを特徴とする方法である。
【００７７】
具体例20は具体例19の方法であって、
前記のスケジューリングは、前記スケジューラが、より高い能力のコア又はコアセットにおける実行に関し、実行時間閾値を超える予想実行時間にわたってフォアグラウンドで動作する実行スレッドをスケジューリングすることを含む
ことを特徴とする方法である。
【００７８】
具体例21は具体例19の方法であって、
前記のスケジューリングは、前記スケジューラが、より高い能力のコア又はコアセットにおける実行に関し、優先度閾値を超える優先度を有する実行スレッドをスケジューリングすることを含む
ことを特徴とする方法である。
【００７９】
具体例22は具体例19の方法であって、
前記のスケジューリングは、前記スケジューラが、より高い能力のコア又はコアセットにおいて、プリフェッチ閾値を超える回数のプリフェッチを実行する実行スレッドをスケジューリングすることを含む
ことを特徴とする方法である。
【００８０】
具体例23は具体例19ないし22のうちの何れかの方法であって、
前記のスケジューリングは、前記実行スレッドの特徴を更に学習すると、前記コアの特徴と前記複数の実行スレッドの特徴についての更なる理解とに少なくとも部分的に基づいて、スケジューリングすることを含む
ことを特徴とする方法である。
【００８１】
具体例24は具体例13ないし22のうちの何れかの方法であって、
前記のスケジューリングは、1つ以上のコアのうちの1つ以上のケーパビリティに対する1つ以上の更新を受信すると、前記コアの更新されたケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングすることを含む
ことを特徴とする方法である。
【００８２】
具体例25は命令を有する1つ以上のコンピュータ読み取り可能な媒体であり、前記命令は、コンピューティングデバイスの1つ以上のマルチコアプロセッサの複数のコアのうち1つ以上による命令の実行に応じて、前記コンピューティングデバイスに：オペレーティングシステムのスケジューラ又は仮想マシンモニタを前記コンピューティングデバイスに提供することを行わせ、
前記複数のコアは異なるケーパビリティを有し；
前記スケジューラは、前記コアのケーパビリティを取得し、複数の実行スレッドの特徴及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおいて実行するための複数の実行スレッドをスケジューリングし；及び
前記仮想マシンモニタは、前記コアのケーパビリティを取得し、前記仮想マシンの各自の優先度及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおける実行のための前記装置の複数の仮想マシンをスケジューリングする；
ことを特徴とする媒体である。
【００８３】
具体例26は具体例25の媒体であって、
前記スケジューラ又は前記仮想マシンモニタは、前記コンピューティングデバイスのスタートアップ時又はリセット時に、前記コアのケーパビリティが取り出されるように利用可能であるか否かを判断し、前記コアのケーパビリティは取り出されるように利用可能である旨の判断に応じて取得を実行し、前記コアのケーパビリティを取得すると、前記コアのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングを実行する
ことを特徴とする媒体である。
【００８４】
具体例27は具体例26の媒体であって、
前記スケジューラ又は前記仮想マシンモニタが、前記1つ以上のマルチコアプロセッサの個々のプロセッサの識別子を検査することにより、前記コアのケーパビリティが利用可能であるか否かを判断する
ことを特徴とする媒体である。
【００８５】
具体例28は具体例27の媒体であって、
前記スケジューラ又は前記仮想マシンモニタは、前記コアのケーパビリティを、前記コアの各自のレジスタから取得する
ことを特徴とする媒体である。
【００８６】
具体例29は具体例25の媒体であって、
前記スケジューラ又は前記仮想マシンモニタは、前記コアのケーパビリティを取得すると、前記コアのケーパビリティに少なくとも部分的に基づいて、ケーパビリティにより順序付けられたコアセットを1つ以上形成する
ことを特徴とする媒体である。
【００８７】
具体例30は具体例29の媒体であって、
ケーパビリティにより順序付けられたコアセットを1つ以上形成すると、前記スケジューラ又は前記仮想マシンモニタは、前記ケーパビリティにより順序付けられたコアセットのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記ケーパビリティにより順序付けられたコアセットのうち選択された1つ又は複数のものにおける実行のために、前記複数の実行スレッド又は仮想マシンをスケジューリングする
ことを特徴とする媒体である。
【００８８】
具体例31は具体例25の媒体であって、
前記スケジューラが、前記複数の実行スレッドの特徴を学習する
ことを特徴とする媒体である。
【００８９】
具体例32は具体例31の媒体であって、
前記スケジューラは、より高い能力のコア又はコアセットにおける実行に関し、実行時間閾値を超える予想実行時間にわたってフォアグラウンドで動作する実行スレッドをスケジューリングする
ことを特徴とする媒体である。
【００９０】
具体例33は具体例31の媒体であって、
前記スケジューラは、より高い能力のコア又はコアセットにおける実行に関し、優先度閾値を超える優先度を有する実行スレッドをスケジューリングする
ことを特徴とする媒体である。
【００９１】
具体例34は具体例31の媒体であって、
前記スケジューラは、より高い能力のコア又はコアセットにおいて、プリフェッチ閾値を超える回数のプリフェッチを実行する実行スレッドをスケジューリングする
ことを特徴とする媒体である。
【００９２】
具体例35は具体例31ないし34のうちの何れかの媒体であって、
前記実行スレッドの特徴を更に学習すると、前記スケジューラは、前記コアの特徴と前記複数の実行スレッドの特徴についての更なる理解とに少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする媒体である。
【００９３】
具体例36は具体例25ないし34のうちの何れかの媒体であって、
1つ以上のコアのうちの1つ以上のケーパビリティに対する1つ以上の更新を受信すると、前記スケジューラ又は前記仮想マシンモニタは、前記コアの更新されたケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする媒体である。
【００９４】
具体例37はコンピューティングのための装置であり、本装置は：本装置の1つ以上のマルチコアプロセッサの複数のコアのケーパビリティを取得する第1手段であって、前記複数のコアは異なるケーパビリティを有する、第1手段；及び
複数の実行スレッドの特徴及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおいて実行するための前記装置の複数の実行スレッドをスケジューリングする第2手段；及び
前記仮想マシンの各自の優先度及び前記コアのケーパビリティに少なくとも部分的に基づいて、前記コアのうち選択された1つ又は複数のものにおいて実行するための前記装置の複数の仮想マシンをスケジューリングする第3手段；
を有することを特徴とする装置である。
【００９５】
具体例38は具体例37の装置であって、
前記第2又は第3手段は、前記装置のスタートアップ時又はリセット時に、前記コアのケーパビリティが取り出されるように利用可能であるか否かを判断し、前記コアのケーパビリティは取り出されるように利用可能である旨の判断に応じて取得を実行し、前記コアのケーパビリティを取得すると、前記コアのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、スケジューリングを実行する
ことを特徴とする装置である。
【００９６】
具体例39は具体例38の装置であって、
前記コアのケーパビリティが利用可能であるか否かを判断する手段が、前記1つ以上のマルチコアプロセッサの個々のプロセッサの識別子を検査する手段を有する
ことを特徴とする装置である。
【００９７】
具体例40は具体例39の装置であって、
前記第1手段は、前記コアの各自のレジスタから取り出す手段を有する
ことを特徴とする装置である。
【００９８】
具体例41は具体例37の装置であって、
前記第1手段は、前記コアのケーパビリティを取得すると、前記コアのケーパビリティに少なくとも部分的に基づいて、ケーパビリティにより順序付けられたコアセットを1つ以上形成する手段を有する
ことを特徴とする装置である。
【００９９】
具体例42は具体例41の装置であって、
前記第2又は第3手段は、ケーパビリティにより順序付けられたコアセットを1つ以上形成すると、前記ケーパビリティにより順序付けられたコアセットのケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記ケーパビリティにより順序付けられたコアセットのうち選択された1つ又は複数のものにおける実行のために、前記複数の実行スレッド又は仮想マシンをスケジューリングする
ことを特徴とする装置である。
【０１００】
具体例43は具体例37の装置であって、
前記第2手段が、前記複数の実行スレッドの特徴を学習する手段を有する
ことを特徴とする装置である。
【０１０１】
具体例44は具体例43の装置であって、
前記第2手段は、より高い能力のコア又はコアセットにおける実行に関し、実行時間閾値を超える予想実行時間にわたってフォアグラウンドで動作する実行スレッドをスケジューリングする
ことを特徴とする装置である。
【０１０２】
具体例45は具体例43の装置であって、
前記第2手段は、より高い能力のコア又はコアセットにおける実行に関し、優先度閾値を超える優先度を有する実行スレッドをスケジューリングする
ことを特徴とする装置である。
【０１０３】
具体例46は具体例43の装置であって、
前記第2手段は、より高い能力のコア又はコアセットにおいて、プリフェッチ閾値を超える回数のプリフェッチを実行する実行スレッドをスケジューリングする
ことを特徴とする装置である。
【０１０４】
具体例47は具体例43ないし46のうちの何れかの装置であって、
前記第2手段は、前記実行スレッドの特徴を更に学習すると、前記コアの特徴と前記複数の実行スレッドの特徴についての更なる理解とに少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする装置である。
【０１０５】
具体例48は具体例37ないし46のうちの何れかの装置であって、
前記第1又は第2手段は、1つ以上のコアのうちの1つ以上のケーパビリティに対する1つ以上の更新を受信すると、前記コアの更新されたケーパビリティ及び前記複数の実行スレッドの特徴又は前記仮想マシンの優先度に少なくとも部分的に基づいて、前記スケジューリングを実行する
ことを特徴とする装置である。
【０１０６】
本開示の精神及び目的から逸脱することなく、開示されるデバイス及び関連する方法についての開示される実施形態において、様々な修正及び変形が可能であることは、当業者に認められるであろう。修正及び変形が何れかの請求項の目的及びその均等物の範囲に属する仮定の下で、本開示は、開示される実施形態の修正及び変形をカバーしていることが、意図されている。
【図１】
0006370867.tif 000002
【図２】
0006370867.tif 000003
【図３】
0006370867.tif 000004
【図４】
0006370867.tif 000005
【図５】
0006370867.tif 000006
【図６】
0006370867.tif 000007
【図７】
0006370867.tif 000008
【図８】
0006370867.tif 000009