(57)【要約】  プロセッサシステムによる複数のタスクの実行が監視される。この監視に基づき、パフォーマンスリソースの調整を要求するタスクは、各タスクに対して、プログレスエラーもしくはプログレス制限エラーのうちの少なくとも１つを計算することによって識別される。その後、各識別されたタスクに対して割り当てられたプロセッサシステムのパフォーマンスリソースが調整される。そのような調整は、タスクを実行しているプロセッサシステムにおける少なくとも１つのプロセッサのクロックレートを調整するステップ、タスクによって利用されるべきキャッシュ及び／もしくはバッファの量を調整するステップ、並びに／又はタスクによって利用されるべき入力／出力（Ｉ／Ｏ）帯域幅の量を調整するステップを含むことができる。関連したシステム、装置、方法、及び物がまた説明される。
2013527516.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサシステムによって複数のタスクの実行を監視するステップと、
上記監視に基づいて、各タスクに対するプログレスエラーとプログレス制限エラーとのうちの少なくとも１つを計算することによって、パフォーマンスリソースの調整を要求するタスクを識別するステップと、
上記各識別されたタスクに対して割り当てられた上記プロセッサシステムのパフォーマンスリソースを調整するステップとを含む方法であって、
上記パフォーマンスリソースを調整するステップは、
上記タスクを実行する上記プロセッサシステムにおける少なくとも１つのプロセッサのクロックレートを調整するステップと、
上記タスクによって利用されるべきキャッシュ及び／もしくはバッファの量を調整するステップと、
上記タスクによって利用されるべき入力／出力（Ｉ／Ｏ）帯域幅の量を調整するステップとを含むことを特徴とする方法。
【請求項２】
上記プログレスエラーは、上記タスクによって完了された作業と上記タスクによって完了されるべき作業との間の差と等しいことを特徴とする請求項１記載の方法。
【請求項３】
上記プログレス制限エラーは、上記完了された作業に対する作業完了レートと上記タスクのリマインダーに対する期待された作業レートとの間の差と等しいことを特徴とする請求項１又は２記載の方法。
【請求項４】
上記各タスクは、単一のタスク、タスクのグループ、スレッド、スレッドのグループ、単一のステート機械、ステート機械のグループ、単一の仮想機械、及び仮想機械のグループを含むグループから選択されたことを特徴とする請求項１から３のうちのいずれか１つに記載の方法。
【請求項５】
上記プロセッサは、単一のプロセッサ、マルチプロセッサ、同時マルチスレッディングを支持するプロセッサシステム、及びマルチコアプロセッサを含むグループから選択されたことを特徴とする請求項１から４のうちのいずれか１つに記載の方法。
【請求項６】
上記各タスクは、関連した実行優先度及び実行デッドラインを有し、
上記プロセッサシステムの上記パフォーマンスリソースは、上記各識別されたタスクが、その対応する実行デッドラインまでに、その対応する実行優先度に従って完了されることを可能とするように調整されることを特徴とする請求項１から５のうちのいずれか１つに記載の方法。
【請求項７】
上記パフォーマンスリソースは、タスクごとのベースに対して調整されたことを特徴とする請求項１から６のうちのいずれか１つに記載の方法。
【請求項８】
上記各タスクは、上記タスクに対する上記実行優先度及び上記実行デッドラインを確立するために、スケジューラモジュールによって使用された関連したパフォーマンスプロファイルを有することを特徴とする請求項１から７のうちのいずれか１つに記載の方法。
【請求項９】
上記関連したパフォーマンスプロファイルは、少なくとも１つのパフォーマンスパラメータにおいて特定することを特徴とする請求項８記載の方法。
【請求項１０】
上記パフォーマンスパラメータは、上記タスクによって使用されるべき初期の最大及び／もしくは最小の量のバッファを特定するキャッシュ占有割当量であって、
上記キャッシュ占有割当量は、上記タスクの実行の間に動的に調整されたことを特徴とする請求項９記載の方法。
【請求項１１】
上記キャッシュ占有割当量は、上記タスクに対するプログレスエラーに基づいて動的に調整されたことを特徴とする請求項１０記載の方法。
【請求項１２】
上記パフォーマンスパラメータは、上記タスクの実行に対する初期の帯域幅要件を特定し、
上記帯域幅要件は、上記タスクの実行の間に動的に調整されたことを特徴とする請求項１０又は１１記載の方法。
【請求項１３】
上記各タスクによって要求されたプロセッサクロックデマンドレートを決定するステップと、
すべてのタスクに対する上記決定されたプロセッサクロックデマンドレートに基づいて、アグリゲートクロックデマンドレートを計算するステップとをさらに含み、
上記プロセッサシステムクロックレートは、上記アグリゲートクロックデマンドレートを収容するように調整されたことを特徴とする請求項１から１２のうちのいずれか１つに記載の方法。
【請求項１４】
上記プロセッサシステムクロックレートは、上記アグリゲートクロックデマンドレートにオーバヘッドデマンドレートを加算するように調整されたことを特徴とする請求項１３記載の方法。
【請求項１５】
上記プロセッサクロックデマンドレートを決定するステップは、時間間隔内に分割された上記タスクの完了のために期待された実行時間を用いた、現在のプロセッサシステムクロックレートの積であることを特徴とする請求項１３又は１４記載の方法。
【請求項１６】
上記各タスクに対する上記プロセッサクロックデマンドレートは、上記タスクの上記パフォーマンスに影響を及ぼすプログレスエラーに基づいて更新され、
上記アグリゲートクロックデマンドレートは、上記各タスクに対して上記更新されたプロセッサクロックデマンドレートに基づいて更新されたことを特徴とする請求項１３から１５のうちのいずれか１つに記載の方法。
【請求項１７】
上記各タスクに対する上記プロセッサクロックデマンドレートもしくは上記アグリゲートクロックデマンドレートの更新は、急速なレート変化を弱めるかもしくは強めるために少なくとも１つの適応関数を使用することを特徴とする請求項１６記載の方法。
【請求項１８】
上記各タスクに対する上記プロセッサクロックレートは、上記タスクが実行できる状態であるときに上記アグリゲートクロックデマンドレートに加算されることを特徴とする請求項１３から１７のうちのいずれか１つに記載の方法。
【請求項１９】
上記アグリゲートクロックデマンドレートは、ときには上記プロセッサシステムクロックレートが上記アグリゲートクロックデマンドレートよりも高く、それ以外のときには上記プロセッサシステムクロックレートが上記アグリゲートクロックデマンドレートよりも低くなるように、ある期間にわたって計算されたことを特徴とする請求項１３から１８のうちのいずれか１つに記載の方法。
【請求項２０】
上記プロセッサシステムは、少なくとも２つのプロセッサを含み、
上記アグリゲートクロックデマンドレートは、上記少なくとも２つのプロセッサのそれぞれに対して決定され、上記対応するプロセッサを使用して実行するタスクに対する上記プロセッサデマンドレートに基づき、
上記少なくとも２つのプロセッサのそれぞれに対する上記クロックレートが別々に及びそれ相応に調整されたことを特徴とする請求項１３から１９のうちのいずれか１つに記載の方法。
【請求項２１】
上記各タスクは物理メモリに割り当てられ、
上記方法はさらに、
少なくとも１つのタスクが、少なくとも１つの仮想メモリアドレス空間を利用できるようにするステップを含み、
上記少なくとも１つの仮想メモリアドレス空間は、上記物理メモリの少なくとも１つの部分にマッピングされたことを特徴とする請求項１から２０のうちのいずれか１つに記載の方法。
【請求項２２】
プロセッサシステムによって複数のタスクの実行を監視して上記各タスクに対して少なくとも１つの監視された値を決定するステップを含む方法であって、
上記少なくとも１つの監視された値は、上記プロセッサシステムによって、上記対応するタスクのパフォーマンスに影響を及ぼす少なくとも１つのファクタを特徴付け、
上記各タスクは少なくとも１つのパフォーマンスパラメータを特定する関連したタスクパフォーマンスプロファイルを有し、
上記方法は、
上記各タスクに対して、上記対応する監視された値を、上記関連したタスクパフォーマンスプロファイルにおいて特定された上記対応する少なくとも１つのパフォーマンスパラメータと比較するステップと、
上記比較に基づいた上記各タスクに対して、上記タスクの実行のために利用されたパフォーマンスリソースが調整されるべきかどうか、もしくは上記タスクの実行のために利用されたパフォーマンスリソースが維持されるべきであるかどうかを決定するステップと、
そのようなタスクに対して割り当てられたパフォーマンスリソースが調整されるべきであることが決定された各タスクに対してプロセッサクロックレートを修正することによって、及び上記タスクに対して割り当てられたパフォーマンスリソースが維持されるべきであることが決定された各タスクに対してパフォーマンスリソースを維持することによって、上記パフォーマンスリソースを調整するステップとを含むことを特徴とする方法。
【請求項２３】
上記監視された値は、上記タスクによって完了された作業量を特徴付けることを特徴とする請求項２２記載の方法。
【請求項２４】
上記タスクによって完了された作業量は、上記タスクを実行するときに転送されたデータ量と、上記タスクを実行するときに完了されたプロセッサ命令の数、プロセッササイクル、及び実行時間のうちの少なくとも１つから得られたことを特徴とする請求項２３記載の方法。
【請求項２５】
上記各タスクに対して、上記タスクに対する現在のプログラムステートを決定するステップをさらに含み、
上記関連したタスクパフォーマンスプロファイルは、異なるパフォーマンスパラメータを有する２つもしくはそれ以上のプログラムステートを特定し、
上記監視された値は、上記現在のプログラムステートに対する上記パフォーマンスパラメータと比較されたことを特徴とする請求項２２から２４のうちのいずれか１つに記載の方法。
【請求項２６】
対応するパフォーマンスパラメータが変更されるように、実行されているタスクの少なくとも１つのパフォーマンスプロファイルを修正するステップをさらに含み、
上記監視された値は、上記変更されたパフォーマンスパラメータと比較されたことを特徴とする請求項２２から２５のうちのいずれか１つに記載の方法。
【請求項２７】
上記各タスクによって要求されたプロセッサクロックデマンドレートを決定するステップと、
すべてのタスクに対して、上記決定されたプロセッサクロックデマンドレートに基づいて、アグリゲートクロックデマンドレートを計算するステップと、
プロセッサシステムクロックを調整して上記アグリゲートクロックデマンドレートを収容するステップとをさらに含むことを特徴とする請求項２２から２６のうちのいずれか１つに記載の方法。
【請求項２８】
期待された及び完了された作業レートと少なくとも１つのプログレス制限レートとの間の差に基づいて、特定のタスクによって要求されたプロセッサクロックデマンドレートを動的に調整するステップをさらに含むことを特徴とする請求項２７記載の方法。
【請求項２９】
上記各タスクによって要求された上記プロセッサクロックデマンドレートは、上記対応するタスクの完了の期待された時間に基づいたことを特徴とする請求項２８記載の方法。
【請求項３０】
上記プロセッサシステムクロックレートを、上記タスクの完了の期待された時間に影響を及ぼさないレベルまで減少させるステップをさらに含むことを特徴とする請求項２９記載の方法。
【請求項３１】
スリープもしくはアイドルのいずれか一方における上記プロセッサシステムクロックレートを、上記アグリゲートクロックデマンドがゼロよりも大きい時間まで減少させるステップをさらに含むことを特徴とする請求項２８から３０のうちのいずれか１つに記載の方法。
【請求項３２】
上記プロセッサシステムクロックレートは、ある期間中の平均プロセッサシステムクロックレートが上記アグリゲートクロックデマンドレートよりも大きいかもしくは等しいという条件で、上記期間中において、上記アグリゲートクロックデマンドレートの上下に変動することを特徴とする請求項２８から３１のうちのいずれか１つに記載の方法。
【請求項３３】
上記パフォーマンスプロファイルはさらに、タスクが利用することができる、キャッシュ及び／もしくはバッファの量に影響を及ぼす占有割当量を特定することを特徴とする請求項２２から３２のうちのいずれか１つに記載の方法。
【請求項３４】
上記占有割当量は、期待されたもしくは完了された作業レートと少なくとも１つのプログレス制限レートとの間の差に基づいて動的に調整されたことを請求項３３記載の方法。
【請求項３５】
上記各タスクのパフォーマンス要件が満たされるように、上記プロセッサシステムの入力／出力サブシステムによる帯域幅の利用が制御されたことを特徴とする請求項２２から３４のうちのいずれか１つに記載の方法。
【請求項３６】
利用された帯域幅の量は、期待された及び完了された作業レートと少なくとも１つのプログレス制限レートとの間の差に基づいて動的に調整されたことを特徴とする請求項３５記載の方法。
【請求項３７】
少なくとも１つのプロセッサと、
複数のバッファと、
上記少なくとも１つのプロセッサによって実行されるべき複数のタスクをスケジューリングするためのスケジューラモジュールと、
上記複数のタスクの実行を監視して追加的な処理リソースを要求するタスクを識別するためのメータリングモジュールと、
タスクを実行するときに上記少なくとも１つのプロセッサのクロックレートを選択的に調整するための適応クロックマネージャモジュールと、
タスクによって利用されるべきキャッシュ及び／もしくはバッファの最大量を選択的に調整するためのキャッシュ占有マネージャモジュールと、
タスクによって利用されるべき入力／出力（Ｉ／Ｏ）帯域幅の最大量を選択的に調整するための入力／出力帯域幅マネージャモジュールとを備えたことを特徴とするプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
ここで説明された主題は、プロセッサシステムにおいて実行するタスクによって利用されたパフォーマンスリソースの管理のためのシステム、方法、及び物に関する。
【０００２】
関連出願の相互参照
本出願は、２０１０年３月２６日付けで出願された、発明の名称が「コンピュータシステムの細粒度パフォーマンスリソース管理のための方法及び装置」の米国仮出願第６１／３４１，１７０号、及び２０１０年３月２６日付けで出願された、発明の名称が「プロセッサキャッシュメモリ占有の制御のための方法及び装置」の米国仮出願第６１／３４１，０６９号に対して優先権の利益を主張し、それらの開示が参照によりここに組み込まれる。
【背景技術】
【０００３】
コンピューティングシステムは、（プロセッサ、メモリ、周辺機器、バスなどの）物理リソースからだけでなく、例えばプロセッササイクル、クロック速度、メモリ空間並びにＩ／Ｏ帯域幅及びメイン／キャッシュメモリの空間などのパフォーマンスリソースからも構成される。伝統的なアプローチでは、パフォーマンスリソースは一般的に、非効率的に管理されていたか、もしくはまったく管理されていなかった。結果として、プロセッサは十分に利用されず、過剰なエネルギーが消費され、それらのパフォーマンスポテンシャルのいくつかが奪われた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２００９／０，０５５，８２９号明細書
【特許文献２】米国特許出願公開第２０１１／０，２３８，９１９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
多くのコンピュータシステムは、システム及び／又は１つもしくは複数のプロセッサクロック周波数を動的に制御することができる。クロック周波数を低減するとプロセッサ供給電圧を低くすることが可能となるという半導体スケーリング効果によって、クロック周波数を低減させることによって電力消費量を劇的に低減させることができる。従って、コンピュータシステムが必要に応じて実行するという条件で、クロック周波数を減少することができることは、エネルギー消費量、熱発生などの減少へと導く。同様に、関連したインターフェース及び／もしくは周辺機器のみならず多くのプロセッサは、それらがそれらの１つもしくは複数の動作状態と比較して非常に少ない量のエネルギーを消費してもよい場合には、アイドルステートもしくはスリープステートに急速に出入りすることができる。クロック周波数を低減させることと同様に、１つもしくはそれ以上のプロセッサ及び／又はコンピュータシステムの一部もしくは全部をスリープステートにセットすることが、コンピュータシステムが必要に応じて実行されるという条件で全体のエネルギーの消費量を減少させるために使用される。
【０００６】
実際には、１つもしくはそれ以上のプロセッサがアイドルステートとされるかもしくはより低いクロック速度で実行することができそれ故にエネルギーを節約することができるとき、従来の電力管理アプローチはアイドル時間もしくは低速システム応答を用いた「使用モード」を検出する。「使用モード」に基づいた電力管理はしばしば、非常に粒度が粗すぎて、その間ずっとすべてのエネルギー削減機会を効率的に利用することはできない。
【課題を解決するための手段】
【０００７】
プロセッサシステムによる複数のタスクの実行が監視される。この監視に基づき、追加的なパフォーマンスリソースを要求するタスクが、各タスクに対して、プログレスエラー及び／又は１つもしくはそれ以上のプログレス制限エラーを計算することによって識別される。その後、各識別されたタスクに対して割り当てられたプロセッサシステムのパフォーマンスリソースが調整される。そのような調整は、タスクを実行するプロセッサシステムにおける少なくとも１つのプロセッサのクロックレートを調整するステップと、タスクによって利用されるべきキャッシュ及び／もしくはバッファの量を調整するステップと、並びに／又はタスクによって利用されるべき入力／出力（Ｉ／Ｏ）帯域幅の量を調整するステップとを含むことができる。
【０００８】
各タスクは、単一のタスク、タスクのグループ、スレッド、スレッドのグループ、単一のステート機械、ステート機械のグループ、単一の仮想機械、及び仮想機械のグループを含むグループ、並びにそれらの任意の組み合わせから選択される。プロセッサは、単一のプロセッサ、マルチプロセッサ、（例えば、同時もしくは擬似同時マルチスレッディングなどの）マルチスレッディングを支持するプロセッサシステム、及び／又はマルチコアプロセッサを含むことができる。
【０００９】
実行している／実行されるべきタスクに関連付けられた監視されたパフォーマンスメトリクス（数的指標）は変更することができる。例えば、最初にデータ転送が監視され、後でプロセッササイクルが監視される。
【００１０】
プログレスエラーレートは、タスクによって完了された作業とタスクによって完了されるべき作業との間の差と等しくすることができる。代替には、プログレスエラーレートは、完了された作業に対する作業完了レートとタスクに対して期待された作業レートとの間の差に等しい。各タスクは、関連した実行優先度及び実行デッドラインを有することができる。（そのような優先度及び／もしくはデッドラインはスケジューラによって特定され、並びに／又はそれはレート適応関数もしくはレート適応関数に対するパラメータの一部として得られ／使用される。）そのような場合において、プロセッサシステムのパフォーマンスリソースは、各識別されたタスクがその対応する実行デッドラインより前にその対応する実行優先度に従って完了されるように調整される。
【００１１】
パフォーマンスリソースはタスク毎のベースに対して調整される。各タスクは、タスクに対する実行優先度及び実行デッドラインを確立するために使用される関連したパフォーマンスプロファイルを有することができる。関連したパフォーマンスプロファイルは、少なくとも１つのパフォーマンスパラメータを特定することができる。パフォーマンスパラメータは、例えば、タスクによって使用されるべき初期の最大の及び／もしくは最小の量のバッファを特定するキャッシュ占有割当量とすることができ、そのキャッシュ占有割当量は、プログレスエラー、タスクに対するキャッシュミスレート、キャッシュヒットレートもしくはパフォーマンスを示す任意の他のメトリクスのうちの少なくとも１つに基づいて動的に調整される。
【００１２】
パフォーマンスパラメータはタスクの実行に対する初期の帯域幅要件を特定することができ、そのような帯域幅要件はタスクの実行の間に動的に調整される。
【００１３】
各タスクによって要求されたプロセッサクロックデマンドレートが決定される。そのような決定に基づき、すべてのタスクに対して決定されたプロセッサクロックデマンドレートに基づいたアグリゲートクロックデマンドレートが計算される。それに応じて、プロセッサシステムクロックレートはアグリゲートクロックデマンドレートを収容するように調整される。いくつかのケースでは、プロセッサシステムクロックレートは、オーバヘッドデマンドレートを加算したアグリゲートクロックデマンドレートに調整される。プロセッサクロックデマンドレートは、時間間隔によって分割されたタスクの完了に対する期待された実行時間を用いた現在のプロセッサシステムクロックレートの積として計算される。各タスクに対するプロセッサクロックデマンドレートは、タスクのパフォーマンスに影響を及ぼすエラーに基づいて更新され、結果として、アグリゲートクロックデマンドレートは、各タスクに対して更新されたプロセッサクロックデマンドレートに基づいて更新される。各タスクに対するプロセッサクロックデマンドレートもしくはアグリゲートクロックデマンドレートの更新は、急速なレート変化を弱めるかもしくは強めるために少なくとも１つの適応関数を使用することができる。スケジューラもしくは（例えば、タスクがブロックされるＩ／Ｏ要求を完了するＩ／Ｏサブシステムなどの、）タスクが実行できる状態にあるときを決定する他のシステム構成要素によって決定されるように、タスクが実行できる状態にあるときに各タスクに対するプロセッサクロックレートはアグリゲートクロックデマンドレートに対して加算される。アグリゲートクロックデマンドレートは、ある期間にわたって計算され、その結果、時にはプロセッサシステムクロックレートはアグリゲートクロックデマンドレートよりも高く、またある時にはプロセッサシステムクロックレートはアグリゲートクロックデマンドレートよりも低くなる。
【００１４】
プロセッサシステムは、少なくとも２つのプロセッサを含むことができ、アグリゲートクロックデマンドレートは、少なくとも２つのプロセッサのそれぞれに対して決定され、対応するプロセッサを用いて実行するタスクに対するプロセッサデマンドレートに基づくことができる。そのような装置において、少なくとも２つのプロセッサのそれぞれに対するクロックレートは別々にかつそれ相応に調整される。
【００１５】
各タスクは物理メモリに割り当てられる。少なくとも１つのタスクは、物理メモリの少なくとも１つの部分に対してマッピングされた少なくとも１つの仮想メモリ空間を利用することができる。
【００１６】
もう１つの態様では、プロセッサシステムによる複数のタスクの実行が監視されて各タスクに対して少なくとも１つの監視された値を決定する。少なくとも１つの監視された値は、プロセッサシステムによって対応するタスクのパフォーマンスに影響を及ぼす少なくとも１つのファクタを特徴付ける。各タスクは、少なくとも１つのパフォーマンスパラメータを特定する、関連したタスクパフォーマンスプロファイルを有する。各タスクに対して、対応する監視された値は関連したタスクパフォーマンスプロファイルにおいて特定された、対応する少なくとも１つのパフォーマンスパラメータと比較される。この比較に基づき、比較に基づいた各タスクに対して、タスクの実行のために利用されたパフォーマンスリソースが調整されるべきかどうか、もしくはタスクの実行のために利用されたパフォーマンスリソースが維持されるべきかどうかが決定される。その後、パフォーマンスリソースは、そのようなタスクに対して割り当てられたパフォーマンスリソースが調整されるべきであることが決定された各タスクに対して、プロセッサクロックレートを修正することによって、及びタスクに対して割り当てられたパフォーマンスリソースが維持されるべきであることが決定された各タスクに対してパフォーマンスリソースを維持することによって調整される。
【００１７】
監視された値は、タスクによって完了された作業量を特徴付けることができる。タスクによって完了された作業量は、タスクを実行するときに転送されたデータ量と、タスクを実行するときに完了されたプロセッサ命令の数、プロセッササイクル、実行時間などのうちの少なくとも１つから得られる。
【００１８】
いくつかの変形例では、現在のプログラムステートが各タスクに対して決定され、関連したタスクパフォーマンスプロファイルは、異なるパフォーマンスパラメータを有する２つもしくはそれ以上のプログラムステートを特定する。そのような装置によって、監視された値は、現在のプログラムステートに対するパフォーマンスパラメータと比較される。（監視されることが変更される（例えば、命令データ転送など）。）
【００１９】
実行されたタスクの少なくとも１つのパフォーマンスプロファイルは、対応するパフォーマンスパラメータが変更されるように修正される。結果として、監視された値は変更されたパフォーマンスパラメータと比較される。
【００２０】
各タスクによって要求されたプロセッサクロックデマンドレートが決定される。その後、アグリゲートクロックデマンドレートは、すべてのタスクに対して決定されたプロセッサクロックデマンドレートに基づいて計算される。結果として、プロセッサシステムクロックレートはアグリゲートクロックデマンドレートを収容するように調整される。特定のタスクによって要求されたプロセッサクロックデマンドレートは、期待されたもしくは完了された作業レートと、（例えばプログレス制限エラーなどの）少なくとも１つのプログレス制限レートとの間の差に基づいて動的に調整される。各タスクによって要求されたプロセッサクロックデマンドレートは、対応するタスクの完了の期待された時間に基づくことができる。
【００２１】
プロセッサシステムクロックレートは、タスクの完了の期待された時間に影響を及ぼさないレベルまで選択的に減少させることができる。プロセッサシステムクロックレートは、アグリゲートクロックデマンドがゼロよりも大きい時間までに、スリープもしくはアイドルのいずれかのステートに対して設定される。ある期間中の平均プロセッサシステムクロックレートがアグリゲートクロックデマンドレートを超えるという条件で、プロセッサシステムクロックレートは、その期間中、アグリゲートクロックデマンドレートの上下に変動することができる。
【００２２】
パフォーマンスプロファイルは、タスクが利用できる、多数のバッファを制限する占有割当量を特定することができる。占有割当量は、期待された及び完了された作業レートと、（例えばプログレス制限エラーなどの）１つもしくはそれ以上のプログレス制限レートとの間の差に基づいて動的に調整される。単一のソースもしくは複数のソースからの他のパフォーマンスメトリクスが占有割当量を調整するために使用される。
【００２３】
プロセッサシステムの入力／出力サブシステムによる帯域幅の利用が、各タスクのパフォーマンス要件が満たされるように選択的に制御される。利用された帯域幅の量は、期待された及び完了された作業レートと、（例えばプログレスエラーなどの）１つもしくはそれ以上のプログレス制限レートとの間の差に基づいて動的に調整される。単一のソースもしくは複数のソースからの（例えばプログレス制限エラーなどの）他のパフォーマンスメトリクスが占有割当量を調整するために使用される。
【００２４】
別の態様において、システムは、少なくとも１つのプロセッサと、複数のバッファと、
スケジューラモジュールと、メータリングモジュールと、適応クロックマネージャモジュールと、キャッシュ占有マネージャモジュールと、入力／出力帯域幅マネージャモジュールとを含む。スケジューラモジュールは、少なくとも１つのプロセッサによって実行されるべき複数のタスクをスケジューリングすることができる。（いくつかの実施形態においては、各タスクは関連した実行優先度及び／もしくは実行デッドラインを有する。）メータリングモジュールは、複数のタスクの実行を監視して追加的な処理リソースを要求するタスクを識別することができる。適応クロックマネージャモジュールは、タスクを実行するときに少なくとも１つのプロセッサのクロックレートを選択的に調整することができる。キャッシュ占有マネージャモジュールは、タスクによって利用されるべきバッファの最大量を選択的に調整することができる。入力／出力帯域幅マネージャモジュールは、タスクによって利用されるべき入力／出力（Ｉ／Ｏ）帯域幅の最大量を選択的に調整することができる。
【００２５】
コンピュータによって実行されるときにそのコンピュータがここでの操作を実行できる、コンピュータ読み出し可能な媒体に対して永久に格納されたコンピュータ実行可能な命令を含む物の製造がまた説明される。同様に、プロセッサに接続されたプロセッサ及びメモリを含んでもよいコンピュータシステムがまた説明される。メモリは一時的にもしくは永久に、プロセッサがここで説明された１つもしくはそれ以上の操作を実行することができる１つもしくはそれ以上のプログラムを格納してもよい。
【００２６】
ここで説明された主題は、多くの利点を提供する。例えば、パフォーマンス保証／目標を提供するような方法で、（パフォーマンス要件に基づいて、）キャッシュ／バッファ利用並びにＩ／Ｏ帯域幅を最適化する一方で、同時に最小リソースを使用することによって、コンピュータシステムがより大きな容量を持つことが可能となる。（その理由は、各構成要素に対して要求されたリソースが最小化されるからである。）さらに、現在の主題は、コンピュータシステムが物理コンピュータリソースをより少なく／より小さくすることができ、それによってコストを下げることができ、及び／もしくは物理サイズを減少させることができる。さらに、より少ない電力を消費するリソースが必要とされるので、全体の電力消費量は削減される。さらに、例えばアグリゲートクロックレートなどのマルチプロセッサ情報を用いて、プログレスエラー及びプログレス制限エラーがどのプロセッサにタスクをスケジューリングさせるかを知らせるために用いることができる。
【００２７】
ここで、説明された主題の１つもしくはそれ以上の変形例の詳細が添付の図面及び以下の説明において説明される。ここで説明された主題の他の特徴及び利点が、以下の説明、図面及び特許請求の範囲から明らかとなろう。
【００２８】
種々の図面中の類似の参照記号は類似の要素を示す。
【図面の簡単な説明】
【００２９】
【図１】パフォーマンスリソース管理を有するコンピュータシステムのブロック図である。
【図２】メータリングモジュールのブロック図である。
【図３】パフォーマンスリソースマネージャモジュールのブロック図である。
【図４】カレンダーキューを例示する図である。
【図５】プロセッサシステムパフォーマンスリソース管理のための技術を例示する処理フロー図である。
【発明を実施するための形態】
【００３０】
図１は、プロセッサシステム１０、管理モジュール１０６、Ｉ／Ｏ（入力／出力）サブシステム１０８及びシステムメモリ１５０を含むコンピュータシステムの簡単化されたブロック図である。プロセッサシステム及びコンピュータシステムのいくつかの共通に知られた要素は、現在の主題を理解する目的のために図面では図示しない。プロセッサシステム１０は、中央処理ユニット、プロセッサ、マイクロプロセッサ、プロセッサコアなどのうちの１つもしくはそれ以上を含むことができる。例えば、プロセッサシステム１０は、複数のプロセッサ及び／又はマルチコアプロセッサを含むことができる。図１に図示されたプロセッサシステムの機能的な要素は、ハードウェアにおいて実施されるかもしくはハードウェアとソフトウェア（もしくはファームウェア）との組み合わせで実施される。
【００３１】
プロセッサシステム１０は、命令キャッシュ１０４、命令フェッチ／ブランチユニット１１５、命令デコーダモジュール１２５、実行ユニット１３５、ロード／格納ユニット１４０、データキャッシュ１４５、プロセッサシステムの１つもしくは複数のクロック速度を制御するためのクロックモジュール１８０、プロセッサシステムのアイドルもしくはスリープステートを制御するためのアイドルステートモジュール１８４、ＤＭＡ（ダイレクトメモリアクセス）モジュール１８６、パフォーマンス管理システム１０５、及びスケジューラモジュール１３０を含むことができる。パフォーマンス管理システム１０５は、メータリングモジュール１１０及びパフォーマンスリソース管理モジュール１２０を含むことができる。一実施形態では、タスクに対するタスクパフォーマンスプロファイルを格納するタスクコンテキストメモリがシステムメモリ１５０内に組み込まれる。他の実施形態では、タスクコンテキストメモリは、システムメモリ１５０から独立してもよい。
【００３２】
この明細書を通して、タスクはプロセッサシステム１０により実行されるべき命令セットとして言及されてもよい。用語「タスク」はときどき単数に言及されるのだが、用語「タスク」は、（特に指定のない限り）複数のタスクのグループを含むように解釈される。タスクはまた、例えば１つもしくはそれ以上の同時実行のスレッド又は擬似同時実行のスレッドが実行されるコンピュータプログラムのインスタンスなどの処理を含むことができ、１つもしくはそれ以上の（例えばマイクロプロセッサなどの）プロセッサシステム１０内又は１つもしくはそれ以上のプロセッサ上の仮想実行環境などの仮想機械内で実行する、リソースを密接に共有するコンピュータプログラムのインスタンスを実行する。仮想機械（ＶＭ）は、実際の機械のようにプログラムを実行するソフトウェア実装の機械（コンピュータ）である。いくつかの実施形態において、タスクは、例えば画像プロセッサ、暗号化プロセッサなどのステート機械とすることができる。
【００３３】
管理モジュール１０６は、（例えば、システムメモリ１５０内に存在するプログラムなどの）処理モジュールに接続されたコンピュータシステムの一部とすることができる。管理モジュール１０６は、パフォーマンスプロファイルを創造することができる、並びに／又はシステムメモリ１５０からもしくは例えばハードディスクドライブ、不揮発性メモリなどの記憶装置（ストレージデバイス）から以前に創造されたパフォーマンスプロファイルを検索することができ、タスクパフォーマンスパラメータを特定するタスクパフォーマンスプロファイルを直接的にもしくはそれらのタスクコンテキスト（特定のタスクを管理するために必要とされる情報を含むデータのセット）を介してタスクに割り当てることができる。いくつかの実施形態において、管理モジュール１０６は、（例えば、規定／ルールのセットなどを介して、）タスクパフォーマンスプロファイルを決定／制御することによってリソースの割り当てを制御することができる。
【００３４】
Ｉ／Ｏサブシステムモジュール１０８は、（例えば、システムメモリ１５０内に存在するプログラムなどの）処理モジュールに接続されたコンピュータシステムの一部とすることができる。Ｉ／Ｏサブシステムモジュール１０８は、処理システムと、外部の世界、もしかしたら人間、記憶装置、もしくはもう１つの処理システムとの間の通信のための手段を制御し、及び／又は有効にし、及び／又は提供することができる。
【００３５】
入力はシステムによって受信された信号もしくはデータであって、出力はそれから送信された信号もしくはデータである。記憶装置は、後で検索するための情報を格納するために使用され、記憶装置の例には、ハードディスクドライブ及び不揮発性半導体メモリを含む。例えばモデム及びネットワークカードなどの、コンピュータシステム間の通信のためのデバイスは、典型的には、入力と出力との両方の役目を果たす。
【００３６】
プロセッサシステム１０のパフォーマンス管理システム１０５は、個々のタスクに対する、プロセッサシステムのためのプロセッサパフォーマンスリソースの割り当てを制御することができる。いくつかの実施形態において、パフォーマンス管理システム１０５は、ステート機械において実行する個々のタスクに対するステート機械パフォーマンスリソースの割り当てを制御することができる。他の実施形態において、管理モジュール１０６は、（例えば規定／ルールなどを介して、）タスクパフォーマンスプロファイルを決定／制御することによって、リソースの割り当てを制御することができる。例えば、すべてのタスクに対するパフォーマンスリソースの割り当てを制御することによって、各タスクにはスループット及び応答時間の保証が提供される。さらに、すべてのタスクに対する最小のパフォーマンスリソースを割り当てることによって、プロセッサシステム１０及び／もしくは当該プロセッサシステム１０が組み込まれた（Ｉ／Ｏサブシステムモジュール１０８及びシステムメモリ１５０などを含む）コンピューティングシステムのプロセッサリソースの最小量のパフォーマンスリソースが利用される。一実施例では、パフォーマンスリソースの最小化はエネルギー消費量を低減させ、かつより少なく／より小さい物理コンピュータリソースを必要とすることにより効率を増加させて、その結果としてコストの低減につながる。もう１つの実施例では、各タスクに割り当てられたパフォーマンスリソースの最小化によって、プロセッサシステム１０は、より多くのタスクがシステム上で実行されることを可能とする一方で、同様により多くの数のタスクに対してスループット及び応答時間の保証を提供してより大きな容量を有することができる。
【００３７】
タスクには、タスクパフォーマンスパラメータを特定するパフォーマンスプロファイルが割り当てられる。タスクパフォーマンスパラメータの例には、この明細書の他の箇所で説明された、完了されるべき作業Ｗｅ、時間間隔Ｔｉ、完了されるべき最大作業Ｗｍ、並びにキャッシュ占有及びＩ／Ｏ（入力／出力）帯域幅要件を含む。時間間隔は、タスクがＴｉ時間内でＷｅ作業を完了することが期待されるように、デッドラインを示すことができる。完了されるべき作業は、それが実行のためにスケジューリングされたときにタスクによって実行されるべき期待された作業を決定することができる。もし例えばその期待された作業の完了が延期されれば、完了されるべき最大作業は、タスクが蓄積してもよい最大作業を特定することができる。他のパフォーマンスパラメータのみならず時間間隔はまた、例えば、タスクが実行すべきときもしくはデッドライン（タスクがその期待された作業を完了することができる最大時間）として影響を及ぼすための時間間隔などを用いて、スケジューリング決定に影響を及ぼすために、スケジューリングモジュール１３０によって利用される。作業レートＷｒは、関係式Ｗｒ＝Ｗｅ／Ｔｉにより表わされる。一実施形態において、これらのパラメータは、パフォーマンスプロファイルパラメータが、タスクの実行の間に、各セットが１つもしくはそれ以上のプログラムステートと関連付けされて動的に変更されてもよいパラメータのセットとできるように、タスクステートとともに動的に変更することができる。（現在の主題に関連して使用された関連した態様のみならず）スケジューラモジュールの一実施例が特許文献１で説明され、その内容が参照によりここで完全に組み込まれる。
【００３８】
パフォーマンスプロファイルは、個々のタスクに対して、パフォーマンスプロファイルに類似したタスクのグループに割り当てられる。一実施形態において、グループのメンバーであるタスクは、共通のパフォーマンスプロファイルを共有し、パフォーマンスリソースパラメータはその共通のプロファイルから得られる。
【００３９】
いくつかの変形例において、パフォーマンスパラメータのサブセットは、グループパフォーマンスプロファイルの一部とすることができる一方で、他のものは個々のタスクのパフォーマンスプロファイルの一部とすることができる。例えば、タスクプロファイルは、期待作業パラメータを含むことができる一方で、タスクはＩ／Ｏ帯域幅及びキャッシュ占有パフォーマンスパラメータを共有するグループのメンバーである。グループの多重度は、パフォーマンスリソースマネージャによって利用されたパラメータが、（規定／ルールのセットを介して、）種々のパフォーマンスプロファイルから得られた場合に、タスクが共通のパフォーマンスプロファイルパラメータと分離したパフォーマンスプロファイルパラメータとの両方を特定する１つ又はそれ以上のグループのメンバーである場合に存在することができる。
【００４０】
作業は、データ転送、完了されたプロセッサ命令、又は例えば画像プロセッサ、暗号化プロセッサなどのプロセッサシステム１０もしくはステート機械によって実行された作業の測度の他の意味のある単位の測度とすることができる。この作業は細粒度に対して測定されるので、パフォーマンスリソースは細粒度に対して同様に管理される。
【００４１】
プロセッサシステム１０は、多数の命令がシステムメモリ１５０内に格納されたデータに対して演算する場合に、システムメモリ１５０内に格納された命令を実行することができる。この明細書においては、命令は、命令セットもしくはプログラム命令と呼ばれる。システムメモリ１５０は、コンピュータシステムにおいて物理的に分配される。命令キャッシュ１０４は、システムメモリ１５０からの命令を一時的に格納することができる。命令キャッシュ１０４は、システムメモリ１５０とプロセッサシステム１０との間のバッファメモリとしての役目を果たすことができる。命令が実行されるべき場合、それらは典型的にはシステムメモリ１５０から検索され、命令キャッシュ１０４の中にコピーされる。もし同一の命令もしくは命令のグループがプログラム命令セットにおいてしばしば使用されれば、命令キャッシュ１０４におけるこれらの命令の記憶装置は、システムメモリアクセスが除去されるので、スループットの増加を生じさせることができる。
【００４２】
フェッチ／ブランチユニット１１５は、命令キャッシュ１０４に接続され、命令キャッシュ１０４内の記憶装置に対してシステムメモリ１５０から命令を検索するように構成される。命令デコーダモジュール１２５は、検索された命令を解釈して実行することができる。一実施形態において、デコーダモジュール１２５は、複数の命令を、プロセッサシステム１０の他の部分に対する有意性を有する複数の部分に分けることができる。実行ユニット１３５は、制御信号のシーケンスとしてのデコードされた情報を、例えば、プロセッサシステム１０の関連した機能ユニットに通過させて命令によって要求された動作を実行することができる。実行ユニットは、レジスタファイル及び算術論理演算ユニット（ＡＬＵ）を含むことができる。命令によって要求された動作は、レジスタから値を読み出すこと、その値をＡＬＵ（図示せず。）に通過させてそれらを合計すること、及びその結果をレジスタに書き込むことを含むことができる。実行ユニット１３５は、データキャッシュ１４５に対するアクセスを実行するように構成されたロード／格納ユニット１４０を含むことができる。他の実施形態において、ロード／格納ユニット１４０は、実行ユニット１３５から独立することができる。データキャッシュ１４５は、例えばシステムメモリ１５０から最近アクセスされたデータアイテムを含む、例えばランダムアクセスメモリなどの高速の記憶装置とすることができる。一実施形態では、データキャッシュ１４５は、命令キャッシュ１０４から独立してアクセスされる。
【００４３】
図２はメータリングモジュール１０２のブロック図である。説明の目的のために、図２が図１を参照して説明されるであろう。メータリングモジュール１１０は、１つもしくは複数の現在実行しているタスクによって実行された作業もしくは完了された作業量を測定することができる。一実施形態において、メータリングモジュール１１０は、タスクの実行を監視してタスクに対して完了された作業量に関連した監視された値を決定することができる。完了された作業量に関連した監視された値は、完了された作業の実際の量、カウンタ値、又は例えば完了された作業量に比例もしくは関連した同様のものとすることができる。
【００４４】
一般的に、一実施形態のメータリングモジュール１１０には、完了された作業モジュール２１０（Ｗｃ）、完了されるべき作業モジュール２２０（Ｗｅ）、比較器モジュール２３０、及び加算器モジュール２４０を含むことができる。完了された作業モジュール１２１０は、完了された作業カウンタとすることができ、完了されるべき作業モジュール２２０はまた、完了されるべき作業カウンタとすることができる。完了されるべき作業カウンタは、作業レートに基づいて更新されて経過時間を計上することができる。完了されるべき作業は、例えば、パフォーマンスリソースマネージャにタスク選択を知らせるスケジューラモジュール１３０によってプロセッサシステムに対する実行のためにタスクが選択されるときに、パフォーマンスリソースマネージャによって計算される。
【００４５】
メータリングモジュール１１０は、プロセッサシステム１０上で現在実行されているタスクによって完了された作業を測定して監視することができる。１つもしくはそれ以上のタスクは、（例えば、同時もしくは擬似同時のマルチスレッド処理を行うマルチプロセッサを利用する１つもしくは複数のプロセッサなどの）プロセッサシステム１０上で実行される。一実施形態において、完了された作業もしくは完了された作業量についての情報の監視された値が、完了された命令の量によって測定され、図１の矢印１７０によって示されるように、命令フェッチ／ブランチユニット１１５から得られる。監視された値はまた、図１の矢印１６５によって示されるように、メモリ操作により転送されたデータ量によって測定され、ロード／格納ユニット１４０から得られる。メータリングモジュール１１０は、メモリ操作（帯域幅）を監視するために使用されるときに、（例えばビデオフレームバッファなどの）特定のアドレスに対する及び当該特定のアドレスからの、メモリ操作を計上だけをするように構成される。この構成は、（タスクコンテキストもしくはタスクパフォーマンスプロファイルの構成情報を用いて、）タスクごとのベースに対して変更することができる。いくつかの実施形態において、コンピュータシステム実装の特定の詳細によって、命令完了及びメモリ操作のために分離したメータリングモジュール１１０が存在することができる。これらのメータリングモジュールは、単一のメータリングモジュール１１０と同様であろう。いくつかの処理モジュール１０は複数のタスク（複数のスレッド）を同時に処理するので、完了された命令情報は、（典型的には、１つもしくは複数の、スレッドもしくは処理もしくはタスクの識別子を用いてその情報にタグを付けることによって、）スレッドが特定の命令を完了したことに関する情報を含むことができる。同様に、メモリ操作情報は、メータリングモジュール１１０がこれらの操作を正確なタスクに関連付けるために、このスレッド識別子を含むことができる。処理ユニット、プロセッサ、マイクロプロセッサ、プロセッサコアなどのうちの１つもしくはそれ以上を含む処理モジュール１０は、そのようなプロセッサそれぞれに対して複数のメータリングモジュール１１０を含むことができる。
【００４６】
実行された作業もしくは完了された作業Ｗｃに関連する監視された値は、メモリに対するアクセス、完了された命令、及び／又は現在実行している１つもしくは複数のタスクによる作業の意味のある測定である他の測定可能な数量をカウントすることによって測定される。例えば、アクセスのサイズを含むことができる、メモリに対するアクセス回数などの監視された値は、それらが加算されて完了された作業モジュール２１０に供給される加算器モジュール２４０で受信される。監視された値はまた、図１の矢印１６５によって示されるように、ロード／格納ユニット１４０から得られたメモリ操作によって測定される。完了されるべき作業モジュール２２０は、完了されるべき作業量に関連するパラメータ値Ｗｅを受信することができる。完了されるべき作業量及び／もしくは作業レートに関連するパラメータ値は、タスクのタスクパフォーマンスプロファイルに格納された予め決定された値とすることができる。完了されるべき作業パラメータ値は、完了されるべき作業の実際の量、カウンタ値、又は完了されるべき作業量に比例及び／もしくは関連する同様のものなどとすることができる。パラメータ値は、一定のパラメータとすることができ、もしくは作業レートから計算することができ、例えばタスクが作業レートに経過時間を乗算することによって、実行されるための待つ時間を計上するために計算される作業クレジットを含むことができる。作業クレジットはまた、連続的にもしくは周期的に計算され、その結果、実行されるべき作業は、タスクが実行している間でさえ、作業レートにおける経過時間とともなって増加する。この実行されるべき計算された作業は、最大の作業パラメータよりも大きくならないように制限される。一実施形態において、パラメータ値は、タスクをコンピュータシステムにマッピング処理する間に管理モジュール１０６によって予め決定される。
【００４７】
完了された作業は、比較器モジュール２３０によって完了されるべき作業と比較される。この比較の結果のプログレスエラーは、比較における時間を含むことによって、完了された作業と完了されるべき作業との間、及び／又は作業完了レートと完了されるべき作業レート（期待された作業レート）との間の差を示す値とすることができる。一実施形態は、期待された実行時間内で、完了されるべきその期待された作業を獲得するタスクに基づいて、プログラスエラーを計算することができる。例えば、エラーは次の関係式によって計算される。すなわち、プログレスエラー＝（ｑｔ／Ｑｉ）×Ｗｅ−Ｗｃ。ここで、ｑｔはタスクが実行をスタートした後の経過時間であって、Ｑｉは完了されるべき作業を完了するために期待された時間であって、それはプロセッサ及び／もしくは例えばプロセッサシステムクロック周波数などのコンピュータシステムステートに依存してもよい。上述した関係式において、作業完了を示すことができる負のプログレスエラーは、経過時間ｑｔにおける期待された作業よりも大きい。プログレスエラーは、この明細書の他の箇所で詳細説明されたように、タスクに対する、リソースに関連するパフォーマンスの割当を割り当てるために、もしくは調整するために使用される。
【００４８】
メータモジュールの１つもしくはそれ以上のインスタンスはメータモジュールが計測する数量であって、例えばそれらの数量をメータリングしてそれらを予め計算されたパラメータと比較することによって、メモリアクセス数又はキャッシュミス発生回数（すなわち、バッファ内のデータの一部を読み出そうとする試みもしくは書き込もうとする試みが失敗して結果としてメインメモリにアクセスするなど。）などの数量によって、（直接的にもしくは間接的に）タスクのプログレスが制限されるかどうかをメータモジュールが決定するために利用される。一実施形態において、プログレス制限測定は、Ｗｅモジュール２２０のメータモジュールインスタンスを、Ｗｃモジュール２１０において蓄積されたメータリングされた数量と比較されるべき値に提供することによって獲得される。モジュール２２０に供給された値は、プログレス制限パラメータと考えられる。次に、比較器機能は、例えば特定のキャッシュミスレートもしくはメモリアクセスレートによって制限された、測定された数量によってプログレスが制限されるかどうかを決定するための、時間に対する比較を含む２つの値を比較することができる。その結果は、プログレスエラーとして表される（留意すべきことは、この結果は、完了された作業を完了されるべき作業と比較することから生じる第１のプログレスエラーとは異なる、ということである。）。プログレス制限エラー値は、この明細書において他の箇所で詳細説明したように、タスクに対する、リソースに関連したパフォーマンスの割当を割り当てるために、もしくは調整するために使用される。プログレス制限パラメータは、タスクのパフォーマンスプロファイルの一部であってもよい。
【００４９】
現在時刻及びタスクがプロセッサシステム上で実行した以前の時間から、プログレスエラー及びプログレス制限エラー値の履歴（ヒストリー）は、この明細書の他の箇所で詳細説明されたように、タスクに対する、リソースに関連したパフォーマンスの割当を割り当てるために、もしくは調整するために利用される。これらの値は、例えば累積されたプログレス及びプログレス制限エラー値としてもしくは（タスクのパフォーマンスプロファイルの一部であってもよい）一連の現在の値及び履歴の値として表わされる。
【００５０】
適応クロックマネージャモジュール３２０は、要求されたクロック速度を決定することによって、及びクロック制御モジュール１８０によりプロセッサシステム１０のクロックレートを設定することによって、プロセッサシステムの１つもしくは複数のクロック速度を管理することができる。プロセッサシステムの１つもしくは複数のクロック速度は、コンピュータシステムにおけるタスクのアグリゲートクロックデマンドレートを計算することによって決定される。考えられるすべてのタスクの累積デマンドレートを示すアグリゲートクロックデマンドレートＡｒｄは、ＳＵＭｉ＝Ｔａｓｋｓ｛Ｔｒｄ［ｉ］｝＋Ｒｏと等しくすることができ、ここで、Ｔｒｄ［ｉ］はタスクｉに対するタスクデマンドレートであって、Ｒｏは個々のタスクのデマンドレートにおいて計上されないプロセッサ／システムのオーバヘッドデマンドレートである。タスクデマンドレートは、時間間隔もしくはデッドラインＴｉ内で、その期待された作業Ｗｅを完了するためのタスクｉに対するクロックレートデマンドを示すことができる。一実施形態において、アグリゲートデマンドレートは、実行できる状態にあるタスクからのデマンドレートを含むことができる一方で、他の実施形態においては、デマンドレートは実行できる状態にあるタスクからではなく、それらのタスクがいつ実行する状態とするかに対して計算し及び／もしくは推測して、推定されたデマンドレートを含むことができる。
【００５１】
オーバヘッドデマンドレートは、オーバヘッドデマンドレートに対する１つもしくはそれ以上の値がシステムステートによって選択されるように、一定のパラメータとすることができ、又はそれはシステムに依存することができる。いくつかの実施形態に対して、オーバヘッドデマンドレートはタスクデマンドレートに含まれる。（その場合には、タスクの代わりにプロセッサシステムオーバヘッドアクティビィティが組み込まれる。）一実施形態において、オーバヘッドデマンドレートは、タスクのコンピュータシステムに対するマッピング処理の間に、管理モジュール１０６によって予め決定される。
【００５２】
タスクｉが実行している間、プロセッサシステムのクロック周波数Ｆが一定である場合は、タスクデマンドレートは周波数と期待された実行時間との積を時間間隔で除算することによって計算される。すなわち、Ｔｒｄ［ｉ］＝（Ｆ×Ｑｉ）／Ｔｉであって、ここで、Ｆはタスクの期待された実行時間Ｑｉの間の実際のクロックレートであって、Ｔｉは時間間隔もしくはデッドラインである。期待された実行時間は、タスクがその期待された作業が完了するために期待された時間であって、タスクのパフォーマンスプロファイルの一部とすることができる。一般的には、期待された実行時間は、（プロセッサシステム上で実行する）タスクの以前の実行から得られ、タスクの完了されるべき期待された作業に対する累積時間の測度とすることができる。さらに、期待された実行時間は、典型的には、プロセッサシステム周波数に依存している。タスクのデマンドレートは、その時間間隔もしくはデッドラインのＴｉ内で、タスクがその期待された作業を完了するための最小クロックレートとすることができる。（アグリゲートクロックデマンドレートがインスタンスに対して変化するので、）タスク実行中にプロセッサシステムの周波数が変化するもう１つの実施形態では、タスクデマンドレートは、ＳＵＭｊ＝ＦｒｅｑｕｅｎｃｙＣｈａｎｇｅｓ｛（Ｆ［ｊ］×Ｑｉ［ｊ］／Ｔｉ｝として計算され、ここで、期待された実行時間は各周波数（変化）サブの間隔に対して１つのセグメントに分割される。タスクデマンドレートは、タスクのパフォーマンスプロファイルの一部とすることができる。
【００５３】
一実施形態において、クロックマネージャモジュール３２０は、アグリゲートデマンドレートＡｒｄに関連するクロック周波数においてプロセッサの実行を要求することができ、Ａｒｄが特定の従属関係に従って変化するときにそのような要求を行うことがこの明細書における他の箇所で説明される。プロセッサシステム周波数がアグリゲートデマンドレートよりも大きいかもしくは等しくなるように、システムが支持された周波数に設定された場合に、実際のシステムは、別個のプロセッサ及びシステムクロック周波数の設定を支持することだけができる。いくつかのプロセッサシステムでは、要求されたクロックレートがクロックスイッチング時間を計上するように調整される場合には、複数のクロックサイクルがクロック周波数を変更するために必要とされる。
【００５４】
各タスクの実行の間、プログレスエラー及び／もしくはプログレス制限エラーは監視され、タスクデマンドレートは、これらの値の１つもしくはそれ以上に基づいて、例えば周期的な間隔において更新される。一実施形態において、更新されたタスクデマンドレートは、この明細書において他に箇所で説明されたように、プロセッサシステムのクロックを変更することを結果としてもたらす新しいアグリゲートデマンドレートを結果としてもたらす。プログレスエラー及びプログレス制限エラーは、直接的にもしくは適応クロックマネージャモジュール３２０によって実行された１つもしくはそれ以上のレート適応関数によってデマンドレートを調整するために使用される。例えば、もしエラーが特定の制限よりも大きければ、１つのレート適応関数はタスクデマンドレートを調整することができる一方で、もしエラーが特定の期間よりも長く存続すれば、もう１つの適応関数がデマンドレートを変更することができる。１つもしくは複数のレート適応関数は、特定のプロセッサシステムにおいて望ましくないかもしれない、タスク及び／もしくはアグリゲートデマンドレートにおける、並びに／又は特定のタスクから生じる急速な変化を弱めるように使用され、システム依存性及び／もしくはタスク依存性とすることができる。レート適応関数は、タスクのパフォーマンスプロファイルの一部とすることができる。
【００５５】
適応クロックマネージャモジュール３２０は、個々のタスクデマンドレートを調整することによってアグリゲートデマンドを調整してそれらの期待された時間においてそれらの期待された作業を満たすタスクを計上することができる。もう１つの変形例において、プログレスエラー及びプログレス制限エラー値から生じる両方の調整により、個々のタスクデマンドレートを別々に調整する間に、プロセッサクロック周波数はアグリゲートデマンドレートと比較して調整される。従って、プロセッサクロック周波数、アグリゲートデマンドレート、及び個々のタスクデマンドレートは、考えられるすべてのタスクの完了された期待された作業の合計が、閉じられたループ形式において完了するべきそれらの作業と一致するように調整される。
【００５６】
デマンドレート調整によって、オーバヘッドデマンドレートが個々のタスクデマンドレートに含まれてそれ故にオプションのパラメータとすることができる。
【００５７】
最小及び最大のしきい値パラメータは、タスクデマンドレートと関連付けられる。これらの最小及び最大のしきい値パラメータは、プログレスエラー及びプログレス制限エラーに関連することができ、最小の及び／もしくは最大のタスクデマンドレートを制限するために使用される。もう１つの実施形態において、しきい値はタスクの実行の間に選択された、最小及び最大のプロセッサクロック周波数を制限することができる。最小のしきい値パラメータと最大のしきい値パラメータとは、タスクのパフォーマンスプロファイルの一部とすることができる。
【００５８】
適応クロックマネージャモジュール３２０は、プロセッサクロック周波数をより高く調整することによって完了された作業レートを増加させないときと、逆に完了された作業のレートを減少させることなしに要求されたクロックレートが下に調整されるときとを検出することができる。この条件は、例えばプロセッサ周波数が変化されるようなプログレスエラーにおいて、変化もしくはその不足を観察することによって検出される。クロックマネージャモジュール３２０は、タスクのステートが変更するときに要求されたクロックレートをより高く調整することができ、その結果、クロック周波数をより高く増加させることによって完了された作業レートを実に増加させる。この検出は、プロセッサクロック周波数を設定することによって完了され、その結果、プログレスエラーは特定のしきい値基準を満たし、エラーが特定のしきい値を下回るとき、プログレスエラーにおける減少によって示されるプログレスがより大きくなるにつれてクロック周波数はより高く調整される。プログレスエラー及び／もしくはプログレス制限エラーを含むことができる、特定の１つもしくは複数のレート適応関数は、プロセッサクロック周波数を計算するときに利用される。これらのレート適応関数はシステム及び／もしくはタスク依存性とすることができ、並びにタスクパフォーマンスプロファイルの一部とすることができる。
【００５９】
タスクデマンドレート、レート適応パラメータ、プログレス制限パラメータ、及び／もしくはしきい値などは、タスクステートとともに動的に変化することができ、その結果、パフォーマンスプロファイルパラメータは各セットが１つもしくはそれ以上のプログラムステートと関連付けられ、管理モジュール１０６によるタスクの実行の間に動的に変化されるパラメータのセットである。さらにもしくは代替には、そのようなタスクデマンドレート、レート適応パラメータ、プログレス制限パラメータ、及び／もしくはしきい値などが、（管理モジュール１０６よりむしろ）タスクによって直接的に調整される。
【００６０】
タスクのデマンドレートは、タスクが実行できる状態となるときにアグリゲートデマンドレートに加算され、それは、（例えば、スケジューリングもしくは例えばＩ／Ｏ操作に対するブロックを解除するなどの他のイベントに基づいて、）スケジューラモジュール１３０、又は例えばＩ／Ｏサブシステムなどの他のサブシステムによって決定されてもよい。初期に、このデマンドレートはタスクパフォーマンスプロファイルによって特定されるかもしくはタスクパフォーマンスプロファイルから計算され、例えばプログレスエラーの関数などのレート適応関数により更新された、長期にわたるタスクの作業完了プログレスに基づいて更新される。パフォーマンスプロファイルは、１つもしくはそれ以上のタスクステート依存性パフォーマンスパラメータを含むことができる。そのような場合には、タスクデマンドレートは、これらのパラメータがタスクステートもしくはシステムステートによって変更されるときに更新され、変更し、さらに更新される一方で、（パフォーマンスプロファイルパラメータの計算においてプログレスエラー及び／もしくはプログレス制限エラーを用いて、）レートエラー適応によりプロセッサシステム上でタスクは実行している。
【００６１】
（例えばスケジューリングもしくは例えばＩ／Ｏ操作に対してブロックされるなどの他のイベントなどに基づいて、）タスクが実行不可能となる場合に、アグリゲートデマンドレートは個々のタスクデマンドレートから再計算される。個々のタスクデマンドレートそれぞれを計算することと比較すると、オーバヘッド要件を減少することができたもう１つの実施形態では、新しいアグリゲートデマンドレートは、（期待された作業が完了されたときに）時間間隔もしくは現在の実行の終わりにおけるタスクの累積デマンドレートを減算することによって、いずれが遅い方でも構わないが、将来における特定の時間における特定の情報を提示する、例えばカレンダーキューなどの時間ベースのキューイングシステムにおいて累積デマンドレートをセットすることによって計算される。この実施形態は、いずれが遅い方でも構わないが、その時間間隔もしくはその実行の完了までに、タスクレートが最初に加算された時間からアグリゲートデマンドレート内でタスクのデマンドレートを予約する。
【００６２】
適応クロックマネージャモジュール３２０は、例えば、（他のカレンダーキュー技術が利用された）カレンダーキューエントリー１などのカレンダーキューを利用することができる。適応クロックマネージャモジュール３２０は、タスクの累積クロックデマンドレートを、（例えばカレンダーキューエントリー（Ｎ−１）のもとでのタスクなどの）将来における、（時間間隔からカレントリアルタイムＲｔまでの差である）ロケーション（Ｔｉ−Ｒｔ）のユニットに挿入することができる。カレンダーキューは有限のサイズであるので、インデックスは、ＭＡＸ（Ｔｉ−Ｒｔ，ＭＡＸ＿ＣＡＬＥＮＤＡＲ＿ＳＩＺＥ−１）として計算され、ここで、ＭＡＸ＿ＣＡＬＥＮＤＡＲ＿ＳＩＺＥ（Ｎ）はカレンダーキューの離散時間エントリーの数である。カレントリアルタイムＲｔは非空のカレンダーロケーションまで進むと、クロックマネージャモジュール３２０は、アグリゲートデマンドレートから、Ｔｉ＝Ｒｔであるそのロケーションにおける各タスクの累積されたクロックデマンドレートを減算することができる。これが図４に示されたカレンダーキューエントリー０におけるＴｉ＝Ｒｔのときに発生する。インデックスは現在時刻もしくはリアルタイムから将来における値に関連した時間を表すことができる。Ｔｉ＞Ｒｔを有するタスクは特定のしきい値内でカレンダーキューに再挿入される。カレンダーのしきい値及びサイズは、システム設計、リアルタイムクロックの精度及び所望された時間粒度に依存することができる。カレンダーキューは、リアルタイムの時間が進むにつれて、前の現在時刻エントリーはカレンダーキューにおける最後のエントリーとなるように、サーキュラーキューとすることができる。図４の例の４００において、リアルタイムがエントリー１まで進むと、エントリー０は最も古いキューエントリーとなる。インデックスはカレンダーがサーキュラーキューであるという事実を考慮することができる。現在時刻インデックスは、リアルタイムが進むにつれて０から（Ｎ−１）まで進むことができる。従って、ポイント（Ｎ−１）において、現在時刻インデックスは０に戻って完了する。
【００６３】
さらに、適応クロックマネージャモジュール３２０は、プロセッサシステムのアイドルステートに入ることとプロセッサシステムのアイドルステートから再開することとを管理することができる。もしアグリゲートクロックデマンドがゼロならば、クロックマネージャモジュール３２０は、アグリゲートクロックレートがゼロよりも大きい時間及びゼロよりも大きくなるであろう時間までプロセッサシステムをアイドルステートにセットすることができる。いくつかのプロセッサシステムにおいて、複数のクロックサイクルは、アイドルステートに入ること及びアイドルステートから再開することのために必要とされてもよく、アイドルステートに入る時間とアイドルステートを再開する時間のみならず動作状態を再開するときに必要とされるクロックレートが（クロックスイッチング時間のみならず）アイドルに入る時間及び再開時間を計上するように調整される。
【００６４】
クロックマネージャモジュール３２０はまた、アグリゲートデマンドレートよりも大きい周波数もしくは等しい周波数を要求することによって、及び（ゼロの周波数を有するアイドル時間を考慮して、）平均周波数がアグリゲートデマンドレートに等しいかもしくは高くなるように、プロセッサシステムをアイドルステートにセットすることによって、ある期間にわたって、特定のアグリゲートデマンドレートを取得することができる。プロセッサシステム１０がより高い周波数で実行してより高いエネルギー効率を有する実施形態において、その場合にプロセッサシステム１０は特定のアグリゲートデマンドレートを満たすためにアイドルステートにセットされる。いくつかの実施形態では、要求されたレートは計算されたアグリゲートデマンドレートよりも高くなるように適合化されて処理システムをアイドルステートにセットしてバイアスをかけることができる。
【００６５】
周波数及びアイドルステートが選択されるパラメータは、１つもしくは複数のタスクをコンピュータシステムに対するマッピングの処理の間に管理モジュール１０６によりプロセッサシステムを特徴付けることから得られる。
【００６６】
適応クロック管理モジュールは、アイドルステートモジュール１８４にプロセッサシステムがアイドルとなるように信号を送ることによって、プロセッサシステムがアイドルステートに入ることを要求することができる。例えばＩ／Ｏデバイスもしくはタイマーなどからのインタラプトなどのイベントが発生するときにアイドルステートは終了することができる。
【００６７】
マルチプロセッサシステムにおいて、アグリゲートデマンドレートは、各プロセッサに対して個々に、又はすべてのプロセッサもしくはプロセッサのサブセットもしくはこれらの組み合わせに対して集合的に計算される。いくつかのタスクは特定のプロセッサに対して割り当てられる一方で、他のタスクはプロセッサの任意のセットもしくは特定のセットに対して自由に実行してもよい。アグリゲートデマンドレートは、制限を遵守するすべてのプロセッサに対して計算され、束縛のない各タスクは、特定のプロセッサ上でタスクを実行することが望ましいアフィニティ特性を含む特定のプロセッサ上で実行する必要がある。
【００６８】
マルチプロセッサシステムの一実施形態において、各プロセッサクロックレートとアイドルステートとは個々に制御される。この場合、クロックマネージャモジュール３２０は、最小のエネルギーを得るための、１つもしくはそれ以上のプロセッサのアイドリングの間に、クロックレートの組み合わせを選択することができる。クロックレートが個々に調整されずにアイドルステートが個々に調整されてもよい場合には、単一のクロックレートは、最小のエネルギー消費量を得るための、１つもしくはそれ以上のプロセッサのアイドリングの間に選択される。マルチプロセッサシステムのもう１つの実施形態では、クロックレートは、すべてのプロセッサ、もしくはプロセッサの複数のサブセットに対するアグリゲートデマンドレートが、例えばスループットを最大化し、又は個々のタスクのもしくは複数のタスクによって実行される並列計算のタスク完了時間を最小化するなどの特定の所望された目標を達成するために、プロセッサ間で分割される。（どのプロセッサにおいてどの１つもしくは複数のタスクが実行するかの決定において、）スケジュールモジュール１３０とのインタラクションが、所望された目標を達成するために必要とされてもよい。
【００６９】
クロックモジュール１８０及びアイドルステートモジュール１８４は、図面には図示されないが、他のコンピュータシステム構成要素とのインタラクションを有することができる。これらのインタラクションは、１つもしくはそれ以上のプロセッサのクロック速度もしくはアイドルステートを変化させることを可能とするために必要であってもよい。例えば、プロセッサ周波数の変更は、バス、周辺機器のクロック速度、システムメモリ１５０のクロック速度などの変更を要求することができる。同様に、プロセッサをアイドルステートにセットしもしくはアイドルステートから再開するために、特定のバス、周辺機器、システムメモリ１５０などが（例えばＩ／Ｏデバイスを静止することやそのバッファをシステムメモリに対して書き込むことなどの）ステートに入る前に準備を必要としてもよく、もしくは（例えば１つもしくは複数の操作を開始するためのＩ／Ｏデバイスの初期化などの）動作状態が再開される。
【００７０】
キャッシュ占有管理モジュール３４０は、バッファもしくはキャッシュ占有割当量の使用を管理することができる。これらの占有割当量は、タスクが使用するかもしれない（もしくは使用するべきである）バッファの数の数の制限とすることができる。占有割当量Ｏｑ及び現在の占有Ｏｃはタスクのパフォーマンスプロファイルにおいて追加的に格納される。キャッシュ占有は、例えば、同時係属の２０１１年３月２５日に出願された、発明の名称が「プロセッサキャッシュメモリ占有の制御」であって、米国仮出願第６１／３４１，０６９号に対する優先権を主張する特許文献２で説明されたキャッシュ置換アルゴリズムなどのキャッシュ置換アルゴリズムを使用して選択的に割り当てられる。両方の出願の内容が参照によりここに組み込まれる。
【００７１】
このケースにおける占有は、タスクによって使用されたバッファの実際の数の表示として特徴付けられる。バッファは、（例えば入力／出力バッファキャッシュなどの、）それが１つの場所からもう１つの場所まで移動されている間に一時的にデータを保持するために使用されるためのメモリもしくはメモリの領域、もしくは（例えばプロセッサ命令／データキャッシュなどの、）より速いアクセスを可能とするために使用されるメモリもしくはメモリの領域である。バッファ（すなわち、キャッシュブロック／ライン）がタスクに対して割り当てられるので、占有カウンタＯｃはインクリメントされ、バッファはタスクに対する割り当てを解除されるので、占有カウンタはデクリメントされる。占有割当量が占有カウンタよりも大きいときはいつでも（Ｏｃ＞Ｏｑ）、タスクはその占有割当量を超えている。占有割当量を超えることによって、そのタスクのバッファが優先的に置き換えられ（キャッシュブロック／ラインの置換）、もしくはエンティティがその割当量に従うまでは（Ｏｃ＝＜Ｏｑ）、新しいバッファの割当を回避させることができる。占有割当量には、より高いもしくはより低い優先度が占有とこれらの追加的な割当量との比較に対して与えられるように、複数の割当量パラメータを含むことができる。
【００７２】
タスクの占有割当量は、そのパフォーマンスプロファイルの一部とすることができる。このパフォーマンスプロファイルパラメータは静的に設定されてもよく、もしくはプログラムステートに依存してもよく、もしくはキャッシュ占有マネージャによって動的に計算されてもよい。動的占有割当量は、例えばデッドラインに間に合うなどのタスクのパフォーマンスに基づいて調整されてもよく、この明細書における他の箇所で説明されたように、プログレスエラー及び／もしくはプログレス制限エラーを用いて、完了された作業と期待された作業との比較に関して、その実行の間もしくは実行からのフィードバックの間のキャッシュミス情報に基づいて調整されてもよい。
【００７３】
キャッシュ占有マネージャは、占有割当量を調整することができる。そのような調整は、例えば、システムレベル設定された制限とタスクのパフォーマンスプロファイルにおいて含まれた制限との順々の組み合わせとすることができる、予め定義された／設定された制限に基づくことができる。一実施形態において、占有割当量は、インスタンスに対するプログレスエラーもしくはキャッシュミスレート、又は２つの組み合わせを利用して、タスクの期待された作業レートと完了された作業レートとの間の差に基づいて調整される。そのような変形例では、占有割当量の計算は、タスクがその期待された作業レートよりも下回るときもしくはキャッシュミスレートが特定のしきい値よりも上回るときに占有割当量が増加されるように行われる。反対に、タスクがその期待された作業を超えているときもしくはキャッシュミスレートが特定のしきい値を下回るときに占有割当量は減少される。この計算はまた、例えばプログレスが占有以外のもう１つのファクタによって制限されていることを検出することによって、プログレス制限エラー値を考慮することができる。
【００７４】
キャッシュ占有管理モジュールは、もしそれらが占有割当量制御機構、又は例えばシステムメモリ１５０に格納されたプログラムなどの、処理システムもしくはコンピュータシステムの一部とすることができ、又は当該処理システムもしくはコンピュータシステムに接続された、他のバッファ／キャッシング構成要素を持つならば、命令キャッシュ１０４及び／もしくはデータキャッシュ１４５において割当量を設定することによって占有割当量を制御することができる。キャッシュ占有パラメータはタスク（もしくはグループのタスク）に関連することができ、その結果、もしキャッシュ占有管理モジュール及びそれぞれのＩ／Ｏサブシステムの両方によって利用されれば、システムはおそらくタスクを追跡し、占有割当量をタスクに割り当てるかもしくはタスクの代わりに割り当てる。割当量制御機構は、ハードウェアもしくはソフトウェア（ファームウェア）又は両方の組み合わせにおいて実施される。
【００７５】
キャッシュ占有は、タスクが１つもしくは複数の物理アドレス空間から分離してもよい１つもしくは複数の仮想メモリアドレス空間を利用できるメモリ管理技術である、仮想メモリを物理メモリにマッピングすることを含むことができる。実際には、物理メモリは複数のタスクが物理メモリを共有することを可能とするキャッシュとしての役目を果たし、ここで、１つもしくは複数の仮想メモリ空間の全体サイズは、物理メモリのサイズよりも大きくてもよく、又は１つもしくはそれ以上のタスクに割り当てられた物理メモリよりも大きくてもよく、それ故に物理メモリ、及び／もしくはその一部は、「キャッシュ」として役目を果たす。この明細書の他の箇所で説明されたように、タスクの物理メモリ占有は管理される。管理モジュールは、１０６におけるように、分離したモジュールであってもよく、１つもしくはそれ以上のオペレーティングシステム、仮想機械モニタなどの一体部分であってもよい。
【００７６】
キャッシュ及び／もしくはバッファサブシステムの多重度が存在しそれ故にタスクのパフォーマンスプロファイルにおいて利用され格納されたいくつかの占有割当量パラメータが存在することができる。これらのキャッシュ及びバッファは、ハードウェアもしくはソフトウェア（ファームウェア）又は両方の組み合わせにおいて実施化される。
【００７７】
完了された作業レートが占有が期待された作業レートを満たすように増加され、及び／もしくは期待された作業レートが満たされているときもしくは超えられたときに減少される、閉じられたループ形態において、完了された期待された作業レートと一致するように、タスクの１つもしくは複数の占有割当量が修正される。
【００７８】
１つもしくは複数の占有割当量の修正は、タスクであってもよい及びタスクステートに依存してもよいレート適応関数を利用することができる。
【００７９】
占有割当量に対するタスクの優先順位付けは、特定のより高い優先度のタスクはより低い優先度のタスクを犠牲にしてそれらの期待された作業を満たすことを保証するために利用される。いくつかの実施形態において、管理モジュール１０６は、最大及び最小の占有割当量並びに／又は（規定／ルールのセットを介して、）占有割当量などに対して許可された最大及び最小の変化を決定すること／制御することによって、占有割当量の全体の割当を制御することができる。
【００８０】
Ｉ／Ｏ帯域幅管理モジュール３６０は、（単位時間当たりのデータ転送の測度である、）コンピュータシステムの１つもしくは複数の入力出力サブシステムの帯域幅の利用を管理することができる。タスクによって、もしくはインスタンスに対するタスクの１つもしくは複数のＩ／Ｏ要求の代わりにオペレーティングシステムによって実行されたＩ／Ｏ操作は、Ｉ／Ｏ帯域幅マネージャによるパフォーマンスリソースとして管理されてＩ／Ｏ操作のタスクパフォーマンス要件が満たされることを確実とすることができる。
【００８１】
タスクのＩ／Ｏ帯域幅は、そのパフォーマンスプロファイルの一部とすることができる。このパフォーマンスは、（例えば、プログラムステートなどに基づいて、）静的に設定することができ、もしくはそれは、例えばＩ／Ｏ帯域幅マネージャなどによって動的に計算される。動的なＩ／Ｏ帯域幅値は、例えば、期待された作業レートと完了された作業レートとの比較に関して、その計算されたデッドラインもしくは実行からのフィードバックを満たして、タスクのパフォーマンスに基づいて調整される。
【００８２】
Ｉ／Ｏ帯域幅マネージャは、システムレベル設定された制限とタスクのパフォーマンスプロファイルに含まれた制限との組み合わせとすることができる特定の設定された制限内で、Ｉ／Ｏ帯域幅パラメータを調整することができる。Ｉ／Ｏ帯域幅は、プログレスエラー及び／もしくはプログレス制限エラー値、又は期待されたＩ／Ｏレート、又はこれらの組み合わせを利用して修正される。Ｉ／Ｏ帯域幅がプログレス及び／もしくはプログレス制限エラー値並びにしきい値によって増加もしくは減少されるように、Ｉ／Ｏ帯域幅レートの計算が行われる。一般的に、これらの値及びしきい値は、不必要にＩ／Ｏ帯域幅を使用することなしに、タスクの完了された作業レートを、完了されるべき作業レートに一致させるように決定される。タスクの作業は、タスクの第１の作業が特定のレートにおけるＩ／Ｏデータの転送である場合に、もしかしたらＩ／Ｏ帯域幅レートとすることができる。完了された作業レートが閉じられたループ形態において完了されるべき作業レートと一致するように、タスクのＩ／Ｏ帯域幅が調整され、ここで、Ｉ／Ｏ帯域幅が期待された作業レートを満たすように増加され、並びに／又はプログレス及びプログレス制限エラーを考慮して期待された作業レートが超えようとするときに減少される。
【００８３】
Ｉ／Ｏリソースは、Ｉ／Ｏ帯域幅割当を介して割り当てられ、システムパフォーマンス保証を提供するような方法で、Ｉ／Ｏ帯域幅マネージャを介して管理される。そのような保証は、（規定／ルールのセットを介して、）全体のＩ／Ｏ帯域幅がすべて使用完了とならないように割り当てられもしくは特定のタスクが他のものを犠牲にしてそれらのＩ／Ｏ帯域幅を受信することとできる。
【００８４】
Ｉ／Ｏ帯域幅管理モジュールは、存在するそのような帯域幅制御機構、又は例えばシステムメモリ１５０に格納されたプログラムなどの処理システムもしくはコンピュータシステムの一部もしくは当該処理システムもしくはコンピュータシステムに接続されてもよい他のＩ／Ｏ構成要素に対するＩ／Ｏサブシステムモジュール１０８において帯域幅パラメータを設定することによって、Ｉ／Ｏ帯域幅を制御することができる。Ｉ／Ｏ帯域幅パラメータは、システムが帯域幅をタスクに割り当てるかもしくはタスクの代わりに割り当てるように、タスク（もしくはタスクのグループ）に関連することができる。いくつかの変形例において、これがタスクＩＤを追跡してＩ／Ｏ操作と関連付けることを含むことができ、その結果、Ｉ／Ｏ帯域幅管理モジュール及びそれぞれのＩ／Ｏサブシステムはデータ転送を特定のタスクの属性と考えてもよい。Ｉ／Ｏ帯域幅制御機構は、ハードウェアもしくはソフトウェア（ファームウェア）又は両方の組み合わせにおいて実施される。
【００８５】
いくつかの実施形態において、ＤＭＡコントローラが利用される。直接的なメモリアクセスは、コンピュータ内の特定のハードウェアサブシステムが、中央処理ユニットと独立した読み出し及び／もしくは書き出しのためにシステムメモリにアクセスすることを可能とする現代のコンピュータ及びマイクロプロセッサの特徴である。多数のハードウェアシステムは、ディスクドライバコントローラ、グラフィックカード、ネットワークカード、サウンドカード及びグラフィック処理ユニット（ＧＰＵ）を含むＤＭＡを使用する。ＤＭＡはまた、マルチコアプロセッサにおいて、特にマルチプロセッサシステムオンチップにおけるチップ内データ転送のために使用され、ここで、その処理要素は、（しばしばスクラッチドパッドメモリと呼ばれる）局部メモリが備えられ、ＤＭＡは局部メモリとメインメモリとの間でデータを転送するために使用される。
【００８６】
Ｉ／Ｏ帯域幅マネージャは、帯域幅制御機構をＩ／Ｏ操作に提供する機構を介して、すなわち帯域幅シェーピング（形成）を介してＩ／Ｏ帯域幅を制御することができる。転送のためのクレジットを蓄積するための十分な時間が経過するまで、特定のデータ転送要求を遅延させることによって帯域幅シェーピングが完了される。（ここで、クレジットとは、特定のレートにおいて時間とともに蓄積されたデータの測度であって、帯域幅を表す。）Ｉ／Ｏ操作もしくはＤＭＡを含むデータ転送の帯域幅管理の操作は、ハードウェアもしくはソフトウェア（ファームウェア）において実施される。
【００８７】
Ｉ／Ｏサブシステム、もしくはサブシステム、デバイス及びインターフェースのインスタンスの多重度が存在することができ、それ故にタスクのパフォーマンスプロファイルにおいて利用されて格納された複数のＩ／Ｏ帯域幅パラメータが存在してもよい。これらのＩ／Ｏサブシステムは、ハードウェアもしくはソフトウェア（ファームウェア）又は両方の組み合わせにおいて実施される。
【００８８】
Ｉ／Ｏ帯域幅に対するタスクの優先順位付けは、特定のより高い優先度のタスクがより低い優先度のタスクを犠牲にしてそれらの期待された作業を満たすことを保証するために利用される。もう１つの実施形態において、Ｉ／Ｏ帯域幅管理システムは、プログレスエラー及びプログレス制限エラーを考慮すれば、それらの完了された作業をそれらの完了されるべき作業と一致するタスクに基づいて、Ｉ／Ｏ操作優先順位付けを要求することができる。これは、例えば、対象となるすべてのタスクに対してプログレスエラー及びプログレス制限エラーを考慮することができ、その結果、特定のプログレス制限エラー値内で、より大きいプログレスエラーを有するタスクが、プログレス制限エラー値内で、より小さいプログレスエラーを有するタスクを超えた優先度が与えられる。
【００８９】
プログレスエラー及びプログレス制限エラーは、直接的にもしくはＩ／Ｏ帯域幅マネージャによって実行された１つもしくはそれ以上のレート適応関数を介して、タスクのＩ／Ｏ帯域幅パラメータを調整するために使用される。例えば、１つのレート適応関数は、もしエラーが特定の制限よりも大きければ、Ｉ／Ｏ帯域幅だけを調整する一方で、もう１つの適応関数は、もしエラーが特定の期間よりも長い間存続すれば、デマンドレートだけを変更することができる。レート適応関数は、タスクのパフォーマンスプロファイルの一部とすることができる。
【００９０】
Ｉ／Ｏ帯域幅に対するタスクの優先順位付けは、特定のより高い優先度のタスクがより低い優先度のタスクを犠牲にしてそれらの期待された作業を満たすことを保証するために利用される。いくつかの実施形態において、管理モジュール１０６は、（例えば、規定／ルールのセットを介して、）最大及び最小のＩ／Ｏ帯域幅並びに／又は帯域幅パラメータを決定する／制御することによって、Ｉ／Ｏ帯域幅の全体の割当を制御することができる
【００９１】
スケジューラモジュール１３０は、タスク優先度を含むタスクパラメータに基づいて、そのタスクのリストから実行されるべき次の１つもしくは複数のタスクを選択することができる。スケジューラモジュール１３０は、プロセッサシステム１０に対してより高い優先度のタスクが準備できていることが示される。プロセッサシステム１０（もしくはプロセッサシステム１０上のソフトウェア）は、現在実行しているタスクから先制してスイッチし、より高い優先度のタスクを実行するように決定することができる。プロセッサシステムにおけるスケジューラモジュール１３０もしくはソフトウェアは、たぶん現在実行しているタスクを置換して、より高い優先度タスクが実行のために選択されるべきことを示すことができる。その場合は、プロセッサシステム１０において現在実行しているもしくは実行されたタスクがまたパフォーマンスリソースマネージャ１２０に対して指示される。これが起こると、現在実行しているタスクのために利用された、１つもしくは複数のメータリングモジュール１１０のステートは、タスクのコンテキストに保存され、メータリングモジュールは、（メータリングモジュール内の、モジュール２１０及び２２０並びに１つもしくは複数の比較器機能を更新することによって、）パフォーマンスリソースマネージャによって、新しく選択されたタスクを監視するように指示される。パフォーマンスリソースマネージャにおける追加的なステートは、このタスクのスイッチングの結果として同様に修正される。マルチプロセッサシステムにおいて、スケジューリングは、プロセッサごとのベースに対して割り当てられ、その結果、特定のプロセッサに対するタスクはそのタスクのプログレスエラー及び／もしくはプログレス制限エラーによって影響が及ぼされる。これがまた、マルチスレッドシステムに対する、スレッドごとのベースに対して実行される。
【００９２】
図５は、方法５００を例示する処理フロー図であって、ここで、５１０では、プロセッサシステムによる複数のタスクの実行が監視される。その監視に基づいて、５２０では、パフォーマンスリソースの調整を要求するタスクは、各タスクに対するプログレスエラーとプログレス制限エラーとのうちの少なくとも１つを計算することによって識別される。引き続いて、５３０では、各識別されたタスクに対して割り当てられたプロセッサシステムのパフォーマンスリソースが調整される。その調整には、例えば、タスクを実行するプロセッサシステムにおける少なくとも１つのプロセッサのクロックレートを調整すること、タスクによって利用されるべきキャッシュ及び／もしくはバッファの量を調整すること、並びにタスクによって利用されるべき入力／出力（Ｉ／Ｏ）帯域幅の量を調整することのうちの１つもしくはそれ以上を含むことができる。
【００９３】
ここで説明された主題の種々の実施形態は、デジタル電子回路、集積回路、特に設計されたＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア並びに／又はそれらの組み合わせで実現化されてもよい。これらの種々の実施形態は、記憶装置システム、少なくとも１つの入力デバイス、並びに少なくとも１つの出力デバイスからデータ及び命令を受信するために、並びに当該記憶装置システム、少なくとも１つの入力デバイス、並びに少なくとも１つの出力デバイスに対してデータ及び命令を送信するために接続された、特別のもしくは一般的な目的であってもよい、少なくとも１つのプログラマブルプロセッサを含むプログラマブルシステムに対して実行可能な及び／もしくは解釈可能な１つもしくはそれ以上のコンピュータプログラムにおける実行を含んでもよい。
【００９４】
（プログラム、ソフトウェア、ソフトウェアアプリケーションもしくはコードとしてもまた知られた）これらのコンピュータプログラムは、プログラマブルプロセッサに対する機械命令を含み、高水準手続きの及び／もしくはオブジェクト指向のプログラミング言語、及び／もしくはアセンブリ／機械言語で実行されてもよい。ここで使用されたように、用語「機械読み出し可能な媒体」とは、任意のコンピュータプログラム製品、装置並びに／又は、機械命令及び／もしくはデータを、機械命令を機械読み出し可能な信号として受信する機械読み出し可能な媒体を含むプログラマブルプロセッサに供給するために使用された（例えば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス（ＰＬＤ）などの）デバイスに言及する。用語「機械読み出し信号」とは、機械命令及び／もしくはデータをプログラマブルプロセッサに供給するために使用された任意の信号に言及する。
【００９５】
２，３の変形例が詳細に上述説明されたが、他の変更が可能である。例えば、添付の図面で説明され、ここで説明されたロジックフローは、望ましい結果を得るためには、図示された特定の順番、もしくはシーケンシャルの順番は必要とされない。以下の特許請求の範囲の範囲内で他の実施形態が可能である。
【図１】
2013527516.tif 000003
【図２】
2013527516.tif 000004
【図３】
2013527516.tif 000005
【図４】
2013527516.tif 000006
【図５】
2013527516.tif 000007
【国際調査報告】
2013527516.tif 000008
2013527516.tif 000009
2013527516.tif 000010