(57)【要約】【課題】各ホストに割り当てるコマンド多重度を容易かつ適切に制御し得る情報処理装置及びコマンド多重度制御方法を提案する。【解決手段】複数のホストからそれぞれ送信されるコマンドに応じた処理を実行する情報処理装置に対する各ホストのコマンドの多重度を、情報処理装置が、ホストのコマンド発行頻度に応じて当該ホストに割り当てるコマンドの多重度を動的に決定し、決定した多重度を当該ホストに設定するようにしたことにより各ホストに割り当てるコマンド多重度を容易かつ適切に制御し得る情報処理装置を実現できる。【選択図】図１
2008226040.tif 000002
【特許請求の範囲】
【請求項１】
複数のホストに接続され、各前記ホストからそれぞれ送信されるコマンドに応じた処理を実行する情報処理装置において、
前記ホストのコマンド発行頻度に応じて当該ホストに割り当てる前記コマンドの多重度を動的に決定し、決定した前記多重度を当該ホストに設定する多重度制御部
を備えることを特徴とする情報処理装置。
【請求項２】
前記情報処理装置は、各前記ホストにデータの記憶領域を提供するストレージ装置である
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記多重化制御部は、
前記ホストのコマンド発行頻度に応じて当該ホストに割り当てる前記コマンドの多重度を決定する多重度決定処理部と、
各前記ホストと通信を行なうと共に、前記多重度決定処理部が決定した前記コマンドの多重度を対応する前記ホストに設定するインタフェース部と
を備え、
前記インタフェース部は、
ｉＳＣＳＩ（internet Small Computer System Interface）規格に規定された、イニシエータが送信可能な最大のコマンド数をターゲットが制御する制御プロトコルを用いて前記多重度決定処理部が決定した前記コマンドの多重度を対応する前記ホストに設定する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記多重化制御部は、
前記ホストから送信された前記コマンドを処理するコマンド処理部を備え、
前記多重度決定処理部は、
前記コマンド処理部が前記ホストから送信された前記コマンドを処理するごとに、当該ホストに割り当てた前記コマンドの多重度と、当該ホストが送信したコマンドのうちのレスポンスを返信していないコマンド数とを比較し、前記コマンドの多重度が前記レスポンスを返信していないコマンド数よりも大きいときには、当該ホストに割り当てた前記コマンドの多重度を既定数だけ減らし、前記コマンドの多重度が前記レスポンスを返信していないコマンド数以下であるときには、当該ホストに割り当てた前記コマンドの多重度を既定数だけ増やすようにして、当該ホストに割り当てる新たな前記コマンドの多重度を決定する
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記既定数は、１である
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記既定値は、ユーザにより設定された数値である
ことを特徴とする請求項４に記載の情報処理装置。
【請求項７】
前記多重度制御部は、
各前記ホストからの前記コマンドを一時的に蓄積する受信コマンドキューを有し、
前記コマンド処理部は、
前記受信コマンドキューに蓄積された前記コマンドを蓄積された順番に処理し、
前記多重度決定処理部は、
前記ホストに割り当てる新たな前記コマンドの多重度を決定する場合、前記コマンドの多重度が前記レスポンスを返信していないコマンド数以下であって、かつ前記受信コマンドキューの空き容量が前記既定数よりも多く存在するときにのみ、対応する前記ホストに割り当てた前記コマンドの多重度を既定数だけ増やす
ことを特徴とする請求項４に記載の情報処理装置。
【請求項８】
複数のホストからそれぞれ送信されるコマンドに応じた処理を実行する情報処理装置に対する各前記ホストのコマンドの多重度を制御するコマンド多重度制御方法において、
前記情報処理装置が、前記ホストのコマンド発行頻度に応じて当該ホストに割り当てる前記コマンドの多重度を動的に決定する第１のステップと、
前記情報処理装置が、決定した前記多重度を当該ホストに設定する第２のステップと
を備えることを特徴とするコマンド多重度制御方法。
【請求項９】
前記情報処理装置は、各前記ホストにデータの記憶領域を提供するストレージ装置である
ことを特徴とする請求項８に記載のコマンド多重度制御方法。
【請求項１０】
前記第２のステップでは、
ｉＳＣＳＩ（internet Small Computer System Interface）規格に規定された、イニシエータが送信可能な最大のコマンド数をターゲットが制御する制御プロトコルを用いて前記第１のステップにおいて決定した前記コマンドの多重度を対応する前記ホストに設定する
ことを特徴とする請求項８に記載のコマンド多重度制御方法。
【請求項１１】
前記第１のステップでは、
前記ホストから送信された前記コマンドを処理するごとに、当該ホストに割り当てた前記コマンドの多重度と、当該ホストが送信したコマンドのうちのレスポンスを返信していないコマンド数とを比較し、前記コマンドの多重度が前記レスポンスを返信していないコマンド数よりも大きいときには、当該ホストに割り当てた前記コマンドの多重度を既定数だけ減らし、前記コマンドの多重度が前記レスポンスを返信していないコマンド数以下であるときには、当該ホストに割り当てた前記コマンドの多重度を既定数だけ増やすようにして、当該ホストに割り当てる新たな前記コマンドの多重度を決定する
ことを特徴とする請求項８に記載のコマンド多重度制御方法。
【請求項１２】
前記既定数は、１である
ことを特徴とする請求項１１に記載のコマンド多重度制御方法。
【請求項１３】
前記既定値は、ユーザにより設定された数値である
ことを特徴とする請求項１１に記載のコマンド多重度制御方法。
【請求項１４】
前記情報処理装置は、
各前記ホストからの前記コマンドを一時的に蓄積する受信コマンドキューを有し、当該受信コマンドキューに蓄積された前記コマンドを蓄積された順番に処理し、
前記第１のステップでは、
前記ホストに割り当てる新たな前記コマンドの多重度を決定する場合、前記コマンドの多重度が前記レスポンスを返信していないコマンド数以下であって、かつ前記受信コマンドキューの空き容量が前記既定数よりも多く存在するときにのみ、対応する前記ホストに割り当てた前記コマンドの多重度を既定数だけ増やす
ことを特徴とする請求項１１に記載のコマンド多重度制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びコマンド多重度制御方法に関し、例えばストレージシステムに適用して好適なものである。
【背景技術】
【０００２】
1つ以上のホスト計算機（以下、これをホストと呼ぶ） と1つ以上のストレージ装置とがネットワークを介して接続されたストレージシステムにおいては、ホストが、ストレージ装置にリードコマンドやライトコマンドを送信するようにして、そのストレージ装置に格納されたデータを読み書きする。
【０００３】
このようなストレージネットワークでは、通常、ホストは、ストレージ装置に対して、コマンドを多重化して送信することができる。ここで、コマンドの多重化とは、ホストが、ストレージ装置からの応答を待つことなく、リードコマンドやライトコマンドなどの複数のコマンドを連続的に送信することを指す。また、このときに連続して送信するコマンド数を多重度（以下、これをコマンド多重度と呼ぶ）という。
【０００４】
このコマンド多重度を大きくすれば、複数のコマンドを送信する際のホストの待ち時間を減少させることができるため、ホスト及びストレージ装置間の通信を効率化させることができる。しかしながら、ストレージの能力（例えば受信したコマンドを格納する受信キューの領域）は有限であるため、コマンド多重度が大きすぎると、ストレージ装置がすべてのコマンドを受信しきれなくなるいわゆるQUEUE FULL状態が発生する。
【０００５】
QUEUE FULL状態が発生した場合、ストレージ装置は、その後コマンドを送信してきたホストに対してQUEUE FULL状態が発生したことを意味するQUEUE FULL応答を送信する。そしてQUEUE FULL応答を受信したホストは、エラーを記録したり、コマンドの送信を一時停止したりするため、ストレージシステム全体のＩ／Ｏ性能が劣化する。従って、ストレージシステムには、ストレージ装置のQUEUE FULL状態を防止する何らかの仕組みが必要となる。
【０００６】
そこで、従来、かかるQUEUE FULL状態を防止する方法として、ストレージ装置に接続された各ホストに対してそれぞれコマンド多重度の最大値を設定する技術が提案されている（特許文献１） 。
【特許文献１】特開２００５−３２２１８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところが、かかる特許文献１において提案された技術では、システム管理者が、ホストごとのコマンド多重度を事前に決定し、決定したコマンド多重度を各ホストにそれぞれ設定する必要がある。このため複数のホストがストレージ装置に接続されている場合に、ホストごとに適切なコマンド多重度を割り当てる割当て作業や、これらを各ホストにそれぞれ設定する設定作業が煩雑となる問題があった。
【０００８】
またかかる特許文献１に開示された技術によると、コマンド多重数の設定を変更する場合、システム管理者は、ホストを停止させてからコマンド多重数を再設定し、その後、ホストを再起動させなくてはならない。従って、この特許文献１に開示された技術では、ホスト上のアプリケーションプログラムを稼働させたままの状態でコマンド多重数の設定を変更することができず、システム全体としての使い勝手が悪いという問題があった。
【０００９】
本発明は以上の点を考慮してなされたもので、各ホストに設定するコマンド多重度を容易かつ適切に制御し得る情報処理装置及びコマンド多重度制御方法を提案しようとするものである。
【課題を解決するための手段】
【００１０】
かかる課題を解決するため本発明においては、複数のホストに接続され、各前記ホストからそれぞれ送信されるコマンドに応じた処理を実行する情報処理装置において、前記ホストのコマンド発行頻度に応じて当該ホストに割り当てる前記コマンドの多重度を動的に決定し、決定した前記多重度を当該ホストに設定する多重度制御部を備えることを特徴とする。
【００１１】
また本発明においては、複数のホストからそれぞれ送信されるコマンドに応じた処理を実行する情報処理装置に対する各前記ホストのコマンドの多重度を制御するコマンド多重度制御方法において、前記情報処理装置が、前記ホストのコマンド発行頻度に応じて当該ホストに割り当てる前記コマンドの多重度を動的に決定する第１のステップと、前記情報処理装置が、決定した前記多重度を当該ホストに設定する第２のステップとを備えることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、ホストのコマンド発行頻度に応じて当該ホストに割り当てるコマンドの多重度を動的に決定し、決定した多重度を当該ホストに設定するため、各ホストに割り当てるコマンド多重度を容易かつ適切に制御することができる。
【発明を実施するための最良の形態】
【００１３】
以下図面について、本発明の一実施の形態を詳述する。
【００１４】
（１）第１の実施の形態
（１−１）ストレージシステムの構成
図１において、1は全体として第１の実施の形態によるストレージシステムを示す。このストレージシステムは、ホスト１００及びストレージ装置１２０がネットワーク１０５を介して接続され、ストレージ装置１２０に管理装置１３０が接続されて構成されている。
【００１５】
ホスト１００は、汎用のコンピュータであり、ＣＰＵ（Central Processing Unit）１１０、メモリ１１１及びインタフェース１１２を備える。ＣＰＵ１１０は、ホスト１１０全体の動作制御を司るプロセッサである。ＣＰＵ１１０が、メモリ１１１に格納されたソフトウェアを実行することにより、ホスト１００全体として各種処理を実行する。メモリ１１１は、各種ソフトウェアを保持するために用いられるほか、ＣＰＵ１１０のワークメモリとしても用いられる。インタフェース１１２は、ＣＰＵ１１０がネットワーク１０５を介してストレージ装置１２０と通信を行なうためのものである。なお、本ストレージシステム１では、ホスト１００が１つ以上存在するものとし、以下、これらのホスト１００を区別する場合には、符号「１００」に添え字「Ａ」、「Ｂ」、……を付して「ホスト１００Ａ」、「ホスト１００Ｂ」、……のように記述することとする。
【００１６】
ストレージ装置1２０は、複数のディスク装置１２１と、これらディスク装置１２１を制御するコントロール部１２２とから構成される。
【００１７】
ディスク装置１２１は、例えばＦＣ（Fibre Channel）ディスク等の高価なディスクドライブ、又はＦＡＴＡ（Fibre Attached Technology Adapted）ディスク及びＳＡＴＡ（Serial AT Attachment）ディスクや光ディスクドライブ等の安価なディスクドライブから構成される。１又は複数のディスク装置１２１が提供する記憶領域上に１又は複数の論理的なボリューム（以下、これを論理ボリュームと呼ぶ）ＶＯＬが定義される。そして、この論理ボリュームＶＯＬにホスト１００からのデータが所定大きさのブロックを単位として読み書きされる。
【００１８】
各論理ボリュームＶＯＬには、それぞれ固有の識別子（ＬＵＮ：Logical Unit Number）が割り当てられる。本実施の形態の場合、データの入出力は、この識別子と、各ブロックにそれぞれ割り当てられるそのブロックに固有の番号（ＬＢＡ：Logical Block Address）との組み合わせたものをアドレスとして、当該アドレスを指定して行われる。
【００１９】
コントロール部１２２は、複数のインタフェース１２３、ディスクアダプタ１２４、キャッシュメモリ１２５、メモリコントローラ１２６、ブリッジ１２７、ローカルメモリ１２８及びＣＰＵ１２９から構成される。
【００２０】
インタフェース１２３は、ネットワーク１０５や管理装置１３０に対するインタフェースであり、ライトデータ、リードデータ又は各種コマンドなどをホスト１００や管理装置１３０との間で送受信する。なお本実施の形態においては、インタフェース１２３及び各ホスト１００間の通信は、ｉＳＣＳＩ（internet Small Computer System Interface）規格に従ったプロトコルで行なわれるものとする。
【００２１】
ディスクアダプタ１２４は、ディスク装置１２１に対するインタフェースであり、例えばファイバーチャネルプロトコルに従ってライトデータやリードデータ又は各種コマンドなどをディスク装置１２１との間で送受信する。
【００２２】
キャッシュメモリ１２５は、例えば不揮発性の半導体メモリから構成され、ホスト１００からのコマンドや、ディスク装置１２１に読み書きするデータを一時的に格納するために用いられる。メモリコントローラ１２６は、キャッシュメモリ１２５及びローカルメモリ１２８間や、キャッシュメモリ１２５及びディスクアダプタ１２４間におけるデータ転送を制御する。さらにブリッジ１２７は、メモリコントローラ１２６及びＣＰＵ１２９間や、メモリコントローラ１２６及びローカルメモリ１２０間におけるファイリング処理等を行う。
【００２３】
メモリ１２８は、各種制御プログラム及び各種制御情報を保持するために用いられるほか、ＣＰＵ１２９のワークメモリとしても用いられる。ＣＰＵ１２９は、ホスト１００から送信されるリードコマンドやライトコマンドに応答してディスク装置１２１へのデータ入出力を制御するプロセッサであり、ローカルメモリ１２８に格納された各種制御プログラムや各種制御情報に基づいてインタフェース１２３、ディスクアダプタ１２４及びメモリコントローラ１２６等を制御する。
【００２４】
管理装置１３０は、ＣＰＵやメモリ等の情報処理資源を備えたコンピュータ装置であり、例えばパーソナルコンピュータ又はワークステーションなどから構成される。管理装置１３０は、ストレージ装置１２０に対して各種設定を行うためのＧＵＩ（Graphical User Interface）や各種情報を表示する表示装置と、システム管理者が各種操作や各種設定入力を行うためのキーボードやマウス等の入力装置とを備える。そして管理装置１３０は、入力装置を介して入力された各種指令に基づいて各種処理を実行する。
【００２５】
なお、図1では、ストレージシステム１内にストレージ装置１２０が１つのみ存在している場合について例示しているが、複数のストレージ装置１２０が存在しても良い。
【００２６】
（１−２）コマンド多重度制御機能
次に、ストレージ装置１２０に搭載されたコマンド多重度制御機能について説明する。これに際して、まず、ｉＳＣＳＩ規格において規定された同時発行コマンド数の制御プロトコルについて説明する。
【００２７】
ｉＳＣＳＩ規格には、「CmdSN」、「ExpCmdSN」及び「MaxCmdSN」というパラメータを用いて、イニシエータが同時に発行するコマンド数をターゲット側が制御するための仕組みが存在する。
【００２８】
具体的には、図２に示すように、ｉＳＣＳＩ規格では、イニシエータが発行するコマンドにそのコマンドの識別子である「CmdSN」という番号が付与される。またターゲットがイニシエータに送信するそのコマンドのレスポンスには、「CmdSN」のほか、イニシエータが次に発行するコマンドの「CmdSN」を指定する「ExpCmdSN」と、イニシエータがコマンドに付与できる最大の「CmdSN」を指定する「MaxCmdSN」とが付与される。このときの「ExpCmdSN」が「MaxCmdSN」よりも大きい場合、つまり「ExpCmdSN」＞「MaxCmdSN」である場合には、イニシエータは次のコマンドを送信することができない。
【００２９】
例えば図２のように、イニシエータが「CmdSN」として「１０」を付与したコマンドを送信し（ＳＰ２０１）、これに応答してターゲットからイニシエータに対し、「CmdSN」が「１０」であり、「ExpCmdSN」として「１１」、「MaxCmdSN」として「１２」が付与されたレスポンスが送信されものとする（ＳＰ２０２）。この場合、「ExpCmdSN」が「MaxCmdSN」よりも小さいため、イニシエータは、「CmdSN」が「１２」となるまで順次コマンドをターゲットに送信することができる（ＳＰ２０３、ＳＰ２０４）。
【００３０】
そして、この後ターゲットからイニシエータに送信されるレスポンスコマンドに付与された「ExpCmdSN」が順次増加し、やがてレスポンスにおける「ExpCmdSN」の値が「１２」よりも大きい数（図２においては「１３」）となった場合（ＳＰ２０５）、イニシエータは、もはや次のコマンドをイニシエータに送信することができない（ＳＰ２０６）。
【００３１】
本実施の形態によるストレージシステム１には、ｉＳＣＳＩ規格で規定されたこのような同時発行コマンド数の制御プロトコルを利用して、各ホスト１００に割り当てるコマンド多重度を、そのホスト１００のコマンド発行頻度に応じて動的に変更し、変更したコマンド多重度をそのホスト１００に設定するコマンド多重度制御機能がストレージ装置１２０に搭載されている。
【００３２】
図３は、ストレージ装置１２０のローカルメモリ１２８に格納される各種制御プログラム及び各種制御情報のうち、上述のコマンド多重度制御機能に関連する制御プログラム及び制御情報を示す。この図３に示すように、ローカルメモリ１２８には、コマンド処理プログラム３０１、多重度決定処理プログラム３０２、コマンド多重度管理テーブル３０４及び資源管理テーブル３０５が格納される。またローカルメモリ１２８には、インタフェース１２３（図１）を介してホスト１００との間で送受信するコマンド及びレスポンスの順序を示す受信コマンドキュー３０５及び送信コマンドキュー３０６が設けられる。
【００３３】
コマンド処理プログラム３０１は、ホスト１００から多重化されて送信されるコマンドに応じた処理を実行し、その処理結果（レスポンス）をそのホスト１００に送信するためのプログラムである。また多重化決定処理プログラム３０２は、各ホスト１００にそれぞれ割り当てるコマンド多重度を、そのホスト１００のコマンド発行頻度に応じて動的に変化させるためのプログラムである。多重化決定処理プログラム３０２に基づく処理については後述する。なお、以下においては、各種処理の処理主体を「コマンド処理プログラム３０１」及び「多重化決定処理プログラム３０２」として説明する場合があるが、実際上は、これらコマンド処理プログラム３０１や多重化決定処理プログラム３０２に基づいてＣＰＵ１２９がその処理を実行することは言うまでもない。
【００３４】
コマンド多重度管理テーブル３０３は、各ホスト１００にそれぞれ割り当てたコマンド多重度数と、ホスト１００ごとの現在実行中コマンド数とを管理するためのテーブルであり、図４に示すように、ホスト名欄４０１、コマンド多重度欄４０２及び実行中コマンド数欄４０３を備える。
【００３５】
このうちホスト名欄４０１には、ストレージ装置１２０に接続された各ホスト１００の識別子が格納され、コマンド多重度欄４０２には、そのホスト１００に割り当てられたコマンド多重度が格納される。また実行中コマンド数欄４０３には、そのホスト１００が送信したコマンドのうち、ストレージ装置１２０がまだレスポンスを返信していない、つまり現在実行中又は未だ実行していないコマンド数（以下、これを実行中コマンド数と呼ぶ）が格納される。
【００３６】
またコマンド多重度管理テーブル３０３におけるコマンド多重度欄４０２及び実行中コマンド数欄４０３の最下段には、それぞれコマンド多重度総数欄４０４及び実行中コマンド総数欄４０５が設けられている。そしてコマンド多重度総数欄４０４には、各ホスト１００にそれぞれ割り当てたコマンド多重度の総数が格納され、実行中コマンド総数欄４０５には、各ホスト１００の実行中コマンド数の総数が格納される。
【００３７】
受信キュー容量管理テーブル３０４は、後述する受信コマンドキュー３０５の空き容量を監視するために使用するテーブルであり、図５に示すように、総量欄５０１及び残量欄５０２から構成される。そして総数欄５０１には、受信コマンドキュー３０５へ格納できるコマンドの最大数が格納され、残量欄５０２には、現在の空き容量（受信可能なコマンド数）を格納する残量が格納される。従って、この図５の例では、受信コマンドキュー３０５に格納できる最大コマンド数は「５１２」であり、この最大コマンド数に対して現在の空き容量が「１０」であることが示されている。
【００３８】
受信コマンドキュー３０５は、ＦＩＦＯ（First In First Out）構造のメモリ領域であり、インタフェース１２３が受信したコマンドをコマンド処理プログラム３０１に受け渡す際に使用される。受信コマンドキュー３０５には、コマンドを受信するごとに、図６に示すように、そのコマンドに割り当てたコマンド番号６０１と、コマンド格納アドレス６０２と、コマンド長６０３とが格納される。
【００３９】
この受信コマンドキュー３０５を用いたコマンドの受け渡し処理の流れを簡単に説明する。インタフェース１２３は、コマンドを受信した場合、受信したコマンドをキャッシュメモリ１２５へ格納する。その後、インタフェース１２３は、受信コマンドキュー３０５の末尾（最下行）に新たなエントリを追加し、そのエントリに、そのとき受信したコマンドを格納したキャッシュメモリ１２５上の先頭アドレスとコマンドの長さとを、それぞれ上述のコマンド格納アドレス６０２及びコマンド長６０３として書き込む。そしてコマンド処理プログラム３０１は、コマンド処理を実行する際、受信コマンドキュー３０５の先頭（最上行）のエントリを参照し、コマンドが格納されたキャッシュメモリ１２５上の先頭アドレスを特定した後、参照したエントリを削除する。これらの動作の詳細は、後述する。
【００４０】
送信コマンドキュー２０６は、ＦＩＦＯ（First In First Out）構造のメモリ領域であり、コマンド処理プログラム３０１が生成したレスポンスをインタフェース１２３へ受け渡す際に使用される。受信コマンドキュー２０６には、コマンドを受信するごとに、図７に示すように、そのコマンドに割り当てたコマンド番号７０１と、コマンド格納アドレス７０２と、コマンド長７０３とが格納される。
【００４１】
この送信コマンドキュー２０６を用いたレスポンスの受け渡し処理を簡単に説明する。コマンド処理プログラム３０１は、レスポンスを生成した後、これをキャッシュメモリ１２５に格納する。その後、コマンド処理プログラム３０１は、送信コマンドキュー２０６の末尾（最下行）に新たなエントリを追加し、そのエントリに、レスポンスを格納したキャッシュメモリ１２５上の先頭アドレスとそのレスポンスの長さとをそれぞれ上述のコマンド格納アドレス７０２及びコマンド長７０３として書き込む。そしてインタフェース１２３は、レスポンスの送信処理を実行する際、送信コマンドキュー３０６の先頭（最上行）のエントリを参照し、レスポンスが格納されたキャッシュメモリ１２５上の先頭アドレスを特定した後、参照したエントリを削除する。これらの動作の詳細は、後述する。
【００４２】
次に、ストレージ装置１２０が、ホスト１００からのコマンドを受信し、そのレスポンスをそのホスト１００に返信するまでの処理の流れを、図８を用いて説明する。
【００４３】
インタフェース１２３は、ホスト１００が発行したコマンドを受信すると（ＳＰ８０１）、受信キュー容量管理テーブル３０４（図５）を参照して、受信コマンドキュー３０５の空き容量を調査する（ＳＰ８０２）。そしてインタフェース１２３は、受信コマンドキュー３０５の空き容量が「０」の場合（受信コマンドキュー３０５に新たにコマンドを格納できない場合）、コマンドを送信したホスト１００にQUEUE FULL応答を送信し、ステップＳＰ８０１において受信したコマンドを破棄する（ＳＰ８０３）。
【００４４】
これに対してインタフェース１２３は、受信コマンドキュー３０５の空き容量が1以上の場合、受信したコマンドをキャッシュメモリ１２５に格納する（ＳＰ８０４）。その後、インタフェース１２３は、コマンドを格納したキャッシュメモリ１２５上の先頭アドレスとコマンドの長さを、上述のようにして受信コマンドキュー３０５に書き込む（ＳＰ８０５）。続けて、インタフェース１２３は、割込み要求をＣＰＵ１２９に送信するようにして、コマンドを受信したことをＣＰＵ１２９に通知する（ＳＰ８０６）。
【００４５】
ＣＰＵ１２９は、かかる割込み要求を受信すると、コマンド処理プログラム３０１を実行する。そしてコマンド処理プログラム３０１は、まず、受信コマンドキュー３０５の先頭から複数のエントリを取り出す。またコマンド処理プログラム３０１は、この取り出した各エントリについて、その内容に基づいて、キャッシュメモリ１２５に格納された対応するコマンドの場所をそれぞれ特定し、これらコマンドをキャッシュメモリ１２５から読み出してローカルメモリ１２８にＤＭＡ（Direct Memory Access）転送する（ＳＰ８０７）。
【００４６】
次いで、コマンド処理プログラム３０１は、これらローカルメモリ１２８にＤＭＡ転送したコマンドの内容を、図示しないコマンド管理テーブルに追記し、この後、このコマンド管理テーブルに追記したコマンドを発行したホスト１００のホスト名を引数として、多重度決定処理プログラム３０２を呼び出す（ＳＰ８０８）。
【００４７】
呼び出された多重度決定処理プログラム３０２は、エントリが多重度管理テーブル３０３上におけるそのコマンドを送信してきたホスト１００の実行中コマンド数を「１」増加させる実行中コマンド数更新処理を実行し（ＳＰ８０９）、当該実行中コマンド数更新処理を終えると、その旨の通知（以下、これを処理完了通知と呼ぶ）をコマンド処理プログラム３０１に通知する（ステップ８１０）。なお、この実行中コマンド数更新処理の詳細については後述する。
【００４８】
コマンド処理プログラム３０１は、かかる処理完了通知を受信すると、対応するコマンドを実行する（ＳＰ８１１）。例えば、コマンド処理プログラム３０１は、そのコマンドがライトコマンドやリードコマンドであった場合、そのコマンドを上述のコマンド管理テーブルから読み出してディスクアダプタ１２４に送信する。またコマンド処理プログラム３０１は、そのコマンドがライトコマンドであった場合には、メモリコントローラ１２６を制御することにより、かかるコマンドコマンドと共にホスト１００から送信されてキャッシュメモリ１２５に一時的に保持されているライトデータをディスクアダプタ１２４に送信する。かくして、このときディスクアダプタ１２４は、このコマンドに基づいて、ディスク装置１２８へのデータ入出力処理を実行する。
【００４９】
一方、コマンド処理プログラム３０１は、かかるステップＳＰ８１１のコマンド処理が完了すると、多重度決定処理プログラム３０２を再度呼び出す（ＳＰ８１２）。そして呼び出された多重度決定処理プログラム３０２は、コマンド多重度管理テーブル３０３における対応するホスト１００に割り当てられたコマンド多重度と、現在の実行中コマンド数とに基づいて当該ホスト１００に割り当てる新たなコマンド多重度を決定するコマンド多重度決定処理を実行する（ＳＰ８１３）。なお、このコマンド多重度決定処理の詳細については後述する。また多重度決定処理プログラム３０２は、このとき決定したそのホスト１００についてのコマンド多重度をコマンド処理プログラム３０１に通知する（ＳＰ８１４）。
【００５０】
この通知を受信したコマンド処理プログラム３０１は、ステップＳＰ８１１における処理結果（リード処理であればリードデータ、ライト処理であれば処理の成否等）に基づいて、対応するホスト１００に送信するレスポンスを生成する。この際、コマンド処理プログラム３０１は、ステップＳＰ８１４において多重度決定処理プログラム３０２から送信されてきたコマンド多重度を、図２について上述した「MaxCmdSN」としてそのコマンドに設定する（ＳＰ８１５）。
【００５１】
またコマンド処理プログラム３０１は、このようにして生成したレスポンスを、キャッシュメモリ１２５に格納し（ＳＰ８１６）、その後、当該レスポンスを格納したキャッシュメモリ１２５上の先頭アドレス及びレスポンスの長さを上述のように送信コマンドキュー３０６に格納する（ＳＰ８１７）。さらにコマンド処理プログラム３０１は、この後、インタフェース１２３に対して、割込み要求を送信することにより、レスポンスを送信する準備が完了したことを通知する（ＳＰ８１８）。
【００５２】
この割込み要求を受信したインタフェース１２３は、受信コマンドキュー３０６を参照し、レスポンスを格納したキャッシュメモリ１２５上の記憶領域を特定した後、この特定した記憶領域からレスポンスを読み出す（ＳＰ８１９）。そして、インタフェース１２３は、この読み出したレスポンスを、対応するホスト１００に送信する（ＳＰ８２０）。
【００５３】
これによりこのレスポンスを受信したホスト１００は、この後、このレスポンスにおいて「MaxCmdSN」として設定された多重化決定プログラム３０２により割り当てられたコマンド多重度を越えない範囲内でコマンドを多重化してストレージ装置１２０に送信することとなる。
【００５４】
ここで図９は、図８のステップＳＰ８０９について上述した実行中コマンド数更新処理の具体的な処理内容を示すフローチャートである。
【００５５】
多重度決定処理プログラム３０２は、コマンド処理プログラム３０１に呼び出されると（図８のステップＳＰ８０８）、そのとき引数として与えられたホスト名（ここでは仮にホスト１００Ａとする）を基にコマンド多重度管理テーブル３０３を検索し、そのとき対象としているホスト１００Ａ（以下、これを対象ホスト１００Ａと呼ぶ）のエントリがコマンド多重度管理テーブル３０３上に存在するか否かを調査する（ＳＰ９０１）。
【００５６】
そして多重度決定処理プログラム３０２は、かかる対象ホスト１００Ａのエントリを検出できた場合には、後述するステップＳＰ９０４に進み、これに対して当該エントリを検出できなかった場合には、コマンド多重度管理テーブル３０３に対象ホスト１００Ａのエントリを新規追加すると共に、追加したエントリのコマンド多重度欄４０２（図４）に「１」、実行中コマンド数欄４０３に「０」を格納する（ＳＰ９０２）。これにより、かかる対象ホスト１００Ａが初期多重度を「１」としてコマンド多重度管理テーブル３０３に登録されたことになる。
【００５７】
続いて、多重度決定処理プログラム３０２は、受信キュー容量管理テーブル３０４の残量欄５０２（図５）に格納されている空き容量を「１」減らし（ＳＰ９０３）、さらにコマンド多重度管理テーブル３０３上の対象ホスト１００Ａのエントリにおける実行中コマンド数欄４０３（図４）に格納されている実行中コマンド数を「１」増やした後（ＳＰ９０４）、この実行中コマンド数更新処理を終了する。
【００５８】
次に、図１０を参照して、図８のステップＳＰ８１３について上述したコマンド多重度決定処理の詳細を説明する。なお、以下においては、引数としてコマンド処理プログラム３０１から多重度決定処理プログラム３０２に与えられた対象ホストのホスト名が、ホスト１００Ａであったものとする。
【００５９】
多重度決定処理プログラム３０２は、コマンド処理プログラム３０１から呼び出されると（図８のステップＳＰ８１２）、まず、コマンド多重度管理テーブル３０３を走査し、当該コマンド多重度管理テーブル３０３上の対象ホスト１００Ａのエントリを特定する。また多重度決定処理プログラム３０２は、そのエントリのコマンド多重度欄４０２に格納されているコマンド多重度が、当該エントリの実行中コマンド数欄４０３に格納されている実行中コマンド数よりも大きいか否かを判断する（ＳＰ１００１）。
【００６０】
この判断において肯定結果を得ることは、そのとき対象ホスト１００Ａが実際に必要としているコマンド多重度に対して、現在その対象ホスト１００Ａに割り当てられているコマンド多重度が多いことを意味する。従って、このような状態のもとでは、対象ホスト１００Ａに割り当てたコマンド多重度を「１」だけ減らしたとしても、対象ホスト１００ＡについてQUEUE FULL状態が発生するおそれはないものと考えられる。
【００６１】
かくして、このとき多重度決定処理プログラム３０２は、コマンド多重度管理テーブル３０３上のかかる対象ホスト１００Ａのコマンド多重度を「１」減らすと共に（ＳＰ９０２）、受信キュー容量管理テーブル３０４の残量欄５０２に格納された空き容量を「１」増やした後（ＳＰ１００３）、ステップＳＰ１００７に進む。
【００６２】
これに対してステップＳＰ１００１の判断において否定結果を得ることは、そのとき対象ホスト１００Ａが実際に必要としているコマンド多重度に対して、現在その対象ホスト１００Ａに割り当てられているコマンド多重度が少ないことを意味する。従って、このような状態のもとでは、対象ホスト１００Ａに割り当てたコマンド多重度を増やさなければ、その対象ホスト１００ＡについてQUEUE FULL状態が発生するおそれがあるものと考えられる。
【００６３】
かくして、このとき多重度決定処理プログラム３０２は、受信キュー容量管理テーブル３０４の残量欄５０２を参照して、現在、受信コマンドキュー３０５に空き容量があるか否か（空き容量＞０であるか否か）を判断する（ＳＰ１００４）。
【００６４】
そして多重度決定処理プログラム３０２は、この判断において否定結果を得るとステップＳＰＳＰ１００７に進み、これに対して肯定結果を得ると、コマンド多重度管理テーブル３０３上のかかる対象ホスト１００Ａのコマンド多重度を「１」増やすと共に（ＳＰ９０４）、受信キュー容量管理テーブル３０４の残量欄５０２に格納された空き容量を「１」減らし（ＳＰ１００５）、この後ステップＳＰ１００７に進む。
【００６５】
そして多重度決定処理プログラム３０２は、ステップＳＰ１００７に進むと、ステップＳＰ１００２又はステップＳＰ１００５において増減した後のコマンド多重度を、その対象ホスト１００Ａに割り当てるコマンド多重度として決定した後、このコマンド多重度決定処理を終了する。
【００６６】
以上のように、本実施の形態によるストレージシステム１では、ホスト１００のコマンド発行頻度に応じて当該ホスト１００に割り当てるコマンドの多重度を動的に決定し、決定した多重度を当該ホスト１００に設定するため、各ホスト１００に対するコマンド多重度の割り当て及び設定を容易にかつ適切に行うことができる。またこの場合において、各ホスト１００にコマンド多重度を設定したり、これを変更する際にホスト１００を停止させる必要がなく、ストレージシステム１全体としての使い勝手を向上させることができる。
【００６７】
（２）第２の実施の形態
図１において、１Ａは第２の実施の形態によるストレージシステムを示す。このストレージシステム１Ａは、ストレージ装置１２０Ａのローカルメモリ１２８に格納された多重度決定処理プログラム３０２Ａに基づく実行中コマンド数更新処理（図８のステップＳＰ８０９）及びコマンド多重度決定処理（図８のステップＳＰ８１３）の内容が異なる点を除いて第１の実施の形態によるストレージシステム１と同様に構成されている。
【００６８】
図１１は、このような第２の実施の形態による実行中コマンド数変更処理の具体的な処理内容を示すフローチャートである。なお以下において、「n」は、システム管理者が、管理装置１３０を用いてストレージ装置１２０に設定した値である。
【００６９】
多重化度決定処理プログラム３０２Ａは、コマンド処理プログラム３０１に呼び出されると（図８のステップＳＰ８０８）、そのとき引数として与えられた対象ホスト（ホスト１００Ａとする）のホスト名を基にコマンド多重度管理テーブル３０３を検索し、対象ホスト１００Ａのエントリがコマンド多重度管理テーブル３０３上に存在するか否かを調査する（ＳＰ１１０１）。
【００７０】
そして多重度決定処理プログラム３０２Ａは、かかる対象ホスト１００Ａのエントリを検出できた場合には、後述するステップＳＰＳＰ１１０４に進み、これに対して当該エントリを検出できなかった場合には、コマンド多重度管理テーブル３０３に対象ホスト１００Ａのエントリを新規追加すると共に、追加したエントリの多重度欄５０２に「ｎ」、実行中コマンド数欄４０３に「０」を格納する（ＳＰ１１０２）。これにより、かかる対象ホスト１００Ａが初期多重度を「ｎ」としてコマンド多重度管理テーブル３０３に登録されたことになる。
【００７１】
続いて、多重度決定処理プログラム３０２Ａは、受信キュー容量管理テーブル３０４の残量欄５０２（図５）に格納されている空き容量を「ｎ」減らし（ＳＰ１１０３）、さらにコマンド多重度管理テーブル３０３上の対象ホスト１００Ａのエントリにおける実行中コマンド数欄４０３（図４）に格納されている実行中コマンド数を「ｎ」増やした後（ＳＰ１１０４）、この実行中コマンド数更新処理を終了する。
【００７２】
一方、図１２は、第２の実施の形態によるコマンド多重度決定処理の処理内容を示すフローチャートである。なお、以下においては、引数としてコマンド処理プログラム３０１から多重度決定処理プログラム３０２Ａに与えられた対象ホストのホスト名が、ホスト１００Ａであったものとする。
【００７３】
多重度決定処理プログラム３０２Ａは、コマンド処理プログラム３０１から呼び出されると（図８のステップＳＰ８１２）、まず、コマンド多重度管理テーブル３０３を走査し、当該コマンド多重度管理テーブル３０３上の対象ホスト１００Ａのエントリを特定する。また多重度決定処理プログラム３０２Ａは、そのエントリのコマンド多重度欄４０２に格納されているコマンド多重度が、当該エントリの実行中コマンド数欄４０３に格納されている実行中コマンド数よりも大きいか否かを判断する（ＳＰ１２０１）。
【００７４】
そして多重度決定処理プログラム３０２Ａは、この判断において肯定結果を得ると、コマンド多重度管理テーブル３０３上のかかる対象ホスト１００Ａのコマンド多重度を「ｎ」減らすと共に（ＳＰ１２０２）、受信キュー容量管理テーブル３０４の残量欄５０２に格納された空き容量を「ｎ」増やした後（ＳＰ１２０３）、ステップＳＰ１２０７に進む。
【００７５】
これに対して多重度決定処理プログラム３０２Ａは、ステップＳＰ１２０１の判断において否定結果を得ると、受信キュー容量管理テーブル３０４の残量欄５０２を参照して、現在、受信コマンドキュー３０５の空き容量が「ｎ」以上あるか否か（空き容量＞ｎであるか否か）を判断する（ＳＰ１２０４）。
【００７６】
そして多重度決定処理プログラム３０２Ａは、この判断において否定結果を得るとステップＳＰＳＰ１２０７に進み、これに対して肯定結果を得ると、コマンド多重度管理テーブル３０３上のかかる対象ホスト１００Ａのコマンド多重度を「ｎ」増やすと共に（ＳＰ１２０５）、受信キュー容量管理テーブル３０４の残量欄５０２に格納された残量を「ｎ」減らし（ＳＰ１２０５）、この後ステップＳＰ１２０７に進む。
【００７７】
そして多重度決定処理プログラム３０２Ａは、ステップＳＰ１２０７に進むと、ステップＳＰ１２０２又はステップＳＰ１２０５において増減した後のコマンド多重度を、その対象ホスト１００Ａに割り当てるコマンド多重度として決定した後、このコマンド多重度決定処理を終了する。
【００７８】
以上のように、本実施の形態によるストレージシステム１Ａでは、各ホスト１００に割り当てるコマンド多重度を「ｎ」ずつ増減させる。この結果、第１の実施の形態では各ホスト１００に割り当てるコマンド多重度を緩やかにしか変化させることができなかったのに対して、本実施の形態によるストレージシステムで１Ａは、各ホスト１００に割り当てるコマンド多重度をシステム管理者の設定に応じて大きく変化させることができる。
【００７９】
（３）他の実施の形態
なお上述の実施の形態においては、ホスト１００のコマンド発行頻度に応じて当該ホスト１００に割り当てるコマンド多重度を動的に決定し、決定したコマンド多重度を当該ホスト１００に設定する多重度制御部を、コマンド処理プログラム３０１、多重度決定処理プログラム３０２及びこれらを実行するＣＰＵ１２９により構成するようにした場合について述べたが、本発明はこれに限らず、この他種々の構成を広く適用することができる。
【００８０】
具体的には、上述の実施の形態においては、ホスト１００から送信されたコマンドを処理するコマンド処理部や、ホスト１００のコマンド発行頻度に応じて当該ホスト１００に割り当てるコマンド多重度を決定する多重度決定処理部をソフトウェア構成とするようにした場合について述べたが、これらをハードウェア構成とするようにしても良い。
【００８１】
また上述の実施の形態においては、各ホスト１００と通信を行なうと共に、多重度決定処理プログラム３０２が決定したコマンド多重度を対応するホスト１００に設定するインタフェース部としてのインタフェース１２３が、ｉＳＣＳＩ規格に規定された、イニシエータが送信可能な最大のコマンド数をターゲットが制御する制御プロトコルを用いてかかるコマンド多重度をかかるホスト１００に設定するようにした場合について述べたが、本発明はこれに限らず、この他種々の方式を広く適用することができる。
【００８２】
さらに上述の実施の形態においては、ホスト１００からのコマンドをコマンド処理プログラム３０１が処理したタイミングでそのホスト１００に割り当てるコマンド多重度を更新するようにした場合について述べたが、本発明はこれに限らず、例えば定期的に各ホスト１００に割り当てるコマンド多重度を一括して決定し、これを一括して各ホスト１００にそれぞれ設定するようにしても良い。
【００８３】
さらに上述の実施の形態においては、本発明をストレージ装置１２０に適用するようにした場合について述べたが、本発明はこれに限らず、要は、複数のホストからそれぞれ送信されるコマンドに応じた処理を実行するストレージ装置以外の種々の情報処理装置に広く適用することができる。
【産業上の利用可能性】
【００８４】
本発明は、ストレージシステムのほか、複数のホストと各ホストからそれぞれ送信されるコマンドに応じた処理を実行する情報処理装置とを備える種々の情報処理システムに広く適用することができる。
【図面の簡単な説明】
【００８５】
【図１】本実施の形態によるストレージシステムの全体構成を示すブロック図である。
【図２】ｉＳＣＳＩ規格における同時発行コマンド数の制御方式の説明に供するラダーチャートである。
【図３】ローカルメモリに格納される各種制御プログラム及び各種情報の説明に供する概念図である。
【図４】コマンド多重度管理テーブルの説明に供する概念図である。
【図５】受信キュー容量管理テーブルの説明に供する概念図である。
【図６】受信コマンドキューの説明に供する概念図である。
【図７】送信コマンドキューの説明に供する概念図である。
【図８】ストレージ装置に搭載されたコマンド多重化制御機能の説明に供するラダーチャートである。
【図９】第１の実施の形態による実行中コマンド数更新処理の具体的な内容を示すフローチャートである。
【図１０】第１の実施の形態によるコマンド多重度決定処理の具体的な内容を示すフローチャートである。
【図１１】第２の実施の形態による実行中コマンド数更新処理の具体的な内容を示すフローチャートである。
【図１２】第２の実施の形態によるコマンド多重度決定処理の具体的な内容を示すフローチャートである。
【符号の説明】
【００８６】
１，１Ａ……ストレージシステム、１００，１００Ａ，１００Ｂ……ホスト、１０５……ネットワーク、１２０，１２０Ａ……ストレージ装置、１２１……ディスク装置、１２３……インタフェース、１２４……ディスクアダプタ、１２５……キャッシュメモリ、１２６……メモリコントローラ、１２７…………ブリッジ、１２８……ローカルメモリ、１２９……ＣＰＵ、３０１……コマンド処理プログラム、３０２……多重度決定処理プログラム、３０３……コマンド多重度管理テーブル、３０４……受信キュー容量管理テーブル、３０５……受信コマンドキュー、３０６……送信コマンドキュー。
【図１】
2008226040.tif 000003
【図２】
2008226040.tif 000004
【図３】
2008226040.tif 000005
【図４】
2008226040.tif 000006
【図５】
2008226040.tif 000007
【図６】
2008226040.tif 000008
【図７】
2008226040.tif 000009
【図８】
2008226040.tif 000010
【図９】
2008226040.tif 000011
【図１０】
2008226040.tif 000012
【図１１】
2008226040.tif 000013
【図１２】
2008226040.tif 000014