(57)【特許請求の範囲】
【請求項１】
異なる周波数のクロック信号が供給され得るプロセッサを備えるコンピュータに、
前記プロセッサへの割り当て制御の対象である複数の処理単位の中の第１の処理単位の処理の開始制御に応じて、前記クロック信号のパルスを計数するクロックカウンタから読み出した第１の値と、前記第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を第１の差分として前記第１の処理単位を識別する第１の識別情報と関連付けて記憶部に記憶し、
前記第１の処理単位がさらに実行される場合に、前記さらに実行される第１の処理単位の処理の開始制御に応じて前記クロックカウンタから読みだされた第３の値と、前記さらに実行される第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読みだされた第４の値との差分を第２の差分として前記第１の識別情報と関連付けて前記記憶部に記憶し、
前記第２の差分を、前記記憶部に前記第１の識別情報と関連付けて記憶された前記第１の差分に積算して得られる積算値を第１の積算値として、前記第１の識別情報に関連付けて前記記憶部に記憶し、
前記複数の処理単位の中の第２の処理単位が実行される場合に、前記第２の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第５の値と、前記第２の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第６の値との差分である第３の差分を算出し、
前記第２の処理単位と前記第１の処理単位とが同じプログラムについて割り当てられた処理単位である場合に、前記第３の差分と、前記第１の積算値との和を第２の積算値として、前記プログラムを識別するプログラム識別情報に関連付けて前記記憶部に記憶する、
処理を実行させることを特徴とする算出プログラム。
【請求項２】
前記コンピュータに、さらに、
算出された前記第１ないし第３の差分毎に、単位クロック数当たりの所定種類のコスト値を示す係数を乗じて得られるコスト値を算出する、
処理を実行させることを特徴とする請求項１に記載の算出プログラム。
【請求項３】
前記処理の停止制御の実行は、前記処理の処理過程における前記プロセッサの処理状況に応じて判断される、
ことを特徴とする請求項１または請求項２に記載の算出プログラム。
【請求項４】
前記コンピュータに、さらに、
前記プログラムに関する入力制御または出力制御のうち、少なくとも一方の制御を実行させるドライバプログラムの処理単位となる前記複数の処理単位の中の第３の処理単位の処理が実行される場合に、前記第３の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第７の値と、前記第３の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第８の値との差分である第４の差分を算出し、
前記第４の差分と、前記第２の積算値との和を第３の積算値として、前記プログラム識別情報と関連付けて前記記憶部に記憶する、
処理を実行させることを特徴とする請求項１に記載の算出プログラム。
【請求項５】
前記処理単位は、マルチスレッド制御の対象となるスレッドであるか、マルチプロセス制御の対象となるプロセスであるか、または前記コンピュータへのアクセス元に関して行なわれる処理の単位である、
ことを特徴とする請求項１〜３のいずれか１つに記載の算出プログラム。
【請求項６】
異なる周波数のクロック信号が供給され得るプロセッサと、前記クロック信号を計数するクロックカウンタと、メモリを含み、
前記プロセッサが、
前記プロセッサへの割り当て制御の対象である複数の処理単位の中の第１の処理単位の処理の開始制御に応じて、前記クロックカウンタから読み出した第１の値と、前記第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を第１の差分として前記第１の処理単位を識別する第１の識別情報と関連付けて前記メモリに記憶し、
前記第１の処理単位がさらに実行される場合に、前記さらに実行される第１の処理単位の処理の開始制御に応じて前記クロックカウンタから読みだされた第３の値と、前記さらに実行される第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読みだされた第４の値との差分を第２の差分として前記第１の識別情報と関連付けて前記メモリに記憶し、
前記第２の差分を、前記メモリに前記第１の識別情報と関連付けて記憶された前記第１の差分に積算して得られる積算値を第１の積算値として、前記第１の識別情報に関連付けて前記メモリに記憶し、
前記複数の処理単位の中の第２の処理単位が実行される場合に、前記第２の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第５の値と、前記第２の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第６の値との差分である第３の差分を算出し、
前記第２の処理単位と前記第１の処理単位とが同じプログラムについて割り当てられた処理単位である場合に、前記第３の差分と、前記第１の積算値との和を第２の積算値として、前記プログラムを識別するプログラム識別情報に関連付けて前記メモリに記憶する、
処理を実行することを特徴とするコンピュータ。
【請求項７】
前記クロックカウンタが、
前記クロック信号が前記プロセッサに供給されたパルスの数を計数する、
ことを特徴とする請求項６に記載のコンピュータ。
【請求項８】
異なる周波数のクロック信号が供給され得るプロセッサ、メモリ、及びクロックカウンタを含むコンピュータが、
前記クロックカウンタにより、前記クロック信号のパルスを計数し、
前記プロセッサへの割り当て制御の対象である複数の処理単位の中の第１の処理単位の処理の開始制御に応じて、前記クロックカウンタから読み出した第１の値と、前記第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を第１の差分として前記第１の処理単位を識別する第１の識別情報と関連付けて前記メモリに記憶し、
前記第１の処理単位がさらに実行される場合に、前記さらに実行される第１の処理単位の処理の開始制御に応じて前記クロックカウンタから読みだされた第３の値と、前記さらに実行される第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読みだされた第４の値との差分を第２の差分として前記第１の識別情報と関連付けて前記メモリに記憶し、
前記第２の差分を、前記記憶部に前記第１の識別情報と関連付けて記憶された前記第１の差分に積算して得られる積算値を第１の積算値として、前記第１の識別情報に関連付けて前記メモリに記憶し、
前記複数の処理単位の中の第２の処理単位が実行される場合に、前記第２の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第５の値と、前記第２の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第６の値との差分である第３の差分を算出し、
前記第２の処理単位と前記第１の処理単位とが同じプログラムについて割り当てられた処理単位である場合に、前記第３の差分と、前記第１の積算値との和を第２の積算値として、前記プログラムを識別するプログラム識別情報に関連付けて前記メモリに記憶する、
ことを実行させることを特徴とする算出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータに対して用いられる計測技術に関する。
【背景技術】
【０００２】
１つの物理マシンにおいて、複数の仮想マシンによる処理が実行されることがある。物理マシンで処理を実行する仮想マシンについての消費電力の推定を、仮想マシンのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）使用率に基づいて行なう技術がある（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−０３９５１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＣＰＵの使用率は、算出対象のプログラムについての処理により、どの程度の時間ＣＰＵが占有されるかに基づいて算出される。一方で、ＣＰＵの消費電力や発熱を抑制させるため、ＣＰＵの処理負荷などに応じて、回路の同期に用いられる動作周波数（クロック周波数）を変動させる技術がある。ＣＰＵの動作周波数を変動させる制御が行なわれると、変動の前後においてＣＰＵが実際に単位時間当たりに動作した量が変化してしまう。ＣＰＵが動作することで電力が消費されるので、ＣＰＵの動作周波数が変動してＣＰＵの動作量が変わると、ＣＰＵの消費電力も変動する。ＣＰＵを占有する時間に応じて消費電力を見積もる従来の方法では、動作周波数の変動による消費電力の変化が考慮されない。そのため、算出対象のプログラムについて、動作周波数の変動前後でＣＰＵの占有時間が同じ場合には、ＣＰＵが実際に動作した量が変動しているにも関わらず、変動前後の消費電力が同じであると見積もられてしまう、という問題がある。
【０００５】
本発明の一側面においては、異なる周波数のクロック信号が供給され得るプロセッサへの割り当て制御対象である処理単位について、プロセッサの動作量を算出することを目的とする。
【課題を解決するための手段】
【０００６】
開示の算出プログラムは、異なる周波数のクロック信号が供給され得るプロセッサを備えるコンピュータに、  前記プロセッサへの割り当て制御の対象である複数の処理単位の中の第１の処理単位の処理の開始制御に応じて、前記クロック信号のパルスを計数するクロックカウンタから読み出した第１の値と、前記第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を第１の差分として前記第１の処理単位を識別する第１の識別情報と関連付けて記憶部に記憶し、前記第１の処理単位がさらに実行される場合に、前記さらに実行される第１の処理単位の処理の開始制御に応じて前記クロックカウンタから読みだされた第３の値と、前記さらに実行される第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読みだされた第４の値との差分を第２の差分として前記第１の識別情報と関連付けて前記記憶部に記憶し、前記第２の差分を、前記記憶部に前記第１の識別情報と関連付けて記憶された前記第１の差分に積算して得られる積算値を第１の積算値として、前記第１の識別情報に関連付けて前記記憶部に記憶し、前記複数の処理単位の中の第２の処理単位が実行される場合に、前記第２の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第５の値と、前記第２の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第６の値との差分である第３の差分を算出し、前記第２の処理単位と前記第１の処理単位とが同じプログラムについて割り当てられた処理単位である場合に、前記第３の差分と、前記第１の積算値との和を第２の積算値として、前記プログラムを識別するプログラム識別情報に関連付けて前記記憶部に記憶する、処理を実行させる。
【０００７】
開示のコンピュータは、異なる周波数のクロック信号が供給され得るプロセッサと、前記クロック信号を計数するクロックカウンタと、メモリを含み、前記プロセッサが、 前記プロセッサへの割り当て制御の対象である複数の処理単位の中の第１の処理単位の処理の開始制御に応じて、前記クロックカウンタから読み出した第１の値と、前記第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を第１の差分として前記第１の処理単位を識別する第１の識別情報と関連付けて前記メモリに記憶し、前記第１の処理単位がさらに実行される場合に、前記さらに実行される第１の処理単位の処理の開始制御に応じて前記クロックカウンタから読みだされた第３の値と、前記さらに実行される第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読みだされた第４の値との差分を第２の差分として前記第１の識別情報と関連付けて前記メモリに記憶し、前記第２の差分を、前記メモリに前記第１の識別情報と関連付けて記憶された前記第１の差分に積算して得られる積算値を第１の積算値として、前記第１の識別情報に関連付けて前記メモリに記憶し、前記複数の処理単位の中の第２の処理単位が実行される場合に、前記第２の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第５の値と、前記第２の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第６の値との差分である第３の差分を算出し、前記第２の処理単位と前記第１の処理単位とが同じプログラムについて割り当てられた処理単位である場合に、前記第３の差分と、前記第１の積算値との和を第２の積算値として、前記プログラムを識別するプログラム識別情報に関連付けて前記メモリに記憶する、処理を実行する。
【０００８】
開示の算出方法は、異なる周波数のクロック信号が供給され得るプロセッサ、メモリ、及びクロックカウンタを含むコンピュータが、前記クロックカウンタにより、前記クロック信号のパルスを計数し、前記プロセッサへの割り当て制御の対象である複数の処理単位の中の第１の処理単位の処理の開始制御に応じて、前記クロックカウンタから読み出した第１の値と、前記第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を第１の差分として前記第１の処理単位を識別する第１の識別情報と関連付けて前記メモリに記憶し、前記第１の処理単位がさらに実行される場合に、前記さらに実行される第１の処理単位の処理の開始制御に応じて前記クロックカウンタから読みだされた第３の値と、前記さらに実行される第１の処理単位の処理の停止制御に応じて前記クロックカウンタから読みだされた第４の値との差分を第２の差分として前記第１の識別情報と関連付けて前記メモリに記憶し、前記第２の差分を、前記記憶部に前記第１の識別情報と関連付けて記憶された前記第１の差分に積算して得られる積算値を第１の積算値として、前記第１の識別情報に関連付けて前記メモリに記憶し、前記複数の処理単位の中の第２の処理単位が実行される場合に、前記第２の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第５の値と、前記第２の処理単位の処理の停止制御に応じて前記クロックカウンタから読み出した第６の値との差分である第３の差分を算出し、前記第２の処理単位と前記第１の処理単位とが同じプログラムについて割り当てられた処理単位である場合に、前記第３の差分と、前記第１の積算値との和を第２の積算値として、前記プログラムを識別するプログラム識別情報に関連付けて前記メモリに記憶する。
【発明の効果】
【０００９】
本発明の一側面において、異なる周波数のクロック信号が供給され得るプロセッサへの割り当て制御対象である処理単位について、プロセッサの動作量を算出することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、コンピュータ１の機能構成例を示す。
【図２】図２は、コンピュータ１のソフトウェア構成例を示す。
【図３】図３は、コンピュータ１のハードウェア構成例を示す。
【図４】図４は、スレッド制御に応じたデータ読出しの関係を示す。
【図５】図５は、スレッドコンテキストのデータ構造例を示す。
【図６】図６は、スレッド制御に応じたデータ読出しの関係を示す。
【図７】図７は、実行制御部１１１の制御フローを示す。
【図８】図８は、スレッド停止・終了の処理フローを示す。
【図９】図９は、スレッド起動・生成の処理フローを示す。
【図１０】図１０（ａ）−（ｃ）は、プロセスとスレッドとの関係を示す。
【図１１】図１１は、プログラムとプロセスとの関係を示す。
【図１２】図１２は、プログラムごとの動作量を示す。
【図１３】図１３は、プログラムごとの動作量算出のフローを示す。
【図１４】図１４は、プログラムごとの動作量算出のフローを示す。
【図１５】図１５は、計測結果を表示する画面情報の例を示す。
【図１６】図１６は、コンピュータ１のソフトウェア構成例を示す。
【図１７】図１７は、仮想マシンごとの動作量算出のフローを示す。
【図１８】図１８は、仮想マシンとプログラムとの関係を示す。
【図１９】図１９は、仮想マシンごとの動作量を示す。
【図２０】図２０は、計測結果を表示する画面情報の例を示す。
【図２１】図２１は、コンピュータ１のソフトウェア構成を示す。
【図２２】図２２は、仮想マシンとプログラムとの関係を示す。
【図２３】図２３は、仮想マシンごとの動作量を示す。
【図２４】図２４は、システムの構成例を示す。
【図２５】図２５は、コンピュータ１のソフトウェア構成例を示す。
【図２６】図２６は、処理対象の単位の切り替えについてのシーケンスを示す。
【図２７】図２７（ａ）−（ｃ）は、プロセスとスレッドとの関係を示す。
【図２８】図２８は、プログラムとプロセスとの関係を示す。
【図２９】図２９は、プログラムごとの動作量を示す。
【発明を実施するための形態】
【００１１】
プロセッサの消費電力は、プロセッサに供給されるクロック信号の周波数の変動に応じて変動する。プロセッサは、１周期分のクロック信号に応じてプロセッサ内の回路の充放電を１回行なうため、クロック信号の周波数の変動により単位時間当たりの充放電回数が変動するためである。クロック信号の周波数の変動は、例えば、クロック信号の供給元を、異なる周波数のクロック信号を生成する複数の発振器間で切り替えた場合や、１つの発振器により生成されるクロック信号の周波数に経時的にズレが生じた場合などに起こる。
【００１２】
例えば、ある時間間隔ｔにおいて、周波数ｆ１で動作した場合と、周波数ｆ２で動作した場合とにおけるプロセッサの充放電回数は、それぞれｆ１・ｔ，ｆ２・ｔとなる。プロセッサが動作した時間で消費電力を見積もる方法があるが、時間でプロセッサの動作量を評価する場合には、数式１で示すｔを越えた時間計測すると、充放電１回分以上の誤差が生じることとなる。言い換えると、ある時間範囲ｔにおけるプロセッサの動作量を計測する場合には、クロックの周波数が数式１に示す（ｆ１−ｆ２）以上に変動すると、クロック周期１回分以上の誤差が生じる。そのため、計測したい時間範囲ｔに対して周波数が数式１に示す（ｆ１−ｆ２）以上に変動する場合においては、クロック信号の周波数の変動を考慮する必要が生じる。
ｔ≦｜１／（ｆ１−ｆ２）｜  ・・・  （数式１）
【００１３】
以下に本発明の実施形態について図面に基づいて説明する。まず、第１の実施形態のコンピュータ１の構成について、図１〜３に基づいて説明する。
【００１４】
図１は、コンピュータ１の機能構成例を示す。コンピュータ１は、処理部１１及び記憶部１２を含み、処理部１１は実行部１１０、実行制御部１１１、クロックカウンタ１１２、読出処理部１１３、算出部１１４及び記憶制御部１１５を含む。
【００１５】
図２は、コンピュータ１のソフトウェア構成例を示す。図２に示すソフトウェア構成例においては、アプリケーションプログラム２３ａ、アプリケーションプログラム２３ｂ、アプリケーションプログラム２３ｃの複数種類のアプリケーションプログラムがコンピュータ１において動作する。コンピュータ１で動作するアプリケーションプログラムはアプリケーションプログラム２３ａ−ｃに限定するものでなく、例えば、アプリケーションプログラム２３ａ―ｃ以外のアプリケーションプログラムもコンピュータ１で動作しうる。さらに、コンピュータ１において、アプリケーション２３ａ−ｃの処理をハードウェア（ＨＷ）２１に実行させるための制御・管理を行なうオペレーションシステム（ＯＳ）２２ａが動作する。ハードウェア２１は、図３を用いて後述されるハードウェアである。
【００１６】
図３は、コンピュータ１のハードウェア構成例を示す。コンピュータ１は、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記録媒体３０５、通信インターフェース（Ｉ／Ｆ）３０６、入力インターフェース（Ｉ／Ｆ）３０７、出力インターフェース（Ｉ／Ｆ）３０８を含む。プロセッサ３０１は、プロセッサ３０１の動作に関連する回路との同期に用いられる動作周波数を変動させて動作する。プロセッサ３０１、ＲＡＭ３０２、ＲＯＭ３０３、ドライブ装置３０４、通信インターフェース３０６、入力インターフェース３０７、出力インターフェース３０８は、バス３０９と接続されている。通信インターフェース３０６は、ネットワーク３１０と接続されている。入力インターフェース３０７は、入力装置３１１と接続されており、出力インターフェース３０８は、出力装置３１２と接続されている。
【００１７】
図１〜３に示されるコンピュータ１の各構成について説明する。
【００１８】
処理部１１の機能は、例えば、プロセッサ３０１がＯＳ２２ａ、アプリケーションプログラム２３ａ−ｃなどに基づいて処理を行なうことで実現される。また、記憶部１２の機能は、例えば、ＲＡＭ３０２または記録媒体３０５などにプロセッサ３０１の制御により情報が読み書きされることで実現される。
【００１９】
実行部１１０は、後述される実行制御部１１１の制御に応じて、アプリケーションプログラム２３ａ−ｃの処理を実行する。実行部１１０の機能は、例えば、記録媒体３０５からＲＡＭ３０２に読みだされたアプリケーションプログラム２３ａ−ｃをプロセッサ３０１が読み込み、読み込んだプログラムに含まれる命令をプロセッサ３０１が処理することで実現される。
【００２０】
実行制御部１１１は、実行部１１０により行なわれるアプリケーションプログラム２３ａ−ｃの処理のスケジューリングを行なう。各アプリケーションプログラムの処理をマルチプロセスで行なう場合には、実行制御部１１１は、各アプリケーションプログラムの処理単位であるプロセスをプロセッサ３０１に割り当てる制御を行なう。プロセスを割り当てるタイミングは、実行制御部１１１に含まれるプロセススケジューラのアルゴリズムに基づく処理状況についての判断により決められる。また、各アプリケーションプログラムの処理をマルチスレッドで行なう場合にも同様に、実行制御部１１１は、各アプリケーションプログラムの処理単位であるスレッドをプロセッサ３０１に割り当てる制御を行なう。スレッドを割り当てるタイミングは、実行制御部１１１に含まれるスレッドスケジューラのアルゴリズムに基づく処理状況についての判断により決められる。実行制御部１１１の機能は、例えば、プロセススケジューラ又はスレッドスケジューラを含むＯＳ２２ａに基づいて、プロセッサ３０１とＲＡＭ３０２が動作することにより実現される。
【００２１】
クロックカウンタ１１２は、プロセッサ３０１の処理において回路の同期に用いられるクロックが動作する周期に応じて加算されるカウンタであり、プロセッサ３０１に備えられている。プロセッサ３０１がマルチコアであれば、各コアについてカウンタが備えられる。マルチコアである場合には、各コアにおける動作量は、各コアに設けられたカウンタに基づいて計測される。以下の説明において特にことわらない限り、プロセッサ３０１が１つのコアを含む場合を例に挙げて説明する。クロックカウンタ１１２は、あるタイミングにおいて、プロセッサ３０１がそのタイミングまでにどれだけの動作を行なったかを示す。例えば、クロックカウンタ１１２は、ハードウェア２１の起動時に計数を開始し、プロセッサ３０１の動作周波数で時間が１周期経過するたびに（１パルスごとに）、クロックカウンタ１１２用に設けられたレジスタに例えば１ｂｉｔずつ加算するなどの制御を行なう。クロックカウンタ１１２の値を格納するレジスタは、例えば、３２ｂｉｔや６４ｂｉｔなどのサイズの領域を設ける。以下の説明においては、読出し命令により読みだされたクロック値が、変数ｃｌｋ１として扱われる。
【００２２】
読出処理部１１３は、実行制御部１１１によるスケジューリングのうち、プロセス又はスレッドを生成、起動（実行状態にさせる）、停止（休眠状態にさせる）又は終了させる制御に応じて、プロセッサ３０１に備えられたクロックカウンタ１１２から、クロック値を読み出す処理を行なう。読出し処理部１１３の機能は、例えば、プロセッサ３０１が、スケジューリング制御を実行させる命令群に読出し命令を追加されたＯＳ２２ａに基づく制御を実行することにより実現される。
【００２３】
この読出し命令は、プロセッサ３０１に備えられたクロックカウンタ１１２の値を読み出す命令であって、例えば、Ｐｅｒｆｏｒｍａｎｃｅ  ｍｏｎｉｔｏｒｉｎｇ機構（ＣＰＵ種毎に実装）などである。
【００２４】
算出部１１４は、実行制御部１１１の制御に応じて、読出処理部１１３により読みだされたクロック値（ｃｌｋ１）を用いた演算（数式２〜４参照）を行なう。例えば、算出部１１４は、実行制御部１１１によるプロセス又はスレッドの生成又は起動に応じて読出処理部１１３がクロック値（ｃｌｋ１）を読み出した場合には、変数ｃｌｋ０にクロック値(ｃｌｋ１)を代入する演算（数式２参照）を行なう。また、算出部１１４は、実行制御部１１１によるプロセス又はスレッドの停止又は終了に応じて読出処理部１１３がクロック値（ｃｌｋ１）を読み出した場合には、クロック値（ｃｌｋ１）と、値（ｃｌｋ０）との差分ｄを算出する（数式３参照）。さらに、例えば、算出部１１４は、クロック値（ｃｌｋ１）と値（ｃｌｋ０）との差分ｄを積算値Ｓに積算する演算（数式４参照）を行なう。この積算値Ｓは、後述の記憶制御部１１５により、記憶部１２に対して書込みと読出しが行なわれる値である。値（ｃｌｋ０）と積算値Ｓの初期値は、例えば０などの値である。また、数式２〜４に含まれる「＝」は、等号ではなく、代入を示す演算子である。
ｃｌｋ０＝ｃｌｋ１      ・・・  （数式２）
ｄ＝ｃｌｋ１−ｃｌｋ０  ・・・  （数式３）
Ｓ＝Ｓ＋ｄ              ・・・  （数式４）
【００２５】
算出部１１４の機能は、ＯＳ２２ａによるプロセス又はスレッドのスレッド制御（スレッドの生成、起動、停止、終了の制御）の際に、プロセッサ３０１にクロック値（ｃｌｋ１）に基づいて、数式２〜４の演算を実行させることにより実現される。クロック値ｃｌｋ０、クロック値ｃｌｋ１は、それぞれプロセッサ３０１内のレジスタなどに格納される。
【００２６】
記憶制御部１１５は、実行制御部１１１に応じて記憶部１２に記憶されたデータの読み出し、書き込みを行なう。例えば、記憶制御部１１５は、記憶部１２から、プロセス又はスレッドの停止又は終了制御に応じて、停止又は終了制御の対象のプロセス又はスレッドのコンテキストを読み出す。コンテキストは、それぞれのプロセス又はスレッドに関する情報であり、それぞれのプロセス又はスレッドに対応する積算値Ｓを含む。この記憶制御部１１５の機能は、プロセッサ３０１が、ＲＡＭ３０２に格納された、停止又は終了制御の対象となるプロセス又はスレッドに対応するプロセスコンテキスト又はスレッドコンテキストから積算値Ｓを読み出すことで実現される。
【００２７】
また、例えば、記憶制御部１１５は、算出部１１４によって算出された積算値Ｓと、実行制御部１１１で停止又は終了されるプロセス又はスレッドとを関連付けた情報と、を記憶部１２に記憶させる。記憶制御部１１５の機能は、プロセッサ３０１が、プロセッサ３０１の数式３及び数式４の演算により算出された積算値Ｓを、ＲＡＭ３０２に格納された、停止又は終了されるプロセス又はスレッドに対応するプロセスコンテキスト又はスレッドコンテキストに書き込むことにより実現される。さらには、例えば、実行制御部１１１によるプロセスまたはスレッドの起動または生成においては、記憶制御部１１５は、プロセッサ３０１の数式２の演算により算出された値ｃｌｋ０を、起動または生成されるプロセスコンテキストまたはスレッドコンテキストに格納する。
【００２８】
また、他の方法では、記憶制御部１１５は、算出部１１４が差分ｄを算出するたびに、算出された差分ｄを対応するプロセスコンテキストまたはスレッドコンテキストに格納する。同じプロセスまたはスレッドが複数回実行された場合には、差分ｄが同じプロセスコンテキストまたはスレッドコンテキストに複数格納される。
【００２９】
処理部１１に含まれる実行部１１０、実行制御部１１１、クロックカウンタ１１２、読出処理部１１３、算出部１１４及び記憶制御部１１５の上記の処理により、プロセッサ３０１で実行されるプロセス又はスレッドごとに、プロセス又はスレッドの処理に要したクロック数が計測される。
【００３０】
図３に示した各ハードウェアについて、さらに以下に説明する。
【００３１】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記録媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記録媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記録媒体３０５は、例えば、ハードディスク、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記録媒体である。また、例えば、コンピュータ１は、複数種類の記録媒体それぞれについて、ドライブ装置３０４及び記録媒体３０５を設ける。
【００３２】
入力装置３１１は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力装置は、コンピュータ１の制御に応じて情報を出力する装置である。出力装置は、例えば、ディスプレイなどの画像出力装置や、スピーカーなどの音声出力装置などである。また、タッチスクリーンなどの入出力装置は、例えば、入力装置３１１及び出力装置３１２として用いられる。
【００３３】
図４〜６に基づいて、スレッド制御の際のデータ読出しの関係について説明する。図４〜６においては、マルチスレッド制御が行なわれる場合について説明しているが、マルチプロセス制御が行なわれる場合であっても、データ読出しの関係は同様である。
【００３４】
図４は、実行部１１０及びクロックカウンタ１１２と、記憶部１２に格納されたスレッドコンテキストとのデータ読出しの関係を示す。
【００３５】
実行制御部１１１は、スレッドスケジューラに基づいて、スレッドの起動を行なう（スレッドが存在しない場合にはスレッドの生成を行なう）。実行制御部１１１のスレッド起動処理中に読出処理部１１３は、クロックカウンタ１１２からクロック数の読み出し処理を行なう（矢印（１）、（２））。読み出したクロック数（ｃｌｋ１）は、算出部１１４及び記憶制御部１１５の処理により、起動時クロック数（ｃｌｋ０）として、図５に示すスレッドコンテキストＴ１に書き込まれる（ｃｌｋ０の書き込み：矢印（３））。スレッドの起動が完了すると、実行部１１０は、図５に示すスレッドコンテキストに含まれる情報に基づいて、起動されたスレッドについての処理を行なう。
【００３６】
図５は、スレッドコンテキストＴ１のデータ構造の一例を示す。スレッドコンテキストＴ１は、プロセッサ３０１がスレッドの処理に用いられる処理情報と、スレッドの管理情報と、を含む。処理情報は、プログラムカウンタ、スタックポインタなどのデータ読み出し位置を指定する情報である。実行部１１０は、スレッドコンテキストＴ１中の情報に指定されたプログラムカウンタ、スタックポインタなどに基づいて処理を行なう。スレッドの管理情報は、スレッドのＩＤ、時刻情報（スレッドが起動された時刻ｔ０、スレッド処理時間の積算値Ｓｔなど）、クロック数情報（スレッドが起動された際のクロック数ｃｌｋ０、スレッド処理に要したクロック数の積算値Ｓ）を含む。
【００３７】
マルチプロセス制御に用いるプロセスコンテキストは、例えば、図５に示すスレッドコンテキストと同様のデータ構造図を有し、スレッドＩＤではなくプロセスＩＤを含む。また、プロセスコンテキストは、例えば、さらに、プロセス内で動作するスレッドを示す情報を含む。
【００３８】
実行制御部１１１は、他のスレッドへの切り換えなどにより、スレッドの停止処理を行なう。記憶制御部１１５は、スレッドの停止処理において、プログラムカウンタ、スタックポインタなどの処理情報をスレッドコンテキストＴ１に保存する。スレッド停止処理中に、読出処理部１１３は、クロックカウンタ１１２からクロック数の読み出し処理を行なう（矢印（４）、（５））。算出部１１４及び記憶制御部１１５は、読み出したクロック数（ｃｌｋ１）と、起動処理時にスレッドコンテキストＴ１に書き込んだクロック数（ｃｌｋ０の取得：矢印（６））とに基づいて、積算値Ｓを算出して、スレッドコンテキストＴ１に書き込む（矢印（７））。
【００３９】
コンピュータ１は、上述の処理により、矢印（１）（２）の読み出し時点から、矢印（４）（５）の読み出し時点までのクロック数をスレッドコンテキストに反映させることができる。
【００４０】
図６は、スレッドが複数存在する場合のデータ読出しの関係を示す。図６の「スレッドａ」で示す期間は、スレッドａについてのスレッド起動、スレッドの処理及びスレッド停止の処理に要する期間を示す。
【００４１】
スレッドａの起動及び停止における記憶制御部１１５の書き込み処理は、スレッドコンテキスト（ａ）に対して、矢印（１）（２）で読みだしたクロック数に基づいて行なわれる。スレッドコンテキスト（ａ）は、スレッドａに関するスレッドコンテキストである。また、スレッドｂの起動及び停止における記憶制御部１１５の書き込み処理は、スレッドコンテキスト（ｂ）に対して、矢印（３）（４）で読みだしたクロック数に基づいて行なわれる。スレッドコンテキスト（ｂ）はスレッドｂに関するスレッドコンテキストである。さらに、スレッドｂについての処理後に、再度スレッドａの処理が行なわれた場合には、スレッドａの起動及び停止における記憶制御部１１５の書き込み処理は、スレッドコンテキスト（ａ）に対して、矢印（５）（６）で読みだしたクロック数に基づいて行なわれる。上記の記憶制御部１１５によりスレッドコンテキストに含まれる積算値Ｓが更新されることで、スレッドごとに処理に要したクロック数が計測される。
【００４２】
また、本実施形態において、プロセッサ３０１の動作周波数は変動する。例えば、矢印Ｘで示した時点でプロセッサの動作周波数が変化したとすると、矢印（１）（２）間と矢印（５）（６）間とでは、プロセッサ３０１の動作周波数が異なる。すなわち、単位時間当たりの動作量が異なる。したがって従来のプロセッサ３０１を占有する時間を計測する方法により、矢印（１）（２）間の時間と矢印（５）（６）間の時間とに基づいてプロセッサ３０１の負荷を評価すると、単位時間あたりの実際の動作量が異なるので不整合が生じてしまう。しかしながら、本実施形態においては、動作周波数が変動する場合にも、変動前後の矢印（１）（２）間と矢印（５）（６）間とについて、実際にプロセッサ３０１が動作した量を計測できる。
【００４３】
図７は、スレッドごとに処理に要したクロック数をカウントするための処理部１１の制御フローを示す。この制御は、例えば、プロセッサ３０１がＯＳ２２ａに基づいて行なう制御である。プロセスごとに処理に要するクロック数をカウントする場合も図７と同様のフローが行なわれる。ただし、その場合はスレッドではなく、プロセスを対象として制御が行なわれる。
【００４４】
まず実行制御部１１１は、スレッド制御のイベントが発生したか否かを判断する（Ｓ１１）。実行制御部１１１によりイベントが発生したと判断された場合（Ｓ１１：Ｙｅｓ）に、実行制御部１１１は、スレッドの終了または停止の処理（Ｓ１２）を開始する。このＳ１２の処理については後述する。また、Ｓ１２の処理が終わると、実行制御部１１１は、スレッド生成または起動の処理（Ｓ１３）を開始する。Ｓ１３の処理についても後述する。スレッド制御のイベントを発生させる判断は、実行中のスレッドの処理が完了する場合や、他のスレッドによる割り込みが発生した場合などのプロセッサ３０１に割り当てられる処理の状況に応じて、ＯＳ２２ａに含まれるマルチスレッドのスケジューラによって行なわれる。
【００４５】
図８は、前述のスレッド停止または終了の処理（Ｓ１２）の処理例を示す。まず、実行制御部１１１は、発生したイベントがスレッド停止であるか否かを判断する（Ｓ２１）。発生したイベントが、スレッド停止ではない場合（Ｓ２１：Ｎｏ）には、実行制御部１１１は、発生したイベントがスレッド終了であるか否かを判断する（Ｓ２９）。イベントの発生やイベントの発生に応じて行なう処理は、ＯＳ２２ａに含まれるマルチスレッドのスケジューラによって、割り込みが起きたか否か、スレッドを処理が終了したか、などの状況に基づいて判断される。
【００４６】
発生したイベントがスレッド停止である場合（Ｓ２１：Ｙｅｓ）には、実行制御部１１１は、プロセッサ３０１が処理中のスレッドについて命令の読み出しを行なうことを停止する（Ｓ２２）。Ｓ２２の処理後、実行制御部１１１は、命令の読み出しを停止されたスレッドに関する処理情報を取得する。例えば、実行制御部１１１は、プロセッサ３０１のプログラムカウンタとスタックポインタの値を読み出す。さらに、実行制御部１１１は、記憶制御部１１５に、読み出した処理情報を、記憶部１２に記憶された、停止処理中のスレッドに対応するスレッドコンテキストに記憶させる制御を行なう（Ｓ２３）。
【００４７】
Ｓ２３の処理が行なわれた場合に、読出処理部１１３、算出部１１４及び記憶制御部１１５の処理により、Ｓ２４〜Ｓ２７の停止処理中のスレッドのクロック数の更新処理が行なわれる。まず、読出処理部１１３が、クロックカウンタ１１２からクロック値（ｃｌｋ１）を読み出し（Ｓ２４）、記憶制御部１１５が、停止処理中のスレッドに対応するスレッドコンテキストから、起動時クロック値（ｃｌｋ０）と積算値Ｓとを読み出す（Ｓ２５）。このＳ２５の処理は、Ｓ２４よりも先に行なわれてもよい。
【００４８】
算出部１１４は、Ｓ２４、Ｓ２５で読み出したクロック値（ｃｌｋ１）と起動時クロック値（ｃｌｋ０）と積算値Ｓとを用いて、数式３及び数式４の演算を行なって、積算値Ｓを更新する（Ｓ２６）。記憶制御部１１５は、更新された積算値Ｓを、記憶部１２の停止処理中のスレッドに対応するスレッドコンテキストに記憶させる（Ｓ２７）。Ｓ２７の処理を実行すると、Ｓ１２の処理が終了する（Ｓ２８）。
【００４９】
Ｓ２９の判断の結果、発生したイベントがスレッド終了である場合（Ｓ２９：Ｙｅｓ）には、読出処理部１１３、算出部１１４及び記憶制御部１１５の処理により、Ｓ３０〜Ｓ３３の終了処理中のスレッドのクロック数の更新処理が行なわれる。Ｓ３０〜Ｓ３３の処理は、Ｓ２４〜Ｓ２７と同様の処理である。
【００５０】
Ｓ３３の処理後、記憶制御部１１５は、終了処理中のスレッドに対応するスレッドコンテキストに含まれるスレッドＩＤと積算値Ｓとを、記憶部１２に含まれる別の記憶領域に記憶させる（Ｓ３４）。これにより、スレッドコンテキストの記憶領域が解放されても、終了されたスレッドについての動作量を示すデータを残しておくことができる。Ｓ３４の処理が終了した場合に、Ｓ１２の処理が終了する（Ｓ２８）。
【００５１】
Ｓ２９の判断の結果、スレッド終了でない場合（Ｓ２９：Ｎｏ）には、Ｓ１２の処理が終了する（Ｓ２８）。例えば、コンピュータ１が起動した直後にスレッドを立ち上げる場合などには、事前に処理中のスレッドがないため、Ｓ２９の判断においてスレッド終了でないという判断が行なわれる。
【００５２】
図９は、前述のスレッド生成または起動の処理（Ｓ１３）の処理例を示す。まず、実行制御部１１１は、発生したイベントがスレッド起動であるか否かを判断する（Ｓ４１）。発生したイベントがスレッド停止ではない場合（Ｓ４１：Ｎｏ）には、実行制御部１１１は、発生したイベントがスレッド終了であるか否かを判断する（Ｓ４７）。イベントの発生やイベントの発生に応じて行なう処理は、ＯＳ２２ａに含まれるマルチスレッドのスケジューラによって、割り込みが起きたか否か、スレッドを処理が終了したか、などの状況に基づいて判断される。
【００５３】
発生したイベントがスレッド起動である場合（Ｓ４１：Ｙｅｓ）には、読出処理部１１３は、クロック値（ｃｌｋ１）をクロックカウンタ１１２から読み出す（Ｓ４２）。Ｓ４２の処理の処理によりクロック値（ｃｌｋ１）が読み出されると、算出部１１４は数式２に基づいて、変数ｃｌｋ０にクロック値（ｃｌｋ１）を代入する。記憶制御部１１５は、値を代入されたｃｌｋ０を、起動させるスレッドに対応するスレッドコンテキストに記憶させる（Ｓ４３）。
【００５４】
さらに、記憶制御部１１５は、記憶部１２から、記憶させるスレッドに対応するスレッドコンテキスト内の処理情報を読み出す（Ｓ４４）。処理情報は、起動させるスレッドの処理に用いられる情報であり、例えばプログラムカウンタやスタックポインタの値などである。Ｓ４４の処理は、Ｓ４２やＳ４３の処理と前後しても構わない。Ｓ４４の処理が行なわれると、実行制御部１１１は、Ｓ４４で読み出した処理情報に基づく処理を実行部１１０に開始させる（Ｓ４５）。Ｓ４５の処理を行なうと、Ｓ１３の処理は終了する（Ｓ４６）。
【００５５】
Ｓ４７の判断の結果、発生したイベントがスレッド生成である場合（Ｓ４７：Ｙｅｓ）には、実行制御部１１１はスレッドコンテキストの生成を行なう（Ｓ４８）。Ｓ４８の処理において、実行制御部１１１の指示に基づいて、記憶制御部１１５は、記憶部１２にスレッドコンテキストを記憶する記憶領域を決定し、生成されるスレッドのスレッドＩＤをその記憶領域内に記憶させる。
【００５６】
また、読出処理部１１３は、クロックカウンタ１１２からクロック値（ｃｌｋ１）を読み出す（Ｓ４９）。Ｓ４９の処理は、Ｓ４８の処理よりも前に行われてもよい。Ｓ４９の処理の処理によりクロック値（ｃｌｋ１）が読み出されると、算出部１１４は数式２に基づいて、変数ｃｌｋ０にクロック値（ｃｌｋ１）を代入する。記憶制御部１１５は、値を代入されたｃｌｋ０を、起動させるスレッドに対応するスレッドコンテキストに記憶させる（Ｓ５０）。Ｓ５０の処理が行なわれると、実行制御部１１１は、実行部１１０による処理を開始させる（Ｓ５１）。Ｓ５１の処理を行なうと、Ｓ１３の処理は終了する（Ｓ４６）。Ｓ１３の処理が終了すると、実行制御部１１１は、Ｓ１１の処理を行ない、スレッド制御のイベントの発生を検知する。
【００５７】
コンピュータ１が上記の処理を実行することにより、コンピュータ１で動作するスレッドまたはプロセスごとに、プロセッサが処理に要したクロック数が計測される。プロセッサの動作により電力が消費されるので、プロセッサが実際に動作した量を計測することは、プロセッサの消費電力などのプロセッサの動作に要したコストの推定に有用である。例えば、占有時間に応じてプロセッサの消費電力を見積もる従来の方法では、動作周波数の変動前後で消費電力に不整合が生じてしまう。その一方、上記の処理によれば、プロセッサの実際の動作量を取得しているため、プロセッサの動作周波数に変動があっても変動した動作周波数に応じて消費される電力値を見積もることができる。本実施形態では、プロセスやスレッドごとに、処理に要したクロック数を測定することができるので、プロセスやスレッドごとの消費電力の推定に有用な動作量が把握可能となる。また、コンピュータ１は、プロセッサの動作に要したコストの量として、消費電力以外にも、例えば、プロセッサが消費する電力の発電により生じた二酸化炭素の量、プロセッサから発熱される熱量などについてプロセッサの動作量に応じて推定する。
【００５８】
消費電力の推定値は、例えば、プロセッサの１クロック当たりの消費電力量を予め算出しておき、本実施形態により計測したクロック数と、予め算出した１クロック当たりの消費電力量との乗算により算出される。二酸化炭素量の推定値についても同様に、例えば、予め算出したプロセッサの１クロック当たりの排出二酸化炭素量と、本実施形態により計測したクロック数との乗算により算出される。また、例えば、排出二酸化炭素量の算出において、プロセッサに共有される電力の発電形態に応じて、本実施形態により計測されるクロック数に乗じる値の切り替えが行なわれる。例えば、化石燃料を用いた発電と、自然エネルギーを用いた発電とで、２種類の値が用いられる。プロセッサから発生する熱量についても同様に、例えば、予め算出したプロセッサの１クロック当たりの発熱量を示す値をクロック数に乗算するなどの演算により求めることができる。
【００５９】
また、プロセッサは、プロセッサ内の回路への充放電に加えてリーク電流によっても電力を消費する。そのため、一つの例としては、実行部１１０は、電力消費を算出する場合に、リーク電流による消費電力量を、クロック数に基づいて求められた消費電力量に合算し、合算した値を出力する。リーク電流による消費電力量は、例えば、処理部１０によるクロック数の計数と同様の処理により、プロセスやスレッドごとに、処理に要した時間が計測され、計測された時間に、実行部１１０が、リーク電流による単位時間当たりの消費電力量を乗算することで算出される。その際、処理部１０に含まれる読出部１１３は、クロックカウンタ１１２からクロック数を読み出す際に、タイマから時刻情報を取得する。さらに、実行制御部１１１、記憶制御部１１５は、クロック数の計数と同様の処理を行ない、プロセスコンテキストまたはスレッドコンテキストに、処理に要した積算時間を格納する。
【００６０】
第２の実施形態について、以下に説明する。第２の実施形態においては、第１の実施形態のコンピュータ１が用いられる。第２の実施形態においては、コンピュータ１において動作するアプリケーションプログラム２３ｃにより、アプリケーションプログラム２３ａ、２３ｂの処理によるプロセッサ３０１の動作量の可視化処理が行なわれる。実行部１１０は、アプリケーションプログラム２３ｃに基づいて、例えば以下に説明する可視化処理を行なう。
【００６１】
図１０（ａ）−（ｃ）は、プロセスとスレッドの関係を示すテーブルＴ２ａ−Ｔ２ｃを示す。図１０（ａ）のテーブルＴ２ａは、プロセスＩＤが「Ａ−１」であるプロセスが、スレッドＩＤ「ａ」のスレッドを含むプロセスであることを示す。図１０（ｂ）のテーブルＴ２ｂは、プロセスＩＤが「Ｂ−１」であるプロセスが、スレッドＩＤ「ｂ」のスレッドと、スレッドＩＤ「ｃ」のスレッドと、を含むプロセスであることを示す。図１０（ｃ）のテーブルＴ２ｃは、プロセスＩＤが「Ａ−２」であるプロセスが、スレッドＩＤ「ｄ」のスレッドを含むプロセスであることを示す。図１０（ｂ）に示すように、１つのプロセスにおいて、２つ以上のスレッドが生成されることもある。プロセスとスレッドの関係を示すテーブルは、図１０（ａ）−（ｃ）に限らず、コンピュータ１で動作するプロセスそれぞれについて生成される。
【００６２】
図１１は、プログラムとプロセスとの関係を示すテーブルを示す。テーブルＴ２には、コンピュータ１で実行中または過去に実行されたプログラムと、各プログラムの処理単位であるプロセスとを対応付けた情報である。テーブルＴ２及びテーブルＴ３は、記憶部１２に記憶される。図１１では、プログラムＩＤ「Ａ」とプロセスＩＤ「Ａ−１」及び「Ａ−２」とが関連付けられており、プログラムＩＤ「Ｂ」とプロセスＩＤ「Ｂ−１」及び「Ｂ−２」とが関連付けられており、プログラムＩＤ「Ｃ」とプロセスＩＤ「Ｃ−１」が関連付けられている。ちなみに、アプリケーションプログラム２３ａのプログラムＩＤが「Ａ」であり、アプリケーションプログラム２３ｂのプログラムＩＤが「Ｂ」であり、アプリケーションプログラム２３ｃのプログラムＩＤが「Ｃ」であるとする。
【００６３】
実行部１１０は、コンピュータ１で動作するプログラム、プロセス、スレッドの情報を抽出し、プロセスとスレッドとの関係を示すテーブルＴ２と、プログラムとプロセスの関係を示すテーブルＴ３と、を更新する。この更新は、定期的、コンピュータ１に行なわれる操作に応じたタイミング、予め定められたタイミングなどのタイミングで行なわれる。実行部１１０は、更新するタイミングになると、各プロセスのプロセスコンテキスト内に格納されたスレッドＩＤを取得し、取得したスレッドＩＤを各プロセスに対応するテーブルＴ２に格納することで、テーブルＴ２を更新する。また、実行部１１０は、更新するタイミングになると、実行制御部１１１がプロセス制御に用いるプロセス管理テーブル（不図示）に格納されたプロセスＩＤを取得し、取得したプロセスＩＤを各プログラムに対応づけてテーブルＴ３に格納して、テーブルＴ３を更新する。
【００６４】
さらに、実行部１１０は、コンピュータ１で実行された各スレッドコンテキスト又は各プロセスコンテキスト内の積算値Ｓを収集して、収集した積算値ＳとテーブルＴ２、Ｔ３とに基づいてコンピュータ１で動作するプログラムそれぞれの動作量を算出する。プロセスコンテキストまたはスレッドコンテキストに、積算値Ｓでなく、差分ｄを複数格納している場合には、プロセスコンテキストまたはスレッドコンテキスト内に記憶された差分ｄの総和を算出し、その総和を積算値Ｓとして取り扱う。各プログラムについての動作量は、例えば図１２に示テーブルＴ４で管理される。テーブルＴ４においては、各プログラムのプログラムＩＤと、そのプログラムについてのプログラム動作量Ｔとが関連付けられている。
【００６５】
図１３は、各プログラムのプログラム動作量Ｔを算出するフローを示す。この処理は、実行部１１０がアプリケーションプログラム２３ｃに従って行なう処理である。プログラム動作量Ｔの算出は、テーブルＴ２、Ｔ３の更新と同様に、定期的、コンピュータ１に行なわれる操作に応じたタイミング、予め定められたタイミングなどのタイミングで行なわれる。Ｓ６１の処理においては、そのタイミングであるか否かが判断される。実行部１１０は、プログラム動作量Ｔ算出のタイミングであると判断された場合（Ｓ６１：Ｙｅｓ）に、テーブルＴ３に示されるプログラムＩＤのうち、未選択のプログラムＩＤを選択する（Ｓ６２）。実行制御部１１０は、Ｓ６２で選択されたプログラムＩＤについての動作量を示す変数Ｄをクリアする（Ｓ６３）。Ｓ６３の処理はＳ６２の処理よりも前に行なわれてもよい。
【００６６】
次に、実行部１１０は、テーブルＴ３で、Ｓ６２で選択されたプログラムＩＤに関連づけられたプロセスＩＤのうち、未選択のプロセスＩＤを選択する（Ｓ６４）。Ｓ６４の処理後、実行部１１０は、テーブルＴ２で、Ｓ６４で選択されたプロセスＩＤに関連付けられたスレッドＩＤのうち、未選択のスレッドＩＤを選択する（Ｓ６５）。
【００６７】
実行部１１０は、Ｓ６５で選択されたスレッドＩＤに対応するスレッドコンテキストから積算値Ｓを読み出す（Ｓ６６）。Ｓ６６の処理後、実行部１１０は、変数Ｄの値を、Ｓ６６で読みだした積算値Ｓと変数Ｄとの合計に更新する（Ｓ６７）。すなわち、実行部１１０は、Ｄ＝Ｄ＋Ｓの演算を行なう。この場合の「＝」は代入を示す演算子である。この際、実行部１１０はスレッドコンテキストに含まれる積算値Ｓをクリア（Ｓ＝０）する（Ｓ６８）。
【００６８】
Ｓ６８の処理後、実行部１１０は、テーブルＴ２で、Ｓ６４で選択されたプロセスＩＤに関連付けられたスレッドＩＤのうち、未選択のスレッドＩＤがないかどうかを判断する。Ｓ６８の判断の結果、未選択のスレッドＩＤがある場合（Ｓ６９：Ｎｏ）に、実行部１１０は、再度Ｓ６５の処理を行なう。Ｓ６９の判断の結果、未選択のスレッドＩＤがない場合（Ｓ６９：Ｙｅｓ）に、実行部１１０は、テーブルＴ３で、Ｓ６２で選択されたプログラムＩＤに関連付けられたプロセスＩＤのうち、未選択のプロセスＩＤがないかどうかを判断する（Ｓ７０）。Ｓ７０の判断の結果、未選択のプロセスＩＤがある場合（Ｓ７０：Ｎｏ）に、実行部１１０は、再度Ｓ６４の処理を行なう。
【００６９】
Ｓ７０の判断の結果、未選択のプロセスＩＤがない場合（Ｓ７０：Ｙｅｓ）に、実行部１１０は、テーブルＴ４で、選択されたプログラムＩＤに関連付けられたプログラム動作量Ｔを更新する（Ｓ７１）。すなわち、実行部１１０は、Ｔ＝Ｔ＋Ｄの演算を行なう。この場合の「＝」は代入を示す演算子である。Ｓ７２の処理後、実行部１１０は、テーブルＴ３に示されるプログラムＩＤのうち、未選択のプログラムＩＤがないかどうかを判断する。Ｓ７２の判断の結果、未選択のスレッドＩＤがある場合（Ｓ７２：Ｎｏ）に、実行部１１０は、再度Ｓ６２の処理を行なう。
【００７０】
Ｓ７２の判断の結果、未選択のプログラムがない場合（Ｓ７２：Ｙｅｓ）に、実行部１１０は、表示処理を要求されたか否かを判断する（Ｓ７３）。これは、例えば、ユーザから表示要求を入力された場合、他の装置から表示要求を受信した場合などに、表示処理が要求されたと判断する。表示処理が要求されない場合（Ｓ７３：Ｎｏ）には、実行部１１０は、処理を終了する（Ｓ７５）。
【００７１】
Ｓ７３の判断の結果、表示処理が要求されたと判断された場合（Ｓ７３：Ｙｅｓ）に、例えば、図１５に示す画面情報４１を生成する（Ｓ７４）。実行部１１０は、ユーザから表示要求が受信された場合には、生成された画面情報４１を出力装置３１２に表示させ、他の装置から表示要求を受信した場合には、表示要求の送信元の装置に画面情報４１を送信する。図１５に示す画面情報４１は、各アプリケーションについてのクロック数と、消費電力と、二酸化炭素消費量と、を示す情報を含む。各アプリケーションについての消費電力と、二酸化炭素排出量と、については、第１の実施形態で説明したように、例えば、１クロック当たりの消費電力値、二酸化炭素排出量のそれぞれについてプログラム動作量Ｔを乗じることで算出される。
【００７２】
第３の実施形態について以下に説明する。第３の実施形態においては、第１の実施形態のコンピュータ１のハードウェアが用いられる。第３の実施形態は、第１の実施形態、第２の実施形態とソフトウェア構成が異なる。
【００７３】
図１６は、第３の実施形態におけるコンピュータ１のソフトウェア構成例を示す。コンピュータ１で複数の仮想マシン２６ａ−ｃが動作し、各仮想マシンの処理を実行するためのハードウェア２１の制御がハイパーバイザ２２ｂにより行なわれる。
【００７４】
第３の実施形態においても、コンピュータ１は、実行部１１０、実行制御部１１１、クロックカウンタ１１２、読出し処理部１１３、算出部１１４、記憶制御部１１５を含む。第３の実施形態のハイパーバイザ２２ｂに基づく処理により、プロセッサ３０１は、第１の実施形態の実行制御部１１１、読出し処理部１１３、算出部１１４及び記憶制御部１１５の機能を実現する。第３の実施形態においては、各仮想マシンについての処理の処理単位であるプロセスやスレッドについてのプロセッサ３０１の動作量が、ハイパーバイザの制御によりカウントされる。
【００７５】
第３の実施形態においては、仮想マシン２６ｃは、動作量管理の仮想マシンである。その場合の仮想マシン２６ｃに基づく実行部１１０の処理について、図１７に基づいて以下に説明する。
【００７６】
まず、実行部１１０は、第２の実施形態おけるＳ６１〜Ｓ７２の処理と同様に、アプリケーションプログラムごとに動作量を計測する処理を行なう（Ｓ８１）。次に、実行部１１０は、図１８に示す仮想マシン管理テーブルＴ５に含まれる仮想マシンの識別情報（ＶＭＩＤ）のうち、未選択のＶＭＩＤを選択する（Ｓ８２）。ここで、仮想マシン２６ａのＶＭＩＤを「Ｘ」とし、仮想マシン２６ｂのＶＭＩＤを「Ｙ」とし、仮想マシン２６ｃのＶＭＩＤを「Ｚ」とする。Ｓ８２の処理が行なわれると、仮想マシンごとの動作量を示す変数Ｕをクリアする（Ｓ８３）。さらに、実行部１１０は、図１８の仮想マシン管理テーブルＴ５において、Ｓ８２で選択されたＶＭＩＤに関連付けられたプログラムのうち、未選択のプログラムを選択する（Ｓ８４）。実行部１１０は、Ｓ８４で選択されたプログラムについてのプログラム動作量ＴをテーブルＴ４から読み出し、読みだしたプログラム動作量Ｔに基づいて変数Ｕを更新する。例えば、実行部１１０は、変数Ｕとプログラム動作量Ｔとの和を、変数Ｕに代入して変数Ｕを更新する。
【００７７】
Ｓ８４の処理を行なうと、実行部１１０は、図１８の仮想マシン管理テーブルＴ５において、Ｓ８２で選択されたＶＭＩＤに関連付けられたプログラムのうち、未選択のプログラムが無いかどうかを判断する（Ｓ８６）。Ｓ８６の判断の結果、未選択のプログラムがある場合（Ｓ８６：Ｎｏ）には、実行部１１０は、再度Ｓ８４の処理を行なう。
【００７８】
Ｓ８６の判断の結果、未選択のプログラムがない場合（Ｓ８６：Ｙｅｓ）には、実行部１１０は、変数Ｕの値と、Ｓ８２で選択したＶＭＩＤと、を関連付けて図１９に示すテーブルＴ６に記憶する（Ｓ８７）。Ｓ８７の処理後、実行部１１０はテーブルＴ５に含まれるＶＭＩＤのうち、未選択のＶＭＩＤがないかどうか判断する（Ｓ８８）。Ｓ８８の判断の結果、未選択のＶＭＩＤがある場合（Ｓ８８：Ｎｏ）には、実行部１１０は、Ｓ８２の処理を再度行なう。
【００７９】
Ｓ８８の処理の結果、未選択のＶＭがない場合（Ｓ８８：Ｙｅｓ）には、実行部１１０は、第２の実施形態のＳ７３、Ｓ７４の処理を行なう（Ｓ８９）。例えば、要求に応じて画面情報を生成し、生成した画面情報の送信、または生成した画面情報の表示処理を行なう。
【００８０】
図２０に、第３の実施形態における画面情報の例を示す。画面情報４２は、仮想マシン２６ａを利用するユーザ向けに仮想マシン２６の動作量を示す画面情報である。図２０に示すごとく、各月の使用状況を含む画面情報を生成するために、例えば、実行部１１０は、各月の終わりにテーブルＴ６を別の記憶領域にコピーし、テーブルＴ６に含まれるＶＭ動作量の情報をクリアすることを行なう。さらに、実行部１１０は、画面情報を生成する場合には、表示対象のＶＭＩＤについて、テーブルＴ６に記憶されたＶＭ動作量と、別の記憶領域に記憶された過去の月のＶＭ動作量と、を読み出す。第２の実施形態と同様に、実行部１１０は、読みだしたＶＭ動作量のそれぞれに、１クロック当たりの消費電力量、１クロック当たりの二酸化炭素排出量を乗算して、各月の消費電力と二酸化炭素排出量とを算出する。各月の課金額は、例えば、消費電力と同様に１クロック当たりの課金額とクロック数との乗算により算出された値、予め行なわれた契約などで定められる。
【００８１】
第４の実施形態について以下に説明する。第４の実施形態においては、第３の実施形態と同様に仮想マシンがコンピュータ１で動作し、コンピュータ１で動作する各仮想マシンの処理を行なうハードウェア２１を制御するドライバの機能を有する仮想マシンが、さらにコンピュータ１で動作する。一方、第３の実施形態においては、例えば、ハイパーバイザ２２ｂがドライバ機能を有している。また、第３の実施形態と同様に、仮想マシン２６ｃは、例えば、動作量管理の仮想マシンなどである。
【００８２】
図２１は、第４の実施形態のコンピュータ１におけるソフトウェア構成例を示す。図１６に示す第３の実施形態のソフトウェア構成に加えて、ドライバＶＭ２７ａとドライバＶＭ２７ｂとが動作している。ＶＭ２６ａに関する処理を行なうハードウェアはドライバＶＭ２７ａに基づいて制御される。また、ＶＭ２６ｂに関する入出力を行なうハードウェアはドライバＶＭ２７ｂに基づいて制御される。
【００８３】
図２２のテーブルＴ７は、第４の実施形態の仮想マシン管理テーブルを示す。仮想マシン管理テーブルＴ７は、コンピュータ１で動作する仮想マシン（ドライバＶＭを含む）のＩＤと、各仮想マシンで動作するプログラムのＩＤと、を関係づけたデータを格納するテーブルである。仮想マシン管理テーブルにおいて、ドライバＶＭ２７ａのＩＤは「ＸＸ」であり、ドライバＶＭ２７ｂのＩＤは「ＹＹ」である。また、仮想マシン管理テーブルＴ７では、ＶＭ間対応関係も示している。例えば、仮想マシン管理テーブルＴ７は、対応関係を示す情報として、ＶＭＩＤ「ＸＸ」と関連付けられたＶＭＩＤ「Ｘ」を含む。この情報により、ＶＭＩＤが「ＸＸ」である仮想マシンが、ＶＭＩＤ「Ｘ」の仮想マシンについての処理を行なう仮想マシンであることが示される。
【００８４】
第４の実施形態においては、仮想マシン２６ｃに基づいて実行部１１０が図１７のフローを実行する。第３の実施形態と異なり、Ｓ８２では、ドライバＶＭ２６ａ、２６ｂ、２６ｃも選択される。実行部１１０がＳ８２〜Ｓ８８のフローを実行することで、コンピュータ１で動作する各仮想マシンについての動作量が算出される。図２３は、各仮想マシンについての動作量を示す。さらに、図１７のＳ８９のフローにおいて、実行部１１０は、前述の表示処理を行なう。第４の実施形態においては、実行部１１０は、仮想マシン管理テーブルＴ７に対応関係を示される仮想マシンについては、対応関係を示された仮想マシン同士の動作量の和を算出して、算出した和を表示する。
【００８５】
第４の実施形態で、上記の処理を行なうことで、プロセッサにより行なわれる計測対象のプログラムに関する演算処理に加え、プロセッサにより行なわれるハードウェア制御についての動作量も計測できる。また、消費電力を算出する際に乗じる係数は、例えば、仮想マシン２６ａ〜ｃの動作量に乗じる係数とドライバＶＭ２７ａ，ｂに乗じる係数とで、異なる値を用いる。その場合には、例えば、さらに、ドライバＶＭ２７ａ，ｂについて各ドライバに制御される各ハードウェアの消費電力も含めた係数が設定される。
【００８６】
以下に第５の実施形態について説明する。第５の実施形態は、例えば、第１の実施形態のコンピュータ１を含む図２４のシステムにおいて実施される形態である。
【００８７】
図２４に例示されるシステムは、コンピュータ１と、コンピュータ２と、中継装置３と、中継装置４と、ネットワーク５と、を含む。コンピュータ１は、第１〜４の実施形態のコンピュータ１と同様のハードウェア構成と機能構成を有する。コンピュータ２は、例えば、コンピュータ１と同様のハードウェア構成を有するコンピュータである。中継装置３は、コンピュータ１とネットワーク５との間で通信の中継を行なう装置である。中継装置３は、コンピュータ２とネットワーク５との間で通信の中継を行なう装置である。また、例えば、コンピュータ２が、コンピュータ１で動作する仮想マシンによりサービスを提供されるコンピュータである。また、サービスを提供されるコンピュータは、図２４に示されるコンピュータ２でなくても、例えば、不図示の複数のコンピュータに対してサービスが提供される。
【００８８】
第５の実施形態においては、サービスの提供先ごとにプロセッサ３０１の動作量の計測を行なう。サービスの提供先ごとの計測とは、サービスの提供を要求するアクセス元に関して行なわれる処理ごとに行なわれるプロセッサ３０１の動作量についての計測である。例えば、サービスの認証を受けたユーザ単位（ユーザＩＤなどで識別されるアカウント単位）や、サービスに関する要求の送信元ＩＰアドレスなどの単位で行なわれる処理についてのコンピュータ１の動作量の計測である。
【００８９】
図２５は、コンピュータ１のソフトウェア構成例を示す。コンピュータ１では、第３の実施形態と同様に、ハイパーバイザ２２ｂと、仮想マシン２６ａ〜ｃが動作する。第５の実施形態においては、仮想マシン２６ａは、ＯＳ２８ａとアプリケーションプログラム２９ａとアプリケーションプログラム２９ｂとを含み、仮想マシン２６ｂは、ＯＳ２８ｂとアプリケーションプログラム２９ｃとアプリケーションプログラム２９ｄとを含む。仮想マシン２６ａ、２６ｂともに、図２５に示すソフトウェア構成に限定するものでなく、他のアプリケーションプログラムもコンピュータ１で動作しうる。
【００９０】
第５の実施形態においては、アプリケーションプログラム２９ａに基づいて、他のコンピュータへのサービスの提供を行なわれ、アプリケーションプログラム２９ｂに基づいて仮想マシン２６ａに含まれるアプリケーションプログラムによる動作量の管理が行なわれる。また、ＯＳ２８ａは、第１の実施形態のＯＳ２２ａと同様に、ＯＳ２８ａ上で動作するアプリケーションプログラムに応じたハードウェア制御を行なうためのソフトウェアであって、ＯＳ２８ａ上で動作する各アプリケーションプログラムについて動作量をカウントさせる。しかしながら、第５の実施形態では、第１の実施形態と異なり、ＯＳ２８ａによる制御は、ハードウェア２１をエミュレートするハイパーバイザ２２ｂに対する制御となる。ハードウェア２１は、ハイパーバイザ２２ｂの制御に応じて処理を実行する。
【００９１】
図２６は、計測対象となる単位の切り替えタイミングを示すシーケンス図である。すなわち、図２６に示される切り替タイミングとは、アプリケーションプログラム２９ａにおける処理の対象となる単位の切り替え、ＯＳ２８ａにおける処理対象のアプリケーションプログラムの切り替え、ＨＶ２２ｂにおける処理対象のＶＭの切り替え、などである。アプリケーションプログラム２９ａにおける処理の対象となる単位とは、サービス（アプリケーションプログラム２６ａにより提供される）によって識別される単位（ユーザ（アカウント）、アドレスなどの処理の対象となる単位）で、図２６においては、ＣＬＩＤという識別情報で識別される。識別情報ＣＬＩＤは、例えば、ユーザＩＤ、処理要求の送信元アドレスなどである。
【００９２】
ハイパーバイザ２２ｂにより、処理対象のＶＭの切り替えが行なわれる。ハイパーバイザ２２ｂにより、ＶＭ２６ａの処理が行なわれる期間に、ＯＳ２８ａが処理対象とするアプリケーションプログラムの処理が行なわれる。
【００９３】
ＯＳ２８ｂにより、処理対象のアプリケーションの切り替えが行なわれる。処理対象のアプリケーションの切り替えとは、実質的に、第１の実施形態において説明したように、プロセスまたはスレッドの切り替えにより行なわれる。ＯＳ２８ｂの制御により、プロセスまたはスレッドの切り替え（プロセスまたはスレッドについての停止、終了、起動、生成などを含む）に応じて、クロックカウンタの値が読み出される。このとき読み出されるクロックカウンタの値は、ハイパーバイザ２２ｂによりエミュレートされたクロックカウンタであり、ＶＭ２６ａに関する処理に要したクロック数をカウントして得られる値である。
【００９４】
アプリケーションプログラム２９ａにより、処理対象の単位の切り替えが行なわれる。図２６においては、識別情報ＣＬＩＤがＣ１の単位から、Ｃ２の単位に切り替えられる（Ｘ１）。アプリケーションプログラム２９ａは、切り替え（Ｘ１）において、ＯＳに対する切り替えの通知を実行させる。切り替えの通知は、切り替え先の単位の識別情報ＣＬＩＤを含む。アプリケーション２８ａから切り替えの通知に応じて、ＯＳ２８ａによって、クロックのカウント処理及びカウンタ値の記憶場所変更が行なわれる。クロックのカウント処理については、アプリケーションの切り替えに応じたカウントと同様に行なわれる（図７〜９参照）。カウンタ値の記憶場所変更は、クロック数の積算値Ｓを格納するスレッドコンテキストまたはプロセスコンテキストを切り替える処理である。後述するが、第５の実施形態においては、スレッドコンテキスト及びプロセスコンテキストは、処理対象の単位ごとに設けられる。
【００９５】
図２７、２８は、第５の実施形態におけるプログラム、プロセス及びスレッドを管理するための管理テーブル例を示す。第５の実施形態においては、例えば、プログラム、プロセス及びスレッドが、処理対象ごとに管理される。すなわち、図５、１１及び１２に示すテーブルに含まれるプログラム、プロセス及びスレッドのＩＤのそれぞれに処理対象の識別情報ＣＬＩＤが付加されて管理される。
【００９６】
図２７（ａ）−（ｃ）は、プロセスとスレッドとの対応関係を示す。第５の実施形態においては、ＯＳ２８ａにより、プロセスＩＤとスレッドＩＤとの双方に、通知された識別情報ＣＬＩＤが付加される。図２８は、プログラムとプロセスとの対応関係を示す。第５の実施形態においては、ＯＳ２８ａにより、プログラムＩＤとプロセスＩＤとの双方に、通知された識別情報ＣＬＩＤが付加される。
【００９７】
ＯＳ２８ａにより、記憶場所変更が行なわれるにあたって、切り替え先の処理対象の単位について、図２７、図２８に示される情報がない場合については、アプリケーションプログラム２９ａからの通知に含まれる識別情報ＣＬＩＤに基づいて、管理のための情報を生成する。例えば、図２７、図２８に示すプログラムとプロセスとの関係及びプロセスとスレッドとの関係を示す情報と、ＣＬＩＤそれぞれに対応するスレッドコンテキスト及びプロセスコンテキストと、が生成される。
【００９８】
また、アプリケーションプログラム２９ｂは、第２の実施形態のアプリーションプログラム２３ｃと同様に、例えば、ＯＳ２８ａ上で動作するアプリケーションの動作量管理のアプリケーションプログラムである。アプリケーションプログラム２９ｂにより、図２９に示すテーブルＴ１１が管理される。図２９は、ＯＳ２８ａ上で動作する各プログラムについて各処理単位の動作量を格納するテーブルを示す。
【００９９】
アプリケーションプログラム２９ｂにより、図２７、図２８に示される関係と、各スレッドコンテキストまたは各プロセスコンテキストに格納される積算値Ｓの情報に基づいて、図２９のテーブルＴ１１が更新される。これは図１３、１４に示すテーブルＴ４の更新と同様の処理で行なわれる。これにより、アプリケーションプログラム２９ａによって識別される処理対象の単位ごとに、処理に要したプロセッサ３０１の動作量が計測される。アプリケーションプログラム２９ｂにより生成される画面情報は、例えば、対応する処理対象に対して、メールなどの手段により送信される。この画面情報とは、例えば図１５や図２０に示される、動作量の計測結果を示す画面情報である。これにより、サービスの提供を受けるユーザが、サービスの提供に要したプロセッサ３０１の動作量を把握可能となる。
【０１００】
以上の第１の実施形態から第５の実施形態のいずれにおいても、１つの例においては、プロセッサ３０１のコアが複数設けられる。ＯＳによって、プロセスまたはスレッドの制御に応じて、プロセスまたはスレッドが割り当てられるプロセッサのコアそれぞれに設けられたクロックカウンタから値を読み出すことにより、複数のコアのそれぞれで処理に要した動作量が算出される。
【０１０１】
以上の実施形態に関し、さらに以下の付記を開示する。
（付記１）
異なる周波数のクロック信号が供給され得るプロセッサを備えるコンピュータに、
前記プロセッサへの割り当て制御の対象である処理単位の処理の開始制御に応じて、前記クロック信号のパルスを計数するクロックカウンタから読み出した第１の値と、前記処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を算出する、
処理を実行させることを特徴とする算出プログラム。
（付記２）
前記コンピュータに、さらに、
算出された前記差分に、単位クロック数当たりの所定種類のコスト値を示す係数を乗じて得られるコスト値を算出する、
処理を実行させることを特徴とする付記１に記載の算出プログラム。
（付記３）
前記処理の停止制御の実行は、前記処理の処理過程における前記プロセッサの処理状況に応じて判断される、
ことを特徴とする付記１または付記２に記載の算出プログラム。
（付記４）
前記コンピュータに、さらに、
算出した前記差分を、前記処理単位を識別する識別情報と関連付けて記憶部に記憶する、
処理を実行させることを特徴とする付記１〜付記３のいずれか１つに記載の算出プログラム。
（付記５）
前記コンピュータに、さらに、
前記処理単位の処理がさらに実行される場合に、さらに実行される処理の開始制御に応じて前記クロックカウンタから読みだされた第３の値と、前記さらに実行される処理の停止制御に応じて前記クロックカウンタから読みだされた第４の値との差分を算出し、
前記第３の値と前記第４の値とに基づいて算出された前記差分を、前記識別情報と関連付けられて前記記憶部に記憶された前記差分に積算して得られる積算値を、前記識別情報に関連付けて前記記憶部に記憶する、
処理を実行させることを特徴とする付記４に記載の算出プログラム。
（付記６）
前記コンピュータに、さらに、
他の処理単位が実行される場合に、前記他の処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第５の値と、前記他の処理単位の前記処理の停止制御に応じて前記クロックカウンタから読み出した第６の値との差分を算出し、
前記他の処理単位が前記処理単位と同じプログラムについての処理単位である場合に、前記第５の値及び前記第６の値に基づいて算出された差分と、前記積算値との和を、前記プログラムを識別するプログラム識別情報に関連付けて前記記憶部に記憶する、
処理を実行させることを特徴とする付記５に記載の算出プログラム。
（付記７）
前記コンピュータに、さらに、
前記プログラムに関する入力制御または出力制御のうち、少なくとも一方の制御を実行させるドライバプログラムの処理単位の処理が実行される場合に、前記ドライバプログラムの処理単位の処理の開始制御に応じて前記クロックカウンタから読み出した第７の値と、前記ドライバプログラムの前記処理単位の前記の停止処理の停止制御に応じて前記クロックカウンタから読み出した第８の値との差分を算出し、
前記第７の値と前記第８の値とに基づく前記差分と、前記和との和を、前記プログラム識別情報と関連付けて前記記憶部に記憶する、
処理を実行させることを特徴とする付記６に記載の算出プログラム。
（付記８）
前記処理単位は、マルチスレッド制御の対象となるスレッドであるか、マルチプロセス制御の対象となるプロセスであるか、または前記コンピュータへのアクセス元に関して行なわれる処理の単位である、
ことを特徴とする付記１〜７のいずれか１つに記載の算出プログラム。
（付記９）
異なる周波数のクロック信号が供給され得るプロセッサと、前記クロック信号を計数するクロックカウンタと、を含み、
前記プロセッサが、
前記プロセッサへの割り当て制御の対象である処理単位の処理の開始制御に応じて、前記クロックカウンタから読み出した第１の値と、前記処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を算出する、
処理を実行することを特徴とするコンピュータ。
（付記１０）
前記クロックカウンタが、
前記クロック信号が前記プロセッサに供給されたパルスの数を計数する、
ことを特徴とする付記９に記載のコンピュータ。
（付記１１）
前記コンピュータは、さらにメモリを備え、
前記プロセッサが、
前記算出した前記差分を、前記処理単位を識別する識別情報と関連付けて前記メモリに記憶する、
処理を実行することを特徴とする付記９または付記１０に記載のコンピュータ。
（付記１１）
異なる周波数のクロック信号が供給され得るプロセッサ、及びクロックカウンタを含むコンピュータが、
前記クロックカウンタにより、前記クロック信号のパルスを計数し、
前記プロセッサへの割り当て制御の対象である処理単位の処理の開始制御に応じて、前記クロックカウンタから読み出した第１の値と、前記処理の停止制御に応じて前記クロックカウンタから読み出した第２の値との差分を算出する、
ことを実行させることを特徴とする算出方法。
【符号の説明】
【０１０２】
１      コンピュータ
１１    処理部
１２    記憶部
１３    通信部
１４    処理部
１５    通信部
１６    出力部
１７    入力部
１１０  実行部
１１１  実行制御部
１１２  クロックカウンタ
１１３  読出処理部
１１４  算出部
１１５  記憶制御部
２１    ハードウェア
２２ａ  オペレーションシステム
２２ｂ  ハイパーバイザ
２３ａ−２３ｃ      アプリケーションプログラム
２６ａ−２６ｃ      仮想マシン
２７ａ、２７ｂ      ドライバＶＭ
２８ａ、２８ｂ      オペレーションシステム
２９ａ−２９ｄ      アプリケーションプログラム
【図１】
0005799797.tif 000002
【図２】
0005799797.tif 000003
【図３】
0005799797.tif 000004
【図４】
0005799797.tif 000005
【図５】
0005799797.tif 000006
【図６】
0005799797.tif 000007
【図７】
0005799797.tif 000008
【図８】
0005799797.tif 000009
【図９】
0005799797.tif 000010
【図１０】
0005799797.tif 000011
【図１１】
0005799797.tif 000012
【図１２】
0005799797.tif 000013
【図１３】
0005799797.tif 000014
【図１４】
0005799797.tif 000015
【図１５】
0005799797.tif 000016
【図１６】
0005799797.tif 000017
【図１７】
0005799797.tif 000018
【図１８】
0005799797.tif 000019
【図１９】
0005799797.tif 000020
【図２０】
0005799797.tif 000021
【図２１】
0005799797.tif 000022
【図２２】
0005799797.tif 000023
【図２３】
0005799797.tif 000024
【図２４】
0005799797.tif 000025
【図２５】
0005799797.tif 000026
【図２６】
0005799797.tif 000027
【図２７】
0005799797.tif 000028
【図２８】
0005799797.tif 000029
【図２９】
0005799797.tif 000030