(57)【要約】【課題】本発明の記憶制御装置は、上位装置を停止等させることなく、上位装置から多重発行されるコマンドの数を制御する。【解決手段】  記憶制御装置１の通信ポート１Ａと各ホスト２とはiSCSIプロトコルによって通信を行う。コマンド処理資源PRは、各通信ポート毎に管理されている。資源割当制御部１Ｅは、ポート共通資源１Ｆ内のコマンド処理資源PRの残量、ホスト２から受信したコマンドの数の変化、通信遅延時間、ホスト２から発行されたコマンドの実行状態等に基づいて、受領可能数を算出する。コマンド実行部１Ｂによるコマンド処理の結果及び資源割当制御部１Ｅで算出された受領可能数を、ホスト２から受領した最新のCmdSNの値に加算することにより、MaxCmdSNが算出される。記憶制御装置１は、MaxCmdSNを送信フレームに付加してホスト２に送信する。【選択図】図１
2007323356.tif 000002
【特許請求の範囲】
【請求項１】
それぞれコマンドを発行する複数の上位装置に接続することができる記憶制御装置であって、
前記各上位装置と通信を行うための複数の通信ポートと、
前記各上位装置から前記通信ポートを介して受信したコマンドをそれぞれ処理し、その処理結果を前記各上位装置にそれぞれ送信する制御部と、を備え、
前記制御部は、
（１）前記各通信ポート毎に用意されるポート共通資源の中から、前記コマンドを処理するためのコマンド処理資源を確保して、前記各上位装置にそれぞれ割り当て、
（２）この割り当てられた前記コマンド処理資源の量に基づいて、前記各上位装置から受領可能なコマンド数を示す受領可能数を前記各上位装置にそれぞれ通知し、かつ、
（３）前記各上位装置と前記各通信ポートとの間の通信遅延時間に基づいて、前記各上位装置毎に割り当てられた前記コマンド処理資源の量をそれぞれ制御する、
記憶制御装置。
【請求項２】
前記制御部は、前記各上位装置が前記コマンドをそれぞれ多重発行できるように、前記各上位装置に前記コマンド処理資源をそれぞれ割り当てるようになっている請求項１に記載の記憶制御装置。
【請求項３】
前記制御部は、前記各上位装置のうち前記コマンドを実行している各上位装置間で、前記ポート共通資源の前記コマンド処理資源を略均等に割り当てる請求項１に記載の記憶制御装置。
【請求項４】
前記制御部は、前記各上位装置から発行される前記コマンドの数が所定値以下に低下した場合でも、前記通信遅延時間が予め設定された所定の応答時間に達するまでの間は、前記各上位装置に割り当てられた前記コマンド処理資源を維持する請求項１に記載の記憶制御装置。
【請求項５】
前記制御部は、予め設定された優先順位に基づいて、前記ポート共通資源を前記各上位装置間で分配する請求項１に記載の記憶制御装置。
【請求項６】
前記制御部は、前記ポート共通資源の残存量が予め設定された所定値以下になった場合に、前記各上位装置に割り当てられている前記コマンド処理資源の一部を前記ポート共通資源に戻す請求項１に記載の記憶制御装置。
【請求項７】
前記制御部は、前記上位装置で実行される前記コマンドの数が所定値まで低下した場合に、前記上位装置に割り当てられているコマンド処理資源を全て前記ポート共通資源に戻す請求項１に記載の記憶制御装置。
【請求項８】
前記制御部は、前記各上位装置にそれぞれ通知される前記受領可能数の合計が前記ポート共通資源の最大量を超えた場合に、前記各上位装置に割り当てられている前記コマンド処理資源の一部を前記ポート共通資源に戻すことにより、前記各上位装置に改めて通知する前記受領可能数を低下させる請求項１に記載の記憶制御装置。
【請求項９】
前記制御部は、前記ポート共通資源の残存量が予め設定された所定値以下になった場合に、前記コマンド処理資源が前記各上位装置に略均等に割り当てられるように、前記各上位装置に割り当てられている前記コマンド処理資源の一部を前記ポート共通資源に戻す請求項１に記載の記憶制御装置。
【請求項１０】
前記制御部は、前記上位装置から発行される前記コマンドの数の減少に応じて、前記上位装置に割り当てる前記コマンド処理資源を前記ポート共通資源に戻す請求項１に記載の記憶制御装置。
【請求項１１】
前記制御部は、前記上位装置から発行される前記コマンドの数の状態変化を監視し、前記コマンド数が定常状態から減少状態に移行した場合には、前記上位装置に割り当てられている前記コマンド処理資源の全部を前記ポート共通資源に戻す請求項１に記載の記憶制御装置。
【請求項１２】
前記制御部は、前記上位装置から前記コマンドを受領した場合、前記ポート共通資源の残存量が予め設定された所定の閾値を超えるか否かを判定し、前記残存量が前記閾値を超えると判定したときは、前記上位装置に割り当てる前記コマンド処理資源を増加させ、前記残存量が前記閾値以下であると判定したときは、前記上位装置に割り当てる前記コマンド処理資源を減少させる請求項１に記載の記憶制御装置。
【請求項１３】
前記各上位装置は、コマンドの発行順序を識別するための連続番号を前記コマンドに対応付けて前記コマンドを発行し、
前記制御部は、前記上位装置から受信した前記コマンドの処理結果を前記上位装置に応答する場合に、前記上位装置に割り当てられている前記コマンド処理資源の量を前記連続番号に加算して前記受領可能数を算出する請求項１に記載の記憶制御装置。
【請求項１４】
前記各通信ポートは、iSCSIプロトコルを用いて、前記各上位装置との間で通信を行う請求項１に記載の記憶制御装置。
【請求項１５】
それぞれコマンドを発行する複数の上位装置にiSCSIプロトコルを介してそれぞれ接続される複数の通信ポートと、
前記各通信ポートを介して前記各上位装置と通信を行う上位通信部と、
記憶デバイスと通信を行う下位通信部と、
前記上位通信部及び前記下位通信部により使用されるキャッシュメモリと、
前記コマンドを処理するためのコマンド処理資源を管理するための制御情報を記憶する制御メモリと、
前記上位通信部、前記下位通信部、前記キャッシュメモリ及び前記制御メモリにそれぞれ接続され、前記各上位装置から前記通信ポートを介して前記上位通信部が受信した前記コマンドをそれぞれ処理し、その処理結果を前記上位通信部から前記通信ポートを介して前記各上位装置に通知する制御部と、を備え、
前記制御部は、
（１）前記各通信ポートを共用する各上位装置のうち前記コマンドを実行している所定の各上位装置間で略均等にとなるように、前記各通信ポート毎にそれぞれ用意されているポート共通資源内の前記コマンド処理資源を、前記各所定の上位装置にそれぞれ複数ずつ割り当て、
（２）前記各所定の上位装置に割り当てられた前記コマンド処理資源の量に、前記各所定の上位装置から通知されたコマンド発行順序を示すための連続番号を加算することにより、前記各所定の上位装置から受領可能なコマンド数を示す受領可能数をそれぞれ算出し、この算出された受領可能数を前記各所定の上位装置にそれぞれ通知し、
（３）前記各所定の上位装置から発行される前記コマンドの数の減少に応じて、前記各所定の上位装置に割り当てる前記コマンド処理資源を前記ポート共通資源に戻すようになっている記憶制御装置。
【請求項１６】
記憶制御装置で実行させるコマンド数を制御するための方法であって、
上位装置から受領したコマンドを処理するためのコマンド処理資源を通信ポート毎にそれぞれ管理するポート共通資源を備え、
前記通信ポートを使用する前記上位装置が前記コマンドを多重発行できるように、前記コマンド処理資源を割り当てるステップと、
前記上位装置からコマンド及び該コマンドの順序を示す連続番号をそれぞれ受領するステップと、
前記連続番号を記憶するステップと、
前記上位装置に割り当てられている前記コマンド処理資源に空きがあるか否かを判定するステップと、
前記コマンド処理資源に空きがない場合、前記上位装置に処理不能である旨を通知するステップと、
前記コマンド処理資源に空きがある場合、この空いているコマンド処理資源を用いて、前記受領したコマンドを処理するステップと、
前記ポート共通資源の残存量と所定の閾値とを比較するステップと、
前記ポート共通資源の残存量が前記所定の閾値を上回っている場合には、前記ポート共通資源の残存量から第１所定量のコマンド処理資源を確保して前記上位装置に割り当てることにより、前記上位装置に割り当てられるコマンド処理資源の量を増大させるステップと、
前記ポート共通資源の残存量が前記所定の閾値以下の場合には、前記上位装置に割当済みの前記コマンド処理資源のうち第２所定量のコマンド処理資源を前記ポート共通資源に戻すことにより、前記上位装置に割り当てられるコマンド処理資源の量を減少させるステップと、
前記上位装置に割り当てられているコマンド処理資源の量と前記受領した連続番号とに基づいて、前記上位装置から受領可能なコマンド数を示す受領可能数を算出するステップと、
前記算出された受領可能数及び前記受領したコマンドの処理結果を前記上位装置に送信させるステップと、
をそれぞれ実行する記憶制御装置のコマンド実行数制御方法。
【請求項１７】
複数の前記上位装置に送信された前記受領可能数の合計値が前記ポート共通資源の最大量を超えた場合には、前記所定の閾値を高く設定するステップをさらに備えた請求項１６に記載の記憶制御装置のコマンド実行数制御方法。
【請求項１８】
前記上位装置から発行される前記コマンドの数の変化を監視するステップと、
前記コマンドの数が定常状態から減少状態に移行したか否かを判定するステップと、
前記定常状態から前記減少状態に移行したと判定された場合には、前記上位装置に割り当てられている前記コマンド処理資源の全部を前記ポート共通資源に戻すステップと、をさらに備えた請求項１６に記載の記憶制御装置のコマンド実行数制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置のコマンド実行数制御方法に関する。
【背景技術】
【０００２】
記憶制御装置は、例えば、多数のディスクドライブをアレイ状に配設して構成され、RAID（Redundant Array of Independent Disks）に基づく記憶領域を提供する。各ディスクドライブが有する物理的な記憶領域上には、論理的な記憶領域である論理ボリュームが形成される。ホストコンピュータ（以下、ホスト）は、記憶制御装置にライトコマンドやリードコマンドを発行することにより、所望のボリュームとの間でデータの読み書きを行うことができる。
【０００３】
記憶制御装置は複数の通信ポートを備えており、各通信ポートには、それぞれ別々のホストまたは同一のホストを接続することができる。さらに、記憶制御装置とホストとをスイッチを介して接続させることにより、一つの通信ポートに複数のホストを接続することもできる。
【０００４】
各ホストは、コマンドをそれぞれ多重発行することができる。コマンドの多重発行とは、記憶制御装置からの応答を待つことなく、複数のコマンドを連続的に発行することを意味する。記憶制御装置が同時に処理可能なコマンドの数は、記憶制御装置の有するコマンド処理資源の量に依存する。ホストから発行されるコマンドの数が、記憶制御装置で処理可能なコマンド数を超えると、キューフル状態となる。記憶制御装置がホストにキューフル状態である旨を通知すると、ホストはコマンドの多重発行を停止するため、性能劣化を生じる。
【０００５】
キューフル状態となるのを防止するために、より多くのコマンド処理資源を記憶制御装置に設ける構成も考えられる。しかし、この場合は、多量のメモリ資源やハードウェア回路等のコマンド処理資源を多数用意する必要があり、現実的な解決策ではない。そこで、コマンド処理資源を追加することなく、キューフル状態となるのを防止するようにした技術も提案されている（特許文献１）。
【０００６】
この文献に記載の従来技術では、各ホストに設定されるコマンド多重数（コマンドを多重発行可能な数）の合計値が、記憶制御装置で処理可能なコマンド数を超えないように、各ホストからのアクセスを制御する。これにより、従来技術では、キューフル状態となるのを未然に防止している。
【特許文献１】特開２００５−３２２１８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
前記文献に記載の従来技術では、記憶制御装置で処理可能なコマンド数を超えないように、各ホストにコマンド多重数をそれぞれ設定する必要がある。コマンド多重数の設定を変更する場合、ホストを停止させてからコマンド多重数を設定し、そして、ホストを再起動させる必要がある。従って、従来技術では、ホスト上のアプリケーションプログラムを稼働させたままの状態で、コマンド多重数の設定を変更することはできない。このため、前記文献に記載の従来技術では、ホストを停止させずにコマンド多重数の設定を変更したり、あるいは、ホストを追加することができず、使い勝手が低い。
【０００８】
これに対し、もしも、ホスト側のコマンド多重数と記憶制御装置で処理可能なコマンド数とを調整しない場合、記憶制御装置は、処理可能なコマンド数を各ホストにそれぞれ通知する。従って、各ホストにそれぞれ通知された処理可能なコマンド数の合計が、実際に処理可能なコマンド数を上回ることになる。この結果、記憶制御装置は、処理可能なコマンド数を上回るコマンドを受領することになり、キューフル状態が頻繁に発生し、性能劣化を招く。
【０００９】
そこで、本発明の目的は、上位装置を停止させたり構成を変更したりすることなく、上位装置から多重発行されるコマンドの数を適切に制御することができるようにした記憶制御装置及び記憶制御装置の実行コマンド数制御方法を提供することにある。本発明の他の目的は、記憶制御装置と上位装置との間の通信遅延時間に応じて、記憶制御装置から上位装置に通知される受領可能数を調整することにより、記憶制御装置が上位装置にキューフル状態を通知する事態を抑制し、性能劣化を防止できるようにした記憶制御装置及び記憶制御装置の実行コマンド数制御方法を提供することにある。本発明のさらなる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１０】
上記課題を解決すべく、本発明の一つの観点に従う記憶制御装置は、それぞれコマンドを発行する複数の上位装置に接続することができる記憶制御装置であって、各上位装置と通信を行うための複数の通信ポートと、各上位装置から通信ポートを介して受信したコマンドをそれぞれ処理し、その処理結果を各上位装置にそれぞれ送信する制御部と、を備え、制御部は、（１）各通信ポート毎に用意されるポート共通資源の中から、コマンドを処理するためのコマンド処理資源を確保して、各上位装置にそれぞれ割り当て、（２）この割り当てられたコマンド処理資源の量に基づいて、各上位装置から受領可能なコマンド数を示す受領可能数を各上位装置にそれぞれ通知し、かつ、（３）各上位装置と各通信ポートとの間の通信遅延時間に基づいて、各上位装置毎に割り当てられたコマンド処理資源の量をそれぞれ制御する。
【００１１】
本発明の一態様では、制御部は、各上位装置がコマンドをそれぞれ多重発行できるように、各上位装置にコマンド処理資源をそれぞれ割り当てるようになっている。
【００１２】
本発明の一態様では、制御部は、各上位装置のうちコマンドを実行している各上位装置間で、ポート共通資源のコマンド処理資源を略均等に割り当てる。
【００１３】
本発明の一態様では、制御部は、各上位装置から発行されるコマンドの数が所定値以下に低下した場合でも、通信遅延時間が予め設定された所定の応答時間に達するまでの間は、各上位装置に割り当てられたコマンド処理資源を維持する。
【００１４】
本発明の一態様では、制御部は、予め設定された優先順位に基づいて、ポート共通資源を各上位装置間で分配する。
【００１５】
本発明の一態様では、制御部は、ポート共通資源の残存量が予め設定された所定値以下になった場合に、各上位装置に割り当てられているコマンド処理資源の一部をポート共通資源に戻す。
【００１６】
本発明の一態様では、制御部は、上位装置で実行されるコマンドの数が所定値まで低下した場合に、上位装置に割り当てられているコマンド処理資源を全てポート共通資源に戻すようになっている。
【００１７】
本発明の一態様では、制御部は、各上位装置にそれぞれ通知される受領可能数の合計がポート共通資源の最大量を超えた場合に、各上位装置に割り当てられているコマンド処理資源の一部をポート共通資源に戻すことにより、各上位装置に改めて通知する受領可能数を低下させる。
【００１８】
本発明の一態様では、制御部は、ポート共通資源の残存量が予め設定された所定値以下になった場合に、コマンド処理資源が各上位装置に略均等に割り当てられるように、各上位装置に割り当てられているコマンド処理資源の一部をポート共通資源に戻す。
【００１９】
本発明の一態様では、制御部は、上位装置から発行されるコマンドの数の減少に応じて、上位装置に割り当てるコマンド処理資源をポート共通資源に戻す。
【００２０】
本発明の一態様では、制御部は、上位装置から発行されるコマンドの数の状態変化を監視し、コマンド数が定常状態から減少状態に移行した場合には、上位装置に割り当てられているコマンド処理資源の全部をポート共通資源に戻す。
【００２１】
本発明の一態様では、制御部は、上位装置からコマンドを受領した場合、ポート共通資源の残存量が予め設定された所定の閾値を超えるか否かを判定し、残存量が閾値を超えると判定したときは、上位装置に割り当てるコマンド処理資源を増加させ、残存量が閾値以下であると判定したときは、上位装置に割り当てるコマンド処理資源を減少させるようになっている。
【００２２】
本発明の一態様では、各上位装置は、コマンドの発行順序を識別するための連続番号をコマンドに対応付けてコマンドを発行し、制御部は、上位装置から受信したコマンドの処理結果を上位装置に応答する場合に、上位装置に割り当てられているコマンド処理資源の量を連続番号に加算して受領可能数を算出する。
【００２３】
本発明の一態様では、各通信ポートは、iSCSIプロトコルを用いて、各上位装置との間で通信を行う。
本発明の他の観点に従う記憶制御装置は、それぞれコマンドを発行する複数の上位装置にiSCSIプロトコルを介してそれぞれ接続される複数の通信ポートと、各通信ポートを介して各上位装置と通信を行う上位通信部と、記憶デバイスと通信を行う下位通信部と、上位通信部及び下位通信部により使用されるキャッシュメモリと、コマンドを処理するためのコマンド処理資源を管理するための制御情報を記憶する制御メモリと、上位通信部、下位通信部、キャッシュメモリ及び制御メモリにそれぞれ接続され、各上位装置から通信ポートを介して上位通信部が受信したコマンドをそれぞれ処理し、その処理結果を上位通信部から通信ポートを介して各上位装置に通知する制御部と、を備え、制御部は、（１）各通信ポートを共用する各上位装置のうちコマンドを実行している所定の各上位装置間で略均等にとなるように、各通信ポート毎にそれぞれ用意されているポート共通資源内のコマンド処理資源を、各所定の上位装置にそれぞれ複数ずつ割り当て、（２）各所定の上位装置に割り当てられたコマンド処理資源の量に、各所定の上位装置から通知されたコマンド発行順序を示すための連続番号を加算することにより、各所定の上位装置から受領可能なコマンド数を示す受領可能数をそれぞれ算出し、この算出された受領可能数を各所定の上位装置にそれぞれ通知し、（３）各所定の上位装置から発行されるコマンドの数の減少に応じて、各所定の上位装置に割り当てるコマンド処理資源をポート共通資源に戻すようになっている。
【００２４】
本発明のさらに別の観点に従う記憶制御装置で実行されるコマンド数を制御するための方法は、上位装置から受領したコマンドを処理するためのコマンド処理資源を通信ポート毎にそれぞれ管理するポート共通資源を備え、通信ポートを使用する上位装置がコマンドを多重発行できるように、コマンド処理資源を割り当てるステップと、上位装置からコマンド及び該コマンドの順序を示す連続番号をそれぞれ受領するステップと、連続番号を記憶するステップと、上位装置に割り当てられているコマンド処理資源に空きがあるか否かを判定するステップと、コマンド処理資源に空きがない場合、上位装置に処理不能である旨を通知するステップと、コマンド処理資源に空きがある場合、この空いているコマンド処理資源を用いて、受領したコマンドを処理するステップと、ポート共通資源の残存量と所定の閾値とを比較するステップと、ポート共通資源の残存量が所定の閾値を上回っている場合には、ポート共通資源の残存量から第１所定量のコマンド処理資源を確保して上位装置に割り当てることにより、上位装置に割り当てられるコマンド処理資源の量を増大させるステップと、ポート共通資源の残存量が所定の閾値以下の場合には、上位装置に割当済みのコマンド処理資源のうち第２所定量のコマンド処理資源をポート共通資源に戻すことにより、上位装置に割り当てられるコマンド処理資源の量を減少させるステップと、上位装置に割り当てられているコマンド処理資源の量と受領した連続番号とに基づいて、上位装置から受領可能なコマンド数を示す受領可能数を算出するステップと、算出された受領可能数及び受領したコマンドの処理結果を上位装置に送信させるステップと、をそれぞれ実行する。
【００２５】
複数の上位装置に送信された受領可能数の合計値がポート共通資源の最大量を超えた場合には、所定の閾値を高く設定するステップをさらに備えてもよい。
【００２６】
上位装置から発行されるコマンドの数の変化を監視するステップと、コマンドの数が定常状態から減少状態に移行したか否かを判定するステップと、定常状態から減少状態に移行したと判定された場合には、上位装置に割り当てられているコマンド処理資源の全部をポート共通資源に戻すステップと、をさらに備えてもよい。
【００２７】
本発明の機能や手段あるいはステップは、その全部または一部をコンピュータプログラムとして構成できる場合がある。このコンピュータプログラムは、記録媒体に固定して譲渡等することができるほかに、インターネット等の通信ネットワークを介して伝送することもできる。
【発明を実施するための最良の形態】
【００２８】
以下、図面に基づき、本発明の実施の形態を説明する。本実施形態では、後述のように、記憶制御装置の有するコマンド処理資源を各通信ポート単位でそれぞれ管理し、ホストから発行されるコマンドの数の変化や到着時間に基づいて、各ホストに割り当てるコマンド処理資源を記憶制御装置内で動的に管理する。
【００２９】
図１は、本実施形態の全体概念を示す説明図である。本実施形態のストレージシステムは、例えば、少なくとも一つ以上の記憶制御装置１と、複数のホスト２とを備えて構成される。
【００３０】
各ホスト２は、例えば、サーバコンピュータ等のようなコンピュータ装置として構成されており、記憶制御装置１の通信ポート１Ａにそれぞれ接続されている。図１中では、各ホスト２が一つの通信ポート１Ａに直接的に接続されるかのように示しているが、実際には、スイッチ装置等の中継装置を介して接続される。
【００３１】
記憶制御装置１は、例えば、通信ポート１Ａと、コマンド実行部１Ｂと、記憶デバイス１Ｃと、通知部１Ｄと、資源割当制御部１Ｅと、ポート共通資源１Ｆとを備えて構成することができる。なお、記憶制御装置１の物理的構成及び論理的構成については、それぞれ後述する。
【００３２】
通信ポート１Ａは、各ホスト２と通信を行うためのものである。図１中では、一つの通信ポート１Ａだけを示すが、記憶制御装置１は、複数の通信ポート１Ａを備えることができる。通信ポート１Ａは、例えば、iSCSIプロトコルに基づいて、各ホスト２との通信を行う。
【００３３】
コマンド実行部１Ｂは、各ホスト２から通信ポート１Ａを介して受信されたコマンドを処理するためのものである。コマンドとしては、例えば、ライトコマンドやリードコマンドを挙げることができる。記憶デバイス１Ｃは、ホスト２により利用されるデータを記憶するためのものである。記憶デバイス１Ｃとしては、例えば、ハードディスク装置、半導体メモリ装置、磁気テープ装置、フレキシブルディスク装置、光ディスク装置、光磁気ディスク装置等を挙げることができる。
【００３４】
ホスト２からライトコマンドが発行された場合、コマンド実行部１Ｂは、ホスト２から受信したライトデータを記憶デバイス１Ｃに書き込む。ホスト２からリードコマンドが発行された場合、コマンド実行部１Ｂは、ホスト２から要求されたデータを記憶デバイス１Ｃから読出す。
【００３５】
通知部１Ｄは、コマンド実行部１Ｂにより実行されるコマンド処理の結果と資源割当制御部１Ｅにより算出されるコマンド受領可能数とを、通信ポート１Ａを介して各ホスト２にそれぞれ通知するものである。コマンド受領可能数とは、そのホスト２から受領可能なコマンドの数であり、記憶制御装置１は、コマンド受領可能数（以下、「受領可能数」と略す場合がある）分のコマンドをホスト２から受信して処理することができる。
【００３６】
資源割当制御部１Ｅは、通信ポート１Ａ毎にそれぞれ管理されているポート共通資源１Ｆ内のコマンド処理資源PRを、各ホスト２に割り当てるためのものである。コマンド処理資源PRとは、ホスト２から受信したコマンドを処理するために使用されるソフトウェア資源及びハードウェア資源を意味し、例えば、受信したコマンドを管理するための制御テーブル等を挙げることができる。
【００３７】
ポート共通資源１Ｆは、各通信ポート１Ａ毎に、コマンド処理資源PRをそれぞれ管理するものである。即ち、記憶制御装置１の有する全てのコマンド処理資源PRは、ポート共通資源１Ｆとして、各通信ポート１Ａ毎にそれぞれ管理されている。
【００３８】
資源割当制御部１Ｅは、通信ポート１Ａのポート共通資源１Ｆとして管理されているコマンド処理資源PRを、その通信ポート１Ａに接続された各ホスト２にそれぞれ割り当てるものである。資源割当制御部１Ｅは、例えば、コマンド処理資源PRを確保する機能１Ｅ１と、コマンド処理資源PRをポート共通資源１Ｆに戻す機能１Ｅ２と、ポート共通資源１Ｆに残っているコマンド処理資源PRの量を判定する機能１Ｅ３と、ホスト２と通信ポート１Ａの間の通信遅延時間を判定する機能１Ｅ４と、各ホスト２の優先順位を管理する機能１Ｅ５とを備えることができる。
【００３９】
資源確保機能１Ｅ１は、例えば、ポート共通資源１Ｆに残っているコマンド処理資源PRの量（残存量または残数）及び各ホスト２に予め設定されている優先順位に基づいて、各ホスト２にそれぞれコマンド処理資源PRを割り当てる機能である。
【００４０】
例えば、資源確保機能１Ｅ１は、各ホスト２がコマンドを多重で発行できるように、ポート共通資源１Ｆ内のコマンド処理資源PRを各ホスト２に略均等に分配することができる。また、資源確保機能１Ｅ１は、優先順位が高くなるにつれてより多くのコマンド処理資源PRが割り当てられるように、ポート共通資源１Ｆ内のコマンド処理資源PRを各ホスト２に分配することができる。
【００４１】
資源戻し機能１Ｅ２は、例えば、ポート共通資源１Ｆに残っているコマンド処理資源PRの量及び通信遅延時間に基づいて、各ホスト２に割り当てられたコマンド処理資源PRの全部または一部をポート共通資源１Ｆに戻す機能である。コマンド処理資源PRをポート共通資源１Ｆに戻すとは、ホスト２に割当済みのコマンド処理資源PRの割り当て状態を解除し、他のホスト２に割り当て可能な状態に変更させることを意味する。
【００４２】
例えば、資源戻し機能１Ｅ２は、ポート共通資源１Ｆ内のコマンド処理資源PR（即ち、どのホスト２にも割り当てられていない自由なコマンド処理資源PRである）の残存量が少なくなった場合に、各ホスト２に割当済みのコマンド処理資源PRの一部をポート共通資源１Ｆに戻すことができる。また、資源戻し機能１Ｅ２は、ホスト２からのコマンド発行が終了した場合、そのホスト２に割当済みのコマンド処理資源PRの全部をポート共通資源１Ｆに戻すことができる。さらに、資源戻し機能１Ｅ２は、ホスト２から到着するコマンドが無くなった場合でも、所定の応答時間（通信遅延時間）が経過するまでの間は、そのホスト２に割り当てられているコマンド処理資源PRをそのまま維持することができる。また、資源戻し機能１Ｅ２は、ホスト２から到着するコマンドの数が減少した場合に、そのホスト２に割り当てられているコマンド処理資源PRの全部または一部をポート共通資源１Ｆに戻すこともできる。
【００４３】
残存量判定機能１Ｅ３は、ポート共通資源１Ｆ内のコマンド処理資源PRの量と所定の閾値とを比較し、その判定結果を出力する。後述の実施例で述べるように、所定の閾値は、各ホスト２に通知された受領可能数とその通信ポート１Ａについて処理可能な最大のコマンド数とに基づいて調節することができる。通信ポート１Ａについて処理可能な最大のコマンド数とは、その通信ポート１Ａのポート共通資源１Ｆで管理可能な最大量のコマンド処理資源PRを意味する。以下の説明では、各通信ポート１Ａ毎に処理可能な最大のコマンド数を「コマンド処理可能数」と呼ぶ場合がある。
【００４４】
遅延時間判定機能１Ｅ４は、各ホスト２から発行されるコマンドが通信ポート１Ａに到着するときの通信遅延時間と所定の応答時間とを比較して、その判定結果を出力するものである。遅延時間判定機能１Ｅ４は、例えば、ホスト２と記憶制御装置１との間の距離が長い場合に、作動させることができる。これに対し、ホスト２と記憶制御装置１との間の距離が比較的短く、通信遅延時間を無視できるような場合、遅延時間判定機能１Ｅ４を作動させる必要はない。
【００４５】
例えば、ホスト２と記憶制御装置１とが遠く離れている場合、ホスト２から発行されたコマンドを通信ポート１Ａが受信するまでに時間を要する。従って、この通信遅延時間のために、ホスト２から記憶制御装置１に到着するコマンドが一時的に途切れてしまい、そのホスト２に関して記憶制御装置１内で実行されるコマンドの数が０になる場合がある。この場合に、そのホスト２に割り当てられているコマンド処理資源PRをポート共通資源１Ｆに戻してしまうと、その戻されたコマンド処理資源PRが別のホスト２に割り当てられる。コマンド処理資源PRの割り当てが解除されるホスト２には、割り当ての解除以前に受領可能数が通知されている。この結果、各ホスト２に通知される受領可能数の合計値がポート共通資源１Ｆの最大量のコマンド処理資源を上回ってしまい、キューフル状態を招く可能性がある。そこで、記憶制御装置１は、ホスト２からのコマンド到着が途切れた場合でも、所定の通信遅延時間が経過するまでは、そのホスト２に割り当てられているコマンド処理資源PRをそのまま維持させるようになっている。
【００４６】
優先順位管理機能１Ｅ５は、各ホスト２の優先順位をそれぞれ管理する。優先順位は、管理者が手動で設定することもできるし、自動的に設定することもできる。例えば、ホスト２上で稼働するアプリケーションプログラムの種類や、アプリケーションプログラムが利用する記憶デバイスの種類、ボリュームの種類等に基づいて、優先順位を自動的に決定する構成でもよい。
【００４７】
次に、本実施形態による記憶制御装置１の作用を説明する。まず最初に、資源割当制御部１Ｅは、通信ポート１Ａに接続されているホスト２のそれぞれに、コマンド処理資源PRを割り当てる。
【００４８】
ここで、資源割当制御部１Ｅは、各ホスト２がそれぞれ複数のコマンドを多重発行できるように、コマンド処理資源PRを複数ずつ割り当てる。これにより、各ホスト２は、記憶制御装置１からの応答を待たずにコマンドを続けて発行することができる。また、資源割当制御部１Ｅは、通信ポート１Ａに接続されている各ホスト２のうち、コマンドを発行しているホスト２（コマンド実行中のホスト２）に対してのみ、コマンド処理資源PRを割り当てることもできる。
【００４９】
ホスト２は、一つまたは複数のコマンドを発行することができる。ホスト２と記憶制御装置１とがiSCSI（internet Small Computer System Interface）プロトコルを用いて通信を行う場合、コマンドを発行するホスト２はイニシエータとなり、コマンドを受領する記憶制御装置１はターゲットとなる。
【００５０】
イニシエータであるホスト２は、SCSIコマンドフレームに通し番号（CmdSN）を付加して、SCSIコマンドフレームを記憶制御装置１に送信する。SCSIコマンドをカプセル化して形成されたフレームは、TCP/IP（Transmission Control Protocol/Internet Protocol）ネットワークを介して、ホスト２から記憶制御装置１に送信される。このネットワークには、スイッチやルータ等の中継装置を設けることができる。
【００５１】
ホスト２から発行されたコマンドを通信ポート１Ａが受信すると、コマンド実行部１Ｂは、そのホスト２に割り当てられているコマンド処理資源PRや記憶デバイス１Ｃ等を用いて、コマンドを処理する。
【００５２】
資源割当制御部１Ｅは、例えば、ポート共通資源１Ｆ内のコマンド処理資源PRの残量、そのホスト２から受信したコマンドの数の変化、通信遅延時間、そのホスト２から発行されたコマンドの実行状態（幾つのコマンドを処理中であるか）、そのホスト２に設定されている優先順位等に基づいて、受領可能数を算出する。
【００５３】
通知部１Ｄは、コマンド実行部１Ｂによるコマンド処理の結果及び資源割当制御部１Ｅで算出された受領可能数を、ホスト２に送信する。ここで、通知部１Ｄは、そのホスト２から受領した最新のCmdSNの値に受領可能数を加算することにより、MaxCmdSNを算出し、このMaxCmdSNを送信フレームに付加してホスト２に送信する。MaxCmdSNとは、イニシエータ（即ち、ここではホスト２）があと何個のコマンドを発行可能であるかを示す情報である。ホスト２は、MaxCmdSNに示された値までコマンドを続けて発行することができる。
【００５４】
資源割当制御部１Ｅによるコマンド処理資源PRの割当方法は、さらに後述する。簡単に説明すると、例えば、以下のような方針でコマンド処理資源PRを割り当てることができる。
【００５５】
（１）資源の確保
（1-1）各ホスト２にそれぞれ複数のコマンド処理資源PRを割り当てて、各ホスト２がコマンドを多重発行できるようにする。
（1-2）通信ポート１Ａに接続されるホスト２のうちコマンド実行中のホスト２に対して略均等にコマンド処理資源PRを割り当てる。
（1-3）各ホスト２に通知される受領可能数の合計値がポート共通資源１Ｆのコマンド処理資源PRの総量（最大値）を超えないように、各ホスト２に割り当てるコマンド処理資源PRを分配する。
（1-4）ホスト２と記憶制御装置１との間に考慮すべき通信遅延時間が存在する場合（ホスト２と記憶制御装置１との距離が長い場合）、コマンドの到着が途絶えた場合でも、所定時間が経過するまでは、そのホスト２に割当済みのコマンド処理資源PRをポート共通資源１Ｆに戻さずに維持する。
（1-5）各ホスト２に優先順位が設定されている場合、優先順位に従って、ポート共通資源１Ｆ内のコマンド処理資源PRを各ホスト２に分配する。
【００５６】
（２）資源の戻し
（2-1）ポート共通資源１Ｆ内のコマンド処理資源PRが０になった場合、各ホスト２に割当済みのコマンド処理資源PRの一部を、ポート共通資源１Ｆに戻す。
（2-2）ホスト２から発行されたコマンドを実行するコマンド実行数が０になった場合、そのホスト２に割り当てられているコマンド処理資源PRの全部をポート共通資源１Ｆに戻す。
（2-3）各ホスト２に通知された受領可能数の合計値がポート共通資源１Ｆのコマンド処理資源PRの総量を超えた場合、各ホスト２に通知する受領可能数を減少させて、コマンド処理資源PRをポート共通資源１Ｆ内に戻していく。
（2-4）ポート共通資源１Ｆ内のコマンド処理資源PRの残存量が０になった場合、コマンド実行中のホスト２の数でポート共通資源１Ｆの総量を除算した値まで、コマンド実行中の各ホスト２に割り当てられているコマンド処理資源PRを減少させ、ポート共通資源１Ｆに戻す。
（2-5）ホスト２と記憶制御装置１との間に考慮すべき通信遅延時間が存在しない場合（ホスト２と記憶制御装置１との距離が短い場合）、ホスト２から到着するコマンドの数が減少した場合は、そのホスト２に関して実行しているコマンド数が０になるよりも前に、そのホスト２に割り当てられているコマンド処理資源PRの全部をポート共通資源１Ｆに戻す。
【００５７】
本実施形態は、上述のように構成されるので、以下の効果を奏する。記憶制御装置１は、通信ポート１Ａ単位でコマンド処理資源PRを管理し、各ホスト２にコマンド処理資源PRを割り当てて、受領可能数を各ホスト２に通知する。各ホスト２は、記憶制御装置１から通知された受領可能数に基づいて、コマンドを発行できる。
【００５８】
従って、本実施形態では、記憶制御装置１から各ホスト２に送信されるMaxCmdSNによって、各ホスト２から発行されるコマンドの数を間接的に制御できる。これにより、記憶制御装置１で処理可能なコマンドの数を上回る数のコマンドを各ホスト２から受信する可能性を低減し、記憶制御装置１がキューフル状態となるのを抑制することができる。この結果、性能劣化を防止し、記憶制御装置１の信頼性を高めることができる。
【００５９】
また、記憶制御装置１から各ホストに送信されるMaxCmdSNによって、各ホスト２から発行されるコマンドの数を制御する構成のため、各ホスト２側のコマンド多重数を変更することなく、新たなホスト２を記憶制御装置１に追加接続したり、既に記憶制御装置１に接続されているホスト２の構成を変更することができる。即ち、本実施形態では、ホスト２を停止させることなく、オンラインのままで、ホスト２の増設や構成変更を行うことができ、使い勝手が向上する。
【００６０】
本実施形態では、記憶制御装置１とホスト２とが離れている場合、即ち、考慮すべき通信遅延時間が存在する場合は、そのホスト２に関して実行されているコマンドの数（コマンド実行数）が０になった場合でも、所定時間が経過するまでの間は、そのホスト２に割り当てられているコマンド処理資源PRをそのまま維持する。
【００６１】
従って、ホスト２から記憶制御装置１に到着するコマンドが一時的に途絶えた場合でも、そのホスト２に割り当てられているコマンド処理資源PRがポート共通資源１Ｆに戻されるのを防止できる。この結果、各ホスト２に通知される受領可能数の合計値がポート共通資源１Ｆの総量を超える可能性を低減することができ、キューフル状態となるのを防止することができる。
【００６２】
本実施形態では、記憶制御装置１とホスト２とが近接している場合、即ち、考慮すべき通信遅延時間が存在しない場合は、ホスト２から到着するコマンドの数の減少に応じて、そのホスト２に割り当てられているコマンド処理資源PRを減少させる。従って、あるホスト２におけるコマンドの多重発行が完全に終了するよりも前に、そのホスト２に割り当てられているコマンド処理資源PRを他のホスト２に割り当てることができる。この結果、通信ポート１Ａ単位で管理されているコマンド処理資源PRを効率的に利用することができ、性能劣化を防止することができる。
【００６３】
本実施形態では、各ホスト２に優先順位を設定することができ、優先順位に従ってコマンド処理資源PRを割り当てることができる。従って、記憶制御装置１側において、各ホスト１の優先順位に応じて適切にコマンド処理資源PRを分配することができる。以下、本実施形態を詳細に説明する。
【実施例１】
【００６４】
図２は、本実施例による記憶制御装置１０を含むストレージシステムの全体構成を示す説明図である。このストレージシステムは、例えば、少なくとも一つ以上の記憶制御装置１０と、複数のホスト２０と、少なくとも一つ以上のスイッチ３０とを備えて構成することができる。また、後述のように、記憶制御装置１０は、通信ポート１０１を有するコントローラ１００と、記憶デバイス２１０を有する記憶部２００とを備えている。
【００６５】
図１との対応関係を説明すると、記憶制御装置１０は図１中の記憶制御装置１に、ホスト２０は図１中のホスト２に、通信ポート１０１は図１中の通信ポート１Ａに、記憶デバイス２１０は図１中の記憶デバイス１Ｃに、それぞれ対応する。図１中のコマンド実行部１Ｂ、通知部１Ｄ、資源割当制御部１Ｅ及びポート共通資源１Ｆは、コントローラ１００の機能としてそれぞれ実現される。
【００６６】
ネットワーク構成を説明する。図２に示すように、記憶制御装置１０は、複数の通信ポート１０１を備えている。各通信ポート１０１には、スイッチ３０を介して、一つまたは複数のホスト２０がそれぞれ接続されている。図中では、説明の便宜上、左右のスイッチ３０にのみホスト２０をそれぞれ接続するかのように示しているが、各スイッチ３０には複数のホスト２０をそれぞれ接続可能である。従って、各通信ポート１０１には、スイッチ３０を介して、複数のホスト２０をそれぞれ接続可能である。
【００６７】
記憶制御装置１０の全体構成を簡単に説明する。記憶制御装置１０は、複数の（例えば２台の）コントローラ１００を備えている。各コントローラ１００は、同一の構成を備えており、記憶制御装置１０の動作をそれぞれ制御する。各コントローラ１００は、それぞれ複数の通信ポート１０１を備えており、各通信ポート１０１を介して複数のホスト２０に接続されている。これら各コントローラ１００は、互いに相手方をバックアップすることができ、一方のコントローラ１００に障害が発生した場合でも、他方のコントローラ１００によって、記憶制御装置１０の動作を継続させることができる。即ち、記憶制御装置１０は、複数のコントローラ１００を備えたデュアルコントローラ構造を採用しており、耐障害性を高めている。コントローラ１００の構成については図３と共に後述する。
【００６８】
記憶部２００は、記憶容量を提供するためのものである。記憶部２００は、複数の記憶デバイス２１０を備えている。記憶デバイス２１０としては、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス、磁気テープデバイス、フレキシブルディスクデバイス等のデータを読み書き可能な種々のデバイスを利用可能である。
【００６９】
記憶デバイスとしてハードディスクデバイスを用いる場合、例えば、FC（Fibre Channel）ディスク、SCSI（Small Computer System Interface）ディスク、SATAディスク、ATA（AT Attachment）ディスク、SAS（Serial Attached SCSI）ディスク等を使用することができる。記憶デバイスとして半導体メモリデバイスを用いる場合、例えば、フラッシュメモリ、FeRAM（Ferroelectric Random Access Memory）、MRAM（Magnetoresistive Random Access Memory）、相変化メモリ（Ovonic Unified Memory）、RRAM（Resistance RAM）」等の種々のメモリデバイスを利用可能である。
【００７０】
複数の記憶デバイス２１０によってRAIDグループ（パリティグループ）２２０を構成することができる。そして、RAIDグループ２２０内の複数の記憶デバイス２１０に跨るようにして、論理ボリューム２３０を設定することができる。なお、一つの記憶デバイス２１０に一つまたは複数の論理ボリューム２３０を設定することもできる。各ホスト２０は、論理ボリューム２３０をアクセス対象として認識し、論理ボリューム２３０に対してデータの読み書きを行う。
【００７１】
なお、図２中では、記憶制御装置１０内に記憶部２００を設ける場合を示しているが、これに限らず、記憶制御装置１０の筐体外部に記憶部２００を設けてもよい。
【００７２】
図３は、記憶制御装置１０の構成を部分的に示す説明図である。説明の便宜上、図３には、一方のコントローラ１００の構成が示されている。コントローラ１００は、例えば、複数の通信ポート１０１Ａ，１０１Ｂと、ホスト側転送回路１１０と、ドライブ側転送回路１２０と、キャッシュメモリ１３０と、プロセッサ１４０及び制御テーブル１５０Ａ，１５０Ｂを備えて構成される。
【００７３】
ホスト側転送回路１１０は、ホスト２０との通信を行うための回路である。ホスト側転送回路１１０は、例えば、iSCSIプロトコルに基づいて、各ホスト２０との通信をそれぞれ独立に行うことができる。
【００７４】
ドライブ側転送回路１２０は、記憶部２００内の各記憶デバイス２１０との間の通信を行うものである。ドライブ側転送回路１２０は、例えば、FCP（Fibre Channel Protocol）に基づいて、各記憶デバイス２１０との間のデータ入出力を行う。
【００７５】
キャッシュメモリ１３０は、データを一時的に記憶するメモリデバイスである。キャッシュメモリ１３０には、ホスト２０から書き込まれたデータ（ライトデータ）や、ホスト２０により読み出されたデータ（リードデータ）が記憶される。
【００７６】
例えば、ホスト２０がライトデータの書込みをコントローラ１００に要求した場合、コントローラ１００は、ホスト２０からホスト側転送回路１１０を介して受信したライトデータを、キャッシュメモリ１３０に記憶させる。そして、コントローラ１００は、ホスト２０にライトコマンドの処理が完了した旨を報告する。その後、コントローラ１００は、キャッシュメモリ１３０に記憶させたライトデータを、ドライブ側転送回路１２０を介して、記憶デバイス２１０に書き込ませる。なお、ライトデータを記憶デバイス２１０に書き込んだ後で、ホスト２０にライトコマンドの処理完了を報告してもよい。
【００７７】
ホスト２０がコントローラ１００にデータの読出しを要求した場合、コントローラ１００は、ホスト２０の要求するデータがキャッシュメモリ１３０に記憶されているか否かを調べる。ホスト２０の要求するデータがキャッシュメモリ１３０に記憶されている場合、コントローラ１００は、キャッシュメモリ１３０に記憶されているデータを読出し、この読み出したデータをホスト側転送回路１１０を介して、ホスト２０に送信させる。ホスト２０の要求するデータがキャッシュメモリ１３０に記憶されていない場合、コントローラ１００は、ドライブ側転送回路１２０を介して、記憶デバイス２１０からデータを読出し、この読み出したデータをキャッシュメモリ１３０に記憶させる。そして、コントローラ１００は、キャッシュメモリ１３０に記憶されたデータを、ホスト側転送回路１１０を介して、ホスト２０に送信させる。
【００７８】
プロセッサ１４０は、一つまたは複数のCPU（Central Processing Unit）コアを備えており、コントローラ１００の動作を制御する。プロセッサ１４０は、ホスト側転送回路１１０，ドライブ側転送回路１２０，キャッシュメモリ１３０，記憶デバイス２１０，制御テーブル１５０Ａ，１５０Ｂにそれぞれ接続されている。プロセッサ１４０は、制御テーブル１５０Ａ，１５０Ｂを用いることにより、後述のように、各ホスト２０に割り当てるコマンド処理資源の量をポート単位でそれぞれ管理する。
【００７９】
制御テーブル１５０Ａ，１５０Ｂは、例えば、書き換え可能な不揮発メモリのようなメモリデバイスに設けることができる。制御テーブル１５０Ａ，１５０Ｂは、各通信ポート１０１Ａ，１０１Ｂにそれぞれ対応している。各制御テーブル１５０Ａ，１５０Ｂは、同一構造であるため、以下、特に区別する場合を除き「制御テーブル１５０」と呼ぶ。
【００８０】
制御テーブル１５０は、例えば、ポート単位コマンド処理管理テーブルＴ１と、ポート単位コマンド処理管理資源残数テーブルＴ２と、ポート単位実行コマンド数テーブルＴ３と、コネクション管理テーブルＴ４及びポート単位実行コネクション数テーブルＴ５とを備えている。なお、後述する実施例では、これらＴ１〜Ｔ５以外の他のテーブルも使用される。次に、これら各テーブルＴ１〜Ｔ５についてそれぞれ説明する。
【００８１】
図４は、ポート単位コマンド処理管理テーブルＴ１を示す説明図である。ポート単位コマンド処理管理テーブルＴ１は、各通信ポート１０１Ａ，１０１Ｂ（以下、特に区別する場合を除き「ポート１０１」と呼ぶ）毎に、コマンド処理資源を管理するためのテーブルである。図４に示すように、本実施例の記憶制御装置１０は、各ポート１０１毎にそれぞれ最大ｎ個のコマンドを処理可能である。図４に示すコマンド処理情報は、コマンド処理資源に該当するもので、ホスト２０から受信した各コマンド毎にそれぞれ一つずつのコマンド処理情報が設定される。
【００８２】
図５は、ポート単位コマンド処理管理資源残数テーブルＴ２を示す説明図である。以下、このテーブルＴ２を残数テーブルＴ２と略す場合がある。残数テーブルＴ２は、各ポート１０１単位で管理されているコマンド処理資源（コマンド処理情報）の残存量を管理するものである。残存量とは、いずれのホスト２０にも割り当てられていない未使用のコマンド処理資源である。図中では、各通信ポート１０１におけるコマンド処理資源の残数（残存量）を「RPR」と表示する場合がある。
【００８３】
図６は、ポート単位実行コマンド数テーブルＴ３を示す説明図である。以下、このテーブルＴ３を、実行コマンド数テーブルＴ３と略す場合がある。実行コマンド数テーブルＴ３は、ポート１０１毎に、実行されているコマンドの数、つまり実行中のコマンドの数を管理するものである。即ち、実行コマンド数テーブルＴ３は、関連づけられている通信ポート１０１を介して受信したコマンドが現在幾つ実行されているかを管理する。図中では、実行コマンド数を「ENp」と略記する場合がある。
【００８４】
図７は、コネクション管理テーブルＴ４を示す説明図である。コネクション管理テーブルＴ４は、各ポート１０１毎に、接続されているホスト２０を管理するものである。即ち、コネクション管理テーブルＴ４は、関連づけられている通信ポート１０１に接続されているホスト２０を管理する。従って、コネクション管理テーブルＴ４は、ホスト管理テーブルと呼ぶこともできる。
【００８５】
コネクション管理テーブルＴ４は、例えば、コネクション管理情報と、処理資源確保数（AR）と、実行コマンド数（ENc）と、実行コマンド数履歴Ｔ４１と、定常状態フラグと、ホスト２０から受領した最新のCmdSNと、ホスト２０に報告された最新のMaxCmdSNと、コマンド実行数が０になった開始時刻と、コマンド実行数が０になった期間とを対応付けて管理することができる。なお、これらの各情報を全て備えている必要はなく、一部の情報は、後述の実施例で使用される。
【００８６】
コネクション管理情報は、ホスト２０と通信ポート１０１との間のコネクションを管理するための情報であり、例えば、iSCSI_Name等を含む。処理資源確保数（AR）とは、ホスト２０に割り当てられているコネクションについて確保されたコマンド処理資源の数を示す。即ち、処理資源確保数（AR）は、そのホスト２０用に予約されているコマンド処理資源の数を示す。実行コマンド数（ENc）は、そのホスト２０に関して実行されているコマンドの数、つまり、実行中のコマンド数を示す。従って、ポート単位の実行コマンド数（ENp）は、そのポート１０１に接続されている各ホスト２０の実行コマンド数（ENc）の総和となる。
【００８７】
実行コマンド数履歴Ｔ４１は、そのホスト２０に関して実行されたコマンドの数の履歴を示す。実行コマンド数の履歴については、図１４と共に後述する。実行コマンド数履歴Ｔ４１は、後述の実施例で使用される。
【００８８】
定常状態フラグは、そのホスト２０に関する実行コマンド数（ENc）の状態を示す情報である。即ち、定常状態フラグは、そのホスト２０によるコマンドの発行状態を示す情報である、ホスト２０が定常状態であると判定された場合、定常状態フラグに”１”がセットされる。ホスト２０が定常状態ではないと判定された場合、定常状態フラグに”０”がセットされる。定常状態とは、そのホスト２０について実行される実行コマンド数（ENc）の値が安定している状態を示す。定常状態以外の状態とは、減少状態を挙げることができる。減少状態とは、そのホスト２０について実行される実行コマンド数（ENc）の値が定常状態から減少した状態を示す。定常状態フラグは、実行コマンド数履歴Ｔ４１と共に後述の実施例で使用される。
【００８９】
受領CmdSNとは、上述のように、そのホスト２０から受領した最新のコマンドに付加されている通し番号である。報告MaxCmdSNとは、上述の通り、記憶制御装置１０からホスト２０に通知されたMaxCmdSNを示す。MaxCmdSNは、あと何個のコマンドを発行できるかを示す情報である。
【００９０】
実行数０開始時刻とは、上述の通り、そのホスト２０に関して実行されるコマンド数（ENc）が０になった最初の時刻を示す。実行数０期間とは、そのホスト２０の実行コマンド数（ENc）が０になった期間を示す。これら実行数０開始時刻及び実行数０期間の情報は、後述する別の実施例で使用される。
【００９１】
図８は、ポート単位実行コネクション数テーブルＴ５を示す説明図である。このテーブルＴ６は、通信ポート１０１で実行されているコネクションの数（EC）を管理するものである。即ち、このテーブルＴ６は、その通信ポート１０１に接続されており、コマンドを発行しているホスト２０の数をポート１０１毎に管理している。以下、このテーブルＴ６を実行コネクション数テーブルＴ５と呼ぶ場合がある。
【００９２】
次に、本実施例による記憶制御装置１０の動作について、フローチャートを参照しながら説明する。各フローチャートは、処理の概要を示しており、実際のプログラムとは相違する場合がある。なお、ステップを「Ｓ」と略記する。
【００９３】
図９は、コマンド受領処理を示すフローチャートである。この処理は、記憶制御装置１０により実行される。記憶制御装置１０は、ホスト２０からコマンドを受信したか否かを判定する（Ｓ１１）。
【００９４】
コマンドが受信されたと判定した場合（S11:YES）、記憶制御装置１０は、そのコマンドを受信した通信ポート１０１について、実行コマンド数（ENp）を１つだけ増加させる（Ｓ１２）。さらに、記憶制御装置１０は、その受信されたコマンドに関するコネクションの実行コマンド数（ENc）を１つだけ増加させる（Ｓ１３）。つまり、そのコマンドを発行したホスト２０について、実行コマンド数（ENc）を１つ増加させる。
【００９５】
記憶制御装置１０は、そのコネクション（ホスト２０）に関して最初に受信されたコマンドであるか否かを判定する（Ｓ１４）。即ち、そのホスト２０から最初に発行されたコマンドであるか否かを判定する。そのホスト２０から発行された最初のコマンドである場合（S14:YES）、記憶制御装置１０は、その最初のコマンドを受信した通信ポート１０１について、実行コネクション数（EC）を１つだけ増加させる（Ｓ１５）。
【００９６】
記憶制御装置１０は、Ｓ１１で受信したコマンドに付加されているCmdSNを記憶する（Ｓ１６）。記憶制御装置１０は、ポート単位コマンド処理管理テーブルＴ１が満杯か否かを判定する（Ｓ１７）。即ち、Ｓ１１で受信したコマンドを処理するために必要なコマンド処理資源が存在するか否かを判定する。
【００９７】
コマンド処理資源がある場合（S17:NO）、記憶制御装置１０は、Ｓ１１で受信したコマンドを処理する（Ｓ１８）。記憶制御装置１０は、そのコマンドがライトコマンドであれば、ホスト２０から受信したライトデータを記憶デバイス２１０に書込む。記憶制御装置１０は、そのコマンドがリードコマンドであれば、要求されたデータをキャッシュメモリ１３０または記憶デバイス２１０のいずれかから読み出す。
【００９８】
これに対し、Ｓ１１で受信したコマンドを処理するためのコマンド処理資源が無い場合（S17:YES）、そのコマンドを処理することができない。そこで、記憶制御装置１０は、キューフル状態である旨をホスト２０に送信する（Ｓ１９）。ホスト２０は、記憶制御装置１０がキューフル状態であることを確認すると、例えば、所定時間が経過するのを待ってから再びコマンドを発行する。
【００９９】
図１０は、記憶制御装置１０からホスト２０に応答を返す処理を示すフローチャートである。以下に述べるように、記憶制御装置１０は、ホスト２０から受信したコマンドの処理結果をホスト２０に通知（応答）する場合に、そのホスト２０に発行を許可するコマンド数を合わせて通知する。ホスト２０に許可されるコマンドの発行数（あと幾つのコマンドを発行できるかを示す数）は、記憶制御装置１０からホスト２０に送信されるMaxCmdSNによって通知される。
【０１００】
記憶制御装置１０は、Ｓ１１で受信したコマンドの処理が完了したか否かを判定し（Ｓ２１）、コマンドの処理が完了した場合（S21:YES）、そのコマンドを受信した通信ポート１０１の実行コマンド数ENpを１つ減少させる（Ｓ２２）。これに続いて、記憶制御装置１０は、そのコネクション（ホスト２０）の実行コマンド数ENcを１つ減少させる（Ｓ２３）。
【０１０１】
記憶制御装置１０は、そのコネクションの実行コマンド数ENcが０になったか否かを判定する（Ｓ２４）。ENc＝０と判定された場合は（S24:YES）、そのコネクションを介して受信したコマンドの処理が全て終了しており、未処理のコマンドが一つも存在しない場合である。つまり、ENc＝０となったホスト２０がコマンドを発行していない状態であるため、記憶制御装置１０は、通信ポート１０１の実行コネクション数ECを１つ減少させる。実行コネクション数ECは、コマンドを発行しているホスト２０（コマンド実行中のホスト２０）を管理するための情報だからである。
【０１０２】
そのコネクションの実行コマンド数ENcが０ではない場合（S24:NO）、記憶制御装置１０は、ホスト２０に通知するためのMaxCmdSNを以下のように算出する。まず、記憶制御装置１０は、テーブルＴ２を参照することにより、そのコネクションに関連する通信ポート１０１の有するコマンド処理資源（プールされたコマンド処理資源）の残数RPRが閾値Th1を超えているか否かを判定する（Ｓ２６）。つまり、記憶制御装置１０は、その通信ポート１０１に関連してプールされている未使用のコマンド処理資源に閾値Th1以上の余裕があるか否かを判定する。
【０１０３】
残数RPRが閾値Th1以下の場合（S26:NO）、記憶制御装置１０は、コネクションの処理資源確保数ARからM1個のコマンド処理資源を残数RPRに戻す（Ｓ２７）。つまり、ポート単位の共通資源（プール資源）の残数RPRがTh1以下の場合、記憶制御装置１０は、そのコネクションに割り当てられているコマンド処理資源のうちM1個のコマンド処理資源を共通資源に戻す（AR=AR-M1，RPR=RPR+M1）。これにより、その通信ポート１０１において自由に使用可能なコマンド処理資源の量が増大する。従って、例えば、別のホスト２０へのコマンド処理資源の割当量を増加させたり、または、新たなホスト２０の追加等に対応することができる。
【０１０４】
残数RPRが閾値Th1を超えている場合（S26:YES）、記憶制御装置１０は、残数RPRからM2個のコマンド処理資源を新たに獲得して、そのコネクションに割り当てられているコマンド処理資源の数ARを増加させる（Ｓ２８）。つまり、記憶制御装置１０は、通信ポート１０１単位でプールされている未使用のコマンド処理資源を遊ばせておかず、できるだけ多くのコマンド処理資源をコマンド発行中のホスト２０に分配する（RPR=RPR-M2，AR=AR+M2）。
【０１０５】
記憶制御装置１０は、前記Ｓ２６，Ｓ２７，Ｓ２８で述べたように、残数RPRと閾値Th1との比較結果に基づいて、コネクションに割り当てるコマンド処理資源の数（処理資源確保数）ARを更新させる。そして、記憶制御装置１０は、この更新されたARをCmdSNに加算することにより、MaxCmdSNを算出する（Ｓ２９）。
【０１０６】
そして、記憶制御装置１０は、そのコネクションの実行コマンド数ENcが０か否かを再び判定し（Ｓ３０）、ENcが０でないと判定された場合に（S30:NO）、ホスト２０に応答を返す（Ｓ３１）。記憶制御装置１０からホスト２０に送信される応答には、図９中のＳ１８で処理されたコマンドの処理結果とＳ２９で算出されたMaxCmdSNとが含まれている。
【０１０７】
既に述べたように、MaxCmdSNは、ホスト２０から受信して処理可能なコマンド数を示している。つまり、MaxCmdSNは、あと何個のコマンドをホスト２０が発行できるかを示す。ホスト２０は、CmdSNがMaxCmdSNに到達するまで、新たなコマンドを発行することができる。
【０１０８】
ホスト２０に応答するよりも前に、そのホスト２０に関して実行中のコマンド数ENcが０になった場合（S30:YES）、記憶制御装置１０は、そのホスト２０に割り当てられていたコマンド処理資源の全てをポート単位の共通資源に戻す（Ｓ３２）。ENc＝０となったホスト２０は、コマンドの発行を終了しており、コマンド処理資源を割り当てておく必要がないためである。
【０１０９】
図１１は、図１０中のＳ２６で使用する閾値Th1を設定するための処理を示すフローチャートである。この処理は、各通信ポート１０１毎にそれぞれ実行される。記憶制御装置１０は、コマンド処理可能数ｎと通信ポート１０１の実行コマンド数ENpとを比較する（Ｓ４１）。コマンド処理可能数ｎとは、その通信ポート１０１に関して処理可能なコマンドの総数を示す。即ち、コマンド処理可能数ｎは、その通信ポート１０１で管理されているコマンド処理資源の総量である。
【０１１０】
通信ポート１０１に関して実行中のコマンド数ENpがコマンド処理可能数ｎを超えている場合（ｎ＜ENp）、記憶制御装置１０は、閾値Th1を増大させる（Ｓ４１）。例えば、ｎが５１２または１０２４の場合、記憶制御装置１０は、閾値Th1を６４に設定することができる。
【０１１１】
これに対し、コマンド処理可能数ｎが、その通信ポート１０１に関して実行中のコマンド数ENp以上である場合（ｎ≧ENp）、記憶制御装置１０は、閾値Th1の値を低下させる（Ｓ４２）。例えば、記憶制御装置１０は、閾値Th1を０に設定する。
【０１１２】
つまり、本実施例では、閾値Th1の初期値を０に設定している。そして、通信ポート１０１に関して実行中のコマンドの総数ENpが、その通信ポートに割り当てられているコマンド処理資源の総数ｎを超えた場合、記憶制御装置１０は、閾値Th1を高く設定する（Ｓ４１）。これにより、図１０で述べたように、残数RPRがTh1を下回る可能性が高くなり（S26:NO）、プール資源としてポート１０１毎に管理されるコマンド処理資源の数が増大する。この結果、図１０中のＳ２９で算出されるMaxCmdSNの値が低下し、ホスト２０に許可されるコマンド発行数が減少する。
【０１１３】
これに対し、実行コマンド数ENcがコマンド処理可能数ｎ以下の場合、閾値Th1は０に戻され、より多くのコマンド処理資源がホスト２０に割り当てられる。これにより、ホスト２０に許可されるコマンド発行数が増大し、ホスト２０は、より多くのコマンドを多重発行することができる。
【０１１４】
上述のように閾値Th1を自動的に変更するのは以下の理由による。本実施例では、一方のホスト２０の実行コマンド数ENcが０になると、一方のホスト２０に割り当てられていたコマンド処理資源は、全て管理資源残数RPRに戻される（Ｓ３２）。そして、ポート単位のプール資源に戻されたコマンド処理資源は、他方のホスト２０に割り当てられる（Ｓ２７）。
【０１１５】
従って、一方のホスト２０に許可されているコマンドの発行数と他方のホスト２０に許可されたコマンドの発行数との合計値が、そのポート１０１に関して処理可能なコマンドの総数ｎを超過する。コマンド発行を許可された総数がコマンドを処理可能な総数ｎを超えた状態で、一方のホスト２０及び他方のホスト２０のそれぞれからコマンドが発行されると、キューフル状態を招くおそれがある。
【０１１６】
そこで、本実施例では、図１１と共に述べたように、コマンド処理資源の残数RPRの大小に応じて閾値Th1の値を調整することにより、発行が許可されたコマンドの総数がコマンド処理可能数ｎを超過する事態を自動的に解消させる。つまり、超過して許可されたコマンドが各ホスト２０から発行されるよりも前に、コマンド発行の許可数が実際の処理可能数ｎを超過している状態（超過状態）を解消させることができる。
【０１１７】
図１２は、図１０中のＳ２７，Ｓ２８で使用されるM1，M2の値を設定するための処理を示す。この処理も各通信ポート１０１毎にそれぞれ実行される。ここで、M1は、ホスト２０に割り当てられているコマンド処理資源を減らしてプール資源（RPR）に戻す数であるから、資源減少数または戻し数と呼ぶことができる。M2は、ホスト２０に追加して割り当てられるコマンド処理資源の数であるから、資源追加数または確保数と呼ぶことができる。
【０１１８】
図１２を参照する。記憶制御装置１０は、通信ポート１０１に接続されている各ホスト２０にそれぞれ割り当てるべきコマンド処理資源の基準値ｑを算出する（Ｓ５１）。この割り当て基準値ｑは、例えば、その通信ポート１０１に関連づけられているコマンド処理資源の総量（コマンド処理可能数ｎ）を、コマンドを発行しているホスト２０の数（実行コネクション数EC）で除算することにより、求められる（ｑ＝ｎ／EC）。即ち、記憶制御装置１０は、その通信ポート１０１に接続されている全てのホスト２０のうち、実際にコマンドを発行しているホスト２０の数（EC）で、コマンド処理資源の総量（ｎ）を割り、基準値ｑを算出する。
【０１１９】
記憶制御装置１０は、ホスト２０に割り当てられているコマンド処理資源の数ARと算出された基準値ｑとを比較する（Ｓ５２）。既に割当済みのコマンド処理資源の数ARが基準値ｑ以上の場合、記憶制御装置１０は、ARから基準値ｑを差し引くことにより、戻し数M1を算出する（Ｓ５３）。これにより、基準値ｑ以上のコマンド処理資源が割り当てられているホスト２０から、M1（M1=AR-q）個のコマンド処理資源が取り除かれて、プール資源（RPR）に戻される（図１０のＳ２７）。
【０１２０】
これに対し、割当済みのコマンド処理資源の数ARの方が基準値ｑよりも小さい場合、記憶制御装置１０は、基準値ｑからARを差し引くことにより、確保数M2を算出する（Ｓ５４）。これにより、基準値ｑよりも少ないコマンド処理資源しか割り当てられていないホスト２０に、M2（M2=q-AR）個のコマンド処理資源が追加して割り当てられる（図１０のＳ２８）。
【０１２１】
図１２と共に述べたように、本実施例では、ホスト２０に割り当てられているコマンド処理資源を増減させる量M1，M2を、基準値ｑに基づいて自動的に調節する。この理由は以下による。即ち、ホスト２０に割り当てたコマンド処理資源をプール資源（RPR）に戻す回数が増加すると、この戻されたコマンド処理資源が別のホスト２０に割り当てられてしまい、上述の超過状態を招く可能性がある。そこで、本実施例では、基準値ｑに基づいて、各ホスト２０に割り当てるコマンド処理資源の数を調整する。これにより、ホスト２０に割当済みのコマンド処理資源が必要以上にプール資源に戻される事態を抑制することができ、前記超過状態の発生を抑制することができる。
【０１２２】
本実施例は、上述のように構成されるので、以下の効果を奏する。本実施例では、記憶制御装置１０は、通信ポート１０１単位でコマンド処理資源をそれぞれ管理し、各ホスト２０にコマンド処理資源を割り当てて、受領可能数をMaxCmdSNにより各ホスト２０に通知する。従って、各ホスト２０は、記憶制御装置１０から通知された受領可能数に基づいて、コマンドを発行でき、記憶制御装置１０は、各ホスト２０から発行されるコマンドの数を制御することができる。これにより、記憶制御装置１０がキューフル状態となる可能性を低減し、記憶制御装置１０の性能が劣化するのを防止することができ、記憶制御装置１０の信頼性を高めることができる。
【０１２３】
本実施例では、MaxCmdSNの値を適切に設定することにより、各ホスト２０から発行されるコマンドの数を制御する。従って、既に記憶制御装置１０に接続されているホスト２０の構成を変更する場合や、新しいホスト２０を記憶制御装置１０に接続するような場合でも、各ホスト２０側のコマンド多重数を変更する必要がない。従って、ホスト２０を停止させることなく、オンラインのままで、ホスト２０の増設や構成変更を行うことができ、使い勝手が向上する。
【０１２４】
本実施例では、ホスト２０にコマンド処理資源を追加割り当てするか、または、ホスト２０に割り当てられているコマンド処理資源を減少させるかを判断するための閾値Th1を、通信ポート１０１に関連づけられているコマンド処理資源の総量ｎとその通信ポート１０１に関して実行中のコマンド数ENpとに基づいて、設定する。これにより、各ホスト２０にそれぞれ許可されるコマンド発行数の合計値が、実際に処理可能なコマンド数ｎを超える事態の発生を抑制することができ、キューフル状態となるのを抑制することができる。
【０１２５】
本実施例では、通信ポート１０１に関連づけられているコマンド処理資源の総量ｎを、その通信ポート１０１に向けてコマンドを発行しているホスト２０の数で除算することにより、基準値ｑを算出し、この基準値ｑに基づいて、各ホスト２０に割り当てるコマンド処理資源の量を調節する。これにより、必要以上のコマンド処理資源がホスト２０に割り当てられたり、または、ホスト２０に割り当てられているコマンド処理資源が必要以上にプール資源に戻されたりするのを防止することができる。これにより、上述の超過状態の発生を抑制し、信頼性を高めることができる。
【実施例２】
【０１２６】
図１３〜図１５に基づいて第２実施例を説明する。本実施例を含む以下の各実施例は、上述した第１実施例の変形例に相当する。本実施例では、ホスト２０から発行されたコマンドの実行数ENcに基づいてコマンド発行の終期を予測し、そのホスト２０に割り当てられているコマンド処理資源を早期にプール資源（RPR）に戻す。
【０１２７】
本実施例は、例えば、ホスト２０と記憶制御装置１０との距離が比較的近く、通信遅延時間が少ない場合に適用することができる。図１３は、ホスト２０（イニシエータ）から記憶制御装置１０（ターゲット）に発行されるコマンドの様子と、そのホスト２０から受信したコマンドを記憶制御装置１０内で実行する数ENcとの関係を模式的に示す説明図である。
【０１２８】
図１３に示すように、ホスト２０は、記憶制御装置１０からの応答を待たずに、複数のコマンドを連続的に発行することができる。記憶制御装置１０は、ホスト２０から受信したコマンドを処理し、その処理結果にMaxCmdSNを付加して応答する。従って、ホスト２０がコマンドを発行する時期と記憶制御装置１０が応答する時期との間には、多少のタイムラグが生じる。
【０１２９】
図１３の下側に示すように、そのホスト２０に関して記憶制御装置１０内で実行されるコマンドの数ENcは、ホスト２０からのコマンドを受信するたびに増加していく。そして、先に受信したコマンドの処理が完了し、その処理結果がホスト２０に返信されると、コマンド実行数ENcはその分だけ減少する。従って、ホスト２０が略一定の頻度でコマンドを多重発行し、記憶制御装置１０が略一定の速度でコマンドを処理する場合、コマンド実行数ENcの値は、ある時期から略一定となる。このコマンド実行数ENcが略一定となる期間を、本明細書では、コマンド実行数ENcの定常状態と呼ぶ。
【０１３０】
ホスト２０上のデータ処理が一段落してコマンドの発行が停止された場合、記憶制御装置１０内でのコマンド処理は継続しているため、コマンド実行数ENcの値は、徐々に減少していく。本明細書では、コマンド実行数ENcが定常状態から減少する状態を減少状態と呼ぶ。
【０１３１】
図１４は、コマンド実行数ENcの変化を模式的に示す説明図である。ホスト２０から１番目のコマンド（＃１）を受信すると、記憶制御装置１０の受け付けたコマンドの数は「１」となる。この１番目のコマンドの処理は完了していないので、応答したコマンドの数は「０」である。従って、１番目のコマンドを記憶制御装置１０が受信した時点では、コマンド実行数ENcは、１となる（ENc＝受け付けたコマンドの数−応答したコマンドの数）。
【０１３２】
１番目のコマンドの処理結果がホスト２０に通知されるまでの間に、１番目〜４番目のコマンド（＃４）を記憶制御装置１０が受信したと仮定すると、実行コマンド数ENcは、「１」→「２」→「３」→「４」と徐々に増加していく。この状態を増加状態と呼ぶこともできる。
【０１３３】
最初に受信したコマンド（＃１等）の処理が完了してホスト２０に通知される時期に達すると、実行コマンド数ENcの値は、図示の例では「４」で安定する。実行中のコマンド数ENcの値が所定回数以上続けて、同一の値（この例では「４」）を示す場合、記憶制御装置１０は、増加状態から定常状態に移行したと判定することができる。
【０１３４】
同様に、実行コマンド数ENcの値が定常状態の値から減少し始めた場合、記憶制御装置１０は、定常状態から減少状態への移行を検出することができる。
【０１３５】
図１５は、ホスト２０からのコマンド発行状態（コマンド発行の終期）を検出して、コマンド処理資源をプール資源（RPR）に戻すための処理を示す。このフローチャートは、記憶制御装置１０によって、各通信ポート１０１毎に実行される。
【０１３６】
まず、記憶制御装置１０は、過去AR回分の実行コマンド数履歴テーブルＴ４１を更新し（Ｓ６１）、過去AR回分の実行コマンド数ENcが略一定であるか否かを判定する（Ｓ６２）。上述のように、ARとは、ホスト２０に割り当てられているコマンド処理資源の数である。
【０１３７】
実行コマンド数ENcが略一定の場合（S62:YES）、記憶制御装置１０は、定常状態に移行したと判定し、図７に示すテーブルＴ４の定常状態フラグをセットし（Ｓ６３）、Ｓ６４に移る。実行コマンド数ENcが略一定ではない場合（S62:NO）、記憶制御装置１０は、Ｓ６４に移る。
【０１３８】
記憶制御装置１０は、定常状態フラグがセットされているか否かを判定し（Ｓ６４）、定常状態フラグがセットされている場合（S64:YES）、前回の実行コマンド数ENcよりも今回の実行コマンド数ENcの方が少ないか否かを判定する（Ｓ６５）。
【０１３９】
前回の実行コマンド数ENcよりも今回の実行コマンド数ENcの方が少ない場合（S65:YES）、記憶制御装置１０は、定常状態から減少状態へ移行したものと判定する。そこで、記憶制御装置１０は、そのホスト２０に割り当てられている全てのコマンド処理資源をプール資源として戻させる（Ｓ６６）。即ち、記憶制御装置１０は、定常状態から減少状態への移行を検出した場合、そのホスト２０によるコマンド発行の終わりが近いと予測し、そのホスト２０に割り当てられているコマンド処理資源の全て（AR）を、プール資源（RPR）に戻させる（M1=AR）。そして、記憶制御装置１０は、Ｓ６７に移る。
【０１４０】
定常状態フラグがセットされていない場合（S64:NO）、記憶制御装置１０は、Ｓ６７に移る。また、今回の実行コマンド数ENcが前回の実行コマンド数ENcと変わらない場合（S65:NO）、記憶制御装置１０は、Ｓ６７に移る。
【０１４１】
そして、記憶制御装置１０は、実行コマンド数ENcが０になったか否かを判定する（Ｓ６７）。実行コマンド数ENcが０になった場合（S67:YES）、記憶制御装置１０は、そのホスト２０からのコマンド発行が終了したものと判定し、定常状態フラグをリセットさせる（Ｓ６８）。
【０１４２】
このように構成される本実施例でも、前記第１実施例と同様の作用効果を奏する。これに加えて、本実施例では、実行コマンド数ENcの状態に基づいて、ホスト２０によるコマンド発行の終期を予測し、実行コマンド数ENcが０になるよりも前に、そのホスト２０に割り当てられているコマンド処理資源をプール資源に戻す。従って、コマンド処理資源を他のホスト２０に割り当てることができ、通信ポート１０１単位で管理されるコマンド処理資源を有効に利用することができる。
【実施例３】
【０１４３】
図１６〜図１８に基づいて第３実施例を説明する。本実施例では、ホスト２０からのコマンドの到着が遅れた場合でも、前回の実行数０期間T0又は所定時間RTが経過するまでの間は、そのホスト２０に割り当てられているコマンド処理資源をプール資源に戻さずに維持する。
即ち、本実施例では、実際に計測された応答時間（前回の実行数０期間T0）が経過するまでは、ホスト２０に割り当てられたコマンド処理資源をプール資源に戻さずにそのまま維持する。一方、コマンド処理資源を長時間維持し続けると、プール資源内のコマンド処理資源が不足する可能性がある。そこで、所定時間RTを経過した場合は、ホスト２０に割り当てられているコマンド処理資源をプール資源に戻すようになっている。
【０１４４】
図１６に示すように、本実施例は、例えば、ホスト２０と記憶制御装置１０とが比較的長い距離L2離れており、両者の間に通信遅延時間が存在する場合に用いられる。ホスト２０と記憶制御装置１０との間の物理的な距離やスイッチ３０内の応答遅延等により、ホスト２０から発行されたコマンドは、ホスト２０と記憶制御装置１０とが接近している場合よりも、遅れて到着する。
【０１４５】
従って、ホスト２０がコマンドを多重発行している場合でも、コマンドの伝達に時間がかかるため、記憶制御装置１０側において、実行コマンド数ENcが０となる時期TSが発生する。ホスト２０から次のコマンドが記憶制御装置１０に到着するまでの間、実行コマンド数ENcが０となる期間が継続する。この実行コマンド数ENcが０となる期間を、本明細書では、実行数０期間T0と呼ぶ。
【０１４６】
図１７は、ホスト２０と記憶制御装置１０との間に通信遅延時間が存在する場合にコマンド処理資源を確保し続けるための処理を示すフローチャートである。まず最初に、記憶制御装置１０は、実行コマンド数ENcが「１」から「０」に変化したか否かを判定する（Ｓ７１）。
【０１４７】
実行コマンド数ENcが１から０に変化した場合（S71:YES）、記憶制御装置１０は、ENc=0となった時刻を、実行数０期間T0の開始時刻TSとして記憶する（Ｓ７２）。次に、記憶制御装置１０は、後述のＳ７６において前回計測された期間T0と所定時間RTとを比較する（Ｓ７３）。即ち、記憶制御装置１０は、前回の期間T0が所定時間RT以内であるか否かを判定する（Ｓ７３）。実行コマンド数ENcが０となった前回の期間T0が、所定時間RT以下である場合（S73:YES）、記憶制御装置１０は、何もせずに処理を終了する。これに対し、前回の期間T0が所定時間RTに達した場合（S73:NO）、記憶制御装置１０は、ENc＝０となったホスト２０に割り当てられているコマンド処理資源の全てをプール資源（RPR）に戻す（Ｓ７４）。
【０１４８】
実行コマンド数ENcが１から０に変化していない場合（S71:NO）、記憶制御装置１０は、実行コマンド数ENcが０から１に変化したか否かを判定する（Ｓ７５）。ENcが０から１に変化した場合とは、実行数０期間T0が終了した場合である。そこで、記憶制御装置１０は、テーブルＴ４中の期間T0の値を更新させる（Ｓ７６）。即ち、記憶制御装置１０は、現在時刻から開始時刻TSを減算することにより、最新の期間T0を算出し、テーブルＴ４に登録する。
【０１４９】
図１８は、通信遅延時間を考慮してコマンド処理資源の確保または開放を制御するための別の処理方法を示すフローチャートである。このフローチャートは、記憶制御装置１０によって定期的に実行される。
【０１５０】
記憶制御装置１０は、ホスト２０に関する実行コマンド数ENcが０になったか否かを判定する（Ｓ８１）。ENc＝０の場合（S81:YES）、記憶制御装置１０は、そのホスト２０にコマンド処理資源が１つ以上割り当てられているか否かを判定する（Ｓ８２）。
【０１５１】
ENc＝０となったホスト２０に１つ以上のコマンド処理資源が割り当てられている場合（S82:YES）、記憶制御装置１０は、実行コマンド数ENcが０となってからの経過時間（T0）が、前回の実行数０期間T0または所定時間RTに達したか否かを判定する（Ｓ８３）。
【０１５２】
前記同様に、期間T0が前回の実行数０期間T0または所定時間RTに達した場合（S83:YES）、記憶制御装置１０は、そのホスト２０に割り当てられている全てのコマンド処理資源をプール資源（RPR）に戻す（Ｓ８４）。これに対し、期間T0が前回の実行数０期間T0または所定時間RTに達していない場合（S83:NO）、記憶制御装置１０は、そのホスト２０に割り当てられているコマンド処理資源をそのまま維持する。
【０１５３】
このように構成される本実施例も前記第１実施例と同様の効果を奏する。これに加えて、本実施例では、記憶制御装置１０とホスト２０とが離れており、両者の間に通信遅延が存在する場合においても、ホスト２０に割り当てられているコマンド処理資源を、前回の実行数０期間T0または所定時間RTが経過するまで維持する。
これにより、実行コマンド数ENcが０になって、ホスト２０からのコマンド受領が途絶えた場合でも、そのホスト２０に割り当てられているコマンド処理資源が直ちに開放されて他のホスト２０に割り当てられるのを防止できる。従って、各ホストに許可されたコマンド発行数の合計値が、実際に処理可能なコマンド数を超えるのを防止して、キューフル状態の発生を抑制できる。
【実施例４】
【０１５４】
図１９，図２０に基づいて第４実施例を説明する。本実施例では、各ホスト２０に予め優先順位を設定しておき、この優先順位に従って、ポート１０１単位で管理されているコマンド処理資源を分配する。
【０１５５】
図１９は、ポート１０１単位でホスト２０の優先順位を管理するためのテーブルＴ６を示す説明図である。この優先順位管理テーブルＴ６は、例えば、各ホスト２０を識別するためのホスト識別情報と、各ホスト２０へ分配するコマンド処理資源の割合とを対応付けて管理する。
【０１５６】
ホスト識別情報としては、例えば、iSCSI_Nameを用いることができる。iSCSI_Name以外にホスト２０を識別可能な情報が存在する場合は、その情報を用いてもよい。割合とは、ポート１０１に関連づけられている全てのコマンド処理資源に対する割合を示す。テーブルＴ６に登録されている全てのホスト２０の割合を合計すると、１００％または１００％近傍の値となる（Q(0)+Q(1)+Q(2)...）。即ち、特定のホスト２０に割り当てられるコマンド処理資源の量は、全コマンド処理資源にその特定のホスト２０に設定されている割合を乗じた値となる。管理者は、例えば、各ホスト２０の業務の優先順位や業務終了時間等を考慮して、テーブルＴ６に優先順位（分配割合）を設定する。
【０１５７】
図２０は、一つの通信ポート１０１を共用する各ホスト２０にコマンド処理資源を分配するための処理を示すフローチャートである。本処理は、記憶制御装置１０によって各通信ポート１０１に接続された各ホスト２０毎にそれぞれ実行される。
【０１５８】
記憶制御装置１０は、資源分配対象のホスト２０が接続されている通信ポート１０１に優先順位が設定されているか否かを判定する（Ｓ９１）。そのホスト２０が接続された通信ポート１０１に優先順位が設定されている場合（S91:YES）、記憶制御装置１０は、そのホスト２０のホスト識別情報（iSCSI_Name）を取得する（Ｓ９２）。
【０１５９】
記憶制御装置１０は、ホスト２０から取得したホスト識別情報がテーブルＴ６に登録されているか否か、つまり、そのホスト２０に優先順位が設定されているか否かを判定する（Ｓ９３）。そのホスト２０に優先順位が設定されている場合（S93:YES）、記憶制御装置１０は、テーブルＴ６に設定されている優先順位に基づいて、そのホスト２０に割り当てるコマンド処理資源の量M2を算出する（Ｓ９４）。
【０１６０】
このように構成される本実施例も前記第１実施例と同様の効果を奏する。これに加えて、本実施例では、各ホスト２０に優先順位を割り当てることができるため、例えば、各ホスト２０で実行される業務の優先度等に基づいて、適切にコマンド処理資源を分配することができる。従って、記憶制御装置１０側において、業務の優先度等に応じて各ホスト２０から発行されるコマンドの多重数を制御することができ、使い勝手が向上する。
【０１６１】
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０１６２】
【図１】本発明の実施形態の概念を示す説明図である。
【図２】ストレージシステムの全体構成を示すブロック図である。
【図３】記憶制御装置のハードウェア構造を示す説明図である。
【図４】ポート単位でコマンド処理資源を管理するためのテーブルを示す説明図である。
【図５】ポート単位で管理されるコマンド処理資源の残存量を管理するためのテーブルを示す説明図である。
【図６】ポート単位で実行されているコマンドの数を管理するためのテーブルを示す説明図である。
【図７】各ポートに接続されているホストを管理するためのテーブルを示す説明図である。
【図８】各ポートに接続されているホストのうちコマンドを発行しているホストの数を管理するためのテーブルを示す説明図である。
【図９】記憶制御装置がホストからコマンドを受領した場合の処理を示すフローチャートである。
【図１０】記憶制御装置からホストに応答する場合の処理を示すフローチャートである。
【図１１】コマンド処理資源の割当量を制御するための閾値を設定する処理を示すフローチャートである。
【図１２】各ホストにコマンド処理資源を追加する場合の確保数及び各ホストに割当済みのコマンド処理資源を取り戻す場合の戻し数をそれぞれ設定するための処理を示すフローチャートである。
【図１３】第２実施例に係る記憶制御装置がホストからコマンドを受領して実行する様子を示す説明図である。
【図１４】記憶制御装置で実行中のコマンド数の変化を示す説明図である。
【図１５】ホストから発行されるコマンドの数の変化を予測するための処理を示すフローチャートである。
【図１６】第３実施例に係る記憶制御装置がホストからコマンドを受領して実行する様子を示す説明図である。
【図１７】ホストからのコマンドが一時的途絶えた場合でも、所定時間が経過するまでの間は、割当済みのコマンド処理資源を維持するための処理を示すフローチャートである。
【図１８】ホストからのコマンド発行状態を定期的に監視するための処理を示すフローチャートである。
【図１９】ポート単位でホストの優先順位を管理するためのテーブルを示す説明図である。
【図２０】優先順位に従ってホストにコマンド処理資源を分配する処理を示す説明図である。
【符号の説明】
【０１６３】
１…記憶制御装置、１Ａ…通信ポート、１Ｂ…コマンド実行部、１Ｃ…記憶デバイス、１Ｄ…通知部、１Ｅ…資源割当制御部、１Ｅ１…資源確保機能、１Ｅ２…資源戻し機能、１Ｅ３…残存量判定機能、１Ｅ４…遅延時間判定機能、１Ｅ５…優先順位管理機能、１Ｆ…ポート共通資源、２…ホスト、１０…記憶制御装置、２０…ホスト、３０…スイッチ、１００…コントローラ、１０１Ａ，１０１Ｂ…通信ポート、１１０…ホスト側転送回路、１２０…ドライブ側転送回路、１３０…キャッシュメモリ、１４０…プロセッサ、１５０Ａ，１５０Ｂ…制御テーブル、２００…記憶部、２１０…記憶デバイス、２２０…RAIDグループ、２３０…論理ボリューム、PR…コマンド処理資源、Ｔ１…ポート単位コマンド処理管理テーブル、Ｔ２…ポート単位コマンド処理管理資源残数テーブル、Ｔ３…ポート単位実行コマンド数テーブル、Ｔ３…実行コマンド数テーブル、Ｔ４…コネクション管理テーブル、Ｔ４１…実行コマンド数履歴テーブル、Ｔ５…ポート単位実行コネクション数テーブル、Ｔ６…優先順位管理テーブル
【図１】
2007323356.tif 000003
【図２】
2007323356.tif 000004
【図３】
2007323356.tif 000005
【図４】
2007323356.tif 000006
【図５】
2007323356.tif 000007
【図６】
2007323356.tif 000008
【図７】
2007323356.tif 000009
【図８】
2007323356.tif 000010
【図９】
2007323356.tif 000011
【図１０】
2007323356.tif 000012
【図１１】
2007323356.tif 000013
【図１２】
2007323356.tif 000014
【図１３】
2007323356.tif 000015
【図１４】
2007323356.tif 000016
【図１５】
2007323356.tif 000017
【図１６】
2007323356.tif 000018
【図１７】
2007323356.tif 000019
【図１８】
2007323356.tif 000020
【図１９】
2007323356.tif 000021
【図２０】
2007323356.tif 000022