説明

特定のプロセスを短時間で処理する方法およびコンピュータ

【課題】特定のプロセスを短時間で処理する。
【解決手段】CPUパッケージ11は所定の条件に基づいて一時的にクロック・ブーストが可能な複数の論理プロセッサ61、63、65、67を備える。制御プログラム101はACPIインターフェース170を通じて所定の条件が成立したときにクロック・ブーストするように複数の論理プロセッサのいずれかを設定する。制御プログラムは複数のプロセスの中から短時間で処理する優先プロセスを選択する。制御プログラムは優先プロセスをクロック・ブーストの設定がされた論理プロセッサだけで実行するようにスケジューリングさせる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、特定のプロセスを短時間に処理する技術に関し、さらに詳細には、クロック・ブーストの可能なマルチ・プロセッサ環境で特定のプロセスを短時間に処理する技術に関する。
【背景技術】
【0002】
マルチ・タスクのオペレーティング・システム(OS)は、スレッドに一度に連続して中央演算処理装置(CPU)を利用できる時間であるクォンタム(タイムスライス)を付与する。CPUにディスパッチされたスレッドは与えられたクォンタムからクロック・サイクルごとに一定の値を減算し、与えられたクォンタムが0になると実行可能キューの最後に配置され、それに代わって実行可能キューに登録された他のスレッドがディスパッチされる。このときスケジューラは各スレッドの優先度レベルを比較してディスパッチするスレッドを決定する。したがって優先度レベルが高いスレッドほど所定時間内におけるCPUの割り当て時間が長くなり早期に処理が完了する。
【0003】
プロセスは、ユーザが操作しているウインドウを生成するフォアグラウンドのプロセスとその他のすべてのプロセスであるバックグラウンドのプロセスに分けることができる。ユーザは、システムがバックグラウンドのプロセスよりもフォアグラウンドのプロセスに対してすばやく応答することを望んでいる。OSは、フォアグラウンドのプロセスの優先度レベルを上げてバックグラウンドのプロセスよりも短時間で処理できるようにスケジューラを操作することができる。また、プロセスを生成するプログラムがスケジューラを操作して特定のプロセスの優先度レベルを上げることもできる。
【0004】
しかし、優先度レベルが上昇したプロセスは、他のプロセスの優先度レベルとの関係で相対的にCPUの割り当て時間が増加するだけであり、実行可能キューに登録されたバックグラウンドのプロセスの優先度レベルが同等またはそれ以上の場合はフォアグラウンドのプロセスの割り当て時間は増加しない。また、他のプロセスの優先度レベルが低い場合は、優先度レベルを上げたフォアグラウンドのプロセスによってCPUが独占されてしまい、他のプロセスにCPUが割り当てられるまでの時間が長くなってしまうといういわゆる飢餓状態の問題が発生する。プロセスの優先度レベルの操作による処理時間の短縮は、あくまで他のプロセスとの相対的な関係で有効になるためフォアグラウンドのプロセスをシステムに障害を与えないで確実に短時間で処理する方法としては十分ではない。
【0005】
フォアグラウンドのプロセスにバックグラウンドのプロセスより多くのクォンタムを与えて短時間で処理する方法として、タイムスライス・ブーストまたはクォンタム・ブーストという手法がある。タイムスライス・ブーストでは、プロセスが保有するウインドウがフォアグラウンドに切り換わったときに当該プロセスの優先度レベルを上げてタイムスライスを増加させる。しかし、タイムスライス・ブーストは、当該CPUにおける他のプロセスより多くのクォンタムが与えられるというだけのもので、バックグラウンドのプロセスに対する相対的なレスポンス・タイムの改善であり、フォアグラウンドのプロセスの絶対的なレスポンス・タイムの改善につながるものではない。たとえば、実行可能キューにスレッドが1つしかない場合は、処理時間はそのスレッドを実行するCPUの動作周波数で決まり、それ以上は短縮することができない。
【0006】
特許文献1は、マルチプロセッシングの環境において、一層のパフォーマンスの向上および消費電力の低減を図る技術を開示する。同文献には、いずれのスレッド・ユニットが復帰時間の短いパワー・ステートに遷移しているかを示すシステム・パワー・ステート・フィルターを利用して所定のタスクに関するCPUアフィニティ・マスクを書き換え、スケジューラが当該所定のタスクをより復帰時間の短いパワー・ステートに遷移しているスレッド・ユニットに割り当てるようにしている。
【0007】
特許文献2は、マルチ・コア・プロセッサにおいて、コア全部で集団的に走っているスレッドの統計的な予測に基づいてプロセッサの電圧および周波数の動作点を選択して、パフォーマンスを向上させる技術を開示する。具体的には、同時にアクティブになるコアの数を制限して全体としては電力制約条件に従いながら動作するコアの動作周波数を向上させている。
【0008】
非特許文献1は、マルチ・コア・プロセッサのいずれかのコアがアイドル状態のときであって、かつ電力、電流および温度に関する仕様の限界未満で動作している場合には、自動的に定格の動作周波数より高い周波数で動作させる技術を開示する。非特許文献2は、特定のプロセスを特定のプロセッサに割り当てることによりパフォーマンスを最適化するハード・アフィニティの手法を開示する。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】米国特許出願公開第2009/0320031号明細書
【特許文献2】特表2007−535721号公報
【非特許文献】
【0010】
【非特許文献1】"Intel Turbo Boost Technology in Intel Core Microarchitecture(Nehalem) Based Processors"、[online]、November 2008、[平成22年8月10日検索]、インターネット〈URL:http://www.intel.co.jp/jp/technology/turboboost/〉
【非特許文献2】Eli Dow、"プロセッサ・アフィニティの管理"、[online]、2005年9月29日、[平成22年8月10日検索]、インターネット〈URL:http://www.ibm.com/developerworks/jp/linux/library/l-affinity/〉
【発明の概要】
【発明が解決しようとする課題】
【0011】
マルチ・プロセッサ・システムに対応するOSでは、複数のCPUを使用して同時に複数のプロセスを実行することができる。対象型マルチ・プロセッサ・システムでは、OSは各論理CPUを各プロセスに対して等価に扱う。OSはスケジューリングの際に全体として最も効率が高くなるようにプロセスを各CPUに関連付ける。このような特定のプロセスとCPUの関連性をプロセッサ・アフィニティまたはプロセッサ親和性という。プロセッサ・アフィニティには、同一条件のスレッドやプロセスをなるべく同じCPUに割り当てるようにスケジューリングするソフト・アフィニティという手法と能動的に特定のCPUに割り当てるハード・アフィニティという手法が存在する。
【0012】
ソフト・アフィニティによれば、L2キャッシュのデータやNUMA(Non-Uniform Memory Access )というアーキテクチャで使用するメモリのデータなどを有効に活用できるので、OSは一般的にスレッドにソフト・アフィニティを採用して最後に実行したのと同じCPUを割り当てるようにしている。これに対しハード・アフィニティの採用は、システムの性能をテストする場合やキャッシュのヒット率を特に高めた処理をする必要があるアプリケーションを実行する場合などのように、明らかにソフト・アフィニティを採用したOSのアルゴリズムよりも優れたパフォーマンスが期待できることが判明している場合に限定される。
【0013】
ところで、インテル社ではマルチ・コアCPUにおいて、アイドルのコアCPUが存在する場合に他のコアCPUを基準動作周波数よりも高い周波数で動作させるターボ・ブースト・テクノロジーを導入している。ターボ・ブースト・テクノロジーでは、CPUは温度または消費電力などの条件が成立したときに一部のCPUコアの動作周波数が上昇するが、スケジューラはCPUコアの動作周波数を認識することなく所定のアルゴリズムでプロセスをスケジューリングする。よって、ターボ・ブースト・テクノロジーを採用したときには、動作周波数が上昇するCPUコアには任意のプロセスが割り当てられ、スケジューラにより偶然にそのCPUに割り当てられたプロセスだけが高い動作周波数で実行される。したがって、ターボ・ブースト・テクノロジーを採用しただけでは、フォアグラウンドのプロセスの処理時間を確実に短縮することができない。
【0014】
そこで本発明の目的は、マルチ・プロセッサ環境で特定のプロセスの処理時間を短縮する方法を提供することにある。さらに本発明の目的はフォアグラウインドのプロセスをバックグラウンドのプロセスよりも高い動作周波数の論理CPUで実行する機会を増大する方法を提供することにある。さらに本発明の目的は、そのような方法を実現するコンピュータ・プログラムおよびコンピュータを提供することにある。
【課題を解決するための手段】
【0015】
本発明にかかるコンピュータは、所定の条件が成立したときに一時的に動作周波数を上昇させるクロック・ブーストが可能な複数の論理プロセッサを備える。制御プログラムは複数の論理プロセッサのいずれかにクロック・ブーストの設定をする。クロック・ブーストの設定をする論理プロセッサは、単数であっても複数であってもよい。また、複数の論理プロセッサは複数のプロセッサで実現してもよいし、1つのプロセッサをソフトウエアで仮想化することで実現してもよい。クロック・ブーストの設定がされた論理プロセッサは、所定の条件が成立している間に限り基本動作周波数よりも高い動作周波数で動作し、所定の条件が成立しない状態になると基本動作周波数に戻る。基本動作周波数よりも高い動作周波数は、段階的に設定することができる。
【0016】
所定の条件は、アイドル状態の論理プロセッサの存在、消費電力、消費電流、および温度に基づいて設定することができる。さらに複数の論理プロセッサは、消費電力が小さい状態が継続するような場合は、アイドル状態の論理プロセッサが存在しない状態、電流が基準値を超えた状態、または消費電力が基準値を超えた状態であっても、温度が基準値を超えない限り高い動作周波数で動作するものであってもよい。このように消費電力が一時的に消費電力の基準値を超えた状態でプロセッサを動作させると、動作周波数を一層高くすることができるため、より短時間でプロセスを処理することができる。
【0017】
制御プログラムは、コンピュータに生成された複数のプロセスの中から短時間で処理することが要求されているプロセスを優先プロセスとして選択する。優先プロセスは、ウインドウを生成するプロセス、高いスケジューリングの優先度が設定されているプロセス、高いディスクI/O処理の優先度が設定されているプロセスとすることができる。制御プログラムはOSと協働して、優先プロセスをクロック・ブーストの設定がされた単数または複数の論理プロセッサだけにディスパッチして優先実行する。
【0018】
クロック・ブーストの設定がされた論理プロセッサは、条件が成立したときには動作周波数が増大するため、そこで実行されるいかなるプロセスも未設定の論理プロセッサよりも処理時間が短縮されるので優先プロセスがディスパッチされるまでの待ち時間が短縮される。さらに優先プロセスは、クロック・ブーストの設定がされた論理プロセッサだけにスケジューリングされるため、実際にクロック・ブーストされた状態の論理プロセッサで実行される確率が高くなり一層処理時間が短縮される。本発明の手法はプロセスの優先度レベルを変える手法とは異なり、論理プロセッサが一時的に高い動作周波数で動作する特性を利用するものであるため、優先プロセスの絶対的な処理時間を短縮することができる。また、優先度レベルの低い他のプロセスを飢餓状態に陥らせることがない。
【0019】
クロック・ブーストの設定がされた論理プロセッサとのアフィニティに基づいてスケジューリングするために、制御プログラムはOSがディフォルトで作成したアフィニティ・マスクまたはプロセスを生成するプログラムが書き換えたアフィニティ・マスクのようなオリジナルのアフィニティ・マスクのビット・パターンを、クロック・ブーストの設定状態に基づいて書き換えることができる。具体的には、アフィニティ・マスクは、オリジナルのアフィニティ・マスクと複数の論理プロセッサのそれぞれに対するクロック・ブーストの設定状態を示すマスク・ビットを論理積演算して書き換えることができる。
【0020】
論理積演算をすることで、優先プロセスをプログラムが指定した論理プロセッサ以外の論理プロセッサで優先実行するような事態を排除することができる。また、いずれの論理プロセッサも当該プロセスに対して等価であることが判明しているような場合は、アフィニティ・マスクを、クロック・ブーストの設定がされた論理プロセッサだけを指定するように書き換えてもよい。このように書き換えることで、優先プロセスを確実にクロック・ブーストの設定がされた論理プロセッサだけで実行することができるようになる。
【0021】
本発明の手法は、新たに生成されるプロセスに対してその都度適用することができる。制御プログラムは、クロック・ブーストの設定がされた論理プロセッサの使用率を取得し、新たに生成された優先プロセスについては、使用率が所定値未満のときにだけ優先実行されるようにアフィニティ・マスクを書き換えることができる。使用率が所定値以上のときは、プロセス・スケジューラが、クロック・ブーストの設定がされた論理プロセッサだけでなく、未設定の論理プロセッサも含めてディスパッチするようにアフィニティを緩和した方が短時間で処理できる確率が高くなる場合があるからである。
【0022】
さらに制御プログラムは、論理プロセッサの温度を取得し、新たに生成された優先プロセスについては、温度が所定値未満のときにだけ優先実行されるようにアフィニティ・マスクを書き換えることができる。論理プロセッサの温度が高いときは、クロック・ブーストの設定がされていても実際に高い動作周波数で動作する確率が低いので、プロセス・スケジューラがクロック・ブーストの設定がされた論理プロセッサだけで実行するよりも他の論理プロセッサも含めて実行する論理プロセッサを選択した方が短時間で処理できる確率が高くなる場合があるからである。
【0023】
クロック・ブーストの設定がされている論理プロセッサは非優先プロセスも実行し、また、各プロセスが論理プロセッサに与える負荷も時間的に変化する。クロック・ブーストの設定がされている論理プロセッサの使用率が所定値以上のときは、さらにクロック・ブーストの設定が可能な論理プロセッサが存在するか否かを判断することができる。そして、クロック・ブーストの設定がされている論理プロセッサの使用率が所定値以上でかつクロック・ブーストの設定が可能な論理プロセッサが存在するときに、新たな論理プロセッサにクロック・ブーストの追加的な設定をすることで、負荷の分散を図ることができる。
【0024】
このとき優先実行されている優先プロセスおよび優先実行されていない優先プロセスまたはいずれか一方について、追加的にクロック・ブーストの設定がされた論理プロセッサも含めてディスパッチされるようにアフィニティ・マスクを書き換えることができる。優先プロセスの中には、生成されたときの論理プロセッサの使用率または論理プロセッサの温度などの条件により、優先実行されないものが存在する。クロック・ブーストの設定がされた論理プロセッサの使用率が所定値未満になったときに優先実行されない優先プロセスが存在する場合には、当該優先プロセスが優先実行されるようにアフィニティ・マスクを書き換えることができる。したがって、プロセスが生成されたときの使用率や温度の条件で一旦は優先実行されないことになった優先プロセスをその後の論理プロセッサの動作状態に基づいて優先実行されるようにすることができる。
【0025】
クロック・ブーストの設定をする論理プロセッサの数を増大させると、現実にクロック・ブーストする論理プロセッサに対する優先プロセスのアフィニティが薄れてしまい非優先プロセスとの差が少なくなっていく。したがって、全体の論理プロセッサの中でクロック・ブーストの設定ができる論理プロセッサの数には実質的な限界がある。よって、クロック・ブーストの設定がされた論理プロセッサの使用率が所定値以上まで上昇したときに、クロック・ブーストの追加的な設定が可能な論理プロセッサが存在しない場合がある。このとき、クロック・ブーストが未設定の論理プロセッサの使用率が所定値未満のときには、制御プログラムはクロック・ブーストが未設定の論理プロセッサでも優先プロセスが実行されるようにアフィニティ・マスクを書き換えて優先プロセスのアフィニティを緩和することができる。
【発明の効果】
【0026】
本発明により、マルチ・プロセッサ環境で特定のプロセスの処理時間を短縮する方法を提供することができた。さらに本発明によりフォアグラウンドのプロセスをバックグラウンドのプロセスよりも高い動作周波数の論理CPUで実行する機会を増大する方法を提供することができた。さらに本発明により、そのような方法を実現するコンピュータ・プログラムおよびコンピュータを提供することができた。
【図面の簡単な説明】
【0027】
【図1】本実施の形態にかかるコンピュータ・システムの主要なハードウエア構成を示す機能ブロック図である。
【図2】コンピュータにおいて実現する優先プロセス処理システムのハードウエアおよびソフトウエアの構成を示す機能ブロック図である。
【図3】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図4】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図5】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図6】優先プロセス処理システムで優先プロセスを実行する手順を示すフローチャートである。
【図7】アフィニティ・マスクとパフォーマンス・フィルタのデータ構造および論理積演算の方法を説明する図である。
【図8】プロセス・リストのデータ構造の一例を示す図である。
【発明を実施するための形態】
【0028】
[コンピュータ・システムの構成]
図1は、本実施の形態にかかるコンピュータ・システム10の主要なハードウエア構成を示す機能ブロック図である。コンピュータ・システム10は、それぞれバス23に接続されたCPUパッケージ11、メイン・メモリ13、入力デバイス15、ハード・ディスク・ドライブ(HDD)17、液晶表示装置(LCD)19、およびBIOS_ROM21などを含んでいる。CPUパッケージ11は、複数のCPUコアを1つのパッケージに収めたマルチ・コア・プロセッサで、一例としてインテル社のターボ・ブースト・テクノロジーをサポートしている。
【0029】
ターボ・ブースト・テクノロジーは、CPUパッケージ11に熱的な余裕があるときにいずれかのCPUコアの動作周波数を一時的に上昇させてパフォーマンスを向上させながら、熱設計消費電力(TDP)の範囲に収めるという手法である。CPUパッケージ11は、OSが一時的なパフォーマンスの増大を要求し、さらに直近の所定時間の間測定した消費電力および電流の平均値がTDPなどの所定値以下ならびにCPUパッケージの温度が所定値以下の場合に、何らかの契機を捕らえていずれかのCPUコアの動作周波数を上昇させる。また条件が満たされなくなったときには、CPUコアの動作周波数を基本動作周波数に戻す。
【0030】
このように一時的にCPUコアの動作周波数が上昇することをクロック・ブーストといい、クロック・ブーストするための消費電力、消費電流、および温度をブースト条件ということにする。クロック・ブーストする際には、特定のCPUコアが段階的に動作周波数を上昇させたり、クロック・ブーストするCPUコアを追加的に増やしたりすることができる。クロック・ブーストした高い動作周波数から基本動作周波数に戻るときはその逆の手順で行うことができる。
【0031】
クロック・ブーストをさせる契機としては、一部のCPUコアのアイドル状態を検知する方法、環境温度の変化を利用する方法、およびプラットフォーム温度の変化を利用する方法などがある。またインテル社の新世代のターボ・ブースト・テクノロジーでは、CPUパッケージの周囲のプラットフォームまたはCPUパッケージの消費電力や温度が低下しているときに、消費電力や温度が上限に到達しない限り一時的にTDPを越えて動作周波数を上昇させる。
【0032】
このような新世代のターボ・ブースト・テクノロジーでは、プラットフォームの消費電力や温度が低い状態のときに高負荷のアプリケーションを実行すると、それまでのヘッドルームを利用して実際の消費電力や温度が基準値に上昇するまでの短時間だけ以前のターボ・ブースト・テクノロジーよりも一層高い動作周波数で動作させることができるのでレスポンス・タイムを大幅に短縮できるという利点がある。旧世代および新世代のいずれのターボ・ブースト・テクノロジーでも、特定のプロセスを短時間で処理する目的で利用するためには、特定のプロセスが常にクロック・ブーストするCPUコアにスケジューリングされる必要がある。
【0033】
なお、本発明はインテル社のターボ・ブースト・テクノロジーをサポートするマルチ・プロセッサ・システムに限定するものではなく、同等のクロック・ブーストを実行できる他のマルチ・プロセッサ・システムに適用することも可能である。さらに、本発明は1つのコンピュータ・システムにシングル・コアのCPUパッケージを複数設けて、その一部のCPUパッケージだけをクロック・ブーストするような場合にも適用できる。また、インテル社のハイパー・スレッディング(商標)という技術では、1つのプロセッサ・コアをOSに対して複数のプロセッサ・コアのように動作させる。本発明は、このような仮想化されたマルチ・プロセッサに適用することもできる。
【0034】
さらに、インテル社のインテル(登録商標)VTやAMD社のAMD−Vなどのようなソフトウエアで仮想化することでマルチ・プロセッサ環境を実現するシステムに適用することもできる。したがって、以後、クロック・ブーストの対象となるマルチ・プロセッサの単位を、ハードウエアおよびソフトウエアのいずれで実現する場合も含める意味で論理CPUということにする。BIOS_ROM21は、ACPI規格に適合するBIOSを格納している。
【0035】
[優先プロセス]
本実施の形態では、プロセスまたはその実行単位であるスレッドを優先順位が高く高速処理が要求されるフォアグラウンドのプロセス(以下、優先プロセスという。)をそれ以外のバックグラウンドのプロセス(以下、非優先プロセスという。)から区分する。すべてのプロセスは最低1つのスレッドを保有しており1つまたは複数のスレッドがCPUパッケージ11に対するスケジューリングの対象となって実行される。したがって、プロセスの実行といった場合はそのプロセスに含まれるスレッドを実行することを意味し、プロセスに対する設定はそれがスレッドに引き継がれる場合はスレッドに対する設定をも意味する。
【0036】
コンピュータ・システムを利用するユーザにとってユーザ・インターフェースのプロセスには短いレスポンス・タイムを期待するのが一般的である。したがって、優先プロセスの第1のグループは、ウインドウを作成しかつ実際にそれをLCD19に表示させるユーザ・インターフェースのプロセスとして定義する。なお、ユーザ・インターフェースのプロセスの中で、ウインドウを一番手前に表示しているフォアグラウンドのウインドウを表示しているプロセスをさらに優先度が高い優先プロセスとして定義することもできる。
【0037】
OSのスケジューラは、スレッドの優先度レベルを基準にして論理CPUにディスパッチするスレッドを選択する。スレッドの優先度レベルは、プロセスの優先度クラスと当該プロセス内のスレッドに割り当てられた相対優先度によって決まる。プログラムは、プロセスを生成するときに優先度クラスを設定し、スレッドを生成するときに相対優先度を設定することができる。優先度レベルの高いスレッドは、優先度レベルの低いスレッドよりも優先的にディスパッチされるので所定時間における論理CPUの割り当て時間が長くなり短い時間で処理することができる。ユーザは優先度クラスの高いスレッドが短時間で処理されることを期待しているので、優先プロセスの第2のグループは優先度クラスまたは優先度レベルの高いプロセスとして定義する。
【0038】
プロセッサの動作周波数が上昇することに伴いディスクI/Oがボトルネックになる場合が生じてくる。これを解決するために、たとえば、Windows Vista(登録商標)では、バックグラウンドで実行するウイルス対策プログラム、デフラグメンテーションのプログラム、またはメールの送受信プログラムなどのプロセスがフォアグラウンドのプロセスに影響を与えないように、バックグラウンドのプロセスのI/O処理優先度を下げることができる。したがって、優先プロセスの第3のグループはディスクI/O優先度の高いスレッドとして定義する。さらに、第1のグループから第3のグループのいずれにも属さないがユーザの個別の事情で優先プロセスの対象にする必要があるコンパイラやウイルス対策プログラムなどのプロセスを第4のグループの優先プロセスとして定義する。
【0039】
[優先プロセス処理システムの構成]
図2は、コンピュータ10において実現する優先プロセス処理システムのハードウエアおよびソフトウエアの構成を示す機能ブロック図である。優先プロセス処理システム100は、主として制御プログラム101、OS150、ACPIインターフェース170およびCPUパッケージ11で構成することができる。ただし、ソフトウエアがCPUパッケージ11で実行されて機能を発揮するためにはメイン・メモリ13およびバス23などの他のデバイスを利用する必要があるが、本発明の説明には特に必要がないので図2からは除いている。
【0040】
CPUパッケージ11は、4つの論理CPU61、63、65、67とダイの温度を検出する温度センサ(図示せず)を含んでいる。CPUパッケージ11は、ACPIインターフェース170からCPUパッケージ11のブースト条件に関するデータおよびPステートを受け取って所定のアルゴリズムで1つまたは複数の論理CPUに対して自律的にクロック・ブーストの制御をすることができる。すなわち、CPUパッケージ11によるクロック・ブーストの制御は、OS150によるスケジューリングからは独立して行われる。また、OS150はCPUパッケージ11の中でいずれがクロック・ブーストの設定がされた論理CPUであるか、および現在実際にクロック・ブーストしているか否かを認識しない。
【0041】
制御プログラム101は、優先プロセスをCPUパッケージ11において短時間で処理するためにOS150と協働して主体的な処理をする。具体的な処理の内容は、図3〜図6のフローチャートによる優先処理の手順において説明する。ホワイト・リスト103は、制御プログラム101が特定することができない第4のグループの優先プロセスを生成するプログラムの識別子を記録する。あるいは第1のグループから第3のグループの優先プロセスを制御プログラム101が特定しないで、ホワイト・リストにすべての優先プロセスを生成するプログラムの識別子を登録してもよい。ユーザはあらかじめ制御プログラム101が提供するインターフェースを通じてホワイト・リスト103にそのようなプログラムの識別子を登録することができる。
【0042】
パフォーマンス・フィルタ105は、論理CPU61、63、65、67の数に対応する4ビットのマスク・ビットで、ブースト条件が成立したときにクロック・ブーストする論理CPUの識別子を登録する。制御プログラム101は、動作を開始したときにシステム・コール関数を呼び出してOS150またはACPIインターフェース170から有効な論理CPUの識別子を取得し、その中の一部の論理CPUをクロック・ブーストの対象として選択してパフォーマンス・フィルタ105にビット・パターンを設定する。制御プログラム101がパフォーマンス・フィルタ105にクロック・ブーストの対象として設定した論理CPUに対応するACPIレジスタにPステートを設定することで、当該論理CPUに対するクロック・ブーストの設定が有効になる。
【0043】
クロック・ブーストの対象になった論理CPUは、ブースト条件が成立したときに限り一時的に動作周波数が増大するが、クロック・ブーストの設定がされた複数の論理CPUが実際にすべて同時にクロック・ブーストすることが保証されているわけではない。クロック・ブーストの設定をした論理CPUの数が増えるほど、実際にクロック・ブーストする時間的な割合が低下する論理CPUが増加する。そのような論理CPUが割り当てられた優先プロセスは、クロック・ブーストの恩恵を受けることができない。すべての論理CPUにクロック・ブーストの設定をすれば、優先プロセスと非優先プロセスのプロセッサ・アフィニティには差がなくなる。
【0044】
したがって、全体の論理CPUの数に対してクロック・ブーストを設定する論理CPUの数の割合は適切に選定する必要がある。制御プログラム101は、一例として最初にディフォルトとして全体の50%の数の論理CPUまたは最低の数の論理CPUをクロック・ブーストの対象に選定し、その後、クロック・ブーストの対象になった論理CPUのCPU使用率が所定値以上のときに追加したり、所定値未満になったときに減らしたりして最適なクロック・ブーストの設定をすることができる。
【0045】
プロセス・リスト107は、優先プロセスについて作成されたアフィニティ・マスクのビット・パターンを登録する。制御プログラム101はシステム・コール関数を呼び出して、その時点で生成されているプロセスをエニュメレーションしたりあるいは新たに生成されるプロセスをフックしたりして、各プロセスが優先プロセスであるか否かを判断し、さらにそのアフィニティ・マスクのビット・パターンをプロセス・リスト107に登録する。
【0046】
制御プログラム101は、プロセス・リスト107に、優先プロセスについてOS150がディフォルトで設定したアフィニティ・マスクのビット・パターン、および当該プロセスを生成したプログラムがディフォルトのアフィニティ・マスクを書き換えた後のビット・パターンを登録する。以後、この2種類のアフィニティ・マスクをオリジナルのアフィニティ・マスクという。プロセス・リスト107にはさらに、制御プログラム101がオリジナルのアフィニティ・マスクを書き換えたあとのビット・パターンも登録する。
【0047】
CPU使用率メータ151は、各論理CPU61、63、65、67のCPU使用率を測定する。CPU使用率Yは、アイドル・プロセスのユーザ・モード時間をUi、アイドル・プロセスのカーネル・モード時間をKi、経過時間をEtとしたときに次の式で所定のプログラムが計算することができる。
Y=(1−(Ui+Ki)/Et)×100%
【0048】
プロセス・スケジューラ153は、アフィニティ・マスク155に基づいて所定のアルゴリズムでスレッドを割り当てる論理CPU61、63、65、67を決定し実行可能キュー161、163、165、167からディスパッチする。プログラムは、プロセスを生成する際にプロセスの優先度クラスを設定し、さらに、スレッドの相対優先度を設定することができる。OS150は優先度クラスと相対優先度に基づいて、スレッドの優先度レベルを決定する。プロセス・スケジューラ153は、各スレッドの優先度レベルに基づいてスレッドをディスパッチする順序を決定する。
【0049】
アフィニティ・マスク155は、OS150がプロセスごとに生成するマスク・ビットで、ビット数は論理CPU61、63、65、67の数に対応する。アフィニティ・マスク155はオリジナルが維持されたものであったり、制御プログラム101によって書き換えられたものであったりする。アフィニティ・マスク155のビット・パターンは当該プロセスのプロセッサ・アフィニティを示し、当該プロセスが実行される論理CPUを指定する。あるプロセスについて生成されたアフィニティ・マスク155のビット・パターンは、そのプロセスに帰属するスレッドにも引き継がれる。したがって、アフィニティ・マスク155はプロセスに対応すると同時に配下のスレッドにも対応する。アフィニティ・マスク155および優先度レベルは、プロセス・スケジューラ153が実行可能キューに登録してスケジューリングをする対象となるデータ構造体の一部となる。
【0050】
プロセス・スケジューラ153は、アフィニティ・マスク155のビット・パターンに基づいて各スレッドについてディスパッチする論理CPUを決める。アフィニティ・マスク155に複数のビットが設定されている場合は、プロセス・スケジューラ153は設定されている論理CPUのいずれかにラウンド・ロビン方式などの所定のアルゴリズムに基づいてディスパッチする。実行可能キュー157には、実行可能状態になったスレッドのデータ構造体が登録される。各実行可能キュー161、163、165、167は、各論理CPU61、63、65、67に対応する。
【0051】
プロセス・スケジューラ153は、ディフォルトで用意した所定のクォンタムを付与したスレッドのデータ構造体を実行可能キュー157に登録する。さらに、アフィニティ・マスク155のビット・パターンにより指定された論理CPUに対応する実行可能キュー161、163、165、167のいずれかに登録する。実行可能キュー161、163、165、167のいずれかに登録されたスレッドは、他のスレッドとの優先度レベルに応じてやがて対応する論理CPU61、63、65、67にディスパッチされる。
【0052】
たとえば、論理CPU61にディスパッチされたスレッドは与えられたクォンタムを消費すると対応する実行可能キュー161の最後に登録される。また、実行の途中で実行可能キュー161により優先度レベルの高いスレッドが登録されるとクォンタムをすべて消費する前であってもプリエンプトされて実行可能キュー161の先頭に登録される。I/O待ちなどのために待機状態に入ったスレッドは、再度実行可能キュー157に登録されその後実行可能キュー161、163、165、167を経由していずれかの論理CPU61、63、65、67にディスパッチされる。
【0053】
ACPIインターフェース170は、BIOSおよびACPIレジスタ(図示せず。)で構成される。BIOSは、ACPIレジスタにPステートを設定することでCPUパッケージ11のクロック・ブーストを制御することができる。BIOSは、ACPIレジスタに_PSS(Performance Supported States)、_PSD(P-State Dependency)、および_PPC(Performance Present Capabilities)という3つのオブジェクトを設定することで、所定の論理CPUを所定の動作周波数にクロック・ブーストすることができる。
【0054】
一例では_PPCに0を設定されたP0ステートの論理CPUはブースト条件が成立したときにクロック・ブーストして_PSSに設定された動作周波数を上限の動作周波数として動作する。_PPCに1が設定されたP1ステートの論理CPUはブースト条件が成立してもクロック・ブーストしないで基本動作周波数を上限の動作周波数として動作する。制御プログラム101は、パフォーマンス・フィルタ105のビット・パターンをACPIインターフェース170のACPIレジスタを通じてクロック・ブーストの対象となる論理CPUにPステートとして設定する。ACPIインターフェース170は、さらにCPUパッケージ11にブースト条件の判断に必要な消費電力、電流、および温度などのデータを提供する。
【0055】
図2に示した、各ソフトウエアはHDD17に格納され、ブート段階でメイン・メモリ13にロードされる。各ソフトウエアは、主としてCPUパッケージ11およびメイン・メモリ13で実行されたときに、ハードウエアと協働してコンピュータ10に所定の機能を発揮させるハードウエアとして捕らえることもできる。また、OS150はマルチ・プロセッサ・システムおよびマルチ・タスクに対応するものであれば、特に限定する必要はない。また、本発明は、既存のOSおよびクロック・ブーストのアルゴリズムを修正しないでも実現することができる。
【0056】
[優先プロセスを処理する手順]
図3、図4、図5、図6は、優先プロセス処理システム100で優先プロセスを実行する手順を示すフローチャートである。図3は、制御プログラム101が動作を開始するまでに生成されているプロセスおよび新たに生成されるプロセスを処理する手順を示す。図4は、クロック・ブーストの設定がされた論理CPUのCPU使用率に応じて、ダイナミックにクロック・ブーストの設定を変更する手順を示す。
【0057】
図5は、プロセスを生成したときのCPU使用率と温度の条件で、優先実行されない優先プロセスをその後のCPU使用率の低下に応じて優先実行する手順を示す。図6はクロック・ブーストの設定をした論理CPUのCPU使用率が上昇したときに優先プロセスのプロセッサ・アフィニティを緩和する手順を示す。図7はアフィニティ・マスク155とパフォーマンス・フィルタ105のデータ構造および論理積演算の方法を説明する図である。
【0058】
ブロック201でコンピュータ10が起動しHDD17に格納されたプログラムがブートを開始する。ブート・ファイルが順番にメイン・メモリ13にロードされて実行を開始するとブロック203でそれぞれのプログラムがプロセスを生成する。OS150またはACPIインターフェース170は、CPUパッケージ11に実装されている有効な論理CPUを調べる。ここでは、4つの論理CPU61、63、65、67がすべて有効になっているものとする。OS150はACPIインターフェース170を通じて論理CPU61、63、65、67にディフォルトで保有している_PSS、_PSD、_PPCのメソッドを設定する。
【0059】
ディフォルトのPステートでは、OS150は一例として論理CPU61だけをP0ステートに設定し、その他の論理CPU63、65、67をP1ステートに設定する。この場合、CPUパッケージ11は、ブースト条件が成立すれば論理CPU61の動作周波数だけを基本動作周波数よりも上昇させ、ブースト条件が成立しなくなったときには基本動作周波数に戻す。OS150は、生成されたプロセスのそれぞれに対してディフォルトのアフィニティ・マスク155を作成する。
【0060】
ディフォルトのアフィニティ・マスク155は、有効な論理CPU61、63、65、67のいずれにもディスパッチできるようにアフィニティ・マスク155の各ビットが1になっている。この様子を図7(A)のアフィニティ・マスク155aとして示す。また、プロセスを生成するプログラムはシステム・コール関数を呼び出してディフォルトで設定されたアフィニティ・マスク155を書き換えることができる。
【0061】
一例として論理CPU65、67だけが割り当てられるようにプログラムがディフォルトのアフィニティ・マスク155を書き換えた様子を、図7(B)のアフィニティ・マスク155cとして示す。アフィニティ・マスク155a、155cは、いずれもオリジナルのアフィニティ・マスクに相当する。プロセス・スケジューラ153がスケジューリングするのはプロセスではなくプログラムによりプロセスの実行単位として生成されたスレッドである。プロセスのアフィニティ・マスク155aは当該プロセスの内部で生成されるスレッドのアフィニティ・マスクに引き継がれている。なお、スレッドを生成するプログラムおよび制御プログラム101は、スレッドのアフィニティ・マスクを書き換えることもできる。
【0062】
プロセス・スケジューラ153は、アフィニティ・マスク155aに基づいて任意の論理CPU61、63、65、67にスレッドを自由に割り当てることができる。プロセス・スケジューラ153はまたアフィニティ・マスク155cに基づいて論理CPU65または論理CPU67のいずれかにスレッドを割り当てることができる。ただし、スケジューラ153はいわゆるソフト・アフィニティという手法に基づいてスレッドが論理CPU間を頻繁に移動しないように同一条件のスレッドを最後に実行した論理CPUに割り当てるようにスケジューリングすることもできる。
【0063】
CPUパッケージ11は、プロセス・スケジューラ153からは独立して論理CPU61の動作周波数を制御する。そして論理CPU61が割り当てられたスレッドは実行可能キュー161に登録されている間に当該論理CPU61が偶然にもクロック・ブーストすれば、実行可能キュー163、165、167に登録されたスレッドよりも短い待ち時間でディスパッチされる。また、論理CPU61にディスパッチされたスレッドは、当該論理CPU61が偶然にもそのときにクロック・ブーストすれば、実行可能キュー161に登録された他のスレッドよりも短い時間で処理される。アフィニティ・マスク155aを備えるいずれのスレッドも、クロック・ブーストした論理CPU61にディスパッチされる機会はあるがその確率は1/4で、さらに、論理CPU61にディスパッチされた時点で、論理CPU61がクロック・ブーストするとは限らない。ここまでは、従来の方法によるプロセスの制御手順である。
【0064】
制御プログラム101もブート・ファイルの一部を構成しておりブロック205で制御プログラム101が動作を開始する。制御プログラム101が、ブートの初期段階で動作を開始することによりそれ以後のブート段階でブート・ファイルの優先プロセスを短時間で処理することができるようになる。たとえば、メールに関するアプリケーションを起動後できるだけ早く動作させてメールを受信したいという場合は、そのアプリケーションが生成するプロセスを優先プロセスに選定してブート中にできるだけ早く実行させることができる。あるいは、制御プログラム101はブートの最終段階またはブートが完了した後に動作を開始するようにしてもよい。
【0065】
制御プログラム101は、パフォーマンス・フィルタ105に、論理CPU61、63に対応するビットを1に設定し、論理CPU63、65に対応するビットを0に設定する。制御プログラム101は、ブロック207でパフォーマンス・フィルタ105に基づいてACPIインターフェース170にPステートを設定する。BIOSは論理CPU61、63をP0ステートに設定し、論理CPU65、67をP1ステートに設定する。このときのパフォーマンス・フィルタ105を、図7(A)、図7(B)のパフォーマンス・フィルタ105aとして示す。
【0066】
その結果、CPUパッケージ11は論理CPU65、67が基本動作周波数を最大の動作周波数として動作し、論理CPU61、63はブースト条件が成立したときには基本動作周波数よりも高い動作周波数で動作し、ブースト条件が成立しないときは基本動作周波数を最大の動作周波数として動作する。CPUパッケージ11はブースト条件が成立したときは、同時に論理CPU61、63をクロック・ブーストしてもよいし、先に論理CPU61だけをクロック・ブーストし、さらに熱的な余裕がある場合には論理CPU63を追加的にクロック・ブーストするように動作周波数を制御してもよい。なお、各論理CPU61、63、65、67は、アイドル状態のときに基本動作周波数よりも低い動作周波数で動作してもよい。
【0067】
ブロック209で、制御プログラム101はシステム・コール関数を呼び出してその時点で生成されているプロセスの中から優先プロセスを特定する。最初に現時点で生成されているすべてのプロセスをエニュメレーションしてプロセス・ハンドルを取得し、その中でウインドウを生成しかつ実際に表示しているプロセスを第1のグループに分類される優先プロセスとして特定する。つぎに制御プログラム101は、システム・コール関数を呼び出して第1のグループの優先プロセスを除いた残りのプロセスのそれぞれの優先度クラスまたは優先度レベルを取得して優先度クラスまたは優先度レベルが所定レベル以上のプロセスを第2のグループに分類される優先プロセスとして特定する。
【0068】
たとえば、Windows(登録商標)では、アプリケーションはプロセスを生成するときにシステム・コール関数を呼び出してReal-time、High、Above Normal、Normal、Below Normal、Idleのいずれかの優先度クラスを指定することができる。アプリケーションはスレッドを生成するときにシステム・コール関数を呼び出してスレッドの相対優先度を設定することができる。Windows(登録商標)は指定された優先度クラスと相対優先度に基づいて、スレッドの優先度レベルを決定する。このとき制御プログラム101は、Above Normal以上の優先度クラスを指定したプロセスを第2のグループに分類される優先プロセスとすることができる。
【0069】
さらに制御プログラム101は、システム・コール関数を呼び出して第1のグループと第2のグループの優先プロセスを除いた残りのプロセスのそれぞれのディスクのI/O処理の優先度を取得し、I/O処理の優先度が所定レベル以上のプロセスを第3のグループに分類される優先プロセスとして特定する。具体的にはアプリケーションは、ディスクに対するI/O処理優先度をCritical、High、Normal、Low、Very Lowの5段階に設定することが可能でこれらのデータは、OSのI/OマネージャがI/Oドライバと通信するIRP(I/O Request Packet)にフラグとして設定される。このとき制御プログラム101は、High以上のI/O処理優先度を指定したプロセスを第3のグループに分類される優先プロセスとすることができる。
【0070】
最後に制御プログラム101はシステム・コール関数を呼び出して第1のグループから第3のグループの優先プロセスを除いた残りのプロセスの中で、ホワイト・リストに登録されているプログラムが生成する優先プロセスがあればそれを第4のグループの優先プロセスとして特定する。制御プログラム101は、優先プロセスを特定するたびにシステム・コール関数を呼び出して当該プロセスまたはスレッドに対応するオリジナルのアフィニティ・マスク155a、155cを書き換える。
【0071】
制御プログラム101は各プロセスについて、ブロック203において作成されたオリジナルのアフィニティ・マスク155a、155cのビット・パターンを取得し、パフォーマンス・フィルタ105aのビット・パターンと論理積演算を行い、図7(A)、図7(B)に示すマスク・ビット171a、171bを計算する。そして図7(A)の場合は、オリジナルのアフィニティ・マスク155aのビット・パターンをマスク・ビット171aのビット・パターンで書き換えてアフィニティ・マスク155bを作成する。
【0072】
その結果、プロセス・スケジューラ153は当該プロセスが生成したスレッドをアフィニティ・マスク155bに基づいてスケジューリングするため、スレッドは論理CPU61または論理CPU63にだけディスパッチされ、論理CPU65、67では実行されないようになる。このときプロセス・スケジューラ153は、アフィニティ・マスク155bを有するスレッドを論理CPU61と論理CPU63の間でラウンド・ロビン方式によりスケジューリングすることができる。このようにクロック・ブーストの設定がされた論理CPU61、63だけで実行される優先プロセスを、優先実行される優先プロセスということにする。
【0073】
論理CPU61、63には、オリジナルのアフィニティ・マスク155aを備える非優先プロセスのスレッドもディスパッチされる。書き換えられたアフィニティ・マスク155bを備える優先プロセスのスレッドは、他の優先プロセスおよび非優先プロセスとの優先度レベルの上下関係に基づいて、実行可能キュー161、163から論理CPU61、63にディスパッチされる順序が決定される。しかし、論理CPU61、63は、クロック・ブーストするといずれのスレッドがディスパッチされていても論理CPU65、67よりも短時間で処理することができるので、優先プロセスの実行可能キュー161、163におけるディスパッチまでの待ち時間は短くなる。
【0074】
しかも、優先実行される優先プロセスのスレッドは、クロック・ブーストされる論理CPU61、63にだけディスパッチされるため、当該スレッドが実行されるときに実際にクロック・ブーストされる確率は高くなる。この2つの理由で論理CPU61、63だけにプロセッサ・アフィニティを有する優先プロセスは、非優先プロセスよりも短時間で処理されるようになる。
【0075】
図7(B)の場合は、オリジナルのアフィニティ・マスク155cのビット・パターンとパフォーマンス・フィルタ105aのビット・パターンを論理積演算すると、マスク・ビット・171bのようにすべてのビットが0になる。この場合は、制御プログラム101はディフォルトで設定されたアフィニティ・マスク155cを書き換えない。したがって、そのような優先プロセスは、クロック・ブーストしない論理CPU65、67にだけディスパッチされることになる。このようにクロック・ブーストの設定がされていない論理CPU65、67だけで実行される優先プロセスを、優先実行されない優先プロセスということにする。
【0076】
上記のように、優先プロセスであっても強制的にクロック・ブーストの設定がされた論理CPU61、63だけで実行しないのは、プログラムが指定した論理CPUを変更しないようにするためである。なお、当該プログラムにとっていずれの論理CPU61、63、65、67も等価であることが明らかな場合は、制御プログラム101は、パフォーマンス・フィルタ105aのビット・パターンで直接アフィニティ・マスク155cを書き換えることもできる。その場合は、オリジナルのアフィニティ・マスク155cのビット・パターンがいかなるものであっても、そのスレッドを必ずクロック・ブーストする論理CPU61、63だけにディスパッチすることができる。
【0077】
ブロック211では、制御プログラム101は、プロセス・リスト107に優先プロセスの識別子とそれに対応するアフィニティ・マスク155のビット・パターンを登録する。制御プログラム101は、オリジナルのアフィニティ・マスクと制御プログラム101により書き換えられたアフィニティ・マスクのそれぞれのビット・パターンを登録する。図8にプロセス・リスト107のデータ構造の一例を示す。図8では、制御プログラム101により書き換えられたアフィニティ・マスク155aのオリジナルのビット・パターンは省略している。
【0078】
優先プロセス1、2、3、4は、優先実行される優先プロセスのアフィニティ・マスクのビット・パターンを示す。優先プロセス1、2は、OS150がすべてのビットを1にするようにディフォルトで作成したオリジナルのアフィニティ・マスクを書き換えたビット・パターンを示し、優先プロセス3、4はプロセスを生成するプログラムが、OS150がディフォルトで作成したアフィニティ・マスクを書き換えたビット・パターンを示している。優先プロセス1、2の配下にあるスレッドは論理CPU61または論理CPU63にだけディスパッチされる。優先プロセス3の配下にあるスレッドは論理CPU61にだけディスパッチされ、優先プロセス4の配下にあるスレッドは論理CPU63にだけディスパッチされる。
【0079】
したがって、優先プロセス1、2、3、4は、常にクロック・ブーストする論理CPU61、63だけで実行される。優先プロセス11、12、13は、プロセスを生成するプログラムが、OS150がディフォルトで作成したアフィニティ・マスクを書き換えたアフィニティ・マスクのビット・パターンを示しており、優先プロセス11、12、13の配下にあるスレッドは、クロック・ブーストしない論理CPU65または論理CPU67にだけディスパッチされるため優先実行されない。
【0080】
ブロック213では、新たなプロセスが生成される。制御プログラム101はDLLインジェクションを利用して、新たに生成されるプロセスをフックする。制御プログラム101は、システム・コール関数を呼び出して、ブロック209と同じ手順で当該プロセスが優先プロセスであるか否かを判断する。優先プロセスでないと判断した場合は、プロセス・スケジューラ153は当該非優先プロセスをオリジナルのアフィニティ・マスク155a、155cに基づいてディスパッチし、ブロック213に戻ってつぎの新たなプロセスを処理する。
【0081】
ブロック215で制御プログラム101が新たなプロセスが優先プロセスであると判断した場合はブロック217に移行する。制御プログラム101は、ACPIインターフェース170を通じてCPUパッケージ11または各論理CPU61、63、65、67の温度を取得し、CPUパッケージ11の温度が所定値未満かまたはすべての論理CPU61、63、65、67の温度が所定値未満か否かを調べ、所定値未満の場合は温度条件が成立したと判断する。
【0082】
さらに、制御プログラム101はCPU使用率メータ151からクロック・ブーストの対象となっている論理CPU61および論理CPU63のCPU使用率を取得して所定値未満か否かを調べ、いずれも所定値未満の場合は使用率条件が成立したと判断する。温度条件または使用率条件のいずれかが成立しない場合は、制御プログラム101はブロック221に移行して新たに生成されたプロセスを優先プロセスとして登録し、オリジナルのアフィニティ・マスク155a、155cは書き換えない。
【0083】
スケジューラ153は当該優先プロセスに帰属するスレッドを、オリジナルのアフィニティ・マスク155a、155cに基づいてディスパッチする。この場合の優先プロセスの一例を図8の優先プロセス21、22、23として示している。このように、温度条件または使用率条件によりクロック・ブーストの設定がされた論理CPU61、63とクロック・ブーストの設定がされていない論理CPU65、67のいずれでも実行される可能性がある優先プロセス21、22、23も優先実行されない優先プロセスということにする。
【0084】
なお、温度条件または使用率条件が成立しない場合でも、プロセスを生成するプログラムが論理CPU61、63だけを指定するようにアフィニティ・マスクを書き換えた場合は、オリジナルのアフィニティ・マスクとして採用されて優先実行される優先プロセスとなるが、そのような状態は本発明のプロセス制御の範囲から外れる。プロセス・スケジューラ153は、優先プロセス21、22、23の配下にあるスレッドを論理CPU61、63、65、67のいずれかにディスパッチする。ブロック221でプロセス・リスト107への登録が終了すると制御プログラム101はブロック213に戻って新たなプロセスの生成を待つ。
【0085】
ブロック217の手順では、優先プロセスであっても、クロック・ブーストの対象となる論理CPU61、63のその時点でのCPU使用率が高い場合は優先実行されない。その理由は論理CPU61、63のCPU使用率が高い場合は、多くの優先プロセスおよび非優先プロセスまたは負荷の大きなプロセスがそこで実行されているため、新たな優先プロセスは他の論理CPU65、67も実行先に含めた方が短時間で処理できる可能性が高い場合があるからである。
【0086】
また、温度が高い場合は、論理CPU61、63が実際にクロック・ブーストする頻度が少ないと考えられ、同様に他の論理CPU65、67も実行先に含めた方が短時間で処理できる可能性が高い場合があるからである。なお、クロック・ブーストの設定がされた論理CPU61のCPU使用率が高く論理CPU63のCPU使用率が低い場合は、制御プログラム101が新たな優先プロセスに論理CPU63だけを割り当てるようにアフィニティ・マスク155を書き換えてもよい。
【0087】
ブロック217で温度条件と使用率条件のいずれも成立した場合には、ブロック219に移行してブロック209で説明した方法で制御プログラム101は当該プロセスに対するアフィニティ・マスク155を書き換える。さらに、当該プロセスをプロセス・リスト107に登録する。ブロック217〜221の手順では、新たなプロセスが生成されるたびにCPUパッケージ11の温度条件と使用率条件に基づいて優先プロセスを優先実行するか否かを制御した。
【0088】
論理CPU61、63には非優先プロセスもディスパッチされ、また、それらの負荷も時間的に変化する。本実施の形態では優先プロセスの優先度クラスおよびスレッドの優先度レベルは変更しないため、論理CPU61、63の実行可能キュー161、162に登録されるスレッドの数が多くなると論理CPU61、63のCPU使用率が大きくなって優先プロセスがディスパッチされるまでの待ち時間が長くなる可能性がある。
【0089】
この状態を解消するために図3のブロック219に続く図4のブロック301では、制御プログラム101は定期的にCPU使用率メータ151から各論理CPU61、63、65、67のCPU使用率を取得する。ブロック303では、クロック・ブーストの設定がされた論理CPU61、63のCPU使用率がいずれも所定値以上であるか否かを判断する。いずれかの論理CPUのCPU使用率が所定値未満の場合は図5のブロック401に移行し、いずれの論理CPU61、63のCPU使用率も所定値以上の場合はブロック305に移行する。なお、ブロック303のCPU使用率の閾値はブロック217のCPU使用率の閾値よりも大きくすることができる。
【0090】
ブロック305では、制御プログラム101は、パフォーマンス・フィルタ105を参照してさらにクロック・ブーストの設定が可能な論理CPUが存在するか否かを判断する。すでに全体の論理CPUの数に対するクロック・ブーストの設定を許容する論理CPUの数の割合が所定値を越えている場合は、それ以上他の論理CPUにクロック・ブーストの設定をすることができないので、図6のブロック421に移行する。
【0091】
たとえば、論理CPU65に対して追加的にクロック・ブーストの設定が可能な場合はブロック307に移行する。ブロック307では制御プログラム101はパフォーマンス・フィルタ105のビット・パターンを論理CPU65に対応するビットが1になるように追加的に書き換える。さらに書き換えたビット・パターンに基づいてACPIインターフェース170を通じて論理CPU65を追加的にP0ステートに変更する。
【0092】
ブロック309では、制御プログラム101はシステム・コール関数を呼び出して、図8のプロセス・リスト107から選択した優先プロセスのアフィニティ・マスク155のビット・パターンを書き換える。書き換えの対象として選択する優先プロセスは、優先実行される優先プロセス1、2、3、4のグループ、プログラムが指定したアフィニティの条件で優先実行されない優先プロセス11、12、13、14のグループまたは使用率条件または温度条件により優先実行されない優先プロセス21、22、23のグループのいずれかとすることができる。
【0093】
あるいは制御プログラム101は、プロセス・リスト107に登録されたすべての優先プロセスを書き換えの対象として選択することができる。制御プログラム101は、選択した優先プロセスのアフィニティ・マスク155を、図3のブロック209で行ったようにパフォーマンス・フィルタ105と、オリジナルのアフィニティ・マスク155a、155cとの論理積演算を行う方法で書き換えることができる。
【0094】
その結果、論理CPU65に対応するビットが1のオリジナルのアフィニティ・マスクを有する優先プロセス1、2のような優先プロセスは、論理CPU65でも優先実行されるようにアフィニティ・マスクが書き換えられる。オリジナルのアフィニティ・マスクが論理CPU61、63を指定していないが論理CPU65を指定していた優先プロセス11、13のような優先プロセスは、始めて優先実行されるようになる。さらに、ブロック217の使用率条件または温度条件で優先実行されない優先プロセス21、22、23も優先実行されるようになる。ブロック311では、アフィニティ・マスク155を書き換えたプロセスについてプロセス・リスト107を更新する。
【0095】
前述のようにプロセス・スケジューラ153のスケジュール制御とCPUパッケージ101のクロック・ブースト制御は非同期で行われ、クロック・ブーストの設定をしても実際にクロック・ブーストする頻度はそのときのシステムの状態により変化する。そして、クロック・ブーストする論理プロセッサの数を増加するほど、優先プロセスと非優先プロセスの差が少なくなる。クロック・ブーストする論理プロセッサの最適な数は、すべての優先プロセスの平均的な処理時間が最小になるときの数であるといえる。
【0096】
したがって、クロック・ブーストした論理プロセッサのCPU使用率が低下したような場合は、クロック・ブーストする論理プロセッサの数を減らして、優先プロセスがディスパッチされる論理プロセッサがクロック・ブーストする頻度を増大させたほうが効果的である。ブロック313では、制御プログラム101はクロック・ブーストの設定をした論理プロセッサのCPU使用率が所定値よりも低下したときには、ブロック307に戻って、Pステートを変更してクロック・ブーストする論理プロセッサの数を減らすことができる。そしてブロック309で図3のブロック209の手順に基づいてアフィニティ・マスク155を書き換えブロック311でプロセス・リスト107を更新する。ブロック313でCPU使用率が所定値以上の場合は図3のブロック213に戻る。
【0097】
図3のブロック217で論理CPU61、63のCPU使用率が一旦は所定値を越えても、その後のプロセスの状態が変化して、それらのCPU使用率が下がる可能性がある。一方、ブロック217では、温度条件または使用率条件により優先実行されない優先プロセスが発生している。論理CPU61、63に余裕がでた場合には、優先実行されない状態の優先プロセスをいち早く優先実行される状態に移行させることが望ましい。
【0098】
ブロック303に続く図5のブロック401では、制御プログラム101はクロック・ブーストの対象となる論理CPU61、63のCPU使用率がいずれも所定値未満であるか否かを判断する。ブロック401の所定値はブロック303の所定値よりも小さい。いずれかの論理CPUのCPU使用率が所定値以上の場合は図3のブロック213に戻る。いずれの論理CPUもCPU使用率が所定値未満の場合は、ブロック403に移行する。
【0099】
ブロック403では制御プログラム101はプロセス・リスト107を参照し、クロック・ブーストの対象となる論理CPU61、63とともに対象外の論理CPU65、67も割り当てられていることで優先実行されない優先プロセス21、23、25があるか否かを判断する。なお、クロック・ブーストの対象とならない論理CPU61、63だけが割り当てられていることで優先実行されない論理プロセス11、12、13は、プロセスを生成するプログラムが論理CPU61、63での実行を指定していないので移行の対象から除外する。
【0100】
対象となる優先実行されない優先プロセスがない場合はブロック213に戻る。対象となる優先プロセスがある場合は、ブロック405に移行して制御プログラム101は図3のブロック209で採用したオリジナルのアフィニティ・マスク155aとパフォーマンス・フィルタ105の論理積演算を行う方法を用いて、オリジナルのアフィニティ・マスク155を書き換える。ブロック427では制御プログラム101は、アフィニティ・マスク155を書き換えたプロセスについて、プロセス・リスト107を更新する。
【0101】
クロック・ブーストの設定がされた論理CPU61、63のCPU使用率が上昇したときに、追加的にクロック・ブーストの設定ができる論理CPUが存在しない場合でも、クロック・ブーストの設定がされていない論理CPU65、67のCPU使用率が低い場合は、プロセッサ・アフィニティを緩和して優先プロセスを優先実行しないようにした方が早く処理できる場合がある。図4のブロック305に続く図6のブロック421では、制御プログラム101はクロック・ブーストの対象でない論理CPU65、67のCPU使用率が所定値未満であるかどうかを調べる。
【0102】
論理CPU65、67のいずれかのCPU使用率が所定値以上の場合は、クロック・ブーストの対象となる論理CPU61、63の負荷を他の論理CPU65、67に分散することはできないと判断して図3のブロック213に戻る。論理CPU65、67の両方のCPU使用率が所定値未満の場合はブロック423に移行して、制御プログラム101はプロセス・リスト107を参照し、優先実行されている優先プロセスの中から所定数のプロセスを抽出して、オリジナルのアフィニティ・マスクのビット・パターンに戻す。
【0103】
あるいは当該プロセスにとってすべての論理CPU61、63、65、67が等価であることが明らかな場合は、制御プログラム101はそのような優先プロセスが論理CPU61、63、65、67に分散してディスパッチされるように、アフィニティ・マスク155を図7(A)のオリジナルのアフィニティ・マスク155aのように書き換える。あるいは制御プログラム101は、それらのプロセスが論理CPU65、67だけにディスパッチされるようにアフィニティ・マスク155を書き換える。ブロック425では、制御プログラム101はアフィニティ・マスク155を書き換えた優先プロセスについてプロセス・リスト107を更新し、ブロック213に戻る。
【0104】
これまで、優先プロセスは4つのグループのいずれかに属していればすべて同等に扱ってきた。優先プロセスの中には他の優先プロセスより短時間で処理したいものがある。たとえば、ウインドウを有するプロセスの中でもフォアグラウンドのウインドウについては、ユーザはより短時間で応答を得ることを期待する。また、ACPIインターフェースは論理CPUを、同じPステートであっても異なる動作周波数に設定することができる。この特質を利用すれば、優先プロセスの中でより短時間で処理する必要のある最優先プロセスがより高い動作周波数の論理CPUだけで動作するようにアフィニティ・マスクを書き換えることができる。
【0105】
すべての優先プロセスの平均的な処理時間を最短にするために、最適なクロック・ブーストの設定をする論理CPUの数は、システムの動作状態で常に変化する。図4ではCPU使用率に基づいてダイナミックにPステートおよびアフィニティ・マスクを変更する方法を説明したが、論理CPUの数を制御するために、各論理CPUだけにディスパッチされるダミー・プロセスを生成してその処理時間を測定する方法もある。
【0106】
たとえば、各論理CPU61、63、65、67でそれぞれ中間的な優先度レベルのダミー・プロセスを実行させ、その処理時間に基づいて実際のクロック・ブーストの状況を把握して、Pステートを変更することもできる。あるいは、ACPIインターフェース170から直接各論理CPUがクロック・ブーストした頻度またはクロック・ブーストしている時間を取得してPステートを変更することもできる。さらに、ACPIインターフェース170測定した各論理CPUの温度や平均消費電力に基づいて制御プログラム101がダイナミックにPステートの変更をすることも可能である。
【0107】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【0108】
10…コンピュータ
11…CPUパッケージ
100…優先プロセス処理システム
101…制御プログラム
150…オペレーティング・システム

【特許請求の範囲】
【請求項1】
所定の条件に基づいて一時的に動作周波数を上昇させるクロック・ブーストが可能な複数の論理プロセッサを備えるコンピュータに、
前記複数の論理プロセッサのいずれかに前記クロック・ブーストの設定をするステップと、
前記コンピュータに生成されたプロセスの中から短時間で処理する優先プロセスを選択するステップと、
前記優先プロセスを前記クロック・ブーストの設定がされた論理プロセッサだけにディスパッチして優先実行するステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項2】
前記優先実行するステップが、前記優先プロセスのアフィニティ・マスクを書き換えるステップを含む請求項1に記載のコンピュータ・プログラム。
【請求項3】
前記アフィニティ・マスクを書き換えるステップが、オリジナルのアフィニティ・マスクと前記複数の論理プロセッサのそれぞれに対する前記クロック・ブーストの設定状態を示すマスク・ビットを論理積演算するステップを含む請求項2に記載のコンピュータ・プログラム。
【請求項4】
前記アフィニティ・マスクを書き換えるステップが、前記クロック・ブーストの設定がされた論理プロセッサだけを指定するように書き換えるステップを含む請求項2または請求項3に記載のコンピュータ・プログラム。
【請求項5】
前記新たに生成されるプロセスが優先プロセスか否かを判断するステップと、
前記クロック・ブーストの設定がされた論理プロセッサの使用率を取得するステップとを有し、
前記アフィニティ・マスクを書き換えるステップを、前記新たに生成される優先プロセスについて、前記使用率が所定値未満のときにだけ実行する請求項2から請求項5のいずれかに記載のコンピュータ・プログラム。
【請求項6】
前記論理プロセッサの温度を取得するステップを有し、
前記アフィニティ・マスクを書き換えるステップをさらに前記温度が所定値未満のときにだけ実行する請求項5に記載のコンピュータ・プログラム。
【請求項7】
前記クロック・ブーストの設定がされた論理プロセッサの使用率を取得するステップと、
前記クロック・ブーストが未設定の論理プロセッサが存在するか否かを判断するステップと、
前記クロック・ブーストが未設定の論理プロセッサが存在しかつ前記クロック・ブーストの設定がされた論理プロセッサの使用率が所定値以上のときに、前記未設定の論理プロセッサに前記クロック・ブーストの追加的な設定をするステップと
を有する請求項2から請求項6のいずれかに記載のコンピュータ・プログラム。
【請求項8】
アフィニティ・マスクが書き換えられた前記優先プロセスが前記クロック・ブーストの設定がされた論理プロセッサだけで実行されるように前記優先プロセスのアフィニティ・マスクを書き換えるステップを有する請求項7に記載のコンピュータ・プログラム。
【請求項9】
前記クロック・ブーストの設定がされた論理プロセッサの使用率を取得するステップと、
前記クロック・ブーストの設定がされた論理プロセッサの使用率が所定値未満のときに前記クロック・ブーストが未設定の論理プロセッサにもディスパッチされて優先実行されない優先プロセスが存在するか否かを判断するステップと、
前記優先実行されない優先プロセスが優先実行されるように前記アフィニティ・マスクを書き換えるステップと
を有する請求項2から請求項8のいずれかに記載のコンピュータ・プログラム。
【請求項10】
前記クロック・ブーストの設定がされた論理プロセッサと未設定の論理プロセッサの使用率を取得するステップと、
前記クロック・ブーストの設定がされた論理プロセッサの使用率が所定値以上でかつ前記クロック・ブーストが未設定の論理プロセッサの使用率が所定値未満のときに前記優先プロセスが前記クロック・ブーストが未設定の論理プロセッサでも実行されるように前記アフィニティ・マスクを書き換えるステップと
を有する請求項2から請求項9のいずれかに記載のコンピュータ・プログラム。
【請求項11】
前記優先プロセスが、ウインドウを生成するプロセスである請求項1から請求項10のいずれかに記載のコンピュータ・プログラム。
【請求項12】
前記優先プロセスを、スレッドの優先度に基づいて決定する請求項1から請求項11のいずれかに記載のコンピュータ・プログラム。
【請求項13】
前記優先プロセスが、ディスクI/O処理の優先度に基づいて決定される請求項1から請求項12のいずれかに記載のコンピュータ・プログラム。
【請求項14】
マルチ・プロセッサ・システムを搭載するコンピュータであって、
所定の条件に基づいて一時的に動作周波数を上昇させるクロック・ブーストが可能な複数の論理プロセッサと、
前記複数の論理プロセッサのいずれかが前記所定の条件が成立したときにクロック・ブーストをするように設定するインターフェース手段と、
所定のプロセスを前記クロック・ブーストの設定がされた論理プロセッサだけでスケジューリングするスケジュール手段と
を有するコンピュータ。
【請求項15】
前記所定の条件が、前記論理CPUの温度が基準値未満でかつ消費電力が熱設計消費電力を越えている範囲に設定されている請求項14に記載のコンピュータ。
【請求項16】
前記複数の論理プロセッサが1つのパッケージに複数のプロセッサ・コアが実装されたマルチ・コア・プロセッサで構成されている請求項14または請求項15に記載のコンピュータ。
【請求項17】
所定の条件に基づいて動作周波数を上昇させることが可能な複数の論理プロセッサを備えるコンピュータにおいて、プロセスの実行を制御する方法であって、
前記所定の条件が成立したときに動作周波数が上昇するように前記複数の論理プロセッサのいずれかを設定するステップと、
複数のプロセスを生成するステップと、
前記複数のプロセスの中から短時間で処理する優先プロセスを選択するステップと、
前記優先プロセスを前記動作周波数が上昇するように設定された論理プロセッサだけにディスパッチするステップと
を有する制御方法。
【請求項18】
前記ディスパッチするステップが、前記プロセスを生成したプログラムが前記プロセスに対して指定した範囲の前記論理プロセッサにディスパッチするステップを含む請求項17に記載の制御方法。
【請求項19】
新たに生成される優先プロセスを認識するステップと、
前記新たに生成される優先プロセスを前記動作周波数が上昇するように設定された論理プロセッサの使用率が所定値未満のときに限り前記動作周波数が上昇するように設定された論理プロセッサだけにディスパッチするステップと
を有する請求項17または請求項8に記載の制御方法。
【請求項20】
前記動作周波数が上昇するように設定された論理プロセッサの使用率を取得するステップと、
前記動作周波数が上昇するように設定されていない論理プロセッサが存在するか否かを判断するステップと、
前記動作周波数が上昇するように設定されていない論理プロセッサが存在しかつ前記動作周波数が上昇するように設定された論理プロセッサの使用率が所定値以上のときに、前記設定されていない論理プロセッサを前記所定の条件が成立したときに動作周波数が上昇するように設定するステップと
を有する請求項17から請求項19のいずれかに記載の制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2012−48545(P2012−48545A)
【公開日】平成24年3月8日(2012.3.8)
【国際特許分類】
【出願番号】特願2010−190752(P2010−190752)
【出願日】平成22年8月27日(2010.8.27)
【出願人】(505205731)レノボ・シンガポール・プライベート・リミテッド (292)
【復代理人】
【識別番号】100106699
【弁理士】
【氏名又は名称】渡部 弘道
【復代理人】
【識別番号】100077584
【弁理士】
【氏名又は名称】守谷 一雄