(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-16
(45)【発行日】2024-01-24
(54)【発明の名称】寿命平均化のためのブート時の物理コア割り当てに関する論理的な疑似ランダム
(51)【国際特許分類】
G06F 15/177 20060101AFI20240117BHJP
G06F 15/78 20060101ALI20240117BHJP
【FI】
G06F15/177 A
G06F15/78 517
(21)【出願番号】P 2020533201
(86)(22)【出願日】2018-09-24
(86)【国際出願番号】 US2018052456
(87)【国際公開番号】W WO2019125569
(87)【国際公開日】2019-06-27
【審査請求日】2021-09-21
(32)【優先日】2017-12-19
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アミタブ メーラ
(72)【発明者】
【氏名】クリシュナ サイ ベルナチョ
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特表2014-514660(JP,A)
【文献】国際公開第2014/027416(WO,A1)
【文献】特開2013-037694(JP,A)
【文献】特表2005-509231(JP,A)
【文献】米国特許出願公開第2015/0169363(US,A1)
【文献】特表2010-538373(JP,A)
【文献】米国特許出願公開第2017/0277571(US,A1)
【文献】特開2007-334883(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/16-15/177
G06F 15/78
(57)【特許請求の範囲】
【請求項1】
コンピューティングデバイスであって、
プロセッサを備え、
前記プロセッサは、
複数のプロセッサコアと、
レジスタのセットを有するコア変換コンポーネントであって、各レジスタは、前記複数のプロセッサコアのうち対応するプロセッサコアに関連付けられている、コア変換コンポーネントと、
コア割り当てコンポーネントと、を含み、
前記コア割り当てコンポーネントは、
プロセッサの初期化中にコア割り当てスキームに従って、前記コア変換コンポーネントの前記レジスタの各々に複数のコアインデックスの各々を割り当てること
であって、前記複数のプロセッサコアのうち何れかのプロセッサコアが、前記プロセッサによるプロセスの実行のためのデフォルトコアとしてランダムに割り当てられ、前記複数のプロセッサコアのうち1つ以上の残りのプロセッサコアが、前記プロセッサにおけるバス順序に基づいて割り当てられる、ことと、
前記複数のコアインデックスのうち対応するコアインデックスに基づいて、各コアにプロセス命令を転送することと、
を行うように構成されている、
コンピューティングデバイス。
【請求項2】
前記各々のレジスタに提供されるコアインデックスの各々は、前記複数のプロセッサコアの各々のコアのバス番号である、
請求項1のコンピューティングデバイス。
【請求項3】
前記複数のプロセッサコアのうち少なくとも2つは、コアのクラスタとして結合されており、
前記コア割り当てスキームは、前記クラスタのコアインデックスのみが互いに再配置されるように、結合するクラスタに基づいて前記コアのクラスタの
少なくとも2つのプロセッサコアの各々のコアインデックスを提供する、
請求項
1のコンピューティングデバイス。
【請求項4】
前記コア割り当てコンポーネントは、前記複数のコアインデックスを前記コア変換コンポーネントの前記レジスタ
のセットに提供するために、前記プロセッサをサポートするマザーボードに動作可能に関連付けられたリアルタイムクロックの動作に基づく疑似乱数生成器(PRNG)を含む、
請求項1のコンピューティングデバイス。
【請求項5】
前記マザーボードは、リアルタイムクロック(RTC)を有
しており、
前記PRNGは、前記複数のコアインデックスを前記コア変換コンポーネントの前記レジスタ
のセットに提供する場合に、前記RTCと通信する、
請求項
4のコンピューティングデバイス。
【請求項6】
前記コア割り当てコンポーネントは、
前記複数のプロセッサコアの前記コアの順序の順列テーブルの行を識別することであって、前記テーブルの前記行は
、ランダムに割り当てられた前記デフォルトコアの前記コア割り当てスキームである、こ
とを行うように構成されている、
請求項1のコンピューティングデバイス。
【請求項7】
前記コア割り当てコンポーネントは、
前記プロセッサのバスにおいて再割り当て信号を検出することと、
前記再割り当て信号を検出したことに応じて、前記レジスタのセットのうち第1のレジスタを疑似ランダムに選択することと、
前記再割り当て信号を検出したことに応じて、前記レジスタのセットのうち第2のレジスタを疑似ランダムに選択することと、
前記第1のレジスタ及び前記第2のレジスタを選択した後に、選択された前記第1のレジスタ
のバス番号を、選択された前記第2のレジスタに切り替えることと、
前記第1のレジスタ及び前記第2のレジスタを選択した後に、選択された前記第2のレジスタ
のバス番号を、選択された前記第1のレジスタに切り替えることと、
を行うように構成されている、
請求項
1のコンピューティングデバイス。
【請求項8】
前記再割り当て信号は
、プロセッサ命令を前記プロセッサに提供するオペレーティングシステムのスケジューラによって生成され、前記再割り当て信号は、所定のコア消耗目標時間経過後に送信される、
請求項
7のコンピューティングデバイス。
【請求項9】
方法であって、
プロセッサの複数のコアのうち何れかのコアを、前記プロセッサによるプロセスの実行のためのデフォルトコアとしてランダムに割り当てることと、前記複数のコアのうち残りのコアを、割り当てられた残りのコアがブートプロセスを通じてアクティブになるように、前記ブートプロセスの間に前記プロセッサにおけるバス順序に基づいて割り当てることと、によって、コア割り当てスキームに従って、複数のコアインデックスの各々を
前記プロセッサの複数のコアの各コアに割り当て
ることと、
前記複数のコアインデックスを前記プロセッサのメモリ構造に永続的に記憶することと、
前記プロセッサにおいて受信したプロセッサ命令を、前記割り当てられたコアインデックスに基づいて、コアバス番号と共に、オペレーティングシステムから前記プロセッサの
各コアにルーティングすることと、を含む、
方法。
【請求項10】
各コアインデックスは、別のコアのバス番号である、
請求項
9の方法。
【請求項11】
前記複数のコアのうち少なくとも2つは、コアのクラスタとして結合されており、
前記コア割り当てスキームは、前記クラスタのコアのコアインデックスのみが互いに再配置されるように、結合するクラスタに基づいて、前記クラスタのコアの各々のコアインデックスを提供する、
請求項
9の方法。
【発明の詳細な説明】
【背景技術】
【0001】
複数のコアを有するプロセッサを有する従来の処理システムでは、1つのコアが、処理システムのブートプロセスを実施するためのデフォルトコアとして指定され、プロセッサの他のコアが低電力状態にある間、様々なタスクを処理するためにアクティブ状態に留まる。このデフォルトコアの割り当ては、ブートプロセス及び状態変化に亘って静的及び永続的である。したがって、このデフォルトコアとして永続的に指定されたコアは、プロセッサのコンピューティングワークロードの不均衡な共有を受ける。その結果、デフォルトコアの動作寿命が他のコアと比較して短くなり、デフォルトコアが最小仕様内で動作しなくなると、一般的に、プロセッサ全体がスクラップ又は廃棄される。
【0002】
添付の図面を参照することにより、本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面で同じ符号を使用している場合、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、動的に割り当てられたデフォルトコアを有するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【
図2】いくつかの実施形態による、交替デフォルトコア割り当てを用いるマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【
図3】いくつかの実施形態による、マルチコアプロセッサの論理コアをオペレーティングシステムに割り当てる方法を示すフロー図である。
【
図4】いくつかの実施形態による、ACPI(Advanced Configuration and Power Interface)パーシステントメモリを用いてコアが指定されるマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【
図5】いくつかの実施形態による、ACPIパーシステントメモリを用いてマルチコアプロセッサの論理コアを割り当てる方法を示すフロー図である。
【
図6】いくつかの実施形態による、オペレーティングシステムへのコア割り当てを指定するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。
【
図7】いくつかの実施形態による、マルチコアプロセッサのコアを指定するマルチコアプロセッサに関する方法を示すフロー図である。
【
図8】いくつかの実施形態による、1つ以上のブートコンポーネントによってマルチコアプロセッサのコアを指定するコンピューティングデバイスのブロック図である。
【
図9】いくつかの実施形態による、ブートローダによってマルチコアプロセッサのコアを指定する方法を示すフロー図である。
【発明を実施するための形態】
【0004】
一般的に、コンピューティングデバイスのオペレーティングシステム(OS)は、ピン番号に従ってマルチコアプロセッサのコアを論理的に列挙し、第1ピン位置又は番号のコアは、プロセッサによって実行されるために割り当てられたプロセスを処理するためのデフォルトコアとして、オペレーティングシステムによってC(0)(又は「C0」)と番号付けされる。この割り当ては、多くの場合、再起動や起動の間の数週間から数カ月、オペレーティングシステムがアクティブのままである限り維持される。さらに、コンピューティング需要が低減すると、マルチコアプロセッサの1つ以上のコアが低電力状態に置かれ、デフォルトコアC(0)は、アクティブ状態(又は、よりアクティブな状態)に維持され、これにより、少なくとも1つのコアが、実行するためのプロセスを受け入れるのに利用可能になっている。したがって、アイドル状態であっても、OSは、概して、プロセスの実行をデフォルトコアC(0)に割り当てることを好む傾向がある。しかしながら、ブートタスク、低レベルカーネルタスク及びユーザ空間プログラムプロセスのデフォルトコアC(0)への割り当ての間、特に、プロセッサの他のコアが頻繁にアイドル状態又は低電力状態に設定される場合、デフォルトコアC(0)は、他のコアよりも早く損耗する。したがって、ワークロードをプロセッサの全てのコアに均等に分散させないと、デフォルトコアC(0)が消耗するため、プロセッサの動作寿命が短くなる。1つのコアが故障又は消耗すると、プロセッサ(及び、おそらく、プロセッサを実装するデバイス)は、非動作状態になる。この理由として、プロセッサは、一般的に、プロセッサの全てのコアがOSからプロセスタスクを受け入れることができる状態を維持しない限り動作するように設計されていないためである。
【0005】
したがって、いくつかの実施形態によれば、ブートストラッププロセス中に、マルチプロセッサコアを有するプロセッサを実装するコンピューティングデバイスは、複数のコアのうち1つのコアを、プロセス実行のためのデフォルトコアとして永続的に選択しないように構成されており、これにより、コンピューティングデバイス及びOSは、デフォルトコアとして常に同じコアを割り当てるようにデフォルト設定しない。他のコアは、この選択に基づいて割り当てられる。デフォルトコアC(0)の割り当ては、後述するように、複数の技術のうち1つに従って行われる。デフォルトコアとしての1つのコアの選択は一時的なものであるので、コンピューティングデバイスは、ブートプロセス後のある時点で、デフォルトコアC(0)として異なるコアを動的に再割り当てすることが可能である。結果として、デフォルトコアC(0)として動作するための責任が、プロセッサのコア間で均等に分散される。これにより、コアの消耗がより均等に広がり、プロセッサの動作寿命が延びる。
【0006】
図1は、いくつかの実施形態による、コア割り当てが第1の時間及び第2の時間において再割り当てされる2つの異なる時間においてマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。例えば、これらの2つの時間は、ブートプロセスの2つの実行後のものである。コンピューティングデバイス100は、少なくとも1つのシステムメモリ102及びマルチコアプロセッサ110に電力及びサポートを提供するマザーボード101を含む。プロセッサ110は、メモリ115のL3キャッシュに隣接して配列された4つのコア111~114を含む。システムメモリ102内のOS103は、ブートプロセスを通じてアクティブになっている。
【0007】
第1の時間(時間1)において、デバイス100で動作するコア割り当てコンポーネント104は、左上の第1のコア(コア1)をデフォルトコアC(0)としてOS103に割り当て又は指定しており、ここで、コアインデックスが0から開始するように番号付けられている。第2のコア(コア2)112は、第2のコアC(1)として割り当てられている。第3のコア(コア3)113は、第3のコアC(2)として割り当てられている。第4のコア(コア4)114は、第4のコアC(3)として割り当てられている。いくつかの実施形態によれば、第1の時間の前又は後の第2の時間(時間2)において、コア111~114は、コア割り当てコンポーネント104等のコンピューティングデバイス100の1つ以上のコンポーネントによって異なるように割り当てられている。プロセッサ110内の同じ物理的位置に同じ物理コアが残っているが、コアの割り当ては変化している。第2の時間において、コア111~114の各々は、C(3)、C(2)、C(1)及びC(0)として指定される。
【0008】
いくつかの実施形態によれば、第4のコア114は、ランダムに選択されており、デフォルトコアC(0)として指定され、残りのコアは、ブートプロセス中に遭遇するプロセッサ110のピン順序に従って指定される。他の実施形態は、他の方法によってコア指定を割り当てる。例えば、他の実施形態によれば、第3のコア113及び第4のコア114は、ランダムに選択されており、それぞれ第2のコアC(1)及びデフォルトコアC(0)として指定されており、残りのコアは、ブートプロセス中に遭遇するプロセッサ110のピン順序に従って指定される。さらに他の実施形態では、第2のコア112、第3のコア113及び第4のコア114は、ランダムに選択されており、それぞれ第3のコアC(2)、第2のコアC(1)及びデフォルトコアC(0)として指定されており、残りのコアは、ブートプロセス中に遭遇するプロセッサ110のピン順序に従って指定される。実施形態のさらなる例及びさらなる例示的な詳細が、他の図に関連して本明細書に提供される。
【0009】
コンピューティングデバイス100が第1の時間で動作しているか第2の時間で動作しているかに関係なく、OS103は、コアインデックスに従って、プロセス命令をコア111~114に送信する。例えば、OS103からプロセッサ110に渡されるプロセス命令は、インデックス(例えば、第2のコア112又は第3のコア113の何れかに対応する16進表記の1)及びハードウェア識別子(例えば、プロセッサ110に対応するHID=LNXCPU:00)に従って行われる。したがって、プロセス命令を実行するためにOS103のプロセスへの参照をシステムメモリ102からプロセッサ110に渡す必要がある場合、メカニズムはコアインデックスを含む。コアインデックスにより、デバイス100は、OS103がマザーボード101に対してプロセッサ110の特定のピン番号を渡すことなく、プロセッサ命令を適切なコアに配信することを可能にする。その結果、OS103は、様々なタイプのプロセッサに亘って書き込まれ、コンパイルされ、動作されることが可能になり、様々なデバイスに亘るハードウェア変更毎にオペレーティングシステムを変更する必要がない。ここで、OS103等のOSが使用するプロセッサコアインデックスを割り当てる方法の例として、様々な実施形態を説明する。
【0010】
図2は、いくつかの実施形態による、交替デフォルトコア割り当てを用いたマルチコアプロセッサを有するコンピューティングデバイス200のブロック図である。コンピューティングデバイス200は、例えば、デスクトップコンピュータ、ノートブックコンピュータ、サーバ、タブレットコンピュータ、ゲーム機又は携帯電話を含む。コンピューティングデバイス200は、ブートメモリ202と、マルチコアプロセッサ210と、ハードドライブ220又は他のストレージデバイスと、システムメモリ230と、を含む様々なハードウェア要素を動作させるためのマザーボード201を含む。いくつかの実施形態によれば、システムメモリ230は、読み出し専用メモリ(ROM)又はランダムアクセスメモリ(RAM)を含む。
【0011】
プロセッサ210は、第1のコア211と、第2のコア212と、第3のコア213と、第4のコア214と、を含む複数のコアを含む。これらのコアは、例えば、中央処理装置(CPU)コア、グラフィックス処理ユニット(GPU)コア、又は、これらの組み合わせを含む。いくつかの実施形態によれば、コア211~214は、例示し易くするために、
図2に示されていないL1キャッシュ及びL2キャッシュ等の各コア自体のメモリ構造を含む。また、コア211~214は、L3キャッシュ215を共有する。コア211~214及び関連するキャッシュは、コアのクラスタ216を形成する。プロセッサ210は他のコアのクラスタを有することができる。いくつかの実施形態によれば、コア211~214は、ハイパースレッディングをサポートすることができる物理コアであり、これにより、各コア211~214は、プロセッサ命令を受け入れるために2つの「コア」又はプロセッサをOS232に提供する。このような場合、プロセッサ210内のコアの数は、デフォルトコアC(0)を選択する目的のために、8になる。さらに、いくつかの実施形態によれば、コア211~214は、他のコアの電力状態に影響を及ぼすことなく、低電力状態又はアイドル状態に個々に置かれてもよい。また、クラスタ216を低電力状態又はアイドル状態に置くことにより、コア211~214を低電力状態にして、デバイス200が、プロセスを、プロセッサ210の他の利用可能な(電源投入された)コアに割り当てることを可能にする。
【0012】
いくつかの実施形態によれば、ブートメモリ202は、マザーボードのパワーオンリセットによって開始するブートプロセス中に実行されるブートコードを記憶するROMとして実装されている。ブートメモリ202は、ACPIフレームワーク203及び基本入出力システム(BIOS)204等のスタートアップサービスを含む。ACPIフレームワーク203は、ハードウェアレジスタを、マザーボード201によって電力供給されるコンポーネントに提供し、ハードウェアアドレス等によって各コンポーネントをネイティブに直接呼び出すことなく、電力管理及びデバイス動作を可能にする。ACPIフレームワーク203は、デバイス200のBIOS204とOS232との間のインタフェース層として機能する。
【0013】
パワーオンリセット又は他のブート初期化イベントにおいて、マザーボード201に電力が供給される。マザーボード201が最初に電力を受けると、ブートメモリ202がアクティブになり、そのセットアップ、初期化及びパワーオンセルフテスト(POST)を含むセルフテストを完了する。次に、BIOS204は、ファームウェアの初期化中に得られた情報を使用して、電力インタフェースデータを含む様々なプラットフォーム及びデバイス構成を有するACPIフレームワーク203のテーブルを生成又は更新する。ブートプロセス中、プロセッサ210は、コア情報205を生成し、コア211~214に関するデータをOS232に提供する。具体的には、コア情報205は、コア211~214のうち1つをデフォルトコアC(0)として指定し、そのように指定されたデフォルトコアC(0)と共に、他のコアをC(1)~C(N-1)として列挙する。
【0014】
ブートプロセス中、BIOS204は、デバイス200用のOSを有する可能性のあるブートデバイス用の全ての利用可能なストレージデバイスを識別する。BIOS204は、マザーボード201に利用可能なパーシステントストレージ内で指定されたブート順序を使用する。いくつかのマザーボードでは、パーシステントストレージは、個別のチップである。多くの場合、BIOSパーシステントストレージは、ハードドライブコントローラ、I/Oコントローラ及び統合コンポーネントに関与するマザーボード201上のリアルタイムクロック(RTC)又は集積回路(IC)と統合する。いくつかの実施形態では、BIOSパーシステントストレージは、デバイス200のマザーボード201が一次電力を失った場合であっても、BIOSパーシステントストレージがブート順序、コア割り当て207等を維持することを可能にするバッテリの形態で自身の電源を備える。
【0015】
BIOS204は、ブート順序シーケンスにおいて、各ストレージデバイスの第1のセクタにロードするOSを探す。
図2において、BIOS204は、ハードドライブ220を潜在的なブートデバイスとして識別する。第1のセクタは、2つのアイテム(マスタブートレコード(MBR)221、又は、ハードドライブ220内に複数のパーティションがある場合には、ボリュームブートレコード(VBR))のうち少なくとも1つを記憶する。BIOS204は、MBR221をシステムメモリ230にコピーする。コピーされたMBR231は、OSが配置されているアクティブパーティション222を指すように構成されている。ハードドライブ220は、プログラム及びプログラムデータが配置され得る第2のパーティション223等の1つ以上の他の非アクティブなパーティションを含むことができる。
【0016】
コピーされたMBR231は、OS232のブートローダを含む。ブートローダは、OS232をシステムメモリ230にロードしてOSを起動する実行可能コードを含む。この時点で、BIOS204は、ブートローダをアクティブにし、マザーボード201及びデバイス200の制御を停止する。ブートローダは、システムメモリ230内のOS232の様々なコンポーネントをロード及び実行する。OS232の初期化中、OS232は、カーネル233を起動及び初期化して、カーネル233が、プロセッサ命令の形式でタスクをプロセッサコア211~214に提供できるようにする。カーネル233は、コア211~214上のプロセスの実行を管理する。初期化中、カーネル233は、コア割り当て207に対応する参照インデックスを用いて、コア211~214にアクセスするように構成されている。いくつかの実施形態によれば、コア割り当て207は、レジスタのグループ又はACPIフレームワーク203のテーブルとして実装され、カーネル233は、従来のプラクティスに従って動作する。他の実施形態では、コア割り当て207は、MBR231のブートローダによってカーネル233に提供され、カーネル233は、新たなコア割り当て207を使用して、C(0)のデフォルトコア指定を第2のコア212、第3のコア213又は第4のコア214のうち1つに効果的にシフトする。さらに他の実施形態では、プロセッサ210は、OS232の初期化中に、コア割り当て207をブートローダ又はカーネル233の何れかに提供する。さらなる実施形態によれば、ブートプロセスの後、OS232の動作中に、コア割り当て207は、プロセッサ210の寿命中に、消耗をコア211~214に分散するために、定期的に又は要求に応じて、新たなインデックス値に更新される。再割り当て後、様々なプロセッサコア211~214は、新たなコア割り当てに従ってプロセスが割り当てられる。
【0017】
いくつかの実施形態によれば、OSがコア211~214で実行するプロセスをスケジュールする場合、OSは、アフィニティマスク(affinity mask)によってコア211~214を参照する。アフィニティマスクは、デバイス200内のプロセッサ210のN個のコアの各々に1つずつのNビットのセットである。コア情報205は、実行がスケジュールされた特定のプロセスのタスク又はスレッドを実際に受信する物理コア211~214を、OS232のために変換する。
【0018】
図3は、いくつかの実施形態による、論理コアをオペレーティングシステムに割り当てる方法300を示すフロー図である。ブロック301において、プロセッサのコアは、起動中又はブートプロセス中に、CPU初期化ステップの一部等として列挙される。ブロック302において、コア割り当てが、各コアの物理的列挙を各コアの割り当てられた列挙に変更するために生成される。ブロック303において、コア割り当ては、
図2のOS232のカーネル233等のOSのカーネルに提供される。
【0019】
いくつかの実施形態によれば、コア割り当ては、ブートメモリのハードウェアコンポーネント内にインデックスを永続的に記憶することによって利用可能なインデックスを生成することによって、OSに提供される。ハードウェアコンポーネントの一例は、
図2のブートメモリ202の不揮発性相補型金属-酸化物-半導体(CMOS)メモリである。例えば、コアインデックの現在のセットがブートメモリ202に記憶され、これにより、コアインデックスが、CMOSメモリ内のOS232のカーネル233に利用可能になる。別の例として、コアインデックスの現在のセットがテーブルに記憶され、インデックス及びテーブルの両方が、当業者に既知であるような
図2のACPIフレームワーク203の起動中に実行されるACPIマシン語(AML)バイトコードによって生成される。必要に応じて、コア割り当て207を随時交替させるために、コアインデックスの現在のセットが再配置され、OS232のカーネル233に利用可能にされる。コアインデックスを再配置することによって、マルチコアプロセッサ210のコア211~214が、OSがデバイスを動作する以前よりも経時的に均等に消耗するように、コア消耗が分散される。
【0020】
図4は、いくつかの実施形態による、ACPIパーシステントメモリ等のパーシステントブートメモリを用いてコアを指定するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。コンピューティングデバイス400は、様々なハードウェア要素を動作させるためのマザーボード401を含む。なお、
図4では、説明を容易にするために、システムメモリ(例えば、ROM)やハードドライブ等の一般的な処理デバイスの一部を省略している。マザーボード401は、ブートメモリ402及びマルチコアプロセッサ410を動作させる。ブートメモリ402は、ACPIパーシステントメモリ又はBIOS CMOSメモリ等のパーシステントブートメモリを含む。いくつかの実施形態によれば、プロセッサ410はCPUであり、第1のコア411、第2のコア412、第3のコア413及び第4のコア414を含む複数のコアを含む。いくつかの実施形態によれば、コア411~414は、各々のメモリ構造を含み、このようなメモリ構造は、説明を容易にするために
図4に示されていない共有メモリ(例えば、L3キャッシュ)を共有することができる。コア411~414は、コアのクラスタ415を形成する。プロセッサ410は、他のコアのクラスタを有することができる。
【0021】
ブートメモリ402は、ACPIフレームワーク403と、BIOS404と、を含み、BIOS404は、コンピューティングデバイス400のOSが、プロセッサ410上で実行される処理命令をスケジュールすることによって、プロセッサ410を使用することを可能にする。ACPIフレームワーク403は、コンピューティングデバイス400のコンポーネントを動作させるための値を記憶することができるACPIパーシステントメモリを含む。いくつかの実施形態によれば、ACPIパーシステントメモリは、当業者に既知であるようなACPIテーブル、ACPIレジスタのグループ、又は、ACPIレジスタ405のセットの形態をとる。プロセッサ410は、ACPIフレームワーク403のACPIネームスペースで宣言される。概して、ACPIネームスペースは、プロセッサ410を含むマザーボード401のコンポーネントを操作するためのACPIテーブルを含む。OSの初期化中、コンピューティングデバイス400のOSは、ACPIテーブルから自身のネームスペースを構築する。プロセッサ410のデバイス定義は、OSがプロセッサ410のコア411~414上で実行するプロセスをスケジュールするために使用するハードウェア識別子を使用して、コンピューティングデバイス400のOSにおいて宣言される。
【0022】
OSは、レジスタのセット405を使用して、プロセッサ410上でプロセスをスケジュールする。ACPIフレームワーク403は、コア割り当て407の形式で、プロセッサ410のコア411~414の各々のレジスタを含む。いくつかの実施形態によれば、コア割り当て407は、コア411~414に関するバス番号(例えば、0×4C、0×10)に対応するが、便宜上、
図4にインデックスとして表される。OSが動作し、プロセスを実行すると、OSのカーネルは、従来のコアインデックス0~N-1に基づいてプロセスをスケジュールする。OSのカーネルのOSスケジューラのインデックスは、
図4のコアインデックス406に対応する(例えば、PID0123を有するプロセスは、プロセッサインデックス(0)を有するプロセッサのコア(2)上で実行される)。しかしながら、OSとプロセッサ410との間の構成可能なインタフェースの一部として、コア割り当て407は、スケジュールされたプロセスを、レジスタ405の内容(具体的には、コア割り当て407)に従ってコア411~414に渡すことを可能にする。例えば、406のコアインデックス(0)(すなわち、デフォルトコアC(0))で実行されるようにOSによってスケジュールされたプロセスは、407のインデックス(3)を有する物理コア(すなわち、C(3)、第4のコア414)に実際に渡される。このようにして、従来システムのデフォルトコアC(0)として元々及び永続的にハードウェアに組み込まれた又は構成された第1のコア411が第4のコアC(3)に変換され、(OSの観点から)デフォルトコアC(0)で実行するために割り当てられたプロセスが、実際にC(3)に送信される。このスケジューリングは、コア割り当て407が再生成されるまで、コア割り当て407を使用して繰り返される。OSスケジューラの観点から考えると、プロセスがデフォルトコアC(0)で実行され、実際には、プロセスは、第4のコアC(3)414に透過的に渡され、第4のコアC(3)414上で実行される。したがって、プロセスは、コア割り当て407のインデックスに対応する各コア411~414に渡され、これにより、OSとプロセッサコア411~414との間に構成可能なインタフェースが生成される。したがって、
図4は、構成可能なコアインタフェースがACPIフレームワーク403によって生成され、ACPIフレームワーク403に永続的に記憶されることを示す。
【0023】
いくつかの実施形態によれば、割り当て407は、当技術分野で既知であるように、ACPI403の汎用イベントを実行することによって、ブートプロセス中に行われる。1つの例示的な実施形態によれば、物理コアインデックス406(0~3)の各々に対応するコア割り当て407は、コア順列テーブル408を使用することによって生成され、当該テーブル408の各行は、プロセッサ410のN個のコアのN乗の順列数のうち1つに対応する。例えば、
図4のコア割り当て407として示されているインデックスは、コア411~414のインデックス「0」、「1」、「2」、「3」に対応する、物理コア406の「3」、「2」、「0」、「1」である。デバイス400をリブートする毎に、又は、ACPIフレームワーク403を初期化又は変更する毎に、新たなコア割り当て407が生成される。
【0024】
一例として、ブートプロセス中に、行インデックス409は、パーシステントメモリレジスタ405等から取得される。行インデックス409は、コア順列テーブル408の1つの行に対応する。順列テーブル408は一連の行を含み、その1行は、コア411~414のインデックスの順列の各々に対応する。一実施形態によれば、順列テーブル408は、電力がマザーボード401に供給されなくなった場合であっても、ブートメモリ402に永続的に記憶されるACPIテーブルである。別の実施形態によれば、順列テーブル408は、デバイス400のマザーボード401がブートされる毎に生成され、順列テーブル408は、プロセッサ410内のコアの数を尋ねるクエリの応答に基づいて生成される。このクエリは、ブートプロセス中にAMLバイトコードとして実行される。行インデックス409は、ブート間で永続的に記憶される。所定のブートプロセス中に、行インデックス409が1つ進み、次に、新たな行インデックス409に対応する順列テーブル408の行を参照することによって、コア割り当て407が生成される。別の例示的な実施形態として、行インデックス409は、ACPIフレームワーク403内でAMLバイトコードとして動作可能なランダムアルゴリズム又は疑似ランダムアルゴリズムに基づいて選択される。このようにして、コア411~414の各々は、対応するコア割り当て407に基づく実行プロセスを受信する。
【0025】
コア割り当て407を生成するための他のメカニズムも可能である。コア割り当て407を生成するためのメカニズムの別の例として、ブートプロセス中にAMLバイトコードとしてプログラムされ、コンパイルされ、実行される乱数生成アルゴリズムは、プロセッサ410のコア411~414の各々に対して1つずつの割り当てが全て完了するまで、コア割り当て407の各々が割り当てられる。
【0026】
図5は、いくつかの実施形態による、ACPIパーシステントメモリを用いてマルチコアプロセッサの論理コアを割り当てる方法500を示すフロー図である。ブロック501において、プロセッサのコアが列挙される。列挙は、コンピューティングデバイス内のプロセッサ又は全てのプロセッサのコアの数を識別することを含む。他の実施形態によれば、列挙は、オペレーティングシステムが、実行されるプロセスを送信するコアの各々の識別子、アドレス、バスアドレス又はバス番号を取得することを含む。コアは、物理コアにおいてハイパースレッディングをサポートすることによって利用可能であり、これにより、各物理コアにおける2つ以上のコア又は「プロセッサ」において、プロセッサ命令の実行を可能にする。いくつかの実施形態によれば、列挙は、この機能に提供されるAMLバイトコードを用いて行われる。他の実施形態によれば、列挙は、この目的のために、BIOSにプログラムされコンパイルされたBIOS機能を用いて行われる。
【0027】
ブロック502において、列挙されたコアのコア割り当てが生成される。いくつかの実施形態によれば、割り当てテーブルの複数の行のうち1行がアクセスされ、新たなコアインデックス番号が、列挙されたコアの各々に提供される。例えば、コアに0、1、2、3が物理的に番号付けされた4つのコアプロセッサの場合、これらの4つのコアの各々に新たなインデックス番号が提供される。
図4の407に示すように、新たなコアインデックス番号の一例は、第1の物理コア411には「3」、第2の物理コア412には「2」、第3の物理コア413には「0」、第4の物理コア414には「1」である。いくつかの実施形態によれば、コア割り当ては、この機能のために提供されたAMLバイトコードを用いて行われる。他の実施形態によれば、コア割り当ては、この目的のために、BIOSにプログラムされコンパイルされたBIOS機能を用いて行われる。
【0028】
ブロック503において、方法500は、プロセスをプロセッサコアに渡す際に使用するために、コア割り当てを永続的に記憶することを含む。例えば、永続的に記憶することは、
図4のACPIテーブル又はACPIレジスタ405等の持続ブートメモリ内のプロセッサコアの各々のアドレス(例えば、バスアドレス、バス番号)若しくは識別子を記憶することを含む。別の例として、永続的に記憶することは、(ACPIテーブルの形式の)順列テーブルの行インデックスを記憶することを含む。コアインデックス又はコア割り当てを必要とする場合、記憶された行インデックスは、プロセッサの各コアのコア割り当てを識別するために使用される。いくつかの実施形態によれば、コア割り当てを永続的に記憶することは、この機能のために提供されたAMLバイトコードを用いて行われる。他の実施形態によれば、コア割り当てを永続的に記憶することは、この目的のために、BIOSにプログラムされコンパイルされたBIOS機能を用いて行われる。
【0029】
図6は、いくつかの実施形態による、オペレーティングシステムへのコア割り当てを指定するマルチコアプロセッサを有するコンピューティングデバイスのブロック図である。コンピューティングデバイス600は、様々なハードウェア要素を動作させるためのマザーボード601を含む。システムメモリ(例えば、ROM)及びハードドライブ等の汎用処理デバイスのいくつかの要素は、説明の便宜上、
図6から省略されている。マザーボード601は、ブートメモリ602及びマルチコアプロセッサ610を動作させる。ブートメモリ602は、ACPIパーシステントメモリ又はBIOS CMOSメモリ等のパーシステントブートメモリを含む。ブートメモリ602は、ACPIフレームワーク603及びBIOS604を含み、BIOS604は、コンピューティングデバイス600のOSがプロセッサ610を使用することを可能にする。ACPIフレームワーク603は、コンピューティングデバイス600のコンポーネントを動作させるための値を記憶できるACPIパーシステントメモリを含む。
【0030】
いくつかの実施形態によれば、プロセッサ610はCPUであり、第1のコア611、第2のコア612、第3のコア613、第4のコア614を含む複数のコアを含む。コア611~614のうち1つは、デフォルトコアC(0)として指定される。コア611~614は、各々のメモリ構造を含み、このようなメモリ構造は、説明を容易にするために
図6に示されていない共有メモリ(例えば、L3キャッシュ)を共有することができる。コア611~614は、コアの第1のクラスタ620を形成する。プロセッサ610は、他のコアのクラスタを有してもよい。
【0031】
また、プロセッサ610は、コア変換コンポーネント615及びコア変換コンポーネント616を含む。これらのモジュール615,616は、複数のコア割り当てスキームのうち1つに従って設計され、動作する。本明細書では、プロセッサ610のコンポーネントを構造化するための複数のスキームの例として、2つのコア割り当てスキームを説明する。コンポーネントは、プロセッサ610のコア611~614の指定をシャッフルし、これらのコンポーネントは、コアがOSを含むデバイス600の他のコンポーネントと相互運用することを可能にするインタフェースを提供する。
【0032】
いくつかの実施形態によれば、一例のスキームとして、プロセッサ構成中又は初期化プロセス中(例えば、ブートプロセス中)、コア変換コンポーネント615は、コアインデックス618(例えば、コアインデックス、コアアドレス又はバス番号の形式)をコア変換コンポーネント616に提供することによって、コア割り当てコンポーネント617を使用してコア変換コンポーネント616を構成する。ブートプロセス後、コンピューティングデバイス600の動作中、OSは、バス番号がプロセッサ610のバスにおいて変化されていないかのように、プロセッサ610の同じバス番号のセットを参照することによって、従来のスケジューリングメカニズムにあるようなプロセス命令をルーティングする。OSは、従来の方法でACPIフレームワーク603と相互運用する。しかしながら、プロセッサ610の内部のブートプロセス中に動作可能なコア割り当てコンポーネント617に基づいてOSから来るプロセス命令は、コア変換コンポーネント616のインデックス618に基づいてコア611~614にルーティングされる。プロセッサ610は、コアインデックス618として表される特定のコアインデックススキームに従って、コア変換コンポーネント616を介して、命令をコア611~614の内部にルーティングする。プロセッサ610が初期化される毎に、これらのコアインデックス618の順序又はシーケンスが変更される。例えば、デフォルトコアC(0)上で実行されるようにスケジュールされた第1のプロセスは、実際には、
図6の「3」である第1のコアインデックス618にアドレス指定されたコアに渡される。このプロセスは、コア611~614のうち1つで実行されるためにプロセッサ610に渡されるプロセス毎に繰り返される。OSの観点から考えると、プロセス命令がプロセッサ610のコア611~614のうち1つで実行され、その結果が動作メモリ及びOSに戻された後、何も変化していない。プロセッサ610の観点から考えると、プロセッサ命令は、プロセッサ610の寿命に亘って、より均一に様々なコア611~614に分散される。
【0033】
いくつかの実施形態によれば、プロセッサ610又はプロセッサ610のコア変換コンポーネント615は、疑似乱数生成器(PRNG)619又はコアインデックス番号生成を実施するコンポーネントを含む。コア変換コンポーネント615は、PRNG619を呼び出し又はアクティブにして、各レジスタ内部に入れるインデックス値を提供することによって、疑似ランダムスキームに従ってインデックス618を提供する。コア割り当てコンポーネント617は、不正なインデックス618(例えば、プロセッサ610の4つのコア611~614について0~3のみが可能である場合での「5」の値)が提供されていないことを確認するように提供されてもよい。或いは、コア変換コンポーネント615は、PRNG619を呼び出し又はアクティブにして、何れのレジスタがデフォルトコアC(0)として指定されるかを選択することができる。次に、アドレス又はコアバス番号がプロセッサ610内の特定のレジスタに提供される。このプロセスは、全てのコア611~614にインデックス618が割り当てられるまで繰り返すことができる。
【0034】
或いは、C(0)レジスタが識別され、満たされると、他のレジスタは、ランダム性に関係なく、少なくとも、C(0)がプロセッサ610に疑似ランダムに選択されるように、順番に満たされてもよい。いくつかの実施形態によれば、マザーボード601は、その中で動作するリアルタイムクロック(RTC)を含み、PRNG619は、コアインデックス618をコア変換コンポーネントのレジスタに提供する際にRTCと通信し、PRNG619は、その動作をRTCの値に基づいて行う。このような実施形態によれば、PRNG619は、RTCを使用して、少なくともC(0)指定をコア611~614のうち1つに対応する1つのレジスタに分配するためのエントロピーを取得する。
【0035】
この例示的なスキームの変形例によれば、プロセッサ構成プロセスの間、コア変換コンポーネント615は、ラウンドロビンスキームに従ってコア割り当てコンポーネント617を使用して、コア変換コンポーネント616のレジスタを構成する。本明細書で使用される場合、ラウンドロビンスキームは、ブートシーケンスのプロセッサ初期化ステップ中に、各コアのコアインデックスを1つの位置だけシフトする。これらの位置は、プロセッサを動作させるデバイスがブートプロセスを受ける毎に、又は、プロセッサ610がプロセッサ610のバスにおいて再割り当て信号を検出する毎にシフトされる。
【0036】
動作の一例として、プロセッサ610が再割り当て信号を検出すると、コア割り当てコンポーネント617は、インデックス618を保持するレジスタのセットの第1のレジスタ及び第2のレジスタを疑似ランダムに選択する。次に、コア割り当てコンポーネント617は、選択された第1のレジスタ及び選択された第2のレジスタのインデックス618を切り替える。所定のコア消耗目標時間を超えた後に、デバイス600内でアクティブなOSのカーネルのスケジューラによって再割り当て信号が送信されてもよく、所定のコア消耗目標時間は、コア611~614の典型的な寿命推定に従って製造業者又はOSのプログラマによって指定されている。例として、コア消耗目標時間は、事前に決定されてもよく、特定のコア割り当て構成で動作する時間数又は日数として設定されてもよい。
【0037】
他の実施形態によれば、別の例示的なスキームとして、プロセッサ構成中又は初期化プロセス中(例えば、ブートプロセス中)、コア変換コンポーネント615は、コアインデックス618(例えば、インデックス、コアアドレス又はバス番号の形式)をACPIフレームワーク603に提供することによって、コア割り当てコンポーネント617を使用して、ACPIフレームワーク603のACPIレジスタ又はACPIテーブル(プロセッサ610のコア611~614に対応する)を構成する。いくつかの実施形態によれば、コアインデックス618は、コア611~614のバス番号(例えば、0×4C、0×10)に対応する。実施形態の一例として、コア変換コンポーネント615は、コアインデックス618をコア変換コンポーネント616から読み出し、インデックス618をACPIフレームワーク603に渡す。別の例示的な実施形態によれば、コア変換コンポーネント616は、後続の構成又は初期化ステップで使用できるコアインデックス618又は値のセットの順列テーブルを含む。プロセッサ610の初期化ステップ中に、コア変換コンポーネント615は、コア割り当てコンポーネント617を介して、複数行のうち1つの行をコアインデックス618のセットの順列テーブルからランダムに選択し、インデックス618をACPIフレームワーク603に渡す。
【0038】
動作において、第2の例示的なスキームによれば、プロセス命令は、コア変換コンポーネント615によってACPIフレームワーク603に提供された情報を用いてOSからルーティングされる。コンピューティングデバイス600のOSのスケジューラ及びカーネルは、従来のコア呼び出し及びコアスケジューリングを使用して動作するが、命令は、透過的に、コアインデックス618によって示された様々なコア611~614のうち1つにルーティングされ、従来の動作のようなハードウェアに組み込まれた指定によってルーティングされない。例えば、C(0)上で実行するようにスケジュールされた第1のプロセスは、実際には、
図6の「3」である第1のインデックスでアドレス指定されたコアに渡される。この方法は、実行するためにプロセッサ610に渡されるプロセス毎に繰り返される。このように、従来のシステムではC(0)として永続的にハードウェアに組み込まれ又は構成された第1のコア611がC(3)に変換され、C(0)上で実行するように割り当てられたプロセスが、実際にはC(3)に送信される。
【0039】
このスケジューリングのスキームは、コア割り当て607が随時再生成されるまで、コア割り当て607を使用して繰り返される。コア再割り当ては、OSから又はコンピュータデバイス600内の他のコンポーネント若しくはコンポーネントの組み合わせによってスケジュール又はトリガされるように、リブート毎又は要求に応じて行われる。要約すると、
図6に関連して説明するように、OSスケジューラの観点から、各プロセスは、C(0)、C(1)、C(2)、C(3)のうち1つで実行され、実際には、各プロセスは、コアインデックス618によって指定されたコアに透過的に渡され、当該コア上で実行される。コアインデックス618、コア変換コンポーネント616及びコア変換コンポーネント615は、OSとプロセッサコア611~614との間の構成可能なインタフェースの一部である。
図6は、構成可能なコアインタフェースがOSとプロセッサ610のコア611~614との間に存在し得ることを示している。OSの観点から考えると、プロセス命令が正常に実行され、結果がOSによってアクセスメモリに戻されてからは、何も変化していない。プロセッサ610の観点から考えると、プロセッサ命令は、プロセッサ610の寿命に亘って、より均一に様々なコア611~614に分散される。
【0040】
別の実施形態によれば、別の例示的なスキームとして、プロセッサ構成中又は初期化プロセス中(例えば、ブートプロセス中)、第1のコア割り当ては、第1のプロセッサ(例えば、アームプロセッサ)のコア変換コンポーネントによって提供され、そのコア割り当ての出力は、
図6のプロセッサ610等の第2のプロセッサに提供される。この実施形態では、第2のプロセッサは、第1のプロセッサと異なる命令セット(例えば、x86命令セット)を使用するように構成された第2のプロセッサ等と同じ又は異なるプロセッサタイプである。この実施形態では、BIOSシーケンスの最初又は初期の実行の間、第1のプロセッサは、第1のプロセッサがもはや必要でなくなるか使用されなくなるまで、変換スキームに従って、第1のプロセッサのコア変換コンポーネントを使用することと、第1のプロセッサのコアを使用することと、が指示される。その後、BIOSシーケンスの第2の実行又は後期の実行の間、メモリ又は第1のプロセッサ内で動作可能なBIOSは、第1のプロセッサに、そのコア変換コンポーネントを使用して、第2のコア割り当て又はさらなるコア割り当て(第2のコア再割り当て)を第2のプロセッサに提供するように指示する。第2のプロセッサは、その新たなコア割り当て(例えば、コアインデックス、コアアドレス又はバス番号の形式)を受信し保持するためのストレージレジスタを含む。或いは、第1のプロセッサは、新たなコア割り当てを、第2のプロセッサのオペレーティングシステム(OS)に提供する。このようにして、OSに、第2のプロセッサのコアにプロセスを割り当てさせる目的で、第2のプロセッサは、再番号付けされるコアを有する。
【0041】
図7は、いくつかの実施形態による、プロセッサによって、マルチコアプロセッサのコアを指定する方法を示すフロー図である。ブロック701において、コア再割り当てスキームが生成される。再割り当てスキームは、コンピューティングデバイスの1つのプロセッサ内又は全てのプロセッサ内のコアの数を使用して、新たなインデックス番号を、利用可能なコアの各々にランダム又は疑似ランダムに提供する。このスキームは、疑似ランダム割り当てスキームとして説明できる。このスキームは、オペレーティングシステムが、実行されるプロセスを送信するコアの各々の識別子、アドレス、バスアドレス又はバス番号を取得することを含むことができる。いくつかの実施形態によれば、この再割り当てスキームは、
図6のプロセッサ610等のプロセッサの一部によって実行されるロジック又は一連のステップによって生成される。或る実施形態によれば、コアは、マルチコアCPU又はマルチコアGPUのコアであり、再割り当てスキームは、デバイス内の各マルチコアプロセッサに適用される。
【0042】
ブロック702において、ブロック701において生成されたコア再割り当てスキームが永続的に記憶される。記憶することは、バスアドレス等のアドレスを、ブートメモリ、ACPIフレームワークのメモリ構造、又は、システムRAM等のコンピューティングデバイス内の別の要素に渡す形式をとることができる。
【0043】
ブロック703において、プロセッサのコア上で実行するためのプロセス命令は、再割り当てスキームに基づいて、各々のコアのうち1つに渡される。例えば、618に示すように、スケジュールされてコアC(0)に渡されるプロセスは、実際には、C(3)又は再割り当てされるコアC(0)の何れかに送信される。
【0044】
図8は、いくつかの実施形態による、1つ以上のブートコンポーネントによってマルチコアプロセッサのコアを指定するためのコンピューティングデバイスのブロック図である。コンピューティングデバイス800は、様々なハードウェア要素を動作させるためのマザーボード801を含む。マザーボード801は、ブートメモリ802と、ハードドライブ808等のストレージメモリと、マルチコアプロセッサ810と、システムメモリ820と、を含む様々なコンポーネントを動作させる。ハードドライブ808は、命令を有するアクティブパーティション809を含む。
【0045】
いくつかの実施形態によれば、プロセッサ810は、第1のコア811と、第2のコア812と、第3のコア813と、第4のコア814と、を含む複数のコアを含む。コア811~814は、各々のメモリ構造を含み、このようなメモリ構造は、説明を容易にするために
図8に示されていない共有メモリ(例えば、L3キャッシュ)を共有する。コア811~814は、コアの第1のクラスタ815を形成する。プロセッサ810は、他のコアのクラスタを有してもよく、同じ又は異なるソケットの何れかの他のクラスタのコアは、第1のクラスタ815のものと同様に扱われる。
【0046】
ブートメモリ802は、ACPIフレームワーク803及びBIOS804を含み、BIOS804は、コンピューティングデバイス800のOSが、プロセッサ810上で実行されるプロセスをプロセッサ810のコア811~814に提供することを可能にする。ACPIフレームワーク803は、ブートメモリ802内に、又は、ブートメモリ802の一部として、ACPIメモリを含む。ACPIメモリは、コンピューティングデバイス800のコンポーネントを動作させるための値を記憶する。いくつかの実施形態によれば、ACPIメモリは、当業者に既知であるようなACPIテーブル、ACPIレジスタのグループ又はACPIレジスタのセットの形式をとる。ブートプロセス中、プロセッサ810は、ACPIフレームワーク803のACPIネームスペースで宣言される。ACPIネームスペースは、プロセッサ810及びそのコア811~814を含むマザーボード801のコンポーネントを動作させるためのACPIテーブルを含む。OSの初期化中、コンピューティングデバイス800のOSは、ACPIテーブルから自身のネームスペースを構築する。プロセッサ810のためのデバイス定義は、OSがプロセッサ810のコア811~814上で実行するプロセスをスケジュールするために使用するハードウェア識別子を使用して、コンピューティングデバイス800のOSにおいて宣言される。
【0047】
OSは、ACPIレジスタのセットの情報を使用して、プロセッサ810のコア811~814上のプロセスをスケジュールする。ACPIフレームワーク803は、コア割り当て807の形式で、プロセッサ810のコア811~814の各々のレジスタを含む。いくつかの実施形態によれば、コア割り当て807は、コア811~814のバス番号(例えば、0×4C、0×10)に対応するが、バス番号は、プロセッサ810のコンポーネントのアーキテクチャ及びレイアウトによって変わるので、便宜上、
図8ではインデックスとして表される。OS822が動作し、プロセスを実行すると、OS822のカーネル823は、従来のコアインデックス0~N-1に基づいてプロセスをスケジュールする。カーネル823のOSスケジューラのインデックスは、
図8のコアインデックス806に対応する(例えば、PID0123を有する実行プロセスは、プロセッサインデックス(0)を有するプロセッサのコア(2)上で実行される)。しかしながら、OSとプロセッサ810との間の構成可能なインタフェースの一部として、コア割り当て807は、コア割り当て807に従って、従来のコア番号付け及び静的バス番号によらずに、スケジュールされたプロセスをコア811~814に渡すことを可能にする。
【0048】
例えば、806においてコアインデックス(0)(すなわち、デフォルトコアC(0))で実行するようにスケジュールされたプロセスは、807(すなわち、第4のコアC(3))においてインデックス(3)を有するコアに実際に渡される。このように、従来のシステムのデフォルトコアC(0)として元々及び永続的にハードウェアに組み込まれた又は構成された第1のコア811は、第4のコアC(3)に変換され、第1のコア811上で実行するために割り当てられたプロセスは、実際には、第4のコア814に送信される。このスケジューリングは、コア割り当て807が再生成されるまで、各々のコア割り当て807の全てを使用して繰り返される。OSスケジューラの観点から考えると、プロセスがデフォルトコアC(0)上で実行され、実際には、プロセスは、第4のコア814又はC(3)に透過的に渡され、第4のコア814又はC(3)上で実行される。このようにして、プロセスは、コア割り当て807のインデックスに対応する各々のコア811~814に渡され、これにより、OSとプロセッサコア811~814との間に構成可能なインタフェースが生成される。要するに、
図8は、構成可能なコアインタフェースがACPI803内で永続的に記憶されることを示している。
【0049】
いくつかの実施形態によれば、コア割り当て807は、マスタブートレコード(MBR)821の実行中に、ブートコンポーネントによってブートプロセス中に生成される。MBR821を実行する前に、或るBIOS命令がブートメモリ802から実行される。BIOS804は、最終的に、MBR821のブートローダをアクティブにし、BIOS804は、マザーボード801及びデバイス800の直接制御を停止する。MBR821は、OS822用のブートローダを含む。ブートローダは、フェッチコードを起動するブートストラップスレッド(例えば、プロセッサ(0)のコア(0)のスレッド(0))を実行する。フェッチコードは、特定のアドレスから開始して、ハードドライブ808のアクティブパーティション809の第1のセクタから追加の命令を引き出す。追加の命令は、コア割り当て807を生成する命令を含む。また、追加の命令は、OSをシステムメモリ820にロードし、コア割り当てを生成した後にOS822を初期化する命令を含む。
【0050】
したがって、いくつかの実施形態によれば、コア割り当て807は、OS822の一部又は全てをロードして動作する前に生成される。ブートローダの命令は、初期化されると、OS822を、コンピューティングデバイス800上でユーザ定義命令を実行する状態に置くことによって、OS822を開始する。OS822の初期化中、OS822は、カーネル823を開始及び初期化する。カーネル823は、コア割り当て807を使用して、プロセス命令をプロセッサコア811~814に提供する。
【0051】
図8に関して、コア割り当て807は、ACPI803、ブートローダ、MBR821、OS822、又は、これらの組み合わせの命令によって生成される。1つの例示的な実施形態によれば、コア割り当て807は、BIOS804がマザーボード801を制御するのを停止した後に、ブートローダの命令の実行によってトリガされた命令によって提供される。いくつかの実施形態によれば、システムメモリ820内で動作可能な命令は、物理コアアドレス(例えば、バス番号)を、コアインデックス806で表されるようなブートメモリ802内のACPIフレームワーク803のACPIレジスタから読み出す。命令は、複数の利用可能な割り当てスキームのうち1つに従って、レジスタ805内のコアインデックス806(0~3が番号付けされている)として示された物理コア811~814の各々に対して1つずつ、コア割り当て807のセットを決定する。
図8に示すように、レジスタ805は、MBR821の一部としてシステムメモリ820内に存在する。後続の命令は、レジスタ805の情報を使用してコア割り当てを生成する。
【0052】
コア割り当て807を決定命令は、複数の形式のうち1つをとる。例えば、命令は、プロセッサ810のコアのN個の数のN乗の数の順列のうち1つに対応する1つ以上の行を有するコア順列テーブルを使用する。コアの数は、ブートプロセス中にACPIフレームワーク803の1つ以上のレジスタを読み出すことによって、MBR821の命令又はMBR821のブートローダによってブートプロセス中に決定されてもよい。別の例として、MBR821の命令は、コア割り当て807の一部又は全てを生成するために呼び出される乱数生成アルゴリズムを含む。第1の変形例によれば、デフォルトコアC(0)の第1のランダム又は疑似ランダム割り当ては、利用可能なコア811~814間で生成される。続いて、他のコアの各々は、残りのコア割り当て807を生成するために、バス順序で順次割り当てられる。コア割り当て807を行うための第2の変形例によれば、コア(C(0)~C(3))の各々は、ランダム又は疑似ランダムに割り当てられる。コア割り当て807を生成するための命令は、OS822のカーネル823で利用可能な割り当て807を存続すること、又は、そうでなければ割り当て807を生成することを含む。そうするための1つのメカニズムは、ACPIフレームワーク803の特定のレジスタ又はACPIフレームワーク803の1つ以上の各々のACPIテーブルの1つ以上のACPIテーブルエントリを書き込む又は再書き込みする命令を実行することを含む。いくつかの実施形態によれば、MBR821は、コア割り当て807を存続する命令を含む。
【0053】
図9は、いくつかの実施形態による、ブートローダ命令、マスタブートレコード命令、カーネル命令、OS命令、又は、これらの組み合わせによって、マルチコアプロセッサのコアを指定する方法900を示すフロー図である。ブロック901において、システムメモリ内の命令は、プロセッサのコアアドレスをブートメモリから読み出す。例えば、ブートローダ命令は、マルチコアプロセッサのコアのセットに対応するACPIレジスタのグループからバス番号を読み出す。ブロック902において、コア割り当ては、マルチコアプロセッサのコアのセットのコア毎に生成される。コア割り当ては、他の図に関連して説明する様々な方法のうち1つに従って生成される。ブロック903において、コア割り当てに基づいて、コアアドレスが、ブートメモリ等のメモリに書き込まれる。次に、新たに生成されたコア割り当ては、プロセスの実行をスケジュールする際に、オペレーティングシステムのカーネルのスケジューラによって使用される。いくつかの実施形態によれば、この方法900を使用して、オペレーティングシステムは、オペレーティングシステムの構成、プログラミング又は実行を実質的に変更することなく、従来の方法でプロセスを実行することができ、マルチコアプロセッサの寿命に亘って、少なくとも1つのデフォルトコアC(0)を第1のコア指定としてマルチコアプロセッサの各コアに割り当てることによって全てのコアをほぼ等しくエージングすることによって、マルチコアプロセッサの寿命を延ばすことができる。
【0054】
いくつかの実施形態では、上記の装置及び技術は、
図1~
図9を参照して上述したマルチコアプロセッサ等の1つ以上の集積回路(IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を含むデバイス又はシステムに実装される。これらのICデバイスの設計及び製造には、電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールが使用される。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【0055】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、キャッシュ)、不揮発性メモリ(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし(例えば、システムRAM又はROM)、コンピュータシステムに固定的に取り付けられてもよいし(例えば、磁気ハードドライブ)、コンピュータシステムに着脱可能に取り付けられてもよいし(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい(例えば、ネットワークアクセス可能なストレージ(NAS))。
【0056】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0057】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0058】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。