(57)【特許請求の範囲】
【請求項１】
負荷の大きさに関連する条件に基づいて一時的に一部の論理プロセッサの動作周波数を上昇させるクロック・ブーストが可能な複数の論理プロセッサを備えるコンピュータに、
前記複数の論理プロセッサのいずれかに前記クロック・ブーストの設定をするステップと、
新たに生成されるプロセスがフォアグラウンドのウインドウを表示する優先プロセスか否かを判断するステップと、
前記クロック・ブーストの設定がされた論理プロセッサの使用率を取得するステップと、
前記使用率が所定値未満のときに前記優先プロセスのアフィニティ・マスクを書き換え、前記優先プロセスを前記クロック・ブーストの設定がされた論理プロセッサだけにディスパッチして優先実行するステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項２】
前記優先実行するステップが、オリジナルのアフィニティ・マスクと前記複数の論理プロセッサのそれぞれに対する前記クロック・ブーストの設定状態を示すマスク・ビットを論理積演算するステップを含む請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記優先実行するステップが、前記クロック・ブーストの設定がされた論理プロセッサだけを指定するように前記アフィニティ・マスクを書き換えるステップを含む請求項１または請求項２に記載のコンピュータ・プログラム。
【請求項４】
前記論理プロセッサの温度を取得するステップを有し、
前記アフィニティ・マスクをさらに前記温度が所定値未満のときに書き換える請求項１から請求項３のいずれかに記載のコンピュータ・プログラム。
【請求項５】
前記クロック・ブーストが未設定の論理プロセッサが存在するか否かを判断するステップと、
前記クロック・ブーストが未設定の論理プロセッサが存在しかつ前記クロック・ブーストの設定がされた論理プロセッサの使用率が所定値以上のときに、前記未設定の論理プロセッサに前記クロック・ブーストの追加的な設定をするステップと
を有する請求項１から請求項４のいずれかに記載のコンピュータ・プログラム。
【請求項６】
アフィニティ・マスクが書き換えられた前記優先プロセスが前記クロック・ブーストの設定がされた論理プロセッサだけで実行されるように前記優先プロセスのアフィニティ・マスクを書き換えるステップを有する請求項５に記載のコンピュータ・プログラム。
【請求項７】
前記クロック・ブーストの設定がされた論理プロセッサの使用率が所定値未満のときに前記クロック・ブーストが未設定の論理プロセッサにもディスパッチされて優先実行されない優先プロセスが存在するか否かを判断するステップと、
前記優先実行されない優先プロセスが優先実行されるように前記アフィニティ・マスクを書き換えるステップと
を有する請求項１から請求項６のいずれかに記載のコンピュータ・プログラム。
【請求項８】
前記クロック・ブーストが未設定の論理プロセッサの使用率を取得するステップと、
前記クロック・ブーストの設定がされた論理プロセッサの使用率が所定値以上でかつ前記クロック・ブーストが未設定の論理プロセッサの使用率が所定値未満のときに前記優先プロセスが前記クロック・ブーストが未設定の論理プロセッサでも実行されるように前記アフィニティ・マスクを書き換えるステップと
を有する請求項１から請求項７のいずれかに記載のコンピュータ・プログラム。
【請求項９】
前記優先プロセスを、スレッドの優先度に基づいて決定する請求項１から請求項８のいずれかに記載のコンピュータ・プログラム。
【請求項１０】
前記優先プロセスが、ディスクＩ／Ｏ処理の優先度に基づいて決定される請求項１から請求項９のいずれかに記載のコンピュータ・プログラム。
【請求項１１】
請求項１から請求項１０のいずれかに記載のコンピュータ・プログラムを記憶したコンピュータによる読み取り可能な記録媒体を備えるコンピュータ。
【請求項１２】
マルチ・プロセッサ・システムを搭載するコンピュータであって、
負荷の大きさに関連する条件に基づいて一時的に一部の論理プロセッサの動作周波数を上昇させるクロック・ブーストが可能な複数の論理プロセッサと、
前記複数の論理プロセッサのいずれかに前記クロック・ブーストの設定をする設定手段と、
新たに生成されるプロセスがフォアグラウンドのウインドウを表示する優先プロセスか否かを判断する判定手段と、
前記クロック・ブーストの設定がされた論理プロセッサの使用率を取得する使用率取得手段と、
前記使用率が所定値未満のときに前記優先プロセスのアフィニティ・マスクを書き換え、前記優先プロセスを前記クロック・ブーストの設定がされた論理プロセッサだけにディスパッチして優先実行する実行手段と
を有するコンピュータ。
【請求項１３】
前記負荷の大きさに関連する条件が、前記論理プロセッサの温度が基準値未満でかつ消費電力が熱設計消費電力を越えている範囲に設定されている請求項１２に記載のコンピュータ。
【請求項１４】
前記複数の論理プロセッサが１つのパッケージに複数のプロセッサ・コアが実装されたマルチ・コア・プロセッサで構成されている請求項１２または請求項１３に記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定のプロセスを短時間に処理する技術に関し、さらに詳細には、クロック・ブーストの可能なマルチ・プロセッサ環境で特定のプロセスを短時間に処理する技術に関する。
【背景技術】
【０００２】
マルチ・タスクのオペレーティング・システム（ＯＳ）は、スレッドに一度に連続して中央演算処理装置（ＣＰＵ）を利用できる時間であるクォンタム（タイムスライス）を付与する。ＣＰＵにディスパッチされたスレッドは与えられたクォンタムからクロック・サイクルごとに一定の値を減算し、与えられたクォンタムが０になると実行可能キューの最後に配置され、それに代わって実行可能キューに登録された他のスレッドがディスパッチされる。このときスケジューラは各スレッドの優先度レベルを比較してディスパッチするスレッドを決定する。したがって優先度レベルが高いスレッドほど所定時間内におけるＣＰＵの割り当て時間が長くなり早期に処理が完了する。
【０００３】
プロセスは、ユーザが操作しているウインドウを生成するフォアグラウンドのプロセスとその他のすべてのプロセスであるバックグラウンドのプロセスに分けることができる。ユーザは、システムがバックグラウンドのプロセスよりもフォアグラウンドのプロセスに対してすばやく応答することを望んでいる。ＯＳは、フォアグラウンドのプロセスの優先度レベルを上げてバックグラウンドのプロセスよりも短時間で処理できるようにスケジューラを操作することができる。また、プロセスを生成するプログラムがスケジューラを操作して特定のプロセスの優先度レベルを上げることもできる。
【０００４】
しかし、優先度レベルが上昇したプロセスは、他のプロセスの優先度レベルとの関係で相対的にＣＰＵの割り当て時間が増加するだけであり、実行可能キューに登録されたバックグラウンドのプロセスの優先度レベルが同等またはそれ以上の場合はフォアグラウンドのプロセスの割り当て時間は増加しない。また、他のプロセスの優先度レベルが低い場合は、優先度レベルを上げたフォアグラウンドのプロセスによってＣＰＵが独占されてしまい、他のプロセスにＣＰＵが割り当てられるまでの時間が長くなってしまうといういわゆる飢餓状態の問題が発生する。プロセスの優先度レベルの操作による処理時間の短縮は、あくまで他のプロセスとの相対的な関係で有効になるためフォアグラウンドのプロセスをシステムに障害を与えないで確実に短時間で処理する方法としては十分ではない。
【０００５】
フォアグラウンドのプロセスにバックグラウンドのプロセスより多くのクォンタムを与えて短時間で処理する方法として、タイムスライス・ブーストまたはクォンタム・ブーストという手法がある。タイムスライス・ブーストでは、プロセスが保有するウインドウがフォアグラウンドに切り換わったときに当該プロセスの優先度レベルを上げてタイムスライスを増加させる。しかし、タイムスライス・ブーストは、当該ＣＰＵにおける他のプロセスより多くのクォンタムが与えられるというだけのもので、バックグラウンドのプロセスに対する相対的なレスポンス・タイムの改善であり、フォアグラウンドのプロセスの絶対的なレスポンス・タイムの改善につながるものではない。たとえば、実行可能キューにスレッドが１つしかない場合は、処理時間はそのスレッドを実行するＣＰＵの動作周波数で決まり、それ以上は短縮することができない。
【０００６】
特許文献１は、マルチプロセッシングの環境において、一層のパフォーマンスの向上および消費電力の低減を図る技術を開示する。同文献には、いずれのスレッド・ユニットが復帰時間の短いパワー・ステートに遷移しているかを示すシステム・パワー・ステート・フィルターを利用して所定のタスクに関するＣＰＵアフィニティ・マスクを書き換え、スケジューラが当該所定のタスクをより復帰時間の短いパワー・ステートに遷移しているスレッド・ユニットに割り当てるようにしている。
【０００７】
特許文献２は、マルチ・コア・プロセッサにおいて、コア全部で集団的に走っているスレッドの統計的な予測に基づいてプロセッサの電圧および周波数の動作点を選択して、パフォーマンスを向上させる技術を開示する。具体的には、同時にアクティブになるコアの数を制限して全体としては電力制約条件に従いながら動作するコアの動作周波数を向上させている。
【０００８】
非特許文献１は、マルチ・コア・プロセッサのいずれかのコアがアイドル状態のときであって、かつ電力、電流および温度に関する仕様の限界未満で動作している場合には、自動的に定格の動作周波数より高い周波数で動作させる技術を開示する。非特許文献２は、特定のプロセスを特定のプロセッサに割り当てることによりパフォーマンスを最適化するハード・アフィニティの手法を開示する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許出願公開第２００９／０３２００３１号明細書
【特許文献２】特表２００７−５３５７２１号公報
【非特許文献】
【００１０】
【非特許文献１】"Intel Turbo Boost Technology in Intel Core Microarchitecture(Nehalem) Based Processors"、［online］、November 2008、［平成２２年８月１０日検索］、インターネット〈ＵＲＬ：http://www.intel.co.jp/jp/technology/turboboost/〉
【非特許文献２】Eli Dow、"プロセッサ・アフィニティの管理"、［online］、２００５年９月２９日、［平成２２年８月１０日検索］、インターネット〈ＵＲＬ：http://www.ibm.com/developerworks/jp/linux/library/l-affinity/〉
【発明の概要】
【発明が解決しようとする課題】
【００１１】
マルチ・プロセッサ・システムに対応するＯＳでは、複数のＣＰＵを使用して同時に複数のプロセスを実行することができる。対象型マルチ・プロセッサ・システムでは、ＯＳは各論理ＣＰＵを各プロセスに対して等価に扱う。ＯＳはスケジューリングの際に全体として最も効率が高くなるようにプロセスを各ＣＰＵに関連付ける。このような特定のプロセスとＣＰＵの関連性をプロセッサ・アフィニティまたはプロセッサ親和性という。プロセッサ・アフィニティには、同一条件のスレッドやプロセスをなるべく同じＣＰＵに割り当てるようにスケジューリングするソフト・アフィニティという手法と能動的に特定のＣＰＵに割り当てるハード・アフィニティという手法が存在する。
【００１２】
ソフト・アフィニティによれば、Ｌ２キャッシュのデータやＮＵＭＡ（Non-Uniform Memory Access ）というアーキテクチャで使用するメモリのデータなどを有効に活用できるので、ＯＳは一般的にスレッドにソフト・アフィニティを採用して最後に実行したのと同じＣＰＵを割り当てるようにしている。これに対しハード・アフィニティの採用は、システムの性能をテストする場合やキャッシュのヒット率を特に高めた処理をする必要があるアプリケーションを実行する場合などのように、明らかにソフト・アフィニティを採用したＯＳのアルゴリズムよりも優れたパフォーマンスが期待できることが判明している場合に限定される。
【００１３】
ところで、インテル社ではマルチ・コアＣＰＵにおいて、アイドルのコアＣＰＵが存在する場合に他のコアＣＰＵを基準動作周波数よりも高い周波数で動作させるターボ・ブースト・テクノロジーを導入している。ターボ・ブースト・テクノロジーでは、ＣＰＵは温度または消費電力などの条件が成立したときに一部のＣＰＵコアの動作周波数が上昇するが、スケジューラはＣＰＵコアの動作周波数を認識することなく所定のアルゴリズムでプロセスをスケジューリングする。よって、ターボ・ブースト・テクノロジーを採用したときには、動作周波数が上昇するＣＰＵコアには任意のプロセスが割り当てられ、スケジューラにより偶然にそのＣＰＵに割り当てられたプロセスだけが高い動作周波数で実行される。したがって、ターボ・ブースト・テクノロジーを採用しただけでは、フォアグラウンドのプロセスの処理時間を確実に短縮することができない。
【００１４】
そこで本発明の目的は、マルチ・プロセッサ環境で特定のプロセスの処理時間を短縮する方法を提供することにある。さらに本発明の目的はフォアグラウインドのプロセスをバックグラウンドのプロセスよりも高い動作周波数の論理ＣＰＵで実行する機会を増大する方法を提供することにある。さらに本発明の目的は、そのような方法を実現するコンピュータ・プログラムおよびコンピュータを提供することにある。
【課題を解決するための手段】
【００１５】
本発明にかかるコンピュータは、所定の条件が成立したときに一時的に動作周波数を上昇させるクロック・ブーストが可能な複数の論理プロセッサを備える。制御プログラムは複数の論理プロセッサのいずれかにクロック・ブーストの設定をする。クロック・ブーストの設定をする論理プロセッサは、単数であっても複数であってもよい。また、複数の論理プロセッサは複数のプロセッサで実現してもよいし、１つのプロセッサをソフトウエアで仮想化することで実現してもよい。クロック・ブーストの設定がされた論理プロセッサは、所定の条件が成立している間に限り基本動作周波数よりも高い動作周波数で動作し、所定の条件が成立しない状態になると基本動作周波数に戻る。基本動作周波数よりも高い動作周波数は、段階的に設定することができる。
【００１６】
所定の条件は、アイドル状態の論理プロセッサの存在、消費電力、消費電流、および温度に基づいて設定することができる。さらに複数の論理プロセッサは、消費電力が小さい状態が継続するような場合は、アイドル状態の論理プロセッサが存在しない状態、電流が基準値を超えた状態、または消費電力が基準値を超えた状態であっても、温度が基準値を超えない限り高い動作周波数で動作するものであってもよい。このように消費電力が一時的に消費電力の基準値を超えた状態でプロセッサを動作させると、動作周波数を一層高くすることができるため、より短時間でプロセスを処理することができる。
【００１７】
制御プログラムは、コンピュータに生成された複数のプロセスの中から短時間で処理することが要求されているプロセスを優先プロセスとして選択する。優先プロセスは、ウインドウを生成するプロセス、高いスケジューリングの優先度が設定されているプロセス、高いディスクＩ／Ｏ処理の優先度が設定されているプロセスとすることができる。制御プログラムはＯＳと協働して、優先プロセスをクロック・ブーストの設定がされた単数または複数の論理プロセッサだけにディスパッチして優先実行する。
【００１８】
クロック・ブーストの設定がされた論理プロセッサは、条件が成立したときには動作周波数が増大するため、そこで実行されるいかなるプロセスも未設定の論理プロセッサよりも処理時間が短縮されるので優先プロセスがディスパッチされるまでの待ち時間が短縮される。さらに優先プロセスは、クロック・ブーストの設定がされた論理プロセッサだけにスケジューリングされるため、実際にクロック・ブーストされた状態の論理プロセッサで実行される確率が高くなり一層処理時間が短縮される。本発明の手法はプロセスの優先度レベルを変える手法とは異なり、論理プロセッサが一時的に高い動作周波数で動作する特性を利用するものであるため、優先プロセスの絶対的な処理時間を短縮することができる。また、優先度レベルの低い他のプロセスを飢餓状態に陥らせることがない。
【００１９】
クロック・ブーストの設定がされた論理プロセッサとのアフィニティに基づいてスケジューリングするために、制御プログラムはＯＳがディフォルトで作成したアフィニティ・マスクまたはプロセスを生成するプログラムが書き換えたアフィニティ・マスクのようなオリジナルのアフィニティ・マスクのビット・パターンを、クロック・ブーストの設定状態に基づいて書き換えることができる。具体的には、アフィニティ・マスクは、オリジナルのアフィニティ・マスクと複数の論理プロセッサのそれぞれに対するクロック・ブーストの設定状態を示すマスク・ビットを論理積演算して書き換えることができる。
【００２０】
論理積演算をすることで、優先プロセスをプログラムが指定した論理プロセッサ以外の論理プロセッサで優先実行するような事態を排除することができる。また、いずれの論理プロセッサも当該プロセスに対して等価であることが判明しているような場合は、アフィニティ・マスクを、クロック・ブーストの設定がされた論理プロセッサだけを指定するように書き換えてもよい。このように書き換えることで、優先プロセスを確実にクロック・ブーストの設定がされた論理プロセッサだけで実行することができるようになる。
【００２１】
本発明の手法は、新たに生成されるプロセスに対してその都度適用することができる。制御プログラムは、クロック・ブーストの設定がされた論理プロセッサの使用率を取得し、新たに生成された優先プロセスについては、使用率が所定値未満のときにだけ優先実行されるようにアフィニティ・マスクを書き換えることができる。使用率が所定値以上のときは、プロセス・スケジューラが、クロック・ブーストの設定がされた論理プロセッサだけでなく、未設定の論理プロセッサも含めてディスパッチするようにアフィニティを緩和した方が短時間で処理できる確率が高くなる場合があるからである。
【００２２】
さらに制御プログラムは、論理プロセッサの温度を取得し、新たに生成された優先プロセスについては、温度が所定値未満のときにだけ優先実行されるようにアフィニティ・マスクを書き換えることができる。論理プロセッサの温度が高いときは、クロック・ブーストの設定がされていても実際に高い動作周波数で動作する確率が低いので、プロセス・スケジューラがクロック・ブーストの設定がされた論理プロセッサだけで実行するよりも他の論理プロセッサも含めて実行する論理プロセッサを選択した方が短時間で処理できる確率が高くなる場合があるからである。
【００２３】
クロック・ブーストの設定がされている論理プロセッサは非優先プロセスも実行し、また、各プロセスが論理プロセッサに与える負荷も時間的に変化する。クロック・ブーストの設定がされている論理プロセッサの使用率が所定値以上のときは、さらにクロック・ブーストの設定が可能な論理プロセッサが存在するか否かを判断することができる。そして、クロック・ブーストの設定がされている論理プロセッサの使用率が所定値以上でかつクロック・ブーストの設定が可能な論理プロセッサが存在するときに、新たな論理プロセッサにクロック・ブーストの追加的な設定をすることで、負荷の分散を図ることができる。
【００２４】
このとき優先実行されている優先プロセスおよび優先実行されていない優先プロセスまたはいずれか一方について、追加的にクロック・ブーストの設定がされた論理プロセッサも含めてディスパッチされるようにアフィニティ・マスクを書き換えることができる。優先プロセスの中には、生成されたときの論理プロセッサの使用率または論理プロセッサの温度などの条件により、優先実行されないものが存在する。クロック・ブーストの設定がされた論理プロセッサの使用率が所定値未満になったときに優先実行されない優先プロセスが存在する場合には、当該優先プロセスが優先実行されるようにアフィニティ・マスクを書き換えることができる。したがって、プロセスが生成されたときの使用率や温度の条件で一旦は優先実行されないことになった優先プロセスをその後の論理プロセッサの動作状態に基づいて優先実行されるようにすることができる。
【００２５】
クロック・ブーストの設定をする論理プロセッサの数を増大させると、現実にクロック・ブーストする論理プロセッサに対する優先プロセスのアフィニティが薄れてしまい非優先プロセスとの差が少なくなっていく。したがって、全体の論理プロセッサの中でクロック・ブーストの設定ができる論理プロセッサの数には実質的な限界がある。よって、クロック・ブーストの設定がされた論理プロセッサの使用率が所定値以上まで上昇したときに、クロック・ブーストの追加的な設定が可能な論理プロセッサが存在しない場合がある。このとき、クロック・ブーストが未設定の論理プロセッサの使用率が所定値未満のときには、制御プログラムはクロック・ブーストが未設定の論理プロセッサでも優先プロセスが実行されるようにアフィニティ・マスクを書き換えて優先プロセスのアフィニティを緩和することができる。
【発明の効果】
【００２６】
本発明により、マルチ・プロセッサ環境で特定のプロセスの処理時間を短縮する方法を提供することができた。さらに本発明によりフォアグラウンドのプロセスをバックグラウンドのプロセスよりも高い動作周波数の論理ＣＰＵで実行する機会を増大する方法を提供することができた。さらに本発明により、そのような方法を実現するコンピュータ・プログラムおよびコンピュータを提供することができた。
【図面の簡単な説明】
【００２７】
【図１】本実施の形態にかかるコンピュータ・システムの主要なハードウエア構成を示す機能ブロック図である。
【図２】コンピュータにおいて実現する優先プロセス処理システムのハードウエアおよびソフトウエアの構成を示す機能ブロック図である。
【図３】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図４】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図５】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図６】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図７】アフィニティ・マスクとパフォーマンス・フィルタのデータ構造および論理積演算の方法を説明する図である。
【図８】プロセス・リストのデータ構造の一例を示す図である。
【発明を実施するための形態】
【００２８】
［コンピュータ・システムの構成］
図１は、本実施の形態にかかるコンピュータ・システム１０の主要なハードウエア構成を示す機能ブロック図である。コンピュータ・システム１０は、それぞれバス２３に接続されたＣＰＵパッケージ１１、メイン・メモリ１３、入力デバイス１５、ハード・ディスク・ドライブ（ＨＤＤ）１７、液晶表示装置（ＬＣＤ）１９、およびＢＩＯＳ＿ＲＯＭ２１などを含んでいる。ＣＰＵパッケージ１１は、複数のＣＰＵコアを１つのパッケージに収めたマルチ・コア・プロセッサで、一例としてインテル社のターボ・ブースト・テクノロジーをサポートしている。
【００２９】
ターボ・ブースト・テクノロジーは、ＣＰＵパッケージ１１に熱的な余裕があるときにいずれかのＣＰＵコアの動作周波数を一時的に上昇させてパフォーマンスを向上させながら、熱設計消費電力（ＴＤＰ）の範囲に収めるという手法である。ＣＰＵパッケージ１１は、ＯＳが一時的なパフォーマンスの増大を要求し、さらに直近の所定時間の間測定した消費電力および電流の平均値がＴＤＰなどの所定値以下ならびにＣＰＵパッケージの温度が所定値以下の場合に、何らかの契機を捕らえていずれかのＣＰＵコアの動作周波数を上昇させる。また条件が満たされなくなったときには、ＣＰＵコアの動作周波数を基本動作周波数に戻す。
【００３０】
このように一時的にＣＰＵコアの動作周波数が上昇することをクロック・ブーストといい、クロック・ブーストするための消費電力、消費電流、および温度をブースト条件ということにする。クロック・ブーストする際には、特定のＣＰＵコアが段階的に動作周波数を上昇させたり、クロック・ブーストするＣＰＵコアを追加的に増やしたりすることができる。クロック・ブーストした高い動作周波数から基本動作周波数に戻るときはその逆の手順で行うことができる。
【００３１】
クロック・ブーストをさせる契機としては、一部のＣＰＵコアのアイドル状態を検知する方法、環境温度の変化を利用する方法、およびプラットフォーム温度の変化を利用する方法などがある。またインテル社の新世代のターボ・ブースト・テクノロジーでは、ＣＰＵパッケージの周囲のプラットフォームまたはＣＰＵパッケージの消費電力や温度が低下しているときに、消費電力や温度が上限に到達しない限り一時的にＴＤＰを越えて動作周波数を上昇させる。
【００３２】
このような新世代のターボ・ブースト・テクノロジーでは、プラットフォームの消費電力や温度が低い状態のときに高負荷のアプリケーションを実行すると、それまでのヘッドルームを利用して実際の消費電力や温度が基準値に上昇するまでの短時間だけ以前のターボ・ブースト・テクノロジーよりも一層高い動作周波数で動作させることができるのでレスポンス・タイムを大幅に短縮できるという利点がある。旧世代および新世代のいずれのターボ・ブースト・テクノロジーでも、特定のプロセスを短時間で処理する目的で利用するためには、特定のプロセスが常にクロック・ブーストするＣＰＵコアにスケジューリングされる必要がある。
【００３３】
なお、本発明はインテル社のターボ・ブースト・テクノロジーをサポートするマルチ・プロセッサ・システムに限定するものではなく、同等のクロック・ブーストを実行できる他のマルチ・プロセッサ・システムに適用することも可能である。さらに、本発明は１つのコンピュータ・システムにシングル・コアのＣＰＵパッケージを複数設けて、その一部のＣＰＵパッケージだけをクロック・ブーストするような場合にも適用できる。また、インテル社のハイパー・スレッディング（商標）という技術では、１つのプロセッサ・コアをＯＳに対して複数のプロセッサ・コアのように動作させる。本発明は、このような仮想化されたマルチ・プロセッサに適用することもできる。
【００３４】
さらに、インテル社のインテル（登録商標）ＶＴやＡＭＤ社のＡＭＤ−Ｖなどのようなソフトウエアで仮想化することでマルチ・プロセッサ環境を実現するシステムに適用することもできる。したがって、以後、クロック・ブーストの対象となるマルチ・プロセッサの単位を、ハードウエアおよびソフトウエアのいずれで実現する場合も含める意味で論理ＣＰＵということにする。ＢＩＯＳ＿ＲＯＭ２１は、ＡＣＰＩ規格に適合するＢＩＯＳを格納している。
【００３５】
［優先プロセス］
本実施の形態では、プロセスまたはその実行単位であるスレッドを優先順位が高く高速処理が要求されるフォアグラウンドのプロセス（以下、優先プロセスという。）をそれ以外のバックグラウンドのプロセス（以下、非優先プロセスという。）から区分する。すべてのプロセスは最低１つのスレッドを保有しており１つまたは複数のスレッドがＣＰＵパッケージ１１に対するスケジューリングの対象となって実行される。したがって、プロセスの実行といった場合はそのプロセスに含まれるスレッドを実行することを意味し、プロセスに対する設定はそれがスレッドに引き継がれる場合はスレッドに対する設定をも意味する。
【００３６】
コンピュータ・システムを利用するユーザにとってユーザ・インターフェースのプロセスには短いレスポンス・タイムを期待するのが一般的である。したがって、優先プロセスの第１のグループは、ウインドウを作成しかつ実際にそれをＬＣＤ１９に表示させるユーザ・インターフェースのプロセスとして定義する。なお、ユーザ・インターフェースのプロセスの中で、ウインドウを一番手前に表示しているフォアグラウンドのウインドウを表示しているプロセスをさらに優先度が高い優先プロセスとして定義することもできる。
【００３７】
ＯＳのスケジューラは、スレッドの優先度レベルを基準にして論理ＣＰＵにディスパッチするスレッドを選択する。スレッドの優先度レベルは、プロセスの優先度クラスと当該プロセス内のスレッドに割り当てられた相対優先度によって決まる。プログラムは、プロセスを生成するときに優先度クラスを設定し、スレッドを生成するときに相対優先度を設定することができる。優先度レベルの高いスレッドは、優先度レベルの低いスレッドよりも優先的にディスパッチされるので所定時間における論理ＣＰＵの割り当て時間が長くなり短い時間で処理することができる。ユーザは優先度クラスの高いスレッドが短時間で処理されることを期待しているので、優先プロセスの第２のグループは優先度クラスまたは優先度レベルの高いプロセスとして定義する。
【００３８】
プロセッサの動作周波数が上昇することに伴いディスクＩ／Ｏがボトルネックになる場合が生じてくる。これを解決するために、たとえば、Ｗｉｎｄｏｗｓ  Ｖｉｓｔａ（登録商標）では、バックグラウンドで実行するウイルス対策プログラム、デフラグメンテーションのプログラム、またはメールの送受信プログラムなどのプロセスがフォアグラウンドのプロセスに影響を与えないように、バックグラウンドのプロセスのＩ／Ｏ処理優先度を下げることができる。したがって、優先プロセスの第３のグループはディスクＩ／Ｏ優先度の高いスレッドとして定義する。さらに、第１のグループから第３のグループのいずれにも属さないがユーザの個別の事情で優先プロセスの対象にする必要があるコンパイラやウイルス対策プログラムなどのプロセスを第４のグループの優先プロセスとして定義する。
【００３９】
［優先プロセス処理システムの構成］
図２は、コンピュータ１０において実現する優先プロセス処理システムのハードウエアおよびソフトウエアの構成を示す機能ブロック図である。優先プロセス処理システム１００は、主として制御プログラム１０１、ＯＳ１５０、ＡＣＰＩインターフェース１７０およびＣＰＵパッケージ１１で構成することができる。ただし、ソフトウエアがＣＰＵパッケージ１１で実行されて機能を発揮するためにはメイン・メモリ１３およびバス２３などの他のデバイスを利用する必要があるが、本発明の説明には特に必要がないので図２からは除いている。
【００４０】
ＣＰＵパッケージ１１は、４つの論理ＣＰＵ６１、６３、６５、６７とダイの温度を検出する温度センサ（図示せず）を含んでいる。ＣＰＵパッケージ１１は、ＡＣＰＩインターフェース１７０からＣＰＵパッケージ１１のブースト条件に関するデータおよびＰステートを受け取って所定のアルゴリズムで１つまたは複数の論理ＣＰＵに対して自律的にクロック・ブーストの制御をすることができる。すなわち、ＣＰＵパッケージ１１によるクロック・ブーストの制御は、ＯＳ１５０によるスケジューリングからは独立して行われる。また、ＯＳ１５０はＣＰＵパッケージ１１の中でいずれがクロック・ブーストの設定がされた論理ＣＰＵであるか、および現在実際にクロック・ブーストしているか否かを認識しない。
【００４１】
制御プログラム１０１は、優先プロセスをＣＰＵパッケージ１１において短時間で処理するためにＯＳ１５０と協働して主体的な処理をする。具体的な処理の内容は、図３〜図６のフローチャートによる優先処理の手順において説明する。ホワイト・リスト１０３は、制御プログラム１０１が特定することができない第４のグループの優先プロセスを生成するプログラムの識別子を記録する。あるいは第１のグループから第３のグループの優先プロセスを制御プログラム１０１が特定しないで、ホワイト・リストにすべての優先プロセスを生成するプログラムの識別子を登録してもよい。ユーザはあらかじめ制御プログラム１０１が提供するインターフェースを通じてホワイト・リスト１０３にそのようなプログラムの識別子を登録することができる。
【００４２】
パフォーマンス・フィルタ１０５は、論理ＣＰＵ６１、６３、６５、６７の数に対応する４ビットのマスク・ビットで、ブースト条件が成立したときにクロック・ブーストする論理ＣＰＵの識別子を登録する。制御プログラム１０１は、動作を開始したときにシステム・コール関数を呼び出してＯＳ１５０またはＡＣＰＩインターフェース１７０から有効な論理ＣＰＵの識別子を取得し、その中の一部の論理ＣＰＵをクロック・ブーストの対象として選択してパフォーマンス・フィルタ１０５にビット・パターンを設定する。制御プログラム１０１がパフォーマンス・フィルタ１０５にクロック・ブーストの対象として設定した論理ＣＰＵに対応するＡＣＰＩレジスタにＰステートを設定することで、当該論理ＣＰＵに対するクロック・ブーストの設定が有効になる。
【００４３】
クロック・ブーストの対象になった論理ＣＰＵは、ブースト条件が成立したときに限り一時的に動作周波数が増大するが、クロック・ブーストの設定がされた複数の論理ＣＰＵが実際にすべて同時にクロック・ブーストすることが保証されているわけではない。クロック・ブーストの設定をした論理ＣＰＵの数が増えるほど、実際にクロック・ブーストする時間的な割合が低下する論理ＣＰＵが増加する。そのような論理ＣＰＵが割り当てられた優先プロセスは、クロック・ブーストの恩恵を受けることができない。すべての論理ＣＰＵにクロック・ブーストの設定をすれば、優先プロセスと非優先プロセスのプロセッサ・アフィニティには差がなくなる。
【００４４】
したがって、全体の論理ＣＰＵの数に対してクロック・ブーストを設定する論理ＣＰＵの数の割合は適切に選定する必要がある。制御プログラム１０１は、一例として最初にディフォルトとして全体の５０％の数の論理ＣＰＵまたは最低の数の論理ＣＰＵをクロック・ブーストの対象に選定し、その後、クロック・ブーストの対象になった論理ＣＰＵのＣＰＵ使用率が所定値以上のときに追加したり、所定値未満になったときに減らしたりして最適なクロック・ブーストの設定をすることができる。
【００４５】
プロセス・リスト１０７は、優先プロセスについて作成されたアフィニティ・マスクのビット・パターンを登録する。制御プログラム１０１はシステム・コール関数を呼び出して、その時点で生成されているプロセスをエニュメレーションしたりあるいは新たに生成されるプロセスをフックしたりして、各プロセスが優先プロセスであるか否かを判断し、さらにそのアフィニティ・マスクのビット・パターンをプロセス・リスト１０７に登録する。
【００４６】
制御プログラム１０１は、プロセス・リスト１０７に、優先プロセスについてＯＳ１５０がディフォルトで設定したアフィニティ・マスクのビット・パターン、および当該プロセスを生成したプログラムがディフォルトのアフィニティ・マスクを書き換えた後のビット・パターンを登録する。以後、この２種類のアフィニティ・マスクをオリジナルのアフィニティ・マスクという。プロセス・リスト１０７にはさらに、制御プログラム１０１がオリジナルのアフィニティ・マスクを書き換えたあとのビット・パターンも登録する。
【００４７】
ＣＰＵ使用率メータ１５１は、各論理ＣＰＵ６１、６３、６５、６７のＣＰＵ使用率を測定する。ＣＰＵ使用率Ｙは、アイドル・プロセスのユーザ・モード時間をＵｉ、アイドル・プロセスのカーネル・モード時間をＫｉ、経過時間をＥｔとしたときに次の式で所定のプログラムが計算することができる。
Ｙ＝（１−（Ｕｉ＋Ｋｉ）／Ｅｔ）×１００％
【００４８】
プロセス・スケジューラ１５３は、アフィニティ・マスク１５５に基づいて所定のアルゴリズムでスレッドを割り当てる論理ＣＰＵ６１、６３、６５、６７を決定し実行可能キュー１６１、１６３、１６５、１６７からディスパッチする。プログラムは、プロセスを生成する際にプロセスの優先度クラスを設定し、さらに、スレッドの相対優先度を設定することができる。ＯＳ１５０は優先度クラスと相対優先度に基づいて、スレッドの優先度レベルを決定する。プロセス・スケジューラ１５３は、各スレッドの優先度レベルに基づいてスレッドをディスパッチする順序を決定する。
【００４９】
アフィニティ・マスク１５５は、ＯＳ１５０がプロセスごとに生成するマスク・ビットで、ビット数は論理ＣＰＵ６１、６３、６５、６７の数に対応する。アフィニティ・マスク１５５はオリジナルが維持されたものであったり、制御プログラム１０１によって書き換えられたものであったりする。アフィニティ・マスク１５５のビット・パターンは当該プロセスのプロセッサ・アフィニティを示し、当該プロセスが実行される論理ＣＰＵを指定する。あるプロセスについて生成されたアフィニティ・マスク１５５のビット・パターンは、そのプロセスに帰属するスレッドにも引き継がれる。したがって、アフィニティ・マスク１５５はプロセスに対応すると同時に配下のスレッドにも対応する。アフィニティ・マスク１５５および優先度レベルは、プロセス・スケジューラ１５３が実行可能キューに登録してスケジューリングをする対象となるデータ構造体の一部となる。
【００５０】
プロセス・スケジューラ１５３は、アフィニティ・マスク１５５のビット・パターンに基づいて各スレッドについてディスパッチする論理ＣＰＵを決める。アフィニティ・マスク１５５に複数のビットが設定されている場合は、プロセス・スケジューラ１５３は設定されている論理ＣＰＵのいずれかにラウンド・ロビン方式などの所定のアルゴリズムに基づいてディスパッチする。実行可能キュー１５７には、実行可能状態になったスレッドのデータ構造体が登録される。各実行可能キュー１６１、１６３、１６５、１６７は、各論理ＣＰＵ６１、６３、６５、６７に対応する。
【００５１】
プロセス・スケジューラ１５３は、ディフォルトで用意した所定のクォンタムを付与したスレッドのデータ構造体を実行可能キュー１５７に登録する。さらに、アフィニティ・マスク１５５のビット・パターンにより指定された論理ＣＰＵに対応する実行可能キュー１６１、１６３、１６５、１６７のいずれかに登録する。実行可能キュー１６１、１６３、１６５、１６７のいずれかに登録されたスレッドは、他のスレッドとの優先度レベルに応じてやがて対応する論理ＣＰＵ６１、６３、６５、６７にディスパッチされる。
【００５２】
たとえば、論理ＣＰＵ６１にディスパッチされたスレッドは与えられたクォンタムを消費すると対応する実行可能キュー１６１の最後に登録される。また、実行の途中で実行可能キュー１６１により優先度レベルの高いスレッドが登録されるとクォンタムをすべて消費する前であってもプリエンプトされて実行可能キュー１６１の先頭に登録される。Ｉ／Ｏ待ちなどのために待機状態に入ったスレッドは、再度実行可能キュー１５７に登録されその後実行可能キュー１６１、１６３、１６５、１６７を経由していずれかの論理ＣＰＵ６１、６３、６５、６７にディスパッチされる。
【００５３】
ＡＣＰＩインターフェース１７０は、ＢＩＯＳおよびＡＣＰＩレジスタ（図示せず。）で構成される。ＢＩＯＳは、ＡＣＰＩレジスタにＰステートを設定することでＣＰＵパッケージ１１のクロック・ブーストを制御することができる。ＢＩＯＳは、ＡＣＰＩレジスタに＿ＰＳＳ（Performance Supported States）、＿ＰＳＤ（P-State Dependency）、および＿ＰＰＣ（Performance Present Capabilities）という３つのオブジェクトを設定することで、所定の論理ＣＰＵを所定の動作周波数にクロック・ブーストすることができる。
【００５４】
一例では＿ＰＰＣに０を設定されたＰ０ステートの論理ＣＰＵはブースト条件が成立したときにクロック・ブーストして＿ＰＳＳに設定された動作周波数を上限の動作周波数として動作する。＿ＰＰＣに１が設定されたＰ１ステートの論理ＣＰＵはブースト条件が成立してもクロック・ブーストしないで基本動作周波数を上限の動作周波数として動作する。制御プログラム１０１は、パフォーマンス・フィルタ１０５のビット・パターンをＡＣＰＩインターフェース１７０のＡＣＰＩレジスタを通じてクロック・ブーストの対象となる論理ＣＰＵにＰステートとして設定する。ＡＣＰＩインターフェース１７０は、さらにＣＰＵパッケージ１１にブースト条件の判断に必要な消費電力、電流、および温度などのデータを提供する。
【００５５】
図２に示した、各ソフトウエアはＨＤＤ１７に格納され、ブート段階でメイン・メモリ１３にロードされる。各ソフトウエアは、主としてＣＰＵパッケージ１１およびメイン・メモリ１３で実行されたときに、ハードウエアと協働してコンピュータ１０に所定の機能を発揮させるハードウエアとして捕らえることもできる。また、ＯＳ１５０はマルチ・プロセッサ・システムおよびマルチ・タスクに対応するものであれば、特に限定する必要はない。また、本発明は、既存のＯＳおよびクロック・ブーストのアルゴリズムを修正しないでも実現することができる。
【００５６】
［優先プロセスを処理する手順］
図３、図４、図５、図６は、優先プロセス処理システム１００で優先プロセスを実行する手順を示すフローチャートである。図３は、制御プログラム１０１が動作を開始するまでに生成されているプロセスおよび新たに生成されるプロセスを処理する手順を示す。図４は、クロック・ブーストの設定がされた論理ＣＰＵのＣＰＵ使用率に応じて、ダイナミックにクロック・ブーストの設定を変更する手順を示す。
【００５７】
図５は、プロセスを生成したときのＣＰＵ使用率と温度の条件で、優先実行されない優先プロセスをその後のＣＰＵ使用率の低下に応じて優先実行する手順を示す。図６はクロック・ブーストの設定をした論理ＣＰＵのＣＰＵ使用率が上昇したときに優先プロセスのプロセッサ・アフィニティを緩和する手順を示す。図７はアフィニティ・マスク１５５とパフォーマンス・フィルタ１０５のデータ構造および論理積演算の方法を説明する図である。
【００５８】
ブロック２０１でコンピュータ１０が起動しＨＤＤ１７に格納されたプログラムがブートを開始する。ブート・ファイルが順番にメイン・メモリ１３にロードされて実行を開始するとブロック２０３でそれぞれのプログラムがプロセスを生成する。ＯＳ１５０またはＡＣＰＩインターフェース１７０は、ＣＰＵパッケージ１１に実装されている有効な論理ＣＰＵを調べる。ここでは、４つの論理ＣＰＵ６１、６３、６５、６７がすべて有効になっているものとする。ＯＳ１５０はＡＣＰＩインターフェース１７０を通じて論理ＣＰＵ６１、６３、６５、６７にディフォルトで保有している＿ＰＳＳ、＿ＰＳＤ、＿ＰＰＣのメソッドを設定する。
【００５９】
ディフォルトのＰステートでは、ＯＳ１５０は一例として論理ＣＰＵ６１だけをＰ０ステートに設定し、その他の論理ＣＰＵ６３、６５、６７をＰ１ステートに設定する。この場合、ＣＰＵパッケージ１１は、ブースト条件が成立すれば論理ＣＰＵ６１の動作周波数だけを基本動作周波数よりも上昇させ、ブースト条件が成立しなくなったときには基本動作周波数に戻す。ＯＳ１５０は、生成されたプロセスのそれぞれに対してディフォルトのアフィニティ・マスク１５５を作成する。
【００６０】
ディフォルトのアフィニティ・マスク１５５は、有効な論理ＣＰＵ６１、６３、６５、６７のいずれにもディスパッチできるようにアフィニティ・マスク１５５の各ビットが１になっている。この様子を図７（Ａ）のアフィニティ・マスク１５５ａとして示す。また、プロセスを生成するプログラムはシステム・コール関数を呼び出してディフォルトで設定されたアフィニティ・マスク１５５を書き換えることができる。
【００６１】
一例として論理ＣＰＵ６５、６７だけが割り当てられるようにプログラムがディフォルトのアフィニティ・マスク１５５を書き換えた様子を、図７（Ｂ）のアフィニティ・マスク１５５ｃとして示す。アフィニティ・マスク１５５ａ、１５５ｃは、いずれもオリジナルのアフィニティ・マスクに相当する。プロセス・スケジューラ１５３がスケジューリングするのはプロセスではなくプログラムによりプロセスの実行単位として生成されたスレッドである。プロセスのアフィニティ・マスク１５５ａは当該プロセスの内部で生成されるスレッドのアフィニティ・マスクに引き継がれている。なお、スレッドを生成するプログラムおよび制御プログラム１０１は、スレッドのアフィニティ・マスクを書き換えることもできる。
【００６２】
プロセス・スケジューラ１５３は、アフィニティ・マスク１５５ａに基づいて任意の論理ＣＰＵ６１、６３、６５、６７にスレッドを自由に割り当てることができる。プロセス・スケジューラ１５３はまたアフィニティ・マスク１５５ｃに基づいて論理ＣＰＵ６５または論理ＣＰＵ６７のいずれかにスレッドを割り当てることができる。ただし、スケジューラ１５３はいわゆるソフト・アフィニティという手法に基づいてスレッドが論理ＣＰＵ間を頻繁に移動しないように同一条件のスレッドを最後に実行した論理ＣＰＵに割り当てるようにスケジューリングすることもできる。
【００６３】
ＣＰＵパッケージ１１は、プロセス・スケジューラ１５３からは独立して論理ＣＰＵ６１の動作周波数を制御する。そして論理ＣＰＵ６１が割り当てられたスレッドは実行可能キュー１６１に登録されている間に当該論理ＣＰＵ６１が偶然にもクロック・ブーストすれば、実行可能キュー１６３、１６５、１６７に登録されたスレッドよりも短い待ち時間でディスパッチされる。また、論理ＣＰＵ６１にディスパッチされたスレッドは、当該論理ＣＰＵ６１が偶然にもそのときにクロック・ブーストすれば、実行可能キュー１６１に登録された他のスレッドよりも短い時間で処理される。アフィニティ・マスク１５５ａを備えるいずれのスレッドも、クロック・ブーストした論理ＣＰＵ６１にディスパッチされる機会はあるがその確率は１／４で、さらに、論理ＣＰＵ６１にディスパッチされた時点で、論理ＣＰＵ６１がクロック・ブーストするとは限らない。ここまでは、従来の方法によるプロセスの制御手順である。
【００６４】
制御プログラム１０１もブート・ファイルの一部を構成しておりブロック２０５で制御プログラム１０１が動作を開始する。制御プログラム１０１が、ブートの初期段階で動作を開始することによりそれ以後のブート段階でブート・ファイルの優先プロセスを短時間で処理することができるようになる。たとえば、メールに関するアプリケーションを起動後できるだけ早く動作させてメールを受信したいという場合は、そのアプリケーションが生成するプロセスを優先プロセスに選定してブート中にできるだけ早く実行させることができる。あるいは、制御プログラム１０１はブートの最終段階またはブートが完了した後に動作を開始するようにしてもよい。
【００６５】
制御プログラム１０１は、パフォーマンス・フィルタ１０５に、論理ＣＰＵ６１、６３に対応するビットを１に設定し、論理ＣＰＵ６５、６７に対応するビットを０に設定する。制御プログラム１０１は、ブロック２０７でパフォーマンス・フィルタ１０５に基づいてＡＣＰＩインターフェース１７０にＰステートを設定する。ＢＩＯＳは論理ＣＰＵ６１、６３をＰ０ステートに設定し、論理ＣＰＵ６５、６７をＰ１ステートに設定する。このときのパフォーマンス・フィルタ１０５を、図７（Ａ）、図７（Ｂ）のパフォーマンス・フィルタ１０５ａとして示す。
【００６６】
その結果、ＣＰＵパッケージ１１は論理ＣＰＵ６５、６７が基本動作周波数を最大の動作周波数として動作し、論理ＣＰＵ６１、６３はブースト条件が成立したときには基本動作周波数よりも高い動作周波数で動作し、ブースト条件が成立しないときは基本動作周波数を最大の動作周波数として動作する。ＣＰＵパッケージ１１はブースト条件が成立したときは、同時に論理ＣＰＵ６１、６３をクロック・ブーストしてもよいし、先に論理ＣＰＵ６１だけをクロック・ブーストし、さらに熱的な余裕がある場合には論理ＣＰＵ６３を追加的にクロック・ブーストするように動作周波数を制御してもよい。なお、各論理ＣＰＵ６１、６３、６５、６７は、アイドル状態のときに基本動作周波数よりも低い動作周波数で動作してもよい。
【００６７】
ブロック２０９で、制御プログラム１０１はシステム・コール関数を呼び出してその時点で生成されているプロセスの中から優先プロセスを特定する。最初に現時点で生成されているすべてのプロセスをエニュメレーションしてプロセス・ハンドルを取得し、その中でウインドウを生成しかつ実際に表示しているプロセスを第１のグループに分類される優先プロセスとして特定する。つぎに制御プログラム１０１は、システム・コール関数を呼び出して第１のグループの優先プロセスを除いた残りのプロセスのそれぞれの優先度クラスまたは優先度レベルを取得して優先度クラスまたは優先度レベルが所定レベル以上のプロセスを第２のグループに分類される優先プロセスとして特定する。
【００６８】
たとえば、Ｗｉｎｄｏｗｓ（登録商標）では、アプリケーションはプロセスを生成するときにシステム・コール関数を呼び出してReal-time、High、Above Normal、Normal、Below Normal、Idleのいずれかの優先度クラスを指定することができる。アプリケーションはスレッドを生成するときにシステム・コール関数を呼び出してスレッドの相対優先度を設定することができる。Ｗｉｎｄｏｗｓ（登録商標）は指定された優先度クラスと相対優先度に基づいて、スレッドの優先度レベルを決定する。このとき制御プログラム１０１は、Above Normal以上の優先度クラスを指定したプロセスを第２のグループに分類される優先プロセスとすることができる。
【００６９】
さらに制御プログラム１０１は、システム・コール関数を呼び出して第１のグループと第２のグループの優先プロセスを除いた残りのプロセスのそれぞれのディスクのＩ／Ｏ処理の優先度を取得し、Ｉ／Ｏ処理の優先度が所定レベル以上のプロセスを第３のグループに分類される優先プロセスとして特定する。具体的にはアプリケーションは、ディスクに対するＩ／Ｏ処理優先度をCritical、High、Normal、Low、Very Lowの５段階に設定することが可能でこれらのデータは、ＯＳのＩ／ＯマネージャがＩ／Ｏドライバと通信するＩＲＰ（I/O Request Packet）にフラグとして設定される。このとき制御プログラム１０１は、High以上のＩ／Ｏ処理優先度を指定したプロセスを第３のグループに分類される優先プロセスとすることができる。
【００７０】
最後に制御プログラム１０１はシステム・コール関数を呼び出して第１のグループから第３のグループの優先プロセスを除いた残りのプロセスの中で、ホワイト・リストに登録されているプログラムが生成する優先プロセスがあればそれを第４のグループの優先プロセスとして特定する。制御プログラム１０１は、優先プロセスを特定するたびにシステム・コール関数を呼び出して当該プロセスまたはスレッドに対応するオリジナルのアフィニティ・マスク１５５ａ、１５５ｃを書き換える。
【００７１】
制御プログラム１０１は各プロセスについて、ブロック２０３において作成されたオリジナルのアフィニティ・マスク１５５ａ、１５５ｃのビット・パターンを取得し、パフォーマンス・フィルタ１０５ａのビット・パターンと論理積演算を行い、図７（Ａ）、図７（Ｂ）に示すマスク・ビット１７１ａ、１７１ｂを計算する。そして図７（Ａ）の場合は、オリジナルのアフィニティ・マスク１５５ａのビット・パターンをマスク・ビット１７１ａのビット・パターンで書き換えてアフィニティ・マスク１５５ｂを作成する。
【００７２】
その結果、プロセス・スケジューラ１５３は当該プロセスが生成したスレッドをアフィニティ・マスク１５５ｂに基づいてスケジューリングするため、スレッドは論理ＣＰＵ６１または論理ＣＰＵ６３にだけディスパッチされ、論理ＣＰＵ６５、６７では実行されないようになる。このときプロセス・スケジューラ１５３は、アフィニティ・マスク１５５ｂを有するスレッドを論理ＣＰＵ６１と論理ＣＰＵ６３の間でラウンド・ロビン方式によりスケジューリングすることができる。このようにクロック・ブーストの設定がされた論理ＣＰＵ６１、６３だけで実行される優先プロセスを、優先実行される優先プロセスということにする。
【００７３】
論理ＣＰＵ６１、６３には、オリジナルのアフィニティ・マスク１５５ａを備える非優先プロセスのスレッドもディスパッチされる。書き換えられたアフィニティ・マスク１５５ｂを備える優先プロセスのスレッドは、他の優先プロセスおよび非優先プロセスとの優先度レベルの上下関係に基づいて、実行可能キュー１６１、１６３から論理ＣＰＵ６１、６３にディスパッチされる順序が決定される。しかし、論理ＣＰＵ６１、６３は、クロック・ブーストするといずれのスレッドがディスパッチされていても論理ＣＰＵ６５、６７よりも短時間で処理することができるので、優先プロセスの実行可能キュー１６１、１６３におけるディスパッチまでの待ち時間は短くなる。
【００７４】
しかも、優先実行される優先プロセスのスレッドは、クロック・ブーストされる論理ＣＰＵ６１、６３にだけディスパッチされるため、当該スレッドが実行されるときに実際にクロック・ブーストされる確率は高くなる。この２つの理由で論理ＣＰＵ６１、６３だけにプロセッサ・アフィニティを有する優先プロセスは、非優先プロセスよりも短時間で処理されるようになる。
【００７５】
図７（Ｂ）の場合は、オリジナルのアフィニティ・マスク１５５ｃのビット・パターンとパフォーマンス・フィルタ１０５ａのビット・パターンを論理積演算すると、マスク・ビット・１７１ｂのようにすべてのビットが０になる。この場合は、制御プログラム１０１はディフォルトで設定されたアフィニティ・マスク１５５ｃを書き換えない。したがって、そのような優先プロセスは、クロック・ブーストしない論理ＣＰＵ６５、６７にだけディスパッチされることになる。このようにクロック・ブーストの設定がされていない論理ＣＰＵ６５、６７だけで実行される優先プロセスを、優先実行されない優先プロセスということにする。
【００７６】
上記のように、優先プロセスであっても強制的にクロック・ブーストの設定がされた論理ＣＰＵ６１、６３だけで実行しないのは、プログラムが指定した論理ＣＰＵを変更しないようにするためである。なお、当該プログラムにとっていずれの論理ＣＰＵ６１、６３、６５、６７も等価であることが明らかな場合は、制御プログラム１０１は、パフォーマンス・フィルタ１０５ａのビット・パターンで直接アフィニティ・マスク１５５ｃを書き換えることもできる。その場合は、オリジナルのアフィニティ・マスク１５５ｃのビット・パターンがいかなるものであっても、そのスレッドを必ずクロック・ブーストする論理ＣＰＵ６１、６３だけにディスパッチすることができる。
【００７７】
ブロック２１１では、制御プログラム１０１は、プロセス・リスト１０７に優先プロセスの識別子とそれに対応するアフィニティ・マスク１５５のビット・パターンを登録する。制御プログラム１０１は、オリジナルのアフィニティ・マスクと制御プログラム１０１により書き換えられたアフィニティ・マスクのそれぞれのビット・パターンを登録する。図８にプロセス・リスト１０７のデータ構造の一例を示す。図８では、制御プログラム１０１により書き換えられたアフィニティ・マスク１５５ａのオリジナルのビット・パターンは省略している。
【００７８】
優先プロセス１、２、３、４は、優先実行される優先プロセスのアフィニティ・マスクのビット・パターンを示す。優先プロセス１、２は、ＯＳ１５０がすべてのビットを１にするようにディフォルトで作成したオリジナルのアフィニティ・マスクを書き換えたビット・パターンを示し、優先プロセス３、４はプロセスを生成するプログラムが、ＯＳ１５０がディフォルトで作成したアフィニティ・マスクを書き換えたビット・パターンを示している。優先プロセス１、２の配下にあるスレッドは論理ＣＰＵ６１または論理ＣＰＵ６３にだけディスパッチされる。優先プロセス３の配下にあるスレッドは論理ＣＰＵ６１にだけディスパッチされ、優先プロセス４の配下にあるスレッドは論理ＣＰＵ６３にだけディスパッチされる。
【００７９】
したがって、優先プロセス１、２、３、４は、常にクロック・ブーストする論理ＣＰＵ６１、６３だけで実行される。優先プロセス１１、１２、１３は、プロセスを生成するプログラムが、ＯＳ１５０がディフォルトで作成したアフィニティ・マスクを書き換えたアフィニティ・マスクのビット・パターンを示しており、優先プロセス１１、１２、１３の配下にあるスレッドは、クロック・ブーストしない論理ＣＰＵ６５または論理ＣＰＵ６７にだけディスパッチされるため優先実行されない。
【００８０】
ブロック２１３では、新たなプロセスが生成される。制御プログラム１０１はＤＬＬインジェクションを利用して、新たに生成されるプロセスをフックする。制御プログラム１０１は、システム・コール関数を呼び出して、ブロック２０９と同じ手順で当該プロセスが優先プロセスであるか否かを判断する。優先プロセスでないと判断した場合は、プロセス・スケジューラ１５３は当該非優先プロセスをオリジナルのアフィニティ・マスク１５５ａ、１５５ｃに基づいてディスパッチし、ブロック２１３に戻ってつぎの新たなプロセスを処理する。
【００８１】
ブロック２１５で制御プログラム１０１が新たなプロセスが優先プロセスであると判断した場合はブロック２１７に移行する。制御プログラム１０１は、ＡＣＰＩインターフェース１７０を通じてＣＰＵパッケージ１１または各論理ＣＰＵ６１、６３、６５、６７の温度を取得し、ＣＰＵパッケージ１１の温度が所定値未満かまたはすべての論理ＣＰＵ６１、６３、６５、６７の温度が所定値未満か否かを調べ、所定値未満の場合は温度条件が成立したと判断する。
【００８２】
さらに、制御プログラム１０１はＣＰＵ使用率メータ１５１からクロック・ブーストの対象となっている論理ＣＰＵ６１および論理ＣＰＵ６３のＣＰＵ使用率を取得して所定値未満か否かを調べ、いずれも所定値未満の場合は使用率条件が成立したと判断する。温度条件または使用率条件のいずれかが成立しない場合は、制御プログラム１０１はブロック２２１に移行して新たに生成されたプロセスを優先プロセスとして登録し、オリジナルのアフィニティ・マスク１５５ａ、１５５ｃは書き換えない。
【００８３】
スケジューラ１５３は当該優先プロセスに帰属するスレッドを、オリジナルのアフィニティ・マスク１５５ａ、１５５ｃに基づいてディスパッチする。この場合の優先プロセスの一例を図８の優先プロセス２１、２２、２３として示している。このように、温度条件または使用率条件によりクロック・ブーストの設定がされた論理ＣＰＵ６１、６３とクロック・ブーストの設定がされていない論理ＣＰＵ６５、６７のいずれでも実行される可能性がある優先プロセス２１、２２、２３も優先実行されない優先プロセスということにする。
【００８４】
なお、温度条件または使用率条件が成立しない場合でも、プロセスを生成するプログラムが論理ＣＰＵ６１、６３だけを指定するようにアフィニティ・マスクを書き換えた場合は、オリジナルのアフィニティ・マスクとして採用されて優先実行される優先プロセスとなるが、そのような状態は本発明のプロセス制御の範囲から外れる。プロセス・スケジューラ１５３は、優先プロセス２１、２２、２３の配下にあるスレッドを論理ＣＰＵ６１、６３、６５、６７のいずれかにディスパッチする。ブロック２２１でプロセス・リスト１０７への登録が終了すると制御プログラム１０１はブロック２１３に戻って新たなプロセスの生成を待つ。
【００８５】
ブロック２１７の手順では、優先プロセスであっても、クロック・ブーストの対象となる論理ＣＰＵ６１、６３のその時点でのＣＰＵ使用率が高い場合は優先実行されない。その理由は論理ＣＰＵ６１、６３のＣＰＵ使用率が高い場合は、多くの優先プロセスおよび非優先プロセスまたは負荷の大きなプロセスがそこで実行されているため、新たな優先プロセスは他の論理ＣＰＵ６５、６７も実行先に含めた方が短時間で処理できる可能性が高い場合があるからである。
【００８６】
また、温度が高い場合は、論理ＣＰＵ６１、６３が実際にクロック・ブーストする頻度が少ないと考えられ、同様に他の論理ＣＰＵ６５、６７も実行先に含めた方が短時間で処理できる可能性が高い場合があるからである。なお、クロック・ブーストの設定がされた論理ＣＰＵ６１のＣＰＵ使用率が高く論理ＣＰＵ６３のＣＰＵ使用率が低い場合は、制御プログラム１０１が新たな優先プロセスに論理ＣＰＵ６３だけを割り当てるようにアフィニティ・マスク１５５を書き換えてもよい。
【００８７】
ブロック２１７で温度条件と使用率条件のいずれも成立した場合には、ブロック２１９に移行してブロック２０９で説明した方法で制御プログラム１０１は当該プロセスに対するアフィニティ・マスク１５５を書き換える。さらに、当該プロセスをプロセス・リスト１０７に登録する。ブロック２１７〜２２１の手順では、新たなプロセスが生成されるたびにＣＰＵパッケージ１１の温度条件と使用率条件に基づいて優先プロセスを優先実行するか否かを制御した。
【００８８】
論理ＣＰＵ６１、６３には非優先プロセスもディスパッチされ、また、それらの負荷も時間的に変化する。本実施の形態では優先プロセスの優先度クラスおよびスレッドの優先度レベルは変更しないため、論理ＣＰＵ６１、６３の実行可能キュー１６１、１６２に登録されるスレッドの数が多くなると論理ＣＰＵ６１、６３のＣＰＵ使用率が大きくなって優先プロセスがディスパッチされるまでの待ち時間が長くなる可能性がある。
【００８９】
この状態を解消するために図３のブロック２１９に続く図４のブロック３０１では、制御プログラム１０１は定期的にＣＰＵ使用率メータ１５１から各論理ＣＰＵ６１、６３、６５、６７のＣＰＵ使用率を取得する。ブロック３０３では、クロック・ブーストの設定がされた論理ＣＰＵ６１、６３のＣＰＵ使用率がいずれも所定値以上であるか否かを判断する。いずれかの論理ＣＰＵのＣＰＵ使用率が所定値未満の場合は図５のブロック４０１に移行し、いずれの論理ＣＰＵ６１、６３のＣＰＵ使用率も所定値以上の場合はブロック３０５に移行する。なお、ブロック３０３のＣＰＵ使用率の閾値はブロック２１７のＣＰＵ使用率の閾値よりも大きくすることができる。
【００９０】
ブロック３０５では、制御プログラム１０１は、パフォーマンス・フィルタ１０５を参照してさらにクロック・ブーストの設定が可能な論理ＣＰＵが存在するか否かを判断する。すでに全体の論理ＣＰＵの数に対するクロック・ブーストの設定を許容する論理ＣＰＵの数の割合が所定値を越えている場合は、それ以上他の論理ＣＰＵにクロック・ブーストの設定をすることができないので、図６のブロック４２１に移行する。
【００９１】
たとえば、論理ＣＰＵ６５に対して追加的にクロック・ブーストの設定が可能な場合はブロック３０７に移行する。ブロック３０７では制御プログラム１０１はパフォーマンス・フィルタ１０５のビット・パターンを論理ＣＰＵ６５に対応するビットが１になるように追加的に書き換える。さらに書き換えたビット・パターンに基づいてＡＣＰＩインターフェース１７０を通じて論理ＣＰＵ６５を追加的にＰ０ステートに変更する。
【００９２】
ブロック３０９では、制御プログラム１０１はシステム・コール関数を呼び出して、図８のプロセス・リスト１０７から選択した優先プロセスのアフィニティ・マスク１５５のビット・パターンを書き換える。書き換えの対象として選択する優先プロセスは、優先実行される優先プロセス１、２、３、４のグループ、プログラムが指定したアフィニティの条件で優先実行されない優先プロセス１１、１２、１３、１４のグループまたは使用率条件または温度条件により優先実行されない優先プロセス２１、２２、２３のグループのいずれかとすることができる。
【００９３】
あるいは制御プログラム１０１は、プロセス・リスト１０７に登録されたすべての優先プロセスを書き換えの対象として選択することができる。制御プログラム１０１は、選択した優先プロセスのアフィニティ・マスク１５５を、図３のブロック２０９で行ったようにパフォーマンス・フィルタ１０５と、オリジナルのアフィニティ・マスク１５５ａ、１５５ｃとの論理積演算を行う方法で書き換えることができる。
【００９４】
その結果、論理ＣＰＵ６５に対応するビットが１のオリジナルのアフィニティ・マスクを有する優先プロセス１、２のような優先プロセスは、論理ＣＰＵ６５でも優先実行されるようにアフィニティ・マスクが書き換えられる。オリジナルのアフィニティ・マスクが論理ＣＰＵ６１、６３を指定していないが論理ＣＰＵ６５を指定していた優先プロセス１１、１３のような優先プロセスは、始めて優先実行されるようになる。さらに、ブロック２１７の使用率条件または温度条件で優先実行されない優先プロセス２１、２２、２３も優先実行されるようになる。ブロック３１１では、アフィニティ・マスク１５５を書き換えたプロセスについてプロセス・リスト１０７を更新する。
【００９５】
前述のようにプロセス・スケジューラ１５３のスケジュール制御とＣＰＵパッケージ１０１のクロック・ブースト制御は非同期で行われ、クロック・ブーストの設定をしても実際にクロック・ブーストする頻度はそのときのシステムの状態により変化する。そして、クロック・ブーストする論理プロセッサの数を増加するほど、優先プロセスと非優先プロセスの差が少なくなる。クロック・ブーストする論理プロセッサの最適な数は、すべての優先プロセスの平均的な処理時間が最小になるときの数であるといえる。
【００９６】
したがって、クロック・ブーストした論理プロセッサのＣＰＵ使用率が低下したような場合は、クロック・ブーストする論理プロセッサの数を減らして、優先プロセスがディスパッチされる論理プロセッサがクロック・ブーストする頻度を増大させたほうが効果的である。ブロック３１３では、制御プログラム１０１はクロック・ブーストの設定をした論理プロセッサのＣＰＵ使用率が所定値よりも低下したときには、ブロック３０７に戻って、Ｐステートを変更してクロック・ブーストする論理プロセッサの数を減らすことができる。そしてブロック３０９で図３のブロック２０９の手順に基づいてアフィニティ・マスク１５５を書き換えブロック３１１でプロセス・リスト１０７を更新する。ブロック３１３でＣＰＵ使用率が所定値以上の場合は図３のブロック２１３に戻る。
【００９７】
図３のブロック２１７で論理ＣＰＵ６１、６３のＣＰＵ使用率が一旦は所定値を越えても、その後のプロセスの状態が変化して、それらのＣＰＵ使用率が下がる可能性がある。一方、ブロック２１７では、温度条件または使用率条件により優先実行されない優先プロセスが発生している。論理ＣＰＵ６１、６３に余裕がでた場合には、優先実行されない状態の優先プロセスをいち早く優先実行される状態に移行させることが望ましい。
【００９８】
ブロック３０３に続く図５のブロック４０１では、制御プログラム１０１はクロック・ブーストの対象となる論理ＣＰＵ６１、６３のＣＰＵ使用率がいずれも所定値未満であるか否かを判断する。ブロック４０１の所定値はブロック３０３の所定値よりも小さい。いずれかの論理ＣＰＵのＣＰＵ使用率が所定値以上の場合は図３のブロック２１３に戻る。いずれの論理ＣＰＵもＣＰＵ使用率が所定値未満の場合は、ブロック４０３に移行する。
【００９９】
ブロック４０３では制御プログラム１０１はプロセス・リスト１０７を参照し、クロック・ブーストの対象となる論理ＣＰＵ６１、６３とともに対象外の論理ＣＰＵ６５、６７も割り当てられていることで優先実行されない優先プロセス２１、２３、２５があるか否かを判断する。なお、クロック・ブーストの対象とならない論理ＣＰＵ６５、６７だけが割り当てられていることで優先実行されない優先プロセス１１、１２、１３は、プロセスを生成するプログラムが論理ＣＰＵ６１、６３での実行を指定していないので移行の対象から除外する。
【０１００】
対象となる優先実行されない優先プロセスがない場合はブロック２１３に戻る。対象となる優先プロセスがある場合は、ブロック４０５に移行して制御プログラム１０１は図３のブロック２０９で採用したオリジナルのアフィニティ・マスク１５５ａとパフォーマンス・フィルタ１０５の論理積演算を行う方法を用いて、オリジナルのアフィニティ・マスク１５５を書き換える。ブロック４２７では制御プログラム１０１は、アフィニティ・マスク１５５を書き換えたプロセスについて、プロセス・リスト１０７を更新する。
【０１０１】
クロック・ブーストの設定がされた論理ＣＰＵ６１、６３のＣＰＵ使用率が上昇したときに、追加的にクロック・ブーストの設定ができる論理ＣＰＵが存在しない場合でも、クロック・ブーストの設定がされていない論理ＣＰＵ６５、６７のＣＰＵ使用率が低い場合は、プロセッサ・アフィニティを緩和して優先プロセスを優先実行しないようにした方が早く処理できる場合がある。図４のブロック３０５に続く図６のブロック４２１では、制御プログラム１０１はクロック・ブーストの対象でない論理ＣＰＵ６５、６７のＣＰＵ使用率が所定値未満であるかどうかを調べる。
【０１０２】
論理ＣＰＵ６５、６７のいずれかのＣＰＵ使用率が所定値以上の場合は、クロック・ブーストの対象となる論理ＣＰＵ６１、６３の負荷を他の論理ＣＰＵ６５、６７に分散することはできないと判断して図３のブロック２１３に戻る。論理ＣＰＵ６５、６７の両方のＣＰＵ使用率が所定値未満の場合はブロック４２３に移行して、制御プログラム１０１はプロセス・リスト１０７を参照し、優先実行されている優先プロセスの中から所定数のプロセスを抽出して、オリジナルのアフィニティ・マスクのビット・パターンに戻す。
【０１０３】
あるいは当該プロセスにとってすべての論理ＣＰＵ６１、６３、６５、６７が等価であることが明らかな場合は、制御プログラム１０１はそのような優先プロセスが論理ＣＰＵ６１、６３、６５、６７に分散してディスパッチされるように、アフィニティ・マスク１５５を図７（Ａ）のオリジナルのアフィニティ・マスク１５５ａのように書き換える。あるいは制御プログラム１０１は、それらのプロセスが論理ＣＰＵ６５、６７だけにディスパッチされるようにアフィニティ・マスク１５５を書き換える。ブロック４２５では、制御プログラム１０１はアフィニティ・マスク１５５を書き換えた優先プロセスについてプロセス・リスト１０７を更新し、ブロック２１３に戻る。
【０１０４】
これまで、優先プロセスは４つのグループのいずれかに属していればすべて同等に扱ってきた。優先プロセスの中には他の優先プロセスより短時間で処理したいものがある。たとえば、ウインドウを有するプロセスの中でもフォアグラウンドのウインドウについては、ユーザはより短時間で応答を得ることを期待する。また、ＡＣＰＩインターフェースは論理ＣＰＵを、同じＰステートであっても異なる動作周波数に設定することができる。この特質を利用すれば、優先プロセスの中でより短時間で処理する必要のある最優先プロセスがより高い動作周波数の論理ＣＰＵだけで動作するようにアフィニティ・マスクを書き換えることができる。
【０１０５】
すべての優先プロセスの平均的な処理時間を最短にするために、最適なクロック・ブーストの設定をする論理ＣＰＵの数は、システムの動作状態で常に変化する。図４ではＣＰＵ使用率に基づいてダイナミックにＰステートおよびアフィニティ・マスクを変更する方法を説明したが、論理ＣＰＵの数を制御するために、各論理ＣＰＵだけにディスパッチされるダミー・プロセスを生成してその処理時間を測定する方法もある。
【０１０６】
たとえば、各論理ＣＰＵ６１、６３、６５、６７でそれぞれ中間的な優先度レベルのダミー・プロセスを実行させ、その処理時間に基づいて実際のクロック・ブーストの状況を把握して、Ｐステートを変更することもできる。あるいは、ＡＣＰＩインターフェース１７０から直接各論理ＣＰＵがクロック・ブーストした頻度またはクロック・ブーストしている時間を取得してＰステートを変更することもできる。さらに、ＡＣＰＩインターフェース１７０測定した各論理ＣＰＵの温度や平均消費電力に基づいて制御プログラム１０１がダイナミックにＰステートの変更をすることも可能である。
【０１０７】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【０１０８】
１０…コンピュータ
１１…ＣＰＵパッケージ
１００…優先プロセス処理システム
１０１…制御プログラム
１５０…オペレーティング・システム
【図１】
0005345990.tif 000002
【図２】
0005345990.tif 000003
【図３】
0005345990.tif 000004
【図４】
0005345990.tif 000005
【図５】
0005345990.tif 000006
【図６】
0005345990.tif 000007
【図７】
0005345990.tif 000008
【図８】
0005345990.tif 000009