(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-17
(45)【発行日】2022-10-25
(54)【発明の名称】アクセラレータ要求を処理する際の中央処理装置の処理品質保証の実施
(51)【国際特許分類】
G06F 11/34 20060101AFI20221018BHJP
G06F 11/30 20060101ALI20221018BHJP
G06F 9/48 20060101ALI20221018BHJP
【FI】
G06F11/34 119
G06F11/34 133
G06F11/30 140H
G06F9/48 300F
(21)【出願番号】P 2020557323
(86)(22)【出願日】2019-02-14
(86)【国際出願番号】 US2019017933
(87)【国際公開番号】W WO2019203919
(87)【国際公開日】2019-10-24
【審査請求日】2020-12-14
(32)【優先日】2018-04-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アルカプラバ バス
(72)【発明者】
【氏名】ジョセフ リー グレイトハウス
【審査官】杉浦 孝光
(56)【参考文献】
【文献】米国特許出願公開第2018/0069767(US,A1)
【文献】特開平11-015800(JP,A)
【文献】国際公開第03/063002(WO,A1)
【文献】米国特許出願公開第2015/0234677(US,A1)
【文献】特開2008-269152(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 11/28-11/36
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
オペレーティングシステ
ムの複数のスレッドを実行するように構成された回路を含む第1のプロセッサと、
前記第1のプロセッサに接続された第2のプロセッサであって、前記第2のプロセッサは、アプリケーションを実行し、処理されるシステムサービス要求を前記第1のプロセッサに送信するように構成された回路を含む、第2のプロセッサと、を備え、
前記第1のプロセッサは、
前記第1のプロセッサで実行されているスレッドが以前の時間間隔においてシステムサービス要求の処理に費やしたサイクルの数を監視することと、
前記オペレーティングシステムによって調整可能な閾値と、前記サイクルの数
と、に基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
システム。
【請求項2】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が
前記閾値よりも大きいと判別したことに応じて、第1の遅延量を追加することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、第2
の遅延量を追加することであって、前記第2の遅延量は、前記第1の遅延量よりも小さい、ことと、を含む、
請求項1のシステム。
【請求項3】
前記第1のプロセッサの回路は、前記サイクルの数が前記閾値よりも大きく、以前の遅延量が0よりも大きいことに応じて、前記第1の遅延量を、前記以前の遅延量よりも大きい値に設定するように構成されている、
請求項2のシステム。
【請求項4】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が
前記閾値よりも大きいと判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第1の期間だけ待機することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第2の期間だけ待機することであって、前記第2の期間は、前記第1の期間よりも短い、ことと、を含む、
請求項1のシステム。
【請求項5】
前記第1のプロセッサは、
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
請求項1のシステム。
【請求項6】
前記第1のプロセッサの回路は、
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することであって、前記オーバヘッドは、システムサービス要求の処理に費やされたサイクル、ユーザモードとカーネルモードとの間の遷移に費やされたサイクル、及び、低いサイクル当たりの命令(IPC)レートで実行するユーザモードで費やされたサイクル、のうち1つ以上を含む、ことと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
請求項1のシステム。
【請求項7】
第1のプロセッサによって、前記第1のプロセッサで実行されているスレッドが以前の時間間隔において第2のプロセッサによって生成されたシステムサービス要求を処理するのに費やしたサイクルの数を監視することと、
前記第1のプロセッサのスレッドが前記以前の時間間隔においてシステムサービス要求を処理するのに費やしたサイクルの数
と、オペレーティングシステムによって調整可能な閾値と、に基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、を含む、
方法。
【請求項8】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が
前記閾値よりも大きいと判別したことに応じて、第1の遅延量を追加することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、第2の遅延量を追加することであって、前記第2の遅延量は、前記第1の遅延量よりも小さい、ことと、を含む、
請求項
7の方法。
【請求項9】
前記サイクルの数が前記閾値よりも大きく、以前の遅延量が0よりも大きいことに応じて、前記第1の遅延量を、前記以前の遅延量よりも大きい値に設定することを含む、
請求項
8の方法。
【請求項10】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が
前記閾値よりも大きいと判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第1の期間だけ待機することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第2の期間だけ待機することであって、前記第2の期間は、前記第1の期間よりも短い、ことと、を含む、
請求項
7の方法。
【請求項11】
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、を含む、
請求項
7の方法。
【請求項12】
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することであって、前記オーバヘッドは、システムサービス要求の処理に費やされたサイクル、ユーザモードとカーネルモードとの間の遷移に費やされたサイクル、及び、低いサイクル当たりの命令(IPC)レートで実行するユーザモードで費やされたサイクル、のうち1つ以上を含む、ことと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、を含む、
請求項
7の方法。
【請求項13】
装置であって、
前記装置は、
1つ以上の実行ユニットで実行されているスレッドが以前の時間間隔においてシステムサービス要求の処理に費やしたサイクルの数を監視することと、
オペレーティングシステムによって調整可能な閾値と、前記サイクルの数
と、に基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
装置。
【請求項14】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が
前記閾値よりも大きいと判別したことに応じて、第1の遅延量を追加することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、第2の遅延量を追加することであって、前記第2の遅延量は、前記第1の遅延量よりも小さい、ことと、を含む、
請求項
13の装置。
【請求項15】
前記装置は、前記サイクルの数が前記閾値よりも大きく、以前の遅延量が0よりも大きいことに応じて、前記第1の遅延量を、前記以前の遅延量よりも大きい値に設定するように構成されている、
請求項
14の装置。
【請求項16】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が
前記閾値よりも大きいと判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第1の期間だけ待機することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第2の期間だけ待機することであって、前記第2の期間は、前記第1の期間よりも短い、ことと、を含む、
請求項
13の装置。
【請求項17】
前記装置は、
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
請求項
13の装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、アメリカ合衆国エネルギー省によって授与されたLawrence Livermore National Security、元請負契約番号DE-AC52-07NA27344、下請契約番号B620717によるPathForward Projectの下で政府の支援によりなされた。アメリカ合衆国政府は、本発明において一定の権利を有する。
【背景技術】
【0002】
現代のシステムオンチップ(SoC)は、多数の異なるタイプの構成要素をシングルチップ又はマルチチップモジュール上で統合することが多い。例えば、典型的なSoCは、メインプロセッサ(例えば、中央処理装置(CPU))を、統合グラフィックス処理ユニット(GPU)及びメディアエンジン等のアクセラレータと共に含む。これらのアクセラレータの性能が次第に向上するにつれて、ページフォールト、ファイルシステムアクセス又はネットワークアクセス等の複雑なオペレーティングシステム(OS)サービスを直接呼び出すことが期待される。しかしながら、OSは、アクセラレータ上で動作しない。したがって、これらのアクセラレータシステムサービス要求(SSR)は、CPU上で動作するOSによって処理される必要がある。これらのアクセラレータSSRは、同時に発生するCPUアプリケーションと著しく干渉する。多くの場合、アクセラレータからSSRを処理することからの有害な干渉に起因して、同時に発生するCPUアプリケーションにおいて著しい性能劣化及びエネルギー効率の低下が発生する。
【0003】
添付の図面と共に以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良好に理解することができる。
【図面の簡単な説明】
【0004】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】CPU及びアクセラレータを有するコンピューティングシステムの一実施形態のブロック図である。
【
図3】一実施形態による、アクセラレータSSRの処理に関連するオーバヘッドを示すタイミング図である。
【
図4】アクセラレータSSRを処理するスキームの別の実施形態のブロック図である。
【
図5】アクセラレータからの要求を処理しながらCPUのサービス品質保証を実施する方法の一実施形態を示す一般化されたフローチャートである。
【
図6】要求の処理に追加される遅延を動的に調整する方法の一実施形態を示す一般化されたフローチャートである。
【
図7】システムサービス要求(SSR)を処理する方法の一実施形態を示す一般化されたフローチャートである。
【発明を実施するための形態】
【0005】
以下の説明では、本明細書で提示される方法及びメカニズムの十分な理解をもたらすように、多数の特定の詳細が示されている。しかしながら、当業者は、これらの特定の詳細無しに様々な実施形態を実施し得ることを認識すべきである。いくつかの例では、本明細書で説明するアプローチを曖昧にすることを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図面に示す要素が必ずしも縮尺通りに描かれていないことが認識されよう。例えば、いくつかの要素の寸法は、他の要素と比較して誇張されている場合がある。
【0006】
アクセラレータシステムのサービス要求に直面して中央処理装置(CPU)サービス品質(QoS)保証を実施する様々なシステム、装置、方法及びコンピュータ可読媒体が本明細書で開示される。一実施形態では、システムは、少なくともCPU及びアクセラレータを含む。アクセラレータは、グラフィックス処理ユニット(GPU)又は他のタイプの処理ユニットである。いくつかの実施形態では、システムは、複数のアクセラレータを含む。一実施形態では、CPUは、オペレーティングシステム(OS)を実行し、アクセラレータは、アプリケーションを実行する。アクセラレータアプリケーションがOSからの支援を必要とする場合、アクセラレータアプリケーションは、処理するためにシステムサービス要求(SSR)をCPUに送信する。特定のアプリケーションの場合、アクセラレータは、処理するために多数のSSRをCPUに送信する。CPUは、OSがアクセラレータ(複数可)からのSSRの処理に費やした時間を監視するように構成されているる。様々な実施形態では、時間は、周期的に測定される。他の実施形態では、異なる時間の測定が使用される。説明を容易にするために、周期的な時間の追跡について本明細書で使用される。一実施形態では、SSRを処理することに関与するOSルーチンは、CPU使用サイクルを追跡する。
【0007】
一実施形態では、カーネルバックグラウンドスレッドは、周期的に起動して、以前の時間間隔においてSSRの処理に費やしたCPUサイクル数が指定された制限を超えているかどうかを判別する。一実施形態では、制限は、アドミニストレータによって指定される。別の実施形態では、ソフトウェアアプリケーションは、動作条件に基づいて、制限の値を動的に調整する。一実施形態では、カーネルワーカスレッドは、調整可能な量の遅延を新たに受信したSSRの処理に追加し、この遅延は、以前の時間間隔においてSSRの処理に費やしたCPUオーバヘッド(例えば、CPU時間の割合)に基づいて計算される。例えば、一実施形態では、SSRの処理の開始時に、カーネルワーカスレッドは、SSRの処理に費やしたCPU時間の割合が、指定された閾値を超えているかどうかをチェックする。カーネルワーカスレッドは、カーネルバックグラウンドスレッドによって収集された情報を使用して、このチェックを実行する。SSRの処理に費やしたCPU時間の割合が指定された閾値を下回る場合、カーネルワーカスレッドは、所望の遅延を0に設定し、SSRの処理を直ちに続ける。そうでなく、SSRの処理に費やしたCPU時間の割合が指定された閾値よりも大きい場合、カーネルワーカスレッドは、指数バックオフ(exponential back-off)に基づいて、SSRの処理における遅延量を設定する。例えば、一実施形態では、所望の遅延が以前に0よりも大きかった場合、カーネルワーカスレッドは、遅延を、以前の遅延値よりも大きい値に増加させる。例えば、様々な実施形態では、新たな遅延値は、以前の値の倍数(例えば、2x、3x等)であってもよい。他の実施形態では、新たな遅延値は、以前の遅延値の倍数でなく、より大きな値であってもよい。そうでなく、所望の遅延が以前に0であった場合、カーネルワーカスレッドは、新たな遅延値を初期の公称値(例えば、10マイクロ秒)に設定する。SSRの処理は、この量だけ遅延される。
【0008】
遅延が増加するにつれて、アクセラレータ(複数可)がストールし始め、SSRレートが最終的に低下する。CPUオーバヘッドが設定された制限を下回ると、SSRは、人為的な遅延無しに再度処理される。さらに、一実施形態では、アクセラレータSSRの処理は、この処理がCPUアプリケーション(複数可)と干渉する場合にのみ、自動的に抑制される。この実施形態では、CPUがアイドル状態である場合、SSRは、CPUオーバヘッドが制限を超えていても、できるだけ迅速に処理される。一実施形態では、このチェックは、ランリスト(runlist)において待機している他のプロセスについてOSスケジューラにクエリすることによって実施される。
【0009】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、プロセッサ105A~105Nと、入力/出力(I/O)インタフェース120と、バス125と、メモリコントローラ(複数可)130と、ネットワークインタフェース135と、メモリデバイス(複数可)140と、を少なくとも含む。他の実施形態では、コンピューティングシステム100は他の構成要素を含み、及び/又は、コンピューティングシステム100は異なって構成されている。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
【0010】
一実施形態では、プロセッサ105Aは、中央処理装置(CPU)等の汎用プロセッサである。この実施形態では、プロセッサ105Nは、アクセラレータエンジンである。例えば、一実施形態では、プロセッサ105Nは、高度並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)及び特定用途向け集積回路(ASIC)等を含む。いくつかの実施形態では、プロセッサ105A~105Nは、複数のアクセラレータエンジンを含む。これらの複数のアクセラレータエンジンは、処理のためにシステムサービス要求(SSR)をプロセッサ105Aに送信するように構成されている。プロセッサ105Aは、これらのSSRの処理に関連するオーバヘッドを監視するように構成されている。実施形態に応じて、プロセッサ105Aは、CPUサイクルの数、全CPUサイクルの割合、時間の量、及び/又は、他の基準に基づいて、オーバヘッドを監視する。以前の時間間隔に対するオーバヘッドが閾値を超える場合、プロセッサ105Aは、SSRの処理を遅延させ、及び/又は、SSRの処理に費やすリソースの量を減少させる。
【0011】
メモリコントローラ(複数可)130は、I/Oインタフェース120に接続されたプロセッサ105A~105N及びI/Oデバイス(図示省略)によってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ(複数可)130は、任意の数及びタイプのメモリデバイス(複数可)140に接続されている。メモリデバイス(複数可)140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス(複数可)140のメモリのタイプは、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)等を含む。
【0012】
I/Oインタフェース120は、任意の数及びタイプのI/Oインタフェース(例えば、PCI(Peripheral Component Interconnect)バス、PCI-Extended(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表す。様々なタイプの周辺デバイスがI/Oインタフェース120に接続される。このような周辺デバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶装置、ネットワークインタフェースカード等を含むが、これらに限定されない。ネットワークインタフェース135は、ネットワークを介してネットワークメッセージを送受信するために使用される。
【0013】
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム若しくはデバイスである。コンピューティングシステム100の構成要素の数は、実施形態によって異なることに留意されたい。例えば、他の実施形態では、
図1に示す数よりも多い又は少ない各構成要素が存在する。また、他の実施形態では、コンピューティングシステム100は、
図1に示されていない他の構成要素を含むことに留意されたい。さらに、他の実施形態では、コンピューティングシステム100は、
図1に示す以外の方法で構成されている。
【0014】
図2を参照すると、CPU及びアクセラレータを有するシステム200の一実施形態のブロック図が示されている。CPU205は、アクセラレータ215に接続されており、CPU205及びアクセラレータ215の両方は、システムメモリ220に接続されている。CPU205は、任意の数のコアを表すコア210A~210Cを含む。コア210A~210Cは、本明細書では「実行ユニット」とも呼ばれる。アクセラレータ215によって生成されたシステムサービス要求(SSR)を処理するCPU205のフローの一例を
図2に示す。アクセラレータ215は、システムメモリ220内のキュー230に引数を設定することによって開始する。次に、アクセラレータ215は、SSRをコア210Aに送信する。一実施形態では、コア210Aは、コア210B上にボトムハーフ割り込みハンドラをスケジュールするトップハーフ割り込みハンドラを実行する。ボトムハーフ割り込みハンドラは、ソフトウェアワークキュー225及びキュー230にワークキューを設定し、コア210C上のカーネルワーカスレッドをエンキューする。カーネルワーカスレッドは、ソフトウェアワークキュー225にアクセスすることによってSSRを処理する。次に、カーネルワーカスレッドは、SSRを処理し、システムサービス応答を生成し、アクセラレータ215に伝達する。
【0015】
図2は、一実施形態による、アクセラレータSSRの処理の一例を示すことを理解されたい。他の実施形態では、他のステップ及び/又は他の順序のステップを含む、アクセラレータSSRを処理する他のスキームが使用される。
図2に示すアプローチの1つの欠点は、要求の数がCPU205の性能に影響を与え始めた場合に、アクセラレータ215によって生成された要求を抑制する能力をCPU205が欠いていることである。例えば、別の実施形態では、CPU205は、複数のアクセラレータに接続されており、複数のアクセラレータの各々は、短期間に多数のSSRを生成する。
【0016】
図3を参照すると、アクセラレータSSRの処理に関連するオーバヘッドを示すタイミング
図300の一実施形態が示されている。
図3のタイミング
図300は、CPU205が、アクセラレータ215によって生成されたSSRを処理する、
図2に示すステップに対応している。タイミング
図300の最上段は、アクセラレータ215のイベントのタイミングを示している。一実施形態では、アクセラレータ215は、コア210Aによって処理される割り込み305を生成する。領域310は、CPU205がユーザモードとカーネルモードとの間の遷移に費やす間接的なCPUオーバヘッドを表している。領域315は、ボトムハーフ割り込みハンドラをスケジュールすることに費やされた時間を表している。ボトムハーフ割り込みハンドラをスケジュールした後、領域320は、カーネルモードとユーザモードとの間の遷移のための別の間接的なCPUオーバヘッドを表している。領域325は、SSRの処理において、カーネルがプロセッサの様々なリソース(例えば、キャッシュ及びトランスレーションルックアサイドバッファ(TLB)空間等)を使用することに起因して、低いサイクル当たりの命令(IPC)レートにおいて実行するユーザモードで費やされた時間を表している。これにより、他のCPUタスクに利用可能なリソースが減少することになる。一実施形態では、ワーカスレッドが、SSRの処理に費やされたCPUオーバヘッドを計算する場合に、ワーカスレッドは、ユーザモードとカーネルモードとの間の遷移に関連する間接的なCPUオーバヘッドと、オーバヘッドの計算において低いIPCレートで実行するユーザモードで費やされた時間と、を含む。
【0017】
コア210Bについて示された段では、領域330は、ユーザモードからカーネルモードへの遷移に費やされた間接的なCPUオーバヘッドを表している。領域335は、ボトムハーフ割り込みハンドラの実行に費やされた時間を表している。領域340は、カーネルモードからユーザモードへの遷移に費やされた間接的なCPUオーバヘッドを表している。領域345は、SSRの処理においてカーネルがプロセッサの様々なリソースを使用することに起因して、低いIPCレートで実行するユーザモードで費やされた間接的なCPUオーバヘッドを表している。
【0018】
ボトムハーフ割り込みハンドラは、コア210C上でカーネルワーカスレッドを開始する。領域350は、ユーザモードからカーネルモードへの遷移に費やされた間接的なCPUオーバヘッドを表している。領域355は、カーネルワーカスレッドがアクセラレータのSSRを処理することによって費やされた時間を表している。アクセラレータのSSRを処理した後、カーネルワーカスレッドは、カーネルモードからユーザモードに遷移する間接的なオーバヘッド(領域360によって表される)と、低いIPCレートで実行するユーザモードで費やされた時間(領域365によって表される)と、を経験する。
【0019】
CPU205がSSRの処理に費やした時間に加えて、アクセラレータ215は、期間370によって示すように、SSRを処理するCPU205のレイテンシに起因するストールを経験する。アクセラレータ215は、レイテンシ隠蔽機能を有するが、SSRを処理するCPU205のレイテンシは、アクセラレータ215によって隠蔽可能な時間より長くてもよい。タイミング
図300によって示されるイベントに見られるように、アクセラレータSSRは、CPU性能に直接及び間接的に影響を与え、CPUによるSSRの処理も、アクセラレータの性能に影響を与える。
【0020】
図4を参照すると、アクセラレータSSRを処理するスキームの別の実施形態のブロック図が示されている。
図2に示すスキームと同様に、CPU405は、アクセラレータ415に接続されており、CPU405及びアクセラレータ415の両方は、システムメモリ420に接続されている。CPU405は、任意の数のコアを表すコア410A~410Cを含む。アクセラレータ415は、システムメモリ420内のキュー430に引数を設定することによって開始する。次に、アクセラレータ415は、SSRをコア410Aに送信する。一実施形態では、コア410Aは、コア410B上でボトムハーフ割り込みハンドラをスケジュールするトップハーフ割り込みハンドラを実行する。ボトムハーフ割り込みハンドラは、ソフトウェアワークキュー425及びキュー430にワークキューを設定し、コア410C上のカーネルワーカスレッドをエンキューする(待ち行列に入れる)。しかしながら、
図2に示すスキームとは対照的に、ガバナ(governor)440は、カーネルワーカスレッドがSSRを処理する前に、カーネルワーカスレッドをどれだけ長く遅延させるかを決定する。一実施形態では、ガバナ440は、カウンタ442を使用して遅延を実施する。カウンタ442は、クロックサイクルのカウント又は任意の他の適切な時間尺度を使用して実施されてもよい。この遅延の後、カーネルワーカスレッドは、SSRを処理し、システムサービス応答を生成してアクセラレータ415に伝達する。実施形態に応じて、ガバナ440は、OSスレッドとして、ドライバの一部として、又は、ハードウェア及び/若しくはソフトウェアの任意の適切な組み合わせとして実装される。
【0021】
一実施形態では、SSRの処理に費やされたCPU時間が所望のレートよりも高い場合に、既に到着したSSRの処理を遅延させることによってSSRレートが調整される。この遅延は、最終的に、新たなSSR要求の生成を停止するようにアクセラレータ415にバックプレッシャ(back-pressure)をかける。アクセラレータSSRを無条件に拒否する代わりにSSRの処理に遅延を加えることによって、このスキームは、アクセラレータがSSRを生成する方法に如何なる修正も必要とすることなく実施される。一実施形態では、ガバナ440は、SSRの処理に費やされたCPU時間に基づいて、SSRの処理を遅延させるかどうかを決定する。一実施形態では、ガバナ440は、カーネルワーカスレッドとして実装される。
【0022】
一実施形態では、SSRの処理に関与する全てのOSルーチンは、CPUサイクルを追跡する。この情報は、カーネルバックグラウンドスレッドによって使用される。カーネルバックグラウンドスレッドは、周期的(例えば、10マイクロ秒毎)に起動して、その期間内にSSRの処理に費やされたCPUサイクルの数が、指定された制限を超えているかどうかを計算する。一実施形態では、制限は、アドミニストレータによって指定される。別の実施形態では、制限は、所定の時点で実行されているアプリケーションの特性に基づいて、OSによって動的に設定される。
【0023】
さらに、カーネルワーカスレッドは、
図4に示すように、SSRを処理する。SSRの処理の開始時に、ワーカスレッドは、SSRの処理に費やされたCPUサイクルが、指定された閾値を超えているかどうかをチェックする。ワーカスレッドは、SSRの処理に費やされたCPUサイクルが、指定された閾値を超えているかどうかを判別するために、バックグラウンドスレッドによって収集された情報を利用する。SSRの処理に費やされたCPUサイクルの数が指定された閾値以下である場合、ワーカスレッドは、所望の遅延を0に設定し、SSRの処理を直ちに続ける。そうでなく、SSRの処理に費やされたCPU時間が指定された閾値を超えた場合、ワーカスレッドは、SSRの処理に追加する遅延量を決定する。ワーカスレッドは、後続のSSRを処理する前に、この遅延量だけ待機する。SSRの処理を遅延させることによって、ガバナ440は、アクセラレータ415のSSR生成レートを抑制する。例えば、アクセラレータ415は、典型的には、各SSRに関連する状態を記憶するための限られた空間を有する。よって、SSRを遅延させることは、アクセラレータ415がSSR生成レートを低下させることをもたらす。
【0024】
一実施形態では、ワーカスレッドは、SSRを処理するための遅延量を設定するために、指数バックオフスキームを使用する。ワーカスレッドが指数バックオフスキームを使用する一例は、
図5の方法500に関する説明において以下により詳細に説明する。例えば、一実施形態では、所望の遅延が以前に0より大きかった場合、ワーカスレッドは、遅延を増加させる。そうでなく、所望の遅延が以前に0であった場合、ワーカスレッドは、遅延を初期値(例えば、5マイクロ秒)に設定する。SSRの処理は、ワーカスレッドによって決定された量だけ遅延される。遅延が増加するにつれて、アクセラレータ415がストールし始め、SSR生成レートが最終的に低下する。オーバヘッドが閾値を下回ると、SSRは、人為的な遅延無しに再度処理される。
【0025】
他の実施形態では、ガバナ440は、QoS保証メカニズムを実装するために、他の技術を使用する。例えば、別の実施形態では、ガバナ440は、SSRの処理にどれだけの遅延を追加するかを決定するためのルックアップテーブルを維持する。この実施形態では、SSRの処理に費やされたCPUサイクルの数が計算される場合、この数は、後続のSSRの処理に追加するために対応する遅延値を取得するためのルックアップテーブルへの入力として使用される。他の実施形態では、ガバナ440は、他の適切なタイプのQoS保証メカニズムを実装する。
【0026】
図5を参照すると、アクセラレータからの要求を処理しながらCPUに対するQoS保証を実施する方法500の一実施形態が示されている。説明のために、この実施形態におけるステップ及び
図6~
図7のステップは、順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素のうち1つ以上は、同時に実行されてもよいし、図示した順序とは異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れも、方法500を実施するように構成されている。
【0027】
CPUは、アクセラレータからのシステムサービス要求(SSR)の処理に費やされたCPUサイクルの数が閾値よりも大きいかどうかを判別する(条件付きブロック505)。本明細書では、CPUを第1のプロセッサと呼び、アクセラレータを第2のプロセッサと呼ぶことに留意されたい。別の実施形態では、CPUは、条件付きブロック505において、複数のアクセラレータからのSSRの処理に費やされたCPUサイクルの数を追跡する。SSRの処理に費やされたCPUサイクルの数が閾値以下である場合(条件付きブロック505:「いいえ」)、CPUは、遅延を0に設定する(ブロック510)。そうでなく、SSRの処理に費やされたCPUサイクルの数が閾値よりも大きい場合(条件付きブロック505:「はい」)、スレッドは、現在、遅延が0よりも大きいかどうかを判別する(条件付きブロック515)。
【0028】
遅延が現在0に等しい場合(条件付きブロック515:「いいえ」)、スレッドは、遅延を初期値(例えば、10マイクロ秒)に設定する(ブロック520)。初期値は、実施形態に応じて異なる。そうでなく、遅延が現在0よりも大きい場合(条件付きブロック515:「はい」)、スレッドは、遅延の値を増加させる(ブロック525)。次に、ブロック520又は525の後、スレッドは、アクセラレータから新たなSSRを受信する(ブロック530)。新たなSSRを処理する前に、スレッドは、遅延の現在値と同じ期間、スリープする(ブロック535)。ブロック535において使用される「スリープ」という用語は、新たなSSRの処理を開始する前に、遅延の現在値に等しい時間だけ待機することを意味することに留意されたい。「遅延」に等しい期間スリープした後、スレッドは、新たなSSRを処理し、結果をアクセラレータに返す(ブロック540)。ブロック540の後、方法500は終了する。
【0029】
図6を参照すると、要求の処理に追加される遅延を動的に調整する方法600の一実施形態が示されている。第1のプロセッサは、以前の時間間隔の間に、第1のプロセッサのスレッドが第2のプロセッサによって生成された要求を処理するのに費やしたサイクルの数を監視する(ブロック605)。別の実施形態では、サイクルの数を単に監視するのではなく、第1のプロセッサは、第2のプロセッサによる要求を処理することに伴うオーバヘッドを監視する。オーバヘッドは、複数の成分を含む。例えば、オーバヘッドは、要求の処理に実際に費やされた時間、ユーザモードとカーネルモードとの間の遷移に費やされた間接的なCPUオーバヘッド、カーネルがプロセッサの様々なリソースを使用したことに起因して低いIPCレートで実行するユーザモードで費やされた時間を含む。一実施形態では、第1のプロセッサは、CPUであり、第2のプロセッサは、アクセラレータ(例えば、GPU)である。他の実施形態では、第1のプロセッサ及び第2のプロセッサは、他のタイプのプロセッサである。サイクルの数がカウントされる時間間隔の長さは、実施形態によって異なる。
【0030】
以前の時間間隔の間に第1のプロセッサのスレッドが第2のプロセッサによって生成された要求を処理するのに費やしたサイクルの数が閾値よりも大きい場合(条件付きブロック610:「はい」)、第1のプロセッサは、第2のプロセッサからの後続の要求の処理に第1の遅延の量を追加する(ブロック615)。そうでなく、以前の時間間隔の間に第1のプロセッサのスレッドが第2のプロセッサによって生成された要求を処理するのに費やしたサイクルの数が閾値以下である場合(条件付きブロック610:「いいえ」)、第1のプロセッサは、第2のプロセッサからの後続の要求の処理に第2の遅延の量を追加する。第2の遅延の量は、第1の遅延の量よりも少ない(ブロック620)。いくつかのケースでは、第2の遅延の量は0であり、第1のプロセッサは、後続の要求を直ちに処理する。ブロック615及び620の後、方法600は終了する。
【0031】
図7を参照すると、システムサービス要求(SSR)を処理する方法700の一実施形態が示されている。第1のプロセッサは、第2のプロセッサからSSRを受信する(ブロック705)。一実施形態では、第1のプロセッサは、CPUであり、第2のプロセッサは、アクセラレータ(例えば、GPU)である。他の実施形態では、第1のプロセッサ及び第2のプロセッサは、他のタイプのプロセッサである。第1のプロセッサは、第2のプロセッサからSSRを受信したことに応じて、第1の条件が検出されたかどうかを判別する(条件付きブロック710)。一実施形態では、第1の条件は、以前の時間間隔において第2のプロセッサ(オプションで、1つ以上の他のプロセッサ)からのSSRを処理するための第1のプロセッサ上のオーバヘッドが閾値よりも大きいことである。オーバヘッドは、SSRの処理に実際に費やされたサイクル、SSRの処理前後のユーザモードとカーネルモードとの間の遷移に費やされたサイクル、及び、マイクロアーキテクチャ状態の劣化(例えば、利用可能なリソースが少なくなるようなプロセッサリソースの消費)による低いIPCレートで実行するユーザモードで費やされたサイクル等を含む。他の実施形態では、第1の条件は、様々な他のタイプの条件、又は、複数の条件の組み合わせである。
【0032】
第1の条件が検出された場合(条件付きブロック710:「はい」)、第1のプロセッサは、SSRの処理を開始する前に第1の量の時間だけ待機する(ブロック715)。或いは、第1のプロセッサは、第1の条件が検出された場合に、SSRの処理の実施に対して第1の優先度を割り当てる。第1の条件が検出されていない場合(条件付きブロック710:「いいえ」)、第1のプロセッサは、SSRの処理を開始する前に第2の量の時間だけ待機する。第2の量の時間は、第1の量の時間よりも短い(ブロック720)。いくつかのケースでは、第2の量の時間は0であり、第1のプロセッサはSSRを直ちに処理する。或いは、別の実施形態では、第1のプロセッサは、第1の条件が検出されなかった場合に、SSRの処理に対して第2の優先度を割り当てる。第2の優先度は、第1の優先度よりも高い。ブロック715及び720の後、方法700は終了する。
【0033】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令は、本明細書で説明する方法及び/又はメカニズムを実施するために使用される。例えば、汎用プロセッサ又は特殊目的プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令は、高水準プログラミング言語によって表されている。他の実施形態では、プログラム命令は、高水準プログラミング言語からバイナリ、中間又は他の形式にコンパイルされる。或いは、ハードウェアの動作又は設計を記述するプログラム命令が記述される。このようなプログラム命令は、C言語等の高水準プログラミング言語によって表される。或いは、Verilog等のハードウェア設計言語(HDL)が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、使用中のコンピューティングシステムによってアクセスされ、プログラム実行のためにコンピューティングシステムにプログラム命令を提供するため。一般的に、このようなコンピューティングシステムは、1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を少なくとも含む。
【0034】
上述した実施形態は、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含するように解釈されることが意図される。