(57)【要約】【課題】サーバ内に複数のＯＳがＨＢＡやストレージ装置のポートを共有している場合、ＯＳと論理ボリュームが接続する際の性能を他の接続の使用状況を考慮し、従来の接続プロトコルを拡張することなく行うことができない。【解決手段】各ＯＳはＨＢＡを制御するＨＢＡドライバを含み、ＨＢＡドライバはＯＳからストレージ装置に対して発行されるデータ転送の為のコマンドを中継し前記ＨＢＡまたは前記ストレージ装置の論理ボリュームへの前記データ転送コマンド送受信性能を算出する手段と、前記データ転送コマンド送受信を所定の性能以上実行することを抑止する手段を有する。【選択図】  図２
2008186211.tif 000002
【特許請求の範囲】
【請求項１】
複数のＯＳが動作するサーバ装置と複数の論理ボリュームを有するストレージ装置が前記サーバ装置に備えられたホストバスアダプタ（ＨＢＡ）を介してデータ転送を行う計算機システムにおいて、前記ＨＢＡは全てのＯＳによって共有され、各ＯＳは前記ＨＢＡを制御するＨＢＡドライバを含み、前記ＨＢＡドライバは前記ＯＳからストレージ装置に対して発行されるデータ転送の為のコマンドを中継し前記ＨＢＡまたは前記ストレージ装置の論理ボリュームへの前記データ転送コマンド送受信性能を算出する手段と、前記データ転送コマンド送受信を所定の性能以上実行することを抑止する手段を有することを特徴とする計算機システム。
【請求項２】
前記データ転送コマンド送受信性能は単位時間当たりにＨＢＡドライバが発行するデータ転送コマンド送受信回数または単位時間当たりの合計データ転送サイズであることを特徴とする請求項１記載の計算機システム。
【請求項３】
前記複数のＯＳを相互に接続し、各ＯＳが有する前記ＨＢＡ又は前記ストレージ装置の論理ボリュームのデータ転送コマンド送受信性能に関する情報を相互に送受信するインタフェースを備えたことを特徴とする請求項１又は２記載の計算機システム。
【請求項４】
全ＯＳのデータ転送コマンド送受信性能の合計値をもとに、各ＯＳが前記ＨＢＡにデータ転送コマンド送受信性能の閾値を設定することを特徴とする請求項項１乃至３記載の計算機システム。
【請求項５】
同一のストレージ装置のポートを共有する全ての論理ボリュームに対して前記ＨＢＡから送受信されるデータ転送コマンド送受信性能の合計値をもとに、各論理ボリュームに対して前記ＨＢＡにデータ転送コマンド送受信性能の閾値を設定することを特徴とする請求項項１乃至４記載の計算機システム。
【請求項６】
前記複数のＯＳ間のインタフェースにより各ＯＳはデータ転送コマンド送受信性能に関する情報を一定間隔の時間で送受信し、各ＯＳは受信した他ＯＳのデータ転送コマンド送受信性能に関する情報をもとに前記ＨＢＡにデータ転送コマンド送受信性能の閾値を設定することを特徴とする請求項項３乃至５記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ装置とストレージ装置の間でデータ転送を行う計算機システムに関する。
【背景技術】
【０００２】
サーバ装置上のＯＳとストレージ装置上の論理ボリュームはファイバチャネルプロトコルを用いたストレージエリアネットワーク（以下ＳＡＮ）を利用した接続が多く用いられる。
また、仮想化技術により物理的に一台のサーバで複数のＯＳが動作可能となり、サーバ上に搭載されていてＳＡＮに接続される１つのホストバスアダプタ（以下ＨＢＡ）が複数のＯＳから使用される場合がある。
【０００３】
仮想化技術に対する必要性が増加している昨今では、必要性の増加に伴い、ＨＢＡやストレージ装置やＨＢＡとストレージ装置を接続するケーブルなどのＳＡＮ上の資源を複数のＯＳと論理ボリュームの接続関係に共有させる必要性も増加する。
【０００４】
限られたＳＡＮ資源を複数の接続が共有する場合、どの接続関係にも同様のＳＡＮ資源の利用を必要としているわけではなく、ある接続関係はミッションクリティカルな基幹データベースサーバが使用するかもしれないし、またある接続関係はＳＡＮのレスポンスタイムなどは重要視されないアプリケーションサーバが使用するかもしれない。このようなＳＡＮシステムではＯＳと論理ボリュームの接続関係の重要度に応じてＳＡＮ資源の使用量を割り振るのが望ましい。
【０００５】
しかし、ＨＢＡドライバやファームウェア、ファイバチャネルスイッチ、ストレージ装置上のコントローラなどＳＡＮシステムを構成する要素は接続関係の優先度などを意識せずに受け付けた起動を単純に処理するのが一般的である。そうすると非常に優先度の高い接続関係においても一定以上の性能は保障することができない。
【０００６】
特許文献１では仮想化によりサーバ内に複数のＯＳが存在しＳＡＮのストレージパスを共有している場合、ストレージ装置を共有するＯＳを区別して排他制御や優先制御を行いシステム性能の向上を図るためにＯＳが発行するＳＣＳＩコマンドにＯＳを識別する番号を付与し、ストレージ装置内でその識別番号を元にアクセスの優先制御を行う方式が述べられている。
【０００７】
しかし上述の方法はストレージ装置内での優先制御であるために、ＨＢＡの処理能力がボトルネックとなるケースにはあまり効果を発揮しないし、ＯＳが発行するＳＣＳＩコマンドにＯＳを識別する番号を埋め込む必要がありプロトコルを拡張しなければならない。
【０００８】
非特許文献１ではファイバチャネルのフレームヘッダに優先度を設定する方法が記載されており、これとＮ−ＰｏｒｔＩＤ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ（Ｒ）（以下ＮＰＩＶ）による仮想化技術で動作する各ＯＳに個別のファイバチャネルＩＤ（以下ＦＣＩＤ）を割り当てる技術を組合せ、物理サーバ上のＨＢＡを共有する各ＯＳから発行されるフレームをファイバチャネルスイッチなどのフレーム中継機において並び替えて優先順位を制御する方式が知られている。
【０００９】
ＨＢＡとストレージ装置のファイバチャネル接続においてはＳＣＳＩコマンドをファイバチャネルフレームでカプセル化したＳＣＳＩ−ＦＣＰと呼ばれるプロトコルでデータの送受信を行うのが一般的であるが、ストレージ装置上の論理ユニットを識別する値はＳＣＳＩコマンド内に定義されているため、上述の方法では論理ユニットまで含めた優先制御をすることはできない。また上述の方法では優先順位の高いフレームが滞留する状況において、優先順位の低いフレームが常にまたされる可能性もある。
【００１０】
【特許文献１】特開２００２−２２２１１０号公報
【非特許文献１】ＡＮＳＩ  Ｔ１１／１６１９−Ｄ  Ｒｅｖ１．０１「ＦＩＢＲＥ  ＣＨＡＮＮＥＬ  ＡＮＤ ＳＩＧＮＡＬＩＮＧ−２（ＦＣ−ＦＳ−２）」
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明が解決しようとする課題はＨＢＡの処理能力、ファイバチャネル接続の帯域、ストレージ装置の処理能力のいずれかの部分がボトルネックとなる場合において、ＯＳと論理ボリュームの接続の優先度に基づいたデータ転送コマンド送受信性能制御が行えない場合があるという点、ＩＯオペレーション処理性能制御を行うためにファイバチャネルプロトコルやＳＣＳＩプロトコルを拡張する必要がある点、ＨＢＡを共有する各ＯＳ間のデータ転送コマンド送受信処理性能制御だけではなく論理ボリュームまで含めたデータ転送コマンド送受信処理制御が行えない点である。
【課題を解決するための手段】
【００１２】
本発明は、一つ以上のＯＳが動作するサーバ装置とストレージ装置がＨＢＡによりＳＡＮ接続されたシステムにおいて、前記ＨＢＡを制御するドライバとそれぞれのＯＳに配置された前記ＨＢＡドライバ間で通信可能なインタフェースからなる。前記ＨＢＡは一つのＯＳまたは仮想化技術により複数のＯＳから使用され、前記ＨＢＡドライバはＨＢＡを使用する各ＯＳに存在し、仮想化技術により複数のＯＳでＨＢＡを共有する場合はＨＢＡドライバのＨＢＡに対するアクセスはハイパバイザにより制御されている。ＨＢＡドライバは互いに通信可能なインタフェースを持つ。
ＳＡＮを構成する資源のデータ転送コマンド送受信処理性能には単位時間当たりのデータ転送コマンド送受信回数および単位時間当たりの合計転送データサイズに限界があり、前者の単位時間当たりのデータ転送コマンド送受信回数を評価する指標としてＩＯＰＳ（一秒間にＨＢＡドライバが処理するデータ転送コマンドの送受信回数）が用いられ、後者の単位時間当たりの合計転送データサイズを評価する指標としてＭＢＰＳ（一秒間に送受信されるデータ転送サイズ）が用いられる。ＳＡＮの資源に割り当てる使用量を調整するために前記ＨＢＡドライバは閾値で設定されたＭＢＰＳまたはＩＯＰＳ以上のデータ転送コマンド送受信を停止する機能を有している。前記閾値はＨＢＡドライバが制御する各ＨＢＡおよびＨＢＡと接続される論理ボリューム毎に設定される。
ＨＢＡが現在使用しているＭＢＰＳおよびＩＯＰＳは各ＨＢＡドライバが管理し、各ＯＳ間でＭＢＰＳやＩＯＰＳの情報を送受信することを可能とすることにより、別ＯＳのＳＡＮ資源使用量を元に自ＯＳのＨＢＡドライバに対してＭＢＰＳおよびＩＯＰＳに関する閾値を設定することが可能である。
【発明の効果】
【００１３】
本発明によれば、仮想化技術により複数のＯＳが物理的には同一のＨＢＡを使用する場合において、各ＯＳからＨＢＡを使用する際のＭＢＰＳおよびＩＯＰＳを一定の閾値に制限することにより、より優先度の高いＯＳに対して優先的にデータ転送コマンド送受信処理を行うことを可能とし、複数のＯＳが同一のストレージポート上の論理ボリュームを使用する場合において、各ＯＳから論理ボリュームを使用する際のＭＢＰＳおよびＩＯＰＳを一定の閾値に制限することも可能である。これにより論理ボリュームの使用をアプリケーション毎に分ければ、ＯＳが利用するアプリケーションレベルでデータ転送コマンド送受信処理性能制御が可能である。制限された閾値は他のＯＳと論理ボリュームの接続の使用量に応じて動的に変更可能であるなどＳＡＮの使用効率を高めるうえで有効な手段が提供できる。
【発明を実施するための最良の形態】
【００１４】
ＨＢＡドライバの間で通信可能なインタフェースを用いて、他ＯＳのＳＡＮ資源の使用状況に応じてＨＢＡドライバのデータ転送コマンド送受信性能を抑止する目的を本発明の実施による性能劣化を最も少なくする形態で実現した。
【００１５】
以下、本発明に係わる実施例を図面を用いて詳細に説明する。ＳＡＮ資源の使用量を割り当て可能なホストバスアダプタドライバを利用したシステムの全体構成図の例を図１に示す。図１ではＳＡＮに接続された１つのＨＢＡを２つのＯＳが共有している場合の例である。１００はサーバであり、ＯＳ、アプリケーションを動かして、ストレージ装置１７０に対してデータの読み出し、書き込みなどの命令を発行する。サーバ１００は仮想化技術により物理的には１台のサーバで２つのＯＳを動作させることが可能であり、仮想化を制御するハイパバイザと呼ばれるソフトウェア１３０によってサーバ内のＣＰＵやメモリなどの資源を共有し、論理パーティション（以下ＬＰＡＲ）と呼ばれるＯＳを動作させる単位に分割する。１１０、１２０はサーバ１００に割り当てられたＬＰＡＲであり、それぞれのＬＰＡＲ上でＯＳ１１１、１２１が動作する。ＯＳ１１１、ＯＳ１２１は同種のものであっても異種のものであってもよい。１４０はホストバスアダプタであり、ファイバチャネルプロトコルによりストレージ装置と接続される。ホストバスアダプタ１４０はワールドワイドネーム（以下ＷＷＮ）とよばれるユニークな値１４１を持っているが、ＬＰＡＲ１１０が使用するＨＢＡとＬＰＡＲ１２０が使用するＨＢＡをストレージ装置１７０から見てことなるＨＢＡに見せるためにＬＰＡＲ１１０に対してはＷＷＮa１４２を、ＬＰＡＲ２に対してはＷＷＮb１４４をハイパバイザが割り当てる。またファイバチャネルプロトコルにおいて機器同士が通信するためにはＷＷＮの他に接続時に割り当てられるＦＣＩＤが必要だが、これはファイバチャネルスイッチのＮＰＩＶ機能によりＬＰＡＲ１が使用するＨＢＡにはＦＣＩＤ１４３を、ＬＰＡＲ２が使用するＨＢＡにはＦＣＩＤ１４５を使用する。これによりストレージ装置１７０は物理的には同一であるＬＰＡＲ１が使用するＨＢＡとＬＰＡＲ２が使用するＨＢＡを異なるＨＢＡとして認識することが可能であり、ストレージ装置のＷＷＮセキュリティ機能によりＬＰＡＲ１のＨＢＡに対しては論理ボリューム１９１、ＬＰＡＲ２のＨＢＡに対しては論理ボリューム１９２というように個別の論理ボリュームを割り当てることが可能である。図１においてはそれぞれストレージ装置１７０のポート１８１、１８２に接続される論理ボリューム１９１、１９３がＬＰＡＲ１１０のＯＳ１１１によって使用され、それぞれポート１８１、１８２に接続される論理ボリューム１９２、１９４がＬＰＡＲ１２０のＯＳ１２１によって使用される。
【００１６】
図２はＬＰＡＲ間の性能監視エージェントの接続関係および性能監視エージェントとＨＢＡドライバの接続関係を表したソフトウェア構成図である。ＯＳ１１１にはアプリケーションプログラムを制御するユーザ層１１５とメモリ管理やドライバ制御などを行うカーネル層１１６からなる。アプリケーションプログラムである性能監視エージェント１１２はユーザ層１１５に、ＨＢＡドライバ１１３はカーネル層１１６に存在する。通常ＯＳにはユーザ層のアプリケーションプログラムとカーネル層のドライバが通信するためのアプリケーションプログラムインタフェース（以下ＡＰＩ）が用意されている。本ＡＰＩを利用して性能監視エージェント１１２はＨＢＡドライバ１１３に対して閾値設定コマンド２００をセットし、ＨＢＡドライバ１１３は性能監視エージェント１１２に対して性能情報取得コマンド３００を報告する。性能情報取得コマンド３００の報告にはＨＢＡドライバ１１３から性能監視エージェント１１２に対して定期的にイベント通知で知らせる方法と性能監視エージェントから定期的にポーリングし性能情報を取得する方法が考えられる。性能情報取得コマンド３００は性能監視エージェント１１２と１２２の間で送受信される。送受信の方法としてサーバ１００に存在するネットワークインタフェースカード（以下ＮＩＣ）１５０を介して行う方法がある。ＯＳ１１１が使用するＮＩＣとＯＳ１２１が使用するＮＩＣはそれぞれ個別のＩＰアドレス１５１、１５２が割り当てられ、性能情報リストはＴＣＰ／ＩＰプロトコルにより性能監視エージェント１１２と１１３の間で送受信される。性能監視エージェント１１２は定期的に取得される性能情報取得コマンド３００と性能監視エージェントに定義された各種テーブルを用いて必要に応じて閾値設定コマンド２００をＨＢＡドライバ１１３にセットする。
【００１７】
図３は本発明の実施例における性能情報取得コマンド３００の例である。性能情報取得コマンドは図３でしめされるテーブルの構造をもったコマンドであり、性能監視エージェント１１２とＨＢＡドライバ１１３の間または性能エージェント１１２と性能エージェント１２２の間でやりとりされる。性能情報取得コマンド３００はＩＮＤＥＸ３０５を主キーとし、ＯＳ１１１が論理ＷＷＮａを用いて使用するＨＢＡの現在使用中のＭＢＰＳおよび現在使用中のＩＯＰＳの情報と、ＯＳ１１１が論理ＷＷＮａを用いて使用するＨＢＡに接続される論理ボリューム＃１ １９１と論理ボリューム＃２ １９３の現在使用中のＭＢＰＳおよび現在使用中のＩＯＰＳの情報を取得することができ、フラグ３１０で論理ＨＢＡの情報か論理ボリュームの情報かを判別することが可能である。フラグ３１０が論理ＨＢＡの情報を表すとき（HBA）、物理ＷＷＮフィールド３１５、論理ＷＷＮフィールド３００、現在ＩＯＰＳフィールド３３５、現在ＭＢＰＳフィールド３４０が有効であり、ストレージポートＷＷＮフィールド３２５、論理ボリューム番号フィールド３３０は無効である。物理ＷＷＮフィールド３１５にはＨＢＡ１４０の物理ＷＷＮがセットされ、論理ＷＷＮフィールド３２０にはＯＳ１１１がＨＢＡ１４０を使用する際に使う論理ＷＷＮがセットされ、現在ＩＯＰＳフィールド３３５にはＯＳ１１１がＨＢＡ１４０を現在時刻において使用しているＩＯＰＳがセットされ、現在ＭＢＰＳフィールド３４０にはＯＳ１１１がＨＢＡ１４０現在時刻において使用しているＭＢＰＳがセットされる。フラグ３１０が論理ボリュームの情報を表すとき（LU）、物理ＷＷＮ３１５のフィールドは無効となり、その他のフィールドは有効である。この際、論理ＷＷＮフィールド３２０にはＯＳ１１１がＨＢＡ１４０を使用する際に使う論理ＷＷＮがセットされ、ストレージポートＷＷＮフィールド３２５には、論理ボリュームが接続されるストレージ装置のポートのＷＷＮがセットされ、論理ボリューム番号フィールド３３０にはストレージ装置が論理ボリュームに割り当てたボリューム番号がセットされ、現在ＩＯＰＳフィールド３３５にはＯＳ１１１が論理ボリューム１９１または論理ボリューム１９３を現在時刻において使用しているＩＯＰＳがセットされ、現在ＭＢＰＳフィールド３３５にはＯＳ１１１が論理ボリューム１９１または論理ボリューム１９３を現在時刻において使用しているＭＢＰＳがセットされる。
【００１８】
性能情報リスト３００はＨＢＡドライバ１１３からのイベント通知または性能監視エージェント１１２からのポーリングにより性能監視エージェント１１２が取得し、取得した性能情報リスト３００はネットワークインタフェースを通じて性能監視エージェント１２２に渡される。同様に性能監視エージェント１２２がＨＢＡドライバ１２３から取得した性能情報リストもネットワークインタフェースを通じて性能監視エージェント１１２に渡される。
【００１９】
図４は性能監視エージェント１１２が性能情報取得コマンドの応答を取得した際、データ転送の為の閾値を変更する必要が発生した際にＨＢＡドライバ１１３に渡される閾値設定コマンド２００の例である。閾値設定コマンドは図４でしめされるテーブルの構造をもったコマンドであり、性能監視エージェント１１２とＨＢＡドライバ１１３の間でやりとりされる。閾値設定コマンド２００はＩＮＤＥＸ２０５を主キーとし、ＯＳ１１１が論理ＷＷＮａを用いて使用するＨＢＡのＭＢＰＳの閾値およびＩＯＰＳの閾値と、ＯＳ１１１が論理ＷＷＮａを用いて使用するＨＢＡに接続される論理ボリューム＃１ １９１と論理ボリューム＃２ １９３のＭＢＰＳの閾値およびＩＯＰＳの閾値を設定することができ、フラグ２１０で論理ＨＢＡの閾値設定か論理ボリュームの閾値設定かを判別することが可能である。
【００２０】
フラグ２１０が論理ＨＢＡの情報を表すとき（HBA）、物理ＷＷＮフィールド２１５、論理ＷＷＮフィールド２００、現在ＩＯＰＳフィールド２３５、現在ＭＢＰＳフィールド２４０が有効であり、ストレージポートＷＷＮフィールド２２５、論理ボリューム番号フィールド２３０は無効である。物理ＷＷＮフィールド２１５にはＨＢＡ１４０の物理ＷＷＮがセットされ、論理ＷＷＮフィールド２２０にはＯＳ１１１がＨＢＡ１４０を使用する際に使う論理ＷＷＮがセットされ、設定ＩＯＰＳ閾値フィールド２３５にはＯＳ１１１がＨＢＡ１４０を現在時刻において使用可能ＩＯＰＳの閾値がセットされ、現在ＭＢＰＳフィールド２４０にはＯＳ１１１がＨＢＡ１４０現在時刻において使用可能なＭＢＰＳの閾値がセットされる。ＨＢＡドライバ１１３は後述する方式で設定ＩＯＰＳ閾値および設定ＭＢＰＳ閾値の値をこえるＩＯオペレーションをＳＡＮ上に送信しないようにＩＯオペレーション送信を遅延させる。
【００２１】
フラグ２１０が論理ボリュームの情報を表すとき（LU）、物理ＷＷＮ２１５のフィールドは無効となり、その他のフィールドは有効である。この際、論理ＷＷＮフィールド２２０にはＯＳ１１１がＨＢＡ１４０を使用する際に使う論理ＷＷＮがセットされ、ストレージポートＷＷＮフィールド２２５には、論理ボリュームが接続されるストレージ装置のポートのＷＷＮがセットされ、論理ボリューム番号フィールド２３０にはストレージ装置が論理ボリュームに割り当てたボリューム番号がセットされ、設定ＩＯＰＳ閾値フィールド２３５にはＯＳ１１１が論理ボリューム１９１または論理ボリューム１９３を現在時刻において使用可能なＩＯＰＳの閾値がセットされ、設定ＭＢＰＳ閾値フィールド３３５にはＯＳ１１１が論理ボリューム１９１または論理ボリューム１９３を現在時刻において使用可能なＭＢＰＳの閾値がセットされる。ＨＢＡドライバ１１３は各論理ボリュームに対しても設定ＩＯＰＳ閾値および設定ＭＢＰＳ閾値の値をこえるＩＯオペレーションをＳＡＮ上に送信しないようにＩＯオペレーション送信を遅延させる。ＨＢＡドライバ１１３は性能監視エージェントから送信された閾値設定コマンドにセットされる論理ＨＢＡの設定閾値と論理ボリュームの設定閾値をＨＢＡドライバ内部に保存し、ＩＯオペレーション送信をする機会毎に閾値を超えてＩＯオペレーション送信していないかをチェックする。
【００２２】
図５は本発明の実施例における性能監視エージェント１１２の構造の例である。性能監視エージェント１１２はエージェント起動時から終了時まで常に性能情報監視処理４００を動作し続ける。性能情報監視処理４００は性能情報取得処理４４０によって、性能情報取得コマンドの応答値３００を取得し、通信可能な他の全ての性能監視エージェントに対して応答値３００を送信し、また通信可能な他の全ての性能監視エージェントから応答値３００を取得し、性能監視エージェントのテーブルを更新し、閾値設定コマンド２００を作成し、閾値設定コマンド発行処理４７０により、ＨＢＡドライバ１１３に閾値設定処理を行わせる。この後性能監視エージェント１１２はポーリング時間で指定された時間を待ち、再び性能情報取得コマンドをＨＢＡドライバ１１３にむけて発行する。性能監視エージェント１１２はＨＢＡドライバ１１３に対して閾値を設定するための情報として、各種テーブルをもっている。図６から図２１までが性能監視エージェントが保持する各種テーブル情報を表す。
【００２３】
図６は論理ＨＢＡ性能情報テーブルの例である。論理ＨＢＡ性能情報テーブル１１００は図６で示されるテーブル構造を持ち、性能情報取得コマンドの応答３００をＨＢＡドライバ１１３から取得するか、他の性能監視エージェントから性能情報取得コマンドの応答を取得するかした際に更新される。論理ＨＢＡ性能情報テーブル１１００はＩＮＤＥＸ１１０５を主キーとし、性能情報取得コマンドの応答値３００が示すテーブルのレコードのフラグフィールド３１０が論理ＨＢＡを示す場合に更新されレコードの各値が各フィールドに格納される。また格納の際には更新フラグフィールド１１３０がＯＮにセットされる。
【００２４】
図７は論理ボリューム性能情報テーブルの例である。論理ボリューム性能情報テーブル１１５０は図７で示されるテーブル構造を持ち、性能情報取得コマンドの応答３００をＨＢＡドライバ１１３から取得するか、他の性能監視エージェントから性能情報取得コマンドの応答を取得するかした際に更新される。論理ボリューム性能情報テーブル１１５０はＩＮＤＥＸ１１５５を主キーとし、性能情報取得コマンドの応答値３００が示すテーブルのレコードのフラグフィールド３１０が論理ボリュームを示す場合に更新されレコードの各値が各フィールドに格納される。また格納の際には更新フラグフィールド１１８５がＯＮにセットされる。
【００２５】
図８は物理ＨＢＡ性能情報テーブルの例である。物理ＨＢＡ性能情報テーブル１２００は図８で示されるテーブル構造を持ち、性能情報取得コマンドの応答３００から論理ＨＢＡ性能情報テーブル１１００が更新された際に更新される。物理ＨＢＡ性能情報テーブル１２００はＩＮＤＥＸ１２０５を主キーとし、物理ＷＷＮフィールド１２１０毎に管理され、物理ＷＷＮを同じくする論理ＷＷＮが使用した現在ＩＯＰＳ１２１５と現在ＭＢＰＳ１２２０の合計値が格納される。
【００２６】
図９はストレージポート性能情報テーブルの例である。ストレージポート性能情報テーブル１２５０は図９で示されるテーブル構造を持ち、性能情報取得コマンドの応答３００から論理ボリューム性能情報テーブル１１５０が更新された際に更新される。ストレージポート性能情報テーブル１２５０はＩＮＤＥＸ１２５５を主キーとし、ストレージポートＷＷＮフィールド１２６０毎に管理され、ストレージポートＷＷＮを同じくする論理ボリュームが使用した現在ＩＯＰＳ１２６５と現在ＭＢＰＳ１２７０の合計値が格納される。
【００２７】
図１０はＨＢＡ用ＭＢＰＳ抑止レベルテーブルの例である。ＨＢＡ用ＭＢＰＳ抑止レベルテーブル１５００は図１０で示されるテーブル構造を持ち、各値はユーザによって設定される。図１０の例では４段階の抑止レベルを設定することが可能であり、ＩＮＤＥＸフィールド１５０５を主キーとし、論理ＷＷＮフィールド１５１０毎に抑止レベルを設定可能であり、前記抑止レベルは各ＯＳが使用する物理ＨＢＡの合計ＭＢＰＳによって、各ＯＳの論理ＨＢＡの使用ＭＢＰＳを段階的に抑止するための基準値として使用される。物理ＨＢＡの合計ＭＢＰＳが抑止レベル１フィールド１５１５の値を超えた場合、抑止レベル２フィールド１５２０の値を超えた場合、抑止レベル３フィールド１５２５の値を超えた場合、抑止レベル４フィールド１５３０の値を超えた場合に各抑止レベル毎に指定された閾値以上のデータ転送を抑止する。
【００２８】
図１１はＨＢＡ用ＩＯＰＳ抑止レベルテーブルの例である。ＨＢＡ用ＩＯＰＳ抑止レベルテーブル１５５０は図１１で示されるテーブル構造を持ち、各値はユーザによって設定される。ＨＢＡ用ＩＯＰＳ抑止レベルテーブル１５５０はＨＢＡ用ＭＢＰＳ抑止レベルテーブル１５００と同様に各フィールドが定義される。
【００２９】
図１２はＨＢＡ用ＭＢＰＳ現在設定情報テーブルの例である。ＨＢＡ用ＭＢＰＳ現在設定情報テーブル１４００は図１２で示されるテーブル構造を持ち、ＨＢＡドライバ１１３に対して閾値を設定した際、性能監視エージェントがＨＢＡドライバに現在設定している閾値を管理する目的で用いられる。性能監視エージェントは現在設定されている値と新たに設定される値を比較し、同じであれば新たに閾値を設定する必要もないので、閾値設定にかかるオーバヘッドを削減することが可能である。ＨＢＡ用ＭＢＰＳ現在設定情報テーブルはＩＮＤＥＸ１４０５を主キーとし、論理ＷＷＮフィールド１４１０に各ＯＳに存在する各論理ＷＷＮを格納し、各論理ＷＷＮ毎に設定値フィールド１４１５に設定値を保存する。
【００３０】
図１３はＨＢＡ用ＩＯＰＳ現在設定情報テーブルの例である。ＨＢＡ用ＩＯＰＳ現在設定情報テーブル１４５０はＨＢＡ用ＭＢＰＳ現在設定情報テーブルとほぼ同様に定義される。
【００３１】
図１４はＨＢＡ用ＭＢＰＳ閾値設定テーブルの例である。ＨＢＡ用閾値設定テーブル１３００は図１４で示されるテーブル構造を持ち、ＨＢＡドライバ１１３に対して設定する閾値を示したものである。設定される閾値はＨＢＡ用抑止レベルテーブル１５００の各抑止レベルに基づいて定められる。図１４の例ではＨＢＡ用ＭＢＰＳ抑止レベルテーブルで設定された値に応じて４段階の閾値を設定することが可能であり、ＩＮＤＥＸフィールド１３０５を主キーとし、論理ＷＷＮフィールド１３１０毎に閾値を設定可能であり、前記閾値は各ＯＳが使用する物理ＨＢＡの合計ＭＢＰＳによって、各ＯＳの論理ＨＢＡの使用ＭＢＰＳを抑止するための閾値として使用される。物理ＨＢＡの合計ＭＢＰＳが抑止レベル１フィールド１５１５の値を超えた場合はレベル１閾値１３１５、抑止レベル２フィールド１５２０の値を超えた場合はレベル２閾値１３２０、抑止レベル３フィールド１５２５の値を超えた場合はレベル３閾値１３２５、抑止レベル４フィールド１５３０の値を超えた場合はレベル４閾値１３３０を対象のＨＢＡに設定することによりデータ転送性能を制限する。
【００３２】
図１５はＨＢＡ用ＩＯＰＳ閾値設定テーブルの例である。ＨＢＡ用ＩＯＰＳ閾値設定テーブル１３５０はＨＢＡ用ＭＢＰＳ閾値設定テーブルとほぼ同様に定義される。
【００３３】
図１６はストレージポート用ＭＢＰＳ抑止レベルテーブルの例である。ストレージポート用ＭＢＰＳ抑止レベルテーブル１８００は図１６で示されるテーブル構造を持ち、各値はユーザによって設定される。図１６の例では４段階の抑止レベルを設定することが可能であり、ＩＮＤＥＸフィールド１８０５を主キーとし、論理ＷＷＮフィールド１８１０毎に抑止レベルを設定可能であり、前記抑止レベルは各ＯＳが使用する論理ボリュームのストレージポート毎の合計ＭＢＰＳによって、各ＯＳの論理ボリュームの使用ＭＢＰＳを段階的に抑止するための基準値として使用される。ストレージポートの合計ＭＢＰＳが抑止レベル１フィールド１８２０の値を超えた場合、抑止レベル２フィールド１８２５の値を超えた場合、抑止レベル３フィールド１８３０の値を超えた場合、抑止レベル４フィールド１８３５の値を超えた場合に各抑止レベル毎に指定された閾値以上のデータ転送を抑止する。
【００３４】
図１７はストレージポート用ＩＯＰＳ抑止レベルテーブルの例である。ストレージポート用ＩＯＰＳ抑止レベルテーブル１８５０は図１７で示されるテーブル構造を持ち、各値はユーザによって設定される。ストレージポート用ＩＯＰＳ抑止レベルテーブル１８５０はストレージポート用ＭＢＰＳ抑止レベルテーブル１８００と同様に各フィールドが定義される。
【００３５】
図１８はストレージポート用ＭＢＰＳ現在設定情報テーブルの例である。ＨＢＡ用ＭＢＰＳ現在設定情報テーブル１７００は図１８で示されるテーブル構造を持ち、本テーブルの利用目的はＨＢＡ用ＭＢＰＳ現在設定情報テーブル１４００と同様であり、閾値設定にかかるオーバヘッドを削減することを目的とする。ストレージポート用ＭＢＰＳ現在設定情報テーブルはＩＮＤＥＸ１７０５を主キーとし、論理ＷＷＮフィールド１７１０に同一ＯＳに存在する各論理ＷＷＮを論理ボリュームフィールド１７１５に論理ＷＷＮを使用する論理ＨＢＡに接続される論理ボリューム番号を格納し、各論理ＨＢＡに接続される論理ボリューム毎に設定値フィールド１７１５に設定値を保存する。
【００３６】
図１９はストレージポート用ＩＯＰＳ現在設定情報テーブルの例である。ストレージポート用ＩＯＰＳ現在設定情報テーブル１７５０はストレージポート用ＭＢＰＳ現在設定情報テーブル１７００とほぼ同様に定義される。
【００３７】
図２０はストレージポート用ＭＢＰＳ閾値設定テーブルの例である。ストレージポート用閾値設定テーブル１６００は図２０で示されるテーブル構造を持ち、ＨＢＡドライバ１１３に対して設定する閾値を示したものである。設定される閾値はストレージポート用抑止レベルテーブル１８００の各抑止レベルに基づいて定められる。図２０の例ではストレージポート用ＭＢＰＳ抑止レベルテーブル１８００で設定された値に応じて４段階の閾値を設定することが可能であり、ＩＮＤＥＸフィールド１６０５を主キーとし、論理ボリュームフィールド１６１０毎に閾値を設定可能であり、前記閾値は各ＯＳが使用するストレージポートの合計ＭＢＰＳによって、各ＯＳの論理ボリュームの使用ＭＢＰＳを抑止するための閾値として使用される。ストレージポートの合計ＭＢＰＳが抑止レベル１フィールド１８２０の値を超えた場合はレベル１閾値１６２０、抑止レベル２フィールド１８２５の値を超えた場合はレベル２閾値１６２５、抑止レベル３フィールド１８３０の値を超えた場合はレベル３閾値１６３０、抑止レベル４フィールド１８３５の値を超えた場合はレベル４閾値１６３５を対象のＨＢＡに設定することによりデータ転送性能を制限する。
【００３８】
図２１はストレージポート用ＩＯＰＳ閾値設定テーブルの例である。ストレージポート用ＩＯＰＳ閾値設定テーブル１６５０はストレージポート用ＭＢＰＳ閾値設定テーブル１６００とほぼ同様に定義される。
【００３９】
図５から図２１の説明で示したとおり、性能監視エージェント１１２で利用するデータはテーブルとしてデータベース化して管理することが可能であるため、現在一般的に利用されているデータベース管理システム（以下ＤＢＭＳ）を用いることにより、性能監視エージェント１１２の各データを管理する処理を独自に実装するよりも効率性、安全性の点で信頼性が増す。
【００４０】
図２２は本発明の実施例において性能監視エージェントで動作する性能監視動作処理のフローチャートの例である。性能監視動作処理４００は性能監視エージェント１１２がユーザによって起動されるかＯＳ立ちあげ時に自動的に起動されるかした際に動作を開始し、性能監視動作処理４００の内部に終了ルーチンを持たず、定期的に動作し続ける。性能監視エージェント１１２はステップ４１０においてＨＢＡドライバに対して性能情報取得コマンドを発行する。性能情報取得コマンド発行処理の実装はＯＳに用意されているユーザアプリケーションとデバイスドライバの通信の為のＡＰＩを利用することにより実現可能である。ＨＢＡドライバ１１３は性能監視エージェント１１２の要求に対して、図３で示される性能情報取得コマンドの応答値３００を取得する。性能監視エージェント１１２はステップ４１０において取得した性能情報コマンドの応答値を他の全ての性能監視エージェントに対して送信する（ステップ４２０）。性能監視エージェント同士はネットワークインタフェースにより、ＴＣＰ／ＩＰプロトコルを用いたアプリケーション通信を行う。性能監視エージェント１１２はステップ４３０において、通信可能な他のすべての性能監視エージェントから性能情報取得コマンドの応答値を受け取るまで待つ。全ての性能監視エージェントから性能情報取得コマンドを受け取ったら、性能監視エージェント１１２は受け取った他の性能監視エージェントの各応答値対して、論理ＨＢＡ性能情報テーブル１１００および論理ボリューム性能情報テーブル１１５０の更新処理を行う（ステップ４４０）。性能監視エージェント１１２はステップ４５０において更新された論理ＨＢＡ性能情報テーブル１１００をもとに物理ＨＢＡ性能情報テーブル１２００の更新処理を行う。性能監視エージェント１１２はステップ４６０において更新された論理ボリューム性能テーブル１１５０をもとにストレージポート性能情報テーブル１２５０の更新処理を行う。性能監視エージェント１１２はステップ４７０およびステップ４８０において閾値設定コマンド２００を作成する。ステップ４７０では論理ＨＢＡ用の設定閾値を閾値設定コマンド２００に追加し、ステップ４８０では論理ボリューム用の設定閾値を閾値設定コマンド２００に追加する。作成した閾値設定コマンドはステップ４９０によってＨＢＡドライバ１１３へ発行され、ＨＢＡドライバ１１３は閾値設定コマンド２００で指定された閾値をＨＢＡドライバ内部にセットする。性能監視エージェント１１２はステップ４９５においてポーリング時間で指定された時間待つ。数１００ミリセカンドから数秒程度の時間が妥当な時間である。一定のポーリング時間まった後、性能監視エージェント１１２は再びステップ４１０から動作を行う。
【００４１】
図２３は本発明の実施例において論理ＨＢＡ性能情報テーブルおよび論理ボリューム性能情報テーブルを更新する処理のフローチャートの例である。処理４４００は与えられた性能情報コマンドの応答値のレコードを先頭から順次調べるためにステップ４４０５において変数ＰＯＩＮＴに１をセットする。ステップ４４１０において調査対象のレコードが存在するか否かをチェックし、存在しない場合はステップ４４６０で処理を終了する。存在する場合ステップ４４１０において、該当のレコードを変数レコードＡにセットする。ステップ４４２０でレコードＡのフラグフィールドが論理ＨＢＡをさしているか論理ボリュームをさしているかをチェックし、論理ＨＢＡならば論理ＨＢＡ性能情報テーブル１１００を更新するためにステップ４４２５に分岐し、論理ボリュームならば論理ボリューム性能情報テーブル１１５０を更新するためにステップ４４４０に分岐する。ステップ４４２５では論理ＨＢＡ性能情報テーブル１１００にレコードＡに対応するレコードが記録されているかをチェックし、記録されているならばステップ４４３０で該当レコードの現在ＩＯＰＳと現在ＭＢＰＳをレコードＡのものに更新し、記録されていないならばステップ４４３５で論理ＨＢＡ性能情報テーブル１１１０に新規にレコードを追加する。ステップ４４２０でフラグが論理ボリュームをさしていた場合、ステップ４４４０で論理ボリューム性能情報テーブル１１５０にレコードＡに対応するレコードが記録されているかをチェックし、記録されているならばステップ４４４５で該当レコードの現在ＩＯＰＳと現在ＭＢＰＳをレコードＡのものに更新し、記録されていないならばステップ４４５０で論理ボリューム性能情報テーブル１１５０に新規にレコードを追加する。ステップ４４３０、ステップ４４３５、ステップ４４４５、ステップ４４５０は全てステップ４４４５に進み、更新または追加されたレコードの更新フラグフィールドをＯＮにセットする。このフィールドは物理ＨＢＡ性能情報テーブル１２００またはストレージポート性能情報テーブル１２５０を更新する際に使用される。更新後、ＰＯＩＮＴを１加算しステップ４４１０に戻る。更新処理４４００はテーブル内の全てのレコードに対して処理を終えると４４６０に行き処理を終了する。
【００４２】
図２４は本発明の実施例において物理ＨＢＡ性能情報テーブル１２００を更新する処理のフローチャートの例である。処理４５００は論理ＨＢＡ性能情報テーブル１１００のレコードを先頭から順次調べるためにステップ４５０５において変数ＰＯＩＮＴに１をセットする。ステップ４５１０において各論理ＨＢＡの合計ＩＯＰＳおよび合計ＭＢＰＳを算出するための変数としてＩ＿ＶＡＬＵＥとＭ＿ＶＡＬＵＥにそれぞれ０をセットする。ステップ４５１５においてＩＮＤＥＸがＰＯＩＮＴのレコードを取得し、取得したレコードを変数レコードＣにセットする。ステップ４５２０においてレコードＣの更新フラグフィールド１１３０を調べる。更新フラグフィールドがＯＮの場合は該当レコードの現在ＩＯＰＳ１１２０および現在ＭＢＰＳ１１２５が合計値Ｉ＿ＶＡＬＵＥおよび合計値Ｍ＿ＶＡＬＵＥに加算されていないことを表す。更新フラグフィールドがＯＮの場合はステップ４５２５に分岐する。ステップ４５２５ではＩ＿ＶＡＬＵＥおよびＭ＿ＶＡＬＵＥにレコードＣの現在ＩＯＰＳおよび現在ＭＢＰＳを加える。ステップ４５３０ではレコードＣの更新フラグをＯＦＦにセットする。ステップ４５３５からステップ４５６５までは、レコードＣと同じ物理ＨＢＡを持つ論理ＨＢＡの性能データがテーブル内に存在するかを調べ、存在する場合はＩ＿ＶＡＬＵＥ、Ｍ＿ＶＡＬＵＥに加算するための処理である。ステップ４５３５では変数ＳＥＡＲＣＨにＰＯＩＮＴをセットする。ステップ４５４０でＳＥＡＲＣＨに１を加えＳＥＡＲＣＨが論理ＨＢＡ性能情報テーブルのレコード数を超えていないかチェックする。ここで最初から１を加算するのはレコードＣの次のレコードから調査を開始するためである。レコード数を超えていない場合はステップ４５４５でＩＮＤＥＸがＳＥＡＲＣＨのレコードを取得し、変数レコードＤにセットする。ステップ４５５０でレコードＣとレコードＤの物理ＷＷＮを比較して一致していない場合は、レコードＤはレコードＣと異なる物理ＨＢＡに関するデータと判断し、ステップ４５４０に戻り、次のレコードを調べる。ステップ４５５０で一致している場合は、ステップ４５５５にてＩ＿ＶＡＬＵＥにレコードＤの現在ＩＯＰＳをＭ＿ＶＡＬＵＥにレコードＤの現在ＭＢＰＳを加算する。ステップ４５６０ではレコードＤの更新フラグをＯＦＦにセットし、ステップ４５４０に戻り、次のレコードを調べる。ステップ４５４０でＳＥＡＲＣＨがレコード数を超えた場合は該当物理ＨＢＡの合計ＩＯＰＳと合計ＭＢＰＳは確定したものとし、ステップ４５７０で物理ＨＢＡ性能情報テーブル１２００の更新処理を行う。ステップ４５７５でＰＯＩＮＴに１を加算してステップ４５８０でＰＯＩＮＴが論理ＨＢＡ性能情報テーブル１１１０のレコード数を超えていないかどうかをチェックし、超えていない場合はステップ４５１０に戻って再び物理ＨＢＡの合計ＩＯＰＳ、合計ＭＢＰＳを算出する処理を行う。ステップ４５８０でＰＯＩＮＴが論理ＨＢＡ性能情報テーブルのレコード数を超えている場合はステップ４５８５で処理終了する。
【００４３】
ストレージ性能情報テーブル更新処理は物理ＨＢＡ性能情報テーブル更新処理４５００の処理と同様の処理で更新可能である。
【００４４】
図２５は本発明の実施例において閾値設定コマンド２００のテーブルにＨＢＡ用レコードを追加する処理のフローチャートの例である。処理４７００は論理ＨＢＡ性能情報テーブル１１００のレコードを先頭から順次調べるためにステップ４７０５において変数Ｌ＿ＰＯＩＮＴに０をセットする。ステップ４７１０においてＬ＿ＰＯＩＮＴに１加算し、Ｌ＿ＰＯＩＮＴが論理ＨＢＡ性能情報テーブル１１００のレコード数を超えていないかチェックする。ステップ４７１５においてＩＮＤＥＸがＬ＿ＰＯＩＮＴのレコードを論理ＨＢＡ性能情報テーブル１１００から取得し、取得したレコードを変数レコードＬにセットする。ステップ４７２０においてレコードＬの論理ＷＷＮが自ＯＳのＨＢＡドライバに割り当てられている論理ＷＷＮであるかどうかを判定する。自ＯＳのＨＢＡドライバに割り当てられている論理ＷＷＮでない場合、ステップ４７１０に戻り、新たな論理ＨＢＡ性能情報テーブル１１００のレコードを取得する。レコードＬの論理ＷＷＮが自ＯＳで管理している論理ＷＷＮの場合は、ステップ４７２５において、ＨＢＡ用ＭＢＰＳ設定閾値取得処理を実行し、ＨＢＡアダプタに設定するＭＢＰＳの閾値を取得する。取得した閾値をＭ＿ＶＡＬＵＥにセットする。ＨＢＡ用ＭＢＰＳ設定閾値取得処理４０００に関しては後述する。ステップ４７３０において、ＨＢＡ用ＩＯＰＳ設定閾値取得処理を実行し、ＨＢＡアダプタに設定するＭＢＰＳの閾値を取得する。取得した閾値をＩ＿ＶＡＬＵＥにセットする。ステップ４７３５においてＨＢＡ用ＭＢＰＳ現在設定情報テーブル１４００からレコードＬの論理ＷＷＮと一致するレコードを取得し、取得したレコードを変数レコードＣにセットする。ステップ４７４０においてＨＢＡ用ＩＯＰＳ現在設定情報テーブル１４５０からレコードＬの論理ＷＷＮと一致するレコードを取得し、取得したレコードを変数レコードＤにセットする。ステップ４７４５においてＭ＿ＶＡＬＵＥとレコードＣの設定値の比較、Ｉ＿ＶＡＬＵＥとレコードＤの設定値を比較し同じであれば該当論理ＨＢＡに対するＨＢＡドライバの設定閾値の更新は不要と判断し、ステップ４７１０に戻る。Ｍ＿ＶＡＬＵＥとレコードＣの設定値、Ｉ＿ＶＡＬＵＥとレコードＤの設定値のどちらかが一致していない場合は、ステップ４７５０において閾値設定コマンドにレコードを追加し、フラグを論理ＨＢＡとして、設定ＭＢＰＳにＭ＿ＶＡＬＵＥ、設定ＩＯＰＳにＩ＿ＶＡＬＵＥをセットする。ステップ４７５５において、ＨＢＡ用ＭＢＰＳ現在設定情報テーブル１４００およびＨＢＡ用ＩＯＰＳ現在設定情報テーブル１４５０の論理ＷＷＮフィールドがレコードＬの論理ＷＷＮと一致するレコードの設定値をそれぞれＭ＿ＶＡＬＵＥ，Ｉ＿ＶＡＬＵＥに更新する。更新後ステップ４７１０に戻る。ステップ４７１０でＬ＿ＰＯＩＮＴが論理ＨＢＡ性能情報テーブルのレコード数を超えた場合はステップ４７６０に進み閾値設定コマンドのＨＢＡ用レコード追加処理を終了する。
【００４５】
図２６は本発明の実施例においてＨＢＡドライバに対して該当ＨＢＡのＭＢＰＳの設定閾値を取得する処理のフローチャートの例である。図２６のフローチャートでは物理ＨＢＡ全体の使用しているＭＢＰＳに応じて個別の各論理ＨＢＡが使用するＭＢＰＳを決定するための処理がしめされている。ＨＢＡ用ＭＢＰＳ設定閾値取得処理４０００は２つの入力値を持ち、入力値１をＰ＿ＶＡＬＵＥに入力値２をＬ＿ＶＡＬＵＥに設定する。図２５のステップ４７２５において図２６の処理４０００を呼ぶ際には、入力値１のＰ＿ＶＡＬＵＥにはレコードＬの物理ＷＷＮがセットされ、入力値２のＬ＿ＶＡＬＵＥにはレコードＬの論理ＷＷＮがセットされる。ステップ４００５において、物理ＨＢＡ性能情報テーブル１２００から物理ＷＷＮがＰ＿ＶＡＬＵＥのレコードを取得し、取得したレコードをレコードＰにセットする。ステップ４０１０において、ＨＢＡ用ＭＢＰＳ抑止レベルテーブル１５００から論理ＷＷＮがＬ＿ＶＡＬＵＥのレコードを取得し、取得したレコードをレコードＹにセットする。ステップ４０１５においてレコードＹの抑止レベル１が０でなく、かつレコードＰの現在ＭＢＰＳがレコードＹの抑止レベル１よりも大きい場合は、ステップ４０２５にすすむ。ステップ４０１５においてレコードＹの抑止レベル１が０またはレコードＰの現在ＭＢＰＳがレコードＹの抑止レベル１以下の場合は、物理ＨＢＡに対する負荷はＷＷＮがＬ＿ＶＡＬＵＥで与えられる論理ＨＢＡに対して閾値を設定するほど高くないと判断し、論理ＨＢＡに設定する閾値を与えるＲＥＴに０をセットする（ステップ４０２０）。ＨＢＡドライバは閾値が０に設定された場合はＭＢＰＳまたはＩＯＰＳを制限することなく動作するものとする。ステップ４０２５においてレコードＹの抑止レベル２が０でなく、かつレコードＰの現在ＭＢＰＳがレコードＹの抑止レベル２よりも大きい場合は、ステップ４０３５にすすむ。ステップ４０２５においてレコードＹの抑止レベル２が０またはレコードＰの現在ＭＢＰＳがレコードＹの抑止レベル２以下の場合は、ステップ４０３０においてＨＢＡ用ＭＢＰＳ閾値設定テーブルで論理ＷＷＮフィールドがＬ＿ＶＡＬＵＥのレコードを探し、該当レコードのレベル１閾値をＲＥＴにセットし、ＷＷＮがＬ＿ＶＡＬＵＥで与えられる論理ＨＢＡに対してセットされるようにする。ステップ４０３５の判定でＮＯの分岐する場合はステップ４０４０に進みＨＢＡ用ＭＢＰＳ閾値設定テーブルで論理ＷＷＮフィールドがＬ＿ＶＡＬＵＥのレコードを探し、該当レコードのレベル２閾値をＲＥＴにセットする。ステップ４０３５の判定でＹＥＳに分岐する場合はステップ４０４５に進み、ステップ４０４５の判定でＮＯに分岐する場合はステップ４０５０に進みＨＢＡ用ＭＢＰＳ閾値設定テーブルで論理ＷＷＮフィールドがＬ＿ＶＡＬＵＥのレコードを探し、該当レコードのレベル３閾値をＲＥＴにセットする。ステップ４０４５の判定でＹＥＳに分岐する場合はステップ４０６０に進みＨＢＡ用ＭＢＰＳ閾値設定テーブルで論理ＷＷＮフィールドがＬ＿ＶＡＬＵＥのレコードを探し、該当レコードのレベル４閾値をＲＥＴにセットする。ステップ４０２０、ステップ４０３０、ステップ４０４０、ステップ４０５０、ステップ４０６０でＲＥＴに閾値が設定されたら、ステップ４０７０に進み、応答値としてＲＥＴを返し、ＨＢＡ用ＭＢＰＳ設定閾値取得処理を終了する。
【００４６】
図２２のステップ４８０で閾値設定コマンドに論理ボリューム用のレコードを追加する処理を行なうが、図２５と図２６のフローチャートで示される処理と同様の処理で閾値設定コマンドに論理ボリューム用のレコードを追加する処理を行える。
【００４７】
図２７は本発明の実施例を実現するためにＨＢＡドライバ１１３に追加されるデータおよび処理の例である。ＨＢＡ用ＭＢＰＳ閾値１１０１、ＨＢＡ用ＩＯＰＳ閾値１１０２、論理ボリューム＃１用ＭＢＰＳ閾値１１０３、論理ボリューム＃１用ＩＯＰＳ閾値１１０４、論理ボリューム＃２用ＭＢＰＳ閾値１１０５、論理ボリューム＃２用ＩＯＰＳ閾値１１０６は性能監視エージェント１１２から閾値設定コマンド２００が発行された際、閾値設定処理１２００がよびだされ、閾値設定コマンドのテーブルの各レコードを参照して対応する領域に閾値がセットされる。ＨＢＡドライバ１１３がＳＡＮ上にコマンドを送信する際に起動処理１４００がよびだされ、起動処理１４００はＳＡＮ上にコマンドを送信する際にコマンドを一旦コマンド起動待ちキュー１１２０に入れる。コマンド待ちキューはＨＢＡ用の起動待ちキュー１１２５とＨＢＡに接続される各論理ボリューム用の起動待ちキュー１１３０、１１３５が存在し、１つのコマンド待ちキューはＨＢＡ用の起動待ちキューといずれかの論理ボリューム用の起動待ちキューの２つにキューイングされる。起動処理１４００はＨＢＡ用起動待ちキューの先頭のコマンドを設定された閾値に応じてフレーム送信可能かどうかを判定し、発行可能な場合はフレーム上に送信し、性能算出用キュー１１５０にいれ、送信可能でない場合、タイマー処理１２００を呼び出し、一定の時間が経過してから、再びＨＢＡ用起動待ちキューの先頭のコマンドを送信する。性能情報リスト応答処理１５００は性能監視エージェントから性能情報取得コマンド３００が発行された際に呼び出される処理で、性能算出用キュー１１５０を用いて性能情報コマンド３００の応答値のテーブルに性能情報のレコードを格納する。
【００４８】
図２８は本発明の実施例１における性能算出用キューにキューイングされるコマンドの為に追加されるデータの例である。性能算出用キューにキューイングされるコマンド１１５６には転送開始時刻１１５７と転送データサイズ１１５８を持つ。これらを用いて論理ＨＢＡや論理ボリュームのＩＯＰＳおよびＭＢＰＳを算出する。ここで
図２９は本発明の実施例における性能算出処理のフローチャートの例である。性能算出処理１６００は性能監視エージェント１１２から性能情報取得コマンド３００が発行された場合または、ＨＢＡドライバ１１３が起動待ちキュー制御処理を行なった際に呼び出される。ステップ１６０１として応答値用の変数Ｍ＿ＶＡＬＵＥとＩ＿ＶＡＬＵＥと総転送データサイズと総ＩＯオペレーション回数に０をセットする。ステップ１６０５において、ポインタを性能算出対象のＨＢＡ性能算出用キューまたは論理ボリューム用性能算出用キューの末尾にセットする。ステップ１６１０ではシステムの現在時刻を取得する。ステップ１６１５において、ポインタ位置にコマンドが存在するかどうかを調べ、存在しないならばキュー内のすべてのコマンドを調査したということでステップ１６５０にすすむ。ステップ１６２０では現在時刻からポインタ位置のコマンドの転送開始時刻を減算し、性能算出基準時間１１１０以内であるかを判定する。性能算出基準時間１１１０以上現在時刻から離れている場合は性能算出用のコマンドとして不適当として、それを見つけるとステップ１６５０にすすむ。性能算出基準時間１１１０以内であれば性能算出対象のコマンドであると判断し、ステップ１６２５に進む。ステップ１６２５において総転送サイズにポインタ位置のコマンドの転送データサイズ転送データサイズを加算する。ステップ１６３０においてＭＢＰＳに（総転送サイズ）／（（現在時刻）−（ポインタ位置のコマンドの転送開始時刻））をセットする。ステップ１６３５において総転送フレーム数に１加算する。ステップ１６４０においてＩＯＰＳに（総ＩＯオペレーション回数）／（（現在時刻）−（ポインタ位置のコマンドの転送開始時刻））をセットする。ステップ１６４５においてポインタを先頭方向に一つ進めて、ステッ１６１５に戻る。ステップ１６５０で応答値１としてＭ＿ＶＡＬＵＥ、応答値２としてＩ＿ＶＡＬＵＥを返し、性能算出処理を終了する。
【００４９】
図３０は本発明の実施例１における性能情報取得コマンド応答処理のフローチャートの例である。性能情報取得コマンド３００が性能監視エージェントから発行された際に性能情報取得コマンド応答処理１５００がよばれ、ステップ１５０５において性能算出処理により現在のＨＢＡのＩＯＰＳおよびＭＢＰＳを取得する。ステップ１５１０において性能算出対象の論理ボリュームが存在するかを判定し、存在するならばステップ１５１５において該当論理ボリュームの現在のＩＯＰＳおよびＭＢＰＳを取得する。取得後再びステップ１５１０において性能算出対象の論理ボリュームが存在するかを判定し、存在しないならばステップ１５２０において性能情報取得コマンド応答用の性能情報リスト３００を作成する。応答用の性能情報リスト３００を作成後、ステップ１５２５において性能監視エージェントに対して性能情報リスト３００をかえし、ステップ１５３０において性能情報取得コマンド応答処理を終了する。
【００５０】
図３１は本発明の実施例１における起動処理のフローチャートの例である。起動処理１４００はステップ１４０５においてコマンド起動を受付、ステップ１４１０においてＨＢＡ用起動待ちキュー１１２５にエンキュー、ステップ１４１５において論理ボリューム用起動待ちキュー１１３０または１１３５にエンキューし、ステップ１４２０において起動待ちキュー制御処理１７００を行い、ステップ１４２５において起動処理を終了する。
【００５１】
図３２は本発明の実施例１における起動待ちキュー制御処理のフローチャートの例である。起動待ちキュー制御処理１７００はステップ１７０５においてポインタをＨＢＡ用起動待ちキューの先頭にセットする。ステップ１７１０においてポインタ位置にコマンドが存在するならば、ステップ１７１５において性能算出処理により現在のＨＢＡのＭＢＰＳおよびＩＯＰＳを取得する。ステップ１７２０においてＨＢＡのＩＯＰＳがＨＢＡ用ＩＯＰＳ閾値以内であり、かつＭＢＰＳがＨＢＡ用ＭＢＰＳ閾値以内であればステップ１７２５に進む。ステップ１７２５において性能算出処理により対象論理ボリュームの現在のＭＢＰＳおよびＩＯＰＳを取得し、ステップ１７３０において対象論理ボリュームのＩＯＰＳが対象論理ボリューム用ＩＯＰＳ閾値以内であり、かつＭＢＰＳが対象論理ボリューム用ＭＢＰＳ閾値以内であればステップ１７３５に進みフレーム発行処理を行ない、ステップ１７４０においてポインタを末尾方向に１すすめてステップ１７１０にもどる。ステップ１７１０においてポインタ位置にコマンドが存在しない場合、ステップ１７５０にて起動待ちキュー処理を終了する。ステップ１７２０またはステップ１７３０においてＩＯＰＳまたはＭＢＰＳが閾値を超えた場合はステップ１７４５においてタイマー制御処理をおこない、しかるべき時刻に再び起動待ちキュー制御処理を行う。タイマー制御処理を行なったあとはステップ１７５０において起動待ちキュー制御処理を終了する。
【００５２】
図３３は本発明の実施例１におけるフレーム発行処理のフローチャートの例である。フレーム発行処理１８００はステップ１８０５においてＨＢＡ用起動待ちキュー１１２５から発行するコマンドをデキューする。ステップ１８１０において論理ボリューム用起動待ちキュー１１３０から発行するコマンドをデキューする。ステップ１８１５において現在時刻を取得する。ステップ１８２０において、ステップ１８０５、１８１０においてデキューしたコマンドをファイバチャネルフレームとしてＳＡＮ上に送信する。ステップ１８２５においてＨＢＡ用性能算出用キュー１１５５の先頭のコマンドをデキューする。ステップ１８３０において各論理ボリューム用性能算出用キュー１１６０、１１６５の先頭のコマンドをデキューする。ステップ１８３５において取得した現在時刻を用い、ＨＢＡ用性能算出用キューに発行したコマンドをエンキューする。ステップ１８４０において取得した現在時刻を用い、論理ボリューム用性能算出用キューに発行したコマンドをエンキューする。ステップ１８４５においてフレーム発行処理を終了する。
【００５３】
図３４は本発明の実施例１におけるタイマー制御処理のフローチャートの例である。タイマー制御処理１９００はステップ１９０５において（総転送サイズ）／ＭＢＰＳ閾値＋現在時刻を計算する。これはＨＢＡドライバがＩＯオペレーションをこの間おこなわなかったとしてＭＢＰＳが閾値になる時刻を表す。同様に（総ＩＯオペレーション回数）／ＩＯＰＳ閾値＋現在時刻を計算し、２つの結果のうち小さい方をタイマー予定時刻として取得する。ステップ１９１０においてＯＳのタイマー処理機構に基づき取得したタイマー予定時刻をもとにタイマー起動をかける。これはタイマー予定時刻にタイマー処理１３００を呼び出すことが目的である。タイマー起動をかけたあと、ステップ１９１５に進みタイマー制御処理を終了する。
【００５４】
図３５は本発明の実施例１におけるタイマー処理の例である。タイマー処理１３００は呼び出されるとステップ１３０５において起動待ちキュー制御１７００を呼び出し、ステップ１３１０において処理を終了する。
【図面の簡単な説明】
【００５５】
【図１】本発明を利用したシステムの全体構成図の例
【図２】本発明の実施例において性能監視エージェントとＨＢＡドライバの接続関係を表したソフトウェア構成図
【図３】本発明の実施例における性能情報コマンドの例
【図４】本発明の実施例における閾値設定コマンドの例
【図５】本発明の実施例における性能監視エージェントの例
【図６】本発明の実施例における論理ＨＢＡ性能情報テーブルの例
【図７】本発明の実施例における論理ボリューム性能情報テーブルの例
【図８】本発明の実施例における物理ＨＢＡ性能情報テーブルの例
【図９】本発明の実施例における物理ストレージポート性能情報テーブルの例
【図１０】本発明の実施例におけるＨＢＡ用ＭＢＰＳ抑止レベルテーブルの例
【図１１】本発明の実施例におけるＨＢＡ用ＩＯＰＳ抑止レベルテーブルの例
【図１２】本発明の実施例におけるＨＢＡ用ＭＢＰＳ現在設定情報テーブルの例
【図１３】本発明の実施例におけるＨＢＡ用ＩＯＰＳ現在設定情報テーブルの例
【図１４】本発明の実施例におけるＨＢＡ用ＭＢＰＳ閾値設定テーブルの例
【図１５】本発明の実施例におけるＨＢＡ用ＩＯＰＳ閾値設定テーブルの例
【図１６】本発明の実施例におけるストレージポート用ＭＢＰＳ抑止レベルテーブルの例
【図１７】本発明の実施例におけるストレージポート用ＩＯＰＳ抑止レベルテーブルの例
【図１８】本発明の実施例におけるストレージポート用ＭＢＰＳ現在設定情報テーブルの例
【図１９】本発明の実施例におけるストレージポート用ＩＯＰＳ現在設定情報テーブルの例
【図２０】本発明の実施例におけるストレージポート用ＭＢＰＳ現在設定情報テーブルの例
【図２１】本発明の実施例におけるストレージポート用ＩＯＰＳ現在設定情報テーブルの例
【図２２】本発明の実施例における性能監視エージェントで動作する性能監視動作処理のフローチャートの例
【図２３】本発明の実施例における論理ＨＢＡ性能情報テーブルおよび論理ボリューム性能情報テーブルを更新する処理のフローチャートの例
【図２４】本発明の実施例における物理ＨＢＡ性能情報テーブルを更新する処理のフローチャートの例
【図２５】本発明の実施例における閾値設定コマンド２００のテーブルにＨＢＡ用レコードを追加する処理のフローチャートの例
【図２６】本発明の実施例におけるＨＢＡドライバに対して該当ＨＢＡのＭＢＰＳの閾値を設定するする処理のフローチャートの例
【図２７】本発明の実施例を実現するためにＨＢＡドライバ１１３に追加されるデータおよび処理の例
【図２８】本発明の実施例における性能算出用キューにキューイングされるコマンドの為に追加されるデータの例
【図２９】本発明の実施例における性能算出処理のフローチャートの例
【図３０】本発明の実施例における性能情報リスト応答処理のフローチャートの例
【図３１】本発明の実施例における起動処理のフローチャートの例
【図３２】本発明の実施例における起動待ちキュー制御処理のフローチャートの例
【図３３】本発明の実施例におけるフレーム発行処理のフローチャートの例
【図３４】本発明の実施例におけるタイマー制御処理のフローチャートの例
【図３５】本発明の実施例におけるタイマー処理のフローチャートの例
【符号の説明】
【００５６】
１００  サーバ
１１０、１２０  ＬＰＡＲ
１１１、１２１  ＯＳ
１１２、１２２  性能監視エージェント
１１３、１２３  ＨＢＡドライバ
１４０  ＨＢＡ
１５０  ＮＩＣ
１６０  ファイバチャネルスイッチ
１７０  ストレージ装置
１９１、１９２、１９３、１９４  論理ボリューム
２００  閾値設定コマンド
３００  性能情報取得コマンド
【図１】
2008186211.tif 000003
【図２】
2008186211.tif 000004
【図３】
2008186211.tif 000005
【図４】
2008186211.tif 000006
【図５】
2008186211.tif 000007
【図６】
2008186211.tif 000008
【図７】
2008186211.tif 000009
【図８】
2008186211.tif 000010
【図９】
2008186211.tif 000011
【図１０】
2008186211.tif 000012
【図１１】
2008186211.tif 000013
【図１２】
2008186211.tif 000014
【図１３】
2008186211.tif 000015
【図１４】
2008186211.tif 000016
【図１５】
2008186211.tif 000017
【図１６】
2008186211.tif 000018
【図１７】
2008186211.tif 000019
【図１８】
2008186211.tif 000020
【図１９】
2008186211.tif 000021
【図２０】
2008186211.tif 000022
【図２１】
2008186211.tif 000023
【図２２】
2008186211.tif 000024
【図２３】
2008186211.tif 000025
【図２４】
2008186211.tif 000026
【図２５】
2008186211.tif 000027
【図２６】
2008186211.tif 000028
【図２７】
2008186211.tif 000029
【図２８】
2008186211.tif 000030
【図２９】
2008186211.tif 000031
【図３０】
2008186211.tif 000032
【図３１】
2008186211.tif 000033
【図３２】
2008186211.tif 000034
【図３３】
2008186211.tif 000035
【図３４】
2008186211.tif 000036
【図３５】
2008186211.tif 000037