(57)【要約】  【課題】  アプリケーション実行下で入出力装置の診断を行うプログラムを実行する際、入出力装置の性能低下を招かない診断実行方法を提供する。  【解決手段】  入出力装置５，６の診断を実行する以前に診断対象となる入出力装置５，６の使用状態を示す情報と、システムで実行されているアプリケーションプロセスのプロセッサ使用状態を示す情報を一定期間採取する。次に診断プログラムは、タイミング的に入出力装置の使用度とプロセスのプロセッサ使用度の相関の高いプロセスについて、現在のプロセッサ使用度に関する情報を採取し、採取されたプロセッサの使用度が所定の閾値を越えるか否かに応じてそれぞれ相関のある当該入出力装置の診断が不可か可能かを判定する。【選択図】  図１
2007034864.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと複数の入出力装置とを有する計算機で実行される前記入出力装置の診断方法において、
前記入出力装置の各々について使用度に関する情報を採取する第１のステップと、
各プロセスについて前記プロセッサの使用度に関する情報を採取する第２のステップと、
前記入出力装置の使用度と前記プロセスの前記プロセッサ使用度との時間帯に関する相関を示す数値が所定値以上であるプロセスについて、現在の前記プロセッサの使用度に関する情報を採取する第３のステップと、
前記第３のステップで採取された前記プロセッサの使用度が所定の閾値を越えるか否かに応じてそれぞれ相関のある当該入出力装置の診断が不可か可能かを判定する第４のステップとを有することを特徴とする入出力装置の診断方法。
【請求項２】
前記プロセスの実行時間の全体に比べて前記第１のステップと前記第２のステップを短期間だけ実行することを特徴とする請求項１に記載の入出力装置の診断方法。
【請求項３】
前記プロセスについて前記プロセッサの使用度に関する情報を採取する代わりに、スレッドについて前記プロセッサの使用度に関する情報を採取することを特徴とする請求項１に記載の入出力装置の診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムを構成する要素である入出力装置の診断をシステム稼動の状態で実行し、かつシステムへの負荷の低減が可能な診断技術に関するものである。
【背景技術】
【０００２】
情報処理システムの信頼性向上は、システム規模の大小やシステムの種別によらず、古くからの重要な課題である。信頼性向上の対象となる部位は多岐に渡るが、入出力装置は相対的に信頼性が低いためにシステムの停止要因となることが多く、入出力装置の信頼性を向上させることがシステム全体の信頼性向上にとって重要な課題となる。
【０００３】
一般的に、入出力装置は複雑な内部状態を有することが多いため、その診断や検査を行う際にはさまざまな配慮が必要となる。最も単純で確実な方法としては、システムを停止させて入出力装置の診断のみを実施する方法が考えられるが、当然ながらこの方法ではシステムで実行していた業務を一時中断させる必要がある。このような方法では、入出力装置の診断を実行する頻度は、システムの稼動状況によって大きな制限を受ける。サーバ計算機などは、システムが連続して数週間から数ヶ月にわたって稼動を続けることも珍しくない。このため、入出力装置の診断は数週間から数ヶ月に1度になってしまい、十分な診断を行うことができない可能性がある。
【０００４】
これに対して、システムで実行していた業務を中断させることなく、入出力装置の診断を行う方式としては、例えば、特開平５−１８９２６２号公報（特許文献１）に開示されるような方式がある。特許文献１は、診断を行うプログラムをオペレーティングシステム（ＯＳ）下のジョブとしてではなく、ＯＳのカーネル内で実行させることによって一般のジョブと診断を行うジョブの競合を避けている。
【０００５】
【特許文献１】特開平５−１８９２６２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
信頼性向上のために診断用のプログラムをアプリケーション実行環境下で実行する場合、アプリケーションの性能低下という問題が発生する可能性がある。例えば、特許文献１は、診断の際に入出力装置の使用状態の情報を用いていないために、アプリケーションが入出力装置を使用しようとした際に、入出力装置の診断とが競合するという状況が発生し得る。このような競合が発生すると、診断が終了するまではアプリケーションが入出力装置を使用する頻度が少なくなり、アプリケーションの性能低下を引き起こす可能性がある。
【０００７】
本発明の目的は、このような従来技術の問題を解決し、アプリケーションの実行環境下で入出力装置の診断を行う際に、アプリケーションの性能低下を最小限に留めることのできる診断技術を提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、入出力装置の診断を実行する以前に診断対象となる入出力装置の使用状態を示す情報と、システムで実行されているアプリケーションプロセスのプロセッサ使用状態を示す情報を一定期間採取する。次に診断プログラムは、タイミング的に入出力装置の使用度とプロセスのプロセッサ使用度の相関の高いプロセスについて、現在のプロセッサ使用度に関する情報を採取し、採取されたプロセッサの使用度が所定の閾値を越えるか否かに応じてそれぞれ相関のある当該入出力装置の診断が不可か可能かを判定する。
【発明の効果】
【０００９】
通常のアプリケーションを実行中に定期的に入出力装置の診断プログラムを実行する場合に、アプリケーションプロセスの実行時間の全体に比べて上記の一定期間が短かければ、診断プログラムとアプリケーションとの間の入出力装置の競合の機会を削減できるため、システムで実行されるアプリケーションの性能低下を最小限に留めることができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施形態について図面に基づいて詳細に説明する。
【００１１】
図１は、入出力装置の診断プログラムが実行される実施例の計算機システムの構成図である。システムは、プロセッサ１〜３、主記憶４、入出力装置（Ｉ／Ｏ）５，６、記憶装置１０およびこれら装置間を接続されるバス７から構成される。
【００１２】
記憶装置１０は、Ｉ／Ｏアクセス情報１５、プロセス実行情報１６、診断判定表１７および図示しないＯＳ、診断プログラム、アプリケーションプログラムを格納する。
【００１３】
記憶装置１０上のプログラムは、主記憶４に読み込まれ、プロセッサ１〜３によって実行される。診断プログラムおよびアプリケーションプログラムは、ＯＳの下で実行される。アプリケーションプログラムは、ＯＳの下では複数のプロセスとして実行される。
【００１４】
なおプロセッサの個数は１個でも構わないし、複数個の場合にはその個数は何個でも構わない。入出力装置５，６の個数についても同様である。またプロセッサ１〜３は、バス７を介して主記憶４、入出力装置５，６および記憶装置１０と接続されているが、接続の形態はこれ以外でも構わない。例えば、プロセッサ１〜３と主記憶４の間に主記憶制御装置が介在していてもよいし、入出力装置５，６とバス７は入出力のブリッジを介して接続される形態でも構わない。記憶装置１０の接続に関しても同様に、他の制御装置が介在していても構わない。
【００１５】
図２は、ある１つの入出力装置の使用率（あるいは使用度）の時間変化を例示する図である。横軸は時刻である。縦軸はその入出力装置の使用率を示し、サンプリング時点ごとにその入出力装置の使用率の計測値が示されている。使用率は、その入出力装置の測定された転送速度／秒と最大転送速度／秒の比で表される。図２によれば、入出力装置の使用率の高くなる時間帯が周期的に繰り返されることを示す。
【００１６】
図３は、あるプロセス（プロセス１）のプロセッサ使用率（あるいは使用度）の時間変化を例示する図である。横軸は時刻である。縦軸はそのプロセスのプロセッサ使用率を示し、サンプリング時点ごとにそのプロセスのプロセッサ使用率の計測値が示されている。図３に示すプロセス１は、そのプロセッサ使用率の高くなる時間帯が周期的に繰り返されるとともに、図２に示す入出力装置の使用率の高くなる時間帯とほぼ同期して合致することを示している。このように、ある入出力装置を使用している期間にはプロセッサ負荷が高くなるようなプロセスが存在する。このようなプロセスは、プロセスの開始から終了までの間のかなり長い時間に亘って同様の傾向を示す可能性が高い。
【００１７】
図４は、他のプロセス（プロセス２）のプロセッサ使用率（あるいは使用度）の時間変化を例示する図である。図４に示すプロセス２は、そのプロセッサ使用率の高くなる時間帯が周期的に繰り返されるが、図２に示す入出力装置を使用していないか、あるいは使用しているにしてもプロセッサとシリアル動作となるような使用の仕方をしている。
【００１８】
Ｉ／Ｏアクセス情報１５は、各入出力装置ごとに各サンプリング時点について計測されたＩ／Ｏ使用情報を格納する。またプロセス実行情報１６は、各プロセスごとに各サンプリング時点について計測されたプロセッサ使用情報を格納する。
【００１９】
図５は、診断プログラムがＩ／Ｏアクセス情報１５およびプロセス実行情報１６を読み出し、これらの情報に基づいて主記憶４上に作成したテーブルの例である。テーブルは、各サンプリング時刻ｔ０，ｔ１，…ｔ５ごとにある入出力装置の使用率（ＷＩＯ）と、プロセスＰ１，Ｐ２，Ｐ３のプロセッサ使用率（ＷＰ１，ＷＰ２，ＷＰ３）と、Ｉ／Ｏ使用率×各プロセスのプロセッサ使用率（ＷＩＯＷＰ１，ＷＩＯＷＰ２，ＷＩＯＷＰ３）とを示している。Ｉ／Ｏ使用率は、計算の便宜上０〜１．０の使用率を１００倍したパーセンテージで示されている。プロセッサ使用率は０〜１．０の数値で示されている。ＰＩＤは、プロセス識別子である。
【００２０】
ＷＩＯＷＰ１〜ＷＩＯＷＰ３は、Ｉ／Ｏ使用率と各プロセスのプロセッサ使用率を掛け合わせた数値であり、図３に示すように両使用率に相関があれば大きい数値となり、図４に示すように両使用率に相関がなければ小さい数値となる。つまり、Ｉ／Ｏ使用との相関の大きいプロセスについて、この数値が大きい場合、そのプロセスのプロセッサ負荷が高いときに入出力装置を使用している可能性が高いことを示す。
【００２１】
ＷＩＯとＷＩＯＷＰ１〜ＷＩＯＷＰ３については、サンプリング期間ｔ０〜ｔ５の使用率の合計が示されている。時刻ｔ０から時刻ｔ５をどのようなタイミングにするかは、診断を行う際の自由度として設定可能な値としてよい。一つの例としては、時刻ｔ０はアプリケーションの実行が開始された時刻であり、１分ごとにｔ１、ｔ２、以下同様としてもよい。本実施例では時刻ｔ５までとしているが、もちろん、さらに多くの時刻で情報を採取して構わない。
【００２２】
他の各入出力装置についても図５と同様のテーブルが作成される。
【００２３】
図６は、診断判定表１７のデータ例を示す図である。診断判定表１７は、各入出力装置についてその使用時間に対する負荷の割合を示す負荷率の高いプロセスから順にプロセス識別子と負荷率の組を配列するものである。負荷率は、そのＩ／ＯのＩ／Ｏ使用率×各プロセスのプロセッサ使用率（ＷＩＯＷＰ）の合計値をそのＩ／ＯのＩ／Ｏ使用率の合計値で割った値である。負荷率の高いプロセスが対応する入出力装置を高い使用率で使用している可能性が高い。
【００２４】
図７は、入出力装置の診断プログラムの処理手順を示すフローチャートである。診断プログラムは、まず適当なサンプリング期間の各サンプリング時刻について各入出力装置の使用情報を取得し、Ｉ／Ｏアクセス情報１５に格納する（Ｓ１）。例えばネットワークアダプタであれば、単位時間あたりに送信、受信したデータのバイト数であり、ハードディスク等の外部記憶装置であれば、読み書きしたデータのバイト数である。このような情報は、ＯＳに用意されたコマンド等で取得することができる。例えばＵＮＩＸ（登録商標）の場合であれば、ネットワークアダプタの情報はifconfigコマンドによって取得可能である。また、ＩＢＭ社のＡＩＸの場合には、iostatコマンドにより入出力装置全般の使用情報の取得が可能である。また、これ以外にもシステムの性能情報を取得するために用意されたコマンドがあれば、それらを使用しても構わない。一般的に、システムの性能解析のためのツールは、どのようなメーカのシステムでも用意されているので、それらを使用することで入出力装置の使用情報の取得が可能である。
【００２５】
このような入出力装置の使用情報の取得は、システムに対して一定の負荷を発生させるので、システム稼動中に実行することは一般的には望ましくない。本発明においては、システム稼動中に入出力装置の使用情報の取得を短期間しか行わないで、アプリケーションプロセスが稼動中の入出力装置の使用情報の全体を推定可能である。これによってシステムで稼動するアプリケーションと診断プログラムとの入出力装置に関する競合をできるだけ避け、診断プログラムによる性能低下を少なくする診断を実現する。
【００２６】
また診断プログラムは、同じサンプリング期間の各サンプリング時刻あるいはこのサンプリング期間以後の定期的な計測時点について、システムで実行されている各プロセスのプロセッサ使用情報を採取し、プロセス実行情報１６に格納する（Ｓ２）。例えばＵＮＩＸの場合であれば、psコマンドによりＣＰＵ使用情報を取得することが可能である。また、これ以外にもシステムの性能情報を取得するために用意されたコマンドで同等またはより詳細な情報を得る機能があれば、それらを使用しても構わない。また、もし、スレッドの実行情報が取得可能であれば、以下の説明において、プロセスの代わりにスレッドを使用しても構わない。スレッドはプロセスよりも処理の単位が細かいため、より精密な処理が可能となる。
【００２７】
次に診断プログラムは、Ｉ／Ｏアクセス情報１５から取得した各入出力装置の使用情報を読み出し、プロセス実行情報１６から採取した各プロセスのプロセッサ使用情報を読み出し、診断判定表１７を作成する（Ｓ３）。
【００２８】
図８は、診断プログラムが診断判定表１７を作成する処理の手順を示すフローチャートである。まず診断プログラムは、各Ｉ／Ｏについて各時点のＩ／Ｏ使用情報からＩ／Ｏ使用率（あるいは使用度）を計算する（Ｓ３１）。ここでは過去に計算した各時点のＩ／Ｏ使用率を現在の各時点の推定値として適用してもよい。次に診断プログラムは、各プロセスについて各時点のプロセッサ使用情報からプロセッサ使用率（あるいは使用度）を計算する（Ｓ３２）。次に診断プログラムは、計算したＩ／Ｏ使用率とプロセッサ使用率とを基にして図５に示すＷＩＯＷＰテーブルを作成して主記憶４に格納する（Ｓ３３）。このとき診断プログラムは、当該サンプリング期間についてのＩ／Ｏ使用率の合計値と各ＷＩＯＷＰの合計値を計算する。次に診断プログラムは、各Ｉ／Ｏに関する各プロセスの負荷率を計算し、各Ｉ／Ｏについてプロセスの負荷率を大きい順に配列し（Ｓ３４）、診断判定表１７を作成し、記憶装置１０に格納する（Ｓ３５）。
【００２９】
図７に戻り、次に診断プログラムは、診断判定表１７を参照し、各入出力装置について診断実行の可否を判定する（Ｓ４）。
【００３０】
図９は、診断プログラムが各入出力装置の診断実行可否を判定する処理の手順を示すフローチャートである。診断プログラムは、診断判定表１７上の先頭あるいは次のＩ／Ｏを選択する（Ｓ４１）。次に診断プログラムは、選択したＩ／Ｏについて先頭あるいは次のプロセスのプロセッサ使用率とそのプロセッサの負荷率×所定の閾値とを比較する（Ｓ４２）。閾値は例えば０．５などの値である。プロセッサ使用率が負荷率×閾値より大きければ、そのＩ／Ｏは使用中のため、診断不可能と判断し（Ｓ４３ＮＯ）、Ｓ４６へ行く。プロセッサ使用率が負荷率×閾値以下であれば、そのＩ／Ｏは使用中でないため診断可能と判断し（Ｓ４３ＹＥＳ）、当該Ｉ／Ｏについて残りのプロセスがあれば（Ｓ４４ＹＥＳ）、Ｓ４２に戻る。残りのプロセスがなければ（Ｓ４４ＮＯ）、診断プログラムは、当該Ｉ／Ｏを主記憶４上で診断可能に設定する（Ｓ４５）。診断判定表１７に残りのＩ／Ｏがあれば（Ｓ４６ＹＥＳ）、診断プログラムは、Ｓ４１に戻り、次のＩ／Ｏを選択する。残りのＩ／Ｏがなければ、処理を終了する。
【００３１】
図７に戻り、診断プログラムは、診断する入出力の数だけＩ／Ｏ診断プログラムを複製し、各診断プロセスの実行を開始する（Ｓ７）。診断プログラムの複製は、ＯＳに備えられた標準的機能を用いて行う。例えばＵＮＩＸの場合であればsystem関数でもよいし、fork関数を用いてもよい。また複数のプロセスを生成せず、単一プロセスのままでマルチスレッドを用いてもよい。例えばＰＯＳＩＸに準拠したシステムであれば、pthread_create関数を実行することによって目的を達成することが可能である。このようにして複製されたプロセスが処理手順Ｓ６−１〜Ｓ６−３で入出力装置の診断を実施する。なお、本実施例では複数の入出力装置を同時に診断するとしているが、１回の診断では１つの入出力装置しか診断しない方法でも構わない。このような場合には、診断を行う入出力装置を順序付けして診断を実施すればよい。
【００３２】
次に診断プログラムは、診断実行のタイムアウト判定を行う（Ｓ７）。何らかの原因で診断が一定時間内に終了しなかった場合には、システムへの負荷増大を避けるため診断を中止し、タイムアウトの発生の記録を残す。
【００３３】
次に診断プログラムは、Ｓ６−１〜Ｓ６−３の診断プロセスの処理終了の待ち合わせを行う（Ｓ８）。すべての診断プロセスの処理が終了したとき、診断プログラムは、当該診断プログラム自身に異常が発生しているか否か自己確認する（Ｓ９）。問題が発生していなければ一定時間休止の後、Ｓ１に戻る。診断を多く実行させたい場合は休止時間を短くし、システムの性能を重視する場合は休止時間を長くすればよい。何らかの問題が検出された場合には、診断プログラムを終了させる。
【００３４】
なお、本実施例では処理手順Ｓ９の後、処理手順Ｓ１に移行するとしたが、処理手順Ｓ１は最初の1回だけ実行して以降は実行しないという処理でも構わない。システムで行う処理が変化しないことが期待できる場合には、最初に１度だけ処理手順Ｓ１を実行して入出力装置の使用情報を取得すれば十分であり、このようにすることによって、システムの性能低下を最小限にすることができる。また、処理手順Ｓ９の後、処理手順Ｓ１を実行するのは２回に1回、あるいは３回に１回というように間引いて実行することも可能である。
【００３５】
本実施例では、処理手順Ｓ１および処理手順Ｓ２を複数回実行するが、この際に、Ｉ／Ｏアクセス情報１５、プロセス実行情報１６および診断判定表１７を更新する方法も複数の手段が存在する。例えば、処理手順Ｓ１、処理手順Ｓ２でＩ／Ｏアクセス情報１５、プロセス実行情報１６、診断判定表１７を全て更新してもよいし、部分的に更新してもよい。
【００３６】
なおＩ／Ｏアクセス情報１５およびプロセス実行情報１６を作成した後に、各Ｉ／Ｏと各プロセスの組合せについてＩ／Ｏ使用率とプロセッサ使用率との相関係数を求め、この相関係数が１に近い所定値以上のプロセスのみを選択して、以後選択したプロセスについてＳ２〜Ｓ９を実行してもよい。その場合に診断判定表１７を作成するＳ３を一度だけ実行し、以後Ｓ２で採取した現在のプロセッサ使用情報から計算したプロセッサ使用率に診断判定表１７を適用し、各入出力装置の診断実行可否を判定してもよい。あるいは現在のプロセッサ使用率が所定の閾値を越えるか否かに応じてそれぞれ相関のある当該Ｉ／Ｏの診断が不可か可能かを判定してもよい。プロセス実行時間に比べて上記の相関係数を求めるに足りる短期間だけＩ／Ｏ使用率を取得して上記の相関係数を求めれば、同様の相関関係がプロセス実行時間の全体に亘って維持することが期待されるから、以後は選択されたプロセスの現在のプロセッサ使用率を定期的に取得するだけで関連するＩ／Ｏの診断実行の可否を判定できる。
【図面の簡単な説明】
【００３７】
【図１】実施例の診断プログラムが実行されるシステムの構成図である。
【図２】入出力装置の使用率の時間変化の例を説明するための図である。
【図３】あるプロセスの使用率の時間変化の例を説明するための図である。
【図４】他のプロセスの使用率の時間変化の例を説明するための図である。
【図５】Ｉ／Ｏアクセス情報とプロセス実行情報から作成されるテーブルの例を示す図である。
【図６】診断判定表のデータ例を示す図である。
【図７】実施例の診断プログラムの処理手順を示すフローチャートである。
【図８】実施例の診断判定表を作成する処理の手順を示すフローチャートである。
【図９】実施例の診断実行可否の判定をする処理の手順を示すフローチャートである。
【符号の説明】
【００３８】
１〜３：プロセッサ、４：主記憶、５，６：入出力装置、１５：Ｉ／Ｏアクセス情報、１６：プロセス実行情報、１７：診断判定表
【図１】
2007034864.tif 000003
【図２】
2007034864.tif 000004
【図３】
2007034864.tif 000005
【図４】
2007034864.tif 000006
【図５】
2007034864.tif 000007
【図６】
2007034864.tif 000008
【図７】
2007034864.tif 000009
【図８】
2007034864.tif 000010
【図９】
2007034864.tif 000011