(57)【要約】      （修正有）【課題】アイドルタスクの実行時間を用いずにプロセッサの稼働率を計測する情報処理装置を提供する。【解決手段】情報処理装置１は、プロセッサ２と入出力装置３を備える。プロセッサは、入出力装置からのイベントを確認し、イベントが検出された場合には検出されたイベントに応じた処理を実行する実行制御処理を含む処理ループを、繰り返し実行する。情報処理装置がアイドル状態のとき、単位時間における処理ループの実行回数を示すカウント値Ｃ１を計測し、情報処理装置が、入出力装置３との間の入出力処理を含む所定の処理を実行する実行状態のとき、単位時間における処理ループの実行回数を示すカウント値Ｃ２を計測する。カウント値Ｃ１，Ｃ２に基づいてプロセッサ２の稼働率を示す指標を算出する。【選択図】図１
2020126415.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、前記プロセッサとの間でデータを入出力する入出力装置とを有する情報処理装置であって、
前記プロセッサは、
前記入出力装置からのイベントを確認し、イベントが検出された場合には検出されたイベントに応じた処理を実行する実行制御処理を含む処理ループを、繰り返し実行し、
前記情報処理装置がアイドル状態のとき、単位時間における前記処理ループの実行回数を示す第１のカウント値を計測し、
前記情報処理装置が、前記入出力装置との間の入出力処理を含む所定の処理を実行する実行状態のとき、前記単位時間における前記処理ループの実行回数を示す第２のカウント値を計測し、
前記第１のカウント値と前記第２のカウント値とに基づいて前記プロセッサの稼働率を示す指標を算出する、
情報処理装置。
【請求項２】
前記指標は、前記第１のカウント値から算出される前記処理ループの実行時間と、前記第２のカウント値から算出される前記処理ループの実行時間との差分に基づいて算出される、
請求項１記載の情報処理装置。
【請求項３】
前記処理ループは、前記所定の処理の実行に伴って発生するタスクを確認し、実行可能なタスクが検出された場合には検出されたタスクを実行するタスク制御処理をさらに含み、
前記プロセッサは、さらに、前記実行状態のとき、前記単位時間における前記タスク制御処理でのタスクの実行回数を示す第３のカウント値を計測し、
前記指標の算出では、前記第１のカウント値と前記第２のカウント値とに基づいて前記プロセッサの稼働率を示す第１の指標を算出し、前記第１の指標の最大値が１００％となるように前記第３のカウント値を用いて前記第１の指標を補正した第２の指標を算出する、
請求項１記載の情報処理装置。
【請求項４】
前記指標の算出では、
前記第１のカウント値から算出される前記処理ループの処理時間と、前記第２のカウント値から算出される前記処理ループの処理時間との差分に基づいて前記第１の指標を算出し、
前記第３のカウント値と前記第１のカウント値とに基づいて、前記プロセッサの稼働率が１００％となるときの前記単位時間における前記処理ループの実行回数を示す第４のカウント値を算出し、
前記第１のカウント値から算出される前記処理ループの処理時間と、前記第４のカウント値から算出される前記処理ループの処理時間との差分に基づいて算出される、前記プロセッサの稼働率を示す第３の指標が、前記第１の指標と一致するように前記第１の指標を補正して、前記第２の指標を算出する、
請求項３記載の情報処理装置。
【請求項５】
前記情報処理装置は、記憶装置に対するアクセスを制御するストレージ制御装置であり、
前記所定の処理は、前記入出力装置に対する入出力を伴って実行される、前記記憶装置に対するアクセス制御処理である、
請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
プロセッサと、前記プロセッサとの間でデータを入出力する入出力装置とを有するコンピュータの前記プロセッサに、
前記入出力装置からのイベントを確認し、イベントが検出された場合には検出されたイベントに応じた処理を実行する実行制御処理を含む処理ループを、繰り返し実行し、
前記コンピュータがアイドル状態のとき、単位時間における前記処理ループの実行回数を示す第１のカウント値を計測し、
前記コンピュータが、前記入出力装置との間の入出力処理を含む所定の処理を実行する実行状態のとき、前記単位時間における前記処理ループの実行回数を示す第２のカウント値を計測し、
前記第１のカウント値と前記第２のカウント値とに基づいて前記プロセッサの稼働率を示す指標を算出する、
処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理プログラムに関する。
【背景技術】
【０００２】
コンピュータの状態を示す指標の１つとして、コンピュータ内のプロセッサの稼働率（「使用率」「ビジー率」とも呼ばれる）が一般的に利用されている。プロセッサの稼働率を計測する方法としては、例えば、アイドルタスク（またはアイドルスレッド）の実行時間を基に計測する方法が知られている。
【０００３】
また、例えば、プログラムのループ回数をサンプリングしたサンプル値を用いた次のような方法も提案されている。この方法では、複数回のサンプル値の平均値が求められ、単位時間からサンプル値の平均値とループ実行時間との積を減算して求められた実稼働時間と、単位時間との比によって、プロセッサの稼働率が計算される。
【０００４】
一方、近年、通信インタフェースなどのハードウェアからのデータ受信機構として、ＰＭＤ（Poll Mode Driver）が注目されている。ＰＭＤでは、ハードウェアからの受信イベントを周期的なポーリングによって監視することにより、割り込みやコンテキストスイッチを発生させずにハードウェアからのデータ受信処理を実行できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−２６４９５４号公報
【特許文献２】特開平７−００６０６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＰＭＤを用いた処理では、ハードウェアからの受信イベントの有無に関係なく、受信イベントを確認するためのポーリングが繰り返し実行される。このため、アイドルタスクが存在しないので、アイドルタスクの実行時間を基にプロセッサの稼働率を計測することができない。
【０００７】
１つの側面では、本発明は、アイドルタスクの実行時間を用いずにプロセッサの稼働率を計測可能な情報処理装置および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、プロセッサと、プロセッサとの間でデータを入出力する入出力装置とを有する情報処理装置が提供される。この情報処理装置において、プロセッサは、入出力装置からのイベントを確認し、イベントが検出された場合には検出されたイベントに応じた処理を実行する実行制御処理を含む処理ループを、繰り返し実行し、情報処理装置がアイドル状態のとき、単位時間における処理ループの実行回数を示す第１のカウント値を計測し、情報処理装置が、入出力装置との間の入出力処理を含む所定の処理を実行する実行状態のとき、単位時間における処理ループの実行回数を示す第２のカウント値を計測し、第１のカウント値と第２のカウント値とに基づいてプロセッサの稼働率を示す指標を算出する。
【０００９】
また、１つの案では、上記の情報処理装置と同様の処理をコンピュータのプロセッサに実行させる情報処理プログラムが提供される。
【発明の効果】
【００１０】
１つの側面では、アイドルタスクの実行時間を用いずにプロセッサの稼働率を計測できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る情報処理装置の構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ストレージ制御装置のハードウェア構成例を示す図である。
【図４】ストレージ制御装置が備える処理機能の構成例を示すブロック図である。
【図５】タスクおよびハードウェアイベントの処理に関する比較例を示す図である。
【図６】ＰＭＤを用いた場合のタスクおよびハードウェアイベントの処理例を示す図である。
【図７】ビジー率計算方法の例を示す図である。
【図８】スケジューラループに含まれる処理の例を示す図である。
【図９】性能限界時における単位時間での処理時間の配分について説明するための図である。
【図１０】スケジューラループ１回の実行時間における処理時間の配分について説明するための図である。
【図１１】ストレージ制御装置の起動後の処理（装置起動処理）の例を示すフローチャートである。
【図１２】スケジューラループ処理の例を示すフローチャートである。
【図１３】ポーラの処理の例を示すフローチャートである。
【図１４】負荷分散について説明するための図である。
【図１５】ビジー率計算処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理装置の構成例および処理例を示す図である。情報処理装置１は、プロセッサ２と入出力装置３を有する。プロセッサ２は、例えば、ＣＰＵ（Central Processing Unit）である、また、プロセッサ２は、ＣＰＵ内のＣＰＵコアであってもよい。入出力装置３は、プロセッサ２との間でデータを入出力する装置である。入出力装置３としては、例えば、外部の装置との間で通信するための通信インタフェース、情報処理装置１に搭載された記憶装置、情報処理装置１に搭載された、プロセッサ２から出力されたデータを処理して応答する処理回路などを適用可能である。
【００１３】
この情報処理装置１では、プロセッサ２は、入出力装置３からのイベントを確認し、イベントが検出された場合には検出されたイベントに応じた処理を実行する実行制御処理を含む処理ループを、繰り返し実行する。図１に示すフローチャートでは、イベントの確認がステップＳ１ａ，Ｓ１ｂに対応し、イベントが検出されたかの判定がステップＳ２ａ，Ｓ２ｂに対応し、検出されたイベントに応じた処理の実行がステップＳ３ａ，Ｓ３ｂに対応する。
【００１４】
イベントとしては、例えば、入出力装置３が何らかの処理の実行を完了したことを示す完了イベントがある。この場合、プロセッサ２は、完了イベントを検出すると、完了イベントに応じた処理として、例えば、処理の完了を示す入出力装置３からのメッセージを取得するための処理を実行する。また、イベントの確認は、例えば、ポーリングによって行われる。例えば、入出力装置３で処理が完了すると、その完了を示すエントリが完了キューに登録される。プロセッサ２によるイベント確認処理では、完了キューに対するポーリングが行われ、エントリを取得できた場合にはエントリに対応するイベントに応じた処理が実行される。
【００１５】
また、処理ループにはさらに、タスクを確認し、実行可能なタスクが検出された場合にはそのタスクを実行するタスク制御処理が含まれてもよい。図１に示すフローチャートでは、タスクの確認がステップＳ４ａ，Ｓ４ｂに対応し、実行可能なタスクが検出されたかの判定がステップＳ５ａ，Ｓ５ｂに対応し、検出されたタスクの実行がステップＳ６ａ，Ｓ６ｂに対応する。この「タスク」とは、入出力装置３との間の入出力処理を含む所定の処理の実行に伴って発生するものである。
【００１６】
ところで、上記のようなイベントの確認処理は、イベントが検出されるか否かに関係なく必ず実行される。例えば、イベントが検出されなかった場合に、アイドルタスクのようなダミーの処理が実行されることはない。このため、情報処理装置１では、アイドルタスクの実行時間を計測することによってプロセッサ２の稼働率を計測することはできない。
【００１７】
そこで、情報処理装置１では、次のようにしてプロセッサ２の稼働率が計測される。まず、プロセッサ２は、情報処理装置１がアイドル状態のとき、単位時間における処理ループの実行回数を示すカウント値Ｃ１を計測する。図１では、単位時間を１秒としており、この場合カウント値Ｃ１の単位は「回／秒」となる。アイドル状態とは、入出力装置３との間の入出力処理を含む、前述した所定の処理が、プロセッサ２によって実行されていない状態である。したがって、アイドル状態では、入出力装置３からのイベントも発生せず、タスクも発生しない。このため、図１の左側のフローチャートに示すように、ステップＳ２ａ，Ｓ５ａの判定ではいずれも「Ｎｏ」と判定され、イベントに応じた処理の実行（ステップＳ３ａ）も、タスクの実行（ステップＳ６ａ）も行われない。
【００１８】
次に、プロセッサ２は、情報処理装置１が上記の所定の処理を実行する実行状態のとき、単位時間における処理ループの実行回数を示すカウント値Ｃ２を計測する。実行状態では、入出力装置３からのイベントが発生し得る。また、タスクも発生し得る。このため、図１の右側のフローチャートに示すように、ステップＳ２ｂ，Ｓ５ｂのどちらの判定でも「Ｙｅｓ」と判定される可能性があり、イベントに応じた処理（ステップＳ３ｂ）およびタスクの実行処理（ステップＳ６ｂ）のいずれも実行され得る。
【００１９】
プロセッサ２は、このように計測されたカウント値Ｃ１，Ｃ２に基づいて、プロセッサ２の稼働率を算出する。例えば、１／Ｃ１は、アイドル状態において処理ループを１回実行するのにかかった時間（「第１の実行時間」とする）を表す。また、１／Ｃ２は、実行状態において処理ループを１回実行するのにかかった時間（「第２の実行時間」とする）を表す。プロセッサ２は、カウント値Ｃ１，Ｃ２から得られるこのような第１、第２の実行時間を用いることで、プロセッサ２の稼働率を算出できる。
【００２０】
例えば、第２の実行時間から第１の実行時間を減算した残時間は、アイドル状態、実行状態のそれぞれにおける処理ループにおいて共通しない処理の実行時間を表すと考えられる。このため、この残時間が、プロセッサ２の実効的な稼働率（ビジー率）に影響を与える処理の実行時間を表す可能性が高い。したがって、第２の実行時間における残時間の割合が、プロセッサ２の実効的な稼働率を表すと考えられる。
【００２１】
したがって、プロセッサ２は、例えば次の式（１）によってプロセッサ２の稼働率を計算することができる。
稼働率［％］＝（１／Ｃ２−１／Ｃ１）／（１／Ｃ２）×１００
＝（１−Ｃ２／Ｃ１）×１００      ・・・（１）
以上の例のように、第１の実施の形態に係る情報処理装置１は、アイドルタスクの実行時間を用いずに、プロセッサ２の稼働率を計測できる。また、情報処理装置１は、処理ループの実行時間を直接的に計測せずに、処理ループの実行回数をカウントするという、処理時間の計測と比較して低負荷の処理によって、プロセッサ２の稼働率を計測できる。
【００２２】
〔第２の実施の形態〕
次に、図１に示した情報処理装置１の例としてストレージ制御装置が適用されたストレージシステムについて説明する。
【００２３】
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すように、第２の実施の形態に係るストレージシステムは、ホストサーバ５０と、ストレージ制御装置１００，２００と、ストレージ３００とを有する。なお、ストレージ制御装置１００，２００は、図１に示した情報処理装置１の一例である。
【００２４】
ホストサーバ５０は、例えば、業務処理などの各種の処理を実行するサーバコンピュータである。ストレージ制御装置１００，２００は、ホストサーバ５０から受け付けたＩ／Ｏ（Input／Output）要求を処理する。例えば、ホストサーバ５０からのアクセス対象となる１以上の論理ボリュームが、ストレージ３００の記憶領域を用いて作成される。ストレージ制御装置１００，２００は、ホストサーバ５０から論理ボリュームに対するＩ／Ｏ要求を受け付け、論理ボリュームに対するＩ／Ｏ処理を制御する。ストレージ制御装置１００，２００は、例えば、汎用のサーバコンピュータとして実現される。この場合、ストレージ制御装置１００，２００は、ストレージ制御用のアプリケーションプログラムを実行することで、ストレージ制御を実行する。ストレージ３００には、１台以上の不揮発性記憶装置が搭載されている。例えば、ストレージ３００には、不揮発性記憶装置としてＳＳＤ（Solid State Drive）が搭載されている。
【００２５】
なお、ホストサーバ５０とストレージ制御装置１００，２００とは、例えば、ＦＣ（Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを利用して接続される。ストレージ制御装置１００，２００は、例えば、ＦＣ、ｉＳＣＳＩ、ＬＡＮ（Local Area Network）などを利用して接続される。ストレージ制御装置１００，２００が互いに接続されていることで、例えば、データの分散配置や、データの二重化（一方から他方へのデータコピー）などが実現可能になる。ストレージ制御装置１００，２００とストレージ３００とは、例えば、ＦＣ、ｉＳＣＳＩ、ＳＡＴＡ（Serial Advanced Technology Attachment）などを利用してそれぞれ接続される。
【００２６】
図３は、ストレージ制御装置のハードウェア構成例を示す図である。なお、図３ではストレージ制御装置１００のハードウェア構成について例示するが、ストレージ制御装置２００についてもストレージ制御装置１００と同様のハードウェア構成によって実現される。
【００２７】
ストレージ制御装置１００は、ＣＰＵ１０１、ＲＡＭ（Random Access Memory）１０２、ＮＶＭｅ（Non-Volatile Memory Express）ドライブ１０３、読み取り装置１０４、圧縮伸張装置１０５、ホストインタフェース（Ｉ／Ｆ）１０６、通信インタフェース（Ｉ／Ｆ）１０７およびドライブインタフェース（Ｉ／Ｆ）１０８を備える。
【００２８】
ＣＰＵ１０１は、ＲＡＭ１０２からプログラムを読み出して処理する処理装置である。ＣＰＵ１０１は、複数のコア（プロセッサコア）を備えるマルチコアＣＰＵである。例えば、図３に示すように、ＣＰＵ１０１は、コア１０１ａ〜１０１ｄを備える。
【００２９】
ＲＡＭ１０２は、ストレージ制御装置１００の主記憶装置として使用される。ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。
【００３０】
ＮＶＭｅドライブ１０３は、ＮＶＭｅ方式のＳＳＤであり、例えば、ストレージ制御のための二次キャッシュとして使用される。また、ＮＶＭｅドライブ１０３は、ストレージ制御装置１００の補助記憶装置として使用されてもよい。この場合、ＮＶＭｅドライブ１０３には、ＯＳプログラム、アプリケーションプログラムおよび各種データが格納される。
【００３１】
読み取り装置１０４には、可搬型記録媒体１０９が脱着される。読み取り装置１０４は、可搬型記録媒体１０９に記録されたデータを読み取ってＣＰＵ１０１に送信する。可搬型記録媒体１０９としては、光ディスク、光磁気ディスク、半導体メモリなどがある。圧縮伸張装置１０５は、ストレージ３００に書き込まれるデータを圧縮する。また、圧縮伸張装置１０５は、ストレージ３００から読み出された圧縮データを伸張する。
【００３２】
ホストインタフェース１０６は、ホストサーバ５０と通信するためのインタフェース装置である。通信インタフェース１０７は、他方のストレージ制御装置２００と通信するためのインタフェース装置である。ドライブインタフェース１０８は、ストレージに含まれる不揮発性記憶装置と通信するためのインタフェース装置である。
【００３３】
なお、コア１０１ａ〜１０１ｄは、図１に示したプロセッサ２の一例である。また、ＮＶＭｅドライブ１０３、圧縮伸張装置１０５、ホストインタフェース１０６、通信インタフェース１０７、ドライブインタフェース１０８は、図１に示した入出力装置３の一例である。
【００３４】
図４は、ストレージ制御装置が備える処理機能の構成例を示すブロック図である。ストレージ制御装置１００は、Ｉ／Ｏ制御部１１０、スケジューラ１２０，１２０ａ，・・・、性能情報収集部１３０および記憶部１４０を備える。Ｉ／Ｏ制御部１１０、スケジューラ１２０，１２０ａ，・・・および性能情報収集部１３０の処理は、例えば、ＣＰＵ１０１が所定のプログラムを実行することで実現される。記憶部１４０は、例えば、ＲＡＭ１０２の記憶領域によって実現される。
【００３５】
Ｉ／Ｏ制御部１１０は、ホストサーバ５０からのＩ／Ｏ要求に応じた論理ボリュームに対するＩ／Ｏ処理を制御する。Ｉ／Ｏ制御部１１０は、例えば、上位接続部１１１、キャッシュ管理部１１２、重複排除部１１３およびＩ／Ｏ処理部１１４を備える。
【００３６】
上位接続部１１１は、ホストサーバ５０からＩ／Ｏ要求（書き込み要求、読み出し要求）を受け付ける。キャッシュ管理部１１２は、上位接続部１１１が受け付けたＩ／Ｏ要求に応じたＩ／Ｏ処理を、ＲＡＭ１０２に確保されたキャッシュメモリの領域を用いて制御する。重複排除部１１３は、Ｉ／Ｏ要求に応じてストレージ３００に格納されるデータの重複を排除するための制御を行う。Ｉ／Ｏ処理部１１４は、重複が排除され、かつ、圧縮伸張装置１０５によって圧縮されたデータを、ストレージ３００に書き込む。このとき、例えば、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）によって書き込みが制御される。また、Ｉ／Ｏ処理部１１４は、ストレージ３００からデータを読み出し、そのデータを圧縮伸張装置１０５に伸張させる。
【００３７】
スケジューラ１２０，１２０ａ，・・・は、Ｉ／Ｏ制御部１１０の各部で発生するタスクの実行を制御する。Ｉ／Ｏ制御部１１０のタスクは、実体的にはスケジューラ１２０，１２０ａ，・・・によって実行される。また、スケジューラ１２０，１２０ａ，・・・は、ハードウェアイベントに応じた処理の実行を制御する。ハードウェアイベントとは、例えば、ＮＶＭｅドライブ１０３、圧縮伸張装置１０５、ホストインタフェース１０６、通信インタフェース１０７、ドライブインタフェース１０８で実行された処理が完了したことを示すイベントである。
【００３８】
スケジューラ１２０，１２０ａ，・・・の処理は、ＣＰＵ１０１内のそれぞれ個別のコアによって実行される。例えば、スケジューラ１２０の処理はコア１０１ａによって実行され、スケジューラ１２０ａの処理はコア１０１ｂによって実行される。スケジューラ１２０，１２０ａ，・・・はそれぞれ同一の構成を有するので、ここでは代表してスケジューラ１２０について説明する。スケジューラ１２０は、スケジューラエンジン１２１と性能情報計算部１２２を備える。
【００３９】
スケジューラエンジン１２１は、タスクのスケジューリングや実行制御、ハードウェアイベントの検出およびハードウェアイベントに応じた処理の実行制御を行う。ここで、本実施の形態では、ＰＭＤを用いたポーリングベースのハードウェアイベント受信方式が用いられる。この方式では、発生したハードウェアイベントがポーラによるポーリングによって検出される。スケジューラエンジン１２１は、ポーラを起動してハードウェアイベントの検出および検出されたハードウェアイベントに応じた処理（ハードウェアイベント処理）を含む第１の処理と、スケジューリングされたタスクを実行する第２の処理とを、繰り返し実行する。以下の説明では、このように繰り返し実行される、第１の処理と第２の処理とを含む処理を、「スケジューラループ」と記載する。
【００４０】
スケジューラエンジン１２１は、ポーラ処理部１２３、タスク処理部１２４および負荷分散処理部１２５を備える。ポーラ処理部１２３は、ポーラの処理を実行する。タスク処理部１２４は、タスクを実行する。負荷分散処理部１２５は、コア間（スケジューラ間）で処理負荷が分散されるようにタスクの実行を制御する。
【００４１】
性能情報計算部１２２は、性能情報の１つとして、対応するコアのビジー率を計算する。例えば、スケジューラ１２０の処理がコア１０１ａによって実行される場合、スケジューラ１２０の性能情報計算部１２２は、コア１０１ａのビジー率を計算する。性能情報計算部１２２は、ループ数カウンタ１２６、タスク実行数カウンタ１２７およびビジー率計算部１２８を備える。ループ数カウンタ１２６は、スケジューラエンジン１２１によるスケジューラループの実行数をカウントする。タスク実行数カウンタ１２７は、タスク処理部１２４によるタスクの実行数をカウントする。ビジー率計算部１２８は、スケジューラループの実行数とタスクの実行数とを利用して、ビジー率を計算する。
【００４２】
性能情報収集部１３０は、ストレージ制御装置１００の性能情報を収集する。性能情報としては、例えば、コア１０１ａ〜１０１ｄのビジー率、ＲＡＭ１０２の使用量などが収集される。ビジー率としては、スケジューラ１２０，１２０ａ，・・・の性能情報計算部１２２から、コアごとのビジー率が収集される。
【００４３】
記憶部１４０は、スケジューラ１２０での性能情報の計算結果、性能情報収集部１３０によって収集された性能情報などのデータを記憶する。
次に、タスクおよびハードウェアイベントの処理について説明する。
【００４４】
まず、図５は、タスクおよびハードウェアイベントの処理に関する比較例を示す図である。図５（Ａ）は、ハードウェアイベントが発生していない通常処理時について示す。図５（Ｂ）は、割り込み発生時について示す。
【００４５】
ＰＭＤを用いないスケジューラは、タスクの実行やハードウェアイベントに応じたハードウェアイベント処理の実行を管理する。例えば、ハードウェアイベントが発生していない場合、図５（Ａ）に示すように、スケジューラが実行可能なタスクを判別してそのタスクに制御を移し（ＣＰＵリソースを明け渡し）、タスクの実行が終了すると制御がスケジューラに戻される、という処理が繰り返される。また、ハードウェアイベントが発生すると、図５（Ｂ）に示すように割り込みが発生し、スケジューラはタスクの実行制御を中断して、ハードウェアイベント処理に制御を移す。
【００４６】
図６は、ＰＭＤを用いた場合のタスクおよびハードウェアイベントの処理例を示す図である。本実施の形態において、スケジューラ１２０（実際にはスケジューラエンジン１２１）は、図６に示すようなスケジューラループを繰り返し実行する。
【００４７】
スケジューラループでは、まず、スケジューラ１２０のポーラ処理部１２３がポーラを起動し、ポーラによってハードウェアイベントを検出するためのポーリングが行われる。例えば、ハードウェアイベントの発行元のハードウェアに対応する完了キューがＲＡＭ１０２上に用意され、そのハードウェアがある処理の実行を完了すると、その処理の完了というハードウェアイベントを示すエントリが完了キューに格納される。ポーラは、完了キューをポーリングし、エントリを取得できた場合には、そのエントリに対応するハードウェアイベント処理に制御を移す。これによりハードウェアイベント処理が実行され、実行が完了すると制御がポーラに戻され、さらに制御がスケジューラ１２０のポーラ処理部１２３に戻される。次に、スケジューラ１２０のタスク処理部１２４は、実行可能なタスクを判別して、そのタスクに制御を移す。これによってタスクが実行され、実行が完了するとスケジューラ１２０のタスク処理部１２４に制御が戻される。
【００４８】
ハードウェアイベント処理は、例えば、処理の完了の通知先となるタスクを、スケジューラ１２０によって実行可能な状態にする処理である。ここでは例として、ホストインタフェース１０６を介してホストサーバ５０にデータ（例えば、ホストサーバ５０から読み出しが要求されたデータ）を送信する場合について説明する。なお、ここでは、スケジューラ１２０が実行可能なタスクを取得するための実行キューが、ＲＡＭ１０２上に用意されるものとする。
【００４９】
例えば、Ｉ／Ｏ制御部１１０の上位接続部１１１は、データ送信タスクに対応するエントリを実行キューに格納する。スケジューラ１２０のタスク処理部１２４は、実行キューからそのエントリを取得すると、データ送信タスクに含まれる処理のうち、ホストサーバ５０に対するデータ送信をホストインタフェース１０６に依頼する、という処理を実行する。そして、タスク処理部１２４は、データ送信タスクをサスペンド状態にする。
【００５０】
その後、ホストインタフェース１０６がホストサーバ５０に対するデータ送信を完了すると、送信完了メッセージが所定の受信バッファに格納されるとともに、送信完了を示すエントリが完了キューに格納される。すなわち、ホストインタフェース１０６によるデータ送信完了というハードウェアイベントが発生し、このイベントに対応するエントリが完了キューに格納される。スケジューラ１２０のポーラ処理部１２３によって起動されたポーラが、完了キューからこのエントリを取得すると、エントリに対応するハードウェアイベント処理が実行される。このハードウェアイベント処理では、送信完了メッセージの取得を示すエントリが実行キューに格納される。このエントリには、データ送信タスクの識別情報や、受信バッファにおける送信完了メッセージのアドレスが含まれる。このようなエントリが実行キューに格納されることで、データ送信タスクが起床される。
【００５１】
そして、スケジューラ１２０のタスク処理部１２４は、実行キューからデータ完了メッセージの取得を示すエントリを取得すると、エントリに基づいてデータ送信タスクの実行を再開する。データ送信タスクの実行により、受信バッファから送信完了メッセージが取得され、これによってデータ送信タスクが完了する。
【００５２】
ハードウェアイベントとしては、例えば、次のようなものも考えられる。例えば、Ｉ／Ｏ処理部１１４からの要求に応じて、圧縮伸張装置１０５に対してデータの圧縮を依頼するタスクが実行された場合、その後、圧縮伸張装置１０５によるデータ圧縮の完了というハードウェアイベントが発生する。このとき、圧縮されたデータが受信バッファに格納される。また、例えば、キャッシュ管理部１１２からの要求に応じて、ＮＶＭｅドライブ１０３の二次キャッシュに対してデータ書き込みまたはデータ読み出しを依頼するタスクが実行された場合、その後、ＮＶＭｅドライブ１０３によるデータ書き込みまたはデータ読み出しの完了というハードウェアイベントが発生する。このとき、データ書き込みの完了メッセージ、または読み出されたデータが受信バッファに格納される。
【００５３】
また、他のハードウェアイベントの例としては、ホストインタフェース１０６が、ホストサーバ５０からＩ／Ｏ要求（書き込み要求または読み出し要求）の受信を完了する処理がある。あるいは、通信インタフェース１０７が、ストレージ制御装置２００からのメッセージ（データ送信に対する受信完了メッセージ、送信要求に対するデータ受信メッセージなど）の受信を完了する処理がある。
【００５４】
以上のように、ＰＭＤを用いた場合、スケジューラループの実行のたびに、ポーリングによるハードウェアイベントのチェックが必ず行われる。ポーリングの際に完了キューにエントリが必ず存在するとは限らないため、エントリがない場合のポーリングは無駄になる。その反面、割り込みやコンテキストスイッチが発生しないため、ハードウェアイベントの検出およびハードウェアイベント処理については、図５に示したような割り込みを用いる場合と比較して高速に実行可能となる。このため、ストレージ制御のようにＣＰＵ１０１と他のハードウェアとの間で頻繁にデータが転送される場合には、ポーリングの際に完了キューにエントリが存在する可能性が高くなるため、ハードウェアイベントを効率的に処理できる。
【００５５】
なお、実際には、イベント監視対象のハードウェアごとに、ポーラや完了キューが設けられる。そして、例えば、スケジューラループの１回の実行に対して、各ハードウェアに対応するポーラのうちの１つが起動されて、そのハードウェアについてのハードウェアイベントの検出処理が実行される。この場合、スケジューラループが実行されるたびに、別のハードウェアに対応するポーラが起動される。あるいは、１回のスケジューラループの実行の際に、各ハードウェアに対応するポーラが順次起動されてもよい。
【００５６】
次に、コアのビジー率の検出について説明する。
ストレージ制御装置１００のようなコンピュータにおいては、ＣＰＵやコアのビジー率は様々な用途で利用される。例えば、装置の性能低下の原因がＣＰＵやコアの負荷によるものかを判断するために利用される。あるいは、コア間で負荷が均等になるように各コアに実行させる処理をバランシングするために利用される。本実施の形態のストレージ制御装置１００では、負荷分散処理部１２５が、コア１０１ａ〜１０１ｄのそれぞれの負荷が均等になるように、タスク処理部１２４におけるタスクの実行を制御するために利用される。
【００５７】
ここで、図５に示すような制御が行われる場合、コアが実行すべきタスクがないときには、アイドルスレッド（またはアイドルタスク）が実行されることで、コアの処理サイクルが消費される。この場合、アイドルスレッドが実行された時間を計測し、それ以外の処理の実行時間の割合を求めることで、ビジー率を計算できる。
【００５８】
一方、図６に示すようにＰＭＤを用いた場合には、スケジューラループが実行されるたびに、ポーラによるポーリングが必ず実行される。このような構造のため、ＰＭＤを用いた場合、一般的に、アイドルスレッドに相当するものは存在しない。したがって、アイドルスレッドの実行時間からビジー率を計算することはできない。
【００５９】
そこで、スケジューラループの実行時間のうち、意味のある処理が実行された時間（実処理時間）を計測して、その時間の割合を計算する方法が考えられる。「意味のある処理」とは、ストレージ制御装置１００の場合、主にＩ／Ｏ制御部１１０の要求に応じて実行される処理であり、図６の例では、ハードウェアイベント処理およびタスクの処理に相当する。この場合、スケジューラループ１回分の実行時間と、ハードウェアイベントの処理時間（図６の処理時間ＴＡ）と、タスクの実行時間（図６の処理時間ＴＢ）とを計測することで、ビジー率を計算できると考えられる。
【００６０】
図７は、ビジー率計算方法の例を示す図である。まず、この図７を用いて、ビジー率計算方法の比較例について説明する。
図６に示した処理時間ＴＡ，ＴＢのうち、ハードウェアイベントの処理時間ＴＢについては、スケジューラが直接継続することが難しいという問題がある。これは、スケジューラがポーラを起動させた後、ポーラがハードウェアイベントを検出できたか否か（ハードウェアイベント処理が実行されたか否か）を、スケジューラが把握できないからである。このため、処理時間ＴＡ，ＴＢを含む実処理時間を直接的に計測することは難しい。
【００６１】
そこで、ここでは比較例として、Ｉ／Ｏ制御部１１０が起動していない、ストレージ制御装置１００のアイドル時におけるスケジューラループ１回の実行時間に基づいて実処理時間以外の処理時間を推定することで、実処理時間を推定する。具体的には、ストレージ制御装置１００のアイドル時と、Ｉ／Ｏ制御部１１０が起動してその処理が開始されているＩ／Ｏ処理中のそれぞれにおいて、スケジューラループ１回の実行時間が計測される。図７に示すように、アイドル時に計測されたスケジューラループの実行時間を、スケジューラアイドル時間Ｔｓとする。一方、Ｉ／Ｏ処理中に計測されたスケジューラループの実行時間を、全実行時間Ｔａｌｌとする。
【００６２】
アイドル時にはＩ／Ｏ制御部１１０の処理は実行されないので、スケジューラアイドル時間Ｔｓには実処理時間は含まれない。このため、全実行時間Ｔａｌｌからスケジューラアイドル時間Ｔｓを減算した時間が、実処理時間を示すと推定される。ただし、Ｉ／Ｏ処理中には、ハードウェアイベント処理やタスクの処理以外の、アイドル時には実行されない処理が含まれる。このような処理としては、コア間でタスクの処理負荷を均等化するための負荷分散処理がある。そこで、図７に示すように、このような処理にかかる時間をスケジューラオーバヘッドＴｂとして定義する。このような時間を加味することで、Ｔａｌｌ−Ｔｓ−Ｔｂによって求められるユーザ時間Ｔｕを、実処理時間と推測することができる。この場合、ビジー率は次の式（２）によって算出される。
ビジー率＝Ｔｕ／Ｔａｌｌ×１００
＝（Ｔａｌｌ−Ｔｓ−Ｔｂ）／Ｔａｌｌ×１００    ・・・（２）
ここで、図８は、スケジューラループに含まれる処理の例を示す図である。この図８を用いて、スケジューラアイドル時間、スケジューラオーバヘッド、ユーザ時間にそれぞれ実行される処理の例について説明する。
【００６３】
Ｉ／Ｏ処理中におけるスケジューラループには、例えば、ポーラ起動のための処理Ｐ１、ポーリングのための処理Ｐ２、ハードウェアイベント処理のための処理Ｐ３、ポーラ終了のための処理Ｐ４、タスク実行に関する負荷分散のための処理Ｐ５、タスク実行のための処理Ｐ６、タスク終了のための処理Ｐ７が含まれる。
【００６４】
スケジューラアイドル時間Ｔｓには、Ｉ／Ｏ処理中とアイドル時のどちらでも実行される処理の時間が含まれる。図８の例では、処理Ｐ１，Ｐ２，Ｐ４，Ｐ７の時間が、スケジューラアイドル時間Ｔｓに含まれる。また、ユーザ時間Ｔｕには、処理Ｐ３，Ｐ６の時間が含まれる。処理Ｐ５は、コア間の負荷バランスの状況からタスクを実行すべきか判定する処理である。このような処理Ｐ５は、実行すべきタスクが存在しないアイドル時には実行されないため、処理Ｐ５の時間はスケジューラオーバヘッドＴｂに含められる。したがって、アイドル時にスケジューラアイドル時間Ｔｓを計測し、Ｉ／Ｏ処理中に全実行時間Ｔａｌｌを計測することで、Ｔａｌｌ−Ｔｓ−Ｔｂによってユーザ時間Ｔｕを算出できる。
【００６５】
ところで、上記の比較例では、スケジューラループごとに処理時間を計測しなければならない。このため、処理時間計測のための処理負荷が大きく、ＣＰＵ１０１の処理性能、とくにＩ／Ｏ制御部１１０の処理性能が低下してしまうという問題がある。そこで、本実施の形態のストレージ制御装置１００は、処理時間計測の代わりにスケジューラループの実行回数をカウントすることでビジー率を算出する。
【００６６】
図７に示すように、本実施の形態では、性能情報計算部１２２のループ数カウンタ１２６が、アイドル時およびＩ／Ｏ処理中のそれぞれにおいて、単位時間当たりのスケジューラループの実行数（ループ数）をカウントする。アイドル時にカウントされる単位時間当たりのループカウント値をＬｉと、Ｉ／Ｏ処理中にカウントされる単位時間当たりのループカウント値をＬｒとする。なお、単位時間は例として１秒とする。
【００６７】
単位時間におけるスケジューラアイドル時間Ｔｓの平均値は、アイドル時における単位時間当たりのループカウント値Ｌｉを用いて、Ｔｓ＝１／Ｌｉによって求められる。また、単位時間におけるＩ／Ｏ処理中のスケジューラループの全実行時間Ｔａｌｌの平均値は、Ｉ／Ｏ処理中における単位時間当たりのループカウント値Ｌｒを用いて、Ｔａｌｌ＝１／Ｌｒによって求められる。
【００６８】
スケジューラオーバヘッドＴｂは、Ｉ／Ｏ処理中において実行されるタスク数に応じて増加する必須コストであり、なおかつ、ユーザ時間Ｔｕと比較して非常に小さい。このため、スケジューラオーバヘッドＴｂは、タスク実行のために発生する必須コストとみなしてユーザ時間Ｔｕに含めることができる。この場合、ビジー率計算部１２８は、ビジー率を次の式（３）によって近似的に算出できる。
ビジー率［％］＝（Ｔａｌｌ−Ｔｓ）／Ｔａｌｌ
＝（１／Ｌｒ−１／Ｌｉ）／（１／Ｌｒ）×１００
＝（１−Ｌｒ／Ｌｉ）×１００      ・・・（３）
以上の処理により、アイドルスレッドが存在しないシステムにおいても、ＣＰＵやコアのビジー率を計算できる。また、式（３）によれば、処理の実行時間でなく実行回数を計測することで、低処理負荷でビジー率を計測できる。
【００６９】
ところで、コアのビジー率は、コアに余力があるかを判断するために使用されるので、コアが性能限界に達したときに１００％となる指標が望ましい。しかし、上記の式（２）では、スケジューラアイドル時間ＴｓとスケジューラオーバヘッドＴｂは性能限界に達したときでも０にならないので、算出されるビジー率の最大値は１００％に達しない。したがって、性能限界に達したときのスケジューラアイドル時間ＴｓとスケジューラオーバヘッドＴｂとを予測して、この予測に基づいてビジー率を補正することが望ましい。
【００７０】
性能限界に近い状況では、スケジューラループごとに常にタスクが実行されることから、タスクの処理時間（図６の処理時間ＴＢ）がユーザ時間Ｔｕの大部分を占めると考えられる。そこで、ビジー率計算部１２８は、スケジューラループごとに常にタスクが実行された場合の予測ループ数（後述するループカウント値Ｌｂ）を基に、式（３）で算出されるビジー率を補正する。
【００７１】
図９は、性能限界時における単位時間での処理時間の配分について説明するための図である。
性能情報計算部１２２のタスク実行数カウンタ１２７は、Ｉ／Ｏ処理中において、単位時間当たりのタスク処理部１２４によるタスク実行数Ｎｔをカウントする。また、単位時間当たりのスケジューラアイドル時間Ｔｓ’は、ループ数カウンタ１２６によるカウント値を基に次の式（４）によって算出される。
Ｔｓ’＝１／Ｔｓ＝Ｌｒ／Ｌｉ      ・・・（４）
上記と同様に、スケジューラオーバヘッドＴｂが必須コストとしてユーザ時間Ｔｕに含まれると考える。また、性能限界時では、単位時間におけるすべてのスケジューラループでタスクが実行され、ユーザ時間Ｔｕのほぼすべてをタスクの実行時間が占めると考える。すると、性能限界時における単位時間当たりのタスク実行時間Ｔｔは、下記の式（５）によって算出される。また、性能限界時におけるタスクの平均実行時間を示すタスク実行時間Ｄｔは、下記の式（６）によって算出される。
Ｔｔ＝１−Ｔｓ’＝１−Ｌｒ／Ｌｉ      ・・・（５）
Ｄｔ＝Ｔｔ／Ｎｔ      ・・・（６）
図１０は、スケジューラループ１回の実行時間における処理時間の配分について説明するための図である。
【００７２】
上記の式（６）によって算出されたタスク実行時間Ｄｔは、性能限界時におけるユーザ時間Ｔｕを示すと考えることができる。この場合、図１０に示すように、性能限界時には次の式（７）が成立する。
Ｔａｌｌ＝Ｄｔ＋Ｔｓ      ・・・（７）
また、性能限界時における単位時間当たりのループカウント値Ｌｂは、次の式（８）によって算出される。
Ｌｂ＝１／Ｔａｌｌ＝１／（Ｄｔ＋Ｔｓ）      ・・・（８）
したがって、性能限界時におけるコアのビジー率は、次の式（９）によって算出される。なお、式（９）は、式（３）のＬｒとしてＬｂが代入された式となる。
ビジー率＝（Ｔａｌｌ−Ｔｓ）／Ｔａｌｌ
＝（１−Ｌｂ／Ｌｉ）×１００      ・・・（９）
式（９）によって算出される値は、性能限界時の値、すなわち現実のビジー率が１００％であるときの値を示す。したがって、式（９）の算出値を１００％と見なして、式（９）を基に、式（３）の算出値の最大値が１００％となるようにこの算出値を補正するための補正値αが求められる。補正値αは、次の式（１０）によって算出される。
α＝１／（１−Ｌｂ／Ｌｉ）      ・・・（１０）
以上より、ビジー率計算部１２８は、最大値が１００％となるように補正されたビジー率を、ループ数カウンタ１２６からのループカウント値Ｌｉ，Ｌｒと、タスク実行数カウンタ１２７からのタスク実行数Ｎｔとを用いて、下記の式（１１）によって算出する。
ビジー率＝（１−Ｌｒ／Ｌｉ）×α×１００
＝（１−Ｌｒ／Ｌｉ）／（１−Ｌｂ／Ｌｉ）×１００    ・・・（１１）
式（１１）は、式（３）の算出値を補正値αによって補正するようにした計算式である。この式（１１）を用いることにより、ストレージ制御装置１００は、スケジューラループの実行数およびタスクの実行数をカウントするという低負荷の処理によって、コアのビジー率を高精度に算出できる。
【００７３】
次に、ストレージ制御装置１００の処理についてフローチャートを用いて説明する。
まず、図１１は、ストレージ制御装置の起動後の処理（装置起動処理）の例を示すフローチャートである。図１１の処理は、ストレージ制御装置１００が起動し、スケジューラ１２０が起動した状態で（前述のアイドル時に）実行される。このとき、Ｉ／Ｏ制御部１１０は起動しておらず、Ｉ／Ｏ処理は実行されない。
【００７４】
［ステップＳ１１］スケジューラ１２０が起動すると、スケジューラエンジン１２１は、利用されるポーラを登録する。例えば、スケジューラエンジン１２１は、接続されているハードウェアを検索し、検索されたハードウェアのそれぞれに対応するポーラを登録する。
【００７５】
［ステップＳ１２］スケジューラエンジン１２１は、スケジューラループを開始する。この段階では、Ｉ／Ｏ制御部１１０が起動していないアイドル状態であるので、スケジューラ１２０が実行可能なタスクは発生せず、ポーラによってハードウェアイベントは検出されない。
【００７６】
［ステップＳ１３］ループ数カウンタ１２６は、所定時間におけるスケジューラループの実行数（ループ数）をカウントする。例えば、単位時間（１秒）におけるループ数がカウントされる。あるいは、単位時間より長い所定時間におけるループ数がカウントされる。
【００７７】
［ステップＳ１４］ループ数カウンタ１２６は、ステップＳ１３でのカウント数に基づいて、アイドル時における単位時間当たりのループカウント値Ｌｉを算出し、記憶部１４０に保存する。ステップＳ１３で単位時間におけるループ数がカウントされた場合、そのループ数がそのままループカウント値Ｌｉとして記憶部１４０に保存される。また、ステップＳ１３で単位時間より長い時間のループ数がカウントされた場合、そのループ数に基づく単位時間当たりの平均ループ数が算出されて、算出された平均ループ数がループカウント値Ｌｉとして記憶部１４０に保存される。
【００７８】
［ステップＳ１５］コア１０１ａ〜１０１ｄのそれぞれについてのループカウント値Ｌｉの保存が完了すると、Ｉ／Ｏ制御部１１０が起動される。これにより、アイドル状態が終了し、Ｉ／Ｏ処理が開始される。スケジューラループでは、スケジューラ１２０が実行可能なタスクが発生するようになり、ポーラによってハードウェアイベントが検出されるようになる。
【００７９】
なお、ループカウント値Ｌｉは、コア１０１ａ〜１０１ｄのうちの１つにおいて算出されて、その値がコア１０１ａ〜１０１ｄで共通に使用されてもよい。
図１２は、スケジューラループ処理の例を示すフローチャートである。図１２のステップＳ２１〜Ｓ２７の処理が、１回のスケジューラループにおける処理に相当する。なお、図１２の処理は、アイドル状態、Ｉ／Ｏ処理中のどちらでも共通に実行される。
【００８０】
［ステップＳ２１］ループ数カウンタ１２６は、スケジューラループの実行回数を示すループ数をカウントアップする。
［ステップＳ２２］ポーラ処理部１２３は、ポーラを起動する。これにより、ポーラによる完了キューのポーリングが行われる。ポーリングによりハードウェアイベントが検出された場合、すなわち完了キューからエントリが取得された場合には、ハードウェアイベント処理が実行される。なお、ポーラの処理については、後の図１３において説明する。
【００８１】
［ステップＳ２３］タスク処理部１２４は、実行可能なタスクがあるかを判定する。実行可能なタスクがある場合、処理がステップＳ２４に進められる。実行可能なタスクがない場合、処理がステップＳ２８に進められる。なお、アイドル状態では、実行可能なタスクはなく、処理はステップＳ２８に進められる。
【００８２】
［ステップＳ２４］負荷分散処理部１２５は、自コア（ここではスケジューラ１２０の処理を実行しているコア１０１ａ）に対するタスク投入確率を取得する。
［ステップＳ２５］負荷分散処理部１２５は、タスク投入確率に基づいて、タスクを自コアが実行するかを判定する。タスクを実行すると判定された場合、処理がステップＳ２６に進められる。タスクを実行しないと判定された場合、処理がステップＳ２８に進められる。
【００８３】
なお、負荷分散の処理例については、後の図１４において詳述する。
［ステップＳ２６］タスク処理部１２４は、タスクを実行する。
［ステップＳ２７］タスク実行数カウンタ１２７は、タスクの実行数を示すカウント数をカウントアップする。
【００８４】
［ステップＳ２８］スケジューラエンジン１２１は、ストレージ制御装置１００が停止されるかを判定する。ストレージ制御装置１００の動作が継続する場合、処理がステップＳ２１に進められる。ストレージ制御装置１００が停止する場合、処理が終了する。
【００８５】
図１３は、ポーラの処理の例を示すフローチャートである。
［ステップＳ３１］ポーラ処理部１２３によって起動されたポーラは、このポーラに対応する完了キューのポーリングを行う。
【００８６】
［ステップＳ３２］ポーラは、ハードウェアイベントがあるかを判定する。ポーリングにより完了キューからエントリが取得できた場合、ハードウェアイベントがあると判定される。ポーラは、ハードウェアイベントがあった場合、ステップＳ３３の処理を実行し、ハードウェアイベントがなかった場合、処理を終了する。
【００８７】
［ステップＳ３３］ポーラは、完了キューから取得したエントリに基づき、ハードウェアイベント処理を実行する。
なお、図１２のステップＳ２２では、例えば、イベント検出対象のハードウェアごとにポーラが起動され、起動した各ポーラが図１３の処理を実行する。あるいは、スケジューラループの実行ごとにハードウェア別のポーラが１つずつ順番に選択され、選択されたポーラが図１３の処理を実行してもよい。
【００８８】
図１４は、負荷分散について説明するための図である。図１２のステップＳ２４で取得されるタスク投入確率は、例えば次のようにして算出される。
負荷分散処理部１２５は、コア１０１ａ〜１０１ｄのそれぞれについて算出されたビジー率を収集する。図１４のグラフ１５１に示すように、コア１０１ａ〜１０１ｄの間ではビジー率に偏りがある場合がある。負荷分散処理部１２５は、グラフ１５２に示すように、コア１０１ａ〜１０１ｄの間におけるビジー率の偏りを打ち消すように、コア１０１ａ〜１０１ｄのそれぞれに対するタスク投入確率を算出する。図１２のステップＳ２４では、このようにしてコア１０１ａについて算出されたタスク投入確率が取得される。
【００８９】
例えば、タスク投入確率が新たに算出されると、その後の一定期間に発生するタスクがタスク投入確率に応じた割合でコア１０１ａ〜１０１ｄに配分されて実行されるように制御される。この場合、図１２のステップＳ２５では、一定期間におけるタスク処理部１２４によるタスク実行数がタスク投入確率に応じた数になるように、現在のスケジュールループにおいてタスクを実行するか否かが制御される。また、他の例としては、コア１０１ａ〜１０１ｄのそれぞれが個別に、ステップＳ２４の時点でコア１０１ａ〜１０１ｄのそれぞれについてのビジー率を取得して、自コアについてのタスク投入確率を算出してもよい。
【００９０】
図１５は、ビジー率計算処理の例を示すフローチャートである。
［ステップＳ４１］ビジー率計算部１２８は、ループ数カウンタ１２６によるループ数のカウント値と、タスク実行数カウンタ１２７によるタスク実行数のカウント値とを、０にリセットする。
【００９１】
［ステップＳ４２］ビジー率計算部１２８は、単位時間（１秒）が経過するまで待ち状態になる。そして、ビジー率計算部１２８は、単位時間が経過すると、ステップＳ４３の処理を実行する。
【００９２】
［ステップＳ４３］ビジー率計算部１２８は、アイドル値のループカウント値Ｌｉを記憶部１４０から取得する。また、ビジー率計算部１２８は、ループ数カウンタ１２６によるループ数のカウント値を、Ｉ／Ｏ処理中のループカウント値Ｌｒとして取得する。さらに、ビジー率計算部１２８は、タスク実行数カウンタ１２７によるタスク実行数のカウント値を、タスク実行数Ｎｔとして取得する。
【００９３】
［ステップＳ４４］ビジー率計算部１２８は、ステップＳ４３で取得した値を前述の式（１１）に適用することで、コア１０１ａのビジー率を計算する。
以上の処理によれば、ストレージ制御装置１００は、アイドルスレッドが存在しない、ＰＭＤを用いたストレージ制御を行いながら、コアのビジー率を算出できる。また、ストレージ制御装置１００は、スケジューラループの実行数およびタスクの実行数をカウントするという低負荷の処理によって、コアのビジー率を高精度に算出できる。
【００９４】
なお、上記の各実施の形態に示した装置（例えば、情報処理装置１、ストレージ制御装置１００，２００）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク（Blu-ray Disc：ＢＤ、登録商標）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【００９５】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００９６】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【００９７】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  プロセッサと、前記プロセッサとの間でデータを入出力する入出力装置とを有する情報処理装置であって、
前記プロセッサは、
前記入出力装置からのイベントを確認し、イベントが検出された場合には検出されたイベントに応じた処理を実行する実行制御処理を含む処理ループを、繰り返し実行し、
前記情報処理装置がアイドル状態のとき、単位時間における前記処理ループの実行回数を示す第１のカウント値を計測し、
前記情報処理装置が、前記入出力装置との間の入出力処理を含む所定の処理を実行する実行状態のとき、前記単位時間における前記処理ループの実行回数を示す第２のカウント値を計測し、
前記第１のカウント値と前記第２のカウント値とに基づいて前記プロセッサの稼働率を示す指標を算出する、
情報処理装置。
【００９８】
（付記２）  前記指標は、前記第１のカウント値から算出される前記処理ループの実行時間と、前記第２のカウント値から算出される前記処理ループの実行時間との差分に基づいて算出される、
付記１記載の情報処理装置。
【００９９】
（付記３）  前記処理ループは、前記所定の処理の実行に伴って発生するタスクを確認し、実行可能なタスクが検出された場合には検出されたタスクを実行するタスク制御処理をさらに含み、
前記プロセッサは、さらに、前記実行状態のとき、前記単位時間における前記タスク制御処理でのタスクの実行回数を示す第３のカウント値を計測し、
前記指標の算出では、前記第１のカウント値と前記第２のカウント値とに基づいて前記プロセッサの稼働率を示す第１の指標を算出し、前記第１の指標の最大値が１００％となるように前記第３のカウント値を用いて前記第１の指標を補正した第２の指標を算出する、
付記１記載の情報処理装置。
【０１００】
（付記４）  前記指標の算出では、
前記第１のカウント値から算出される前記処理ループの処理時間と、前記第２のカウント値から算出される前記処理ループの処理時間との差分に基づいて前記第１の指標を算出し、
前記第３のカウント値と前記第１のカウント値とに基づいて、前記プロセッサの稼働率が１００％となるときの前記単位時間における前記処理ループの実行回数を示す第４のカウント値を算出し、
前記第１のカウント値から算出される前記処理ループの処理時間と、前記第４のカウント値から算出される前記処理ループの処理時間との差分に基づいて算出される、前記プロセッサの稼働率を示す第３の指標が、前記第１の指標と一致するように前記第１の指標を補正して、前記第２の指標を算出する、
付記３記載の情報処理装置。
【０１０１】
（付記５）  前記情報処理装置は、記憶装置に対するアクセスを制御するストレージ制御装置であり、
前記所定の処理は、前記入出力装置に対する入出力を伴って実行される、前記記憶装置に対するアクセス制御処理である、
付記１乃至４のいずれか１つに記載の情報処理装置。
【０１０２】
（付記６）  プロセッサと、前記プロセッサとの間でデータを入出力する入出力装置とを有するコンピュータの前記プロセッサに、
前記入出力装置からのイベントを確認し、イベントが検出された場合には検出されたイベントに応じた処理を実行する実行制御処理を含む処理ループを、繰り返し実行し、
前記コンピュータがアイドル状態のとき、単位時間における前記処理ループの実行回数を示す第１のカウント値を計測し、
前記コンピュータが、前記入出力装置との間の入出力処理を含む所定の処理を実行する実行状態のとき、前記単位時間における前記処理ループの実行回数を示す第２のカウント値を計測し、
前記第１のカウント値と前記第２のカウント値とに基づいて前記プロセッサの稼働率を示す指標を算出する、
処理を実行させる情報処理プログラム。
【０１０３】
（付記７）  前記指標は、前記第１のカウント値から算出される前記処理ループの実行時間と、前記第２のカウント値から算出される前記処理ループの実行時間との差分に基づいて算出される、
付記６記載の情報処理プログラム。
【０１０４】
（付記８）  前記処理ループは、前記所定の処理の実行に伴って発生するタスクを確認し、実行可能なタスクが検出された場合には検出されたタスクを実行するタスク制御処理をさらに含み、
前記プロセッサに、前記実行状態のとき、前記単位時間における前記タスク制御処理でのタスクの実行回数を示す第３のカウント値を計測する処理をさらに実行させ、
前記指標の算出では、前記第１のカウント値と前記第２のカウント値とに基づいて前記プロセッサの稼働率を示す第１の指標を算出し、前記第１の指標の最大値が１００％となるように前記第３のカウント値を用いて前記第１の指標を補正した第２の指標を算出する、
付記６記載の情報処理プログラム。
【０１０５】
（付記９）  前記指標の算出では、
前記第１のカウント値から算出される前記処理ループの処理時間と、前記第２のカウント値から算出される前記処理ループの処理時間との差分に基づいて前記第１の指標を算出し、
前記第３のカウント値と前記第１のカウント値とに基づいて、前記プロセッサの稼働率が１００％となるときの前記単位時間における前記処理ループの実行回数を示す第４のカウント値を算出し、
前記第１のカウント値から算出される前記処理ループの処理時間と、前記第４のカウント値から算出される前記処理ループの処理時間との差分に基づいて算出される、前記プロセッサの稼働率を示す第３の指標が、前記第１の指標と一致するように前記第１の指標を補正して、前記第２の指標を算出する、
付記８記載の情報処理プログラム。
【符号の説明】
【０１０６】
１  情報処理装置
２  プロセッサ
３  入出力装置
Ｃ１，Ｃ２  カウント値
Ｓ１ａ〜Ｓ６ａ，Ｓ１ｂ〜Ｓ６ｂ  ステップ
【図１】
2020126415.tif 000003
【図２】
2020126415.tif 000004
【図３】
2020126415.tif 000005
【図４】
2020126415.tif 000006
【図５】
2020126415.tif 000007
【図６】
2020126415.tif 000008
【図７】
2020126415.tif 000009
【図８】
2020126415.tif 000010
【図９】
2020126415.tif 000011
【図１０】
2020126415.tif 000012
【図１１】
2020126415.tif 000013
【図１２】
2020126415.tif 000014
【図１３】
2020126415.tif 000015
【図１４】
2020126415.tif 000016
【図１５】
2020126415.tif 000017