(57)【特許請求の範囲】
【請求項１】
物理プロセッサと、前記物理プロセッサ上で稼動する２つの論理プロセッサと、ＯＳが配置されたメモリとを有する計算機における論理プロセッサのプロセッサ使用量の算出方法であって、
前記物理プロセッサは、Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ（以降ＳＭＴ）プロセッサであり、
前記論理プロセッサは、何れか一方の論理プロセッサがアクティブなシングルタスクモードと、二つの論理プロセッサがアクティブなマルチタスクモードとの、２つの動作モードを備え、
前記ＯＳは、プロセッサ使用率モニタ手段を有し、
前記プロセッサ使用率モニタ手段は、
前記論理プロセッサのプロセッサ使用量の１つの算出区間を、算出対象論理プロセッサが開始から終了まで通常動作状態にあり、その間に休止状態への遷移を含まない、任意の長さの区間とし、
前記算出区間を前記算出対象論理プロセッサのシングルタスクモード実行時間とマルチタスクモード実行時間とに分割し、
前記算出対象論理プロセッサのシングルタスクモード実行時間と前記算出対象論理プロセッサのマルチタスクモード実行時間とを算出し、
前記マルチタスクモード実行時間に既定のマルチタスクモードのプロセッサ資源割り当て比率を乗じた値と、前記シングルタスクモード実行時間とを加算し、
前記加算値を、前記算出区間内の前記算出対象論理プロセッサのプロセッサ使用量とすることを特徴とする算出方法。
【請求項２】
請求項１記載の算出方法であって、
前記プロセッサ使用率モニタ手段は、
前記算出区間の経過時間、及び前記算出対象論理プロセッサと同じＳＭＴプロセッサに属する相手論理プロセッサの前記算出区間内の累積休止時間をそれぞれ求め、
前記累積休止時間を前記算出対象論理プロセッサのシングルタスクモード実行時間と求め、
前記経過時間から前記シングルタスクモード実行時間を減算した時間を前記算出対象論理プロセッサのマルチタスクモード実行時間とすることを特徴とする算出方法。
【請求項３】
請求項１記載の算出方法であって、
前記算出区間の経過時間及び前記算出区間における前記算出対象論理プロセッサと同じＳＭＴプロセッサに属する相手論理プロセッサの累積休止時間を、論理プロセッサごとに参照可能なサイクルカウンタ、及び前記算出対象論理プロセッサと前記相手論理プロセッサの２つの論理プロセッサの間の共有データのみを用いて算出することを特徴とする算出方法。
【請求項４】
請求項１記載の算出方法であって、
前記算出区間の経過時間及び前記算出区間内における前記算出対象論理プロセッサと同じＳＭＴプロセッサに属する相手論理プロセッサの累積休止時間の算出処理を、オンラインでかつ、前記算出対象論理プロセッサと前記相手論理プロセッサの間で非同期に行うことを特徴とする算出方法。
【請求項５】
請求項２記載の算出方法であって、
前記プロセッサ使用率モニタ手段は、前記算出対象論理プロセッサの前記相手論理プロセッサの前記算出区間内の累積休止時間を求めるに際し、
ＳＭＴプロセッサのそれぞれの論理プロセッサに、該論理プロセッサの休止動作開始から休止動作終了までの経過時間を累積した累積休止時間、及び最新の休止開始時刻と最新の休止終了時刻を保持し、
これらのデータを前記２つの論理プロセッサの間の共有データとし、
前記算出区間ごとに該開始時刻と該終了時刻を求め、算出を完了するまで保持し、
前記相手論理プロセッサの累積休止時間の前記算出区間の終了時と開始時の差分を求め、
プロセッサ使用量算出開始時に、離散データである前記差分の過剰分を、前記相手論理プロセッサの最新休止開始時刻と最新休止終了時刻を参照して、
最新休止開始時刻が最新休止終了時刻以上であるならば、前記相手論理プロセッサを休止中とみなして最新休止開始時刻と前記算出開始時刻の差分と求め、
最新休止開始時刻が最新休止終了時刻未満であるならば、前記相手論理プロセッサを通常動作中とみなしてゼロと求め、
プロセッサ使用量算出終了時に、離散データである前記差分の不足分を、前記相手論理プロセッサの最新休止開始時刻と最新休止終了時刻を参照して、
最新休止開始時刻が最新休止終了時刻以上であるならば、前記相手論理プロセッサを休止中とみなして、前記算出終了時刻と最新休止開始時刻の差分と求め、
最新休止開始時刻が最新休止終了時刻未満であるならば、前記相手論理プロセッサを通常動作中とみなしてゼロと求め、
前記差分から前記過剰分を減算しそれから前記不足分を加算することで、時刻の大小関
係を用いて、前記算出区間内の前記相手論理プロセッサの累積休止時間をオンラインでかつ非同期に求める算出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的な計算機システムに係わり、特にＳｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ−ｔｈｒｅａｄｉｎｇ（以降ＳＭＴ）プロセッサ、及びＳＭＴプロセッサ環境におけるプロセッサ使用率を算出する方法に関する。
【背景技術】
【０００２】
プロセッサの性能向上、及びプロセッサ資源の利用効率の向上の手法として非常に重要なものに、プロセッサにおける命令実行の並列化がある。従来からスーパースカラプロセッサ技術による１つのスレッド内の命令実行の並列性の向上が進められてきたが、近年はこれに加えて、１つのプロセッサ上に複数のスレッドを実行させるマルチスレッディング技術によるスレッドレベルの並列性の向上が進められている。
【０００３】
マルチスレッディング技術の中でプロセッサへの搭載が普及しているものに、同時マルチスレッディング（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ−ｔｈｒｅａｄｉｎｇ、以降ＳＭＴ）がある。ＳＭＴは、１つのプロセッサを複数のスレッドで同時並行に使用することにより、論理的に複数のプロセッサとして稼動させる技術である。ＳＭＴでは、複数のスレッドが同時並行に実行することができるが、このスレッドを、システムに論理的なプロセッサが複数あると考え、論理プロセッサと呼ぶ。
【０００４】
ＳＭＴでは、複数の論理プロセッサが同時に有効であり、１つのプロセッサの使用可能な資源をとり合う。ＳＭＴは、複数の論理プロセッサによるこのプロセッサ資源の動的な共有により、複数のソフトウェアスレッドの合計のスループットを向上させることができる。
【０００５】
また、ＳＭＴは、複数のソフトウェアスレッドの性能だけでなく、１つのソフトウェアスレッドの性能に関しても、シングルスレッドのプロセッサと同等を保証することができる。
【０００６】
論理プロセッサ０と論理プロセッサ１の２つの論理プロセッサを備えたＳＭＴプロセッサを考える。このＳＭＴプロセッサでは、１つの論理プロセッサのみがアクティブな場合と２つの論理プロセッサ両方がアクティブな場合がある。ＳＭＴプロセッサは、それぞれの場合に対して、シングルタスク（ＳＴ）モードとマルチタスク（ＭＴ）モードという２つの動作モードを提供する。ＳＴモードは、論理プロセッサ０のみがアクティブなＳＴ０モードと論理プロセッサ１のみがアクティブなＳＴ１モードに分けられる。
【０００７】
ＳＴ０モードとＳＴ１モードでは、１つの論理プロセッサにプロセッサ資源の全てが割り当てられる。ＳＭＴプロセッサは、ＳＴ０モードまたはＳＴ１モードで動作するときは、シングルスレッドプロセッサと同等の性能を保証する。一方ＭＴモードでは、２つの論理プロセッサでプロセッサ資源を共有する。ＭＴモードでは、１つの論理プロセッサ当たりの性能は、その上で動作させるソフトウェアの種類にもよるが、シングルスレッドプロセッサの約６０％、２つの論理プロセッサ合わせて約１２０％を実現する。
【０００８】
論理プロセッサが休止命令を実行すると、ＳＭＴプロセッサはどちらの論理プロセッサで休止命令が実行されたかに応じてＭＴモードからＳＴ０モードあるいはＳＴ１モードに遷移する。残りのアクティブな論理プロセッサも休止命令を実行すると、ＳＭＴプロセッサは省電力モードに遷移する。ＳＴ０モードあるいはＳＴ１モードのときに、外部割り込みなどの休止解除要求が休止していた論理プロセッサに発生すると、ＳＭＴプロセッサはＭＴモードに遷移する。
【０００９】
プロセッサ使用率の測定は、計算機システムの稼働状況をリアルタイムで監視したり、負荷に応じてプロセッサ資源の割り当てを制御したりする為に必要である。
【００１０】
シングルスレッディングのプロセッサでは、プロセッサごとのプロセッサ使用率の測定は比較的単純である。時間をそのまま使うことができる。プロセッサの稼動時間を経過時間で割れば、そのプロセッサのプロセッサ使用率となる。複数のソフトウェアのプロセスあるいはスレッドが１つのプロセッサ上で実行されていても、それらは同時実行ではなく順次実行であるため、ソフトウェアのプロセスあるいはスレッドのプロセッサ使用率も同様に単純に求めることができる。
【００１１】
これに対してＳＭＴプロセッサでは、複数の論理プロセッサが１つのプロセッサの中で同時に実行するので、単純な時間の測定値だけでは、論理プロセッサごとのプロセッサ使用量は正しく求められない。それゆえ、ＳＭＴプロセッサ環境では、シングルスレッディングのプロセッサとは異なる、ＳＭＴを考慮した論理プロセッサごとのプロセッサ使用量、及びＳＭＴプロセッサとしてのプロセッサ使用量を算出する方法が必要である。
【００１２】
特許文献１では、ＳＭＴプロセッサ内の論理プロセッサごとのプロセッサ使用量を測定する方法が記載されている。また、特許文献２では、ＳＭＴプロセッサ環境における、ＳＭＴプロセッサ資源全体に対するプロセッサ使用量を算出する方法が記載されている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】ＵＳ７６５７８９３
【特許文献２】ＵＳ７５５５７５３
【発明の概要】
【発明が解決しようとする課題】
【００１４】
２つの論理プロセッサを有するＳＭＴプロセッサにおいて、論理プロセッサごとのプロセッサ使用量は、シングルスレッドプロセッサと同じように考えれば、ある標本区間における論理プロセッサの稼働時間を標本区間の経過時間で割れば求まる。この考え方では、論理プロセッサ０が標本区間中に稼動し続け、論理プロセッサ１がその間休止状態であった場合、論理プロセッサ０及びＳＭＴプロセッサのプロセッサ使用率は５０％になり、ＳＭＴプロセッサは処理能力に残り５０%の余裕を残していることになる。しかし、ＳＭＴプロセッサは、このときは、シングルタスクモードで動作するため、論理プロセッサ０及びＳＭＴプロセッサのプロセッサ使用率は１００％である。この考え方でプロセッサ使用率を算出した場合、ＳＭＴプロセッサでは処理能力の余力を過大に見積もってしまうことになる。
【００１５】
特許文献１の従来の方法では、ＳＭＴプロセッサのそれぞれの論理プロセッサの動作状態をプロセッササイクルごとに周期的に検出して、その間のプロセッササイクルを、命令をディスパッチした論理プロセッサに配分している。この方法は、専用のハードウェア機構で実現することを想定しているが、特別なハードウェア機構を必要とせず、ソフトウェアで実現するには、この方法には次のような課題がある。ソフトウェアは、論理プロセッサの動作と独立に動作させることはできないため、ソフトウェアで実現するには、それぞれの論理プロセッサに周期的に割り込み、かつ複数の論理プロセッサの間で同期化する必要がある。周期を短くすると、正確性は上がるが、割り込み及び同期化のオーバヘッドも増えてしまう。周期を長くすると、割り込み及び同期化のオーバヘッドは減るが、正確性も下がってしまう。ソフトウェアでＳＭＴプロセッサの論理プロセッサごとのプロセッサ使用量を算出するには別の方法が必要である。
【００１６】
特許文献２の従来の方法では、それぞれ求めた論理プロセッサごとのＳＭＴプロセッサ使用率と、論理プロセッサ上で動作するオペレーティングシステムのプロセスごとの論理プロセッサ使用率を乗じて、オペレーティングシステムのプロセスごとＳＭＴプロセッサ使用率を求める方法が述べられている。ところが、この方法では、論理プロセッサごとのＳＭＴプロセッサ使用率は、論理プロセッサのレジスタを参照して取得するのみであり、具体的な算出方法は述べられていない。
【００１７】
現在普及しているＳＭＴプロセッサは、２つの論理プロセッサを備えたものが多くを占めており、しかもこれらのＳＭＴプロセッサは、ＳＭＴを考慮したプロセッサ使用量を算出する為の専用のハードウェア機構を有していない。これを考慮すると、方式がＳＭＴプロセッサあたりの論理プロセッサ数を２つに限定するものであったとしても、ソフトウェアによってＳＭＴプロセッサにおける論理プロセッサごとのプロセッサ使用量を算出することができれば、非常に有用である。
【００１８】
本発明の目的は、２つの論理プロセッサを有し、シングルタスクモードとマルチタスクモードの２つの動作モードを備えたＳＭＴプロセッサにおいて、専用のハードウェア機構を必要とせずに、論理プロセッサ、オペレーティングシステムのプロセス、及びＳＭＴプロセッサそれぞれに関して、任意の標本区間かつ任意の区分で、ＳＭＴの動作モードを考慮したプロセッサ使用量及びプロセッサ使用率を、オンラインかつ非同期な方式で算出することである。
【課題を解決するための手段】
【００１９】
本発明は、２つの論理プロセッサを有し、シングルタスク（ＳＴ）モードとマルチタスク（ＭＴ）モードの２つの動作モードを備えたＳＭＴプロセッサにおいて、論理プロセッサ、オペレーティングシステムのプロセス、及びＳＭＴプロセッサそれぞれに関して、任意の標本区間かつ任意の区分で、ＳＭＴの動作モードを考慮したプロセッサ使用量とプロセッサ使用率を、オンラインでかつ非同期な方式で算出する方法である。
【００２０】
本発明では、論理プロセッサのプロセッサ使用量の１つの算出区間を、算出対象論理プロセッサが開始から終了まで通常動作状態にあり、その間に休止状態への遷移を含まない、任意の長さの区間とする。この算出区間を、ＳＴモード実行時間とＭＴモード実行時間に分割する。
【００２１】
そして、ＭＴモード実行時間に既定のＭＴモードのプロセッサ資源割り当て比率を乗じた値とＳＴモード実行時間の和を、算出区間内の論理プロセッサのプロセッサ使用量と求める。
【００２２】
算出区間の経過時間、ＳＴモード実行時間、及びＭＴモード実行時間はそれぞれ次のように求める。
【００２３】
経過時間、及び算出対象論理プロセッサと同じＳＭＴプロセッサに属する相手論理プロセッサの算出区間内の累積休止時間をそれぞれ求める。そして、ＳＭＴプロセッサの動作モードを考慮し、相手論理プロセッサの累積休止時間をそのままＳＴモード実行時間と求め、経過時間からＳＴモード実行時間を減算した時間をＭＴモード実行時間と求める
前述の相手論理プロセッサの算出区間内の累積休止時間の算出方法は、時刻の大小関係を利用して、以下のように求める。
【００２４】
ＳＭＴプロセッサのそれぞれの論理プロセッサは、該論理プロセッサの休止動作開始から休止動作終了までの経過時間を累積した累積休止時間、及び最新の休止開始時刻と最新の休止終了時刻を保持し、前記２つの論理プロセッサの間の共有データとする。
【００２５】
算出対象論理プロセッサは、算出区間の開始時刻と終了時刻を求め、算出を完了するまで保持する。
【００２６】
測定対象論理プロセッサは、前記相手論理プロセッサの累積休止時間の前記算出区間の終了時と開始時の差分を求める。
【００２７】
プロセッサ使用量算出開始時に、離散データである累積休止時間の差分の過剰分を、前記相手論理プロセッサの最新休止開始時刻と最新休止終了時刻を参照して、
最新休止開始時刻が最新休止終了時刻以上であるならば、前記相手論理プロセッサを休止中とみなして最新休止開始時刻と前記算出開始時刻の差分と求め、最新休止開始時刻が最新休止終了時刻未満であるならば、前記相手論理プロセッサを通常動作中とみなしてゼロと求める。
【００２８】
プロセッサ使用量算出終了時に、離散データである累積休止時間の差分の不足分を、前記相手論理プロセッサの最新休止開始時刻と最新休止終了時刻を参照して、
最新休止開始時刻が最新休止終了時刻以上であるならば、前記相手論理プロセッサを休止中とみなして、前記算出終了時刻と最新休止開始時刻の差分と求め、最新休止開始時刻が最新休止終了時刻未満であるならば、前記相手論理プロセッサを通常動作中とみなしてゼロと求める。
【００２９】
そして、累積休止時間の差分から過剰分を減算しそれから不足分を加算することで、算出区間内の相手論理プロセッサの累積休止時間を求める。
【発明の効果】
【００３０】
本発明の方法を用いることにより、２つの論理プロセッサを備えたＳＭＴプロセッサにおいて、専用のハードウェア機構を必要とすることなく、ＳＭＴプロセッサの動作モード、シングルタスクモードとマルチタスクモード、及びその遷移を考慮した、論理プロセッサごとのプロセッサ使用率及びＳＭＴプロセッサのプロセッサ使用率を求めることができる。本発明の方法は、オンラインで非同期、かつ計算量が少ないことを特徴とする。
【００３１】
また、本発明の累積データの補正処理は、アルゴリズムによる使用量及び使用率の算出に幅広く応用可能である。
【図面の簡単な説明】
【００３２】
【図１】本発明を適用した計算機システムの概要を示す構成図。
【図２】ＳＭＴプロセッサの動作モードと、動作モードごとの論理プロセッサへの物理プロセッサ資源の割り当て比率を示した概念図。
【図３】ＳＭＴプロセッサの動作モードの遷移図。
【図４】従来技術におけるＳＭＴ無効時のプロセッサ使用率モニタの構成図。
【図５】従来技術におけるＳＭＴ無効時の物理プロセッサ０のプロセッサ使用量とプロセッサ使用率算出処理のフローチャート。
【図６】ＳＭＴプロセッサにおける論理プロセッサの動作を示した概念図。
【図７】本実施形態におけるプロセッサ使用率モニタの構成図。
【図８】本実施形態における、物理プロセッサ０がＳＭＴ有効であるときの論理プロセッサ０と論理プロセッサ１の動作を時系列で示した概念図。
【図９】論理プロセッサ１の累積休止時間の増加を時系列で示したグラフ。
【図１０】論理プロセッサ１の累積休止時間を、論理プロセッサ１が一定の時間間隔で更新していく方法の概念図。
【図１１】論理プロセッサ１が休止を終了するときのみ累積休止時間を更新する方法
【図１２】論理プロセッサ１が休止を終了するときのみ累積休止時間を更新し、更に、論理プロセッサ１の休止開始時刻と休止終了時刻を、論理プロセッサ０が参照可能なように記録する方法の概念図
【図１３】累積休止時間の過剰分と不足分の有無と論理プロセッサ０と論理プロセッサ１のイベント時刻の関係の概念図
【図１４】論理プロセッサの累積休止時間更新処理のフローチャート
【図１５】論理プロセッサの累積プロセッサ使用量更新処理のフローチャート
【図１６】論理プロセッサのプロセッサ使用率算出処理のフローチャート
【発明を実施するための形態】
【００３３】
本発明を適用した一実現形態を、図面を用いて詳細に説明する。
【００３４】
図１は本発明を適用した計算機システムの概要を示す構成図である。計算機００１は、物理プロセッサ０（００２ａ）と物理プロセッサ１（００２ｂ）、メモリ００６、１つ以上のＩ／Ｏデバイス００７を有する。
【００３５】
物理プロセッサ０（００２ａ）と物理プロセッサ１（００２ｂ）は、１つの物理プロセッサを２つのスレッドで同時並行に使用して論理的に２つのプロセッサとして稼動させる、Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ  Ｔｈｒｅａｄｉｎｇ（以降ＳＭＴ）機能を有する。オペレーティングシステム１００の視点からは、各々のスレッドは１つの論理プロセッサとして見える。したがって、本実施形態においては、物理プロセッサ０（００２ａ）は論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）として見え、物理プロセッサ１（００２ｂ）は論理プロセッサ２（００３ｃ）と論理プロセッサ３（００３ｄ）として見える。
【００３６】
論理プロセッサ０（００３ａ）、１（００３ｂ）、２（００３ｃ）、及び３（００３ｄ）はそれぞれサイクルカウンタ００４ａ、００４ｂ、００４ｃ、及び００４ｄと、タイマ００５ａ、００５ｂ、００５ｃ、及び００５ｄを有する。ここで示した機能以外に、物理プロセッサ０（００２ａ）と物理プロセッサ１（００２ｂ）はそれぞれ複数の処理機構と複数のレベルのキャッシュ、及び他の構成要素を備える場合があるが、本発明ではその詳細は問わない。また、本発明の効果を明確化するために、本実施形態においては、論理プロセッサ０（００３ａ）、１（００３ｂ）、２（００３ｃ）、及び３（００３ｄ）は共にＳＭＴを考慮した特別なカウンタは持たないとする。
【００３７】
メモリ００６は、プログラムとデータの為の揮発性領域として使用する。
【００３８】
Ｉ／Ｏデバイス００７は、ディスクドライブを動かすディスクコントローラや、ネットワークを通して外部の計算機システムと接続する為のネットワークインタフェースを含む。本実施形態においては、Ｉ／Ｏデバイス００７の詳細は問わない。
【００３９】
ＳＭＴ機能を有効にした物理プロセッサ（以降、ＳＭＴプロセッサと略記）の特性を説明する。ＳＭＴプロセッサ上では２つの論理プロセッサが同時に有効であり、１つの物理プロセッサの使用可能な資源を取り合う。ＳＭＴプロセッサは、複数の論理プロセッサによるこの物理プロセッサ資源の動的な共有により、複数のプロセスの合計のスループットを向上させることができる。また、ＳＭＴプロセッサでは、複数のプロセスの合計の性能だけでなく、１つのプロセスの性能についても、シングルスレッドの物理プロセッサと同等を保証することができる。
【００４０】
ＳＭＴプロセッサは、この特性を動作モードの動的な切り替えで実現する。図２は、ＳＭＴプロセッサの動作モードと、動作モードごとの論理プロセッサへの物理プロセッサ資源の割り当て比率を示した概念図である。図３は、ＳＭＴプロセッサの動作モードの遷移図である。物理プロセッサ０（００２ａ）と論理プロセッサ０（００３ａ）、１（００３ｂ）を例に取り上げる。
【００４１】
まず、ＳＭＴプロセッサの動作モードを説明する。物理プロセッサ０（００２ａ）では、１つの論理プロセッサのみがアクティブな場合と２つの論理プロセッサ両方がアクティブな場合がある。物理プロセッサ０（００２ａ）は、それぞれの場合に対してシングルタスク（ＳＴ）モードとマルチタスク（ＭＴ）モード００８ａという２つの動作モードを提供する。物理プロセッサ０（００２ａ）の両方の論理プロセッサがアクティブではないときは、物理プロセッサ０（００２ａ）は省電力モード００８ｄに位置する。物理プロセッサ０（００２ａ）のＳＴモードは、論理プロセッサ０（００３ａ）のみがアクティブなＳＴ０モード００８ｂと、論理プロセッサ１（００３ｂ）のみがアクティブなＳＴ１モード００８ｃに分けられる。
【００４２】
ＳＴモードでは、１つの論理プロセッサに物理プロセッサ０（００２ａ）のプロセッサ資源の全てが割り当てられる。つまり、論理プロセッサあたりの物理プロセッサ資源の割り当て比率は１００％である。これにより、ＳＴモード動作時は、シングルスレッドの物理プロセッサと同等の性能を保証する。
【００４３】
ＭＴモード００８ａでは、論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）の２つの論理プロセッサで物理プロセッサ０（００２ａ）の資源を共有する。ＭＴモード００８ａでは、物理プロセッサ０（００２ａ）は、未使用のプロセッサ資源を２つの論理プロセッサで埋めるように、プロセッサ資源を効率的に使用するが、片側の論理プロセッサのみがプロセッサ資源を使用してもう一方の論理プロセッサの実行が止まってしまうことのないよう、両方の論理プロセッサが資源を要求するときは公平に等分する。ここから、ＭＴモード００８ａ動作時の論理プロセッサ当たりの物理プロセッサ資源の割り当て比率は５０％と考えられる。一方、ＭＴモード００８ａ動作時の１つの論理プロセッサ当たりの性能は、その上で動作させるアプリケーションの種類にも依るが、一般に、シングルスレッドの物理プロセッサの約６０％、２つの論理プロセッサ合わせて約１２０％を実現する。これより、ＭＴモード００８ａ動作時の論理プロセッサ当たりの物理プロセッサ資源の割り当て比率は６０％とも考えられる。割り当て比率として、どれを採用するかは、目的に応じて使い分けてもよい。
【００４４】
次に、ＳＭＴプロセッサの動作モードの状態遷移を説明する。論理プロセッサ０（００３ａ）、１（００３ｂ）の両方がアクティブな状態で、論理プロセッサ０（００３ａ）が休止命令を発行すると、物理プロセッサ０（００２ａ）はＭＴモード００８ａからＳＴ１モード００８ｂに遷移する。残りのアクティブな論理プロセッサ１（００３ｂ）も休止命令を発行すると、物理プロセッサ０（００２ａ）は省電力モード００８ｄに遷移する。省電力モード００８ｄのときに、論理プロセッサ０（００３ａ）に外部割り込みが発生すると、物理プロセッサ０（００２ａ）はＳＴ０モード００８ｂに遷移する。ＳＴ０モード００８ｂにおいて、更に論理プロセッサ１（００３ｂ）に外部割り込みが発生すると、ＭＴモード００８ａに遷移する。
【００４５】
論理プロセッサごとに備えるサイクルカウンタ００４ａ、００４ｂ、００４ｃ、及び００４ｄは、既知で一定の周波数で停止せずに動作し、全ての論理プロセッサの間で同期化する。サイクルカウンタは、既知で一定の周波数で停止せずに動作するという要件を満たすならば、少なくともシステムで一つであればよい。本実施形態において、論理プロセッサごとにサイクルカウンタを備えるとするのは、本発明を適用する代表的な計算機を実施形態とする為である。また、上述の通り、本実施形態においては、ＳＭＴを考慮したサイクルカウンタは持たないとする。また、以降、説明を直感的に分かりやすくする為に、サイクルカウンタ値を時刻と述べる。
【００４６】
論理プロセッサごとに備えるタイマ００５ａ、００５ｂ、００５ｃ、及び００５ｄは、指定した時刻に外部割り込みを発生させる機能を有し、本実施形態においては、特に、プロセッサ使用率算出処理を周期的に呼び出し、プロセッサ使用率を周期的に算出する為に使用する。
【００４７】
オペレーティングシステム１００は、計算機００１のハードウェア資源を管理して、アプリケーションの実行環境を提供するシステムソフトウェアである。オペレーティングシステム１００が提供するアプリケーションの実行環境は、プロセスとして実現される。本実施形態において、オペレーティングシステムは特に構成要素にスケジューラ１０１とプロセッサ使用率モニタ１０２を有する。また、オペレーティングシステム１００は、メモリ００６上に配置される。
【００４８】
本実施形態においては、プロセス０（１１０ａ）、プロセス１（１１０ｂ）、プロセス２（１１０ｃ）、及びプロセス３（１１０ｄ９の計４つのプロセスがアクティブである。プロセスは、アプリケーションを走らせる実体であり、アプリケーションに実行環境を提供する。１つの論理プロセッサ上ではただ１つのプロセスが走行する。オペレーティングシステム１００は、各論理プロセッサ上で走行するプロセスを切り替え、論理プロセッサをプロセスの間で時分割共有することで、複数のプロセスが同時にアクティブであるマルチプログラミング環境を実現する。
【００４９】
プロセスは決まった生存期間を持ち、たいていのプロセスは、アプリケーションと対応し、アプリケーションの起動と合わせて生成され、終了と共に削除される。
【００５０】
プロセスの論理プロセッサへの割り当ては、スケジューラ１０１が優先度に応じて制御する。スケジューラ１０１は、優先度を考慮したランキュー１０３を用いてスケジューリングを実現する。スケジューラは、計算機システムの構成や目的に応じて多くの実現方式をとりえるが、本実施形態においては、実現方式の詳細は省略する。
【００５１】
また、その他に、オペレーティングシステム１００は、論理プロセッサ０（００３ａ）、１（００３ｂ）、２（００３ｃ）、及び３（００３ｄ）にそれぞれアイドルプロセス０（１２０ａ）、アイドルプロセス１（１２０ｂ）、アイドルプロセス２（１２０ｃ）、及びアイドルプロセス３（１２０ｄ）をそれぞれ対応付ける。
【００５２】
スケジューラ１０１は、論理プロセッサに割り当てていないプロセスをランキュー１０３で管理する。スケジューラ１０１がプロセスを選択して論理プロセッサ上で走行させるときは、該プロセスをランキュー１０３から取り出す。プロセスの論理プロセッサ上での走行を中止させるときは、プロセスの論理プロセッサへの割り当てを解除し、ランキュー１０３に挿入する。
【００５３】
スケジューラ１０１は、論理プロセッサに割り当てるプロセスが見つからなかったときに、該論理プロセッサに割り当てるプロセスが見つかるまで、該論理プロセッサ上で対応するアイドルプロセスを走行させる。アイドルプロセスが論理プロセッサ上で走行するときは、休止命令を発行して、常に論理プロセッサを休止状態に置く。
【００５４】
シングルスレッドの物理プロセッサであれば、プロセスをどの論理プロセッサに割り当てたとしても、大きな性能差は生じないが、ＳＭＴプロセッサでは、上述の通り、割り当て先の論理プロセッサに応じて非常に大きな性能差が生じえる。ＳＭＴプロセッサを搭載した計算機システムにおいては、プロセスのスケジューリングを考慮すると共に、プロセスの論理プロセッサへの割り当てにより生じる性能差を正しく把握することが非常に重要である。本発明のプロセッサ使用率算出方式は、ＳＭＴ専用の特別なハードウェアを必要とせずに、ＳＭＴを考慮したプロセッサ使用量及び使用率を算出するものである。
【００５５】
プロセッサ使用率モニタ１０２は、物理プロセッサ、物理プロセッサ内の論理プロセッサ、オペレーティングシステム１００のプロセスの単位でプロセッサ使用率を定期的に集計し、保持する。プロセッサ使用率は、計算機システムの稼動状況をリアルタイムに監視したり、負荷に応じてプロセッサ資源の割り当てを制御したりする為に必要である。スケジューラ１０１は、プロセッサ使用率モニタが集計したプロセッサ使用率をプロセススケジューリングで使用することもできるが、本実施形態では、プロセッサ使用率の用途ではなく算出に焦点をあてる為、用途については詳細を省略する。
【００５６】
プロセッサ使用率モニタ１０２は、プロセスである必要はなく、外部割り込みハンドラやライブラリ関数等であってもよい。本実施形態においては、プロセッサ使用率モニタ１０２の実現形態は問わない。
【００５７】
本発明の方法に入る前に、ＳＭＴ無効時の従来の方法によるプロセッサ使用率の算出方法を説明する。物理プロセッサ０（００２ａ）のプロセッサ使用率を例にする。
【００５８】
図４に、従来技術におけるＳＭＴ無効時のプロセッサ使用率モニタのブロック図を示す。説明に必要な情報のみを含む。プロセッサ使用率モニタ１０２は、物理プロセッサ０（００２ａ）に対して、累積プロセッサ使用量ＰＰ＿Ｕ（２００）、プロセッサ使用量測定開始時刻ＰＰ＿ＴＵ（２０１）、プロセッサ使用率算出開始プロセッサ使用量ＰＰ＿ＵＳ（２０２）を有する。また、システムに対して、プロセッサ使用率算出周期ＵＰＲＤ（２０３）を有する。
【００５９】
図５（ａ）のフローチャートに従い、ＳＭＴ無効時の従来の方法による物理プロセッサ０（００２ａ）のプロセッサ使用量算出処理を説明する。物理プロセッサ０（００２ａ）の休止状態が解除され、実行を開始するときに、その時点の時刻（現在時刻）をプロセッサ使用量測定開始時刻ＰＰ０＿ＴＵ（２０１）に保持する（ステップ３０１）。
【００６０】
物理プロセッサ０（００２ａ）が実行を中断して休止命令を発行して、休止状態に遷移させるときに、その時点の時刻（現在時刻）からプロセッサ使用量測定開始時刻ＰＰ０＿ＴＵ（２０１）を引くことで、今回のプロセッサ使用量をｔ２−ＰＰ０＿ＴＵと求める。求めたプロセッサ使用量を累積プロセッサ使用量ＰＰ０＿Ｕ（２００）に加算する（ステップ３０２）。以上を物理プロセッサ０（００２ａ）が実行を開始、終了するたびに繰り返す。
【００６１】
図５（ｂ）のフローチャートに従い、ＳＭＴ無効時の従来の方法による物理プロセッサ０（００２ａ）のプロセッサ使用率算出処理を説明する。タイマは、プロセッサ使用率算出の周期の度に外部割り込みを生成するように設定され、プロセッサ使用率モニタ１０２のプロセッサ使用率算出処理は、この外部割り込みを契機に周期的に呼び出されるものとする。
【００６２】
プロセッサ使用率算出時刻になると、プロセッサ使用率算出開始処理が呼び出される。物理プロセッサ０（００２ａ）の累積プロセッサ使用量ＰＰ０＿Ｕ（２００）を取得し、プロセッサ使用率算出開始プロセッサ使用量ＰＰ０＿ＵＳ（２０２）に保持する（ステップ３０３）。
【００６３】
周期ＵＰＲＤ（２０３）が経過して、次にプロセッサ使用率算出時刻になると、プロセッサ使用率算出終了処理が呼び出される。物理プロセッサ０（００２ａ）の累積プロセッサ使用量ＰＰ０＿Ｕ（２００）を取得し、保持したプロセッサ使用率算出開始プロセッサ使用量ＰＰ０＿ＵＳ（２０２）で引き、プロセッサ使用量の増分をＰＰ０＿Ｕ−ＰＰ０＿ＵＳと求める（ステップ３０４）。
【００６４】
プロセッサ使用量の増分をプロセッサ使用率算出周期ＵＰＲＤ（２０３）で割ることで、物理プロセッサ０のプロセッサ使用率が求められる（ステップ３０５）。
【００６５】
１回のプロセッサ使用率算出処理用のタイマ割り込みで、今回のプロセッサ使用率算出終了処理と次回のプロセッサ使用率算出開始処理を続けて呼び出すことで、周期的に物理プロセッサ０（００２ａ）のプロセッサ使用率を算出することができる。
【００６６】
従来の方式を使うと、プロセッサ使用量とプロセッサ使用率を単純に求めることができるが、ＳＭＴプロセッサ有効時のプロセッサ使用量とプロセッサ使用率の算出に使おうとすると、ＳＭＴプロセッサの動作モードを考慮したものにはならない。
【００６７】
従来の方式の問題点を論理プロセッサのプロセッサ使用率を求める例に基づき示す。図６（ａ）は、物理プロセッサ（００２ａ）の論理プロセッサ０（００３ａ）は走行中だが、論理プロセッサ１（００３ｂ）は休止状態にあることを時系列で示した概念図である。図６（ｂ）は、物理プロセッサ０（００２ａ）の論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）が共に走行中であることを時系列で示した概念図である。
【００６８】
従来の方法では、図６（ａ）と図６（ｂ）の両方で、論理プロセッサ０（００３ａ）のプロセッサ使用率は１００％になる。図６（ａ）は、物理プロセッサ０（００２ａ）はＳＴモードで動作するので従来方法で問題ないが、図６（ｂ）は、物理プロセッサ０（００２ａ）はＭＴモードで動作するので、論理プロセッサ０（００３ａ）は物理プロセッサ０（００２ａ）の資源の全てを使うことはできない。このときの論理プロセッサ０（００３ａ）のプロセッサ使用率は、後述のＭＴモード時の論理プロセッサの物理プロセッサ割り当て比率ＭＲＴＯ（１９０）に等しくなるべきである。本発明の方法は、これを実現するものである。
【００６９】
図７は、本実施形態におけるプロセッサ使用率モニタ１０２の構成図である。プロセッサ使用率モニタ１０２が有するブロックは、物理プロセッサ、論理プロセッサ、プロセス、システムの区分で分類される。
【００７０】
プロセッサ使用率モニタ１０２は、物理プロセッサに対して、物理プロセッサごとに累積プロセッサ使用量ＰＰ＿Ｕ（１５０）、及びプロセッサ使用率算出開始プロセッサ使用量ＰＰ＿ＵＳ（１５１）を有する。
【００７１】
プロセッサ使用率モニタ１０２は、論理プロセッサに対して、論理プロセッサごとに同一物理プロセッサに属する相手論理プロセッサへのポインタ（１６０）、累積プロセッサ使用量ＬＰ＿Ｕ（１６１）、累積走行時間ＬＰ＿Ｒ（１６２）、累積ＳＴモード走行時間ＬＰ＿ＳＲ（１６３）、プロセッサ使用量測定開始時刻ＬＰ＿ＴＵ（１６４）、プロセッサ使用率算出開始プロセッサ使用量ＬＰ＿ＵＳ（１６５）、累積休止時間ＬＰ＿Ｈ（１６６）、最新休止開始時刻ＬＰ＿ＨＳ（１６７）、最新休止終了時刻ＬＰ＿ＨＥ（１６８）、及び相手論理プロセッサの累積休止時間現在値ＬＰ＿ＨＰ（１６９）を有する。
【００７２】
プロセッサ使用率モニタ１０２は、プロセスに対して、プロセスごとに累積プロセッサ使用量ＰＲ＿Ｕ（１８０）、累積走行時間ＰＲ＿Ｒ（１８１）、累積ＳＴモード走行時間ＰＲ＿ＳＲ（１８２）、プロセッサ使用量測定開始時刻ＰＲ＿ＴＵ（１８３）、プロセッサ使用率算出開始プロセッサ使用量ＬＰ＿ＵＳ（１８４）、及び相手論理プロセッサの累積休止時間現在値ＬＰ＿ＨＰ（１８５）を有する。
【００７３】
プロセッサ使用率モニタ１０２は、システムに対して、ＭＴモード時の論理プロセッサの物理プロセッサ資源割り当て比率ＭＲＴＯ（１９０）、及びプロセッサ使用率算出周期ＵＰＲＤ（１９１）を有する。物理プロセッサ資源割り当て比率ＭＲＴＯ（１９０）は、ある１つの実現形態においては５０％としている。
【００７４】
特に、図７記載の情報を用いて、本実施形態における論理プロセッサのプロセッサ使用量及び使用率の算出方式を説明する。まず、本発明の方法を時系列の概念図を用いて具体的に説明する。次に、フローチャートに従って、本発明の方法のアルゴリズムを示す。
【００７５】
図８は本実施形態における、物理プロセッサ０（００２）がＳＭＴ有効であるときの論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）の動作を時系列で示した概念図である。論理プロセッサの動作状態について、時刻と時刻を矢印で結んだ区間は、論理プロセッサがアクティブ状態にあり、空白の区間は、論理プロセッサが休止状態にあるとする。論理プロセッサ０（００３ａ）のプロセッサ使用率Ｒ０を、本発明の方法を用いて求める。本発明の方法の目的を明確に伝える為に複雑な例を取り上げる。
【００７６】
図８では、時刻Ｔ０（４０１）から時刻Ｔ８（４０９）までの時間ＵＰＲＤ（＝Ｔ８−Ｔ０）の区間を、プロセッサ使用率算出の標本区間とする。論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）が共に休止状態にあり、物理プロセッサ０は省電力状態００８ｄにあり、論理プロセッサ１（００３ｂ）はこの時点で休止を開始した（時刻Ｔ０）（４０１）。論理プロセッサ０（００３ａ）の休止状態が解除されると、物理プロセッサ０（００２ａ）はＳＴ０モード００８ｂになる（時刻Ｔ１）（４０２）。今度は、論理プロセッサ１（００３ｂ）の休止が解除されると、物理プロセッサ０（００２ａ）はＭＴモード００８ａになる（時刻Ｔ２）（４０３）。論理プロセッサ０（００３ａ）が再び休止し、物理プロセッサ０（００２ａ）はＳＴ０モード００８ｂになる（時刻Ｔ３）（４０４）。論理プロセッサ１（００３ｂ）の休止が解除されると、物理プロセッサ０（００２ａ）はＭＴモード００８ａになる（時刻Ｔ４）（４０５）。論理プロセッサ１（００３ｂ）が休止すると、物理プロセッサ０（００２ａ）はＳＴ０モード００８ｂになる（時刻Ｔ５）（４０６）。論理プロセッサ０（００３ａ）が休止すると、物理プロセッサ０（００２ａ）は再び省電力モード００８ｄになる（時刻Ｔ６）（４０７）。その後、論理プロセッサ１（００３ｂ）の休止が解除されると、物理プロセッサ０（００２ａ）はＳＴ１モード００８ｃになる（時刻Ｔ７）（４０８）。時刻Ｔ８（４０９）で標本区間は終わりである。
【００７７】
論理プロセッサ０（００３ａ）のプロセッサ使用量Ｕ０を求める。論理プロセッサ０（００３ａ）の時刻Ｔ１（４０２）から時刻Ｔ６（４０７）までの走行時間ＴＲ０は次の通りである。
【００７８】
ＴＲ０  ＝  Ｔ６  −  Ｔ１    （式１）
本発明の方法で算出する論理プロセッサ０（００３ａ）のプロセッサ使用量Ｕ０は、論理プロセッサ０（００３ａ）の走行時間ＴＲ０をＳＴモード走行時間ＴＳ０とＭＴモード走行時間ＴＭ０に分割し、ＭＴモード走行時間ＴＭ０に、ＭＴモード時の論理プロセッサの物理プロセッサ割り当て比率ＭＲＴＯ（１９０）を乗じた値に、ＳＴ走行時間ＴＳ０を加算することで
Ｕ０  ＝  ＴＳ０  ＋  ＴＭ０  ｘ  ＭＲＴＯ    （式２）
と求められる。標本区間内では、論理プロセッサ０（００３ａ）が走行したのは一度であり、その間に休止を含まない為、論理プロセッサ０（００３ａ）のプロセッサ使用率Ｒ０は、求めたプロセッサ使用量Ｕ０を時間ＵＰＲＤ（１９１）で割れば
Ｒ０  ＝  Ｕ０／ＵＰＲＤ    （式３）
と簡単に求めることができる。
【００７９】
物理プロセッサ０（００２ａ）の動作モードを考えると、ＳＴモード走行時間ＴＳ０は、論理プロセッサ１（００３ｂ）の論理プロセッサ０（００３ａ）の走行時間内の合計休止時間ＴＨ１と等しい、つまり
ＴＳ０  ＝  ＴＨ１    （式４）
とみなすことができる。論理プロセッサ０（００３ａ）のＭＴモード走行時間ＴＭ０は、走行時間ＴＲ０の中に休止時間を含まないので、走行時間ＴＲ０からＳＴモード走行時間ＴＳ０を引くことで
ＴＭ０  ＝  ＴＲ０  −  ＴＳ０    （式５）と求められる。
【００８０】
（式１）、（式４）、及び（式５）を用いると、論理プロセッサ０（００３ａ）のプロセッサ使用量Ｕ０は次のようにも表せる。
【００８１】
Ｕ０  ＝  ＴＨ１  ＋  （（Ｔ６−Ｔ１）−ＴＨ１）  ｘ  ＭＲＴＯ    （式６）
（式６）より、論理プロセッサ０（００３ａ）のプロセッサ使用率Ｒ０の算出は、論理プロセッサ１（００３ｂ）の論理プロセッサ０（００３ａ）の走行時間内の合計休止時間ＴＨ１の算出が核となる。
【００８２】
論理プロセッサ０（００３ａ）は、論理プロセッサ１（００３ｂ）が通常動作状態にあるか、休止状態にあるかを直接的に知ることはできない。また、論理プロセッサ１（００３ｂ）は、対象区間内で何度も通常動作状態と休止状態の間の遷移を繰り返すことがある。それゆえ、論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１を求めるには、論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）の間の協力が必要である。
【００８３】
論理プロセッサ０（００３ａ）の走行区間Ｔ１（４０２）からＴ６（４０７）までの間の論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１は
ＴＨ１  ＝  （Ｔ２−Ｔ１）＋（Ｔ４−Ｔ３）＋（Ｔ６−Ｔ５）    （式７）
である。これより、合計休止時間ＴＨ１を求めるには、少なくともＴ１（４０２）からＴ６（４０７）までの計６回サイクルカウンタを参照して時刻を取得する必要がある。このうち、時刻Ｔ１（４０２）とＴ６（４０７）は、論理プロセッサ０（００３ａ）の走行の開始から終了であるため、論理プロセッサ０（００３ａ）のサイクルカウンタを参照すればよく、論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）の間の同期化は伴わない。
【００８４】
しかし、時刻Ｔ２（４０３）、Ｔ３（４０４）、Ｔ４（４０５）、及びＴ５（４０６）は相手の論理プロセッサ１（００３ｂ）の休止の開始あるいは終了である。論理プロセッサ０（００３ａ）は、これらの時刻を直接知ることはできない。そのため、論理プロセッサ０（００３ａ）がこれらの時刻を知るには、論理プロセッサ１（００３ｂ）から通知するか、論理プロセッサ０（００３ａ）がポーリングすることが必要である。
【００８５】
ところが、論理プロセッサ０（００３ａ）の１回の走行時間ＴＲ０は非常に短くなりえる。また、論理プロセッサ１（００３ｂ）の休止は、Ｔ０（４０１）とＴ２（４０３）、Ｔ３（４０４）とＴ４（４０５）、Ｔ５（４０６）とＴ７（４０８）の計３回以上に多く起こりえ、１回の休止時間（Ｔ２−Ｔ０）、（Ｔ４−Ｔ３）、（Ｔ７−Ｔ５）も非常に短くなりえる。ポーリングや論理プロセッサ間通信といった同期化処理は、高頻度で実行されると、論理プロセッサ上で実行するアプリケーションにとって非常に大きなオーバヘッドとなりえる。
【００８６】
それゆえ実用を考えると、論理プロセッサ１（００３ｂ）の合計休止時間の算出に、論理プロセッサ１（００３ｂ）からの通知や論理プロセッサ０（００３ａ）のポーリングを使うことはできない。したがって、上記の（式７）で単純に論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１を求めることはできない。工夫する必要がある。
【００８７】
図９に、論理プロセッサ１（００３ｂ）の累積休止時間の増加を時系列のグラフで示す。累積休止時間は、論理プロセッサ１（００３ｂ）の動作に追従して連続的に更新されるならば、図９のようになる。論理プロセッサ０（００３ａ）が図９のＴＨ１を求める方法を考える。
【００８８】
まず、図１０のように、論理プロセッサ１（００３ｂ）の累積休止時間を、論理プロセッサ１（００３ｂ）が一定の時間間隔で更新していく方法が考えられる。この方法ならば、論理プロセッサ１（００３ｂ）は自身の累積休止時間を定期的に更新するので、論理プロセッサ０（００３ａ）は、時刻Ｔ１（４０２）の走行開始時と時刻Ｔ６（４０８）の走行終了時にそれぞれ論理プロセッサ１（００３ｂ）の累積休止時間を参照し、その差分を求めることで、論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１の近似値ＴＨ１´が得られる。
【００８９】
この近似値の精度を上げるには、累積休止時間の更新間隔を短くする必要があるが、論理プロセッサ１（００３ｂ）が休止中に累積休止時間を更新するには、そのつど休止状態を解除して起きる必要がある。しかし、論理プロセッサ１（００３ｂ）を起こすと、物理プロセッサ０（００３ａ）はＳＴ０モード００８ｂからＭＴモード００８ａに遷移し、論理プロセッサ０（００３ａ）の性能が落ちてしまう。累積休止時間の更新間隔が長いと、近似値の精度が低く実用に耐えない。それゆえ、別の方法を考える必要がある。
【００９０】
図１１は、論理プロセッサ１（００３ｂ）が休止を終了するときのみ累積休止時間を更新する方法である。この方法では、論理プロセッサ０（００３ａ）は、時刻Ｔ２（４０３）に、時刻Ｔ１（４０２）から開始している休止の1つ前の休止までの累積休止時間ＬＰ１＿Ｈ０（４２０）を取得し、時刻Ｔ６（４０７）に、時刻Ｔ４（４０５）で終了した休止までの累積休止時間ＬＰ１＿Ｈ２（４２２）を取得する。論理プロセッサ０（００３ａ）は、この２つの値の差分ＴＨ１´
ＴＨ１´  ＝  ＬＰ１＿Ｈ２  −  ＬＰ１＿Ｈ０    （式８）を論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１の近似値として求めることができる。
【００９１】
図１１では、図１０の問題や、論理プロセッサ０（００３ａ）と論理プロセッサ１（０００３ｂ）の同期化のような問題は起こらない。計算量も非常に少ない。しかし、まだ問題がある。ＴＨ１´は、（式８）を（式７）のように表すと次のようになる。
【００９２】
ＴＨ１´  ＝  （Ｔ２−Ｔ０）＋（Ｔ４−Ｔ３）    （式９）
（式７）と（式９）を比較すると、近似値ＴＨ１´は実際の値ＴＨ１と比べて、
ＥＸ１＝（Ｔ１−Ｔ０）
が過剰であり、
ＳＨ１＝（Ｔ６−Ｔ５）
が不足している。この過剰分ＥＸ１と不足分ＳＨ１を補正することができれば、図１１の方法は、同期化なしでかつ計算量が少なく、論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１を求めることができる。
【００９３】
過剰分ＥＸ１と不足分ＳＨ１を見ると、減算元の時刻Ｔ１（４０２）とＴ６（４０７）は、いずれもプロセッサ使用量の算出対象の論理プロセッサ０（００３ａ）のイベント時刻であり、減算先の時刻Ｔ０（４０１）とＴ５（４０６）は、いずれも合計休止時間の算出対象の論理プロセッサ１（００３ｂ）のイベント時刻である。時刻Ｔ１（４０２）は、論理プロセッサ０（００３ａ）のプロセッサ使用量算出開始時刻であり、時刻Ｔ６（４０７）は、プロセッサ使用量算出終了時刻である。これに対して、時刻Ｔ０（４０１）は、論理プロセッサ１（００３ｂ）の休止終了時刻であり、時刻Ｔ５（４０６）は、論理プロセッサ１（００３ｂ）の休止開始時刻である。論理プロセッサ１（００３ｂ）が時刻Ｔ０（４０１）と時刻Ｔ５（４０６）を論理プロセッサ０（００３ａ）が参照可能なように記録しておけば、論理プロセッサ０（００３ａ）は過剰分ＥＸ１と不足分ＳＨ１を求めることができる。これを実現するのが、本発明の方式である。
【００９４】
図１２は、論理プロセッサ１（００３ｂ）が休止を終了するときのみ累積休止時間を更新し、更に、論理プロセッサ１（００３ｂ）の休止開始時刻と休止終了時刻を、論理プロセッサ０（００３ａ）が参照可能なように記録する方法である。
【００９５】
論理プロセッサ０（００３ａ）は、論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１の近似値ＴＨ１´を、プロセッサ使用量Ｕ０の算出終了時に（式８）により求める。また、プロセッサ使用量Ｕ０の算出開始時に近似値ＴＨ１´の過剰分ＥＸ１を求め、算出終了時に不足分ＳＨ１を求める。以上をまとめると、次のように論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１が求められる。
【００９６】
ＴＨ１  ＝  ＴＨ１´  −  ＥＸ１  ＋  ＳＨ１
＝  （Ｔ３−Ｔ１）＋（Ｔ５−Ｔ４）−（Ｔ２−Ｔ１）＋（Ｔ７−Ｔ６）
＝  （Ｔ３−Ｔ２）＋（Ｔ５−Ｔ４）＋（Ｔ７−Ｔ６）
論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１が求まれば、（式６）により、論理プロセッサ０（００３ａ）のプロセッサ使用量Ｕ０が求められ、（式３）により、論理プロセッサ０（００３ａ）のプロセッサ使用率Ｒ０が求められる。
【００９７】
図１２に示す方法は、プロセッサ使用量算出方式とするには、過剰分ＥＸ１と不足分ＳＨ１があるとは限らないという問題を解決する必要がある。過剰分ＥＸ１と不足分ＳＨ１が０であることがありえる。過剰分ＥＸ１と不足分ＳＨ１の有無の条件判定がそれぞれ必要である。過剰分ＥＸ１と不足分ＳＨ１の有無の条件判定処理を説明する。
【００９８】
図１３（ａ）に、過剰分ＥＸ１の有無と論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）のイベント時刻の関係を時系列で示す。
【００９９】
論理プロセッサ０（００３ａ）のプロセッサ使用量算出開始時刻Ｔｓに、論理プロセッサ１（００３ｂ）の最新休止開始時刻Ｔａが最新休止終了時刻Ｔｂよりも大きいならば（５０１）、論理プロセッサ１（００３ｂ）は休止中であり、ＥＸ１＝Ｔｓ−Ｔａが、合計休止時間ＴＨ１の過剰分である。
【０１００】
これに対して、論理プロセッサ０（００３ａ）のプロセッサ使用量算出開始時刻Ｔｓに、論理プロセッサ１（００３ｂ）の最新休止開始時刻Ｔａが最新休止終了時刻Ｔｂよりも小さいならば（５０２）、論理プロセッサ１（００３ｂ）は動作中であるため、過剰分ＥＸ１は０である。
【０１０１】
また、図１３（ｂ）に、不足分ＳＨ１の有無と論理プロセッサ０（００３ａ）と論理プロセッサ１（００３ｂ）のイベント時刻の関係を時系列で示す。
【０１０２】
論理プロセッサ０（００３ａ）のプロセッサ使用量算出終了時刻Ｔｅに、論理プロセッサ１（００３ｂ）の最新休止開始時刻Ｔａが最新休止終了時刻Ｔｂよりも大きいならば（５０３）、論理プロセッサ１（００３ｂ）は休止中であり、ＳＨ１＝Ｔｅ−Ｔａが、合計休止時間ＴＨ１の不足分である。
【０１０３】
これに対して、論理プロセッサ０（００３ａ）のプロセッサ使用量算出終了時刻Ｔｅに、論理プロセッサ１（００３ｂ）の最新休止開始時刻Ｔａが最新休止終了時刻Ｔｂよりも小さいならば（５０４）、論理プロセッサ１（００３ｂ）は動作中であるため、不足分ＳＨ１は０である。
【０１０４】
図１２の基本方式に加えて図１３（ａ）と（ｂ）の条件判定を追加した、本発明の論理プロセッサのプロセッサ使用量及びプロセッサ使用率の算出方式を説明する。
【０１０５】
論理プロセッサのプロセッサ使用量及びプロセッサ使用率算出処理は、大きくは、論理プロセッサの累積休止時間更新処理、論理プロセッサの累積プロセッサ使用量更新処理、及び論理プロセッサのプロセッサ使用率算出処理からなる。
【０１０６】
論理プロセッサの累積休止時間更新処理を、図１４のフローチャートに基づき説明する。物理プロセッサ０（００２ａ）の論理プロセッサ０（００３ａ）を例とする。
【０１０７】
論理プロセッサ０（００３ａ）は、休止開始時に現在時刻ｔ０を取得し、最新休止開始時刻ＬＰ０＿ＨＳ（１６７）に格納する（ステップ６０１）。
【０１０８】
論理プロセッサ０（００３ａ）は、休止終了時に現在時刻を取得し、最新休止終了時刻ＬＰ０＿ＨＥ（１６８）に格納する（ステップ６０２）。
【０１０９】
そして、今回の休止時間ＬＰ０＿ＨＥ−ＬＰ０＿ＨＳを累積休止時間ＬＰ０＿Ｈ（１６６）に加算する（ステップ６０３）。
【０１１０】
論理プロセッサの累積プロセッサ使用量更新処理を、図１５のフローチャートに基づき説明する。物理プロセッサ０（００２ａ）の論理プロセッサ０（００３ａ）を例とする。
【０１１１】
論理プロセッサ０（００３ａ）は走行開始時に、論理プロセッサ１（００３ｂ）の最新休止開始時刻ＬＰ１＿ＨＳ（１６７）と最新休止終了時刻ＬＰ１＿ＨＥ（１６８）を取得し、それぞれｈｓ０とｈｅ０に保持する（ステップ７０１）。
【０１１２】
このとき、論理プロセッサ１（００３ｂ）の特定には、論理プロセッサごとにある、同一物理プロセッサに属する相手論理プロセッサへのポインタ１６０を使用する。続けて、論理プロセッサ１（００３ｂ）の累積休止時間ＬＰ１＿Ｈ（１６６）を取得し、相手論理プロセッサの累積休止時間現在値ＬＰ０＿ＨＰ（１６９）に格納する（ステップ７０２）。
【０１１３】
次に、現在時刻を取得し、論理プロセッサ０（００３ａ）のプロセッサ使用量測定開始時刻ＬＰ０＿ＴＵ（１６４）に格納する（ステップ７０３）。
【０１１４】
論理プロセッサ１（００３ｂ）の合計休止時間近似値ＴＨ１´の過剰分ＥＸ１を求める。先ほど求めたｈｓ０とｈｅ０を大小比較し、相手論理プロセッサの動作状態を判定する（ステップ７０４）。
【０１１５】
ｈｓ０がｈｅ０よりも大きければ、論理プロセッサ１（００３ｂ）は休止中であると判断し、過剰分ＥＸ１をｔ０−ｈｓ１と求める（ステップ７０５）。
【０１１６】
ｈｓ０がｈｅ０よりも小さければ、論理プロセッサ１（００３ｂ）は実行中であると判断し、過剰分ＥＸ１を０と求める（ステップ７０６）。
【０１１７】
そして、論理プロセッサ０（００３ａ）は走行を開始する。
【０１１８】
論理プロセッサ０（００３ａ）は走行終了時に、論理プロセッサ１（００３ｂ）の最新休止開始時刻ＬＰ１＿ＨＳ（１６７）と最新休止終了時刻ＬＰ１＿ＨＥ（１６８）を取得し、それぞれｈｓ１とｈｅ１に保持する（ステップ７０７）。
【０１１９】
論理プロセッサ１（００３ｂ）の累積休止時間ＬＰ１＿Ｈ（１６６）を取得し、保存した相手論理プロセッサの累積休止時間現在値ＬＰ０＿ＨＰ（１６９）との差分ＬＰ１＿Ｈ−ＬＰ０＿ＨＰを論理プロセッサ１（００３ｂ）の合計休止時間近似値ＴＨ１´と求める（ステップ７０８）。
【０１２０】
次に現在時刻取得し、ｔ１に保持する（ステップ７０９）。
【０１２１】
今回の論理プロセッサ０（００３ａ）の走行時間Ｒ０をｔ１−ＬＰ０＿ＴＵと求める。Ｒ０は、論理プロセッサ０（００３ａ）の累積走行時間ＬＰ０＿Ｒに加算する（ステップ７１０）。
【０１２２】
論理プロセッサ１（００３ｂ）の合計休止時間近似値ＴＨ１´の不足分ＳＨ１を求める。ｈｓ１とｈｅ１を大小比較し、相手論理プロセッサの動作状態を判定する（ステップ７１１）。
【０１２３】
ｈｓ１がｈｅ１よりも大きければ、論理プロセッサ１（００３ｂ）は休止中であると判断し、不足分ＳＨ１をｔ１−ｈｓ１と求める（ステップ７１２）。
【０１２４】
ｈｓ１がｈｅ１よりも小さければ、論理プロセッサ１（００３ｂ）は実行中であると判断し、不足分ＳＨ１を０と求める（ステップ７１３）。
【０１２５】
論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１をＴＨ１´−ＥＸ１＋ＳＨ１と求める（ステップ７１４）。
【０１２６】
論理プロセッサ１（００３ｂ）の合計休止時間ＴＨ１は、そのまま論理プロセッサ０（００３ａ）の今回のＳＴモード実行時間ＳＲ０になる。ＳＲ０は、累積ＳＴモード実行時間ＬＰ０＿ＳＲ（１６３）に加算する（ステップ７１５）。
【０１２７】
今回の論理プロセッサ０（００３ａ）のＭＴモード実行時間ＭＲ０をＲ０−ＳＲ０と求める（ステップ７１６）。
【０１２８】
そして、今回の論理プロセッサ０（００３ａ）のプロセッサ使用量Ｕ０を、物理プロセッサ資源割り当て比率ＭＲＴＯ（１９０）を用いて、ＭＲ０×ＭＲＴＯ＋ＳＲ０と求め、論理プロセッサ０（００３ａ）の累積プロセッサ使用量ＬＰ０＿Ｕ（１６１）に加算する（ステップ７１７）。
【０１２９】
論理プロセッサのプロセッサ使用率算出処理を、図１６のフローチャートに基づき説明する。物理プロセッサ０（００２ａ）の論理プロセッサ０（００３ａ）を例とする。タイマは、プロセッサ使用率算出の周期ＵＰＲＤ（１９１）の度に外部割り込みを生成するように設定され、プロセッサ使用率モニタのプロセッサ使用率算出処理は、この外部割り込みを契機に周期的に呼び出されるものとする。
【０１３０】
プロセッサ使用率算出時刻になると、プロセッサ使用率算出開始処理が呼び出される。論理プロセッサ０（００３ａ）の累積プロセッサ使用量ＬＰ０＿Ｕ（１６１）を取得し、プロセッサ使用率算出開始プロセッサ使用量ＬＰ０＿ＵＳ（１６５）に保持する（ステップ８０１）。
【０１３１】
周期ＵＰＲＤ（１９１）が経過して、次にプロセッサ使用率算出時刻になると、プロセッサ使用率算出終了処理が呼び出される。論理プロセッサ０（００３ａ）の累積プロセッサ使用量ＬＰ０＿Ｕ（１６１）を取得し、保持したプロセッサ使用率算出開始プロセッサ使用量ＬＰ０＿ＵＳ（１６５）で引き、プロセッサ使用量の増分ΔＵ０をＬＰ０＿Ｕ−ＬＰ０＿ＵＳと求める（ステップ８０２）。
【０１３２】
プロセッサ使用量の増分ΔＵ０をプロセッサ使用率算出周期ＵＰＲＤ（１９１）で割ることで、論理プロセッサ０（００３ａ）のプロセッサ使用率Ｐ０が求められる（ステップ８０３）。
【０１３３】
１回のプロセッサ使用率算出処理用のタイマ割り込みで、今回のプロセッサ使用率算出終了処理と次回のプロセッサ使用率算出開始処理を続けて呼び出すことで、周期的に論理プロセッサ０（００３ａ）のプロセッサ使用率を算出することができる。
【０１３４】
ここまでで、論理プロセッサのプロセッサ使用量とプロセッサ使用率の算出方式を説明した。ＳＭＴプロセッサ、すなわちＳＭＴ有効時の物理プロセッサのプロセッサ使用量とプロセッサ使用率は、その配下の２つの論理プロセッサのプロセッサ使用量とプロセッサ使用率をそれぞれ加算することで、容易に求めることができる。
【０１３５】
オペレーティングシステム１００のプロセスのプロセッサ使用量は、前述の論理プロセッサのプロセッサ使用量の算出区間を、対象プロセスの１つの論理プロセッサ上での連続走行区間とし、これを累積していくことで求めることができる。プロセスのプロセッサ使用率は、論理プロセッサのプロセッサ使用率と全く同様にして求めることができる。また、プロセスは、論理プロセッサと異なり、走行する論理プロセッサが複数にまたがることがあるが、本実施形態では、１つの物理プロセッサの配下の２つの論理プロセッサがお互いをポイントするので、プロセスはどの論理プロセッサに移ったとしても、このポインタを利用することで、論理プロセッサの物理的位置に依らずに同じ手順で、プロセスのプロセッサ使用量を求めることができる。
【０１３６】
以上より、詳しく説明した論理プロセッサのプロセッサ使用量とプロセッサ使用率の算出方式と、物理プロセッサのプロセッサ使用量とプロセッサ使用率、並びにプロセスのプロセッサ使用量とプロセッサ使用率の算出方式には、大きな違いがないので、後者についてはこれ以上の説明を省略する。
【０１３７】
本発明のプロセッサ使用量とプロセッサ使用率の算出方式によれば、時刻の大小関係を適切に用いることで、専用の特別なハードウェア機構を必要とすることなく、論理プロセッサ、オペレーティングシステムのプロセス、及びＳＭＴプロセッサのそれぞれに関して、任意の標本区間かつ任意の区分で、ＳＭＴの動作モードを考慮したプロセッサ使用量とプロセッサ使用率を、オンラインでかつ非同期な方式で算出することができる。本実施形態においては、特に図７の構成に基づき、これを示した。
【符号の説明】
【０１３８】
００１  計算機
００２ａ、００２ｂ  物理プロセッサ
００３ａ、００３ｂ、００３ｃ、００３ｄ  論理プロセッサ
００４ａ、００４ｂ、００４ｃ、００４ｄ  サイクルカウンタ
００５ａ、００５ｂ、００５ｃ、００５ｄ  タイマ
００６  メモリ
００７  Ｉ／Ｏデバイス
００８ａ、００８ｂ、００８ｃ、００８ｄ  ＳＭＴプロセッサの動作モード（ＭＴ／ＳＴ０／ＳＴ１／省電力）
１００  オペレーティングシステム
１０１  スケジューラ
１０２  プロセッサ使用率モニタ
１０３  ランキュー
１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ  プロセス
１２０ａ、１２０ｂ、１２０ｃ、１２０ｄ  アイドルプロセス
１５０  物理プロセッサの累積プロセッサ使用量ＰＰ＿Ｕ
１５１  物理プロセッサのプロセッサ使用率算出開始プロセッサ使用量ＰＰ＿ＵＳ
１６０  論理プロセッサの同一物理プロセッサに属する相手論理プロセッサへのポインタ
１６１  論理プロセッサの累積プロセッサ使用量ＬＰ＿Ｕ
１６２  論理プロセッサの累積走行時間ＬＰ＿Ｒ
１６３  論理プロセッサの累積ＳＴモード走行時間ＬＰ＿ＳＲ
１６４  論理プロセッサのプロセッサ使用量測定開始時刻ＬＰ＿ＴＵ
１６５  論理プロセッサのプロセッサ使用率算出開始プロセッサ使用量ＬＰ＿ＵＳ
１６６  論理プロセッサの累積休止時間ＬＰ＿Ｈ
１６７  論理プロセッサの最新休止開始時刻ＬＰ＿ＨＳ
１６８  論理プロセッサの最新休止終了時刻ＬＰ＿ＨＥ
１６９  論理プロセッサの相手論理プロセッサの累積休止時間現在値ＬＰ＿ＨＰ
１８０  プロセスの累積プロセッサ使用量ＰＲ＿Ｕ
１８１  プロセスの累積走行時間ＰＲ＿Ｒ
１８２  プロセスの累積ＳＴモード走行時間ＬＰ＿ＳＲ
１８３  プロセスのプロセッサ使用量測定開始時刻ＰＲ＿ＴＵ
１８４  プロセスのプロセッサ使用率算出開始プロセッサ使用量ＰＲ＿ＵＳ
１８５  プロセスの相手論理プロセッサの累積休止時間現在値ＬＰ＿ＨＰ
１９０  ＭＴモード時の論理プロセッサの物理プロセッサ資源割り当て比率ＭＲＴＯ
１９１  プロセッサ使用率算出周期ＵＰＲＤ
２００  ＳＭＴ無効時の物理プロセッサの累積プロセッサ使用量ＰＰ＿Ｕ
２０１  ＳＭＴ無効時の物理プロセッサのプロセッサ使用量測定開始時刻ＰＰ＿ＴＵ
２０２  ＳＭＴ無効時のプロセッサ使用率算出開始プロセッサ使用量ＰＰ＿ＵＳ
２０３  ＳＭＴ無効時のプロセッサ使用率算出周期ＵＰＲＤ
３０１、３０２、３０３、３０４、３０５  ＳＭＴ無効時の従来のプロセッサ使用量とプロセッサ使用率の算出処理の処理ステップ
４０１、４０２、４０３、４０４、４０５、４０６、４０７、４０８、４０９  物理プロセッサ０がＳＭＴ有効であるときの論理プロセッサ０と論理プロセッサ１の動作における時刻Ｔ０〜Ｔ８
４２０、４２１、４２２  論理プロセッサ１の累積休止時間の現在値
５０１、５０２、５０３、５０４  論理プロセッサ０と論理プロセッサ１のイベント時刻の関係
６０１、６０２、６０３  論理プロセッサの累積休止時間更新処理の処理ステップ
７０１、７０２、７０３、７０４、７０５、７０６、７０７、７０８、７０９、７１０、７１１、７１２、７１３、７１４、７１５、７１６、７１７  論理プロセッサの累積プロセッサ使用量更新処理の処理ステップ
８０１、８０２、８０３  論理プロセッサのプロセッサ使用率算出処理の処理ステップ
【図１】
0005542700.tif 000002
【図２】
0005542700.tif 000003
【図３】
0005542700.tif 000004
【図４】
0005542700.tif 000005
【図５】
0005542700.tif 000006
【図６】
0005542700.tif 000007
【図７】
0005542700.tif 000008
【図８】
0005542700.tif 000009
【図９】
0005542700.tif 000010
【図１０】
0005542700.tif 000011
【図１１】
0005542700.tif 000012
【図１２】
0005542700.tif 000013
【図１３】
0005542700.tif 000014
【図１４】
0005542700.tif 000015
【図１５】
0005542700.tif 000016
【図１６】
0005542700.tif 000017