(57)【要約】システムサービス要求（ＳＳＲ）を処理する際にプロセッサのサービス品質保証を実施するシステム、装置及び方法が開示される。システムは、オペレーティングシステムを実行する第１のプロセッサと、第１のプロセッサによって処理されるＳＳＲを生成するアプリケーションを実行する第２のプロセッサと、を含む。第１のプロセッサは、以前の時間間隔においてＳＳＲを処理するのに費やされたサイクルの数を監視し、このサイクルの数が閾値を超える場合に、第１のプロセッサは、後続のＳＳＲの処理の遅延を開始する。一実施形態では、以前の遅延が０でなかった場合、第１のプロセッサは、後続のＳＳＲの処理において使用される遅延を増加させる。サイクルの数が閾値以下である場合、第１のプロセッサは、遅延無しにＳＳＲを処理する。遅延が増加するにつれて、第２のプロセッサがストールし始め、ＳＳＲ生成レートが低下し、第１のプロセッサの負荷が軽減される。【選択図】図４
2021521541.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムカーネルの複数のスレッドを実行するように構成された回路を含む第１のプロセッサと、
前記第１のプロセッサに接続された第２のプロセッサであって、前記第２のプロセッサは、アプリケーションを実行し、処理されるシステムサービス要求を前記第１のプロセッサに送信するように構成された回路を含む、第２のプロセッサと、を備え、
前記第１のプロセッサは、
前記第１のプロセッサで実行されているスレッドが以前の時間間隔においてシステムサービス要求の処理に費やしたサイクルの数を監視することと、
前記サイクルの数に基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
システム。
【請求項２】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が閾値よりも大きいと判別したことに応じて、第１の遅延量を追加することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、第２遅延量を追加することであって、前記第２の遅延量は、前記第１の遅延量よりも小さい、ことと、を含む、
請求項１のシステム。
【請求項３】
前記第１のプロセッサの回路は、前記サイクルの数が前記閾値よりも大きく、以前の遅延量が０よりも大きいことに応じて、前記第１の遅延量を、前記以前の遅延量よりも大きい値に設定するように構成されている、
請求項２のシステム。
【請求項４】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が閾値よりも大きいと判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第１の期間だけ待機することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第２の期間だけ待機することであって、前記第２の期間は、前記第１の期間よりも短い、ことと、を含む、
請求項１のシステム。
【請求項５】
前記閾値は、前記オペレーティングシステムカーネルによって動的に調整される、
請求項４のシステム。
【請求項６】
前記第１のプロセッサは、
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
請求項１のシステム。
【請求項７】
前記第１のプロセッサの回路は、
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することであって、前記オーバヘッドは、システムサービス要求の処理に費やされたサイクル、ユーザモードとカーネルモードとの間の遷移に費やされたサイクル、及び、低いサイクル当たりの命令（ＩＰＣ）レートで実行するユーザモードで費やされたサイクル、のうち１つ以上を含む、ことと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
請求項１のシステム。
【請求項８】
第１のプロセッサによって、前記第１のプロセッサで実行されているスレッドが以前の時間間隔において第２のプロセッサによって生成されたシステムサービス要求を処理するのに費やしたサイクルの数を監視することと、
前記第１のプロセッサのスレッドが前記以前の時間間隔においてシステムサービス要求を処理するのに費やしたサイクルの数に基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、を含む、
方法。
【請求項９】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が閾値よりも大きいと判別したことに応じて、第１の遅延量を追加することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、第２の遅延量を追加することであって、前記第２の遅延量は、前記第１の遅延量よりも小さい、ことと、を含む、
請求項８の方法。
【請求項１０】
前記サイクルの数が前記閾値よりも大きく、以前の遅延量が０よりも大きいことに応じて、前記第１の遅延量を、前記以前の遅延量よりも大きい値に設定することを含む、
請求項９の方法。
【請求項１１】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が閾値よりも大きいと判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第１の期間だけ待機することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第２の期間だけ待機することであって、前記第２の期間は、前記第１の期間よりも短い、ことと、を含む、
請求項８の方法。
【請求項１２】
前記閾値は、前記オペレーティングシステムカーネルによって動的に設定される、
請求項１１の方法。
【請求項１３】
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、を含む、
請求項８の方法。
【請求項１４】
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することであって、前記オーバヘッドは、システムサービス要求の処理に費やされたサイクル、ユーザモードとカーネルモードとの間の遷移に費やされたサイクル、及び、低いサイクル当たりの命令（ＩＰＣ）レートで実行するユーザモードで費やされたサイクル、のうち１つ以上を含む、ことと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、を含む、
請求項８の方法。
【請求項１５】
メモリと、
前記メモリに接続された１つ以上の実行ユニットと、を備える装置であって、
前記装置は、
前記１つ以上の実行ユニットで実行されているスレッドが以前の時間間隔においてシステムサービス要求の処理に費やしたサイクルの数を監視することと、
前記サイクルの数に基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
装置。
【請求項１６】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が閾値よりも大きいと判別したことに応じて、第１の遅延量を追加することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、第２の遅延量を追加することであって、前記第２の遅延量は、前記第１の遅延量よりも小さい、ことと、を含む、
請求項１５の装置。
【請求項１７】
前記装置は、前記サイクルの数が前記閾値よりも大きく、以前の遅延量が０よりも大きいことに応じて、前記第１の遅延量を、前記以前の遅延量よりも大きい値に設定するように構成されている、
請求項１６の装置。
【請求項１８】
前記所定のシステムサービス要求の処理に追加される遅延量を動的に調整することは、
前記サイクルの数が閾値よりも大きいと判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第１の期間だけ待機することと、
前記サイクルの数が前記閾値以下であると判別したことに応じて、前記所定のシステムサービス要求の処理を開始する前に、第２の期間だけ待機することであって、前記第２の期間は、前記第１の期間よりも短い、ことと、を含む、
請求項１５の装置。
【請求項１９】
前記閾値は、オペレーティングシステムによって設定される、
請求項１８の装置。
【請求項２０】
前記装置は、
前記以前の時間間隔でのシステムサービス要求の処理に関連するオーバヘッドを計算することと、
前記オーバヘッドに基づいて、所定のシステムサービス要求の処理に追加される遅延量を動的に調整することと、
を行うように構成されている、
請求項１５の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アメリカ合衆国エネルギー省によって授与されたＬａｗｒｅｎｃｅ  Ｌｉｖｅｒｍｏｒｅ  Ｎａｔｉｏｎａｌ  Ｓｅｃｕｒｉｔｙ、元請負契約番号ＤＥ−ＡＣ５２−０７ＮＡ２７３４４、下請契約番号Ｂ６２０７１７によるＰａｔｈＦｏｒｗａｒｄ  Ｐｒｏｊｅｃｔの下で政府の支援によりなされた。アメリカ合衆国政府は、本発明において一定の権利を有する。
【背景技術】
【０００２】
現代のシステムオンチップ（ＳｏＣ）は、多数の異なるタイプの構成要素をシングルチップ又はマルチチップモジュール上で統合することが多い。例えば、典型的なＳｏＣは、メインプロセッサ（例えば、中央処理装置（ＣＰＵ））を、統合グラフィックス処理ユニット（ＧＰＵ）及びメディアエンジン等のアクセラレータと共に含む。これらのアクセラレータの性能が次第に向上するにつれて、ページフォールト、ファイルシステムアクセス又はネットワークアクセス等の複雑なオペレーティングシステム（ＯＳ）サービスを直接呼び出すことが期待される。しかしながら、ＯＳは、アクセラレータ上で動作しない。したがって、これらのアクセラレータシステムサービス要求（ＳＳＲ）は、ＣＰＵ上で動作するＯＳによって処理される必要がある。これらのアクセラレータＳＳＲは、同時に発生するＣＰＵアプリケーションと著しく干渉する。多くの場合、アクセラレータからＳＳＲを処理することからの有害な干渉に起因して、同時に発生するＣＰＵアプリケーションにおいて著しい性能劣化及びエネルギー効率の低下が発生する。
【０００３】
添付の図面と共に以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良好に理解することができる。
【図面の簡単な説明】
【０００４】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】ＣＰＵ及びアクセラレータを有するコンピューティングシステムの一実施形態のブロック図である。
【図３】一実施形態による、アクセラレータＳＳＲの処理に関連するオーバヘッドを示すタイミング図である。
【図４】アクセラレータＳＳＲを処理するスキームの別の実施形態のブロック図である。
【図５】アクセラレータからの要求を処理しながらＣＰＵのサービス品質保証を実施する方法の一実施形態を示す一般化されたフローチャートである。
【図６】要求の処理に追加される遅延を動的に調整する方法の一実施形態を示す一般化されたフローチャートである。
【図７】システムサービス要求（ＳＳＲ）を処理する方法の一実施形態を示す一般化されたフローチャートである。
【発明を実施するための形態】
【０００５】
以下の説明では、本明細書で提示される方法及びメカニズムの十分な理解をもたらすように、多数の特定の詳細が示されている。しかしながら、当業者は、これらの特定の詳細無しに様々な実施形態を実施し得ることを認識すべきである。いくつかの例では、本明細書で説明するアプローチを曖昧にすることを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図面に示す要素が必ずしも縮尺通りに描かれていないことが認識されよう。例えば、いくつかの要素の寸法は、他の要素と比較して誇張されている場合がある。
【０００６】
アクセラレータシステムのサービス要求に直面して中央処理装置（ＣＰＵ）サービス品質（ＱｏＳ）保証を実施する様々なシステム、装置、方法及びコンピュータ可読媒体が本明細書で開示される。一実施形態では、システムは、少なくともＣＰＵ及びアクセラレータを含む。アクセラレータは、グラフィックス処理ユニット（ＧＰＵ）又は他のタイプの処理ユニットである。いくつかの実施形態では、システムは、複数のアクセラレータを含む。一実施形態では、ＣＰＵは、オペレーティングシステム（ＯＳ）を実行し、アクセラレータは、アプリケーションを実行する。アクセラレータアプリケーションがＯＳからの支援を必要とする場合、アクセラレータアプリケーションは、処理するためにシステムサービス要求（ＳＳＲ）をＣＰＵに送信する。特定のアプリケーションの場合、アクセラレータは、処理するために多数のＳＳＲをＣＰＵに送信する。ＣＰＵは、ＯＳがアクセラレータ（複数可）からのＳＳＲの処理に費やした時間を監視するように構成されているる。様々な実施形態では、時間は、周期的に測定される。他の実施形態では、異なる時間の測定が使用される。説明を容易にするために、周期的な時間の追跡について本明細書で使用される。一実施形態では、ＳＳＲを処理することに関与するＯＳルーチンは、ＣＰＵ使用サイクルを追跡する。
【０００７】
一実施形態では、カーネルバックグラウンドスレッドは、周期的に起動して、以前の時間間隔においてＳＳＲの処理に費やしたＣＰＵサイクル数が指定された制限を超えているかどうかを判別する。一実施形態では、制限は、アドミニストレータによって指定される。別の実施形態では、ソフトウェアアプリケーションは、動作条件に基づいて、制限の値を動的に調整する。一実施形態では、カーネルワーカスレッドは、調整可能な量の遅延を新たに受信したＳＳＲの処理に追加し、この遅延は、以前の時間間隔においてＳＳＲの処理に費やしたＣＰＵオーバヘッド（例えば、ＣＰＵ時間の割合）に基づいて計算される。例えば、一実施形態では、ＳＳＲの処理の開始時に、カーネルワーカスレッドは、ＳＳＲの処理に費やしたＣＰＵ時間の割合が、指定された閾値を超えているかどうかをチェックする。カーネルワーカスレッドは、カーネルバックグラウンドスレッドによって収集された情報を使用して、このチェックを実行する。ＳＳＲの処理に費やしたＣＰＵ時間の割合が指定された閾値を下回る場合、カーネルワーカスレッドは、所望の遅延を０に設定し、ＳＳＲの処理を直ちに続ける。そうでなく、ＳＳＲの処理に費やしたＣＰＵ時間の割合が指定された閾値よりも大きい場合、カーネルワーカスレッドは、指数バックオフ（exponential back-off）に基づいて、ＳＳＲの処理における遅延量を設定する。例えば、一実施形態では、所望の遅延が以前に０よりも大きかった場合、カーネルワーカスレッドは、遅延を、以前の遅延値よりも大きい値に増加させる。例えば、様々な実施形態では、新たな遅延値は、以前の値の倍数（例えば、２ｘ、３ｘ等）であってもよい。他の実施形態では、新たな遅延値は、以前の遅延値の倍数でなく、より大きな値であってもよい。そうでなく、所望の遅延が以前に０であった場合、カーネルワーカスレッドは、新たな遅延値を初期の公称値（例えば、１０マイクロ秒）に設定する。ＳＳＲの処理は、この量だけ遅延される。
【０００８】
遅延が増加するにつれて、アクセラレータ（複数可）がストールし始め、ＳＳＲレートが最終的に低下する。ＣＰＵオーバヘッドが設定された制限を下回ると、ＳＳＲは、人為的な遅延無しに再度処理される。さらに、一実施形態では、アクセラレータＳＳＲの処理は、この処理がＣＰＵアプリケーション（複数可）と干渉する場合にのみ、自動的に抑制される。この実施形態では、ＣＰＵがアイドル状態である場合、ＳＳＲは、ＣＰＵオーバヘッドが制限を超えていても、できるだけ迅速に処理される。一実施形態では、このチェックは、ランリスト（runlist）において待機している他のプロセスについてＯＳスケジューラにクエリすることによって実施される。
【０００９】
図１を参照すると、コンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、プロセッサ１０５Ａ〜１０５Ｎと、入力／出力（Ｉ／Ｏ）インタフェース１２０と、バス１２５と、メモリコントローラ（複数可）１３０と、ネットワークインタフェース１３５と、メモリデバイス（複数可）１４０と、を少なくとも含む。他の実施形態では、コンピューティングシステム１００は他の構成要素を含み、及び／又は、コンピューティングシステム１００は異なって構成されている。プロセッサ１０５Ａ〜１０５Ｎは、システム１００に含まれる任意の数のプロセッサを表す。
【００１０】
一実施形態では、プロセッサ１０５Ａは、中央処理装置（ＣＰＵ）等の汎用プロセッサである。この実施形態では、プロセッサ１０５Ｎは、アクセラレータエンジンである。例えば、一実施形態では、プロセッサ１０５Ｎは、高度並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）及び特定用途向け集積回路（ＡＳＩＣ）等を含む。いくつかの実施形態では、プロセッサ１０５Ａ〜１０５Ｎは、複数のアクセラレータエンジンを含む。これらの複数のアクセラレータエンジンは、処理のためにシステムサービス要求（ＳＳＲ）をプロセッサ１０５Ａに送信するように構成されている。プロセッサ１０５Ａは、これらのＳＳＲの処理に関連するオーバヘッドを監視するように構成されている。実施形態に応じて、プロセッサ１０５Ａは、ＣＰＵサイクルの数、全ＣＰＵサイクルの割合、時間の量、及び／又は、他の基準に基づいて、オーバヘッドを監視する。以前の時間間隔に対するオーバヘッドが閾値を超える場合、プロセッサ１０５Ａは、ＳＳＲの処理を遅延させ、及び／又は、ＳＳＲの処理に費やすリソースの量を減少させる。
【００１１】
メモリコントローラ（複数可）１３０は、Ｉ／Ｏインタフェース１２０に接続されたプロセッサ１０５Ａ〜１０５Ｎ及びＩ／Ｏデバイス（図示省略）によってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ（複数可）１３０は、任意の数及びタイプのメモリデバイス（複数可）１４０に接続されている。メモリデバイス（複数可）１４０は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス（複数可）１４０のメモリのタイプは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）等を含む。
【００１２】
Ｉ／Ｏインタフェース１２０は、任意の数及びタイプのＩ／Ｏインタフェース（例えば、ＰＣＩ（Peripheral Component Interconnect）バス、ＰＣＩ−Ｅｘｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットイーサネット（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々なタイプの周辺デバイスがＩ／Ｏインタフェース１２０に接続される。このような周辺デバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶装置、ネットワークインタフェースカード等を含むが、これらに限定されない。ネットワークインタフェース１３５は、ネットワークを介してネットワークメッセージを送受信するために使用される。
【００１３】
様々な実施形態では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム若しくはデバイスである。コンピューティングシステム１００の構成要素の数は、実施形態によって異なることに留意されたい。例えば、他の実施形態では、図１に示す数よりも多い又は少ない各構成要素が存在する。また、他の実施形態では、コンピューティングシステム１００は、図１に示されていない他の構成要素を含むことに留意されたい。さらに、他の実施形態では、コンピューティングシステム１００は、図１に示す以外の方法で構成されている。
【００１４】
図２を参照すると、ＣＰＵ及びアクセラレータを有するシステム２００の一実施形態のブロック図が示されている。ＣＰＵ２０５は、アクセラレータ２１５に接続されており、ＣＰＵ２０５及びアクセラレータ２１５の両方は、システムメモリ２２０に接続されている。ＣＰＵ２０５は、任意の数のコアを表すコア２１０Ａ〜２１０Ｃを含む。コア２１０Ａ〜２１０Ｃは、本明細書では「実行ユニット」とも呼ばれる。アクセラレータ２１５によって生成されたシステムサービス要求（ＳＳＲ）を処理するＣＰＵ２０５のフローの一例を図２に示す。アクセラレータ２１５は、システムメモリ２２０内のキュー２３０に引数を設定することによって開始する。次に、アクセラレータ２１５は、ＳＳＲをコア２１０Ａに送信する。一実施形態では、コア２１０Ａは、コア２１０Ｂ上にボトムハーフ割り込みハンドラをスケジュールするトップハーフ割り込みハンドラを実行する。ボトムハーフ割り込みハンドラは、ソフトウェアワークキュー２２５及びキュー２３０にワークキューを設定し、コア２１０Ｃ上のカーネルワーカスレッドをエンキューする。カーネルワーカスレッドは、ソフトウェアワークキュー２２５にアクセスすることによってＳＳＲを処理する。次に、カーネルワーカスレッドは、ＳＳＲを処理し、システムサービス応答を生成し、アクセラレータ２１５に伝達する。
【００１５】
図２は、一実施形態による、アクセラレータＳＳＲの処理の一例を示すことを理解されたい。他の実施形態では、他のステップ及び／又は他の順序のステップを含む、アクセラレータＳＳＲを処理する他のスキームが使用される。図２に示すアプローチの１つの欠点は、要求の数がＣＰＵ２０５の性能に影響を与え始めた場合に、アクセラレータ２１５によって生成された要求を抑制する能力をＣＰＵ２０５が欠いていることである。例えば、別の実施形態では、ＣＰＵ２０５は、複数のアクセラレータに接続されており、複数のアクセラレータの各々は、短期間に多数のＳＳＲを生成する。
【００１６】
図３を参照すると、アクセラレータＳＳＲの処理に関連するオーバヘッドを示すタイミング図３００の一実施形態が示されている。図３のタイミング図３００は、ＣＰＵ２０５が、アクセラレータ２１５によって生成されたＳＳＲを処理する、図２に示すステップに対応している。タイミング図３００の最上段は、アクセラレータ２１５のイベントのタイミングを示している。一実施形態では、アクセラレータ２１５は、コア２１０Ａによって処理される割り込み３０５を生成する。領域３１０は、ＣＰＵ２０５がユーザモードとカーネルモードとの間の遷移に費やす間接的なＣＰＵオーバヘッドを表している。領域３１５は、ボトムハーフ割り込みハンドラをスケジュールすることに費やされた時間を表している。ボトムハーフ割り込みハンドラをスケジュールした後、領域３２０は、カーネルモードとユーザモードとの間の遷移のための別の間接的なＣＰＵオーバヘッドを表している。領域３２５は、ＳＳＲの処理において、カーネルがプロセッサの様々なリソース（例えば、キャッシュ及びトランスレーションルックアサイドバッファ（ＴＬＢ）空間等）を使用することに起因して、低いサイクル当たりの命令（ＩＰＣ）レートにおいて実行するユーザモードで費やされた時間を表している。これにより、他のＣＰＵタスクに利用可能なリソースが減少することになる。一実施形態では、ワーカスレッドが、ＳＳＲの処理に費やされたＣＰＵオーバヘッドを計算する場合に、ワーカスレッドは、ユーザモードとカーネルモードとの間の遷移に関連する間接的なＣＰＵオーバヘッドと、オーバヘッドの計算において低いＩＰＣレートで実行するユーザモードで費やされた時間と、を含む。
【００１７】
コア２１０Ｂについて示された段では、領域３３０は、ユーザモードからカーネルモードへの遷移に費やされた間接的なＣＰＵオーバヘッドを表している。領域３３５は、ボトムハーフ割り込みハンドラの実行に費やされた時間を表している。領域３４０は、カーネルモードからユーザモードへの遷移に費やされた間接的なＣＰＵオーバヘッドを表している。領域３４５は、ＳＳＲの処理においてカーネルがプロセッサの様々なリソースを使用することに起因して、低いＩＰＣレートで実行するユーザモードで費やされた間接的なＣＰＵオーバヘッドを表している。
【００１８】
ボトムハーフ割り込みハンドラは、コア２１０Ｃ上でカーネルワーカスレッドを開始する。領域３５０は、ユーザモードからカーネルモードへの遷移に費やされた間接的なＣＰＵオーバヘッドを表している。領域３５５は、カーネルワーカスレッドがアクセラレータのＳＳＲを処理することによって費やされた時間を表している。アクセラレータのＳＳＲを処理した後、カーネルワーカスレッドは、カーネルモードからユーザモードに遷移する間接的なオーバヘッド（領域３６０によって表される）と、低いＩＰＣレートで実行するユーザモードで費やされた時間（領域３６５によって表される）と、を経験する。
【００１９】
ＣＰＵ２０５がＳＳＲの処理に費やした時間に加えて、アクセラレータ２１５は、期間３７０によって示すように、ＳＳＲを処理するＣＰＵ２０５のレイテンシに起因するストールを経験する。アクセラレータ２１５は、レイテンシ隠蔽機能を有するが、ＳＳＲを処理するＣＰＵ２０５のレイテンシは、アクセラレータ２１５によって隠蔽可能な時間より長くてもよい。タイミング図３００によって示されるイベントに見られるように、アクセラレータＳＳＲは、ＣＰＵ性能に直接及び間接的に影響を与え、ＣＰＵによるＳＳＲの処理も、アクセラレータの性能に影響を与える。
【００２０】
図４を参照すると、アクセラレータＳＳＲを処理するスキームの別の実施形態のブロック図が示されている。図２に示すスキームと同様に、ＣＰＵ４０５は、アクセラレータ４１５に接続されており、ＣＰＵ４０５及びアクセラレータ４１５の両方は、システムメモリ４２０に接続されている。ＣＰＵ４０５は、任意の数のコアを表すコア４１０Ａ〜４１０Ｃを含む。アクセラレータ４１５は、システムメモリ４２０内のキュー４３０に引数を設定することによって開始する。次に、アクセラレータ４１５は、ＳＳＲをコア４１０Ａに送信する。一実施形態では、コア４１０Ａは、コア４１０Ｂ上でボトムハーフ割り込みハンドラをスケジュールするトップハーフ割り込みハンドラを実行する。ボトムハーフ割り込みハンドラは、ソフトウェアワークキュー４２５及びキュー４３０にワークキューを設定し、コア４１０Ｃ上のカーネルワーカスレッドをエンキューする（待ち行列に入れる）。しかしながら、図２に示すスキームとは対照的に、ガバナ（governor）４４０は、カーネルワーカスレッドがＳＳＲを処理する前に、カーネルワーカスレッドをどれだけ長く遅延させるかを決定する。一実施形態では、ガバナ４４０は、カウンタ４４２を使用して遅延を実施する。カウンタ４４２は、クロックサイクルのカウント又は任意の他の適切な時間尺度を使用して実施されてもよい。この遅延の後、カーネルワーカスレッドは、ＳＳＲを処理し、システムサービス応答を生成してアクセラレータ４１５に伝達する。実施形態に応じて、ガバナ４４０は、ＯＳスレッドとして、ドライバの一部として、又は、ハードウェア及び／若しくはソフトウェアの任意の適切な組み合わせとして実装される。
【００２１】
一実施形態では、ＳＳＲの処理に費やされたＣＰＵ時間が所望のレートよりも高い場合に、既に到着したＳＳＲの処理を遅延させることによってＳＳＲレートが調整される。この遅延は、最終的に、新たなＳＳＲ要求の生成を停止するようにアクセラレータ４１５にバックプレッシャ（back-pressure）をかける。アクセラレータＳＳＲを無条件に拒否する代わりにＳＳＲの処理に遅延を加えることによって、このスキームは、アクセラレータがＳＳＲを生成する方法に如何なる修正も必要とすることなく実施される。一実施形態では、ガバナ４４０は、ＳＳＲの処理に費やされたＣＰＵ時間に基づいて、ＳＳＲの処理を遅延させるかどうかを決定する。一実施形態では、ガバナ４４０は、カーネルワーカスレッドとして実装される。
【００２２】
一実施形態では、ＳＳＲの処理に関与する全てのＯＳルーチンは、ＣＰＵサイクルを追跡する。この情報は、カーネルバックグラウンドスレッドによって使用される。カーネルバックグラウンドスレッドは、周期的（例えば、１０マイクロ秒毎）に起動して、その期間内にＳＳＲの処理に費やされたＣＰＵサイクルの数が、指定された制限を超えているかどうかを計算する。一実施形態では、制限は、アドミニストレータによって指定される。別の実施形態では、制限は、所定の時点で実行されているアプリケーションの特性に基づいて、ＯＳによって動的に設定される。
【００２３】
さらに、カーネルワーカスレッドは、図４に示すように、ＳＳＲを処理する。ＳＳＲの処理の開始時に、ワーカスレッドは、ＳＳＲの処理に費やされたＣＰＵサイクルが、指定された閾値を超えているかどうかをチェックする。ワーカスレッドは、ＳＳＲの処理に費やされたＣＰＵサイクルが、指定された閾値を超えているかどうかを判別するために、バックグラウンドスレッドによって収集された情報を利用する。ＳＳＲの処理に費やされたＣＰＵサイクルの数が指定された閾値以下である場合、ワーカスレッドは、所望の遅延を０に設定し、ＳＳＲの処理を直ちに続ける。そうでなく、ＳＳＲの処理に費やされたＣＰＵ時間が指定された閾値を超えた場合、ワーカスレッドは、ＳＳＲの処理に追加する遅延量を決定する。ワーカスレッドは、後続のＳＳＲを処理する前に、この遅延量だけ待機する。ＳＳＲの処理を遅延させることによって、ガバナ４４０は、アクセラレータ４１５のＳＳＲ生成レートを抑制する。例えば、アクセラレータ４１５は、典型的には、各ＳＳＲに関連する状態を記憶するための限られた空間を有する。よって、ＳＳＲを遅延させることは、アクセラレータ４１５がＳＳＲ生成レートを低下させることをもたらす。
【００２４】
一実施形態では、ワーカスレッドは、ＳＳＲを処理するための遅延量を設定するために、指数バックオフスキームを使用する。ワーカスレッドが指数バックオフスキームを使用する一例は、図５の方法５００に関する説明において以下により詳細に説明する。例えば、一実施形態では、所望の遅延が以前に０より大きかった場合、ワーカスレッドは、遅延を増加させる。そうでなく、所望の遅延が以前に０であった場合、ワーカスレッドは、遅延を初期値（例えば、５マイクロ秒）に設定する。ＳＳＲの処理は、ワーカスレッドによって決定された量だけ遅延される。遅延が増加するにつれて、アクセラレータ４１５がストールし始め、ＳＳＲ生成レートが最終的に低下する。オーバヘッドが閾値を下回ると、ＳＳＲは、人為的な遅延無しに再度処理される。
【００２５】
他の実施形態では、ガバナ４４０は、ＱｏＳ保証メカニズムを実装するために、他の技術を使用する。例えば、別の実施形態では、ガバナ４４０は、ＳＳＲの処理にどれだけの遅延を追加するかを決定するためのルックアップテーブルを維持する。この実施形態では、ＳＳＲの処理に費やされたＣＰＵサイクルの数が計算される場合、この数は、後続のＳＳＲの処理に追加するために対応する遅延値を取得するためのルックアップテーブルへの入力として使用される。他の実施形態では、ガバナ４４０は、他の適切なタイプのＱｏＳ保証メカニズムを実装する。
【００２６】
図５を参照すると、アクセラレータからの要求を処理しながらＣＰＵに対するＱｏＳ保証を実施する方法５００の一実施形態が示されている。説明のために、この実施形態におけるステップ及び図６〜図７のステップは、順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素のうち１つ以上は、同時に実行されてもよいし、図示した順序とは異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れも、方法５００を実施するように構成されている。
【００２７】
ＣＰＵは、アクセラレータからのシステムサービス要求（ＳＳＲ）の処理に費やされたＣＰＵサイクルの数が閾値よりも大きいかどうかを判別する（条件付きブロック５０５）。本明細書では、ＣＰＵを第１のプロセッサと呼び、アクセラレータを第２のプロセッサと呼ぶことに留意されたい。別の実施形態では、ＣＰＵは、条件付きブロック５０５において、複数のアクセラレータからのＳＳＲの処理に費やされたＣＰＵサイクルの数を追跡する。ＳＳＲの処理に費やされたＣＰＵサイクルの数が閾値以下である場合（条件付きブロック５０５：「いいえ」）、ＣＰＵは、遅延を０に設定する（ブロック５１０）。そうでなく、ＳＳＲの処理に費やされたＣＰＵサイクルの数が閾値よりも大きい場合（条件付きブロック５０５：「はい」）、スレッドは、現在、遅延が０よりも大きいかどうかを判別する（条件付きブロック５１５）。
【００２８】
遅延が現在０に等しい場合（条件付きブロック５１５：「いいえ」）、スレッドは、遅延を初期値（例えば、１０マイクロ秒）に設定する（ブロック５２０）。初期値は、実施形態に応じて異なる。そうでなく、遅延が現在０よりも大きい場合（条件付きブロック５１５：「はい」）、スレッドは、遅延の値を増加させる（ブロック５２５）。次に、ブロック５２０又は５２５の後、スレッドは、アクセラレータから新たなＳＳＲを受信する（ブロック５３０）。新たなＳＳＲを処理する前に、スレッドは、遅延の現在値と同じ期間、スリープする（ブロック５３５）。ブロック５３５において使用される「スリープ」という用語は、新たなＳＳＲの処理を開始する前に、遅延の現在値に等しい時間だけ待機することを意味することに留意されたい。「遅延」に等しい期間スリープした後、スレッドは、新たなＳＳＲを処理し、結果をアクセラレータに返す（ブロック５４０）。ブロック５４０の後、方法５００は終了する。
【００２９】
図６を参照すると、要求の処理に追加される遅延を動的に調整する方法６００の一実施形態が示されている。第１のプロセッサは、以前の時間間隔の間に、第１のプロセッサのスレッドが第２のプロセッサによって生成された要求を処理するのに費やしたサイクルの数を監視する（ブロック６０５）。別の実施形態では、サイクルの数を単に監視するのではなく、第１のプロセッサは、第２のプロセッサによる要求を処理することに伴うオーバヘッドを監視する。オーバヘッドは、複数の成分を含む。例えば、オーバヘッドは、要求の処理に実際に費やされた時間、ユーザモードとカーネルモードとの間の遷移に費やされた間接的なＣＰＵオーバヘッド、カーネルがプロセッサの様々なリソースを使用したことに起因して低いＩＰＣレートで実行するユーザモードで費やされた時間を含む。一実施形態では、第１のプロセッサは、ＣＰＵであり、第２のプロセッサは、アクセラレータ（例えば、ＧＰＵ）である。他の実施形態では、第１のプロセッサ及び第２のプロセッサは、他のタイプのプロセッサである。サイクルの数がカウントされる時間間隔の長さは、実施形態によって異なる。
【００３０】
以前の時間間隔の間に第１のプロセッサのスレッドが第２のプロセッサによって生成された要求を処理するのに費やしたサイクルの数が閾値よりも大きい場合（条件付きブロック６１０：「はい」）、第１のプロセッサは、第２のプロセッサからの後続の要求の処理に第１の遅延の量を追加する（ブロック６１５）。そうでなく、以前の時間間隔の間に第１のプロセッサのスレッドが第２のプロセッサによって生成された要求を処理するのに費やしたサイクルの数が閾値以下である場合（条件付きブロック６１０：「いいえ」）、第１のプロセッサは、第２のプロセッサからの後続の要求の処理に第２の遅延の量を追加する。第２の遅延の量は、第１の遅延の量よりも少ない（ブロック６２０）。いくつかのケースでは、第２の遅延の量は０であり、第１のプロセッサは、後続の要求を直ちに処理する。ブロック６１５及び６２０の後、方法６００は終了する。
【００３１】
図７を参照すると、システムサービス要求（ＳＳＲ）を処理する方法７００の一実施形態が示されている。第１のプロセッサは、第２のプロセッサからＳＳＲを受信する（ブロック７０５）。一実施形態では、第１のプロセッサは、ＣＰＵであり、第２のプロセッサは、アクセラレータ（例えば、ＧＰＵ）である。他の実施形態では、第１のプロセッサ及び第２のプロセッサは、他のタイプのプロセッサである。第１のプロセッサは、第２のプロセッサからＳＳＲを受信したことに応じて、第１の条件が検出されたかどうかを判別する（条件付きブロック７１０）。一実施形態では、第１の条件は、以前の時間間隔において第２のプロセッサ（オプションで、１つ以上の他のプロセッサ）からのＳＳＲを処理するための第１のプロセッサ上のオーバヘッドが閾値よりも大きいことである。オーバヘッドは、ＳＳＲの処理に実際に費やされたサイクル、ＳＳＲの処理前後のユーザモードとカーネルモードとの間の遷移に費やされたサイクル、及び、マイクロアーキテクチャ状態の劣化（例えば、利用可能なリソースが少なくなるようなプロセッサリソースの消費）による低いＩＰＣレートで実行するユーザモードで費やされたサイクル等を含む。他の実施形態では、第１の条件は、様々な他のタイプの条件、又は、複数の条件の組み合わせである。
【００３２】
第１の条件が検出された場合（条件付きブロック７１０：「はい」）、第１のプロセッサは、ＳＳＲの処理を開始する前に第１の量の時間だけ待機する（ブロック７１５）。或いは、第１のプロセッサは、第１の条件が検出された場合に、ＳＳＲの処理の実施に対して第１の優先度を割り当てる。第１の条件が検出されていない場合（条件付きブロック７１０：「いいえ」）、第１のプロセッサは、ＳＳＲの処理を開始する前に第２の量の時間だけ待機する。第２の量の時間は、第１の量の時間よりも短い（ブロック７２０）。いくつかのケースでは、第２の量の時間は０であり、第１のプロセッサはＳＳＲを直ちに処理する。或いは、別の実施形態では、第１のプロセッサは、第１の条件が検出されなかった場合に、ＳＳＲの処理に対して第２の優先度を割り当てる。第２の優先度は、第１の優先度よりも高い。ブロック７１５及び７２０の後、方法７００は終了する。
【００３３】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令は、本明細書で説明する方法及び／又はメカニズムを実施するために使用される。例えば、汎用プロセッサ又は特殊目的プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令は、高水準プログラミング言語によって表されている。他の実施形態では、プログラム命令は、高水準プログラミング言語からバイナリ、中間又は他の形式にコンパイルされる。或いは、ハードウェアの動作又は設計を記述するプログラム命令が記述される。このようなプログラム命令は、Ｃ言語等の高水準プログラミング言語によって表される。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、使用中のコンピューティングシステムによってアクセスされ、プログラム実行のためにコンピューティングシステムにプログラム命令を提供するため。一般的に、このようなコンピューティングシステムは、１つ以上のメモリと、プログラム命令を実行するように構成された１つ以上のプロセッサと、を少なくとも含む。
【００３４】
上述した実施形態は、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含するように解釈されることが意図される。
【図１】
2021521541.tif 000003
【図２】
2021521541.tif 000004
【図３】
2021521541.tif 000005
【図４】
2021521541.tif 000006
【図５】
2021521541.tif 000007
【図６】
2021521541.tif 000008
【図７】
2021521541.tif 000009
【国際調査報告】
2021521541.tif 000010
2021521541.tif 000011
2021521541.tif 000012
2021521541.tif 000013