(57)【特許請求の範囲】
【請求項１】
記憶装置と、
前記記憶装置へのデータアクセスを指示するコマンドを受信する通信インタフェースと、
前記通信インタフェースを介して受信したコマンドであって、実行中の全種別のコマンドの総数を計数する計数手段と、
前記通信インタフェースを介して新たに受信したコマンドの種別を判別する判別手段と、
前記実行中の全種別のコマンドの総数が、前記通信インタフェースを介して該新たに受信したコマンドの種別に対応する制限値以下であれば、該新たに受信したコマンドに応じたデータアクセスを前記記憶装置に対して実行し、前記実行中の全種別のコマンドの総数が該新たに受信したコマンドの種別に対応する制限値を超えた場合、該新たに受信したコマンドに応じたデータアクセスを抑止する制御を行う制御手段と、
を有するストレージ装置。
【請求項２】
前記判別手段は、前記通信インタフェースを介して受信したコマンドが、他のストレージ装置から送信されたコピーコマンドか、該コピーコマンド以外の非コピーコマンドかを判別し、
前記コマンドの種別に対応する制限値は、コピーコマンドの制限値と非コピーコマンドの制限値である、
ことを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記制御手段は、前記コピーコマンドの制限値よりも、前記非コピーコマンドの制限値を低い値に設定することを特徴とする請求項２記載のストレージ装置。
【請求項４】
前記制御手段は、
前記非コピーコマンドの制限値として、前記他のストレージ装置との間のデータコピー用の通信経路が設定されている場合に適用する第１の制限値と、該通信経路が設定されていない場合に適用する、前記第１の制限値より高い値の第２の制限値とが設定されており、
該データコピー用の通信経路が設定されている場合には、前記実行中のコマンドの数が前記第１の制限値以下であれば、前記通信インタフェースを介して受信した非コピーコマンドに応じたデータアクセスを前記記憶装置に対して実行し、前記実行中のコマンドの数が前記第１の制限値を超えていれば、該非コピーコマンドに応じたデータアクセスを抑止し、
該データコピー用の通信経路が設定されていない場合には、前記実行中のコマンドの数が前記第２の制限値以下であれば、前記通信インタフェースを介して受信した非コピーコマンドに応じたデータアクセスを前記記憶装置に対して実行し、前記実行中のコマンドの数が前記第２の制限値を超えていれば、該非コピーコマンドに応じたデータアクセスを抑止する、
ことを特徴とする請求項２または３記載のストレージ装置。
【請求項５】
前記計数手段は、さらに、コマンドの種別ごとに、一定時間内に受信したコマンドの数を計数し、
前記制御手段は、コマンドの種別ごとの一定時間内に受信したコマンドの数の比率に応じ、コマンドの種別ごとの制限値を決定する、
ことを特徴とする請求項１または２記載のストレージ装置。
【請求項６】
前記計数手段は、さらに、一定時間内に受信した非コピーコマンドの数を計数し、
前記制御手段は、
前記他のストレージ装置によるコピーコマンド出力の原因となる原因コマンドの、一定時間内での受信数を示す情報を、前記他のストレージ装置から取得し、
前記他のストレージ装置での原因コマンドの受信数と非コピーコマンドの数との比率に応じて、前記コピーコマンドの制限値と前記非コピーコマンドの制限値を決定する、
ことを特徴とする請求項２記載のストレージ装置。
【請求項７】
前記計数手段は、さらに、一定時間内に受信した非コピーコマンドの数を計数し、
前記制御手段は、
前記他のストレージ装置によるコピーコマンド出力の原因となる原因コマンドの、一定時間内での受信数を示す情報、前記他のストレージ装置が原因コマンドを実行するのに要する時間を示す第１の時間情報、および前記他のストレージ装置が原因コマンド以外のコマンドを実行するのに要する時間を示す第２の時間情報を、前記他のストレージ装置から取得し、
前記第２の時間情報に示される時間を前記第１の時間情報に示される時間で除算した補正値を、前記他のストレージ装置での原因コマンドの受信数に乗算し、乗算結果と非コピーコマンドの数との比率に応じて、前記コピーコマンドの制限値と前記非コピーコマンドの制限値を決定する、
ことを特徴とする請求項２記載のストレージ装置。
【請求項８】
前記他のストレージ装置によるコピーコマンド出力の原因となる原因コマンドは、前記記憶装置との間でデータの多重化を行うことが設定されている前記他のストレージ装置内のボリュームへの、データの書き込みを指示するコマンドであることを特徴とする請求項６または７のいずれかに記載のストレージ装置。
【請求項９】
前記制御手段は、決定した前記コピーコマンドの制限値に応じた値で前記他のストレージ装置が実行するコマンド数を制限するように、前記他のストレージ装置に指示することを特徴とする請求項６乃至８のいずれかに記載のストレージ装置。
【請求項１０】
ストレージ装置が、
通信インタフェースを介して受信した、記憶装置へのデータアクセスを指示するコマンドであって、実行中の全種別のコマンドの総数を計数し、
前記通信インタフェースを介して新たに受信したコマンドの種別を判別し、
前記実行中の全種別のコマンドの総数が、前記通信インタフェースを介して該新たに受信したコマンドの種別に対応する制限値以下であれば、該新たに受信したコマンドに応じたデータアクセスを前記記憶装置に対して実行し、前記実行中の全種別のコマンドの総数が該新たに受信したコマンドの種別に対応する制限値を超えた場合、該新たに受信したコマンドに応じたデータアクセスを抑止する、
ことを特徴とするコマンド実行制御方法。
【請求項１１】
ストレージ装置に内蔵されたコンピュータに、
通信インタフェースを介して受信した、記憶装置へのデータアクセスを指示するコマンドであって、実行中の全種別のコマンドの総数を計数し、
前記通信インタフェースを介して新たに受信したコマンドの種別を判別し、
前記実行中の全種別のコマンドの総数が、前記通信インタフェースを介して該新たに受信したコマンドの種別に対応する制限値以下であれば、該新たに受信したコマンドに応じたデータアクセスを前記記憶装置に対して実行し、前記実行中の全種別のコマンドの総数が該新たに受信したコマンドの種別に対応する制限値を超えた場合、該新たに受信したコマンドに応じたデータアクセスを抑止する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力されたコマンドの実行制御を行うストレージ装置、コマンド実行制御方法、およびプログラムに関する。
【背景技術】
【０００２】
ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置などのストレージ装置は、ホストコンピュータと接続する通信インタフェースとして、例えばチャネルアダプタ（ＣＡ：Channel Adapter）を有している。ＣＡは、チャネルスイッチなどを経由してホストコンピュータのホストバスアダプタ（ＨＢＡ：Host Bus Adapter）に接続される。ホストコンピュータは、ＨＢＡによりＣＡと通信し、ストレージ装置内のデータにアクセスする。
【０００３】
ストレージ装置内のＣＡは、ホストコンピュータとの通信に限らず、ストレージ装置間の通信にも利用できる。例えばストレージ・セル間でデータコピーを行うフレキシブル・データ・レプリケーション・メカニズムが考えられている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２００３／０１８７９４５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ホストコンピュータからのストレージ装置へのアクセスの用途と、ストレージ装置間のアクセスの用途とでＣＡを共用すると、一方のアクセスの増加により、他方のアクセスの処理が遅延する。例えばデータの信頼性を高めるために、あるストレージ装置に対してホストコンピュータから書き込まれたデータを、他のストレージ装置にコピーする場合がある。この場合、ホストコンピュータからのコピー先のストレージ装置へのアクセスが多いと、ストレージ装置間のコピー処理が待たされる。すると、コピー元のストレージ装置へのホストコンピュータからの書き込みコマンドの完了も遅延し、システム全体としての性能が低下する。
【０００６】
このように、ストレージ装置の１つの通信インタフェースを複数の用途で使用した場合、１つの用途でのデータアクセス量の増加が他の用途でのデータアクセス効率を低下させてしまう場合がある。このような依存関係によるデータアクセス効率の低下が無秩序に発生すると、システム全体としての処理効率が低下する。
【０００７】
１つの側面では、本発明は、処理種別に応じた処理増加に起因する処理効率の低下を抑止可能なストレージ装置、コマンド実行制御方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本願では、記憶装置、通信インタフェース、判別手段、計数手段、および制御手段を有するストレージ装置が提供される。通信インタフェースは、記憶装置へのデータアクセスを指示するコマンドを受信する。判別手段は、通信インタフェースを介して受信したコマンドの種別を判別する。計数手段は、通信インタフェースを介して受信したコマンドであって、実行中のコマンドの数を計数する。制御手段は、実行中のコマンドの数が、通信インタフェースを介して新たに受信したコマンドの種別に対応する制限値以下であれば、該新たに受信したコマンドに応じたデータアクセスを記憶装置に対して実行する制御を行う。また制御手段は、実行中のコマンド数が該新たに受信したコマンドの種別に対応する制限値を超えた場合、該新たに受信したコマンドに応じたデータアクセスを抑止する制御を行う。
【発明の効果】
【０００９】
１態様によれば、処理種別に応じた処理増加に起因する処理効率の低下が抑止可能となる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態に係る装置の機能構成の一例を示す図である。
【図２】第２の実施の形態のシステム構成の一例を示す図である。
【図３】第２の実施の形態に用いるストレージ装置のハードウェア構成の一例を示す図である。
【図４】第２の実施の形態におけるコマンドの流量制御状況の一例を示す図である。
【図５】第２の実施の形態におけるＲＡ先のストレージ装置でのコマンド制限の実施状況を示す図である。
【図６】コマンドのデータフォーマットの一例を示す図である。
【図７】コマンド管理テーブルの一例を示す図である。
【図８】第２の実施の形態のコマンド実行処理の手順を示すフローチャートである。
【図９】第３の実施の形態におけるコマンドの流量制御状況の一例を示す図である。
【図１０】第３の実施の形態におけるセッション管理テーブルの一例を示す図である。
【図１１】第３の実施の形態のコマンド実行処理の手順を示すフローチャートである。
【図１２】第４の実施の形態におけるコマンドの流量制御状況の一例を示す図である。
【図１３】第４の実施の形態のコマンド管理テーブルの一例を示す図である。
【図１４】第４の実施の形態のコマンド管理テーブル更新処理の手順を示すフローチャートである。
【図１５】第４の実施の形態のコマンド実行処理の手順の一例を示すフローチャートである。
【図１６】第５の実施の形態におけるコマンド流量制御状況の一例を示す図である。
【図１７】ＲＡ元コマンド管理テーブルの一例を示す図である。
【図１８】ＲＡ先コマンド管理テーブルの一例を示す図である。
【図１９】ストレージ装置間の情報交換手順の一例を示すシーケンス図である。
【図２０】ＲＡ元におけるコマンド実行状況通知処理の手順の一例を示すフローチャートである。
【図２１】第５の実施の形態のＲＡ元のストレージ装置におけるコマンド実行処理の手順の一例を示す図である。
【図２２】ＲＡ先におけるコマンド制限値決定処理の手順の一例を示す図である。
【図２３】第６の実施の形態におけるコマンド流量制御状況の一例を示す図である。
【図２４】第６の実施の形態のＲＡ元コマンド管理テーブルの一例を示す図である。
【図２５】第６の実施の形態のＲＡ先コマンド管理テーブルの一例を示す図である。
【図２６】第６の実施の形態のＲＡ元のコマンド実行処理の手順の一例を示すフローチャートである。
【図２７】第６の実施の形態のＲＡ元におけるコマンド実行状況通知処理の手順の一例を示すフローチャートである。
【図２８】第６の実施の形態のＲＡ先におけるコマンド制限値決定処理の手順の一例を示すフローチャートである。
【図２９】適用技術判定処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
第１の実施の形態は、通信インタフェースに入力されるコマンドについて、コマンドの用途を示す種別ごとに異なる制限値で、コマンドの流量制御を行うものである。制限値は、実行中のコマンドの数がどの程度になったら、対応する種別のコマンドの実行を抑止するのかを示す閾値である。
【００１２】
例えば、システム全体の処理効率の低下への影響が大きい用途に対応する種別のコマンドほど制限値を高く設定することができる。これにより、システム全体の処理効率の低下への影響が小さい用途のコマンドが増加しても、そのコマンドは先行して実行が抑止される。その結果、システム全体の処理効率の低下への影響が大きい用途のコマンドの処理効率の低下が抑止される。
【００１３】
図１は、第１の実施の形態に係る装置の機能構成の一例を示す図である。ストレージ装置１は、ネットワーク２上のスイッチ３を介してストレージ装置５やコンピュータ６に接続されている。図１の例では、ストレージ装置５は、ストレージ装置１に対して遠方に設置されている。またコンピュータ６はスイッチ３のみを介してストレージ装置１に接続されている。またストレージ装置５には、コンピュータ４が接続されている。
【００１４】
例えばストレージ装置５は、コンピュータ４からのデータ書き込みのコマンド７（種別：ライトコマンド）により、所定の記憶領域に対するデータの書き込みがあると、書き込まれたデータの冗長化処理を行う。例えばストレージ装置５は、書き込まれたデータをストレージ装置１内の記憶装置１−１にコピーするためのコマンド８（種別：コピーコマンド）を出力する。この場合、コマンド７が、ストレージ装置５によるコピーコマンド出力の原因となっている。
【００１５】
コンピュータ６は、例えばストレージ装置１の記憶装置１−１にアクセスするために、ストレージ装置５が出力するコマンド８とは別種のコマンド９（種別：非コピーコマンド）を出力する。
【００１６】
ストレージ装置１は、記憶装置１−１、通信インタフェース１−２、管理部１−３を有している。通信インタフェース１−２は、記憶装置１−１へのデータアクセスを指示するコマンドを受信する。なお通信インタフェース１−２に入力されるコマンドには、複数の種別がある。
【００１７】
管理部１−３は、記憶手段１−３ａ、判別手段１−３ｂ、計数手段１−３ｃ、および制御手段１−３ｄを有している。
記憶手段１−３ａは、例えばコマンドの種別ごとの制限値を記憶する。制限値は、対応する種別のコマンドを実行するか否かを判断する際の、実行中のコマンドの数の閾値である。記憶手段１−３ａとしては、例えば管理部１−３内のメモリが用いられる。
【００１８】
判別手段１−３ｂは、通信インタフェース１−２を介して受信したコマンドの種別を判別する。例えば判別手段１−３ｂは、受信したコマンドが、ストレージ装置５からのデータコピーを指示するコピーコマンドなのか、コピーコマンド以外の非コピーコマンドなのかを判別する。
【００１９】
計数手段１−３ｃは、通信インタフェース１−２を介して受信したコマンドであって、実行中のコマンドの数を計数する。例えば計数手段１−３ｃは、通信インタフェース１−２を介してコマンドを受信するごとに、実行中のコマンドの数を示すカウンタをインクリメントし、受信したコマンドに対する応答を送信するごとに、カウンタをデクリメントする。
【００２０】
制御手段１−３ｄは、記憶手段１−３ａを参照し、実行中のコマンドの数が、通信インタフェース１−２を介して受信したコマンドの種別に対応する制限値以下かどうかを判断する。そして制御手段１−３ｄは、実行中のコマンドの数が制限値以下であれば、受信したコマンドに応じたデータアクセスを記憶装置１−１に対して実行する。また制御手段１−３ｄは、実行中のコマンドの数が、受信したコマンドの種別に対応する制限値を超えた場合、そのコマンドに応じたデータアクセスを抑止する。例えば制御手段１−３ｄは、コマンドに応じたデータアクセスを実行した場合には、アクセス完了後に、そのコマンドに対する応答を返す。また制御手段１−３ｄは、コマンドに応じたデータアクセスを抑止した場合には、抑止決定後に、アクセス不能を示す応答を返す。
【００２１】
このようなシステムにおいて、例えば記憶手段１−３ａには、コピーコマンドに対応する制限値として「１０２４」、非コピーコマンドに対応する制限値として「７６８」が設定されているものとする。
【００２２】
ここで例えばコンピュータ４が、データ書き込みのコマンド７を出力し、ストレージ装置５においてコマンド７に応じたデータ書き込みが行われたものとする。この場合、ストレージ装置５からストレージ装置１へ、書き込まれたデータのコピーを指示するコマンド８が送信される。
【００２３】
コマンド８は、ストレージ装置１の通信インタフェース１−２で受信される。すると、管理部１−３の判別手段１−３ｂが、受信したコマンド８の種別がコピーコマンドであることを判別する。また計数手段１−３ｃが、コマンドを受信したことにより、実行中のコマンドの数をインクリメントする。例えば、実行中のコマンドの数が「８００」になったものとする。
【００２４】
制御手段１−３ｄは、受信したコマンド８の種別「コピーコマンド」に対応する制限値「１０２４」と、実行中のコマンドの数「８００」とを比較する。この例では、実行中のコマンド数は制限値以下である。そこで制御手段１−３ｄは、受信したコマンド８に応じて、データを記憶装置１−１に書き込む。書き込みが完了すると、制御手段１−３ｄは、完了応答をストレージ装置５に送信する。すると、計数手段１−３ｃにおいて、実行中のコマンド数がデクリメントされる。
【００２５】
また、例えばコンピュータ６からストレージ装置１へ、記憶装置１−１へのデータの書き込みのコマンド９が送信されたものとする。このコマンド９の種別は、コピーコマンド以外の非コピーコマンドである。コマンド９は、ストレージ装置１の通信インタフェース１−２で受信される。すると、管理部１−３の判別手段１−３ｂが、受信したコマンド９の種別が非コピーコマンドであることを判別する。また計数手段１−３ｃが、コマンドを受信したことにより、実行中のコマンドの数をインクリメントする。例えば、実行中のコマンドの数が「８００」になったものとする。
【００２６】
制御手段１−３ｄは、受信したコマンド９の種別「非コピーコマンド」に対応する制限値「７６８」と、実行中のコマンドの数「８００」とを比較する。この例では、実行中のコマンドの数は制限値を超えている。そのため、制御手段１−３ｄにおいてコマンド９の実行は抑止される。例えば制御手段１−３ｄは、コマンド９に応じたデータアクセスを実行せずに、コンピュータ６に対してコマンド実行不能を示す応答を送信する。すると、計数手段１−３ｃにおいて、実行中のコマンド数がデクリメントされる。
【００２７】
このように、ストレージ装置１において、コマンドの種別に応じて異なる制限値を適用して、受信したコマンドを実行するか否かを決定することで、通信インタフェース１−２を複数の用途で使用した場合のシステム全体での処理効率の低下を抑止できる。
【００２８】
例えば図１では、ストレージ装置１に対して、ストレージ装置５は遠隔地にあるが、コンピュータ６は近くにある。この場合、ストレージ装置１とストレージ装置５との間の通信は、ストレージ装置１とコンピュータ６との間の通信よりも時間がかかる。
【００２９】
ここで第１の実施の形態の技術を適用せずに、すべての種別のコマンドに同じ制限値を適用した場合について考察する。この場合、実行中のコマンドの数がその制限値を超える状況下では、ストレージ装置５とコンピュータ６とのいずれからのコマンドも、ストレージ装置１では実行できない。このときコンピュータ６は、距離が近いため、コマンド実行不能の応答を迅速に受け取り、コマンドの再送信を行うことができる。一方、ストレージ装置５は、コンピュータ６よりもコマンド実行不能の応答の受信に時間がかかり、コマンドの再送信も遅くなる。しかもストレージ装置５から再送信されたコマンドは、コンピュータ６から再送信されたコマンドよりも時間をかけてストレージ装置１に到達する。その結果、ストレージ装置１では、コンピュータ６から送信されたコマンドが先に実行され、ストレージ装置５からのコピーコマンドの実行は待たされてしまう。ストレージ装置５からのコピーコマンドが完了できなければ、そのコピーコマンド出力の原因となったライトコマンドも完了できず、処理遅延の影響がコンピュータ４にまで及ぶ。
【００３０】
他方、第１の実施の形態の技術を適用し、例えば、コピーコマンドの制限値を非コピーコマンドの制限値よりも高く設定した場合を考える。この場合、ストレージ装置１における実行中のコマンドの数が増加していくと、コピーコマンドが実行できなくなる前に、コンピュータ６から出力される非コピーコマンドの実行が抑止される。例えば、図１の例では、実行中のコマンドの数が７６８を超えた後は、ストレージ装置５からのコピーコマンドのみが実行される。これにより、コマンドの伝送遅延時間の関係で不利にあるストレージ装置５からのコピーコマンドを効率的に処理できる。その結果、ストレージ装置１に対するコンピュータ６からのコマンドの増加による悪影響が、コンピュータ４に波及することを抑止できる。
【００３１】
なお、判別手段１−３ｂ、計数手段１−３ｃ、制御手段１−３ｄは、ストレージ装置１が有するＣＰＵ（Central Processing Unit）により実現することができる。例えば管理部１−３内のＣＰＵが、管理部１−３内のＲＡＭ（Random Access Memory）などのメモリに格納されたプログラムを実行することで、判別手段１−３ｂ、計数手段１−３ｃ、制御手段１−３ｄが実現される。また、記憶手段１−３ａは、ストレージ装置１が有するＲＡＭやハードディスクドライブ（ＨＤＤ:Hard Disk Drive）などにより実現することができる。
【００３２】
また、図１に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、ホストコンピュータからのストレージ装置内のデータへのアクセスを要求するホストコマンドについてのコマンド数の制限値を設けることで、ストレージ装置間のデータのコピーを効率的に実行するものである。
【００３３】
図２は、第２の実施の形態のシステム構成の一例を示す図である。ネットワーク１０を介してスイッチ１１，１２が接続されている。スイッチ１１，１２は、例えばファイバチャネルスイッチである。スイッチ１１には、ホストコンピュータ２１とストレージ装置１００とが接続されている。スイッチ１２には、ホストコンピュータ２２とストレージ装置２００とが接続されている。
【００３４】
例えばホストコンピュータ２１とストレージ装置１００とは同じ施設に設置されている。そのため、ホストコンピュータ２１からストレージ装置１００へのデータ書き込み、またはデータ読み出しのアクセスは、少ない遅延時間で実行できる。またホストコンピュータ２２とストレージ装置２００とは同じ施設に設置されている。そのため、ホストコンピュータ２２からストレージ装置２００へのデータ書き込み、またはデータ読み出しのアクセスは、少ない遅延時間で実行できる。
【００３５】
また、ホストコンピュータ２１およびストレージ装置１００が設置された施設と、ホストコンピュータ２２およびストレージ装置２００が設置された施設とは、地理的に離れている。そのため、例えばストレージ装置１００からストレージ装置２００へのデータコピーは、ホストコンピュータ２２からストレージ装置２００へのアクセスよりも時間がかかる。すると、ホストコンピュータ２２からストレージ装置２００へのアクセスが大量に発生すると、ストレージ装置１００からストレージ装置２００へのデータコピーが停止するおそれがある。そこで第２の実施の形態では、ストレージ装置２００において、ホストコマンドを実行するかどうかの判断基準として、コピーコマンドよりも厳しい基準を適用する。これにより、ストレージ装置１００からストレージ装置２００へのデータコピーの処理効率の低下を抑止する。
【００３６】
なお、ストレージ装置１００からストレージ装置２００へのデータコピーのアクセスを、リモートアクセス（ＲＡ）と呼ぶ。また、ホストコンピュータがストレージ装置に対して、データアクセスを指示するコマンドを、ホストコマンドと呼ぶ。またストレージ装置１００，２００間のデータコピーに使用するコマンドをコピーコマンドと呼ぶ。
【００３７】
図３は、第２の実施の形態に用いるストレージ装置のハードウェア構成の一例を示す図である。ストレージ装置１００は、複数のＨＤＤ１１１，１１２，・・・、複数の通信インタフェース（Ｉ／Ｆ）１２１，１２２，・・・、および制御モジュール（ＣＭ：Controller Module）１３０を有している。
【００３８】
ＨＤＤ１１１，１１２，・・・は、記憶装置の一例である。なおストレージ装置１００では、ＨＤＤ１１１，１１２，・・・に代えて、ＳＳＤ（Solid-State Drive）を使用することもできる。
【００３９】
複数の通信Ｉ／Ｆ１２１，１２２，・・・は、ホストコンピュータ２１と通信するＣＡである。なお通信Ｉ／Ｆ１２１，１２２，・・・は、ストレージ装置２００との通信に使用することもできる。また通信Ｉ／Ｆ１２１，１２２，・・・は、それぞれホストコンピュータ２１との通信およびストレージ装置２００との通信の両方で使用することもできる。以下、ホストコンピュータとの通信（ホスト接続）のみに使用される通信Ｉ／ＦをＣＡポートと呼ぶ。また、ホストコンピュータとの通信およびストレージ装置同士のデータコピーに使用する通信Ｉ／ＦをＣＡＲＡポートと呼ぶ。
【００４０】
ＣＭ１３０は、ストレージ装置１００内蔵のコンピュータであり、ストレージ装置１００内のＨＤＤなどの資源管理を行う。例えばＣＭ１３０には、ＨＤＤ１１１，１１２，・・・が接続されている。ＣＭ１３０は、接続されたＨＤＤ１１１，１１２，・・・で提供されるリソース（記憶機能）を管理する。ＣＭ１３０は、担当する複数のＨＤＤを組み合わせてＲＡＩＤグループを生成し、生成したＲＡＩＤグループを論理的に１つのボリュームとすることができる。
【００４１】
ＣＭ１３０は、ＣＰＵ１３１、メモリ１３２、キャッシュメモリ１３３、および複数のＤＡ（Device Adapter）１３４，１３５，・・・を有する。ＣＭ１３０内の各構成要素は、ＣＭ１３０の内部バス１３９によって互いに接続されている。
【００４２】
ＣＰＵ１３１は、ＣＭ１３０全体を制御する。例えばＣＰＵ１３１は、各通信Ｉ／Ｆ１２１，１２２，・・・から入力されるコマンド数を制限する。なおＣＭ１３０は、複数のＣＰＵを有していてもよい。その場合、複数のＣＰＵが連携してＣＭ１３０全体を制御する。
【００４３】
メモリ１３２は、ＣＭ１３０の制御に用いられる各種情報を記憶する。またメモリ１３２は、ＣＰＵ１３１に実行させる処理が記述されたプログラムも記憶する。メモリ１３２としては、例えばフラッシュメモリなどの不揮発性のメモリを使用することができる。
【００４４】
キャッシュメモリ１３３は、ＨＤＤ１１１，１１２，・・・に入出力するデータを一時的に保存するメモリである。ＤＡ１３４，１３５，・・・は、それぞれＨＤＤ１１１，１１２，・・・に接続され、接続されたＨＤＤへのデータの入出力を行う。
【００４５】
ストレージ装置２００は、複数のＨＤＤ２１１，２１２，・・・、複数の通信インタフェース（Ｉ／Ｆ）２２１，２２２，・・・、および制御モジュール（ＣＭ）２３０を有している。またＣＭ２３０は、ＣＰＵ２３１、メモリ２３２、キャッシュメモリ２３３、および複数のＤＡ２３４，２３５，・・・を有する。ＣＭ２３０内の各構成要素は、ＣＭ２３０の内部バス２３９によって互いに接続されている。ストレージ装置２００内の各構成要素は、ストレージ装置１００内の同名の構成要素と同じ機能を有している。なおストレージ装置２００内のＣＭ２３０は、図１に示した管理部１−３の一例である。すなわち、第１の実施の形態における記憶手段１−３ａ、判別手段１−３ｂ、計数手段１−３ｃ、および制御手段１−３ｄの機能が、ＣＭ２３０によって実現されている。
【００４６】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示したストレージ装置１も、図３に示したストレージ装置１００，２００と同様のハードウェアにより実現することができる。また、図３に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
【００４７】
次に、第２の実施の形態におけるコマンド数制限について説明する。
図４は、第２の実施の形態におけるコマンドの流量制御状況の一例を示す図である。ストレージ装置１００は、ＣＡＲＡポート１５１とＣＡポート１５２とを有する。ＣＡＲＡポート１５１は、例えば図３に示した通信Ｉ／Ｆ１２１によって実現される通信ポートである。またストレージ装置１００は、複数のボリューム１４１，１４２，１４３を有する。ボリューム１４１，１４２，１４３は、例えばＲＡＩＤグループ内に設けられた論理ボリュームである。またボリューム１４１，１４２，１４３は、それぞれが１台のＨＤＤであってもよい。
【００４８】
ストレージ装置２００は、ＣＡＲＡポート２５１とＣＡポート２５２とを有する。ＣＡＲＡポート２５１は、例えば図３に示した通信Ｉ／Ｆ２２１によって実現される通信ポートである。またストレージ装置２００は、複数のボリューム２４１，２４２，２４３を有する。ボリューム２４１，２４２，２４３は、例えばＲＡＩＤグループ内に設けられた論理ボリュームである。またボリューム２４１，２４２，２４３は、それぞれが１台のＨＤＤであってもよい。
【００４９】
図４の例では、ストレージ装置１００のボリューム１４３と、ストレージ装置２００のボリューム２４１との間にＲＡセッションが確立されている。ＲＡセッションは、ストレージ装置１００からストレージ装置２００へリモートアクセスし、ボリューム１４３に書き込まれたデータのボリューム２４１へのコピーを指示するコピーコマンド３２の送信に使用する通信経路である。ＲＡセッションによって、ストレージ装置間コピーの対象ボリュームが定義される。
【００５０】
ホストコンピュータ２１は、スイッチ１１を介してＣＡＲＡポート１５１に接続されている。ホストコンピュータ２１は、ストレージ装置１００内のボリューム１４１，１４２，１４３内のデータにアクセスする場合、ホストコマンド３１を出力する。ホストコマンド３１は、スイッチ１１を介してストレージ装置１００のＣＡＲＡポート１５１に入力される。ストレージ装置１００では、ＣＡＲＡポート１５１に入力されたホストコマンド３１をＣＭ１３０が受信する。ＣＭ１３０は、いずれかのボリューム１４１，１４２，１４３に対して、ホストコマンド３１に示されたデータアクセス処理を実行する。
【００５１】
なおホストコマンドのうち、ＲＡセッションが組まれたボリュームへのコマンドを、特にＲＡコマンドと呼ぶ。またＲＡセッションが組まれていないボリュームへのコマンドを、特にＣＡコマンドと呼ぶ。コピーコマンド３２は、初期コピーを除き、ボリューム１４３に対してＲＡコマンドによるデータ更新があった場合に、ＲＡセッションが組まれた相手筐体のボリューム２４１を等価状態にするために発行される。つまり、ＲＡセッションが組まれたボリューム１４３にデータ更新が起こらない限りコピーコマンド３２は発行されない。なお初期コピーとは、ＲＡセッションが組まれた時点で互いのディスクを等価状態にするコピー動作である。
【００５２】
例えばＣＭ１３０は、ホストコマンド３１がボリューム１４３へのデータ書き込み指示の場合、ボリューム１４３にデータを書き込むと共に、書き込んだデータをストレージ装置２００内のボリューム２４１にコピーするコピーコマンド３２を生成する。そしてＣＭ１３０は、生成したコピーコマンド３２をＣＡＲＡポート１５１から出力する。コピーコマンド３２は、スイッチ１１，１２を介してストレージ装置２００のＣＡＲＡポート２５１に入力される。ストレージ装置２００では、ＣＡＲＡポート２５１に入力されたコピーコマンド３２を、ＣＭ２３０が受信する。ＣＭ２３０は、コピーコマンド３２に従ってボリューム２４１にデータを書き込む。
【００５３】
なお、ボリューム２４１は、ストレージ装置１００内のボリューム１４３のコピーデータ格納用に使用されており、通常の運用中は、ホストコンピュータ２２からのアクセスは行われないものとする。
【００５４】
ホストコンピュータ２２は、スイッチ１２を介してＣＡＲＡポート２５１に接続されている。ホストコンピュータ２２は、ストレージ装置２００内のボリューム２４２，２４３内のデータにアクセスする場合、ホストコマンド３３を出力する。ホストコマンド３３は、スイッチ１２を介してストレージ装置２００のＣＡＲＡポート２５１に入力される。ストレージ装置２００では、ＣＡＲＡポート２５１に入力されたホストコマンド３３をＣＭ２３０が受信する。ＣＭ２３０は、いずれかのボリューム２４２，２４３に対して、ホストコマンド３３に示されたデータアクセス処理を実行する。
【００５５】
図４の例では各ストレージ装置１００，２００は、通信ポート（ＣＡＲＡポート１５１，２５１、ＣＡポート１５２，２５２）ごとに、コマンドの種別にかかわらず最大で計１０２４個のコマンドを同時に処理できるものとする。
【００５６】
例えばＣＭ１３０は、ＣＡＲＡポート１５１から入力された実行中のコマンドの数（コマンド実行数）を、最大で１０２４に制限する。なお、ＣＡＲＡポート１５１はコピーコマンド３２の送信にも使用されるが、送信することができるコマンド数については管理せず、受信コマンド数に影響するものではない。
【００５７】
ＣＭ２３０は、ＣＡＲＡポート２５１から入力された実行中のコマンドの数を、最大で１０２４に制限する。またＣＭ２３０は、ＣＡＲＡポート２５１から入力された実行中のコマンド数が所定の閾値以上となった場合、ホストコマンドの実行を抑止する。例えばＣＭ２３０は、コマンド数が７６８以上となると、ホストコマンドの実行を抑止する。なおＣＭ２３０は、コマンド実行数が１０２４に達していなければ、コマンド実行数が７６８以上であっても、コピーコマンドは実行する。
【００５８】
図５は、第２の実施の形態におけるＲＡ先のストレージ装置でのコマンド制限の実施状況を示す図である。ＲＡ元のストレージ装置１００のＲＡセッションが組まれたボリューム１４３にデータの書き込みが行われるごとに、ストレージ装置１００からＲＡ先のストレージ装置２００へコピーコマンドが送信される。またホストコンピュータ２２からストレージ装置２００へは、ストレージ装置２００内のボリューム２４２，２４３へのデータアクセスを指示するホストコマンドが送信される。
【００５９】
ストレージ装置２００では、ＣＡＲＡポート２５１を介して入力されたコマンドのうち、現在実行中のコマンドの数（コマンド実行数）がカウントされている。ホストコマンドのコマンド制限値が「７６８」の場合、コマンド実行数が「７６８」未満の期間は、ストレージ装置２００では、新たに入力されたコマンドがコピーコマンドであってもホストコマンドであっても、そのコマンドに応じたデータアクセスが実行される。ストレージ装置２００は、コマンドに応じて実行したデータアクセスが正常に完了すると、コマンドの送信元に対して正常応答を送信する。
【００６０】
ストレージ装置２００に対して、コピーコマンドとホストコマンドとが短期間に大量に入力されると、コマンド実行数が「７６８」以上になる場合がある。コマンド実行数が「７６８」以上になると、ストレージ装置２００は、ストレージ装置１００から入力されたコピーコマンドについては、そのコピーコマンドに応じたデータアクセスを実行する。他方、ストレージ装置２００は、ホストコンピュータ２２から入力されたホストコマンドについては、そのホストコマンドに応じたデータアクセスを実行せずに、ＱＦＵＬＬ応答をホストコンピュータ２２に送信する。ＱＦＵＬＬ応答は、コマンドの送信元に対して、コマンド実行数過多による実行不能を通知するメッセージである。ＱＦＵＬＬ応答を受信したホストコンピュータ２２は、例えば、所定時間経過後にホストコマンドを再送信することができる。このようにして、ホストコマンドの実行が抑止される。
【００６１】
その後、ストレージ装置２００に対して、コピーコマンドが短期間に大量に入力されると、コマンド実行数が「１０２４」に達する場合がある。コマンド実行数が「１０２４」に達すると、ストレージ装置２００は、コマンドの種別に関係なく、新たに入力されたコマンドに応じたデータアクセスを実行せずに、ＱＦＵＬＬ応答をそのコマンドの送信元に送信する。すなわちストレージ装置２００は、ストレージ装置１００から入力されたコピーコマンドについても、そのコピーコマンドに応じたデータアクセスを実行せずに、ＱＦＵＬＬ応答をストレージ装置１００に送信する。ＱＦＵＬＬ応答を受信したストレージ装置１００は、例えば、所定時間経過後にコピーコマンドを再送信することができる。このようにして、すべてのコマンドの実行が抑止される。
【００６２】
ストレージ装置２００において実行中のデータアクセスが完了するごとに、コマンド実行数はデクリメントされる。コマンド実行数が１０２４以下となれば、ストレージ装置２００は、以後コピーコマンドが入力されると、そのコピーコマンドに応じたデータアクセスを実行する。またコマンド実行数が７６８以下となれば、ストレージ装置２００は、以後ホストコマンドが入力されると、そのホストコマンドに応じたデータアクセスを実行する。
【００６３】
図５に示すように、ストレージ装置２００では、入力されたコマンドがコピーコマンドかホストコマンドかにより、そのコマンドに応じたデータアクセスの実行の有無が異なる。そのため、ストレージ装置２００では、コマンドが入力されると、入力されたコマンドがコピーコマンドかホストコマンドかを判別する。コマンド種別の判別は、コマンドに含まれるオペレーションコードの内容に基づいて行うことができる。
【００６４】
図６は、コマンドのデータフォーマットの一例を示す図である。例えば、ストレージ装置１００，２００は、ＳＣＳＩ（Small Computer System Interface）の規約に沿ったＣＤＢ（Command Descriptor Block）と呼ばれるコマンドを受信する。ＣＤＢのコマンドには、６バイト・１０バイト・１２バイト・１６バイトのコマンドが存在する。
【００６５】
コマンド４０の先頭には、１バイトのオペレーションコード４１が設定されている。オペレーションコード４１には、コマンドのサイズや種別を識別するコードが設定される。一般的なコードとしては、リード要求なのかライト要求なのかを示すコードや、コマンドのサイズを識別するコードが設定される。例えばコード「０８」は、６バイトのリード要求であることを示している。コード「０Ａ」は、６バイトのライト要求であることを示している。コード「２８」は、１０バイトのリード要求であることを示している。コード「２Ａ」は、１０バイトのライト要求であることを示している。コード「Ａ８」は、１２バイトのリード要求であることを示している。コード「ＡＡ」は、１２バイトのライト要求であることを示している。コード「８８」は、１６バイトのリード要求であることを示している。コード「８Ａ」は、１６バイトのライト要求であることを示している。ホストコンピュータ２１，２２は、データのリードまたはデータのライトを要求するホストコマンドを送信する際に、オペレーションコード４１として一般的なコードのいずれかを設定する。
【００６６】
「Ｄ０」以降のオペレーションコード４１は、ベンダーユニークに使用可能なコードである。そこで第２の実施の形態では、例えばコード「Ｄ９」を、コピーコマンドであることの指定に用いる。またコード「ＤＤ」を、経路監視コマンドであることの指定に用いる。なお、経路監視コマンドの場合、例えば１０バイト目〜１３バイト目に、付加情報４２が格納される。付加情報４２は、例えばコマンドの実行状況やコマンド制限値などである。
【００６７】
ストレージ装置１００は、送信するコピーコマンドのオペレーションコード４１に「Ｄ９」を設定し、他の領域にコピーするデータを設定する。またホストコンピュータ２１，２２は、送信するホストコマンドのオペレーションコード４１に、「０８」、「０Ａ」などのリード要求またはライド要求を示す値を設定する。
【００６８】
また、ＣＭ２３０は、入力されたコマンドのコマンド制限値と、現在実行中のコマンドの数（コマンド実行数）とを、例えばコマンド管理テーブルを用いて管理する。
図７は、コマンド管理テーブルの一例を示す図である。コマンド管理テーブル５０には、コマンド制限値とコマンド実行数とが設定されている。なおコマンド管理テーブル５０は、例えばＣＭ２３０のメモリ２３２内に格納されている。
【００６９】
コマンド制限値は、入力されたコマンドを実行するか否かの判断基準となるコマンド実行数の閾値である。コマンド実行数がコマンド制限値に達している場合、入力されたコマンドの実行が抑止される。コマンド制限値は、ＣＭ２３０がコマンドを受信するごとに、受信したコマンドの種別に応じた値が設定される。例えばコピーコマンドを受信した場合、ＣＭ２３０は、コマンド制限値として「１０２４」を設定する。またホストコマンドを受信した場合、ＣＭ２３０は、コマンド制限値として「７６８」を設定する。
【００７０】
コマンド実行数は、実行中のコマンドの数である。実行中のコマンドとは、ストレージ装置２００に入力されているが、送信元に応答を返していないコマンドである。コマンド実行数は、ＣＭ２３０がコマンドを受信したときに１だけインクリメントされ、ＣＭ２３０が応答を送信したときに１だけデクリメントされる。
【００７１】
次に、ストレージ装置２００のＣＭ２３０におけるコマンド実行処理の手順について説明する。
図８は、第２の実施の形態のコマンド実行処理の手順を示すフローチャートである。以下、図８に示す処理をステップ番号に沿って説明する。
【００７２】
［ステップＳ１０１］ＣＭ２３０は、コマンドを受信する。
［ステップＳ１０２］ＣＭ２３０は、コマンド管理テーブル５０のコマンド実行数の値を１だけインクリメントする。
【００７３】
［ステップＳ１０３］ＣＭ２３０は、受信したコマンドの種別がホストコマンドかコピーコマンドかを判断する。例えばＣＭ２３０は、受信したコマンドのオペレーションコードを参照し、オペレーションコードが「０８」、「０Ａ」、「２８」、「２Ａ」、「Ａ８」、「ＡＡ」、「８８」、「８Ａ」のいずれかの値であれば、ホストコマンドであると判断する。またＣＭ２３０は、受信したコマンドのオペレーションコードが、「Ｄ９」であればコピーコマンドであると判断する。受信したコマンドがコピーコマンドであれば、ＣＭ２３０は処理をステップＳ１０４に進める。また受信したコマンドがホストコマンドであれば、ＣＭ２３０は処理をステップＳ１１１に進める。
【００７４】
［ステップＳ１０４］ＣＭ２３０は、コピーコマンドを受信した場合、コマンド管理テーブル５０のコマンド制限値に「１０２４」を設定する。
［ステップＳ１０５］ＣＭ２３０は、コマンド管理テーブル５０を参照し、コマンド実行数がコマンド制限値以下か否かを判断する。ＣＭ２３０は、コマンド実行数がコマンド制限値以下であれば、処理をステップＳ１０８に進める。またＣＭ２３０は、コマンド実行数がコマンド制限値を超えていれば、処理をステップＳ１０６に進める。
【００７５】
［ステップＳ１０６］ＣＭ２３０は、コマンド実行数がコマンド制限値を超えた場合、コマンド実行数を１だけデクリメントする。
［ステップＳ１０７］ＣＭ２３０は、ＱＦＵＬＬ応答をストレージ装置１００に送信する。その後、コマンド実行処理が終了する。
【００７６】
［ステップＳ１０８］コマンド実行数がコマンド制限値以下であれば、ＣＭ２３０はコピーコマンドに応じた処理を実行する。例えばＣＭ２３０は、コピーコマンドに含まれるデータを、ボリューム２４１に書き込む。
【００７７】
［ステップＳ１０９］ＣＭ２３０は、コマンド実行数を１だけデクリメントする。
［ステップＳ１１０］ＣＭ２３０は、ストレージ装置１００へ、コピーコマンドに応じたデータ書き込みが正常に完了したことを示す正常応答を送信する。その後、コマンド実行処理が終了する。
【００７８】
［ステップＳ１１１］ＣＭ２３０は、ホストコマンドを受信した場合、コマンド管理テーブル５０のコマンド制限値に「７６８」を設定する。
［ステップＳ１１２］ＣＭ２３０は、コマンド管理テーブル５０を参照し、コマンド実行数がコマンド制限値以下か否かを判断する。ＣＭ２３０は、コマンド実行数がコマンド制限値以下であれば、処理をステップＳ１１５に進める。またＣＭ２３０は、コマンド実行するがコマンド制限値を超えていれば、処理をステップＳ１１３に進める。
【００７９】
［ステップＳ１１３］ＣＭ２３０は、コマンド実行数がコマンド制限値を超えた場合、コマンド実行数を１だけデクリメントする。
［ステップＳ１１４］ＣＭ２３０は、ＱＦＵＬＬ応答をホストコンピュータ２２に送信する。その後、コマンド実行処理が終了する。
【００８０】
［ステップＳ１１５］コマンド実行数がコマンド制限値以下であれば、ＣＭ２３０はホストコマンドに応じた処理を実行する。例えばＣＭ２３０は、ホストコマンドがリード要求であれば、ホストコマンドで指定されたデータをボリューム２４２またはボリューム２４３から読み出す。またＣＭ２３０は、ホストコマンドがライト要求であれば、ホストコマンドで指定されたデータをボリューム２４２またはボリューム２４３に書き込む。
【００８１】
［ステップＳ１１６］ＣＭ２３０は、コマンド実行数を１だけデクリメントする。
［ステップＳ１１７］ＣＭ２３０は、ホストコンピュータ２２へ、ホストコマンドに応じたデータアクセスが正常に完了したことを示す正常応答を送信する。なお、ホストコマンドがリード要求の場合、正常応答には、読み出したデータが含まれる。その後、コマンド実行処理が終了する。
【００８２】
このように、第２の実施の形態では、ＲＡ先となるストレージ装置２００において、コピーコマンドでは１ポート当たりのコマンド制限値を１０２４に制限としているところ、ホストコマンドの場合、コマンド制限値を７６８にしている。そうすることで、ホストコマンドによる負荷が高い場合にも、最低２５６個はコピーコマンドの処理に割当てられるため、ストレージ装置１００，２００間のコピー処理が停止するという事態が抑止される。すなわち、コピー処理の処理効率の低下が抑止される。なおホストコマンド数が７６８に満たない場合には、コピーコマンドを２５６個以上実行することも可能である。
【００８３】
〔第３の実施の形態〕
第３の実施の形態は、ホストコマンドとコピーコマンドの動的な流量制御を行うものである。なお、第３の実施の形態におけるシステム構成は、図２、図３に示した第２の実施の形態の構成と同様である。また、第３の実施の形態におけるストレージ装置２００のＣＭ２３０のメモリ２３２には、図７と同様のコマンド管理テーブル５０が格納されている。
【００８４】
上記第２の実施の形態では、単位時間当たりに受信するコピーコマンドの数が少ない場合、ホストコマンドが大量に発生してもコマンド実行数の総数が１０２４未満となる。そのため、ホストコマンドのコマンド制限値をコピーコマンドと同じ値にした場合（例えば１０２４）に比べ、コピーコマンドが少ない場合の１ポート当たりの性能が低下する。例えばホストコマンドのコマンド制限値が７６８の場合、コピーコマンドの実行数が２５６未満のとき、全体で１０２４のコマンドを実行できる性能を有しているにも関わらず、１０２４個のコマンドを実行することができない。
【００８５】
そこで第３の実施の形態では、即座にコピーコマンドが発行されることのない場合には、ホストコマンドの制限値を７６８個とせずに、１０２４個とする。即座にコピーコマンドが発行されることのない場合とは、コピーコマンドの送信のために事前に行う処理がまだ行われていない場合である。例えば、コピーコマンドの送信には、ストレージ装置間のコピーを行うＲＡセッションを設定するといった、コピーコマンドの通信経路の設定が事前に行われる。このようなＲＡセッションの設定などの通信経路の設定が行われていない場合、即座にコピーコマンドが発行されることはないと判断できる。
【００８６】
図９は、第３の実施の形態におけるコマンドの流量制御状況の一例を示す図である。図９では、上段にＲＡセッションが設定されていないときのコマンド流量制御状況を示しており、下段にＲＡセッションが設定されているときのコマンド流量制御状況を示している。
【００８７】
ＲＡセッションが設定されていない場合、各ストレージ装置１００，２００は、ＣＡＲＡポート１５１，２５１を介して入力されるすべての種別のコマンドに対するコマンド制限値として１０２４を適用する。
【００８８】
ＲＡセッションが設定されている場合、ストレージ装置２００は、ホストコマンドのコマンド制限値のみ７６８とする。ホストコマンド以外のコマンドのコマンド制限値は１０２４である。
【００８９】
ＲＡセッションが設定されているか否かは、例えばセッション管理テーブルで管理されている。
図１０は、第３の実施の形態におけるセッション管理テーブルの一例を示す図である。セッション管理テーブル６０には、ＲＡ元ボリューム番号、ＲＡ先ボリューム番号、およびセッション種別の欄が設けられている。
【００９０】
ＲＡ元ボリューム番号の欄には、コピーのＲＡ元となるボリュームの、そのボリュームが属するストレージ装置内での識別番号（ボリューム番号）が設定される。
ＲＡ先ボリューム番号の欄には、コピーのＲＡ先となるボリュームの、そのボリュームが属するストレージ装置内での識別番号（ボリューム番号）が設定される。
【００９１】
セッション種別の欄には、セッションの種別が設定されている。異なるストレージ装置それぞれのボリューム間でのデータコピー（リモートコピー）に用いるセッションの場合、セッション種別の欄に「リモートコピーセッション」と設定される。同じストレージ装置内の異なるボリューム間でのデータコピー（ローカルコピー）に用いるセッションの場合、セッション種別の欄に「ローカルコピーセッション」と設定される。なおリモートコピーセッションの場合、コピー相手となる装置の識別子（装置ＩＤ）が設定される。
【００９２】
図１０に示したようなセッション管理テーブルは、例えばストレージ装置２００のＣＭ２３０内のメモリ２３２に格納されている。
次に、ストレージ装置２００におけるコマンド実行処理について説明する。
【００９３】
図１１は、第３の実施の形態のコマンド実行処理の手順を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。図１１に示すステップのうち、ステップＳ２０１〜Ｓ２１０，Ｓ２１４〜Ｓ２１９の各処理は、それぞれ図８に示した第２の実施の形態のステップＳ１０１〜Ｓ１１０，Ｓ１１２〜Ｓ１１７の処理と同様である。そこで、第２の実施の形態と異なる処理であるステップＳ２１１〜Ｓ２１３について説明する。
【００９４】
［ステップＳ２１１］ストレージ装置２００のＣＭ２３０は、受信したコマンドがホストコマンドの場合、ＲＡセッションの有無を判断する。例えばＣＭ２３０は、セッション管理テーブル６０を参照し、ＲＡセッションが少なくとも１つ設定されている場合、ＲＡセッションがあると判断する。ＣＭ２３０は、ＲＡセッションがある場合、処理をステップＳ２１２に進める。またＣＭ２３０は、ＲＡセッションがない場合、処理をステップＳ２１３に進める。
【００９５】
［ステップＳ２１２］ＣＭ２３０は、ＲＡセッションが設定されている場合、ホストコマンドのコマンド制限値を７６８に設定する。その後、ＣＭ２３０は処理をステップＳ２１４に進める。
【００９６】
［ステップＳ２１３］ＣＭ２３０は、ＲＡセッションが設定されていない場合、ホストコマンドのコマンド制限値を１０２４に設定する。
その後、ステップＳ２１４の処理により、コマンド実行数が設定されたコマンド制限値以下か否かに応じて、受信したホストコマンドの実行の有無が判断される。その結果、ＲＡセッションがない場合には、ホストコマンドに対しても、コピーコマンドと同様のコマンド制限値が適用される。
【００９７】
このようにコマンドの流量制御を行うことで、コピーコマンドを受信する状況にない場合には、ホストコマンドであっても、コマンド制限値として１０２４が適用され、処理効率を向上させることができる。
【００９８】
〔第４の実施の形態〕
次に第４の実施の形態について説明する。第４の実施の形態は、コピーコマンドとホストコマンドの比率を考慮した動的な流量制御を行うものである。なお、第４の実施の形態におけるシステム構成は、図２、図３に示した第２の実施の形態の構成と同様である。
【００９９】
第２・第３の実施の形態では、ＲＡ先側のストレージ装置２００に対するホストコマンド数が過大となった場合におけるコピーコマンドの処理効率低下を抑止したものであるが、コピーコマンド数が過大となる場合について考慮されていない。そのためＲＡ先のストレージ装置２００において、コピーコマンドでコマンド制限値１０２４を使いきり、ホストコマンドを１つも実行できない状況に陥る可能性もある。
【０１００】
そこで、第４の実施の形態では、ストレージ装置２００が受信したコピーコマンド数とホストコマンド数との比に基づいて、コピーコマンドとホストコマンドとのそれぞれのコマンド制限値を設定する。これにより、コピーコマンドが多くなった場合におけるコピーコマンドとホストコマンドとの処理効率の偏りの増加が抑止される。
【０１０１】
図１２は、第４の実施の形態におけるコマンドの流量制御状況の一例を示す図である。第４の実施の形態では、ＲＡ先のストレージ装置２００において、ある一定時間（例えば１０秒間）のＲＡ先ホストコマンド累積数ｔｃとＲＡ先コピーコマンド累積数ｔｒとをカウントする。なお、ＲＡ先ホストコマンド累積数ｔｃは、一定期間内にストレージ装置２００が受信したホストコマンドの数であり、実行されずにＱＦＵＬＬ応答が返されたホストコマンドも含まれる。同様にＲＡ先コピーコマンド累積数ｔｒは、一定期間内にストレージ装置２００が受信したコピーコマンドの数であり、実行されずにＱＦＵＬＬ応答が返されたコピーコマンドも含まれる。
【０１０２】
なおＲＡ元側のストレージ装置１００では、ＣＡＲＡポート１５１から受信したコマンドのコマンド制限値が１０２４に設定されているものとする。ホストコンピュータ２１からＣＡＲＡポート１５１に入力されたホストコマンド３１がボリューム１４３への書き込みであった場合、そのホストコマンド３１に応じたデータコピーが発生する。この際、ホストコマンド３１に対する応答は、対応するコピーコマンド３２へのストレージ装置２００からの応答をストレージ装置１００が受信した後に出力される。そのため、入力されたホストコマンド３１は、データコピー処理が完了するまで、コマンド実行中の状態となる。
【０１０３】
ストレージ装置２００のＣＭ２３０は、ＲＡ先ホストコマンド累積数ｔｃとＲＡ先コピーコマンド累積数ｔｒとの比率に応じて、ＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとの比率を決定する。計算式は以下の通りである。
ｔｃｓ＝（ｔｃ／（ｔｃ＋ｔｒ））×１０２４    ・・・（１）
ｔｒｓ＝１０２４−ｔｃｓ                      ・・・（２）
例えば、ＲＡ先ホストコマンド累積数ｔｃが「2000」、ＲＡ先コピーコマンド累積数ｔｒが「1024」の場合を考える。この場合、ＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとは、以下のような値となる。
ｔｃｓ＝６７７
ｔｒｓ＝３４７
このように制御することで、コピーコマンドを多数受信した場合にも、ホストコマンドと平等に処理することが可能となる。コピーコマンドとホストコマンドの比率を考慮した動的な流量制御に用いられる情報は、コマンド管理テーブルに設定される。
【０１０４】
図１３は、第４の実施の形態のコマンド管理テーブルの一例を示す図である。コマンド管理テーブル５１には、ホストコマンド実行数、ＲＡ先ホストコマンド累積数ｔｃ、ＲＡ先ホストコマンド制限値ｔｃｓ、コピーコマンド実行数、ＲＡ先コピーコマンド累積数ｔｒ、およびＲＡ先コピーコマンド制限値ｔｒｓが設定されている。なおコマンド管理テーブル５１は、例えばＣＭ２３０のメモリ２３２内に格納されている。
【０１０５】
ホストコマンド実行数は、実行中のホストコマンドの数である。ＲＡ先ホストコマンド累積数ｔｃは、一定時間内に受信したホストコマンドの数である。ＲＡ先ホストコマンド制限値ｔｃｓは、ストレージ装置２００におけるホストコマンドの実行数の上限を示す値である。ホストコマンド実行数がＲＡ先ホストコマンド制限値ｔｃｓに達している場合、入力されたホストコマンドの実行が抑止される。
【０１０６】
コピーコマンド実行数は、実行中のコピーコマンドの数である。ＲＡ先コピーコマンド累積数ｔｒは、一定時間内に受信したコピーコマンドの数である。ＲＡ先コピーコマンド制限値ｔｒｓは、ストレージ装置２００におけるコピーコマンドの実行数の上限を示す値である。コピーコマンド実行数がＲＡ先コピーコマンド制限値ｔｒｓに達している場合、入力されたコピーコマンドの実行が抑止される。
【０１０７】
図１３に示したコマンド管理テーブル５１のＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとは、例えば１０秒間隔で更新される。以下、コマンド管理テーブル５１の更新処理について説明する。
【０１０８】
図１４は、第４の実施の形態のコマンド管理テーブル更新処理の手順を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。
［ステップＳ３０１］ＣＭ２３０は、タイマをリセットし、時間計測（タイマカウント）を開始する。
【０１０９】
［ステップＳ３０２］ＣＭ２３０は、タイマが１０秒経過したか否かを判断する。１０秒経過していなければ、ＣＭ２３０は処理をステップＳ３０１に進める。１０秒経過していれば、ＣＭ２３０は処理をステップＳ３０３に進める。
【０１１０】
［ステップＳ３０３］ＣＭ２３０は、ＲＡ先ホストコマンド制限値ｔｃｓを更新する。例えばＣＭ２３０は、コマンド管理テーブル５１を参照し、ＲＡ先ホストコマンド累積数ｔｃとＲＡ先コピーコマンド累積数ｔｒとを取得する。次にＣＭ２３０は、式（１）に基づいてＲＡ先ホストコマンド制限値ｔｃｓを計算する。そしてＣＭ２３０は、計算したＲＡ先ホストコマンド制限値ｔｃｓで、コマンド管理テーブル５１に格納されているＲＡ先ホストコマンド制限値ｔｃｓの値を更新する。
【０１１１】
［ステップＳ３０４］ＣＭ２３０は、ＲＡ先コピーコマンド制限値ｔｒｓを更新する。例えばＣＭ２３０は、コマンド管理テーブル５１を参照し、ＲＡ先ホストコマンド制限値ｔｃｓを取得する。次にＣＭ２３０は、式（２）に基づいてＲＡ先コピーコマンド制限値ｔｒｓを計算する。そしてＣＭ２３０は、計算したＲＡ先コピーコマンド制限値ｔｒｓで、コマンド管理テーブル５１に格納されているＲＡ先コピーコマンド制限値ｔｒｓの値を更新する。
【０１１２】
［ステップＳ３０５］ＣＭ２３０は、コマンド管理テーブル５１のＲＡ先ホストコマンド累積数ｔｃとＲＡ先コピーコマンド累積数ｔｒとを０に初期化する。その後、ＣＭ２３０は処理をステップＳ３０１に進める。
【０１１３】
このようにして、直前の１０秒間におけるＲＡ先ホストコマンド累積数ｔｃとＲＡ先コピーコマンド累積数ｔｒとに基づくＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとの更新が、１０秒間隔で繰り返し実行される。
【０１１４】
次に、第４の実施の形態のストレージ装置２００におけるコマンド実行処理について説明する。
図１５は、第４の実施の形態のコマンド実行処理の手順の一例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１１５】
［ステップＳ３１１］ＣＭ２３０は、コマンドを受信する。
［ステップＳ３１２］ＣＭ２３０は、受信したコマンドの種別がホストコマンドかコピーコマンドかを判断する。コマンドの種別は、例えば受信したコマンドのオペレーションコードに基づいて判断できる。受信したコマンドがコピーコマンドであれば、ＣＭ２３０は処理をステップＳ３１３に進める。また受信したコマンドがホストコマンドであれば、ＣＭ２３０は処理をステップＳ３２０に進める。
【０１１６】
［ステップＳ３１３］ＣＭ２３０は、コピーコマンドを受信した場合、コマンド管理テーブル５１のコピーコマンド実行数の値を１だけインクリメントする。またＣＭ２３０は、ＲＡ先コピーコマンド累積数ｔｒの値を１だけインクリメントする。
【０１１７】
［ステップＳ３１４］ＣＭ２３０は、コマンド管理テーブル５１を参照し、コピーコマンド実行数がＲＡ先コピーコマンド制限値ｔｒｓ以下か否かを判断する。コピーコマンド実行数がＲＡ先コピーコマンド制限値ｔｒｓ以下であれば、ＣＭ２３０は処理をステップＳ３１７に進める。またコピーコマンド実行数がＲＡ先コピーコマンド制限値ｔｒｓを超えていれば、ＣＭ２３０は処理をステップＳ３１５に進める。
【０１１８】
［ステップＳ３１５］ＣＭ２３０は、コピーコマンド実行数がＲＡ先コピーコマンド制限値ｔｒｓを超えた場合、コピーコマンド実行数を１だけデクリメントする。
［ステップＳ３１６］ＣＭ２３０は、ＱＦＵＬＬ応答をストレージ装置１００に送信する。その後、コマンド実行処理が終了する。
【０１１９】
［ステップＳ３１７］コマンド実行数がコマンド制限値以下であれば、ＣＭ２３０はコピーコマンドに応じた処理を実行する。
［ステップＳ３１８］ＣＭ２３０は、コピーコマンド実行数を１だけデクリメントする。
【０１２０】
［ステップＳ３１９］ＣＭ２３０は、ストレージ装置１００へ、コピーコマンドに応じたデータ書き込みが正常に完了したことを示す正常応答を送信する。その後、コマンド実行処理が終了する。
【０１２１】
［ステップＳ３２０］ＣＭ２３０は、ホストコマンドを受信した場合、コマンド管理テーブル５１のホストコマンド実行数の値を１だけインクリメントする。またＣＭ２３０は、ＲＡ先ホストコマンド累積数ｔｃの値を１だけインクリメントする。
【０１２２】
［ステップＳ３２１］ＣＭ２３０は、コマンド管理テーブル５１を参照し、ホストコマンド実行数がＲＡ先ホストコマンド制限値ｔｃｓ以下か否かを判断する。ホストコマンド実行数がＲＡ先ホストコマンド制限値ｔｃｓ以下であれば、ＣＭ２３０は処理をステップＳ３２４に進める。またホストコマンド実行数がＲＡ先ホストコマンド制限値ｔｃｓを超えていれば、ＣＭ２３０は処理をステップＳ３２２に進める。
【０１２３】
［ステップＳ３２２］ＣＭ２３０は、ホストコマンド実行数がＲＡ先ホストコマンド制限値ｔｃｓを超えた場合、ホストコマンド実行数を１だけデクリメントする。
［ステップＳ３２３］ＣＭ２３０は、ＱＦＵＬＬ応答をホストコンピュータ２２に送信する。その後、コマンド実行処理が終了する。
【０１２４】
［ステップＳ３２４］コマンド実行数がコマンド制限値以下であれば、ＣＭ２３０はホストコマンドに応じた処理を実行する。
［ステップＳ３２５］ＣＭ２３０は、ホストコマンド実行数を１だけデクリメントする。
【０１２５】
［ステップＳ３２６］ＣＭ２３０は、ホストコンピュータ２２へ、ホストコマンドに応じたデータアクセスが正常に完了したことを示す正常応答を送信する。その後、コマンド実行処理が終了する。
【０１２６】
このように制御することで、コピーコマンドを多数受信した場合にも、コピーコマンドとホストコマンドとを平等に処理することが可能となる。
〔第５の実施の形態〕
次に第５の実施の形態について説明する。第５の実施の形態は、ＲＡ元側のコマンド累積数も考慮に入れて、動的な流量制御を行うものである。なお、第５の実施の形態におけるシステム構成は、図２、図３に示した第２の実施の形態の構成と同様である。
【０１２７】
第４の実施の形態では、ＲＡ先側のストレージ装置２００におけるＲＡ先コピーコマンド制限値ｔｒｓとＲＡ先ホストコマンド制限値ｔｃｓとの算出に際し、ＲＡ元のコマンド累積数が考慮されていない。ストレージ装置２００におけるＲＡ先コピーコマンド制限値ｔｒｓとＲＡ先ホストコマンド制限値ｔｃｓとの算出に際して考慮されていたＲＡ先コピーコマンド累積数ｔｒは、ＲＡ元のＣＡＲＡポート１５１において１０２４に制限された後の値である。これに対して、ストレージ装置２００に入力されたホストコマンドに関するＲＡ先ホストコマンド累積数ｔｃには、ＱＦＵＬＬ応答が返されたホストコマンドも含まれており、コマンド制限の影響を受けていない。そのため、ストレージ装置１００に入力されたホストコマンド数が１０２４以上となり、ＲＡ先コピーコマンド累積数ｔｒが制限後の状況下で計数された場合で、かつストレージ装置２００に入力されるホストコマンドが１０２４以上の場合に、公平な実行とはならない。すなわち、ストレージ装置２００において、コピーコマンドよりもホストコマンドの方が優先して実行されてしまう。この問題を解決するために、第５の実施の形態では、ＲＡ先側のストレージ装置２００におけるＲＡ先コピーコマンド制限値ｔｒｓとＲＡ先ホストコマンド制限値ｔｃｓの算出に、ＲＡ元のホストコマンド累積数を用いるようにする。
【０１２８】
図１６は、第５の実施の形態におけるコマンド流量制御状況の一例を示す図である。第５の実施の形態では、ＲＡ元のストレージ装置１００において、ＲＡコマンド数を示す情報を、ＲＡ先のストレージ装置２００へ通知する。
【０１２９】
例えばストレージ装置１００のＣＭ１３０は、一定時間（例えば１０秒）ごとに、ストレージ装置１００に入力されたホストコマンドの数（ＲＡ元ホストコマンド累積数：ｉｃ）をカウントする。
【０１３０】
またＣＭ１３０は、ボリューム１４１〜１４３へのアクセスが実行されたホストコマンド３１のアクセス先を判別する。そしてＣＭ１３０は、アクセス先が、ＲＡセッションが組まれていないボリューム１４１，１４２であれば、実行されたホストコマンド３１はＣＡコマンド３４であると判断する。またＣＭ１３０は、アクセス先が、ＲＡセッションが組まれたボリューム１４３であれば、実行されたホストコマンド３１はＲＡコマンド３５であると判断する。そしてＣＭ１３０は、一定時間（例えば１０秒）内に実行されたホストコマンド３１の総数のうち、ＲＡコマンド３５の割合（ＲＡコマンド率：ｐ）を計算する。
【０１３１】
なおＲＡコマンド３５が実行された場合、ＲＡコマンドがデータの書き込みを要求するライトコマンドであれば、ＣＭ１３０によりボリューム１４３にデータが書き込まれる。そして、ＣＭ１３０がコピーコマンド３２を発行する。発行されたコピーコマンド３２は、スイッチ１１，１２などを経由して、ストレージ装置２００に送信される。
【０１３２】
そしてＣＭ１３０は、ＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとを含む経路監視コマンド３６を、ストレージ装置２００に送信する。例えばＣＭ１３０は、一定時間（例えば１０秒）ごとに、付加情報４２（図６参照）を追加した経路監視コマンド３６を送信する。付加情報４２には、ＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとが含められる。
【０１３３】
ＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとを含む経路監視コマンド３６により、ＲＡ先のストレージ装置２００において、ＲＡ元のコマンドの入力状況を知ることができる。
【０１３４】
ＲＡ先のストレージ装置２００では、ＣＭ２３０が、ＣＡＲＡポート２５１に入力されたコマンドに基づいて、ＲＡ先ホストコマンド累積数ｔｃをカウントする。そしてＣＭ２３０は、ＲＡ先ホストコマンド累積数ｔｃと、経路監視コマンド３６に示された情報とに基づいて、ＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。計算式は以下の通りである。
ｉｃ×ｐ：ｔｃ＝ｔｒｓ：ｔｃｓ                        ・・・（３）
ｔｃｓ＋ｔｒｓ＝１０２４                              ・・・（４）
この２式から、以下の結果が得られる。
ｔｃｓ＝（ｔｃ／（ｔｃ＋ｉｃ×ｐ））×１０２４        ・・・（５）
ｔｒｓ＝１０２４−ｔｃｓ
＝（ｉｃ×ｐ／（ｔｃ＋ｉｃ×ｐ））×１０２４    ・・・（６）
さらに、それらの情報を使用することで、ＲＡ元のストレージ装置１００におけるＲＡ元ホストコマンド制限値ｉｃｓも、ＲＡ先のストレージ装置２００の状況に応じた値とすることができる。例えば以下の計算式でストレージ装置１００におけるＲＡ元ホストコマンド制限値ｉｃｓを算出できる。
ｉｃｓ＝ｔｒｓ／ｐ                                    ・・・（７）
例えばストレージ装置２００がＲＡ元ホストコマンド制限値ｉｃｓを計算し、計算したＲＡ元ホストコマンド制限値ｉｃｓを付加情報として含む経路監視コマンド３７を、ストレージ装置１００に送信する。経路監視コマンド３７を受信したストレージ装置１００は、経路監視コマンド３７で示されたＲＡ元ホストコマンド制限値ｉｃｓを、ＣＡＲＡポート１５１から入力されるホストコマンドの実行制限に適用する。
【０１３５】
このように、ＲＡ元のコマンド入力の状態を考慮することによって、ストレージ装置１００，２００それぞれに１０２４を超えるコマンドが入力された場合でも、ストレージ装置１００，２００それぞれにおいてホストコマンドが同等に処理される。
【０１３６】
以下に、第５の実施の形態における各ストレージ装置１００，２００でのホストコマンドの実行性能について、具体例を用いて説明する。
第１の例は、「ｉｃ×（１−ｐ）≦ｔｃ」の場合である。「ｉｃ×（１−ｐ）」は、一定時間内にＲＡ元のストレージ装置１００に入力されたＣＡコマンドの数（ＣＡコマンド累積数）を示している。すなわち「ｉｃ×（１−ｐ）≦ｔｃ」は、ストレージ装置１００に入力されたＣＡコマンド累積数が、ストレージ装置２００に入力されたＲＡ先ホストコマンド累積数ｔｃ以下の場合を示している。
【０１３７】
ここで、各測定値が以下の通りであるものとする。
ＲＡ元ホストコマンド累積数ｉｃ：３０００
ＲＡコマンド率ｐ：０．５
ＲＡ先ホストコマンド累積数ｔｃ：２０００
すると、ＲＡ先ホストコマンド制限値ｔｃｓ、ＲＡ先コピーコマンド制限値ｔｒｓ、およびＲＡ元ホストコマンド制限値ｉｃｓは以下の通りとなる。
ｔｃｓ＝（２０００／（２０００＋３０００×０．５））×１０２４＝５８５
ｔｒｓ＝１０２４−５８５＝４３９
ｉｃｓ＝４３９／０．５＝８７８
この場合、ホストコンピュータ２１から単位時間当たりに出力されるホストコマンドの数がほぼ一定であれば、ストレージ装置１００に対してＲＡ元ホストコマンド制限値ｉｃｓを超過して入力されるホストコマンドの数は、ｉｃ−ｉｃｓ＝２１２２となる。同様に、ホストコンピュータ２２から単位時間当たりに出力されるホストコマンドの数がほぼ一定であれば、ストレージ装置２００に対してＲＡ先ホストコマンド制限値ｔｃｓを超過して入力されるホストコマンドの数は、「ｔｃ−ｔｃｓ＝１４１５」となる。すると、ホストコマンドを送信した各ホストコンピュータ２１，２２にＱＦＵＬＬが応答される確率（ＱＦＵＬＬ率）は、以下の通りとなり、同等の性能となることがわかる。
２１２２／３０００＝０．７０７＝７０．７％
１４１５／２０００＝０．７０７＝７０．７％
第２の例は、「ｉｃ×（１−ｐ）＞ｔｃ」の場合である。「ｉｃ×（１−ｐ）＞ｔｃ」は、ストレージ装置１００に入力されたＣＡコマンドの数が、ストレージ装置２００に入力されたＲＡ先ホストコマンド累積数ｔｃよりも多い場合を示している。
【０１３８】
ここで、各測定値が以下の通りであるものとする。
ＲＡ元ホストコマンド累積数ｉｃ：２０００
ＲＡコマンド率：０．４
ＲＡ先ホストコマンド累積数ｔｃ：１０００
すると、ＲＡ先ホストコマンド制限値ｔｃｓ、ＲＡ先コピーコマンド制限値ｔｒｓ、およびＲＡ元ホストコマンド制限値ｉｃｓは以下の通りとなる。
ｔｃｓ＝（１０００／（１０００＋２０００×０．４））×１０２４＝５６８
ｔｒｓ＝１０２４−５６８＝４５６
ｉｃｓ＝４５６／０．４＝１１４０＞１０２４
このように、ｉｃｓが１０２４を超えてしまう。そのため、「ｉｃ×（１−ｐ）＞ｔｃ」の場合にはｉｃｓを１０２４に合わせるよう、以下の計算式を使用する。
ｉｃｓ＝１０２４                        ・・・（８）
ｔｒｓ＝ｉｃｓ×ｐ                      ・・・（９）
ｔｃｓ＝（ｔｃ／ｉｃ）×１０２４        ・・・（１０）
すると、ＲＡ先コピーコマンド制限値ｔｒｓとＲＡ先ホストコマンド制限値ｔｃｓとは、以下のような値に変更される。
ｔｒｓ＝１０２４×０．４＝４０９
ｔｃｓ＝１０００／２０００×１０２４＝５１２
この場合、ｉｃ−ｉｃｓ＝９７６、ｔｃ−ｔｃｓ＝４８８であり、ＱＦＵＬＬ率としては、それぞれ以下の通りとなり、同等の性能となる。
９７６／２０００＝０．４８８＝４８．８％
４８８／１０００＝０．４８８＝４８．８％
なお第５の実施の形態は、ＲＡ元のストレージ装置１００のＣＡＲＡポート１５１にホストコマンド３１が入力され、ＣＡＲＡポート１５１から出力されたコピーコマンド３２が、ストレージ装置２００のＣＡＲＡポート２５１で受信される。このようにＣＡＲＡポートを介して入出力されたコマンドが、各ストレージ装置へのコマンド状態の監視対象となる。
【０１３９】
ホストコマンド３１は、ＣＡＲＡポート１５１以外に、ＣＡポート１５２に入力される場合があり得る。ＣＡポート１５２に入力されたホストコマンドに関しては、第５の実施の形態における監視対象外となる。
【０１４０】
またコピーコマンド３２は、ストレージ装置１００のＣＡＲＡポート１５１から出力される場合以外に、ＲＡポートから出力される場合があり得る。ＲＡポートから出力されたコピーコマンドに関しては、第５の実施の形態における監視対象外となる。
【０１４１】
さらにＲＡ先のストレージ装置２００では、コピーコマンド３２をＣＡＲＡポート２５１で受信する場合以外に、ＲＡポートで受信する場合もあり得る。ＲＡポートで受信されたコピーコマンドに関しては、第５の実施の形態における監視対象外となる。
【０１４２】
このように、専用ポートを介して入出力されるコマンドに関しては、第５の実施の形態によるストレージ装置のコマンド入出力状況を判断する上での監視対象外となる。
次に、第５の実施の形態の機能を実現するためにＲＡ元とＲＡ先の各ストレージ装置１００，２００が有するコマンド管理テーブルについて説明する。
【０１４３】
図１７は、ＲＡ元コマンド管理テーブルの一例を示す図である。ストレージ装置１００は、ＲＡ元コマンド管理テーブル５２を有する。例えばＣＭ１３０のメモリ内にＲＡ元コマンド管理テーブル５２が格納される。
【０１４４】
ＲＡ元コマンド管理テーブル５２には、ホストコマンド実行数、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡ元ホストコマンド制限値ｉｃｓ、ＲＡコマンド数、およびＲＡコマンド率ｐが設定されている。
【０１４５】
ホストコマンド実行数は、ＲＡ元のストレージ装置１００で実行しているホストコマンドの数である。
ＲＡ元ホストコマンド累積数ｉｃは、一定時間内にＲＡ元のストレージ装置１００に入力されたホストコマンドの数である。
【０１４６】
ＲＡ元ホストコマンド制限値ｉｃｓは、ＲＡ元のストレージ装置１００におけるホストコマンド実行数の上限を示す値である。
ＲＡコマンド数は、一定時間内にＲＡ元のストレージ装置１００に入力されたホストコマンドのうち、ＲＡセッションが組まれたボリュームへのアクセス要求であるＲＡコマンドの数である。
【０１４７】
ＲＡコマンド率ｐは、一定時間内にＲＡ元のストレージ装置１００に入力されたホストコマンドのうちの、ＲＡコマンドの割合である。
図１８は、ＲＡ先コマンド管理テーブルの一例を示す図である。ストレージ装置２００は、ＲＡ先コマンド管理テーブル５３を有する。例えばＣＭ２３０のメモリ内にＲＡ先コマンド管理テーブル５３が格納される。ＲＡ先コマンド管理テーブル５３には、ホストコマンド実行数、ＲＡ先ホストコマンド累積数ｔｃ、ＲＡ先ホストコマンド制限値ｔｃｓ、コピーコマンド実行数、ＲＡ先コピーコマンド累積数ｔｒ、ＲＡ先コピーコマンド制限値ｔｒｓ、ＲＡ元ホストコマンド累積数ｉｃ、およびＲＡコマンド率ｐが設定されている。
【０１４８】
ホストコマンド実行数は、ストレージ装置２００で実行中のホストコマンドの数である。ＲＡ先ホストコマンド累積数ｔｃは、一定時間内にストレージ装置２００が受信したホストコマンドの数である。ＲＡ先ホストコマンド制限値ｔｃｓは、ストレージ装置２００におけるホストコマンドの実行数の上限を示す値である。
【０１４９】
コピーコマンド実行数は、ストレージ装置２００で実行中のコピーコマンドの数である。ＲＡ先コピーコマンド累積数ｔｒは、一定時間内にストレージ装置２００が受信したコピーコマンドの数である。ＲＡ先コピーコマンド制限値ｔｒｓは、ストレージ装置２００におけるコピーコマンドの実行数の上限を示す値である。コピーコマンド実行数がＲＡ先コピーコマンド制限値ｔｒｓに達している場合、入力されたコピーコマンドの実行が抑止される。
【０１５０】
ＲＡ元ホストコマンド累積数ｉｃは、一定時間内にＲＡ元のストレージ装置１００に入力されたホストコマンドの数である。ＲＡコマンド率ｐは、ストレージ装置１００に入力されたホストコマンドのうち、ＲＡコマンドの割合である。
【０１５１】
次に経路監視コマンドを用いたストレージ装置間の情報交換手順について説明する。
図１９は、ストレージ装置間の情報交換手順の一例を示すシーケンス図である。以下、図１９に示す処理をステップ番号に沿って説明する。
【０１５２】
［ステップＳ４０１］ＲＡ元のストレージ装置１００は、経路監視コマンドによって、ＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとをストレージ装置２００に通知する。例えばストレージ装置１００は、前回のＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとの通知から１０秒が経過すると、ステップＳ４０１の処理を実行する。
【０１５３】
［ステップＳ４０２］ストレージ装置２００は、取得したＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとにより、ＲＡ先コマンド管理テーブル５３内のＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとの値を更新する。
【０１５４】
［ステップＳ４０３］ストレージ装置２００は、ＲＡ先コマンド制限値決定処理を行う。例えばストレージ装置２００は、前回のＲＡ先コマンド制限値決定処理から１０秒が経過すると、ＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。
【０１５５】
［ステップＳ４０４］ストレージ装置２００は、更新されたＲＡ先コピーコマンド制限値ｔｒｓに基づいて、ＲＡ元ホストコマンド制限値ｉｃｓを決定する。
［ステップＳ４０５］ストレージ装置２００は、経路監視コマンドを用い、決定したＲＡ元ホストコマンド制限値ｉｃｓをストレージ装置１００に通知する。
【０１５６】
［ステップＳ４０６］ストレージ装置１００は、取得したＲＡ元ホストコマンド制限値ｉｃｓにより、ＲＡ元コマンド管理テーブル５２のＲＡ元ホストコマンド制限値ｉｃｓの値を更新する。
【０１５７】
以後、ステップＳ４０１〜Ｓ４０６と同様の処理（ステップＳ４０７〜Ｓ４１２）が、１０秒間隔で繰り返し実行される。
このように、２台のストレージ装置１００，２００が情報を交換することで、ある種のコマンドだけが突出して優先実行されることのないように、公平なコマンド実行が可能となる。
【０１５８】
次に、ＲＡ元のストレージ装置１００におけるコマンド実行状況通知処理（ステップＳ４０１の処理）について詳細に説明する。
図２０は、ＲＡ元におけるコマンド実行状況通知処理の手順の一例を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。
【０１５９】
［ステップＳ４２１］ストレージ装置１００のＣＭ１３０は、タイマをリセットし、時間計測（タイマカウント）を開始する。
［ステップＳ４２２］ＣＭ１３０は、タイマが１０秒経過したか否かを判断する。１０秒経過していなければ、ＣＭ１３０は処理をステップＳ４２１に進める。１０秒経過していれば、ＣＭ１３０は処理をステップＳ４２３に進める。
【０１６０】
［ステップＳ４２３］ＣＭ１３０は、ＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとを、ストレージ装置２００に通知する。例えばＣＭ１３０は、ＲＡ元コマンド管理テーブル５２から、ＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとを取得する。次にＣＭ１３０は、取得したＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐとをヘッダに含む制御パケットを生成する。そしてＣＭ１３０は、生成した制御パケットを、ＣＡＲＡポート１５１を介してストレージ装置２００宛に送信する。
【０１６１】
［ステップＳ４２４］ＣＭ１３０は、ＲＡ元コマンド管理テーブル５２のＲＡコマンド数、ＲＡコマンド率ｐ、およびＲＡ元ホストコマンド累積数ｉｃそれぞれの値を０に初期化する。その後、ＣＭ１３０は処理をステップＳ４２１に進める。
【０１６２】
このようにして、１０秒間隔でストレージ装置１００からストレージ装置２００への情報送信が行われる。
次にＲＡ元のストレージ装置におけるコマンド実行処理について説明する。
【０１６３】
図２１は、第５の実施の形態のＲＡ元のストレージ装置におけるコマンド実行処理の手順の一例を示す図である。以下、図２１に示す処理をステップ番号に沿って説明する。
［ステップＳ４３１］ＣＭ１３０は、ホストコマンドを受信する。
【０１６４】
［ステップＳ４３２］ＣＭ１３０は、ホストコマンド実行数とＲＡ元ホストコマンド累積数ｉｃとのそれぞれを１ずつインクリメントする。例えばＣＭ１３０は、ＲＡ元コマンド管理テーブル５２のホストコマンド実行数の値に１を加算する。またＣＭ１３０は、ＲＡ元コマンド管理テーブル５２のＲＡ元ホストコマンド累積数ｉｃの値に１を加算する。
【０１６５】
［ステップＳ４３３］ＣＭ１３０は、受信したホストコマンドがＲＡコマンドか否かを判断する。例えばＣＭ１３０は、ホストコマンドが、ＲＡセクションが組まれたボリューム１４３へのアクセスであれば、ＲＡコマンドであると判断する。ＣＭ１３０は、ＲＡコマンドであれば処理をステップＳ４３４に進める。またＣＭ１３０は、ＣＡコマンドであれば処理をステップＳ４４１に進める。
【０１６６】
［ステップＳ４３４］ＣＭ１３０は、ＲＡコマンド数を１だけインクリメントする。またＣＭ１３０は、インクリメント後のＲＡコマンド数に基づいて、ＲＡコマンド率ｐを計算する。例えばＣＭ１３０は、ＲＡ元コマンド管理テーブル５２のＲＡコマンド数の値に１を加算する。次にＣＭ１３０は、ＲＡ元コマンド管理テーブル５２からＲＡコマンド数とＲＡ元ホストコマンド累積数ｉｃとを取得する。そしてＣＭ１３０は、ＲＡコマンド数をＲＡ元ホストコマンド累積数ｉｃで除算し、除算結果をＲＡコマンド率ｐとする。ＣＭ１３０は、計算したＲＡコマンド率ｐにより、ＲＡ元コマンド管理テーブル５２のＲＡコマンド率ｐを更新する。
【０１６７】
［ステップＳ４３５］ＣＭ１３０は、ホストコマンド実行数がＲＡ元ホストコマンド制限値ｉｃｓ以下か否かを判断する。例えばＣＭ１３０は、ＲＡ元コマンド管理テーブル５２からホストコマンド実行数とＲＡ元ホストコマンド制限値ｉｃｓを取得し、取得した値の大小を比較する。ＣＭ１３０は、ホストコマンド実行数がＲＡ元ホストコマンド制限値ｉｃｓ以下であれば、処理をステップＳ４３６に進める。またＣＭ１３０は、ホストコマンド実行数がＲＡ元ホストコマンド制限値ｉｃｓを超えていれば、処理をステップＳ４４５に進める。
【０１６８】
［ステップＳ４３６］ＣＭ１３０は、受信したホストコマンドに応じた処理を実行する。例えばＣＭ１３０はボリューム１４３にデータを書き込む。
［ステップＳ４３７］ＣＭ１３０は、ステップＳ４３６で書き込んだデータをストレージ装置２００にコピーするためのコピーコマンド３２を、ストレージ装置２００宛に送信する。
【０１６９】
［ステップＳ４３８］ＣＭ１３０は、ストレージ装置２００からの応答が正常応答か、あるいはＱＦＵＬＬ応答かを判断する。ストレージ装置２００から正常応答を受信した場合、ＣＭ１３０は処理をステップＳ４３９に進める。またストレージ装置２００からＱＦＵＬＬ応答を受信した場合、ＣＭ１３０は処理をステップＳ４３７に進め、コピーコマンド３２を再度送信する。
【０１７０】
［ステップＳ４３９］ＣＭ１３０は、ＲＡ元コマンド管理テーブル５２のホストコマンド実行数の値を１だけデクリメントする。
［ステップＳ４４０］ＣＭ１３０は、ホストコンピュータ２１へ正常応答を送信する。その後、コマンド実行処理が終了する。
【０１７１】
［ステップＳ４４１］ＣＭ１３０は、受信したホストコマンドがＣＡコマンドの場合、ホストコマンド実行数がＲＡ元ホストコマンド制限値ｉｃｓ以下か否かを判断する。ＣＭ１３０は、ホストコマンド実行数がＲＡ元ホストコマンド制限値ｉｃｓ以下であれば、処理をステップＳ４４２に進める。またＣＭ１３０は、ホストコマンド実行数がＲＡ元ホストコマンド制限値ｉｃｓを超えていれば、処理をステップＳ４４５に進める。
【０１７２】
［ステップＳ４４２］ＣＭ１３０は、受信したホストコマンドに応じた処理を実行する。例えばＣＭ１３０はボリューム１４１またはボリューム１４２にデータを書き込む。
［ステップＳ４４３］ＣＭ１３０は、ＲＡ元コマンド管理テーブル５２のホストコマンド実行数の値を１だけデクリメントする。
【０１７３】
［ステップＳ４４４］ＣＭ１３０は、ホストコンピュータ２１へ正常応答を送信する。その後、コマンド実行処理が終了する。
［ステップＳ４４５］ホストコマンド実行数がＲＡ元ホストコマンド制限値ｉｃｓを超えている場合、ＣＭ１３０は、ＲＡ元コマンド管理テーブル５２のホストコマンド実行数の値を１だけデクリメントする。
【０１７４】
［ステップＳ４４６］ＣＭ１３０は、ホストコンピュータ２１へＱＦＵＬＬ応答を送信する。その後、コマンド実行処理が終了する。
このようにして、ＲＡ元のストレージ装置１００においても、ＲＡ先コピーコマンド制限値ｔｒｓに応じて動的に変更されるＲＡ元ホストコマンド制限値ｉｃｓによって、ホストコマンドの実行数が適切に制限される。
【０１７５】
次に、ＲＡ先のストレージ装置２００における処理について説明する。
図２２は、ＲＡ先におけるコマンド制限値決定処理の手順の一例を示す図である。以下、図２２に示す処理をステップ番号に沿って説明する。
【０１７６】
［ステップＳ４５１］ストレージ装置２００のＣＭ２３０は、タイマをリセットし、時間計測（タイマカウント）を開始する。
［ステップＳ４５２］ＣＭ２３０は、タイマが１０秒経過したか否かを判断する。１０秒経過していなければ、ＣＭ２３０は処理をステップＳ４５１に進める。１０秒経過していれば、ＣＭ２３０は処理をステップＳ４５３に進める。
【０１７７】
［ステップＳ４５３］ＣＭ２３０は、ＲＡ元のストレージ装置１００におけるＣＡコマンド数が、ＲＡ先ホストコマンド累積数ｔｃよりも大きいか否かを判断する。ＲＡ元のＣＡコマンド数は、ＲＡ元ホストコマンド累積数ｉｃに「１−ＲＡコマンド率ｐ」を乗算することで算出できる。例えばＣＭ２３０は、ＲＡ先コマンド管理テーブル５３から、ＲＡ先ホストコマンド累積数ｔｃ、ＲＡ元ホストコマンド累積数ｉｃ、およびＲＡコマンド率ｐを取得する。そしてＣＭ２３０は、ＲＡ元ホストコマンド累積数ｉｃに「１−ＲＡコマンド率ｐ」を乗算した値とＲＡ先ホストコマンド累積数ｔｃとの大小関係を比較することにより、ＣＡコマンド数がＲＡ先ホストコマンド累積数ｔｃよりも大きいか否かを判断する。ＣＭ２３０は、ＣＡコマンド数がＲＡ先ホストコマンド累積数ｔｃよりも大きい場合、処理をステップＳ４５６に進める。またＣＭ２３０は、ＣＡコマンド数がＲＡ先ホストコマンド累積数ｔｃ以下の場合、処理をステップＳ４５４に進める。
【０１７８】
［ステップＳ４５４］ＣＡコマンド数がＲＡ先ホストコマンド累積数ｔｃ以下の場合、ＣＭ２３０は、ＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。例えばＣＭ２３０は、ＲＡ先コマンド管理テーブル５３から、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、及びＲＡ先ホストコマンド累積数ｔｃを取得する。そしてＣＭ２３０は、上記の式（５）・式（６）に従ってＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。さらにＣＭ２３０は、計算したＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとによって、ＲＡ先コマンド管理テーブル５３のＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとの値を更新する。
【０１７９】
［ステップＳ４５５］ＣＭ２３０は、ＲＡ元ホストコマンド制限値ｉｃｓを計算する。例えばＣＭ２３０は、ＲＡ先コマンド管理テーブル５３から、ＲＡ先コピーコマンド制限値ｔｒｓとＲＡコマンド率ｐとを取得する。そしてＣＭ２３０は、上記の式（７）に従ってＲＡ元ホストコマンド制限値ｉｃｓを計算する。ＣＭ２３０は、その後、処理をステップＳ４５８に進める。
【０１８０】
［ステップＳ４５６］ＣＡコマンド数がＲＡ先ホストコマンド累積数ｔｃよりも大きい場合、ＣＭ２３０は、ＲＡ元ホストコマンド制限値ｉｃｓを「１０２４」に決定する。
［ステップＳ４５７］ＣＭ２３０は、ＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。例えばＣＭ２３０は、ＲＡ先コマンド管理テーブル５３から、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、及びＲＡ先ホストコマンド累積数ｔｃを取得する。そしてＣＭ２３０は、取得した値と、ステップＳ４５６で決定したＲＡ元ホストコマンド制限値「ｉｃｓ＝１０２４」とを用い、上記の式（９）・式（１０）に従ってＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。さらにＣＭ２３０は、計算したＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとによって、ＲＡ先コマンド管理テーブル５３のＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとの値を更新する。
【０１８１】
［ステップＳ４５８］ＣＭ２３０は、ＲＡ先コマンド管理テーブル５３のＲＡ先ホストコマンド累積数ｔｃとＲＡ先コピーコマンド累積数ｔｒとを０に初期化する。
［ステップＳ４５９］ＣＭ２３０は、ステップＳ４５５で計算したＲＡ元ホストコマンド制限値ｉｃｓまたはステップＳ４５６で決定したＲＡ元ホストコマンド制限値ｉｃｓを、ＲＡ元であるストレージ装置１００に通知する。例えばＣＭ２３０は、ヘッダにＲＡ元ホストコマンド制限値ｉｃｓを含む経路監視コマンド３７を、ストレージ装置１００宛に送信する。その後、ＣＭ２３０は処理をステップＳ４５１に進める。
【０１８２】
このようにして、ストレージ装置２００において、ＲＡ元とＲＡ先との両方のコマンド制限値が計算される。
なお、第５の実施の形態におけるＲＡ先のストレージ装置２００のコマンド実行処理は、図１５に示した第４の実施の形態のコマンド実行処理と同様である。
【０１８３】
このようにして、ＲＡ先のストレージ装置２００において決定されたコマンド制限値が、ストレージ装置１００，２００それぞれで適用される。その結果、ストレージ装置１００に入力されたホストコマンド数がＲＡ元ホストコマンド制限値ｉｃｓを超えた場合であっても、ストレージ装置１００，２００それぞれにおけるホストコマンドの処理効率を同等にすることができる。すなわち、ＲＡ元のストレージ装置１００へのホストコマンドの入力が過大になったことも考慮して、ＲＡセッションによるデータのコピーを行うことによるホストコマンドの処理効率の低下をＲＡ元とＲＡ先とで同等にし、公平性を担保することができる。
【０１８４】
なお第５の実施の形態は、ストレージ装置が１対１で接続されている場合の例であるが、１対多や多対多の接続にも使用することが可能である。さらに、ホストコンピュータ２１，２２それぞれから出力されるホストコマンドを平等に扱うのではなく、ホストコンピュータ２１，２２それぞれのホストコマンドの実行に優先度によって重みをつけることもできる。重みを付けることで、ホストコンピュータ２１，２２にＱＦＵＬＬ応答が返される確率を制御することも可能である。
【０１８５】
〔第６の実施の形態〕
次に第６の実施の形態について説明する。第６の実施の形態は、ＲＡ元のストレージ装置１００におけるＣＡコマンドとＲＡコマンドとの処理時間の違いを考慮したものである。なお、第６の実施の形態におけるシステム構成は、図２、図３に示した第２の実施の形態の構成と同様である。
【０１８６】
ＲＡコマンドは、ボリューム１４３へのデータ書き込み処理の延長で起動されるリモートコピーの終了後に、応答がホストコンピュータ２１に送信される。そのためＲＡコマンドは、ＣＡコマンドよりも、処理完了までに時間が長くかかる。ところが第５の実施の形態では、上記のＣＡコマンドとＲＡコマンドとの処理時間の違いが考慮されていない。そのためＲＡ元のストレージ装置１００においてＣＡコマンドばかりが処理され、ＲＡコマンドの処理が未完了の状態で溜まっていき、ＣＡコマンドすら受信できなくなる可能性がある。そこで第６の実施の形態では、コマンド処理時間の違いによる重み付けを行い、ＲＡコマンドの処理が滞留しないように、コマンド制限値を変化させる。
【０１８７】
図２３は、第６の実施の形態におけるコマンド流量制御状況の一例を示す図である。第６の実施の形態では、ＲＡ元のストレージ装置１００において、ＣＡコマンド処理時間ｃＴとＲＡコマンド処理時間ｒＴとを計測する。計測されたＣＡコマンド処理時間ｃＴとＲＡコマンド処理時間ｒＴとは、ＲＡ元ホストコマンド累積数ｉｃとＲＡコマンド率ｐと共に、経路監視コマンド３８によってＲＡ先のストレージ装置２００に送信される。
【０１８８】
ストレージ装置２００では、ＣＡコマンド処理時間ｃＴとＲＡコマンド処理時間ｒＴとを利用してコマンド制限値を決定する。例えば以下のような計算を行う。
ｉｃ×ｐ×ｃＴ／ｒＴ：ｔｃ＝ｔｒｓ：ｔｃｓ          ・・・（１１）
ｔｃｓ＋ｔｒｓ＝１０２４                            ・・・（１２）
この二式から、以下の結果が得られる。
ｔｃｓ＝（ｔｃ／（ｔｃ＋ｉｃ×ｐ×ｃＴ／ｒＴ））×１０２４  ・・・（１３）
ｔｒｓ＝１０２４−ｔｃｓ
＝（（ｉｃ×ｐ×ｃＴ／ｒＴ）／（ｔｃ＋ｉｃ×ｐ×ｃＴ／ｒＴ））×１０２４
・・・（１４）
さらに、以下の計算式でストレージ装置１００におけるＲＡ元ホストコマンド制限値ｉｃｓを算出する。
ｉｃｓ＝ｔｒｓ／ｐ          ・・・（１５）
以下に、第６の実施の形態における各ストレージ装置１００，２００でのホストコマンドの実行性能について、具体例を用いて説明する。
【０１８９】
ここで、各測定値が以下の通りであるものとする。
ＲＡ元ホストコマンド累積数ｉｃ：３０００
ＲＡコマンド率ｐ：０．５
ＲＡ先ホストコマンド累積数ｔｃ：２０００
ＣＡコマンド処理時間ｃＴ：１ｍｓ
ＲＡコマンド処理時間ｒＴ：４ｍｓ
すると、ＲＡ先ホストコマンド制限値ｔｃｓ、ＲＡ先コピーコマンド制限値ｔｒｓ、およびＲＡ元ホストコマンド制限値ｉｃｓは以下の通りとなる。
ｔｃｓ＝（  ２０００／（２０００＋３０００×０．５×１／４））×１０２４＝８６２
ｔｒｓ＝１０２４−８６２＝１６２
ｉｃｓ＝１６２／０．５＝３２４
ＲＡ元ホストコマンド制限値ｉｃｓは１０２４を大きく下回っているが、３２４以上のコマンドを受けてもＲＡコマンドの処理が間に合わなくなり、滞留してしまう。ＲＡ元ホストコマンド制限値ｉｃｓを低く抑えられている分、ＲＡ先のホストコマンドを多く処理できる。このように、ＲＡ元ホストコマンド制限値ｉｃｓを３２４までに抑えることで、システム全体としての効率の向上が可能となる。
【０１９０】
また第６の実施の形態では、求められたＲＡ元ホストコマンド制限値ｉｃｓと、ＣＡＲＡポート１５１の上限である１０２４との差分を考慮して、ＲＡコマンド率ｐを減らすようにしている。これにより、ＣＡコマンドを増やすことができ、ＲＡ元ホストコマンド制限値ｉｃｓを１０２４に近づけＲＡ元のストレージ装置１００の性能を高めることが可能となる。
【０１９１】
次に、第６の実施の形態の機能を実現するためにＲＡ元とＲＡ先の各ストレージ装置１００，２００が有するコマンド管理テーブルについて説明する。
図２４は、第６の実施の形態のＲＡ元コマンド管理テーブルの一例を示す図である。第６の実施の形態では、図２４に示すようなＲＡ元コマンド管理テーブル５５が、例えばＣＭ１３０のメモリ内に格納される。ＲＡ元コマンド管理テーブル５５には、ホストコマンド実行数、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡ元ホストコマンド制限値ｉｃｓ、ＲＡコマンド数、ＲＡコマンド率ｐ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴが設定されている。
【０１９２】
図２５は、第６の実施の形態のＲＡ先コマンド管理テーブルの一例を示す図である。第６の実施の形態では、図２５に示すようなＲＡ先コマンド管理テーブル５６が、例えばＣＭ２３０のメモリ内に格納される。ＲＡ先コマンド管理テーブル５６には、ホストコマンド実行数、ＲＡ先ホストコマンド累積数ｔｃ、ＲＡ先ホストコマンド制限値ｔｃｓ、コピーコマンド実行数、ＲＡ先コピーコマンド累積数ｔｒ、ＲＡ先コピーコマンド制限値ｔｒｓ、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴが設定されている。このうちＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴについては、ストレージ装置１００から経路監視コマンド３８で該当情報が通知されるごとに、ＣＭ２３０によって更新される。
【０１９３】
次に、第６の実施の形態のＲＡ元のストレージ装置１００におけるコマンド実行処理について説明する。第６の実施の形態では、ＲＡ元のストレージ装置１００は、コマンド実行時に、ＣＡコマンド処理時間ｃＴとＲＡコマンド処理時間ｒＴとを計測する。
【０１９４】
図２６は、第６の実施の形態のＲＡ元のコマンド実行処理の手順の一例を示すフローチャートである。以下、図２６に示す処理のうち、ステップＳ５０１、Ｓ５０３〜Ｓ５０８，Ｓ５１０〜Ｓ５１３，Ｓ５１５〜Ｓ５１８は、それぞれ図２１に示す第５の実施の形態の処理のステップＳ４３１，Ｓ４３３〜Ｓ４４６の処理と同じである。そこで第５の実施の形態と異なるステップＳ５０２，Ｓ５０９，Ｓ５１４の処理について以下に説明する。
【０１９５】
［ステップＳ５０２］ＣＭ１３０は、ホストコマンド実行数とＲＡ元ホストコマンド累積数ｉｃとのそれぞれを１ずつインクリメントする。またＣＭ１３０は、タイマをリセットし、時間計測（タイマカウント）を開始する。
【０１９６】
［ステップＳ５０９］ＣＭ１３０は、受信したホストコマンドがＲＡコマンドの場合、ストレージ装置２００からの正常応答を受信後に、タイマをストップさせる。次にＣＭ１３０は、ＲＡコマンド処理時間平均値を計算する。計算されたＲＡコマンド処理時間平均値が、ＲＡコマンド処理時間ｒＴとなる。
【０１９７】
例えばＣＭ１３０は、実行済みＲＡコマンド数をメモリ内に保持し、ＲＡコマンドが実行されるごとに実行済みＲＡコマンド数をインクリメントする。またＣＭ１３０は、ＲＡコマンドの実行時間合計をメモリ内に保持し、ＲＡコマンドが実行されるごとに、タイマで計測した実行時間を実行済みＲＡコマンドの実行時間合計に加算する。そしてＣＭ１３０は、ＲＡコマンドの実行時間合計を実行済みＲＡコマンド数で除算した値を、ＲＡコマンド処理時間平均値とする。ＣＭ１３０は、計算したＲＡコマンド処理時間平均値により、ＲＡ元コマンド管理テーブル５５のＲＡコマンド処理時間ｒＴを更新する。
【０１９８】
［ステップＳ５１４］ＣＭ１３０は、受信したホストコマンドがＣＡコマンドの場合、ホストコマンド処理完了後に、タイマをストップさせる。次にＣＭ１３０は、ＣＡコマンド処理時間平均値を計算する。計算されたＣＡコマンド処理時間平均値が、ＣＡコマンド処理時間ｃＴとなる。
【０１９９】
例えばＣＭ１３０は、実行済みＣＡコマンド数をメモリ内に保持し、ＣＡコマンドが実行されるごとに実行済みＣＡコマンド数をインクリメントする。またＣＭ１３０は、ＣＡコマンドの実行時間合計をメモリ内に保持し、ＣＡコマンドが実行されるごとに、タイマで計測した実行時間を実行済みＣＡコマンドの実行時間合計に加算する。そしてＣＭ１３０は、ＣＡコマンドの実行時間合計を実行済みＣＡコマンド数で除算した値を、ＣＡコマンド処理時間平均値とする。ＣＭ１３０は、計算したＣＡコマンド処理時間平均値により、ＲＡ元コマンド管理テーブル５５のＣＡコマンド処理時間ｃＴを更新する。
【０２００】
このようにストレージ装置１００では、コマンド実行ごとにＣＡコマンド処理時間ｃＴまたはＲＡコマンド処理時間ｒＴが計算される。計算されたＣＡコマンド処理時間ｃＴまたはＲＡコマンド処理時間ｒＴは、経路監視コマンドによってＲＡ先のストレージ装置２００に通知される。
【０２０１】
次に、ＲＡ元のストレージ装置１００におけるコマンド実行状況通知処理について説明する。
図２７は、第６の実施の形態のＲＡ元におけるコマンド実行状況通知処理の手順の一例を示すフローチャートである。以下、図２７に示す処理をステップ番号に沿って説明する。
【０２０２】
［ステップＳ５２１］ストレージ装置１００のＣＭ１３０は、タイマをリセットし、時間計測（タイマカウント）を開始する。
［ステップＳ５２２］ＣＭ１３０は、タイマが１０秒経過したか否かを判断する。１０秒経過していなければ、ＣＭ１３０は処理をステップＳ５２１に進める。１０秒経過していれば、ＣＭ１３０は処理をステップＳ５２３に進める。
【０２０３】
［ステップＳ５２３］ＣＭ１３０は、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴを、ストレージ装置２００に通知する。例えばＣＭ１３０は、ＲＡ元コマンド管理テーブル５５から、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴを取得する。次にＣＭ１３０は、取得したＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴをヘッダに含む制御パケットを生成する。そしてＣＭ１３０は、生成した制御パケットを、ＣＡＲＡポート１５１を介してストレージ装置２００宛に送信する。
【０２０４】
［ステップＳ５２４］ＣＭ１３０は、ＲＡ元コマンド管理テーブル５５のＲＡコマンド数、ＲＡコマンド率ｐ、ＲＡ元ホストコマンド累積数ｉｃ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴそれぞれの値を０に初期化する。その後、ＣＭ１３０は処理をステップＳ５２１に進める。
【０２０５】
このようにして、１０秒間隔でストレージ装置１００からストレージ装置２００へ、ＣＡコマンド処理時間ｃＴやＲＡコマンド処理時間ｒＴを含む情報が送信される。
次に、ＲＡ先のストレージ装置２００におけるコマンド制限値決定処理の手順について説明する。
【０２０６】
図２８は、第６の実施の形態のＲＡ先におけるコマンド制限値決定処理の手順の一例を示すフローチャートである。以下、図２８に示す処理をステップ番号に沿って説明する。
［ステップＳ５３１］ＣＭ２３０は、タイマをリセットし、時間計測（タイマカウント）を開始する。
【０２０７】
［ステップＳ５３２］ＣＭ２３０は、タイマが１０秒経過したか否かを判断する。１０秒経過していなければ、ＣＭ２３０は処理をステップＳ５３１に進める。１０秒経過していれば、ＣＭ２３０は処理をステップＳ５３３に進める。
【０２０８】
［ステップＳ５３３］ＣＭ２３０は、ＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。例えばＣＭ２３０は、ＲＡ先コマンド管理テーブル５３から、ＲＡ元ホストコマンド累積数ｉｃ、ＲＡコマンド率ｐ、ＲＡ先ホストコマンド累積数ｔｃ、ＣＡコマンド処理時間ｃＴ、およびＲＡコマンド処理時間ｒＴを取得する。そしてＣＭ２３０は、上記の式（１３）・式（１４）に従ってＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとを計算する。さらにＣＭ２３０は、計算したＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとによって、ＲＡ先コマンド管理テーブル５６のＲＡ先ホストコマンド制限値ｔｃｓとＲＡ先コピーコマンド制限値ｔｒｓとの値を更新する。
【０２０９】
［ステップＳ５３４］ＣＭ２３０は、ＲＡ元ホストコマンド制限値ｉｃｓを計算する。例えばＣＭ２３０は、ＲＡ先コマンド管理テーブル５３から、ＲＡ先コピーコマンド制限値ｔｒｓとＲＡコマンド率ｐとを取得する。そしてＣＭ２３０は、上記の式（１５）に従ってＲＡ元ホストコマンド制限値ｉｃｓを計算する。
【０２１０】
［ステップＳ５３５］ＣＭ２３０は、ＲＡ先コマンド管理テーブル５３のＲＡ先ホストコマンド累積数ｔｃとＲＡ先コピーコマンド累積数ｔｒとを０に初期化する。
［ステップＳ５３６］ＣＭ２３０は、ステップＳ５３４で計算したＲＡ元ホストコマンド制限値ｉｃｓを、ＲＡ元であるストレージ装置１００に通知する。その後、ＣＭ２３０は処理をステップＳ５３１に進める。
【０２１１】
このようにして、ＲＡ元のストレージ装置１００におけるＣＡコマンド処理時間ｃＴとＲＡコマンド処理時間ｒＴとの違いを考慮して、適切なコマンド制限値を設定することができる。その結果、処理時間の長いＲＡコマンドが処理しきれずに滞留し、ストレージ装置１００における処理効率が低下することを抑止することができる。
【０２１２】
〔第７の実施の形態〕
次に第７の実施の形態について説明する。第７の実施の形態は、コマンドの入力状況に応じてコマンド流量制御技術を動的に変更し、ストレージ装置がコマンド流量制御に要する処理負荷を抑止するものである。なお、第７の実施の形態におけるシステム構成は、図２、図３に示した第２の実施の形態の構成と同様である。
【０２１３】
例えば第７の実施の形態では、コマンドの処理効率、およびＲＡ元とＲＡ先とにおけるホストコマンドの公平な実行に関して優劣がない場合、ストレージ装置に対する処理負荷ができるだけ少ない技術でコマンド流量制御を行う。
【０２１４】
なお、コマンド流量制御技術の切り替えには、ストレージ装置１００，２００でのコマンド実行状況の把握が必要となる。そのため、いずれのコマンド流量制御技術を適用する場合においても、ストレージ装置１００，２００間では、第６の実施の形態と同様に、経路監視コマンドによる情報交換が行われているものとする。
【０２１５】
上記第２〜第６の実施の形態の処理負荷を比較すると、最もストレージ装置への処理負荷が低いのは第２の実施の形態である。ただし、第２の実施の形態では、コマンドの実行状況などの監視を行っておらず、コマンドの入力状況に応じたコマンド流量制御技術の切り替えには適応できない。
【０２１６】
例えばストレージ装置間にＲＡセッションが設定されていない場合、第３の実施の形態のコマンド流量制御技術を適用することで、ＲＡ先におけるコマンド実行処理を図８に示すように単純化できる。しかもコマンド流量制御に用いる情報も図７に示すように少なく、第４〜第６の実施の形態よりもストレージ装置の処理負荷は少ない。
【０２１７】
ストレージ装置間にＲＡセッションが設定されている場合には、コマンドの処理効率の観点から、第３の実施の形態のコマンド流量制御技術では不十分である。ＲＡセッションが設定されており、ＲＡ元のストレージ装置１００が低負荷（例えばＲＡ元ホストコマンド累積数ｉｃが１０２４以下）であれば、ＲＡ元のストレージ装置１００に入力されたホストコマンドは、ＱＦＵＬＬ応答されることなく実行される。そのため第４の実施の形態のコマンド流量制御技術によって、適切なコマンド処理が可能である。第４の実施の形態のコマンド流量制御技術は、第５〜第６の実施の形態におけるコマンド流量制御技術よりもストレージ装置１００，２００への負荷が少ない。そのためＲＡセッションが設定されており、ＲＡ元のストレージ装置１００が低負荷であれば、第４の実施の形態が適切となる。
【０２１８】
ＲＡ元のストレージ装置１００が高負荷（例えばＲＡ元ホストコマンド累積数ｉｃが１０２４を超過）となった場合、ホストコンピュータ２１，２２それぞれが出力したホストコマンドの公平な実行のためには、第４の実施の形態は不適切となる。そこで第５または第６の実施の形態によるコマンド流量制御技術が適切となる。例えば、ＲＡ元のストレージ装置１００におけるＣＡコマンド実行時間とＲＡコマンド実行時間とがほぼ同じであれば、第５の実施の形態が適切となる。ＣＡコマンド実行時間とＲＡコマンド実行時間とに差があるのであれば、第６の実施の形態が適切となる。ただし第５の実施の形態が適切なのか第６の実施の形態が適切なのかの判断には、ＣＡコマンド処理時間ｃＴとＲＡコマンド処理時間ｒＴとの計測、および計測値の比較処理が必要となる。するとストレージ装置１００，２００における処理負荷は第６の実施の形態によるコマンド流量制御技術を適用した場合と同じとなる。そこで、第７の実施の形態では、ＲＡ元のストレージ装置１００が高負荷となった場合には、第６の実施の形態によるコマンド流量制御技術を適用する。
【０２１９】
適用するコマンド流量技術の判定は、例えばストレージ装置２００において実行される。以下、ストレージ装置２００による、適用技術判定処理について説明する。
図２９は、適用技術判定処理の手順の一例を示すフローチャートである。以下、図２９に示す処理をステップ番号に沿って説明する。
【０２２０】
［ステップＳ６０１］ストレージ装置２００のＣＭ２３０は、タイマをリセットし、時間計測（タイマカウント）を開始する。
［ステップＳ６０２］ＣＭ２３０は、タイマが所定時間（例えば１０秒）経過したか否かを判断する。所定時間経過していなければ、ＣＭ２３０は処理をステップＳ６０１に進める。所定時間経過していれば、ＣＭ２３０は処理をステップＳ６０３に進める。
【０２２１】
［ステップＳ６０３］ＣＭ２３０は、ストレージ装置１００との間にＲＡセッションが設定されているか否かを判断する。ＣＭ２３０は、ＲＡセッションが設定されていれば、処理をステップＳ６０５に進める。またＣＭ２３０は、ＲＡセッションが設定されていなければ、処理をステップＳ６０４に進める。
【０２２２】
［ステップＳ６０４］ＣＭ２３０は、第３の実施の形態に示したコマンド流量制御技術を適用することを決定する。その後、ＣＭ２３０は処理をステップＳ６０８に進める。
［ステップＳ６０５］ＣＭ２３０は、ＲＡ元ホストコマンド累積数ｉｃが１０２４以下か否かを判断する。ＣＭ２３０は、ＲＡ元ホストコマンド累積数ｉｃが１０２４以下であれば処理をステップＳ６０６に進める。またＣＭ２３０は、ＲＡ元ホストコマンド累積数ｉｃが１０２４を超えていれば、処理をステップＳ６０７に進める。
【０２２３】
［ステップＳ６０６］ＣＭ２３０は、第４の実施の形態に示したコマンド流量制御技術を適用することを決定する。その後、ＣＭ２３０は処理をステップＳ６０８に進める。
［ステップＳ６０７］ＣＭ２３０は、第６の実施の形態に示したコマンド流量制御技術を適用することを決定する。
【０２２４】
［ステップＳ６０８］ＣＭ２３０は、ＲＡ元のストレージ装置１００に対して、適用するコマンド流量制御技術を通知する。
［ステップＳ６０９］ＣＭ２３０は、適用するものとして決定された技術によるコマンド流量制御を開始する。その後、ＣＭ２３０は処理をステップＳ６０１に進める。
【０２２５】
このようにして、コマンドの入力状況に応じて適切なコマンド流量制御技術を適用することが可能となる。その結果、ストレージ装置１００，２００の処理負荷を低減させることができる。ストレージ装置１００，２００の処理負荷が低減すれば、消費電力も低減する。
【０２２６】
〔その他の実施の形態〕
上記の各実施の形態に示した処理機能は、コンピュータによって実現することができる。その場合、ストレージ装置のＣＭが有する機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。なおプログラムを記録する記録媒体には、一時的な伝搬信号自体は含まれない。
【０２２７】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２２８】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０２２９】
また、上記の処理機能の少なくとも一部を、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現することもできる。
【０２３０】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０２３１】
１  ストレージ装置
１−１  記憶装置
１−２  通信インタフェース
１−３  管理部
１−３ａ  記憶手段
１−３ｂ  判別手段
１−３ｃ  計数手段
１−３ｄ  制御手段
２  ネットワーク
３  スイッチ
４  コンピュータ
５  ストレージ装置
６  コンピュータ
７〜９  コマンド
【図１】
0005899893.tif 000002
【図２】
0005899893.tif 000003
【図３】
0005899893.tif 000004
【図４】
0005899893.tif 000005
【図５】
0005899893.tif 000006
【図６】
0005899893.tif 000007
【図７】
0005899893.tif 000008
【図８】
0005899893.tif 000009
【図９】
0005899893.tif 000010
【図１０】
0005899893.tif 000011
【図１１】
0005899893.tif 000012
【図１２】
0005899893.tif 000013
【図１３】
0005899893.tif 000014
【図１４】
0005899893.tif 000015
【図１５】
0005899893.tif 000016
【図１６】
0005899893.tif 000017
【図１７】
0005899893.tif 000018
【図１８】
0005899893.tif 000019
【図１９】
0005899893.tif 000020
【図２０】
0005899893.tif 000021
【図２１】
0005899893.tif 000022
【図２２】
0005899893.tif 000023
【図２３】
0005899893.tif 000024
【図２４】
0005899893.tif 000025
【図２５】
0005899893.tif 000026
【図２６】
0005899893.tif 000027
【図２７】
0005899893.tif 000028
【図２８】
0005899893.tif 000029
【図２９】
0005899893.tif 000030