(57)【特許請求の範囲】
【請求項１】
パフォーマンスカウンタを有する演算処理ユニットが、プログラムの実行開始時に、前記プログラムの実行により前記演算処理ユニットが実行した各イベントのイベント回数を計数する前記パフォーマンスカウンタを初期設定する工程と、
前記演算処理ユニットが、少なくとも前記プログラムの実行完了時に、前記パフォーマンスカウンタの各イベントの回数を記憶ユニットに記憶する工程と、
前記演算処理ユニットが、前記記憶ユニットに格納された予め計測した前記演算処理ユニットの各イベント発生時の消費電力と、前記各イベントの回数とから前記プログラムの電力量を計算する工程と、
前記演算処理ユニットが、前記演算処理ユニットの利用量と前記電力量とから前記プログラムの使用量を計算する工程とを有する
ことを特徴とする情報処理装置の使用量解析方法。
【請求項２】
請求項１の情報処理装置の使用量解析方法において、
前記イベント回数を記憶する工程は、
前記演算処理ユニットが、前記プログラムの実行完了時に、前記パフォーマンスカウンタの少なくとも整数演算イベント、浮動小数点演算イベント、キャッシュミスイベント、ＴＬＢミスイベントの回数を記憶ユニットに記憶する工程を含む
ことを特徴とする情報処理装置の使用量解析方法。
【請求項３】
請求項１の情報処理装置の使用量解析方法において、
前記イベントの回数を記憶する工程は、前記演算処理ユニットが、前記プログラムの実行中に定期的に前記パフォーマンスカウンタの各イベントの回数を観測し、定期的に観測した前記各イベントの回数を前記記憶ユニットに記憶する工程を含み、
前記電力量を計算する工程は、前記演算処理ユニットが前記記憶ユニットに記憶された各イベントの回数と前記各イベント発生時の消費電力とから、前記観測時刻毎に、消費電力を計算する工程とを含む
ことを特徴とする情報処理装置の使用量解析方法。
【請求項４】
ユーザーから要求されたプログラムを実行するとともに、前記プログラムの実行により演算処理ユニットが実行した各イベントのイベント回数をパフォーマンスカウンタで計数する前記演算処理ユニットと、
予め計測した前記演算処理ユニットの各イベント発生時の消費電力を含む前記演算処理ユニットの前記プログラムの実行に必要な情報を格納する記憶ユニットとを有し、
前記演算処理ユニットは、前記プログラムの実行開始時に、前記パフォーマンスカウンタを初期設定し、少なくとも前記プログラムの実行完了時に、前記パフォーマンスカウンタの各イベントの回数を前記記憶ユニットに記憶し、前記記憶ユニットに格納された前記各イベント発生時の消費電力と、前記各イベントの回数とから前記プログラムの電力量を計算し、前記演算処理ユニットの利用量と前記電力量とから前記プログラムの使用量を計算する
ことを特徴とする情報処理システム。
【請求項５】
プログラムの実行開始時に、前記プログラムの実行により発生する各イベントのイベント回数を計数するコンピュータのパフォーマンスカウンタを初期設定する工程と、
少なくとも前記プログラムの実行完了時に、前記パフォーマンスカウンタの各イベントの回数を記憶ユニットに記憶する工程と、
前記記憶ユニットに格納された予め計測した演算処理ユニットの各イベント発生時の消費電力と、前記各イベントの回数とから前記プログラムの電力量を計算する工程と、
前記演算処理ユニットの利用量と前記電力量とから前記プログラムの使用量を計算する工程とを、
前記コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置の使用量解析方法、情報処理システム及びそのプログラムに関する。
【背景技術】
【０００２】
近年、環境問題は重要な社会問題の一つであり、その中でもエネルギー消費量の削減は重要な問題である。電子計算機（情報処理装置）もその実行のために電力を消費する。特に、大型計算機は、消費する電力も大きくなる。【０００３】
この電子計算機の消費電力の解析のため、パフォーマンスカウンタというハードウェア機構を利用する方法が提案されている。パフォーマンスカウンタは、キャッシュミスなどある特定のイベントの発生回数などを測定することができる。【０００４】
例えば、第１の方法は、プロセッサ内の機能ブロックごとに発生するイベントの値に重みづけを加えて，パフォーマンスカウンタを更新する。このパフォーマンスカウンタの値を用いてプロセッサの消費電力を予測する。他の方法は、プロセッサに設けた温度センサーから温度を求め，パフォーマンスカウンタから稼働率を求め，温度と稼働率により消費電力を求める。このような提案は、計算機の消費電力をモニターする方法としては、有効である。【０００５】
又、第２の方法は、計測しようとするプログラムに対して，特別なコードを埋め込み，そのタイミングで電力計を用いて電力値を記録し，プログラムと電力値の関係を時系列に表示し、プログラムのチューニングを行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第７，３４０，３７８Ｂ１公報
【特許文献２】日本特許公開２００８−０２６９４８号公報
【特許文献３】日本特許公開２００３−３４５４７２号公報
【特許文献４】日本特許公開２００５−０２５７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一方、大型計算機を多数の利用者が使用する環境では、利用者が計算機を使用した使用量を計算することが望まれる。例えば、計算機を、多数の利用者が個々のプログラムを動作する大型計算機は、演算処理装置（ＣＰＵ：Central  Processing  Unit）の処理時間によって、課金等の使用量の計算が行われている。しかし、計算機の高速化に伴い、多数の利用者が使用する大型計算機を動作させるための費用として、電力料金の割合が高くなっている。【０００８】
また、大型計算機の電源設備や空調設備、電力基本料金などは、最大消費電力の大きさによって設備投資や料金が決まるため、たとえ電力量が小さくても、最大消費電力が大きいと費用が大きくなる。【０００９】
従来技術の電力解析方法は、主にプログラムのチューニングや計算機の監視のための電力解析であったため、解析した電力値を大型計算機の使用量にリンクさせていなかった。このため、大型計算機の利用者にとって、ＣＰＵの処理時間を短くしようとするインセンティブは働いても、電力料金(電力量)または最大消費電力を小さくしようとするインセンティブは働いていなかった。【００１０】
本発明の目的は、利用者が使用するプログラムの動作に要する電力量を付加した計算機の使用量を解析する情報処理装置の使用量解析方法、情報処理システム及びそのプログラムを提供することにある。
【課題を解決するための手段】
【００１１】
この目的の達成のため、開示の情報処理装置の使用量解析方法は、パフォーマンスカウンタを有する演算処理ユニットが、プログラムの実行開始時に、前記プログラムの実行により前記演算処理ユニットが実行した各イベントのイベント回数を計数する前記パフォーマンスカウンタを初期設定する工程と、前記演算処理ユニットが、少なくとも前記プログラムの実行完了時に、前記パフォーマンスカウンタの各イベントの回数を記憶ユニットに記憶する工程と、前記演算処理ユニットが、前記記憶ユニットに格納された予め計測した前記演算処理ユニットの各イベント発生時の消費電力と、前記各イベントの回数とから前記プログラムの電力量を計算する工程と、前記演算処理ユニットが、前記演算処理ユニットの利用量と前記電力量とから前記プログラムの使用量を計算する工程とを有する。
【００１２】
又、この目的の達成のため、開示の情報処理システムは、ユーザーから要求されたプログラムを実行するとともに、前記プログラムの実行により演算処理ユニットが実行した各イベントのイベント回数をパフォーマンスカウンタで計数する前記演算処理ユニットと、予め計測した前記演算処理ユニットの各イベント発生時の消費電力を含む前記演算処理ユニットの前記プログラムの実行に必要な情報を格納する記憶ユニットとを有し、前記演算処理ユニットは、前記プログラムの実行開始時に、前記パフォーマンスカウンタを初期設定し、少なくとも前記プログラムの実行完了時に、前記パフォーマンスカウンタの各イベントの回数を前記記憶ユニットに記憶し、前記記憶ユニットに格納された前記各イベント発生時の消費電力と、前記各イベントの回数とから前記プログラムの電力量を計算し、前記演算処理ユニットの利用量と前記電力量とから前記プログラムの使用量を計算する。
【００１３】
更に、この目的の達成のため、開示のプログラムは、プログラムの実行開始時に、前記プログラムの実行により発生する各イベントのイベント回数を計数するコンピュータのパフォーマンスカウンタを初期設定する工程と、少なくとも前記プログラムの実行完了時に、前記パフォーマンスカウンタの各イベントの回数を記憶ユニットに記憶する工程と、前記記憶ユニットに格納された予め計測した演算処理ユニットの各イベント発生時の消費電力と、前記各イベントの回数とから前記プログラムの電力量を計算する工程と、前記演算処理ユニットの利用量と前記電力量とから前記プログラムの使用量を計算する工程とを、前記コンピュータに実行させる。
【発明の効果】
【００１４】
プログラムを実行する演算処理ユニットの利用量と電力量とからプログラムの使用量を計算するため、利用者にとって公平性のある情報処理装置の使用量を計算できる。また、プログラムの実行開始時にパフォーマンスカウンタを初期設定し、プログラムの実行完了時のパフォーマンスカウンタの各イベントの回数と予め計測した演算処理ユニットの各イベント発生時の消費電力とから、プログラムの消費電力を計算するため、プログラム単位で、リアルタイムで且つ高速に情報処理装置の使用量を計算できる。
【図面の簡単な説明】
【００１５】
【図１】実施の形態の情報処理システムのブロック図である。
【図２】図１のＣＰＵコアのブロック図である。
【図３】実施の形態の消費電力解析処理フロー図である。
【図４】図３のイベントと消費電力の関係の計測処理の第１の実施の形態の説明図である。
【図５】図３のイベントと消費電力の関係の計測処理の第２の実施の形態の説明図である。
【図６】図３のイベントと消費電力の関係の計測処理結果の説明図である。
【図７】図３のイベント発生回数の計測のための第１の実施の形態のブロック図である。
【図８】図３のイベント発生回数の計測処理の第１の実施の形態の説明図である。
【図９】図８のイベント発生回数の計測処理結果の説明図である。
【図１０】図３のイベント発生回数の計測処理の第２の実施の形態の説明図である。
【図１１】図１０のイベント発生回数の計測処理結果の説明図である。
【図１２】図３のイベント発生回数の計測処理の第３の実施の形態の説明図である。
【図１３】実施の形態の消費電力解析処理の説明図である。
【図１４】図３のイベント発生回数の計測のための第２の実施の形態のブロック図である。
【図１５】図１４の動作説明図である。
【図１６】実施の形態の使用量計算処理のブロック図である。
【図１７】図１６の使用量計算処理の説明図である。
【図１８】図１６、図１７の課金情報構造体の説明図である。
【図１９】図１６、図１７の課金情報ファイルの説明図である。
【図２０】第２の実施の形態の消費電力解析処理フロー図である。
【発明を実施するための形態】
【００１６】
以下、実施の形態の例を、情報処理システムの実施の形態、電力使用量の解析の第１の実施の形態、電力使用量の計算、電力使用量の解析の第２の実施の形態、電力使用量を付加した使用量の計算処理、電力使用量の解析の第３の実施の形態、他の実施の形態の順で説明するが、情報処理システム、ＣＰＵコアは、この実施の形態に限られない。
【００１７】
（情報処理システムの実施の形態）
図１は、実施の形態の情報処理システムのブロック図である。図１は、多数の利用者が利用できる大型計算機システム（計算センター）を例に示す。図１に示すように、情報処理システムは、処理ユニット群１−１〜１−Ｎと、電源ユニット６２と、管理ユニット（図１では、ＳＶＰと記す）６０と、外部記憶装置（図１では、デイスクと記す）６４と、ネットワークインターフェース装置（図示、ＮＩＣと記す）６６と、接続バス６８とを有する。
【００１８】
処理ユニット群１−１〜１−Ｎは、複数の処理ユニット（システムボードと称す）１−１〜１−Ｎで構成される。各システムボード１−１〜１−Ｎは、演算処理（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）チップ１０とシステムコントローラ（図１では、ＳＹＳＣＯＮと記す）１２と主記憶装置（メインメモリ）１４とを有する。演算処理チップ（以下、ＣＰＵチップという）１０は、単数又は複数のＣＰＵコアを有する。この例では、１つのＣＰＵチップ１０は、４つのＣＰＵコア１８−１〜１８−４を有する。１つのＣＰＵチップ１０内のＣＰＵコアの数は、図示した４つに限られず、１つ以上であれば、良い。ＣＰＵコア１８−１〜１８−４は、図２で説明するように、プログラムを実行する。
【００１９】
主記憶装置１４は、各ＣＰＵコア１８−１〜１８−４のデータ等を保持する。システムコントローラ１２は、各ＣＰＵコア１８−１〜１８−４と主記憶装置１４とバス６８とに接続し、各ＣＰＵコア１８−１〜１８−４と主記憶装置２４とバス６８とのデータの入出力制御を行う。
【００２０】
外部記憶装置６４は、不揮発性の記憶装置、例えば、磁気デイスク装置で構成される。しかし、外部記憶装置６４が、他の不揮発性の大容量記憶装置で構成されることもできる。外部記憶装置６４は、各システムボード１−１〜１−Ｎの動作に必要なデータ等を保持する。外部記憶装置６４は、接続バス６８を介し、各システムボード１−１〜１−Ｎのシステムコントローラ１２に接続される。
【００２１】
ネットワークインターフェース装置（図１では、ＮＩＣ：Ｎｅｔｗｏｒｋ  ＩｎｔｅｒｆａｃｅＣａｒｄと記す）６６は、接続バス６８を介し、各システムボード１−１〜１−Ｎのシステムコントローラ１２に接続される。又、ネットワークインターフェース装置６６は、ネットワーク７を介し、利用者が操作する端末装置８−０〜８−Ｍに接続される。
【００２２】
管理ユニット６０は、各システムボード１−１〜１−Ｎの電源投入／切断、状態設定を含む初期化処理、状態監視処理を行う。管理ユニット６０は、たとえば、サービスプロセッサ（ＳＶＰ:Ｓｅｒｖｉｃｅ  Ｐｒｏｃｅｓｓｏｒ）で構成される。電源ユニット６２は、商用電源に接続し、管理ユニット６０からの電源投入指示に応じて、各システムボード１−１〜１−Ｎ及び外部記憶装置６４、ネットワークインターフェース装置６６に電力を供給する。
【００２３】
ネットワーク７は、専用回線網又は汎用回線網により構成される。ネットワーク７は、イントラネット、インターネット網を利用できる。端末装置８−０〜８−Ｍは、例えば、パーソナルコンピュータ（ＰＣ：Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等で構成される。利用者は、端末装置８−０〜８−Ｍを操作し、ネットワーク７、ネットワークインターフェース装置６６を介し、情報処理システムのシステムボード１−１〜１−Ｎとデータ等の送受信を行う。
【００２４】
この情報処理システムは、システムコントローラネットワーク７を介し各利用者の端末装置８−０〜８−Ｍと接続する。利用者は、端末装置８−０〜８−Ｍからアプリケーションプログラム名や必要なデータを入力する。端末装置８−０〜８−Ｍから入力した項目（アプリケーションプログラム名、データ）は、ネットワーク７、ネットワークインターフェース装置６６、接続バス６８、システムコントローラ１２に伝達される。又、端末装置８−０〜８−Ｍから、必要なアプリケーションプログラムを、ネットワーク７、ネットワークインターフェース装置６６、接続バス６８、システムコントローラ１２にアップロードすることもできる。
【００２５】
システムコントローラ１２は、単数又は複数のＣＰＵコア１８−１〜１８−４に指定されたアプリケーションプログラムの実行を指示する。指定されたＣＰＵコアは、指定されたアプリケーションプログラムを実行する。このアプリケーションプログラムは、例えば、外部記憶装置６４に保持されている。
【００２６】
システムボード１−１〜１−ＮのＣＰＵコア１８−１〜１８−４は、利用者が指定したアプリケーションプログラムを実行した後、実行した結果を、システムコントローラ１２、接続バス６８、ネットワークインターフェース装置６６、ネットワーク７を介し端末装置８−０〜８−Ｍに送信する。
【００２７】
又、ＣＰＵコア１８−１〜１８−４は、アプリケーションプログラムを実行した情報処理システムの使用量を計算し、利用者に課金する。本実施の形態では、ＣＰＵチップの処理時間と使用電力量（消費電力）に応じて、利用者の情報処理システムの使用量を計算する。この消費電力の計算のため、ＣＰＵコア１８−１〜１８−４が備えるパフォーマンスカウンタのカウント値を利用する。又、主記憶装置１４に使用量領域１６を設ける。使用量領域１６は、イベントの単位時間当たりの消費電力を格納し、且つ課金情報を格納する。
【００２８】
図２は、図１のＣＰＵコア１８−１（１８−２〜１８−４）のブロック図である。図２に示すように、ＣＰＵコア１８−１（１８−２〜１８−４）は、演算ユニットとキャッシュユニットとロード／ストア／フェッチユニットとインターフェースユニットとを有する。インターフェースユニットは、サービスプロセッサ（以下、ＳＶＰという）６０と通信するインターフェースユニット３８と、システムコントローラ（ＳＹＳＣＯＮ）１２と通信するバスインターフェースユニット２０とを有する。
【００２９】
キャッシュユニットは、データ及びプログラム命令を保持する一次キャッシュ（Ｌ１  ｃａｃｈｅ）２２と、キャッシュインターフェース回路（Ｃａｃｈｅ  Ｉｎｔｅｒｆａｃｅ  Ｕｎｉｔ）２４と、仮想アドレスと物理アドレスの変換を行うＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）２６とを有する。バスインターフェースユニット２０は、一次キャッシュ２２、キャッシュインターフェース回路２４、ＴＬＢ２６を、システムコントローラ１２に接続する。
【００３０】
演算（実行）ユニットは、整数演算を行うフィックストポイントユニット（ＦＸＵ（Ｆｉｘｅｄ  Ｐｏｉｎｔ  Ｕｎｉｔ）という）２９と、浮動小数点演算を行うフローテイングポイントユニット（ＦＰＵ（Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｕｎｉｔ）という）３１と、インストラクションシーケンスユニット（ＩＳＵ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｑｕｅｎｃｅｒ  Ｕｎｉｔ）という）２７と、制御ロジック回路（Ｃｏｎｔｒｏｌ  Ｌｏｇｉｃ）４０とを有する。
【００３１】
ＦＸＵ２９とＦＰＵ３１は、汎用レジスタ（ＧＰＲ：Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｒｅｇｉｓｔｅｒ）２８、フローテイングポイントレジスタ（ＦＰＲ：Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｒｅｇｉｓｔｅｒ）３０，コンディションレジスタ（ＣＲ:Ｃｏｎｄｉｔｉｏｎ  Ｒｅｇｉｓｔｅｒ）３２，リネーミングレジスタ（Ｒｅｎａｍｅ  Ｂｕｆｆｅｒ）２３のようなリソースに接続する。
【００３２】
ロード／ストア／フェッチユニットは、１次キャッシュ２２からの命令をプリフェッチするＩＦＵ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ  Ｕｎｉｔ）２５と、１次キャッシュ２２からのデータをＧＰＲ２８，ＦＰＲ３０、リネーミングレジスタ２３にロードストアするＬＳＵ（Ｌｏａｄ  Ｓｔｏｒｅ  Ｕｎｉｔ）２１とを有する。
【００３３】
ＩＳＵ２７は、カウント／リンクレジスタ（ＣＴＲ）及びコンプリーションレジスタ（ＧＲ）４２を参照し、ＦＸＵ２９、ＦＰＵ３１などの内部回路にＩＦＵ２５から与えられた命令のシーケンスを制御する。ＦＸＵ２９，ＦＰＵ３１は、ＧＰＲ２８、ＦＲＰ３０、ＣＲ３２、リネーミングレジスタ２３を使用し、命令を実行する。
【００３４】
ＣＰＵコア１８−１（１８−２〜１８−４）は、パフォーマンスカウンタ３４を有する。パフォーマンスカウンタ３４は、プログラム実行中のイベント回数を計数する。この実施の形態では、パフォーマンスカウンタ３４は、整数演算のイベント（ＩＮＴ＿ＩＮＳ）の回数を計数するＩＮＴカウンタ３５Ａと、浮動小数点演算のイベント（ＦＰ＿ＩＮＳ）の回数を計数するＦＰカウンタ３５Ｂと、Ｌ１キャッシュミスのイベント（Ｌ１＿ＴＣＭ）の回数を計数するＬ１カウンタ３５Ｃと、ＴＬＢミスのイベント（ＴＬＢ＿ＴＬ）の回数を計数するＴＬＢカウンタ３５Ｄとを有する。
【００３５】
ＩＮＴカウンタ３５Ａは、ＩＦＵ２５からの整数演算命令をイベントとして計数する。ＦＰカウンタ３５Ｂは、ＬＳＵ２１からのロードストア命令をイベントとして計数する。Ｌ１カウンタ３５Ｃは、Ｌ１キャッシュ２２からのＬ１キャッシュミスをイベントとして格納する。ＴＬＢカウンタ３５Ｄは、ＴＬＢユニット２６からＴＬＢミスをイベントとして計算する。
【００３６】
Ｌ１キャッシュミスは、Ｌ１キャッシュ２２のメモリから指定された命令、データを読み出す場合に、Ｌ１キャッシュ２２のメモリに指定された命令、データが保持されていないことを示す。この場合、キャッシュインターフェース回路２４は、バスインターフェースユニット２０を介し、主記憶装置１４から必要な命令、データを読み出し、１次キャッシュ２２に格納する。
【００３７】
又、ＴＬＢミスは、ＴＬＢ２６が、テーブルを用いて仮想アドレスと物理アドレスの変換を行う場合に、テーブルに仮想アドレスと物理アドレスの変換データが存在しないことを示す。この場合、キャッシュインターフェース回路２４は、バスインターフェースユニット２０を介し、主記憶装置１４から必要な変換データを読み出し、ＴＬＢ２６のテーブルに格納する。
【００３８】
又、ＣＰＵコア１８−１（１８−２〜１８−４）は、パフォーマンスカウンタ管理部３６を有する。パフォーマンスカウンタ管理部３６は、パフォーマンスカウンタ３４が取得するイベントの設定やカウンタの開始・終了の指示を行うレジスタ３７Ａ，３７Ｂを有する。
【００３９】
この実施の形態では、消費電力を計算するため、パフォーマンスカウンタ３４を利用する。そして、パフォーマンスカウンタ３４の監視するイベントの内、ＣＰＵの消費電力に大きく関係するイベントを計測する。この実施の形態では、消費電力計測のイベントは、整数演算や浮動小数点演算の演算操作、キャッシュミス、ＴＬＢミスである。整数演算や浮動小数点演算の演算操作は、消費電力に大きく関係する。又、キャッシュミスの場合は、主記憶装置１４から必要な命令、データを読み出し、１次キャッシュに格納する操作が必要となるため、消費電力に大きく関係する。更に、ＴＬＢミスの場合、主記憶装置１４からページ単位に変換テーブルを読み出し、ＴＬＢ２６に格納する操作が必要であるため、消費電力に大きく関係する。
【００４０】
このため、本実施の形態では、パフォーマンスカウンタ３４の観測イベントの内、整数演算、浮動小数点演算、キャッシュミス、ＴＬＢミスのイベント回数を、プログラムの消費電力の解析に利用する。
【００４１】
（電力使用量の解析の第１の実施の形態）
図３は、実施の形態の電力使用量解析処理フロー図である。
【００４２】
（Ｓ１０）図４乃至図６を用いて、後述するように、プログラム実行前に、ＣＰＵコア１８−１（１８−２〜１８−４）であるイベントが発生したときに、電力値を測定し、イベントと消費電力の関係を調べ、主記憶装置１４の使用量領域に格納する。
【００４３】
（Ｓ１２）次に、ＣＰＵコア１８−１（１８−２〜１８−４）がプログラムを実行する。図７乃至図１２で後述するように、ＣＰＵコア１８−１（１８−２〜１８−４）がプログラムを実行中及び実行終了後のパフォーマンスカウンタ３４のイベント発生回数を測定する。
【００４４】
（Ｓ１４）図１３を用いて、後述するように、プログラム実行後、イベント発生回数とイベントの消費電力の関係から、プログラムの電力量または最大消費電力を計算する。
【００４５】
次に、ステップＳ１０のイベントと消費電力の関係の計測処理を説明する。イベントと消費電力との関係を、プログラムの実行前にあらかじめ測定する。以下に測定方法を説明する。
【００４６】
図４は、イベントと消費電力との関係の計測処理の第１の実施の形態の説明図である。図４に示すように、回路シミュレーター８０を用いて、それぞれのイベントごとに、単位時間当たりのイベントの発生回数に対する消費電力を計算する。回路シミュレーター８０は、回路シミュレーションプログラムを実行する実行する情報処理装置である。
【００４７】
先ず、あらかじめ、それぞれのイベント(整数演算、浮動小数点演算、Ｌ１キャッシュミス、ＴＬＢミスなど)を発生させるテストプログラムを作成する。例えば、整数演算を行うプログラム、浮動小数点演算を行うプログラム、Ｌ１キャッシュミスを起こすプログラム、ＴＬＢミスを起こすプログラムなどを準備する。
【００４８】
回路シミュレーター８０が、作成したテストプログラムを実行し、それぞれのイベントの発生回数を、回路シミュレーションを実行する情報処理装置のパフォーマンスカウンタから観測する。そして、回路シミュレーター８０がパフォーマンスカウンタの観測値から各イベントの消費電力を計算する。
【００４９】
回路シミュレーターは、ソフトウェアシミュレーターとハードウェアシミュレーターとが知られている。ソフトウェアシミュレーターは、回路の動作をシミュレーションするソフトウェアである。ソフトウェアシミュレーターは、アナログ回路シミュレーターとデジタル回路シミュレーターに分類できる。
【００５０】
アナログ回路シミュレーターは，アナログ回路を入力することにより、入力したアナログ回路の動作をシミュレーションするとともに、電力(電圧や電流)を計算できる。例えば、周知のＳＰＩＣＥ（Ｓｉｍｕｌａｔｉｏｎ  Ｐｒｏｇｒａｍ  ｗｉｔｈ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ  Ｅｍｐｈａｓｉｓ）を利用できる。尚、ＳＰＩＣＥは、http://ja.wikipedia.org/wiki/SPICE_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2で参照できる。
【００５１】
又、デジタル回路シミュレーターは、デジタル回路（ＲＴＬおよびゲートレベル)を入力することにより、デジタル回路の動作をシミュレーションする。デジタル回路シミュレーターは、直接、各回路の電力値を求めることはできないが、回路の各素子の動作率を求めることができる。例えば、シノプシス（synopsys）社（会社名）のＶＣＳ（登録商標名、http://www.synopsys.co.jp/products/vcs/detail.html参照）を利用できる。
【００５２】
本実施の形態では、アナログ回路シミュレーターでＣＰＵコアの各素子の電力を測定する。又、デジタル回路シミュレーターで前述のテストプログラムを動作し、各回路素子の動作率及び全体の消費電力を測定する。デジタル回路シミュレーターで測定した各回路素子の動作率と消費電力と、アナログ回路シミュレーターで測定した各回路素子の消費電力とから、イベントと消費電力との関係を計算する。
【００５３】
一方、ハードウェアシミュレーター(エミュレーターとも呼ばれる)は，デジタル回路の動作をシミュレートする専用ハードウェアとソフトウェアからなるシステムである。ハードウェアシミュレーターは、回路情報をハードウェア上に展開して、回路の動作をシミュレーションする。電力値は、上記したデジタル回路シミュレーターと同じ方法で回路全体の電力を求めることができる。例えば、ケーデンス（cadence）社のPalladium（登録商標名）を利用できる。
【００５４】
これらのシミュレーターを利用する方法は、消費電力を計測すべきプログラムを実行する情報処理システムを使用することなく、測定できる。即ち、ソフトウェアで消費電力を測定できる。
【００５５】
図５は、イベントと消費電力との関係の計測処理の第２の実施の形態の説明図である。図５において、図１及び図２で説明したものと同一のものは、同一の記号で示してある。図５に示すように、図１の情報処理システムを使用して各イベントの消費電力を測定する。即ち、図１の情報処理システムの構成において、電源ユニット６２の電力量（Ｗｈ）を計測する電力計７０を設ける。又、電力計７０に接続するＩ／Ｏポート１９を、バス６８に接続する。ＣＰＵチップ１０のＣＰＵコア１８−１〜１８−４が、電力計の電力量をＩ／Ｏポート１９から取り込む。
【００５６】
次に、前述のシミュレーターによる消費電力測定処理と同様に、あらかじめ、それぞれのイベントを発生させるそれぞれのテストプログラムを準備する。情報処理システムにそれぞれのテストプログラムを実行させる。情報処理システムは、各テストプログラムの終了後、対応するイベントの発生回数をパフォーマンスカウンタ３４から測定し、且つ電力計７０により電力量を取り込む。
【００５７】
図６は、測定された各イベントと単位時間当たりの消費電力の関係図である。図６は、図４のシミュレーター又は図５の構成において、整数演算を行うプログラム、浮動小数点演算を行うプログラム、Ｌ１キャッシュミスを起こすプログラム、ＴＬＢミスを起こすプログラムが実行された場合のイベントと電力量（消費電力）の対応を示す。尚、本実施の形態では、全てのイベントが１単位時間で終了するものとして説明する。
【００５８】
即ち、図６の消費電力の測定結果は、１回の整数演算（ＩＮＴ＿ＩＮＳ）に電力を１００ｍＷ消費し、１回の浮動小数点演算（ＦＰ＿ＩＮＳ）に電力を２００ｍＷ消費することを示す。又、図６の消費電力の測定結果は、１回のＬ１キャッシュミス（Ｌ１＿ＴＣＭ）に３００ｍＷ電力消費し、１回のＴＬＢミス（ＴＬＢ＿ＴＬ）に４００ｍＷ電力消費することを示す。図６の各イベントの消費電力の測定結果は、主記憶装置１４の使用量格納領域１６のイベント消費電力格納域１６Ａに、格納する。
【００５９】
（電力使用量の計算）
つぎに、図３のステップＳ１２のプログラムの実行時に、消費電力解析のためのイベントの発生回数を計測する処理を説明する。図７は、プログラム実行時のイベント回数計測処理の第１の実施の形態の説明図である。図８は、図７の第１の実施の形態の第１の測定処理のタイムチャート図、図９は、図８の処理のイベント回数測定結果を示す図である。
【００６０】
図７において、図１、図２で説明したものと同一のものは、同一の記号で示す。図７に示すように、ＣＰＵコア１８−１は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｅｍ）のカーネル（Ｋｅｒｎｅｌ）８０の管理のもとに、プロセスプログラム（アプリケーションプログラム）８２を実行する。カーネル８０は、プロセスプログラム８２ごとに、プロセス構造体８０−１と呼ばれるデータを持つ。
【００６１】
プロセス構造体８０−１は，実行中のプロセスプログラムの情報（識別子ＩＤ、プロセス自身の状態，メモリやファイル，ＣＰＵコアの情報、課金情報など)を保持する。カーネル８０が、プロセスプログラム８２に制御権を渡した後（ＣＴＲ），ＣＰＵコア１８−１は、プロセスプログラム８２の実行を開始する。そして、プロセスプログラム８２は、プロセスを終了すると、カーネル８０に制御権を返す（ＣＴＰ）。
【００６２】
図７及び図８は、プロセスプログラム８２自身が、プログラム８２のプロセスの最後でパフォーマンスカウンタ３４を観測する。先ず、プロセスプログラム８２の先頭で、パフォーマンスカウンタ３４の初期設定を行い、パフォーマンスカウンタ３４の計測を開始する。図２の例では、プロセスプログラム８２が、パフォーマンスカウンタ管理部３６のスタートレジスタ３７Ａに開始を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウントを開始する。又、プロセスプログラム８２が、パフォーマンスカウンタ管理部３６のスタートレジスタ３７Ａに開始を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント値を保存しても良い。
【００６３】
そして、プロセスプログラム８２の末尾で、パフォーマンスカウンタ３４の値を観測し、記録を取る。図２の例では、プロセスプログラム８２が、パフォーマンスカウンタ管理部３６のストップレジスタ３７Ｂに停止を指示し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント動作を停止する。そして、プロセスプログラム８２は、各イベントについて、イベント回数カウンタ３５Ａ〜３５Ｄのカウント値を読み出し、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに記録する。
【００６４】
又、プロセスプログラム８２が、パフォーマンスカウンタ管理部３６のストップレジスタ３７Ｂに停止を指示し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント値を保存する。そして、プロセスプログラム８２は、各イベントについて、初期設定時に保存したカウント値と停止指示した時に保存したカウント値との差分を計算し、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに記録しても良い。
【００６５】
例えば、イベント回数の測定結果例は、図９に示すように、プロセスプログラム８２の実行により、整数演算（ＩＮＴ＿ＩＮＳ）回数は「６」であり、浮動小数点演算（ＦＰ＿ＩＮＳ）回数は「３」であり、Ｌ１キャッシュミス（Ｌ１＿ＴＣＭ）回数は「１」であり、ＴＬＢミス（ＴＬＢ＿ＴＬ）回数は「１」である。図９の各イベントの回数の測定結果は、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに、格納する。
【００６６】
図１０は、図７の第１の実施の形態の第２の測定処理のタイムチャート図、図１１は、図１０の処理のイベント回数測定結果を示す図である。図１０は、プロセスプログラム８２自身が、定期的にパフォーマンスカウンタ３４を観測する処理を示す。
【００６７】
図１０に示すように、プロセスプログラム８２の先頭で、パフォーマンスカウンタ３４の初期設定を行い、パフォーマンスカウンタ３４の計測を開始する。図２の例では、プロセスプログラム８２が、パフォーマンスカウンタ管理部３６のスタートレジスタ３７Ａに開始を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウントを開始する。
【００６８】
プロセスプログラム８２は、定期的に、パフォーマンスカウンタ３４の値を観測し、記録を取る。例えば、タイマーの割込みにより、プロセスプログラム８２は、パフォーマンスカウンタ管理部３６のストップレジスタ３７Ｂに停止（ＳＴ：Ｓｔｏｐ）を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウントを停止する。
【００６９】
そして、プロセスプログラム８２は、各イベントについて、イベント回数カウンタ３５Ａ〜３５Ｄのカウント値を読み出し（ＣＰ）、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに記録する。更に、プロセスプログラム８２は、パフォーマンスカウンタ管理部３６のスタートレジスタ３７Ａに再開（Ｒ：Ｒｅｓｔａｒｔ）を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント動作を再開する。
【００７０】
そして、プロセスプログラム８２の末尾で、パフォーマンスカウンタ３４の値を観測し、記録を取る。図２の例では、プロセスプログラム８２が、パフォーマンスカウンタ管理部３６のストップレジスタ３７Ｂに停止を指示し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント動作を停止する。そして、プロセスプログラム８２は、各イベントについて、イベント回数カウンタ３５Ａ〜３５Ｄのカウント値を読み出し（ＣＰ）、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに記録する。
【００７１】
例えば、定期的なイベント回数の測定結果例を、図１１に示す。図１１では、プロセスプログラム８２の実行により、定期的な測定時刻１〜９毎に、その時刻の整数演算（ＩＮＴ＿ＩＮＳ）回数、浮動小数点演算（ＦＰ＿ＩＮＳ）回数、Ｌ１キャッシュミス（Ｌ１＿ＴＣＭ）回数、ＴＬＢミス（ＴＬＢ＿ＴＬ）回数を測定し、記録する。図１１の各測定時刻における各イベントの回数の測定結果は、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに、格納する。
【００７２】
このプロセスプログラムによるイベント回数計測処理では、プロセスプログラムを修正するか、又は特別なランタイムをリンクする。即ち、カーネルを修正する必要がない。又、図８の測定処理では、性能の低下が少ない。更に、図１１の測定処理では、最大消費電力を求めることができる。
【００７３】
図１２は、プログラム実行時のイベント回数計測処理の第２の実施の形態の説明図である。図１２において、図１、図２、図７で説明したものと同一のものは、同一の記号で示す。図１２に示すように、ＣＰＵコア１８−１は、カーネル（ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）８０の管理のもとに、プロセスプログラム（アプリケーションプログラム）８２を実行する。カーネル８０は、プロセスプログラムごとに、プロセス構造体８０−１と呼ばれるデータを持つ。
【００７４】
プロセス構造体８０−１は，実行中のプロセスプログラムの情報（識別子ＩＤ、プロセス自身の状態，メモリやファイル，ＣＰＵコアの情報、課金情報など)を保持する。カーネル８０が、プロセスプログラム８２に制御権を渡した後（ＣＴＲ），ＣＰＵコア１８−１は、プロセスプログラム８２の実行を開始する。そして、プロセスプログラム８２は、プロセスを終了すると、カーネル８０に制御権を返す（ＣＴＰ）。
【００７５】
図１２では、プロセスプログラム８２以外のバックグラウンドで動作するプログラムがイベント回数の計測処理を行う。この実施の形態では、カーネル８０が、イベント回数の計測を行う。カーネル８０は、プロセスプログラム８２に制御権を渡す（ＣＴＲ）の直前に、パフォーマンスカウンタ３４の初期設定を行い、パフォーマンスカウンタ３４の計測を開始する。図２の例では、カーネル８０が、パフォーマンスカウンタ管理部３６のスタートレジスタ３７Ａに開始を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウントを開始する。
【００７６】
そして、プロセスプログラム８２の実行が完了し、プロセスプログラム８２が、カーネル８０に制御権を返した（ＣＴＰ）後に、カーネル８０は、パフォーマンスカウンタ３４の値を観測し、記録を取る。図２の例では、カーネル８０が、パフォーマンスカウンタ管理部３６のストップレジスタ３７Ｂに停止を指示し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント動作を停止する。そして、カーネル８０は、各イベントについて、イベント回数カウンタ３５Ａ〜３５Ｄのカウント値を読み出し、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに記録する。例えば、イベント回数の測定結果例は、図９に示したものと同一であり、説明を省略する。
【００７７】
又、図１２に示すカーネル８０の計測処理の他の例は、図１０と同様に、カーネル８０が、定期的にパフォーマンスカウンタ３４を観測する処理を行う。即ち、カーネル８０は、プロセスプログラム８２に制御権を渡す（ＣＴＲ）の直前に、パフォーマンスカウンタ３４の初期設定を行い、パフォーマンスカウンタ３４の計測を開始する。図２の例では、カーネル８０が、パフォーマンスカウンタ管理部３６のスタートレジスタ３７Ａに開始を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウントを開始する。
【００７８】
カーネル８０は、定期的にパフォーマンスカウンタ３４の値を観測し、記録を取る。例えば、タイマーの割込みにより、カーネル８０は、パフォーマンスカウンタ管理部３６のストップレジスタ３７Ｂに停止（ＳＴ：Ｓｔｏｐ）を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウントを停止する。
【００７９】
そして、カーネル８０は、各イベントについて、イベント回数カウンタ３５Ａ〜３５Ｄのカウント値を読み出し（ＣＰ）、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに記録する。更に、カーネル８０は、パフォーマンスカウンタ管理部３６のスタートレジスタ３７Ａに再開（Ｒ：Ｒｅｓｔａｒｔ）を設定し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント動作を再開する。
【００８０】
プロセスプログラム８２の実行が完了し、プロセスプログラム８２が、カーネル８０に制御権を返した（ＣＴＰ）後に、カーネル８０は、パフォーマンスカウンタ３４の値を観測し、記録を取る。図２の例では、カーネル８０が、パフォーマンスカウンタ管理部３６のストップレジスタ３７Ｂに停止を指示し、指定したパフォーマンスカウンタ３４のイベント回数カウンタ３５Ａ〜３５Ｄのカウント動作を停止する。そして、カーネル８０は、各イベントについて、イベント回数カウンタ３５Ａ〜３５Ｄのカウント値を読み出し、主記憶装置１４の使用量格納領域１６のイベント回数格納域１６Ｂに記録する。
【００８１】
例えば、定期的なイベント回数の測定結果例は、図１１に示したものと同一であり、説明を省略する。カーネル８０が計測処理を実行する場合には、プロセスプログラム８２の実行性能の低下を防止できる。
【００８２】
又、パフォーマンスカウンタ３４を観測し、記録を取る処理の間も、パフォーマンスカウンタ３４は動作し続ける。このままでは、パフォーマンスカウンタの処理に伴う消費電力も課金対象になってしまう恐れがある。そのため、その増加分はカウンタの計測から除外する。
【００８３】
図８のプロセスプログラム８２が計測処理を行う場合には、パフォーマンスカウンタ３４の初期設定処理が終わってからカウンタ３４の計測を開始し、プロセスプログラム８２の末尾でカウンタ３４を止めてからカウンタの値を計測し記録を取るため、増加分は計測値に含まれない。
【００８４】
図１０のプロセスプログラム８２が定期的に計測処理を行う場合には、図１０で説明したように、定期的にカウンタ３４の値を計測し、記録を取る処理（ＣＰ）の前後で、カウンタ３４を止める処理（ＳＴ）とカウンタ３４を再開する処理（Ｒ）を行うことにより、増加分を計測値から排除できる。
【００８５】
図１２のカーネル８０が計測処理を行う場合には、プロセスプログラム８２の切り替えの時に、パフォーマンスカウンタ３４の値も同時に退避復元を行う。
【００８６】
次に、図３のステップＳ１４のプログラムの実行完了後の電力量解析処理を説明する。先ず、図８で説明したプログラムの先頭及び末尾での計測処理結果では、図６で説明した各イベント１回の消費電力と図９の計測したプログラムのイベント回数から、各イベントの消費電力にイベント回数を乗算し、各イベントの乗算結果を加算し、電力量を計算する。例えば、図６に示した各イベント１回の消費電力と図９で示した計測したプログラムのイベント回数の例では、プログラムの電力量は、以下のように計算される。
【００８７】
電力量＝０．１×６＋０．２×６＋０．３×１＋０．４×１＝１．９Ｗｈ
次に、図１０で説明したプログラムの先頭及び末尾、及び定期的な計測処理結果では、図６で説明した各イベント１回の消費電力と図１１の計測したプログラムのイベント回数から、電力量と時間毎の消費電力を計算する。
【００８８】
電力量は、各イベントの消費電力にイベント回数の総数を乗算し、各イベントの乗算結果を加算して、計算する。例えば、図６に示した各イベント１回の消費電力と図１１で示した計測したプログラムのイベント回数の例では、プログラムの電力量は、以下のように計算される。
【００８９】
電力量＝０．１×６＋０．２×６＋０．３×１＋０．４×１＝１．９Ｗ
又、時刻毎の消費電力を計算する。図１３は、時刻毎の消費電力を計算した結果を格納したテーブルを示す図である。即ち、図１１の時刻毎に発生したイベントの消費電力とイベントの回数を乗算し、各時刻の消費電力を計算する。例えば、図１１の例では、時刻１では、整数演算イベント（ＩＮＴ＿ＩＮＳ）が１回発生しているため、時刻１の消費電力は、０．１×１＝０．１Ｗと計算される。又、時刻２では、浮動小数点演算イベント（ＦＰ＿ＩＮＳ）が１回、Ｌ１キャッシュミス（Ｌ１＿ＴＣＭ）が１回、ＴＬＢミス（ＴＬＢ＿ＴＬ）が１回発生している。このため、時刻２の消費電力は、以下のように計算される。
【００９０】
時刻２の消費電力＝０．２×１＋０．３×１＋０．４×１＝０．９Ｗ
図１３に示すように、プログラム実行開始から終了までの各時刻における消費電力を計算できるため、プログラムの実行に要した最大消費電力を求めることができる。図１３の例では、最大消費電力は、時刻２の０．９Ｗである。
【００９１】
このように、利用者の指定したプログラムの実行ごとに、プログラムの実行に要した電力量または最大消費電力を求めることができる。この電力量又は最大消費電力の値によって、後述するように、プログラムの大型計算機の課金等の使用量計算を行うことにより、課金に対する公平性が高まる。また、大型計算機の運用管理者にとっても，課金設定が容易に行える。
【００９２】
さらに，プログラムのチューニングによって、電力量または最大消費電力を小さくしようとするインセンティブが働く。このため、大型計算機が使用するエネルギー消費量の削減につながることが期待できる。
【００９３】
（電力使用量の解析の第２の実施の形態）
図１４は、第２の実施の形態の説明図である。図１４において、図１、図２，図７で説明したものと同一のものは、同一の記号で示す。図１４は、実施の形態の電力量解析処理を、マルチプロセスに適用したものである。
【００９４】
図１４に示すように、マルチプロセスは，一つのＣＰＵコア１８−１が複数のプロセス８２−１，８２−２を実行する場合に，プロセスを切り替えながら実行する。このマルチプロセスは、複数のプロセスを同時に実行しているように見せることができる。ＣＰＵコア１８−１は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｅｍ）としてのカーネル（Ｋｅｒｎｅｌ）８０の管理のもとに、プロセスプログラム（アプリケーションプログラム）８２−１，８２−２を実行する。カーネル８０は、プロセスプログラム８２−１，８２−２ごとに、プロセス構造体８０−１，８０−２と呼ばれるデータを持つ。
【００９５】
プロセス構造体８０−１，８０−２は，実行中のプロセスプログラムの情報（識別子ＩＤ、プロセス自身の状態，メモリやファイル，ＣＰＵコアの情報、課金情報など)を保持する。カーネル８０が、プロセスプログラム８２−１，８２−２に制御権を渡した後，ＣＰＵコア１８−１は、プロセスプログラム８２−１．８２−２の実行を開始する。そして、プロセスプログラム８２−１，８２−２は、プロセスを終了すると、カーネル８０に制御権を返す。カーネル８０は、複数のプロセスの切り替えを行う。切り替えの際に、カーネル８０は、プロセス構造体８０−１，８０−２に、プロセスの状態を保存する。
【００９６】
図１４では、ＣＰＵコア１８−１が、プロセス（プログラム）８２−１の実行からプロセス（プログラム）８２−２の実行に切り替わるときに，ＣＰＵコア１８−１が、プロセス１８−１のプロセス構造体８０−１にＣＰＵコア１８−１の情報を退避し，プロセス１８−２のプロセス構造体８０−２からＣＰＵコア１８−１の情報を復元する。
【００９７】
また、ＣＰＵチップが複数のＣＰＵコアを有するマルチコアの構成である場合には、復元されるプロセスは、以前退避したＣＰＵコアとは別のＣＰＵコアに復元されることがある。更に、マルチプロセスの場合には，あるプログラムが子プロセスを生成して、２つ以上のプロセスでプログラムを実行する、又は別のプログラムのプロセスが同時に実行する場合がある。また，マルチコア構成のＣＰＵチップにおいては、プロセスの実行が別のＣＰＵコアに移動することもある。
【００９８】
第２の実施の形態では、プログラム毎の電力量解析処理をマルチプロセスに対応させたものである。図１５は、第２の実施の形態の電力量解析処理の説明図である。図１５において、図１，図２，図７，図１４で示したものと同一のものは、同一の記号で示してある。
【００９９】
まず，イベントと消費電力の関係を調べる方法は，図４及び図５で説明した第１の実施の形態と同じである。次に、プログラムの実行時に，どのイベントが発生したかを計測する処理を図１５により説明する。第１の処理方法は、ＯＳのカーネル８０が，プロセス終了時に、パフォーマンスカウンタ３４を観測する処理である。
【０１００】
図１５に示すように、カーネル８０のプロセス構造体８０−１，８０−２に，ＣＰＵコア１８−１のパフォーマンスカウンタ３４の値を格納するための領域８４−１，８４−２を追加する。対象のプログラム８２−１，８２−２のプロセスのいずれかが実行開始するときに、カーネル８０がＣＰＵコア１８−１のパフォーマンスカウンタ３４の初期設定を行い、パフォーマンスカウンタ３４の計測を開始する。
【０１０１】
カーネル８０は、プロセスを切り替えるときに（例えば、プロセス８２−１からプロセス８２−２に切り替えるときに），ＣＰＵコア１８−１のパフォーマンスカウンタ３４の値をプロセス構造体８０−１の領域８４−１に退避し、プロセス構造体８０−２の領域８４−２の値をＣＰＵコア１８−１のパフォーマンスカウンタ３４に復元する。
【０１０２】
更に、カーネル８０は、プログラムの実行が終了する時に、ＣＰＵコア１８−１のパフォーマンスカウンタ３４の値を実行が終了するプログラムのプロセス構造体に記録する。第１の処理は、電力量を計算できる。
【０１０３】
第２の処理方法は、カーネル８０が、プロセスごとにパフォーマンスカウンタ３４を定期的に観測する処理である。第１の処理方法と同様に、カーネル８０のプロセス構造体８０−１，８０−２に，パフォーマンスカウンタ３４の値を格納するための領域８４−１，８４−２を追加する。対象のプログラムのプロセスにいずれかが実行を開始するときに、カーネル８０は、パフォーマンスカウンタ３４の初期設定を行い、パフォーマンスカウンタ３４の計測を開始する。
【０１０４】
カーネル８０は、プロセスを切り替えるときに（例えば、プロセス８２−１からプロセス８２−２に切り替えるときに），ＣＰＵコア１８−１のパフォーマンスカウンタ３４の値をプロセス構造体８０−１の領域８４−１に退避し、プロセス構造体８０−２の領域８４−２の値をＣＰＵコア１８−１のパフォーマンスカウンタ３４に復元する。
【０１０５】
更に、カーネル８０は、定期的に、パフォーマンスカウンタ３４の値をプロセス構造体８０−１，８０−２に記録する。例えば、定期的な記録処理に、タイマー割込みを使用することができる。この処理により、図１０、図１１、図１３で説明したように、プログラムの最大消費電力を求めることができる。
【０１０６】
又、カーネル８０がパフォーマンスカウンタ３４の値を記録し、プロセスが切り替わるときに，パフォーマンスカウンタ３４の値をプロセス構造体８０−１，８０−２に退避・復元するため，プロセスの実行が、別のＣＰＵコアに移動した場合にも電力量解析処理を継続できる。
【０１０７】
更に、プログラム実行後，プログラムの電力量または最大消費電力を求める。カーネル８０内のプロセス構造体８０−１，８０−２に記録されているパフォーマンスカウンタの値を用いて，プロセスプログラムごとに電力量または最大消費電力を求める。このため、マルチプロセスの場合に対応でき，さらにマルチコアの場合にも対応できる。
【０１０８】
（電力使用量を付加した使用量の計算処理）
図１６は、実施の形態の使用量計算処理のモジュールの構成図である。図１６において、図７、図１２で説明したものは、同一の記号で示してある。図１６は、例えば、ＵＮＩＸ（登録商標）の課金処理モジュールを示す。図１６に示すように、ＯＳのカーネル８０内のプロセス構造体８０−１内の課金情報構造８８−１は、プロセスプログラム８２ごとに，ＣＰＵ使用時間、Ｉ／Ｏ転送バイト数等を保持する。
【０１０９】
課金処理モジュール８６は、ＯＳに設けられる。課金処理モジュール８６は、システムコール(acct)により，課金情報構造８８−１から保持データを取り出し、課金計算し、課金情報ファイル１６Ｄに出力する。
【０１１０】
図１７は、図１６における課金処理の説明図である。図１８は、図１６、図１７の課金情報構造８８−１の説明図である。図１９は、図１６及び図１７の課金情報ファイル１６Ｄの説明図である。
【０１１１】
図１７は、プログラムの実行後、イベントと消費電力との関係から、プロセスごとに求めた電力量または最大消費電力を課金情報構造体に格納し、課金情報構造体の内容をファイルに出力する処理を示す。図１７に示すように、課金情報構造体８８−１が、ＯＳのカーネル８０内のプロセス構造体８０−１内に設けられる。
【０１１２】
図１８に示すように、課金情報構造体８８−１は，ユーザーＩＤ（ｉｎｔ  ａｃ＿ｕｉｄ）と、ユーザーＣＰＵ使用時間（ｉｎｔ  ａｃ＿ｕｔｉｍｅ）と、システムＣＰＵ使用時間（ｉｎｔ  ａｃ＿ｓｔｉｍｅ）と、起動から終了までに経過した実時間（ｉｎｔ  ａｃ＿ｅｔｉｍｅ）と、平均メモリ使用量（ｉｎｔ  ａｃ＿ｍｅｍ）と、消費電力（ｉｎｔ  ａｃ＿ｐｏｗｅｒ）とを有する。即ち、課金情報構造体８８−１に、消費電力を格納するための領域を追加する。
【０１１３】
ユーザーＣＰＵ時間は、ＣＰＵ１０がユーザーのプログラム実行に要した時間である。システムＣＰＵ時間は、ＣＰＵシステム（システムコントローラ１２、メモリ１４）がユーザーのプログラム実行に要した時間である。起動から終了までに経過した実時間は、プログラムの起動から終了までに経過した実際の時間である。平均メモリ使用量は、プログラムが使用した主記憶装置の平均メモリ使用量である。
【０１１４】
図１７に示すように、課金情報を出力するシステムコールにより課金処理モジュール８６に課金情報を取る指示を出力する（Ｓ１）。課金情報処理モジュール８６は、対象プログラムの開始時に、課金情報を取る指示とパフォーマンスカウンタの計測をプロセス構造体８０−１に指示する（Ｓ２）。
【０１１５】
前述のように、カーネル８０がプロセスプログラム８２に制御権を渡し、ＣＰＵ１０が、プログラム８２を実行し、ＣＰＵコア１８−１のパフォーマンスカウンタ３４が、イベントの回数計測を行う。プロセスプログラム８２又はカーネル８０は、プロセスプログラム８２の実行終了時に、パフォーマンスカウンタ３４のイベント回数を主記憶装置１４に展開されたイベント回数格納域１６Ｂに格納する。この例では、主記憶装置１４に展開されたプロセス構造体８０−１のパフォーマンスカウンタ領域に格納する。そして、課金処理モジュール８６は、プロセス構造体８０−１のパフォーマンスカウンタ域（図１７では、１６Ｂで示す）の値を用いて，対象プロセスの消費電力または最大消費電力を計算する（Ｓ３）。
【０１１６】
課金処理モジュール８６は、計算した消費電力を課金情報構造体８８−１に格納する（Ｓ４）。課金処理モジュール８６は、課金情報構造体８８−１の内容をシステムコールで指定された課金情報ファイル１６Ｄに出力する。
【０１１７】
図１９は、課金情報ファイル１６Ｄの説明図である。課金情報ファイル１６Ｄは、ユーザー名と、コマンド実行回数ｖと、実時間ｗと、実行時間ｘ、平均メモリ使用量ｙと、電力量ｚとを、各ユーザーに格納する。実時間ｗは、図１８の起動から終了までに経過した実時間を示し、実行時間は、図１８の（ユーザーＣＰＵ時間＋システムＣＰＵ時間）を示す。
【０１１８】
課金処理モジュール８６は、更に、課金値を、コマンド実行回数ｖと、実時間ｗと、実行時間ｘ、平均メモリ使用量ｙと、電力量ｚから計算する。例えば、課金処理モジュール８６は、下記式（１）で、課金値を計算する。
【０１１９】
課金値＝ａ×ｖ＋ｂ×ｗ＋ｃ×ｘ＋ｄ×ｙ＋ｅ×ｚ            （１）
尚、式（１）で、パラメータａ，ｂ，ｃ，ｄ，ｅは、計算機センターで決めるパラメータである。
【０１２０】
この実施の形態では、従来の課金情報処理の拡張により，電力量を扱うことができる。又、電力量の代わりに最大消費電力を使用しても良く、電力量と最大消費電力とを組み合わせても良い。
【０１２１】
（電力使用量の解析の第３の実施の形態）
図２０は、第３の実施の形態の電力解析処理フロー図である。第３の実施の形態は、イベントと消費電力の関係を動的に変更するものである。即ち、イベントと消費電力の関係は、線形であるとは限られないため，イベントと消費電力の関係とに誤差が生じる場合がある。第３の実施の形態は、第1の実施の形態で解析した電力量と電力計によって求めた電力量とを比較し，イベントと消費電力との関係を調整(フィードバック)する。これにより、イベントと消費電力との関係との誤差を小さくする。
【０１２２】
先ず、情報処理システムの構成は、図１、図２の構成に、図５で説明した電力計７０とＩ／Ｏポート１９を付加する。
【０１２３】
（Ｓ２０）第1の実施の形態の図３のＳ１０と同様で、イベント毎の単位時間の消費電力を測定する。
【０１２４】
（Ｓ２２）第1の実施の形態の図３のＳ１２と同様の処理で、プログラム実行毎に、発生したイベント回数を計測する。
【０１２５】
（Ｓ２４）第1の実施の形態の図３のＳ１４と同様に、単位時間の消費電力と測定したイベント回数から、プログラムの電力量Ｂを計算する。この実施の形態では、イベント毎の単位時間当たりの消費電力を使用する。例えば，イベントｉの発生回数に対する単位時間当たりの消費電力(関係A)をａｉとし，ある時間ｔの間に発生したイベントｉの回数をｅｉとする。その時の電力量ＷＢは，以下の式（２）で表わされる。
【０１２６】
ＷＢ＝Σ（ａｉ×ｅｉ）                              （２）
このプログラム実行の間にＳ１０と同様に、電力計７０を用いて、イベント毎の単位時間の消費電力を測定する。この後、式（３）により、プログラム実行時の測定電力量ＷＣを計算する。又、図１７〜図１９を用いて説明したように、課金等のプログラムの使用量を計算し、課金情報ファイル１６Ｄに出力する。
【０１２７】
（Ｓ２６）つぎに、イベント回数から計測した電力量ＷＢと電力計７０を用いて電力量ＷＣとを比較し，単位時間当たりの消費電力（関係（Ａ））のパラメータａｉを調整する。例えば、新しい関係(A)のパラメータｎｅｗａｉ以下の式（３）のように更新する。
【０１２８】
ｎｅｗａｉ＝ａｉ＋ α×（ＷＣ−ＷＢ）×（ｅｉ／ Σｅｉ)    （３）
尚、（３）式の「ｅｉ」は、前述のイベント回数である。（３）式の意味は，プログラム実行中に実際に電力計７０で測定した電力量ＷＣが計算した電力量ＷＢより大きければ，関係（Ａ）のパラメータａｉを今までより大きくする。又、（３）式の「α」は利得であり、大きな値にすると発振してしまう。例えば、αは、「０．１」程度が好ましい。
【０１２９】
（Ｓ２８）そして、次のプロセスプログラムが実行される場合には、ステップＳ２２に戻り、更新したパラメータａｉを使用する。
【０１３０】
又、（３）式では、電力量の計算に固定値を考慮していないが、リーク電流等で固定的に消費する電力が必要である。このため、消費電力の計算に固定値を付加する。例えば，電力ｂを固定値とした場合，電力量を求める式（２）は以下の（４）式に変更する。
【０１３１】
ＷＢ＝Σ（ａｉ×ｅｉ）＋ｂ×ｔ                          （４）
尚、式（４）の時間ｔは、プログラムの実行時間である。
【０１３２】
更に、式（３）と同様に、固定値ｂのパラメータの調整を行う。例えば、新しい固定値ｎｅｗｂを以下の式（５）で計算する。
【０１３３】
ｎｅｗｂ＝ｂ＋ β×（ＷＣ−ＷＢ）／ｔ                    （５）
（５）式は、プログラム実行中に実際に電力計７０で測定した電力量ＷＣが計算した電力量ＷＢより大きければ，固定値ｂを今までより大きくする式である。又、式（５）中の「β」は利得であり、大きな値にすると発振してしまう。利得βは、０．０１程度が望ましい。
【０１３４】
以上のフィードバックの計算式は、例示であり、フィードバック可能な式であれば、他の計算式でもかまわない。また，この計算式は，システムに固定的に組み込まれている必要はなく，ソフトウェア(プログラム)で記述した場合は，ユーザ(使用者，管理者)が変更してもかまわない。
【０１３５】
このように、解析した電力量と電力計によって実際に計測した電力量とを比較し，イベントと消費電力の関係を調整(フィードバック)する。これにより、イベントと消費電力との関係との誤差を小さくできる。特に、情報処理システムの温度変化等の環境変化により、消費電力が変化する場合に有効である。
【０１３６】
（他の実施の形態）
前述の実施の形態では、複数のシステムボードを有する情報処理システムで説明したが、１つ以上のシステムボードを有する情報処理システムに適用できる。又、ＣＰＵチップ１０内に、４つのＣＰＵコアを有する例で説明したが、１つ以上のＣＰＵコアを備えるＣＰＵチップに適用できる。
【０１３７】
以上、本発明を実施の形態により説明したが、本発明の趣旨の範囲内において、本発明は、種々の変形が可能であり、本発明の範囲からこれらを排除するものではない。
【産業上の利用可能性】
【０１３８】
プログラムを実行する演算処理ユニットの利用量と電力量とからプログラムの使用量を計算するため、利用者にとって、公平性のある情報処理装置の使用量を計算できる。また、プログラムの実行開始時にパフォーマンスカウンタを初期設定し、プログラムの実行完了時のパフォーマンスカウンタの各イベントの回数と予め計測した演算処理ユニットの各イベント発生時の消費電力とから、プログラムの消費電力を計算するため、プログラム単位で、リアルタイムで且つ高速に情報処理装置の使用量を計算できる。
【符号の説明】
【０１３９】
１−１〜１−Ｎ  システムボード
７  ネットワーク
８−０〜８−Ｍ  端末装置
１０  ＣＰＵユニット
１２  システムコントローラ
１４  記憶ユニット
１８−１〜１８−４  ＣＰＵコア
２７，２９，３１  演算ユニット
２１，２５  ロード／ストアユニット
２２，２４，２６  キャッシュユニット
３４  パフォーマンスカウンタ
３６  パフォーマンスカウンタ管理部
６０  管理ユニット
６２  電源ユニット
６４  外部記憶装置
６６  ネットワークインターフェース装置
６８  接続バス
【図１】
0005510543.tif 000002
【図２】
0005510543.tif 000003
【図３】
0005510543.tif 000004
【図４】
0005510543.tif 000005
【図５】
0005510543.tif 000006
【図６】
0005510543.tif 000007
【図７】
0005510543.tif 000008
【図８】
0005510543.tif 000009
【図９】
0005510543.tif 000010
【図１０】
0005510543.tif 000011
【図１１】
0005510543.tif 000012
【図１２】
0005510543.tif 000013
【図１３】
0005510543.tif 000014
【図１４】
0005510543.tif 000015
【図１５】
0005510543.tif 000016
【図１６】
0005510543.tif 000017
【図１７】
0005510543.tif 000018
【図１８】
0005510543.tif 000019
【図１９】
0005510543.tif 000020
【図２０】
0005510543.tif 000021