(57)【特許請求の範囲】
【請求項１】
複数の記憶装置を用いて構成される仮想の記憶媒体である仮想ディスクから他の前記仮想ディスクへデータを移行するデータ移行部と、
前記データの移行が行われた場合、自装置に接続されている計算装置に、前記データを記憶する仮想ディスクの状態変更を通知する変更通知部と、
前記状態変更の通知を受けた前記計算装置からデータの移行先の仮想ディスクのコマンドキューイング数の設定の要求を受けて、前記データの移行先の仮想ディスクを構成する前記記憶装置のそれぞれが格納できる処理待ちの命令の数の上限値であるコマンドキューイング数を前記記憶装置毎にそれぞれ取得するキュー数取得部と、
前記データの移行先の前記仮想ディスクを構成する前記記憶装置の前記コマンドキューイング数のうちの最小値を最小キュー数として選択する最小キュー数選択部と、
前記キュー数設定部により選択された前記最小キュー数を、当該最小キュー数が選択された記憶装置が構成する前記仮想ディスクのコマンドキューイング数として前記データの移行先の仮想ディスク毎に設定するキュー数設定部と
を備えることを特徴とするスイッチ装置。 
【請求項２】
複数の記憶装置を用いて構成される仮想の記憶媒体である仮想ディスクから他の前記仮想ディスクへデータを移行し、
前記データの移行が行われた場合、自装置に接続されている計算装置に、前記データを記憶する前記仮想ディスクの状態変更を通知し、
前記状態変更の通知を受けた前記計算装置からデータの移行先の仮想ディスクのコマンドキューイング数の設定の要求を受け、
前記要求を受けて、前記データの移行先の仮想ディスクを構成する前記記憶装置のそれぞれが格納できる処理待ちの命令の数の上限値であるコマンドキューイング数を前記記憶装置毎にそれぞれ取得し、
前記データの移行先の仮想ディスクを構成する前記記憶装置の前記コマンドキューイング数のうちの最小値を最小キュー数として選択し、
選択された前記最小キュー数を、当該最小キュー数が選択された記憶装置が構成する仮想ディスクのコマンドキューイング数として前記データの移行先の前記仮想ディスク毎に設定する
ことを特徴とするスイッチ制御方法。 
【請求項３】
計算装置、スイッチ装置、及び複数の記憶装置を有するストレージシステムであって、
前記計算装置は、前記記憶装置に対するデータの読み書きの命令を前記スイッチ装置へ出力するコマンド出力部を備え、
前記スイッチ装置は、
複数の記憶装置を用いて構成される仮想の記憶媒体である仮想ディスクから他の前記仮想ディスクへデータを移行するデータ移行部と、
前記データの移行が行われた場合、自装置に接続されている計算装置に、前記データを記憶する仮想ディスクの状態変更を通知する変更通知部と、
前記状態変更の通知を受けた前記計算装置からデータの移行先の仮想ディスクのコマンドキューイング数の設定の要求を受けて、前記データの移行先の仮想ディスクを構成する前記記憶装置のそれぞれが格納できる処理待ちの命令の数の上限値であるコマンドキューイング数を前記記憶装置毎にそれぞれ取得するキュー数取得部と、
前記データの移行先の前記仮想ディスクを構成する前記記憶装置の前記コマンドキューイング数のうちの最小値を最小キュー数として選択する最小キュー数選択部と、
前記キュー数設定部により選択された前記最小キュー数を、当該最小キュー数が選択された記憶装置が構成する前記仮想ディスクのコマンドキューイング数として前記データの移行先の仮想ディスク毎に設定するキュー数設定部とを備え、
前記記憶装置は、
入力された前記命令を格納する命令格納部と、
前記格納された前記命令を順次処理する処理実行部とを備え、
前記コマンド出力部は、前記設定されたコマンドキューイング数を各前記仮想ディスクの処理待ちの前記命令の数の上限として、前記命令を出力する
ことを特徴とするストレージシステム。 
【請求項４】
スイッチ装置を介して計算装置に接続される複数の記憶装置を有するストレージ装置であって、
前記スイッチ装置は、
複数の記憶装置を用いて構成される仮想の記憶媒体である仮想ディスクから他の前記仮想ディスクへデータを移行するデータ移行部と、
前記データの移行が行われた場合、自装置に接続されている計算装置に、前記データを記憶する仮想ディスクの状態変更を通知する変更通知部と、
前記状態変更の通知を受けた前記計算装置からデータの移行先の仮想ディスクのコマンドキューイング数の設定の要求を受けて、前記データの移行先の仮想ディスクを構成する前記記憶装置のそれぞれが格納できる処理待ちの命令の数の上限値であるコマンドキューイング数を前記記憶装置毎にそれぞれ取得するキュー数取得部と、
前記データの移行先の前記仮想ディスクを構成する前記記憶装置の前記コマンドキューイング数のうちの最小値を最小キュー数として選択する最小キュー数選択部と、
前記キュー数設定部により選択された前記最小キュー数を、当該最小キュー数が選択された記憶装置が構成する前記仮想ディスクのコマンドキューイング数として前記データの移行先の仮想ディスク毎に設定するキュー数設定部とを備え、
前記記憶装置は、
前記計算装置から前記スイッチ装置を経由して入力された前記記憶装置に対するデータの読み書きの命令を格納する命令格納部と、
前記格納された前記命令を順次処理する処理実行部とを備える
ことを特徴とするストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スイッチ装置、スイッチ制御方法、及びストレージシステムに関する。
【背景技術】
【０００２】
近年、複数の記憶媒体を用いて大容量のデータ記憶を実現するストレージシステムが一般的になっている。このストレージシステムには、例えばストレージエリアネットワーク（Storage Area Network : SAN）と呼ばれるものがある。ストレージシステムでは、計算装置と記憶装置との間に、スイッチ装置（以下では単に「スイッチ」と呼ぶ。）やケーブルなどによるネットワークが構築される。この計算装置は、例えばデータを処理するサーバなどであり、ホストとも呼ばれる。また、記憶装置はハードディスクなどの記憶媒体を有する装置であり、ストレージ装置とも呼ばれる。そして、データやコマンドを含むフレームが計算装置と記憶装置の間のネットワーク上で送受信されることにより、データの書き込みや読み出しが行われる。このとき、計算装置は、イニシエータとして、データの書き込みまたは読み出しのターゲットとなる記憶装置へコマンドを送信する。すなわち、計算装置がストレージシステム内の処理を主導しており、記憶装置は受動的に動作する。
【０００３】
また、近年では、計算装置とストレージ装置との間のデータの送受信を光で行うために、ファイバチャネル（Fibre Channel : FC）が接続ケーブルとして使われることもある。ファイバチャネルを用いた場合、計算装置には、データの光伝送の送受信のポートを有するHost Bus Adopter(HBA)が配置される。またストレージ装置には、Channel Adapter (CA)が設けられており、このＣＡを介してデータの光伝送の送受信が行われる。このファイバチャネルを用いた構成に用いられるスイッチは特に、ファイバチャネルスイッチ（ＦＣスイッチ）と呼ばれる。
【０００４】
さらに、ＦＣスイッチの中でも、物理的な記憶媒体である物理ディスクを仮想化して１つ又は複数の仮想ディスクを構成する機能を備えた仮想化ＦＣスイッチが提案されている。具体的には、仮想化ＦＣスイッチは、自装置に接続されたストレージ装置の任意の記憶領域を仮想ディスクとして構成する。そして、仮想化ＦＣスイッチは、構成した仮想ディスクを仮想ターゲット（Virtual Target : VT）を通してホストに提供する機能を有する。ここで、１つの仮想ターゲットによって提供される複数の仮想ディスクを集めた構成を「仮想ストレージ」という。以下では、単にストレージ装置といった場合、物理的なストレージ装置を指すものとする。また、仮想化ＦＣスイッチには、稼働中の仮想ディスクから他の仮想ディスクへデータを移行する機能を有するものも提案されている。
【０００５】
ここで、ストレージ装置は、一般的にＩ／Ｏ性能を上げるために計算装置から複数のコマンドを同時に受け付け、その受け付けたコマンドを待ち行列に入れる機能を有する。これをコマンドキューングという。ここで、Ｉ／Ｏ性能とは、例えばデータの入出力の性能を指す。図８は、コマンドキューイングを説明するための図である。また、図９は、コマンドキューイング時のシーケンス図である。図９の縦軸は図面に向かって左側から、ホスト２、ＣＡ３０３、キャッシュメモリ３０１、ディスク３０２の経時的な動作を表している。また、各縦軸はいずれも図面の下に向かって時間が経過していることを表している。また、ディスク３０２、キャッシュメモリ３０１、及びＣＡ３０３は記憶装置であるストレージ３に含まれる。
【０００６】
図８において、ホスト２からディスクのブロックＡという領域のデータの読み出しコマンド（Read コマンド）を発行した（ステップＳ３０１）場合を説明する。この場合、キャッシュメモリ３０１に要求されたデータがなければ、ストレージ３は、ブロックＡのデータをディスク３０２から読み出してキャッシュメモリ３０１に記憶させる（ステップＳ３０２）。その後、ストレージ３は、キャッシュメモリ３０１が記憶したデータをホスト２に転送する（ステップＳ３０５）。そのため、ストレージ３からホスト２にブロックＡのデータが送られるまでに、データを読み込んでキャッシュメモリ３０１に記憶させる間の待ち時間ができてしまう。
【０００７】
そこで、ブロックＡのデータをディスク３０２から読み出している間（ステップＳ３０２）に、ホスト２はディスク３０２の別の領域であるブロックＢへの書き込みコマンド（Write コマンド）を発行する（ステップＳ３０３）。書き込みコマンドのデータは、まずキャッシュメモリ３０１に記憶される。このように、書き込みコマンドの処理は、ハードディスクからの読み出しの必要が無いので、ブロックＡのデータの読み出しを待つことなく直ちに実行される（ステップＳ３０４）。
【０００８】
さらに、図９を参照してコマンドキューイングの各装置の動作を時系列的に説明する。ホスト２は、ＣＡ３０３に対して読み出しコマンドを送信する（ステップＳ４０１）。ＣＡ３０３は、キャッシュメモリ３０１に対して読み出しコマンドを送信する（ステップＳ４０２）。この時、キャッシュメモリ３０１に要求されたデータがない場合、すなわちキャッシュミスの場合、ＣＡ３０３は、ディスク３０２に対しキャッシュメモリ３０１への読み出しコマンドを送信する（ステップＳ４０３）。ここで、ホスト２は、ＣＡ３０３に対し書き込みコマンドを送信する（ステップＳ４０４）。すると、ＣＡ３０３を介してキャッシュメモリ３０１に対しデータが書き込まれる（ステップＳ４０５）。そして、書き込みが完了すると、ＣＡ３０３は、書き込み成功の通知をホスト２へ送信する（ステップＳ４０６）。この間にＣＡ３０３は、ステップＳ４０３で読み出し要求があったデータをディスク３０２からキャッシュメモリ３０１へ送信させ、キャッシュメモリ３０１に記憶させる（ステップＳ４０７）。次に、ストレージ３は、キャッシュメモリ３０１に記憶されたデータをＣＡ３０３へ送信する（ステップＳ４０８）。ＣＡ３０３は、受信したデータをホスト２へ送信する（ステップＳ４０９）。そして、ＣＡ３０３は、ホスト２に対し読み出し成功の通知（全処理完了の通知を含む）を出力する（ステップＳ４１０）。以上により、読み出しコマンドがキャッシュメモリ３０１に対して送られてから（ステップＳ４０２）、キャッシュメモリ３０１に対してデータが書き込まれる（ステップＳ４０７）までの時間を有効利用できる。
【０００９】
ここで、格納できる処理待ちの実行命令（コマンド）の上限値であるコマンドキューイング数はストレージ装置によって異なる。「格納」とは処理を実行するまでその実行命令をストレージ装置が記憶しておくことである。また、実行命令とは、ストレージに対し読み書きなどの処理を実行させる命令を指す。操作者は、計算装置に接続する各ストレージ装置のコマンドキューイング数を計算装置のデバイスドライバに設定した後、各ストレージを使用する。
【００１０】
仮想ストレージでは、ストレージ装置の種別によらず複数種類のストレージ装置の記憶領域を併せて１つの仮想ディスクに見せることができる。この場合、計算装置のデバイスドライバに設定するコマンドキューイングの数は、仮想ディスクを構成する各ストレージ装置のコマンドキューイング数を超えることができない。
【００１１】
ここで、図１０を参照して、コマンドキューイング数が異なるストレージ３ａ、３ｂによって仮想ディスクが構築されている場合の各仮想ディスクのコマンドキューイング数について説明する。図１０はコマンドキューイング数が異なるストレージ装置により構築された仮想ストレージシステムの構成図である。ホスト２は、ＦＣスイッチ１を介してストレージ３ａ及びストレージ３ｂとデータの送受信を行う。ＦＣスイッチ１は、仮想ストレージシステム８００として各仮想ストレージ及び仮想ディスクを管理する。仮想ストレージシステム８００は、図１０において点線で囲われて示されている。仮想ディスク８０１、８０２とストレージ３ａ、３ｂとを繋ぐ点線は、各仮想ディスクがどのストレージ装置の物理ディスクで構成されているかを示している。
【００１２】
ここで、ストレージ３ａのコマンドキューイング数は３０、ストレージ３ｂのコマンドキューイング数は１０であるものとする。そうすると、仮想ディスク８０１は、ストレージ３ａの物理ディスクで構成されているのでコマンドキューイング数は３０が上限となる。これに対し、仮想ディスク８０２は、ストレージ３ｂの物理ディスクで構成されているのでコマンドキューイング数は１０が上限となる。このように、仮想ディスクのコマンドキューイング数は、その仮想ディスクを構成するストレージ装置のコマンドキューイング数によって決まるものである。
【００１３】
従来、このように異なる性能を有するストレージを管理する技術として、それぞれの専用ストレージ装置の管理方法が定義されている一つの管理ルールを用いて、異なるストレージ装置タイプを有する専用ストレージ装置を管理する技術が提案されている。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特表２００６−５２４８６４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
ここで、操作者は仮想ディスクを構成するストレージ装置の組み合わせを自由に決めることができる。すなわち、設定可能なコマンドキューイング数は、仮想ディスク毎に異なる場合がある。これに対して従来は、仮想ストレージシステム単位で、仮想ディスクのコマンドキューイング数を設定していた。すなわち、仮想ストレージシステムに含まれる仮想ディスク全体で同一のコマンドキューイング数が設定されていた。このように、従来の方法では、ストレージシステムを構成するストレージ装置のコマンドキューイングの性能を有効活用することは困難であった。
【００１６】
また、上述した一つの管理ルールを用いて複数の専用ストレージ装置を管理する技術は、物理的なストレージ装置それぞれをそのストレージ装置タイプに合わせて管理する技術である。そのため、この様な技術を用いても、仮想ストレージシステムを構成するストレージ装置のコマンドキューイングの性能の有効活用は困難であった。
【００１７】
開示の技術は、上記に鑑みてなされたものであって、各仮想ディスクを構成している記憶装置のコマンドキューイング数の最小値を、該仮想ディスクのコマンドキューイング数に自動的に設定するスイッチ装置、スイッチ制御方法、及びストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【００１８】
本願の開示するスイッチ装置は、一つの態様において、複数の記憶装置を用いて構成される仮想の記憶媒体である仮想ディスクから他の前記仮想ディスクへデータを移行するデータ移行部と、前記データの移行が行われた場合、自装置に接続されている計算装置に、前記データを記憶する仮想ディスクの状態変更を通知する変更通知部と、前記状態変更の通知を受けた前記計算装置からデータの移行先の仮想ディスクのコマンドキューイング数の設定の要求を受けて、前記データの移行先の仮想ディスクを構成する前記記憶装置のそれぞれが格納できる処理待ちの命令の数の上限値であるコマンドキューイング数を前記記憶装置毎にそれぞれ取得するキュー数取得部と、前記データの移行先の前記仮想ディスクを構成する前記記憶装置の前記コマンドキューイング数のうちの最小値を最小キュー数として選択する最小キュー数選択部と、前記キュー数設定部により選択された前記最小キュー数を、当該最小キュー数が選択された記憶装置が構成する前記仮想ディスクのコマンドキューイング数として前記データの移行先の仮想ディスク毎に設定するキュー数設定部とを備える。
【００１９】
また、本願の開示するスイッチ制御方法は、一つの態様において、複数の記憶装置を用いて構成される仮想の記憶媒体である仮想ディスクから他の前記仮想ディスクへデータを移行し、前記データの移行が行われた場合、自装置に接続されている計算装置に、前記データを記憶する前記仮想ディスクの状態変更を通知し、前記状態変更の通知を受けた前記計算装置からデータの移行先の仮想ディスクのコマンドキューイング数の設定の要求を受け、前記要求を受けて、前記データの移行先の仮想ディスクを構成する前記記憶装置のそれぞれが格納できる処理待ちの命令の数の上限値であるコマンドキューイング数を前記記憶装置毎にそれぞれ取得し、前記データの移行先の仮想ディスクを構成する前記記憶装置の前記コマンドキューイング数のうちの最小値を最小キュー数として選択し、選択された前記最小キュー数を、当該最小キュー数が選択された記憶装置が構成する仮想ディスクのコマンドキューイング数として前記データの移行先の前記仮想ディスク毎に設定する。
【００２０】
また、本願の開示するストレージシステムは、一つの態様において、計算装置、スイッチ装置、及び複数の記憶装置を有するストレージシステムであって、前記計算装置は、前記記憶装置に対するデータの読み書きの命令を前記スイッチ装置へ出力するコマンド出力部を備え、前記スイッチ装置は、複数の記憶装置を用いて構成される仮想の記憶媒体である仮想ディスクから他の前記仮想ディスクへデータを移行するデータ移行部と、前記データの移行が行われた場合、自装置に接続されている計算装置に、前記データを記憶する仮想ディスクの状態変更を通知する変更通知部と、前記状態変更の通知を受けた前記計算装置からデータの移行先の仮想ディスクのコマンドキューイング数の設定の要求を受けて、前記データの移行先の仮想ディスクを構成する前記記憶装置のそれぞれが格納できる処理待ちの命令の数の上限値であるコマンドキューイング数を前記記憶装置毎にそれぞれ取得するキュー数取得部と、前記データの移行先の前記仮想ディスクを構成する前記記憶装置の前記コマンドキューイング数のうちの最小値を最小キュー数として選択する最小キュー数選択部と、前記キュー数設定部により選択された前記最小キュー数を、当該最小キュー数が選択された記憶装置が構成する前記仮想ディスクのコマンドキューイング数として前記データの移行先の仮想ディスク毎に設定するキュー数設定部とを備え、前記記憶装置は、入力された前記命令を格納する命令格納部と、前記格納された前記命令を順次処理する処理実行部とを備え、前記コマンド出力部は、前記設定されたコマンドキューイング数を各前記仮想ディスクの処理待ちの前記命令の数の上限として、前記命令を出力する。
【発明の効果】
【００２１】
本願の開示するスイッチ装置、スイッチ制御方法、及びストレージシステムの一つの態様によれば、各仮想ディスクを構成している記憶装置のコマンドキューイング数の最小値を、該仮想ディスクのコマンドキューイング数として自動的に設定できる。すなわち、本願の開示する各態様によれば、各仮想ディスクで使用できる最大のコマンドキューイング数を自動的に設定できる。これにより、ストレージシステムを構成するストレージ装置のコマンドキューイングの性能を有効活用できるという効果を奏する。
【図面の簡単な説明】
【００２２】
【図１】図１は、実施例１に係るスイッチ装置を用いたストレージシステムのブロック図である。
【図２】図２は、実施例２に係るスイッチ装置を用いたストレージシステムのブロック図である。
【図３】図３は、実施例２に係るスイッチ装置を用いたストレージシステムのコマンドキューイング数設定及びアプリケーションの実行のフローチャートである。
【図４】図４は、実施例２に係るスイッチ装置を用いたストレージシステムの構成図である。
【図５】図５は、実施例３に係るスイッチ装置を用いたストレージシステムのブロック図である。
【図６】図６は、実施例３に係るスイッチ装置を用いたストレージシステムの構成図である。
【図７】図７は、実施例３に係るスイッチ装置においてコマンドキューイング数を再設定する際のシーケンス図である。
【図８】図８は、コマンドキューイングを説明するための図である。
【図９】図９は、コマンドキューイング時のシーケンス図である。
【図１０】図１０は、コマンドキューイング数が異なるストレージ装置により構築された仮想ストレージシステムの構成図である。
【発明を実施するための形態】
【００２３】
以下に、本願の開示するスイッチ装置、スイッチ制御方法、及びストレージシステムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００２４】
図１は、実施例１に係るスイッチ装置を用いたストレージシステムのブロック図である。
【００２５】
本実施例に係るスイッチ装置を用いたストレージシステムは、図１に示すように、スイッチ装置であるＦＣスイッチ１、計算装置であるホスト２、及び複数の記憶装置（ストレージ装置）であるストレージ３ａ〜３ｂを備えている。ここで、記憶装置は複数であれば台数に制限はない。また、以下の説明では、ストレージ３ａ〜３ｂをそれぞれ区別しない場合、単に「ストレージ３」と呼ぶ。
【００２６】
ＦＣスイッチ１とホスト２との間は、ファイバチャネルによって接続されている。そして、ＦＣスイッチ１とホスト２とは、ファイバチャネルを用いてデータの送受信を行う。また、ＦＣスイッチ１とストレージ３との間も、ファイバチャネルによって接続されており、ＦＣスイッチ１とストレージ３の間でデータの送受信が行われる。
【００２７】
ＦＣスイッチ１は、キュー数取得部１２、最小キュー数選択部１３、及びキュー数設定部１４を備えている。
【００２８】
キュー数取得部１２は、各仮想ディスクの識別情報、及び各仮想ディスクを構成する物理ディスクを有するストレージ３の識別情報を、外部から取得する。以下の説明では、仮想ディスクを構成する物理ディスクを有するストレージ３を、「仮想ディスクを構成するストレージ３」と言う。そして、この仮想ディスクの数は１つであっても複数であっても良い。以下の説明では、仮想ディスクが複数ある場合で説明する。
【００２９】
さらに、キュー数取得部１２は、取得した識別情報を有するストレージ３それぞれからコマンドキューイング数を取得する。ここで、コマンドキューイング数とは、ストレージ３が格納できる処理待ちの実行命令（コマンド）の上限値を指す。ここで、実行命令とは、ストレージに対し読み書きなどの処理を実行させる命令を指す。キュー数取得部１２は、各仮想ディスクを構成するストレージ３のコマンドキューイング数、及び仮想ディスクの識別情報を最小キュー数選択部１３へ出力する。
【００３０】
最小キュー数選択部１３は、仮想ディスク毎に、仮想ディスクを構成する各ストレージ３のコマンドキューイング数の中から最小値であるコマンドキューイング数を選択する。この最小値のコマンドキューイング数を、以下では「最小キュー数」と呼ぶ。そして、最小キュー数選択部１３は、仮想ディスクの識別情報をキュー数設定部１４へ出力する。また、最小キュー数選択部１３は、選択した最小キュー数を、識別情報を出力した仮想ディスクの最小キュー数としてキュー数設定部１４へ出力する。
【００３１】
キュー数設定部１４は、仮想ディスクの識別情報及びその仮想ディスクの最小キュー数の入力を最小キュー数選択部１３から受ける。キュー数設定部１４は、ホスト２に仮想ディスクの識別情報及びその仮想ディスクの最小キュー数を通知する。これにより、キュー数設定部１４は、最小キュー数選択部１３から入力された識別情報を有する仮想ディスクのコマンドキューイング数として最小キュー数を設定する。
【００３２】
上述してきたように、本実施例では、各仮想ディスクを構成しているストレージのコマンドキューイング数の最小値を、該仮想ディスクのコマンドキューイング数として自動的に設定できる。このように、キュー数設定部１４は、ストレージシステム全体に対して１つのコマンドキューイング数を定めるのではなく、仮想ディスク毎にコマンドキューイング数を定めている。そのため、仮想ディスク毎に使用できる最大のコマンドキューイング数を自動的に設定できるという効果を奏する。これにより、ストレージシステムを構成するストレージ装置のコマンドキューイングの性能を有効活用できる。
【実施例２】
【００３３】
図２は、実施例２に係るスイッチ装置を用いたストレージシステムのブロック図である。図２に示すように、本実施例に係るストレージシステムには、ＦＣスイッチ１、ホスト２、及びストレージ３ａ〜３ｂ（以下では、それぞれのストレージ装置を区別しない場合、単に「ストレージ３」という。）を備える。ここで、図２では例示として２台のストレージ３を記載しているが、このストレージ３は何台あっても良い。また、本実施例も実施例１と同様に、ＦＣスイッチ１、ホスト２、及びストレージ３がそれぞれファイバチャネルで接続されているものとする。
【００３４】
ＦＣスイッチ１は、仮想ディスク構成部１１、キュー数取得部１２、最小キュー数選択部１３、キュー数設定部１４、命令出力部１５、及び応答出力部１６を備える。また、ホスト２は、コマンド出力部２１及び実行部２２を備える。さらに、ストレージ３ａ〜３ｂは、それぞれ命令格納部３１ａ〜３１ｂ、処理実行部３２ａ〜３２ｂを備える。
【００３５】
仮想ディスク構成部１１は、メモリやハードディスクなどの記憶媒体を有している。仮想ディスク構成部１１は、ストレージ３ａ〜３ｂからそれぞれの物理ディスクの構成情報を取得する。そして、仮想ディスク構成部１１は、ストレージ３ａ〜３ｂそれぞれの物理ディスクの構成情報を自己が有する記憶媒体に記憶する。
【００３６】
さらに、仮想ディスク構成部１１は、ホスト２から仮想ディスクの構成情報の指定とともに仮想ディスク作成命令の入力を受ける。ここでの説明では、一例としてホスト２から仮想ディスク作成命令の入力を受けているが、仮想ディスク構成部１１は、図示されていない他の管理端末などから作成命令の入力を受けても良い。ここで、仮想ディスクの構成の指定には、少なくとも、仮想ディスクを構成するストレージ３の指定、ストレージ３内における使用するハードディスクの指定、及び仮想ディスクの記憶容量の指定が含まれる。そして、仮想ディスク構成部１１は、指定された仮想ディスクの構成を満たすように仮想ディスクを作成する。具体的には、仮想ディスク構成部１１は、作成する仮想ディスクに適当な識別情報を割り当てる。そして、仮想ディスク構成部１１は、その識別情報に対応させて、仮想ディスクを構成するストレージ３の情報、ストレージ３内における使用するハードディスクの情報、及び仮想ディスクの記憶容量を記憶する。一例として、ストレージ３ａのハードディスクとストレージ３ｂのハードディスクとを組み合わせて識別情報００ｘの仮想ディスクを構成する場合を説明する。仮想ディスク構成部１１は、作成命令を受けて、作成する仮想ディスクに対して識別情報００ｘを発行する。そして、仮想ディスク構成部１１は、識別情報００ｘに対応させて、ストレージ３ａ及びストレージ３ｂの識別情報、並びにストレージ３ａ及びストレージ３ｂ内で使用するハードディスクの識別情報を自己が有する記憶媒体に記憶する。さらに、仮想ディスク構成部１１は、指定された記憶容量を記憶するとともに、各ハードディスクにおける使用する記憶容量を決定し記憶する。ここで、複数のハードディスクを使用する場合、仮想ディスク構成部１１は、例えば指定された記憶容量をそのハードディスクの個数で等分するなどして各ハードディスクで使用する記憶容量を決定する。
【００３７】
そして、仮想ディスク構成部１１は、仮想ディスクの識別情報とともに、その仮想ディスクを構成するストレージ３の識別情報をキュー数取得部１２へ出力する。以下では、ストレージ３ａ及びストレージ３ｂで構成された識別情報００ｘを有する仮想ディスクについて説明する。
【００３８】
ここで、本実施例では、ＦＣスイッチ１に設けられた仮想ディスク構成部１１によって仮想ディスクが作成される構成としている。しかし、この仮想ディスク構成部１１は、ＦＣスイッチ１に設けられていなくてもよい。その場合には、以下で説明するキュー数取得部１２は、仮想ディスク構成部１１を有する外部の装置から各仮想ディスクの識別情報及びその仮想ディスクを構成するストレージの識別情報を取得する。
【００３９】
キュー数取得部１２は、キュー数設定部１４から各仮想ディスクのコマンドキューイング数の取得命令を受信する。このコマンドキューイング数の取得命令を受けて、キュー数取得部１２は、仮想ディスク構成部１１から仮想ディスクの識別情報００ｘとともに、その仮想ディスクを構成するストレージ３ａ、３ｂの識別情報を取得する。キュー数取得部１２は、取得した識別情報を有するストレージ３ａの命令格納部３１ａに対し、コマンドキューイング数の問い合わせを行う。同様に、キュー数取得部１２は、取得した識別情報を有するストレージ３ｂの命令格納部３１ｂに対し、コマンドキューイング数の問い合わせを行う。例えば、キュー数取得部１２は、ＳＣＳＩ(Small Computer System Interface )コマンドであるMode Sense コマンドをストレージ３ａ、３ｂへ出力することでそれぞれのコマンドキューイング数を問い合わせる。そして、キュー数取得部１２は、命令格納部３１ａ、３１ｂから応答を受けて、ストレージ３ａ、３ｂのそれぞれのコマンドキューイング数を取得する。本実施例では、ストレージ３ａのコマンドキューイング数が３０、ストレージ３ｂのコマンドキューイング数が１０である場合で説明する。
【００４０】
キュー数取得部１２は、識別情報００ｘの仮想ディスクを構成するストレージ３ａ、３ｂについて取得したコマンドキューイング数を、識別情報００ｘに対応させて、最小キュー数選択部１３へ出力する。
【００４１】
最小キュー数選択部１３は、仮想ディスクの識別情報００ｘとともに、ストレージ３ａ及びストレージ３ｂのコマンドキューイング数の入力をキュー数取得部１２から受ける。本実施例では、最小キュー数選択部１３は、ストレージ３ａのコマンドキューイング数として３０の入力を受ける。また、最小キュー数選択部１３は、ストレージ３ｂのコマンドキューイング数として１０の入力を受ける。そして、最小キュー数選択部１３は、入力されたコマンドキューイング数のうち最も小さい値のコマンドキューイング数を最小キュー数として選択する。ここでは、最小キュー数選択部１３は、最小キュー数としてストレージ３ｂのコマンドキューイング数である１０を選択する。そして、最小キュー数選択部１３は、選択した最小キュー数を各仮想ディスクの識別情報に対応させてキュー数設定部１４へ出力する。ここでは、最小キュー数選択部１３は、最小キュー数として１０を識別情報００ｘに対応させてキュー数設定部１４へ出力する。
【００４２】
キュー数設定部１４は、各仮想ディスクのコマンドキューイング数の問い合わせをコマンド出力部２１から受ける。この問い合わせは、例えば、ＳＣＳＩのMode Sense コマンドが使用される。キュー数設定部１４は、各仮想ディスクのコマンドキューイング数の取得命令をキュー数取得部１２に出力する。
【００４３】
また、キュー数設定部１４は、最小キュー数選択部１３から、各仮想ディスクの識別情報とともに該仮想ディスクに対応する最小キュー数の入力を受ける。そして、キュー数設定部１４は、受信した最小キュー数をコマンドキューイング数として仮想ディスクの識別情報と対応させてコマンド出力部２１へ出力する。例えば、キュー数設定部１４は、識別情報００ｘである仮想ディスクのコマンドキューイング数として１０を識別情報００ｘに対応させてコマンド出力部２１へ出力する。
【００４４】
ここの説明は、ストレージ３ａ、３ｂで構成された仮想ディスクにおけるコマンドキューイング数の設定についての説明なので、そのコマンドキューイング数は、コマンドキューイング数が少ない方のストレージ３ｂのコマンドキューイング数に設定される。これに対し、例えば、ストレージ３ａだけで構成された仮想ディスクの場合、最小キュー数はストレージ３ａのコマンドキューイング数に一致する。そのため、この様な場合には、キュー数設定部１４は、仮想ディスクのコマンドキューイング数をストレージ３ａのコマンドキューイング数である３０に設定する。このように、仮想ディスクのコマンドキューイング数を、その仮想ディスクで使用できる最大の値に設定することができる。したがって、ストレージシステムを構成するストレージ３のコマンドキューイングの性能を有効活用することが可能となる。
【００４５】
命令出力部１５は、仮想ディスクに対するデータの読み書きなどの実行命令の入力をコマンド出力部２１から受ける。この実行命令には仮想ディスクの識別情報なども含まれている。命令出力部１５は、入力された識別情報に対応する仮想ディスクを特定する。そして、命令出力部１５は、特定した仮想ディスクを構成するストレージ３に実行命令を出力する。例えば、データの読み出し命令であれば、命令出力部１５は、仮想ディスクを構成するストレージ３のうち、指定されたデータが実際に記憶されているハードディスクを有するストレージ３に対し実行命令を出力する。また、データの書き込み命令であれば、命令出力部１５は、仮想ディスクを構成するストレージ３の中から適当なストレージ装置を選択し、その選択したストレージ３に実行命令を出力する。例えば、このストレージ装置の選択は、仮想ディスクを構成するストレージ３のうち、仮想ディスクに使用しているハードディスクの容量が最も多く残っている装置を選択することで行われる。
【００４６】
応答出力部１６は、ストレージ３から実行命令に対する応答の入力を受ける。応答出力部１６は、受信した応答を実行部２２へ出力する。また、応答出力部１６は、応答を出力した旨の通知をコマンド出力部２１へ出力する。ここで、本実施例では、応答出力部１６がコマンド出力部２１へ応答を出力した旨の通知を行っているが、応答出力部１６より応答を受信した実行部２２がコマンド出力部２１へ通知する構成でも良い。
【００４７】
コマンド出力部２１は、メモリやハードディスクなどの記憶媒体を有している。コマンド出力部２１は、キュー数設定部１４に対し、コマンドキューイング数を問い合わせる。この問い合わせは、例えばコマンド出力部２１がＳＣＳＩのMode Sense コマンドを出力することで実行される。この問い合わせのタイミングは、例えばホスト２に電源が投入されたタイミングなどである。そして、コマンド出力部２１は、仮想ディスクの識別情報に対応した各仮想ディスクのコマンドキューイング数の入力をキュー数設定部１４から受ける。そして、コマンド出力部２１は、各仮想ディスクのコマンドキューイング数を仮想ディスクの識別情報に対応させて記憶する。
【００４８】
また、コマンド出力部２１は、仮想ディスクに対するデータの読み書きなどの実行命令を命令出力部１５へ出力する。このとき、コマンド出力部２１は、キュー数設定部１４から入力されたコマンドキューイング数を上限として、各仮想ディスクへの実行命令の出力を行う。具体的には、コマンド出力部２１は、仮想ディスクに対する実行命令を出力し、出力した実行命令の数がその仮想ディスクのコマンドキューイング数に達すると、その仮想ディスクへの実行命令の出力を停止する。その後、コマンド出力部２１は、その仮想ディスクへの実行命令に対する応答を出力した旨の通知を応答出力部１６から受けると、その仮想ディスクへの実行命令の出力を再開する。
【００４９】
実行部２２は、ストレージ３を用いるアプリケーションを実行する。このとき、実行部２２は、応答出力部１６よりストレージ３からの応答を取得しアプリケーションの実行に用いる。
【００５０】
次にストレージ３ａ、３ｂについて説明するが、ストレージ３ａ及びストレージ３ｂは同じ構成の機能部を備え、命令格納部３１ａ、３１ｂ、及び処理実行部３２ａ、３２ｂはそれぞれ同じ動作を行う。そこで、以下の説明では、ストレージ３ａについて説明する。ただし、各機能部の動作や構成はストレージ３ｂについても同様である。
【００５１】
処理実行部３２ａは、命令出力部１５から実行命令の入力を受ける。処理実行部３２ａは、自己がその実行命令を処理できる場合、入力された実行命令に従ってデータの読み書きなどの処理を行う。これに対し、現在処理を行うなどしているため、新たに入力された実行命令を処理できない場合、処理実行部３２ａは、その新たに入力された実行命令を命令格納部３１ａへ出力する。
【００５２】
処理実行部３２ａは、実行命令の処理を行った後、その実行命令に対する応答を応答出力部１６へ出力する。
【００５３】
命令格納部３１ａは、メモリやハードディスクなどの記憶媒体を有している。命令格納部３１ａは、ストレージ３ａのコマンドキューイング数を予め記憶している。命令格納部３１ａは、コマンドキューイング数の問い合わせをキュー数取得部１２から受信する。そして、命令格納部３１ａは、コマンドキューイング数の問い合わせに対し、自己が記憶しているストレージ３ａのコマンドキューイング数を、キュー数取得部１２へ出力する。
【００５４】
また、命令格納部３１ａは、処理実行部３２ａから実行命令の入力を受ける。命令格納部３１ａは、入力された実行命令を自己の記憶領域に格納していく。この時、命令格納部３１ａは、自己が記憶しているコマンドキューイング数を上限として実行命令の格納を行う。例えば、命令格納部３１ａは、コマンドキューイング数と同数の実行命令を格納している状態で、新たに実行命令が入力された場合、処理不可といった応答を処理実行部３２ａに返信する。ただし、本実施例では、コマンド出力部２１は各仮想ディスクのコマンドキューイング数を把握している。そのため、命令格納部３１ａが、コマンドキューイング数を超えて実行命令の入力を受けることはない。
【００５５】
さらに、命令格納部３１ａは、処理実行部３２ａからの実行命令の出力要求に対し、適切な実行命令を出力する。ここで、適切な実行命令とは、処理の優先順位が高い実行命令や一番古く格納された実行命令などである。この実行命令の選択方法は、運用条件に合わせて設定されることが好ましい。また、本実施形態では、処理実行部３２ａで実行命令をまず受けて、その実行命令が処理できない場合に命令格納部３１ａへ格納する構成としているが、これは他の構成でも良い。例えば、命令格納部３１ａで実行命令を一旦受けてから、処理実行部３２ａが処理を行える状態か否かを判断し、処理が行える状態の場合に、処理実行部３２ａに実行命令を出力する構成でも良い。
【００５６】
次に図３を参照して、実施例２に係るスイッチ装置を用いたストレージシステムのコマンドキューイング数の設定及びアプリケーションの実行の動作について説明する。図３は、実施例２に係るスイッチ装置を用いたストレージシステムのコマンドキューイング数の設定及びアプリケーションの実行のフローチャートである。図３の処理を行う前提として、仮想ディスク構成部１１は、各ストレージ３の物理ディスクを用いて仮想ディスクを予め構成している。また、仮想ディスク構成部１１は、構成した仮想ディスクの識別情報及び各仮想ディスクを構成するストレージ３の識別情報を記憶している。
【００５７】
まず、操作者が、ホスト２の電源を入れる（ステップＳ１０１）。電源が入れられると、コマンド出力部２１は、各仮想ディスクのコマンドキュー数をキュー数設定部１４に問い合わせる（ステップＳ１０２）。キュー数設定部１４は、キュー数取得部１２に対して各仮想ディスクのコマンドキュー数の取得命令を出力する（ステップＳ１０３）。
【００５８】
キュー数取得部１２は、キュー数設定部１４からのコマンドキュー数の問い合わせを受けて、各仮想ディスクの識別情報及び各仮想ディスクを構成するストレージ３の識別情報を仮想ディスク構成部１１から取得する（ステップＳ１０４）。
【００５９】
キュー数取得部１２は、仮想ディスク毎に、仮想ディスクを構成する各ストレージ３のコマンドキューイング数をそれぞれのストレージ３に問い合わせる。そして、キュー数取得部１２は、仮想ディスク毎に、仮想ディスクを構成するストレージ３のそれぞれのコマンドキューイング数を取得する（ステップＳ１０５）。
【００６０】
最小キュー数選択部１３は、仮想ディスク毎に、仮想ディスクを構成するストレージ３のコマンドキューイング数の最小値を最小キュー数として選択する。そして、最小キュー数選択部１３は、仮想ディスクの識別情報とその仮想ディスクの最小キュー数とを対応させてキュー数設定部１４へ出力する（ステップＳ１０６）。
【００６１】
キュー数設定部１４は、各仮想ディスクの識別情報に対応させた該仮想ディスクの最小キュー数の入力を最小キュー数選択部１３から受ける。そして、キュー数設定部１４は、受信した最小キュー数をコマンドキューイング数として各仮想ディスクの識別情報に対応させてコマンド出力部２１へ出力する（ステップＳ１０７）。
【００６２】
コマンド出力部２１は、各仮想ディスクの識別情報と該仮想ディスクのコマンドキューイング数との対応をキュー数設定部１４から受信する。そして、コマンド出力部２１は、各仮想ディスクのコマンドキューイング数と該仮想ディスクの識別情報とを対応させて記憶する（ステップＳ１０８）。
【００６３】
操作者は、仮想ディスクに対してデータの読み書きなどを行うアプリケーションを実行部２２に起動させる（ステップＳ１０９）。
【００６４】
コマンド出力部２１は、実行命令の出力の対象となる仮想ディスクにおいて、定められたコマンドキューイング数だけ実行命令が蓄積したかを判断する（ステップＳ１１０）。コマンドキューイング数の実行命令が蓄積していると判断した場合（ステップＳ１１０Ｙｅｓ）、ステップＳ１１０の判断を繰り返す。ここで、コマンド出力部２１は、応答出力部１６から実行命令を処理した旨の通知を受けると、蓄積している実行命令の数が減ったことが分かる。そして、コマンドキューイング数の実行命令が蓄積した状態のときに、蓄積している実行命令の数が減ると、コマンド出力部２１は、蓄積している実行命令がコマンドキューイング数より少ないと判断できる。
【００６５】
一方、蓄積している実行命令が定められたコマンドキューイング数より少ないと判断した場合（ステップＳ１１０Ｎｏ）、コマンド出力部２１は、命令出力部１５へ実行命令を出力する（ステップＳ１１１）。
【００６６】
実行部２２は、アプリケーションの実行が終了したか否かを判断する（ステップＳ１１２）。アプリケーションがまだ実行中の場合（ステップＳ１１２Ｎｏ）、ステップＳ１１１０へ戻る。
【００６７】
一方、アプリケーションの実行が終了した場合（ステップＳ１１２Ｙｅｓ）、実行部２２及びコマンド出力部２１による実行命令の出力は終了する。
【００６８】
次に、図４を参照して本実施例に係るスイッチ装置を用いたストレージシステムの動きを具体的に説明する。図４は、実施例２に係るスイッチ装置を用いたストレージシステムの構成図である。ここでは、論理ユニット番号（Logical Unit Number : LUN）０を有する仮想ディスク１０２とＬＵＮ１を有する仮想ディスク１０３との２つの仮想ディスクが構成されている。そして、ストレージ３ａのコマンドキューイング数は３０であり、ストレージ３ｂのコマンドキューイング数は１０である。
【００６９】
ＦＣスイッチ１は、スイッチの動作制御を行うソフトウェアである制御ファームウェア１２０を記憶している。そして、ＦＣスイッチ１は、制御ファームウェア１２０によって動作が制御される。以下の説明のＦＣスイッチ１の各動作は、実際には制御ファームウェア１２０によって制御されているものである。また、ホスト２におけるデータの送受信はデバイスドライバ２００によって制御される。以下の説明のホスト２の各動作は、実際にはデバイスドライバ２００によって制御されているものである。
【００７０】
ＶＴ１０１は、仮想化ターゲット（Virtual Target : VT）である。仮想化ターゲットとは、ホスト２とのデータの送受信を行う仮想的な入出力ポートである。ホスト２は、ＶＴ１０１を経由して仮想ディスク１０２又は仮想ディスク１０３に接続する。ホスト２は、この接続が確立した状態でＦＣスイッチ１に対し実行命令を送信して、仮想ディスク１０２又は仮想ディスク１０３へのデータの読み出しや書き込みを行う。
【００７１】
図４の仮想ディスク１０２、１０３とストレージ３ａ、３ｂとを結ぶ点線は、各仮想ディスクを構成しているストレージを表している。仮想ディスク１０２は、ストレージ３ａ及びストレージ３ｂによって構成されている。仮想ディスク１０３は、ストレージ３ａのみで構成されている。そして、ＶＴ１０１、仮想ディスク１０２、及び仮想ディスク１０３で１つの仮想ストレージが構成されている。ＦＣスイッチ１は、仮想ストレージシステム１００として仮想ストレージを管理する。仮想ストレージシステム１００は、図４において点線で囲んで示されている。
【００７２】
電源が入れられると、ホスト２は、ＬＵＮ０である仮想ディスク１０２及びＬＵＮ１である仮想ディスク１０３のコマンドキューイング数を問い合わせる。ＦＣスイッチ１は、問い合わせを受けて、まずＬＵＮ０である仮想ディスク１０２を構成しているストレージ３ａ及びストレージ３ｂに対してコマンドキューイング数の問い合わせを行う。そして、ＦＣスイッチ１は、ストレージ３ａ、３ｂからの応答により、ストレージ３ａのコマンドキューイング数が３０であり、ストレージ３ｂのコマンドキューイング数が１０であることを把握する。そして、ＦＣスイッチ１は、最小キュー数を取得する。ここでは、ストレージ３ｂのコマンドキューイング数の方が小さいので、ＦＣスイッチ１は、最小キュー数として１０を取得する。同様にして、ＦＣスイッチ１は、ＬＵＮ１である仮想ディスク１０３を構成しているストレージ３ａに対してコマンドキューイング数の問い合わせを行う。そして、ＦＣスイッチ１はストレージ３ａからの応答により、ストレージ３ａのコマンドキューイング数が３０であることを把握する。そして、ストレージ３ａのコマンドキューイング数が最も小さいコマンドキューイング数であるので、ＦＣスイッチ１は、最小キュー数として３０を取得する。ここで、本実施例では、ＦＣスイッチ１は、ホスト２の問い合わせを契機として最小キュー数の取得をおこなっているが、ＦＣスイッチ１は、最小キュー数を予め取得しておいても良い。
【００７３】
そして、ＦＣスイッチ１は、ホスト２に対して、ＬＵＮ０である仮想ディスク１０２のコマンドキューイング数として１０をホスト２に出力する。また、ＦＣスイッチ１は、ホスト２に対して、ＬＵＮ１である仮想ディスク１０３のコマンドキューイング数として３０をホスト２に出力する。ホスト２は、ＬＵＮ０である仮想ディスク１０２のコマンドキューイング数を１０として記憶する。また、ホスト２は、ＬＵＮ１である仮想ディスク１０３のコマンドキューイング数を３０として記憶する。
【００７４】
次に、ホスト２が、仮想ディスク１０２又は仮想ディスク１０３へ実行命令を出力する場合について説明する。
【００７５】
ホスト２は、記憶している仮想ディスク１０２のコマンドキューイング数である１０を、待機させることができる実行命令の数の上限として、仮想ディスク１０２に対し実行命令を出力する。また、ホスト２は、記憶している仮想ディスク１０３のコマンドキューイング数である３０を、待機させることができる実行命令の数の上限として、仮想ディスク１０３に対し実行命令を出力する。
【００７６】
すなわち、ホスト２は、実行命令の出力の対象が仮想ディスク１０２（ＬＵＮ０）の場合はコマンドキューイング数を１０として実行命令の出力を行える。また、ホスト２は、実行命令の出力の対象が仮想ディスク１０３（ＬＵＮ１）の場合はコマンドキューイング数を３０として実行命令の出力を行える。このように、ホスト２は、仮想ディスク毎、すなわち論理ユニット単位で、それぞれ異なるコマンドキューイング数の実行命令を出力することができる。
【００７７】
上述してきたように、本実施例では、仮想ディスクを構成するストレージの中で最もコマンドキューイング数が少ないものを取得し、その仮想ディスクのコマンドキューイング数として設定する。これにより、本実施例では、仮想ディスク毎に使用できる最大の値のコマンドキューイング数を設定することができる。そして、その設定したコマンドキューイング数を上限としてホストは仮想ディスクに対し実行命令を出力することができる。したがって、ストレージシステムを構成するストレージのコマンドキューイングの性能を有効活用することが可能となる。
【実施例３】
【００７８】
図５は、実施例３に係るスイッチ装置を用いたストレージシステムのブロック図である。本実施例に係るＦＣスイッチ１は実施例２に係るＦＣスイッチ１においてデータ移行部１７及び変更通知部１８をさらに備えたものである。本実施例に係る各機能部において、実施例２と同様の符号を有する機能部は特に説明のない限り同様の機能を有するものとする。
【００７９】
本実施例に係るＦＣスイッチ１は、稼働中の仮想ディスクに記憶されているデータを他の仮想ディスクへ移行し、さらに、データの移行先の仮想ディスクのコマンドキューイング数をホスト２に通知する構成が実施例２と異なる。ここで、仮想ディスクが稼働中とは、その仮想ディスクを構成する物理ディスクがオンラインの状態にあることを指す。このデータの移行は「マイグレーション」と呼ばれることもある。そこで、以下では、仮想ディスク間のデータの移行及びデータの移行に伴うコマンドキューイング数の通知について主に説明する。
【００８０】
ここで、本実施例においても、ＦＣスイッチ１に設けられた仮想ディスク構成部１１によって仮想ディスクが作成される構成としている。しかし、この仮想ディスク構成部１１は、ＦＣスイッチ１に設けられていなくてもよい。
【００８１】
データ移行部１７は、仮想ディスク構成部１１が構成した仮想ディスクのうちの稼働中の１つの仮想ディスクからデータを読み出す。以下では、このデータを「移行対象データ」と呼ぶ。データ移行部１７は、読み出した移行対象データを他の仮想ディスクへ書き込む。
【００８２】
さらに、データ移行部１７は、移行対象データを移行した移行先の仮想ディスクの識別情報を命令出力部１５へ出力する。また、データ移行部１７は、移行対象データを他の仮想ディスクに移行して、論理ユニットを構成する仮想ディスクを変更した旨の通知を変更通知部１８へ出力する。
【００８３】
命令出力部１５は、移行先の仮想ディスクの識別情報をデータ移行部１７から受信する。命令出力部１５は、移行後の初めての実行命令をコマンド出力部２１から受けると、変更通知部１８へ変更の通知命令を出力する。また、命令出力部１５は、移行対象データに対する実行命令の入力をコマンド出力部２１から受けると、その移行対象データに対する実行命令を移行先の仮想ディスクを構成するストレージ３へ出力する。ここで、上述した始めての実行命令が、移行対象データに対する実行命令であっても良い。
【００８４】
変更通知部１８は、データ移行部１７から論理ユニットを構成する仮想ディスクの変更が行われた旨の通知を受信する。そして、変更通知部１８は、仮想ディスクの変更によるコマンドキューイング数の変更をシステムの新たな状態情報として記憶する。ここで、状態情報とは、システムの構成などの状態を表す情報であり、例えばコマンドキューイング数の変更などの情報が含まれている。そして、変更通知部１８は、命令出力部１５から変更の通知命令を受けて、コマンド出力部２１へシステムの新たな状態情報を有している旨の通知を出力する。そして、変更通知部１８は、状態情報の取得要求をコマンド出力部２１から受けて、コマンドキューイング数の変更の通知をコマンド出力部２１へ出力する。
【００８５】
コマンド出力部２１は、変更通知部１８からコマンドキューイング数の変更の通知を受けると、キュー数設定部１４に対し、各仮想ディスクのコマンドキューイング数を問い合わせる。そして、コマンド出力部２１は、キュー数設定部１４から各仮想ディスクのコマンドキューイング数の入力を受ける。この、コマンド出力部２１によるコマンドキューイング数の取得は、実施例１で説明したコマンドキューイング数の取得と同じ動作が実行される。
【００８６】
そして、移行対象データに対する処理の実行命令を実行部２２から受信した場合、コマンド出力部２１は、移行先の仮想ディスクのコマンドキューイング数を上限として命令出力部１５に対し実行命令を出力する。このとき、本実施例では、コマンド出力部２１は、実行命令を出力する対象として移行前の仮想ディスクに格納されている移行対象データを指定する。このように、コマンド出力部２１が、移行前の仮想ディスクに格納されている移行対象データを実行命令の対象として指定しても、命令出力部１５は移行先の仮想ディスクに格納されている移行対象データを対象として実行命令を出力するので問題はない。
【００８７】
ここで、図６を参照して本実施例に係るスイッチ装置を用いたストレージシステムの動きを具体的に説明する。図６は、実施例３に係るスイッチ装置を用いたストレージシステムの構成図である。ここでは、ストレージ３ａで構成される仮想ディスク１０４から、ストレージ３ｂで構成される仮想ディスク１０７へデータが移行された場合で説明する。ストレージ３ａはコマンドキューイング数が３０であり、ストレージ３ｂはコマンドキューイング数が１０である。ＦＣスイッチ１は、仮想ストレージシステム１１０として各仮想ストレージを管理する。仮想ストレージシステム１１０は、図６において点線で囲われて示されている。
【００８８】
ＦＣスイッチ１は、制御ファームウェア１２０を記憶している。そして、ＦＣスイッチ１は、制御ファームウェア１２０によって動作が制御される。以下の説明のＦＣスイッチ１の各動作は、実際には制御ファームウェア１２０によって制御されているものである。また、ホスト２におけるデータの送受信はデバイスドライバ２００によって制御される。以下の説明のホスト２の各動作は、実際にはデバイスドライバ２００によって制御されているものである。
【００８９】
ＶＴ１０１は、仮想化ターゲットである。ホスト２は、ＶＴ１０１を経由してＬＵＮ０である仮想ディスク１０４、ＬＵＮ１である仮想ディスク１０５、及びＬＵＮ２である仮想ディスク１０６に接続する。ホスト２は、この接続が確立した状態でＦＣスイッチ１に対し実行命令を送信して、仮想ディスク１０４〜１０６へのデータの読み出しや書き込みを行う。
【００９０】
図６の仮想ディスク１０４〜１０６とストレージ３ａとを結ぶ点線、及び仮想ディスク１０７とストレージ３ｂとを結ぶ点線は、各仮想ディスクを構成しているストレージを表している。仮想ディスク１０４〜１０６は、ストレージ３ａによって構成されている。仮想ディスク１０７は、ストレージ３ｂによって構成されている。
【００９１】
まず、データの移行前の状態では、ＬＵＮ０である仮想ディスク１０４が、移行対象データを記憶している。仮想ディスク１０４〜１０６のコマンドキューイング数は、ストレージ３ａのコマンドキューイング数である３０である。この状態では、ホスト２は、待機させておける実行命令の上限値を３０として、仮想ディスク１０４に記憶されている移行対象データに対する実行命令を出力する。また、ホスト２は、待機させる実行命令の上限値を３０として、仮想ディスク１０５及び仮想ディスク１０６に対する実行命令の出力を行う。
【００９２】
そして、仮想ディスク１０４の稼働中に、仮想ディスク１０４から仮想ディスク１０７への移行対象データの移行が行われる。これにより、仮想ディスク１０７がＬＵＮ０となる。そして、仮想ディスク１０７が移行対象データを記憶する。
【００９３】
仮想ディスク１０７は、ストレージ３ｂのみで構成されているので、そのコマンドキューイング数はストレージ３ｂのコマンドキューイング数と同じく１０である。したがって、移行することで移行対象データはコマンドキューイング数が１０の仮想ディスク１０７に記憶されることになる。この移行が行われると、仮想ディスク１０７がＬＵＮ０である仮想ディスクとしてＶＴ１０１を介してホスト２と接続することになる。すなわち、移行後の状態では、ＬＵＮ０に記憶されている移行対象データに対する実行命令をホスト２が出力した場合、仮想ディスク１０７が実際の実行命令の入力を受ける相手となる。
【００９４】
ＦＣスイッチ１は、仮想ディスク１０４から仮想ディスク１０７へのデータの移行を行った後、データに対する読み出し命令などをホスト２から受けると、データの移行の発生の情報をホスト２に通知する。そして、ホスト２は、データの移行が発生した場合、ＬＵＮ０である仮想ディスク１０７、ＬＵＮ１である仮想ディスク１０５、及びＬＵＮ２である仮想ディスク１０６のそれぞれのコマンドキューイング数をＦＣスイッチ１から取得する。このとき、ホスト２は、仮想ディスク１０７のコマンドキューイング数として１０を取得する。これにより、ホスト２は、仮想ディスク１０７のコマンドキューイング数である１０を待機させておける実行命令の上限値として、移行対象データに対する実行命令を出力することができる。また、ホスト２は、仮想ディスク１０５及び仮想ディスク１０６のコマンドキューイング数として３０を取得する。これにより、ホスト２は、仮想ディスク１０５及び仮想ディスク１０６に対しては、待機させておける実行命令の上限値を３０として実行命令を出力することができる。ここで、本実施例ではホスト２は、仮想ストレージシステム１１０に含まれるすべての論理ドライブ（ＬＵＮ０〜２）についてのコマンドキューイング数を取得している。これは他の方法でも良く、ホスト２は、コマンドキューイング数が変更された論理ドライブ（ＬＵＮ０）のコマンドキューイング数のみを取得し、他の論理ドライブ（ＬＵＮ１、２）については既に取得しているコマンドキューイング数を用いてもよい。
【００９５】
次に、図７を参照して、実施例３に係るスイッチ装置のコマンドキューイング数の設定の動作の流れについて説明する。図７は、実施例３に係るスイッチ装置のコマンドキューイング数の設定のシーケンス図である。図７は紙面に向かって左端からホスト２、ＶＴ１０１、仮想ディスク１０４又は仮想ディスク１０７、仮想ディスク１０５、及び仮想ディスク１０６の経時的な動作を表している。ここで、仮想ディスク１０４及び仮想ディスク１０７は、移行対象データの移行により途中で入れ替わることでともにＬＵＮ０となるので１つの縦軸で表している。そして、それぞれの縦軸は下に向かって時間が経過していることを表している。また、以下で説明するＶＴ１０１の動作とは、実際にはＶＴ１０１を介してＦＣスイッチ１が動作することを表している。また、以下の説明では、読み出しコマンドを例に説明しているが、使用されるコマンドは書き込みコマンド（Write Command）など他のコマンドでもよい。さらに、各ステップにおいて使用するコマンドが異なってもよい。そして、図７においても、図６と同様に、仮想ディスク１０４〜１０６はストレージ３ａで構成されており、仮想ディスク１０７はストレージ３ｂで構成されているものとする。また、このシーケンス図の前提として、ホスト２には、ＬＵＮ０〜２である仮想ディスク１０４〜１０６のそれぞれのコマンドキューイング数が設定されているものとする。
【００９６】
ホスト２は、ＶＴ１０１に対して、読み出しコマンド（Read Command）を送信する（ステップＳ２０１）。この場合、仮想ディスク１０４〜１０６のいずれもストレージ３ａから構成される仮想ディスクであり、コマンドキューイング数は３０である。したがって、ホスト２は、ＶＴ１０１を介して接続できるＬＵＮ０〜２である仮想ディスク１０４〜１０６のコマンドキューイング数を全て３０に設定している。ＶＴ１０１は、指定されたデータを仮想ディスク１０４〜１０６のいずれかから読み出し、ホスト２へ出力する。これにより、ホスト２はデータの読み出し（Read Data）が行える（ステップＳ２０２）。ここで、ステップＳ２０１及びステップＳ２０２の動作は、データの移行前、もしくはデータの移行後でコマンドキューイング数の設定が終わった後の動作である。そこで、このステップＳ２０１及びステップＳ２０２の動作はデータの移行が発生するまで繰り返される。
【００９７】
ＬＵＮ０である仮想ディスク１０４から仮想ディスク１０７にデータが移行され、仮想ディスク１０７がＬＵＮ０となる（ステップＳ２０３）。ここで、ＬＵＮ０のデータの移行中に、ホスト２からＬＵＮ０に対するコマンドが入力された場合、ＦＣチャネル１は、仮想ディスク１０４のデータに対してコマンドを実行する。そして、ＦＣチャネル１は、実行したコマンドがデータの書き込みや変更などであった場合、データの移行の完了後に、仮想ディスク１０７のデータに対して、データ移行中に行われたデータの更新を反映させる。
【００９８】
ホスト２は、データの移行後の最初の読み出しコマンドをＶＴ１０１に対して出力する（ステップＳ２０４）。ＶＴ１０１は、データの移行後の最初の読み出しコマンドを受信すると、新たなシステムの状態(Status)情報を保持していることを通知する応答を出力する（ステップＳ２０５）。この応答は、例えばUnit Attention ステータスなどである。Unit Attention ステータスとは、取り外し可能な媒体の変更の可能性、あるいは、実行命令の対象がリセットされたことを示す応答である。
【００９９】
ホスト２は、ＶＴ１０１からの通知を受けて、状態情報の取得要求を出力する（ステップＳ２０６）。これは、Request Senseといったコマンドを使用してなされる。すると、ＶＴ１０１は、使用されていない特定のＳＣＳＩコマンドを用いて仮想ディスクのコマンドキューイング数に変更があったことを通知する（ステップＳ２０７）。
【０１００】
ホスト２は、ＶＴ１０１に対して、ＬＵＮ０の仮想ディスク１０７のコマンドキューイング数の問い合わせを行う（ステップＳ２０８）。これに対し、ＶＴ１０１は、ＬＵＮ０である仮想ディスク１０７からコマンドキューイング数を取得する（ステップＳ２０９）。ここで、実際には、ＦＣスイッチ１は、仮想ディスク１０７を対象にして、実施例１で説明したコマンドキューイング数の取得の動作を行う。仮想ディスク１０７は、ストレージ３ｂのみで構成されているため、コマンドキューイング数は１０である。そこで、ＶＴ１０１は、仮想ディスク１０７のコマンドキューイング数として１０を取得する。そして、ＶＴ１０１は、仮想ディスク１０７のコマンドキューイング数として１０をホスト２に通知する（ステップＳ２１０）。
【０１０１】
次に、ホスト２は、ＶＴ１０１に対して、ＬＵＮ１の仮想ディスク１０５のコマンドキューイング数の問い合わせを行う（ステップＳ２１１）。これに対し、ＶＴ１０１は、ＬＵＮ１である仮想ディスク１０５からコマンドキューイング数を取得する（ステップＳ２１２）。ここでも、実際には、ＦＣスイッチ１は、仮想ディスク１０５を対象にして、実施例１で説明したコマンドキューイング数の取得の動作を行う。仮想ディスク１０５は、ストレージ３ａのみで構成されているため、コマンドキューイング数は３０である。そこで、ＶＴ１０１は、仮想ディスク１０５のコマンドキューイング数として３０を取得する。そして、ＶＴ１０１は、仮想ディスク１０５のコマンドキューイング数として３０をホスト２に通知する（ステップＳ２１３）。
【０１０２】
次に、ホスト２は、ＶＴ１０１に対して、ＬＵＮ２の仮想ディスク１０６のコマンドキューイング数の問い合わせを行う（ステップＳ２１４）。これに対し、ＶＴ１０１は、ＬＵＮ２である仮想ディスク１０６からコマンドキューイング数を取得する（ステップＳ２１５）。ここでも、実際には、ＦＣスイッチ１は、仮想ディスク１０６を対象にして、実施例１で説明したコマンドキューイング数の取得の動作を行う。仮想ディスク１０６は、ストレージ３ａのみで構成されているため、コマンドキューイング数は３０である。そこで、ＶＴ１０１は、仮想ディスク１０６のコマンドキューイング数として３０を取得する。そして、ＶＴ１０１は、仮想ディスク１０６のコマンドキューイング数として３０をホスト２に通知する（ステップＳ２１６）。
【０１０３】
ホスト２は、ＬＵＮ０〜２である仮想ディスク１０５〜１０７のそれぞれのコマンドキューイングを取得した後に、再度読み出しコマンドをＶＴ１０１へ出力する（ステップＳ２１７）。ＶＴ１０１は、受信した読み出しコマンドで指定されているデータを仮想ディスク１０５〜１０７のいずれかから取得し、ホスト２へ出力する。これにより、ホスト２は、データの読み出し(Read Data)が行える（ステップＳ２１８）。
【０１０４】
この点、従来は、データの移行が行われても、デバイスドライバは移行対象データの格納先を同じ仮想ディスクとして把握していた。そのため、デバイスドライバは、仮想ディスクを構成するストレージ装置が変更されたことは把握できなかった。したがって、従来は仮想ディスク間のデータの移行に合わせてコマンドキューイング数を変更することはできなかった。
【０１０５】
これに対し、上述してきたように、実施例３では、稼働中の仮想ディスクから他の仮想ディスクへデータの移行が行われたときに、ホストは、移行先の仮想ディスクのコマンドキューイング数の変更を把握することができる。これにより、ホストは移行先の仮想ディスクのコマンドキューイング数を上限としてそのデータに対する実行命令を出力することができる。したがって、データの移行が発生した場合にも、ストレージシステムを構成するストレージのコマンドキューイングの性能を有効活用することが可能となる。
【０１０６】
ここで、本実施例では、いずれの仮想ディスクも１つのストレージのみで構成される場合で説明したが、実際には仮想ディスクを構成するストレージの数はいくつでも良い。その場合には、各仮想ディスクを構成するストレージのコマンドキューイング数のうち最小の値が、その仮想ディスクのコマンドキューイング数となる。この各仮想ディスクにはデータ移行後の移行先の仮想ディスクも含まれる。
【符号の説明】
【０１０７】
１  ＦＣスイッチ
２  ホスト
３ａ、３ｂ  ストレージ
１１  仮想ディスク構成部
１２  キュー数取得部
１３  最小キュー数選択部
１４  キュー数設定部
１５  命令出力部
１６  応答出力部
１７  データ移行部
１８  変更通知部
２１  コマンド出力部
２２  実行部
３１ａ、３１ｂ  命令格納部
３２ａ、３２ｂ  処理実行部
【図１】
0005532980.tif 000002
【図２】
0005532980.tif 000003
【図３】
0005532980.tif 000004
【図４】
0005532980.tif 000005
【図５】
0005532980.tif 000006
【図６】
0005532980.tif 000007
【図７】
0005532980.tif 000008
【図８】
0005532980.tif 000009
【図９】
0005532980.tif 000010
【図１０】
0005532980.tif 000011