(57)【要約】【課題】従来の記憶装置の提供する経路障害の復旧手段はバッファないしキャッシュといったリソースが必要であり、従来のスイッチでは対応することが困難である。【解決手段】コンピュータと記憶装置の間のスイッチが、中継するコマンドを管理し、障害を検出するとエラー応答をコンピュータに送信すると同時に、以後のコマンドを代替経路に中継するよう設定を変更する。【選択図】  図１
2005051335.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置及び計算機と接続されるスイッチであって、
前記記憶装置とは複数の通信線で接続されており、
前記記憶装置又は前記計算機と接続される複数のインターフェース部及び前記複数のインターフェース部を接続する内部スイッチを有し、
前記複数のインターフェース部のうちの第一のインターフェース部は、前記計算機からコマンドを受信して前記複数の通信線のうちの第一の通信線を介して前記記憶装置へ前記コマンドを転送し、前記第一の通信線の障害を検出したら、前記第一のインターフェース部は、前記計算機へ前記受信したコマンドのエラーを通知するフレームを送信し、前記障害を通知するフレームを前記計算機に送信した後は、前記第一のインターフェース部は、前記第一の通信線とは異なる第二の通信線を使用して前記計算機から受信するコマンドを前記記憶装置へ転送することを特徴とするスイッチ。
【請求項２】
前記第一のインターフェース部は、前記記憶装置へ送信したコマンドに対する応答を一定時間経過しても受信しない場合に、前記第一の通信線の障害と判断することを特徴とする請求項１記載のスイッチ。
【請求項３】
前記第一のインターフェース部は、前記記憶装置との物理的接続の切断を電気信号で判断して前記第一の通信線の障害を検出することを特徴とする請求項１記載のスイッチ。
【請求項４】
前記第一のインターフェース部は記憶部を有し、
前記第一のインターフェース部は前記コマンドを受信したら前記記憶部に前記コマンドを識別するための識別子を前記記憶部に記録し、前記コマンドで指定される処理の終了を示すフレームを前記記憶装置から受信したら、前記終了を示すフレームに対応する前記コマンドの識別子を前記記憶部から消去し、
前記第一の通信線の障害を検出した場合、前記第一のインターフェース部は、その時点で前記記憶部に記録されている識別子に対応するコマンドのエラーを示すフレームを前記計算機に送信することを特徴とする請求項１記載のスイッチ。
【請求項５】
前記第一のインターフェース部は、前記記憶部に記録された識別子に対応する前記コマンドに基づいたデータの転送が開始された場合に、そのデータ転送の実施を示す情報を前記記憶部に記録し、
前記第一の通信線の障害を検出した場合、前記第一のインターフェース部は、前記記憶部に記録された識別子に対応するコマンドのうち、前記データの転送実施を示す情報が記録されている前記コマンドについて、エラーを示すフレームを作成し、前記計算機に送信することを特徴とする請求項４記載のスイッチ。
【請求項６】
前記第一のインターフェース部は、前記第一の通信線の障害を検出した場合、前記記憶部に記録された識別子に対応する前記コマンドのうち、前記データの転送の実施を示す情報が登録されていないコマンドについては、前記第二の通信線を介して前記コマンドを前記記憶装置へ送信することを特徴とする請求項５記載のスイッチ。
【請求項７】
前記第一のインターフェース部は、前記計算機へ仮想的な記憶装置を提供し、前記計算機から前記仮想的な記憶装置へのコマンドを受信した前記第一のインターフェース部は、前記仮想的な記憶装置へのコマンドを前記記憶装置へのコマンドへ変換することを特徴とする請求項１記載のスイッチ。
【請求項８】
記憶装置及び計算機と接続されるスイッチにおけるフレーム転送方法であって、
前記計算機からコマンドを受信して第一の通信線を介して前記記憶装置へ前記コマンドを転送し、
前記第一の通信線の障害を検出し、
前記計算機へ前記受信したコマンドのエラーを通知するフレームを送信し、
前記障害を通知するフレームを前記計算機に送信した後は、前記第一の通信線とは異なる第二の通信線を使用して前記計算機から受信するコマンドを前記記憶装置へ転送することを特徴とするフレーム転送方法。
【請求項９】
前記受信したコマンドを示す識別子を記録し、
前記第一の通信線の障害を検出したら、前記記録された識別子に対応するコマンドのエラーを通知するフレームを前記計算機に送信することを特徴とする請求項８記載のフレーム転送方法。
【請求項１０】
前記記録された識別子に対応するコマンドに基づくデータ転送の有無を記録し、
前記第一の通信線の障害を検出したら、前記記録された識別子に対するコマンドのうち、前記データ転送があるコマンドのエラーを通知するフレームを前記計算機に送信することを特徴とする請求項９記載のフレーム転送方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネットワークで使用されるスイッチ又はネットワークに接続された装置に仮想化された記憶装置を提供するスイッチ（以下「仮想化スイッチ」）及びこれを含むコンピュータシステムに関する。
【０００２】
【従来の技術】
計算機（以下「コンピュータ」）と記憶装置システムとの間のデータ転送の信頼性を高めるための方法として、コンピュータと記憶装置システムとの間のアクセス経路（以下「アクセスパス」）を複数用意し、障害発生時にはアクセスパスを切替えることでコンピュータから記憶装置システムへのアクセスを継続するという技術が知られている。
【０００３】
例えば特許文献１には、複数の接続用ポートを持つ記憶装置ユニットを制御する記憶装置システムが、記憶装置ユニットへの１つのアクセスパスに障害が発生すると、他のアクセスパスを用いてコンピュータからのアクセス処理を継続し、コンピュータに対して障害の発生を隠蔽する技術が開示されている。
【０００４】
また特許文献２には、記憶装置システムが、自身が有する記憶装置へのアクセスパス障害を検出し、コンピュータに他のアクセスパスの使用を指示するエラー応答を返し、コンピュータが他のアクセスパスにアクセス要求（以下「コマンド」）を発行しなおすことで、アクセスパス切替えを実現する技術が開示されている。
【０００５】
【特許文献１】
特開平１１−１２００９２号公報
【特許文献２】
特開平１０−２１０１６号公報
【０００６】
【発明が解決しようとする課題】
特許文献１に開示された装置ではコンピュータに対してアクセスパスの障害を隠蔽することが出来るが、障害の隠蔽を実現するには、転送中のデータを装置内で一時的に保持するバッファ等の記憶装置が必須となる。これは、障害の隠蔽を図る装置が、障害発生時に行っていたデータ転送を他のアクセスパス（以下「代替パス」）を用いて再実行（以下「リトライ」）する必要があるためである。
【０００７】
ここで、特許文献１に開示された技術を適用する装置として、ＲＡＩＤのような記憶装置システムを考える。この場合、記憶装置システムには性能向上を目的としてキャッシュメモリが搭載されることが多いので、このキャッシュメモリをリトライ用のコマンドやデータを保持するバッファとして使用すればよい。
【０００８】
しかし、最近コンピュータと記憶装置システムとを接続するストレージエリアネットワーク（以下「ＳＡＮ」）と呼ばれる技術が出現しており、ＳＡＮを構成しデータを中継する装置（以下「スイッチ」）にアクセスパス切替えの機能を持たせたいという要求がある。特に、スイッチが、複数の記憶装置システムの記憶領域を仮想化して一つ又は複数の仮想的な記憶装置システムをコンピュータに提供する場合、スイッチと実際の記憶装置システムとの間のアクセスパスの管理はスイッチで行わざるを得ない。
【０００９】
この場合、特許文献１に開示された技術をスイッチに適用しようとすると、余分なメモリをスイッチに持たせることなり、コスト増となる。
【００１０】
一方、特許文献２に開示された装置はコンピュータにアクセスパスの障害発生を通知し、コンピュータが代替パスにコマンドを再発行することでアクセスパス切替えを行う。従って、本装置では、コンピュータにアクセスパス切替えの機能を追加する必要がある。この場合でも、ネットワークに接続されたコンピュータ全てにアクセスパス切り替えのソフトウエア等をインストールする必要があるので、やはりコスト増となる。
【００１１】
本発明の目的は、コンピュータに機能を追加せずバッファなどのリソースを節約したアクセスパス切替えを可能にする装置および方法を提供することである。
【００１２】
【課題を解決するための手段】
本発明の一実施形態は以下に示す通りである。記憶装置とコンピュータを接続するスイッチが、パス切替えを行う。
【００１３】
具体的には、スイッチはコンピュータからコマンドを受信すると、コマンドを発行したコンピュータとコマンドの発行先である記憶装置などの対応情報を一時的に記憶する。その対応情報は、コマンドが完了する時に消去される。
【００１４】
又、スイッチはコマンドの発行先の記憶装置または記憶装置への経路で障害が発生したことを判断し、対応情報に基づいてコンピュータへコマンドのエラー応答を返すとともに、以後の当該記憶装置へのコマンドの送信を代替パスで行うように設定を変更する。コンピュータはエラー応答を受信すると、同一の記憶装置にコマンドをリトライする。スイッチは、受信したコマンドを代替パスに中継する。これによりパス切替えが完了する。
【００１５】
尚、別の実施形態として、スイッチが仮想的な記憶装置を提供し、その仮想的な記憶装置へコンピュータがコマンドを送信したときにパス切り替えを行う構成が考えられる。
【００１６】
又、別の実施形態として、コマンドのエラーをコンピュータに報告する際、既にデータ転送の処理が開始されているコマンドについてのみエラーを報告する構成が考えられる。
【００１７】
【発明の実施の形態】
図１は、本発明を適用したコンピュータシステムの第一の実施形態の例を示す図である。
コンピュータシステムは、記憶装置１０４、コンピュータ（以下「ホスト」）１０５及びこれらを相互に接続するＳＡＮ１０１とを有する。
【００１８】
記憶装置１０４は、単体のハードディスクドライブ等を有する記憶装置や、複数の記憶装置を有する記憶装置システムである。又、ホスト１０５は一般的な計算機である。
【００１９】
ＳＡＮ１０１は、記憶装置１０４とホスト１０５との間を接続し、ホスト１０５が記憶装置１０４に格納されたデータにアクセスするために使用するネットワークである。この様なＳＡＮ１０１は、例えばファイバチャネルやＩＰネットワークにＳＣＳＩプロトコルに従うフレームを流し、スイッチを用いてそのフレームをルーティングするように構成される。ＳＡＮ１０１は、仮想化スイッチ１０２、スイッチ１０３を有し、仮想化スイッチ１０２には管理端末１０６が接続される。又、スイッチ間は通信線で相互に結合されている。
【００２０】
記憶装置１０４と仮想化スイッチ１０２との間は、接続しているケーブルの切断などの障害に対応する目的で、二系統のアクセスパスで接続されている。
【００２１】
仮想化スイッチ１０２、スイッチ１０３には、お互いを識別する為にＳＡＮ１０１内でユニークな識別子であるドメインアドレスが割り振られている。さらにＳＡＮ１０１に接続される各装置（記憶装置１０４及びホスト１０５）には、各々ユニークな識別子であるＳＡＮアドレスが割り振られる。ＳＡＮアドレスは、ＳＡＮアドレスが割り振られる装置と他のスイッチを介さずに直接接続される仮想化スイッチ１０２又はスイッチ１０３に割り振られているドメインアドレス及びそのスイッチに接続される装置群（以下「ドメイン」）内でユニークな識別子であるローカルアドレスとから構成される。尚、ＳＡＮアドレスは、一つの装置に複数、例えばＳＡＮ１０１との物理的な接続ポートごとに割り振られても良い。尚本実施形態では、記憶装置１０４とホスト１０５はそれぞれ２つのＳＡＮアドレスを有するとする。
【００２２】
記憶装置１０４とホスト１０５は、コマンドやデータ等をフレームと呼ばれる単位で交換する。各フレームはヘッダ情報を格納する領域とペイロードから構成される。ヘッダ情報には送信元と送信先のＳＡＮアドレス（以下、「送信元アドレス」「送信先アドレス」）等が含まれる。又、ペイロードには、ＬＵＮと後述するコマンド、データ、レスポンスなどの情報が格納される。尚、ＬＵＮとは、記憶装置内部の論理的な記憶領域（以下「論理ユニット」）を表す番号である。
【００２３】
仮想化スイッチ１０２及びスイッチ１０３は、フレームの送信先アドレスに基づいてフレームの中継（「フレームルーティング」）を行う。
【００２４】
また、仮想化スイッチ１０２は、他のスイッチ１０３と同様にフレームルーティングを行うのに加え、ホスト１０１に仮想的な記憶装置（以下「仮想記憶装置１０７」）を提供する。仮想記憶装置１０７は、実際は仮想化スイッチ１０２に接続される記憶装置１０４が有する幾つかの論理ユニットの集合体である。仮想記憶装置１０７が有する記憶領域に対するアクセスを記憶装置１０４が有する論理ユニットへのアクセスへ変換するために、仮想化スイッチ１０２は、仮想化記憶装置１０７の記憶領域と記憶装置１０４の論理ユニットとの対応関係に関する情報を有している。
【００２５】
ホスト１０５は、ＣＰＵ１０５１、ＲＡＭ１０５２、ホストバスアダプタ（以下「ＨＢＡ」）１０５３を有する。ＣＰＵ１０５１は、ＨＢＡ１０５３を介してコマンドをペイロードに含むフレーム（以下「コマンドフレーム」）を記憶装置１０４や仮想記憶装置１０７に送信することで、記憶装置１０４等にコマンドを発行する。その際、ホスト１０５は、ヘッダ情報に先述した送信元アドレス、送信先アドレスに加えて、タグ（以下「ホストタグ」）を付加する。
【００２６】
ホストタグは、ホスト１０５が同一の記憶装置１０４へ複数のコマンドを発行した場合に、記憶装置１０４とホスト１０５との間で転送されるデータとホスト１０５が発行したコマンドとの対応関係を識別するために用いられる情報である。
【００２７】
記憶装置１０４は、２個のポート１０４１、コントローラ１０４２、メディア１０４３から構成される。ポート１０４１からコマンドフレームを受信した記憶装置１０４は、コントローラ１０４２でコマンドを解釈し、ポート１０４１を用いてデータをペイロードに含むフレーム（以下「データフレーム」）を送受信することでデータ転送を実行するとともにメディア１０４３のデータを読み書きする。尚、メディア１０４３は、ハードディスク、ＤＶＤ等の不揮発性の記憶媒体であり、又、ＲＡＩＤ等の冗長構成となっていても良い。
【００２８】
又、記憶装置１０４は、データ転送が完了すると、コマンドを発行した相手にコマンドが正常に終了したかどうかを示すレスポンスを返すことでデータ転送の完了をホスト１０４へ通知する。レスポンスは、レスポンス情報をペイロードに含むフレーム（以下「レスポンスフレーム」）を用いて通知される。データフレームやレスポンスフレームは、ヘッダ情報に送信元アドレス、送信先アドレスに加えて、データやレスポンスに対応するコマンドフレームに含まれていたホストタグを含む。
【００２９】
データフレームやレスポンスフレームを受信したホスト１０５は、そのフレームのホストタグをチェックすることでどのコマンドに対応するデータないしレスポンスであるのかを判断できる。
【００３０】
また、管理端末１０６はホスト１０５と同様の構成を持つ計算機である。管理者ないしユーザは、管理端末１０６を介して仮想化スイッチ１０２の設定を行うことが出来る。
【００３１】
図２は、仮想化スイッチ１０２の構成を示す図である。
仮想化スイッチ１０２は、複数のポートユニット１１１、管理ユニット１１２及びそれらを結合する内部スイッチ１１３を有する。
【００３２】
ポートユニット１１１は、ＳＡＮ１０１に接続される各装置（以下「ノード」）であるスイッチ１０２、記憶装置１０４及びホスト１０５と仮想化スイッチ１０２とを接続するために使用されるインタフェイスである。ポートユニット１１１は、他のノードと接続されてフレームの送受信を行うＳＡＮインタフェイス１１１１、プログラムを実行するＣＰＵ１１１２、データを格納するＲＡＭ１１１３、プログラムを格納するＲＯＭ１１１４、一定周期でＣＰＵ１１１２に信号を送るタイマ１１１５及び内部スイッチ１１３と接続される内部インタフェイス１１１６を有する。ＳＡＮインタフェイス１１１１は、接続されたノードからフレームを受信すると、ＲＡＭ１１１３内部のフレーム転送バッファ１２９に受信したフレームを書き込む。
【００３３】
管理ユニット１１２は、管理端末１０６と仮想化スイッチ１０２とを接続するために使用されるインタフェイスである。管理ユニット１１２は、管理端末１０６と接続され、管理用のコマンドやデータを送受信する管理インタフェイス１１２１、プログラムを実行するＣＰＵ１１２２、データを格納するＲＡＭ１１２３、プログラムを格納するＲＯＭ１１２４、後述するデータを格納するＮＶＲＡＭ１１２５及び内部スイッチ１１３と接続される内部インタフェイス１１１６を有する。
【００３４】
内部スイッチ１１３は、各ポートユニット１１１と管理ユニット１１２とを接続し、フレームや管理用メッセージの中継などを行う。管理用メッセージは、ポートユニット１１１と管理ユニット１１２の間で構成情報などを交換するためのメッセージである。
【００３５】
ポートユニット１１１のＣＰＵ１１１２と管理ユニット１１２のＣＰＵ１１２２とは、内部インタフェイス１１１６を介して、お互いのフレーム転送バッファ１２９にフレームの転送をしたり、管理用メッセージをお互いに送受信したりできる。
【００３６】
各ポートユニット１１１及び管理ユニット１１２は、お互いを識別するために仮想化スイッチ１０２内部でユニークなユニットＩＤという識別子を有する。内部インタフェイス１１１６は、ＣＰＵ１１１２、１１２２によって指定されるユニットＩＤに対応するポートユニット１１１ないし管理ユニット１１２にフレームや管理用メッセージを転送する。
【００３７】
尚、上述した構成は仮想化スイッチ１０２の構成の一例であり、同等の機能を提供出来るならば、仮想化スイッチ１０２の構成は、本構成に限定されるものではない。例えばポートユニット１１１においてＣＰＵ１１１２、ＲＡＭ１１１３、ＲＯＭ１１１４、タイマ１１１５を、それらの機能を併せ持つ高機能プロセッサで置き換えても問題ない。
【００３８】
以下、本実施形態では、ホスト１０５が仮想記憶装置１０７にアクセスするものとして、仮想化スイッチ１０２が仮想化スイッチ１０２と記憶装置１０４との間のアクセスパスに発生する障害を検出し、障害の復旧を行う方法を説明する。
【００３９】
本発明の仮想化スイッチ１０２の動作の概要は以下のとおりである。
仮想化スイッチ１０２は、ホスト１０５からホストタグつきのコマンドフレームを受け取り、そのホストタグを記録しかつコマンドフレームが指定する仮想記憶装置１０７に対応する記憶装置１０４を決定し、記憶装置１０４にタグ（仮想化スイッチ１０２が別途作成したタグ）つきのコマンドフレームを送信する。
【００４０】
記憶装置１０４はその応答として、タグつきのデータフレームやレスポンスフレームを返す。仮想化スイッチ１０２は受信したフレームを仮想記憶装置１０７からのリプライとしてホストタグを付加してホスト１０５に返す。この際、仮想化スイッチ１０２は、リプライされるフレームに関連するホストタグを記録から消去する。
【００４１】
さらにここで仮想化スイッチ１０２と記憶装置１０４間でアクセスパスの障害が発生した場合、仮想化スイッチ１０２は記録してあったホストタグに対応するレスポンスフレームをホスト１０５へ送信することでエラーを通知して、ホスト１０５にそのホストタグと関連するコマンドフレームを再送させる。それとともに、仮想化スイッチ１０２は、障害が発生したアクセスパスの切り替えを行い、以後ホスト１０５から仮想記憶装置１０７へのコマンドフレームを受信すると、他のアクセスパスを用いて記憶装置１０４へコマンドフレームを送信する。
【００４２】
以下、仮想化スイッチ１０２の処理手順の詳細を説明するが、その前に、仮想化スイッチ１０２での処理に必要なプログラム及びデータの構成について予め説明する。
【００４３】
図３は、ポートユニット１１１のＲＯＭ１１１４に格納されるプログラム及びデータの構成を示す図である。ここに示されたプログラムはＣＰＵ１１１２で実行される。
ＲＯＭ１１１４には、初期化プログラム１２１、ルーティングプログラム１２２、フレーム転送プログラム１２３、実仮想変換プログラム１２５及び障害処理プログラム１２６が格納されている。
【００４４】
初期化プログラム１２１は仮想化スイッチ１０２の起動時にＣＰＵ１１１２で実行され、ＣＰＵ１１１２は、後述するルーティングテーブル１２８、フレーム転送バッファ１２９、コマンド管理テーブル１３０、アクセスパステーブル１３１及び仮想記憶装置構成テーブル１３２を初期化する。
【００４５】
ルーティングプログラム１２２は、ＳＡＮインタフェイス１１１１や内部インタフェイス１１１６によってフレーム転送バッファ１２９にフレームが書き込まれるときにＣＰＵ１１１２が後述するルーティング処理を行い、フレームの転送先のユニットＩＤを決定する際に実行される。またルーティングプログラム１２２は、処理対象フレームが仮想記憶装置１０７のＳＡＮアドレスを送信先アドレスに含む場合は実仮想変換プログラム１２５を呼び出す処理を行う。
【００４６】
フレーム転送プログラム１２３は、フレーム転送バッファ１２９が保持しているフレームを、他のポートユニット１１１や管理ユニット１１２へ転送するためにＣＰＵ１１１２が実行するプログラムである。
【００４７】
実仮想変換プログラム１２５は仮想記憶装置１０７に対して発行されたコマンドを実行するための処理をＣＰＵ１１１２が行う際に実行されるプログラムで、コマンド開始処理１２５１、データフレーム処理１２５２及びコマンド終了処理１２５３のサブプログラムを有する。
【００４８】
障害処理プログラム１２６は、仮想化スイッチ１０２から記憶装置１０４に発行したコマンドの実行に障害が発生した場合、それを検出し障害を復旧する処理を行う際に、ＣＰＵ１１１２で実行されるプログラムである。障害処理プログラム１２６は、タイムアウト検出処理１２６１及びリカバリ処理１２６２のサブプログラムを有する。タイマ１１１５からの信号に基づいてＣＰＵ１１１２はタイムアウト検出処理１２６１を定期的に実行し、仮想化スイッチ１０２から記憶装置１０４へ発行したコマンドのタイムアウトを検出する。タイムアウトとは、仮想化スイッチ１０２が記憶装置１０４にコマンドを発行してから、そのコマンドに対応するレスポンスを受信するまでの時間が一定以上になることを示す。タイムアウトを検出したＣＰＵ１１１２はリカバリ処理１２６２を実行し、障害を復旧する。
【００４９】
ルーティングテーブル１２８は、ＣＰＵ１１１２がルーティング処理を行う際に必要となるテーブルである。テーブルの内容については後述する。
フレーム転送バッファ１２９は、ＲＡＭ１１１３に確保された記憶領域で、ＣＰＵ１１１２がフレームを処理するために、一時的にフレームを格納するためのバッファである。
【００５０】
コマンド管理テーブル１３０は、ＣＰＵ１１１２が実仮想変換プログラム１２５及び障害処理プログラム１２６を実行する際に使用するテーブルである。
アクセスパステーブル１３１は、仮想記憶装置１０７を提供するために仮想化スイッチ１０２が使用する記憶装置１０４を、アクセスパスごとに管理するためのテーブルである。
仮想記憶装置構成テーブル１３２は、仮想記憶装置１０７とアクセスパスの対応を管理するテーブルである。
【００５１】
図４は、管理ユニット１１２のＲＯＭ１１２４及びＮＶＲＡＭ１１２５に格納されたプログラム及びデータの構成を示す図である。
【００５２】
ＲＯＭ１１２４には、初期化プログラム１４１、管理端末応答プログラム１４３及びフレーム転送プログラム１２３が格納されている。
【００５３】
初期化プログラム１４１は、仮想化スイッチ１０２の起動時にＣＰＵ１１２２で実行され、ＣＰＵ１１２２は、ルーティングテーブル１２８とフレーム転送バッファ１２９を初期化し、仮想記憶装置構成テーブル１３２の内容に基づき、ルーティングテーブル１２８に仮想記憶装置１０７に対応するエントリを登録する。
【００５４】
管理端末応答プログラム１４３は、管理インタフェイス１１２１を介した管理端末１０６からの要求に応じて、ＣＰＵ１１２２がアクセスパステーブル１３１、仮想記憶装置構成テーブル１３２の変更を行い、それに伴いルーティングテーブル１２８を変更する際に実行される。
【００５５】
尚、ＮＶＲＡＭ１１２３には、ポートユニット１１１と同じ内容のアクセスパステーブル１３１、仮想記憶装置構成テーブル１３２、ルーティングテーブル１２８及びフレーム転送バッファ１２９が格納されている。
【００５６】
図５は、アクセスパステーブル１３１の構成例を示す図である。
アクセスパステーブル１３１は、複数のアクセスパスエントリ１３１１を有する。
【００５７】
１つのアクセスパスエントリ１３１１には、仮想記憶装置１０７の提供に用いられる記憶装置１０４の記憶領域への１つのアクセスパスに関する情報が登録される。具体的には、個々のアクセスパスエントリ１３１１は、管理端末１０６によって設定されるアクセスパスＩＤが格納されるフィールド１３１２、記憶装置１０４のＳＡＮアドレスとＬＵＮから構成される実ＳＡＮアドレスの情報が登録されるフィールド１３１３、記憶装置１０４のＬＵＮ（以下「実ＬＵＮ」）の情報が登録されるフィールド１３１４及び当該エントリ１１３１で指定される記憶装置１０４へのアクセスパスが利用可能であるかを示すステータスの情報が登録されるフィールド１３１５の各フィールドを有する。
尚、フィールド１３１５に登録される情報の値が１であれば、当該エントリで指定されるアクセスパスは使用可能であり、０であれば使用不能であることを示す。
【００５８】
図６は、仮想記憶装置構成テーブル１３２の構成例を示す図である。
仮想記憶装置構成テーブル１３２は、複数の仮想記憶装置エントリ１３２１からなる。一つの仮想記憶装置エントリ１３２１は、仮想記憶装置１０７のＳＡＮ１０１への接続、具体的には、仮想記憶装置１０７に付与されるＳＡＮアドレスに対応している。
【００５９】
個々の仮想記憶装置エントリ１３２１は、仮想記憶装置１０７に付与されるＳＡＮアドレス（以下「仮想ＳＡＮアドレス」）の情報が登録されるフィールド１３２２、仮想記憶装置が有する論理ユニットの番号（以下「仮想ＬＵＮ」）を示す情報が登録されるフィールド１３２３、正アクセスパスを示すＩＤ（以下「正アクセスパスＩＤ」）が登録されるフィールド１３２４、副アクセスパスを示すＩＤ（以下「副アクセスパスＩＤ」）が登録されるフィールド１３２５及び転送先ユニットを示すＩＤ（以下「転送先ユニットＩＤ」）を登録するフィールド１３２６を有する。
【００６０】
仮想ＳＡＮアドレスは、仮想化スイッチ１０２のドメインアドレスと管理端末１０６によって設定されるローカルアドレスから構成される。仮想ＬＵＮは、管理端末１０６によって設定される。
正アクセスパスは、通常時に仮想化スイッチ１０２が使用する記憶装置１０４へのアクセスパスを表し、副アクセスパスは、障害発生時に仮想化スイッチ１０２が使用する記憶装置１０４へのアクセスパスを示す。これら双方のアクセスパスのＩＤは、管理端末１０６によって設定される。
【００６１】
転送先ユニットＩＤは、当該エントリ１３２１に対応する仮想記憶装置１０７に対するコマンドを実行するポートユニット１１１を示すユニットＩＤを表し、管理端末１０６によって設定される。
【００６２】
図８は、ルーティングテーブル１２８の構成例を示す図である。
ルーティングテーブル１２８は、複数のルーティングエントリ１２８１を有する。
各ルーティングエントリ１２８１は、フレームに含まれる送信先アドレスと、そのフレームを転送すべきポートユニット１１１のユニットＩＤとの対応関係を表す。各々のルーティングエントリ１２８１は、送信先アドレスである宛先ＳＡＮアドレスを登録するフィールド１２８２、フィールド１２８２に登録された送信先アドレスを有するフレームの転送先となるポートユニット１１１ないし管理ユニット１１２を表す転送先ユニットＩＤの情報が登録されるフィールド１２８３及び当該エントリに対応するフレームの送信先アドレスが仮想記憶装置１０７に対応するかを示す仮想フラグが登録されるフィールド１２８３を有する。
【００６３】
フィールド１２８３に登録される仮想フラグが１であれば、当該エントリは仮想記憶装置１０７に対応するＳＡＮアドレスに対応し、０であればポートユニット１１１のＳＡＮインタフェイス１１１６に接続されたノードに対応する。管理ユニット１１２は、仮想記憶装置構成テーブル１３２に登録されたエントリに対応する宛先ＳＡＮアドレス及び転送先ユニットＩＤの組を、仮想フラグを１にしてルーティングテーブル１２８に追加する。
【００６４】
図１０は、コマンド管理テーブル１３０の構成例を示す図である。
コマンド管理テーブル１３０は、複数のコマンド管理エントリ１３０１を有する。各コマンド管理エントリ１３０１は、ホスト１０５から仮想記憶装置１０７へ発行された各コマンドに対応している。各々のコマンド管理エントリ１３０１は、ホストＳＡＮアドレスを登録するフィールド１３０２、仮想ＳＡＮアドレスを登録するフィールド１３０３、仮想ＬＵＮを登録するフィールド１３０４、コマンドに含まれるホストタグの情報を登録するフィールド１３０５、使用アクセスパスＩＤを登録するフィールド１３０６、生成タグを登録するフィールド１３０７及びタイムアウトカウンタとして使用されるフィールド１３０８の各フィールドを有する。
【００６５】
ホストＳＡＮアドレスとは、コマンドを発行したホスト１０５のＳＡＮアドレスを表す。フィールド１３０３には、コマンドフレームの送信先となる仮想記憶装置１０７の仮想ＳＡＮアドレスの情報が登録される。フィールド１３０４には、コマンドフレームで指定された仮想記憶装置１０７のＬＵＮの情報が登録される。
【００６６】
フィールド１３０５には、ホスト１０５が発行したコマンドフレームのヘッダに含まれるホストタグの値が登録される。使用アクセスパスＩＤとは、後述するコマンド開始処理で決定されるアクセスパスＩＤである。生成タグとは、仮想化スイッチ１０２が記憶装置１０４に対して発行するコマンドフレームに使用されるタグであり、後述するコマンド登録処理で生成される。
【００６７】
タイムアウトカウンタは、後述するタイムアウト検出処理が、当該コマンドのタイムアウトを検出するために用いる値である。またタイムアウトカウンタの値が−１である場合、そのコマンド管理エントリ１３０１は無効であることを示す。
【００６８】
以下、仮想化スイッチ１０２におけるフレームの処理手順について説明する。仮想化スイッチ１０２は、受信したフレームを所定のノードにルーティングする際に、そのフレームの宛先が仮想記憶装置１０７であるかどうかを判断して、実仮想変換等の処理を行う。尚、以下の説明では、仮想化スイッチ１０２にて実仮想変換を行うポートユニット１１１は予め決まっており、ルーティングテーブル１２８に登録される仮想ＳＡＮアドレスに対応する転送先ユニットＩＤは、その実仮想変換を行うポートユニット１１１を指定するユニットＩＤであるとする。
【００６９】
図９は、実仮想変換処理を行うポートユニット１１１におけるルーティング処理フローを示す図である。
当該処理は、ポートユニット１１１のＳＡＮインタフェイス１１１１がフレームを受信しフレーム転送バッファ１２９に書き込んだとき、ないし他のポートユニット１１１からフレームが転送されたときに実行される。
【００７０】
まずポートユニット１１１は、フレームの送信先アドレスと宛先ＳＡＮアドレス１２８２が一致するルーティングエントリ１２８１をルーティングテーブル１２８から選択する（ステップ１５２）。
【００７１】
次にポートユニット１１１は、ステップ１５２で選び出したルーティングエントリ１２８１のフィールド１２８３に登録された転送先ユニットＩＤが、本処理を実行しているポートユニット１１１のユニットＩＤと一致しているか判定する（ステップ１５３）。
【００７２】
一致する場合、ポートユニット１１１は、ステップ１５２で選び出されたルーティングエントリ１２８１のフィールド１２８３に登録された仮想フラグの値が１であるか判定する（ステップ１５４）。仮想フラグの値が１の場合、ポートユニット１１１は、実仮想変換プログラム１２５を実行して、フレームの転送先を仮想記憶装置１０７から記憶装置１０４又はホスト１０５へ変換し、宛先を変換したフレームを記憶装置１０４又はホスト１０５へ転送する。具体的には、ポートユニット１１１は、宛先となる記憶装置１０４又はホスト１０５と接続されている他のポートユニット１１１へフレームを転送する。実仮想変換処理の詳細は後述する（ステップ１５５）。
【００７３】
又、ステップ１５３で、フィールド１２８３に登録された転送先ユニットＩＤが本処理を実行しているポートユニット１１１のユニットＩＤと一致しない場合、ポートユニット１１１は、フレームの転送先をステップ１５２で選び出されたルーティングエントリ１２８１のフィールド１２８３に登録された転送先ユニットＩＤに設定する（ステップ１５８）。
【００７４】
又、ステップ１５４で仮想フラグが０であった場合、ポートユニット１１１は、ＳＡＮインタフェイス１１１１を用いて処理対象フレームを宛先ＳＡＮアドレスで指定された装置へ送信し、処理を終了する（ステップ１５９）。
【００７５】
又、ステップ１５８の処理後、ポートユニット１１１は、フレーム転送プログラム１２３を実行して、処理対象フレームをステップ１５８で設定された転送先ユニットＩＤに基づいて、他のユニットに処理対象フレームを転送して、処理を終了する（ステップ１６０）。
【００７６】
尚、ポートユニット１１１が実仮想変換処理を行わないポートユニット１１１である場合には、上述した処理においてステップ１５４、１５５の処理は行われず、ポートユニット１１１は、ステップ１５３でフレームが自ポート宛であると判断したら、ステップ１５９の処理を実行する。
【００７７】
次に、ポートユニット１１１で実行される実仮想変換処理の詳細について説明する。実仮想変換処理は、ホスト１０５から仮想記憶装置１０７へのコマンドフレームを記憶装置１０４へのコマンドフレームへ変換するコマンド開始処理、ホスト１０５又は記憶装置１０４から受信したデータフレームの宛先を変換するデータフレーム処理、記憶装置１０４から受信したレスポンスフレームの宛先を変換するコマンド終了処理の３種類の処理に分けられる。上述したルーティング処理のステップ１５５で実仮想変換処理を開始したポートユニット１１１は、受信したフレームの内容に応じて、上述した３つの処理を行う。以下、３つの処理手順の詳細について説明する。
【００７８】
図１１は、ポートユニット１１１で行われるコマンド開始処理１２５１の処理フローを示す図である。
まずポートユニット１１１は、受信したコマンドフレームの送信先アドレスと仮想ＳＡＮアドレスが一致する仮想記憶装置エントリ１３２１を仮想記憶装置構成テーブル１３２から選択する（ステップ１６１）。
【００７９】
次に、ポートユニット１１１は、ステップ１６１で選び出した仮想記憶装置エントリ１３２１のフィールド１３２４及び１３２５に登録された正アクセスパスと副アクセスパスのどちらを使用するか選択する。具体的には、ポートユニット１１１は、登録された正アクセスパスに対応するアクセスパスエントリ１３１１をアクセスパステーブル１３１から選び出し、そのエントリ１３１１のフィールド１３１５に登録されたステータスをチェックする。ステータスが１なら、その正アクセスパスを選択する。ステータスが１でなければ、副アクセスパスに対応するアクセスパスエントリ１３１１をアクセスパステーブル１３１から選択する（ステップ１６２）。
【００８０】
その後、ポートユニット１１１は、ステップ１６２で選び出したアクセスパスエントリ１３１１に対応する記憶装置１０４に対して発行するコマンドに付加すべきタグ（以下「生成タグ」）を生成する。この生成タグには、コマンド管理テーブル１３０の有効ないずれのコマンド管理エントリ１３０１のフィールド１３０７に登録された生成タグのいずれとも一致しない値が用いられる（ステップ１６３）。
【００８１】
その後、ポートユニット１１１は、コマンド管理テーブル１３０に処理対象となるコマンドを登録する。具体的には、ポートユニット１１１は、無効なコマンド管理エントリ１３０１をコマンド管理テーブル１３０から１つ選択し、そのエントリ１３０１の各フィールド１３０２、１３０３、１３０４、１３０５、１３０６及び１３０７に、処理対象コマンドフレームに含まれる送信元アドレス、送信先アドレス、ＬＵＮ、ホストタグ、ステップ１６２で選択されたアクセスパスエントリ１３１１のアクセスパスＩＤ、ステップ１６３で生成された生成タグ値を設定し、更に、フィールド１３０８のタイムアウトカウンタを０に設定する（ステップ１６４）。
【００８２】
次にポートユニット１１１は、処理対象となるコマンドフレームのヘッダ情報とペイロードに含まれるＬＵＮを書き換える。具体的には、ポートユニット１１１は、コマンドフレームに含まれる送信元アドレス、送信先アドレス、ＬＵＮ及びホストタグの値を、処理対象のコマンドフレームの送信先アドレス（つまり仮想記憶装置１０７のＳＡＮアドレス）、ステップ１６２で選択されたアクセスパスエントリ１３１１１の実ＳＡＮアドレス、実ＬＵＮ及びステップ１６３で生成された生成タグ値に書き換える（ステップ１６５）。
【００８３】
その後、ポートユニット１１１は、ルーティングプログラム１２２を実行して、ステップ１６５で変換されたコマンドフレームを所定の記憶装置１０４へ転送し、処理を終了する（ステップ１６６）。
【００８４】
図１２は、ポートユニット１１１におけるデータフレーム処理１２５２の処理フローを示す図である。
まずポートユニット１１１は、受信したデータフレームの送信元アドレス、送信先アドレス及びタグが、フィールド１３０２、１３０３及び１３０５に登録された値と一致するコマンド管理エントリ１３０１をコマンド管理テーブル１３０から検索する（ステップ１７１）。
【００８５】
一致するコマンド管理エントリ１３０１を発見した場合、ポートユニット１１１は、選び出したコマンド管理エントリ１３０１のフィールド１３０６に登録された使用アクセスパスＩＤに対応するアクセスパスエントリ１３１１をアクセスパステーブル１３１から選び出す。そして、ポートユニット１１１は、受信したデータフレームのヘッダ情報を書き換える。具体的には、ポートユニット１１１は、受信したデータフレームの送信元アドレス、送信先アドレス及びタグを、ステップ１７１で選び出したコマンド管理エントリ１３０１のフィールド１３０３に登録された仮想ＳＡＮアドレス、本ステップで選び出したアクセスパスエントリ１３１１のフィールド１３１３に登録された実ＳＡＮアドレス及びステップ１７１で選び出したコマンド管理エントリ１３０１のフィールド１３０７に登録された生成タグの値に書き換える（ステップ１７２）。
【００８６】
ステップ１７１で一致するコマンド管理エントリ１３０１を発見できなかった場合、ポートユニット１１１は、受信したデータフレームの送信先アドレス及びタグが、フィールド１３０３及び１３０７に登録された値と一致するコマンド管理エントリ１３０１をコマンド管理テーブル１３０から選択する（ステップ１７３）。
【００８７】
その後、ポートユニット１１１は、受信したデータフレームのヘッダ情報を書き換える。具体的には、データフレームの送信元アドレス、送信先アドレス及びタグを、ステップ１７１で選び出したコマンド管理エントリ１３０１のフィールド１３０３に登録された仮想ＳＡＮアドレス、フィールド１３０２に登録されたホストＳＡＮアドレス及びフィールド１３０５に登録されたホストタグに書き換える（ステップ１７４）。
【００８８】
ステップ１７２又はステップ１７４の処理を終了したポートユニット１１１は、ルーティングプログラム１２２を実行して、ステップ１７２ないしステップ１７４で書き換えたデータフレームを所定のノード（ホスト１０５又は記憶装置１０４）に転送して処理を終了する（ステップ１７５）。
【００８９】
図１３は、ポートユニット１１１における、コマンド終了処理１２５３の処理フローを示す図である。
まずポートユニット１１１は、受信したレスポンスフレームの送信先アドレス及び生成タグがフィールド１３０３及びフィールド１３０７に登録された値と一致するコマンド管理エントリ１３０１をコマンド管理テーブル１３０から選択する（ステップ１８１）
その後、ポートユニット１１１は、レスポンスフレームのヘッダ情報及びＬＵＮを書き換える。具体的には、ポートユニット１１１は、レスポンスフレームの送信元アドレス、送信先アドレス及び生成タグを、ステップ１８１で選択したコマンド管理エントリ１３０１のフィールド１３０３に登録された仮想ＳＡＮアドレス、フィールド１３０２に登録されたホストＳＡＮアドレス及びフィールド１３０５に登録されたホストタグに書き換える（ステップ１８２）。
【００９０】
その後、ポートユニット１１１は、ステップ１８１で選択したコマンド管理エントリ１３０１を無効化するために、フィールド１３０８のタイムアウトカウンタの値を−１に設定する（ステップ１８３）。
【００９１】
最後に、ポートユニット１１１は、ルーティングプログラム１２２を実行して、ステップ１８２で書き換えたレスポンスフレームをホスト１０５へ転送し、処理を終了する（ステップ１８４）。
以上の処理により、仮想化スイッチ１０２は、実仮想変換処理を行って、仮想記憶装置１０７が関連するフレームの処理を行うことが出来る。
【００９２】
次に、仮想化スイッチ１０２が仮想化スイッチ１０２と記憶装置１０４の間のアクセスパスを検出して代替パスの使用を行う間の処理手順を説明する。仮想化スイッチ１０２は、記憶装置１０４へ送信したコマンドに対する応答が一定時間経っても帰ってこないことを検出し、それを契機に代替パスを使用するための処理を行う。前者の処理をタイムアウト検出処理、後者の処理をリカバリ処理と称し、以下説明する。尚、上記二つの処理を実行するのは、上述した実仮想変換処理を行うポートユニット１１１であるとする。
【００９３】
図１４は、ポートユニット１１１で実行されるタイムアウト検出処理１２８１の処理フローを示す図である。ＣＰＵ１１１２はタイマ１１１５からの信号に基づいて本処理を定期的に実行する。
まずポートユニット１１１は、コマンド管理テーブル１３０から先頭のコマンド管理エントリ１３０１を選び出す。尚、２回目以降にステップ１９１を実行する場合、ポートユニット１１１は、前回のコマンド管理エントリ１３０１の次のコマンド管理エントリ１３０１を選択する（ステップ１９１）。
【００９４】
次に、ポートユニット１１１は、ステップ１９１で選び出したコマンド管理エントリ１３０１が有効であるか判定する。具体的には、フィールド１３０８のタイムアウトカウンタの値が−１か否かでエントリ１３０１が有効かどうか判定する（ステップ１９２）。
エントリ１３０１が有効な場合、ポートユニット１１１は、ステップ１９１で選び出したコマンド管理エントリ１３０１のフィールド１３０８のタイムアウトカウンタ値を１増やす（ステップ１９３）。
その後、ポートユニット１１１は、ステップ１９１で選び出したコマンド管理エントリ１３０１のフィールド１３０８のタイムアウトカウンタ値が、タイムアウトと判定される特定の定数値に等しいか判定する（ステップ１９４）。
【００９５】
ステップ１９４でタイムアウトと判定された場合、ポートユニット１１１は、リカバリ処理を実行する。リカバリ処理の詳細は後述する（ステップ１９５）。
ステップ１９２でエントリ１３０１が無効なエントリであると判定された場合、ステップ１９４でエントリ１３０１がタイムアウトしていないと判定された場合又はステップ１９５のリカバリ処理が終了した場合、ポートユニット１１１は、ステップ１９１で選択したコマンド管理エントリ１３０１がコマンド管理テーブル１３０の最後のエントリであるか判定する。最後のエントリならば処理を終了し、さもなくばステップ１９１へ戻って次のエントリ１３０１について処理を繰り返す（ステップ１９６）。
【００９６】
図１５は、ポートユニット１１１におけるリカバリ処理の処理フローを示す図である。
まず、ポートユニット１１１は、コマンド管理テーブル１３０から先頭のコマンド管理エントリ１３０１を選択する。尚、２回目以降にステップ１９１を実行する場合は、ポートユニット１１１は、前回のコマンド管理エントリ１３０１の次のコマンド管理エントリ１３０１を選択する（ステップ２０１）。
【００９７】
次にポートユニット１１１は、ステップ２０１で選択したコマンド管理エントリ１３０１が、図１３で説明したタイムアウト検出処理のステップ１９４でタイムアウトと判断されたエントリ１３０１のフィールド１３０６に登録された使用アクセスパスＩＤと同一の使用アクセスパスＩＤを持つか判定する（ステップ２０２）。
選択されたエントリ１３０１が、タイムアウトと判断されたエントリ１３０１と同じ使用アクセスパスＩＤを有する場合、ポートユニット１１１は、ステップ２０１で選択したコマンド管理エントリ１３０１に対応するコマンドに対するエラー応答のためのレスポンスフレームを生成する。具体的には、ステップ２０１で選択されたコマンド管理エントリ１３０１のフィールド１３０３に登録された仮想ＳＡＮアドレス、フィールド１３０２に登録されたホストＳＡＮアドレス及びフィールド１３０５に登録されたホストタグを、各々レスポンスフレームの送信元アドレス、送信先アドレス及びタグとする。レスポンスの内容はホスト１０５に対してコマンドのリトライを要請する内容にする（ステップ２０３）。
【００９８】
その後、ポートユニット１１１は、ステップ２０１で選択したコマンド管理エントリ１３０１を無効化するために、フィールド１３０８のタイムアウトカウンタの値を−１に設定する（ステップ２０４）。
エントリ１３０１を無効化した後、ポートユニット１１１は、ルーティングプログラム１２２を実行して、ステップ２０３で生成したレスポンスフレームをホスト１０５へ転送する（ステップ２０５）。
【００９９】
ステップ２０５の処理の終了後又はステップ２０２で選択されたエントリ１３０１がタイムアウトと判断されたエントリ１３０１と同じ使用アクセスパスＩＤを有しない場合、ポートユニット１１１は、ステップ２０１で選択されたコマンド管理エントリ１３０１がコマンド管理テーブル１３０の最後のエントリであるか判定する。最後のエントリでない場合には、ポートユニット１１１は、ステップ２０１以降の処理を繰り返す（ステップ２０６）。
【０１００】
選択されたエントリ１３０１がコマンド管理テーブル１３０の最後のエントリの場合、ポートユニット１１１は、図１３のステップ１９４で指定された使用アクセスパスＩＤとアクセスパスＩＤが一致するアクセスパスエントリ１３１１をアクセスパステーブル１３１から選び出し、そのフィールド１３１５のステータスの値を０に設定する。そして処理を終了する（ステップ２０７）。
【０１０１】
本実施形態においては、仮想化スイッチ１０２と記憶装置１０４の間の物理的な接続が切断されるなどの理由で、正常時に使用する記憶装置１０４のＳＡＮアドレスへ送信したコマンドに対するデータ転送やレスポンスが記憶装置１０４から仮想化スイッチ１０２に送信されない時、仮想化スイッチ１０２が、そのコマンドのタイムアウトを検出しホスト１０５に対してコマンドのリトライを要請する内容のエラーを含むレスポンスを送信することが出来る。
【０１０２】
上述の処理と並行して、仮想化スイッチ１０２は、正アクセスパスＩＤに対応するアクセスパスエントリ１３１１を無効化するため、以後の仮想記憶装置１０７へのコマンドは副アクセスパスＩＤを用いて処理されるようになる。そのため、ホスト１０５が仮想記憶装置１０７に対してコマンドをリトライすると、仮想化スイッチ１０２は副アクセスパスＩＤを用いて、記憶装置１０４のもうひとつのＳＡＮアドレスへコマンドを送信する。これによりホスト１０５は仮想記憶装置１０７へ継続してアクセスを続行することが可能になる。
【０１０３】
尚、本実施形態では、仮想化スイッチ１０２がタイムアウトを検出することで仮想化スイッチ１０２と記憶装置１０４間のパス障害等を検出したが、この方法以外の方法を用いてもよい。例えば、仮想化スイッチ１０２と記憶装置１０４とが直接物理的に接続されているときには、仮想化スイッチ１０２は、電気信号の変化や光信号の消灯などで記憶装置１０４等の障害を検出することも可能である。この場合、障害を検出したポートユニット１１１は、管理メッセージを管理ユニット１１２へ送信し、管理ユニット１１２が各ポートユニット１１１へ管理メッセージを送信することで、各ポートユニット１１１は障害の発生を検出し、リカバリ処理を実行してもよい。
【０１０４】
また、本実施形態では仮想化スイッチ１０２が仮想記憶装置１０７を提供した。しかし、仮想記憶装置１０７と記憶装置１０４の１つのパスを一致させても問題はない。つまり仮想化スイッチ１０２は仮想記憶装置１０７を必ずしも提供しなくても良く、その場合でも上記のパス切替え処理を行うことは可能である。
【０１０５】
以下、本発明を適用したコンピュータシステムの第二の実施形態について説明する。第二の実施形態のコンピュータシステムの構成は第一の実施形態の構成と同様であるが、仮想化スイッチ１０２が以下に説明する本実施形態の仮想化スイッチ３０２に置き換わる点が異なる。
【０１０６】
第１の実施形態の仮想化スイッチ１０２は、タイムアウトを検出した時点で当該仮想記憶装置１０７に関する全てのコマンドに対してエラー応答をホスト１０５に通知していた。本実施形態の仮想化スイッチ３０２は、コマンドのタイムアウトを検出した時点で、データ転送が開始されてしまっているコマンドについてのみエラー応答をホスト１０５に返し、その他のコマンドについては仮想化スイッチ１０２が記憶装置１０４へ他の経路を使ってコマンドフレームの再送を行う。仮想化スイッチ３０２を利用すると、第一の実施形態に比べて、ホスト１０５がリトライする必要のあるコマンドの数を減らすことが可能になる。以下、第二の実施形態について、第一の実施形態と異なる部分のみ説明する。
【０１０７】
仮想化スイッチ３０２の構成は、仮想化スイッチ１０２の構成と同様である。しかし、コマンド開始処理１２５１、データフレーム処理１２５２及びリカバリ処理１２６２の手順並びにコマンド管理テーブル１３０の構成が若干異なる。
【０１０８】
図１５は、本実施形態におけるコマンド管理テーブル３３０の構成例を示す図である。
コマンド管理テーブル３３０は、複数のコマンド管理エントリ３３０１から構成される。コマンド管理エントリ３３０１は、第一の実施形態におけるコマンド管理エントリ１３０１に加えて、転送起動フラグを登録するフィールド３３０２及びコマンド内容を登録するフィールド３３０３を有する。
【０１０９】
転送起動フラグは、仮想化スイッチ１０２が当該コマンドに関するデータフレームを受信したことがあるかどうかを示すフラグである。転送起動フラグの値が０ならば、仮想化スイッチ１０２が過去にデータフレームを受信したことが無いことを、１ならば既に受信したことがあることを示す。
【０１１０】
コマンド内容は、ホスト１０５から仮想記憶装置１０７に対して送信されたコマンドフレームのペイロードに含まれるコマンドの内容である。
【０１１１】
本実施形態のコマンド開始処理１２５１は、上述したステップ１８３の処理において、ポートユニット１１１が、コマンド管理エントリ３３０１のフィールド３３０２のデータ転送フラグを０に設定し、コマンドの内容をフィールド３３０３に保存する処理が付け加わる。
【０１１２】
本実施形態のデータフレーム処理１２５２は、上述したステップ１７２、１７３の処理において、ポートユニット１１１が使用するコマンド管理エントリ３３０１のフィールド３３０２のデータ転送フラグを１に設定する処理が加わる。
【０１１３】
図１６は、本実施形態におけるポートユニット１１１のリカバリ処理１２６２の処理フローを示す図である。
まず、ポートユニット１１１は、図１４のステップ２０１と同様の処理を行う（ステップ４０１）。
【０１１４】
次に、ポートユニット１１１は、図１５のステップ２０２と同様の判定を行う（ステップ４０２）。
選択されたエントリ３３０１が、タイムアウトと判断されたエントリ３３０１と同じ使用アクセスパスＩＤを有する場合、ポートユニット１１１は、ステップ４０１で選び出したコマンド管理エントリ３３０１のフィールド３３０２に登録された転送起動フラグが１か判定する（ステップ４０３）。
【０１１５】
転送起動フラグが０の場合、ポートユニット１１１は、ステップ４０１で選択したコマンド管理エントリ３３０１を用いて、交替パスへ再発行するコマンドを生成する。具体的には、ポートユニット１１１は、まずコマンド管理エントリ３３０１のフィールド１３０３及び１３０４と一致するフィールド１３２２及び１３２３を持つ仮想記憶装置エントリ１３２１を仮想記憶装置構成テーブル１３２から選択する。そして、その選択されたエントリ１３２１のフィールド１３２５に登録された副アクセスパスＩＤと一致するアクセスパスＩＤを持つアクセスパスエントリ１３１１をアクセスパステーブル１３１から選び出す。
【０１１６】
そして、ポートユニット１１１は、ステップ４０１で選び出したコマンド管理エントリ３３０１のフィールド１３０２の仮想ＳＡＮアドレス、ステップ４０４で選び出したアクセスパスエントリ１３１１のフィールド１３１３の実ＳＡＮアドレス、フィールド１３１４の実ＬＵＮ、ステップ４０１で選び出したコマンド管理エントリ３３０１のフィールド１３０７の生成タグ及びフィールド３３０３のコマンド内容を、生成するコマンドフレームの、送信元アドレス、送信先アドレス、ＬＵＮ、生成タグ及びコマンドにする（ステップ４０４）。
【０１１７】
その後、ポートユニット１１１は、ステップ４０１で選び出したコマンド管理エントリ３３０１のフィールド１３０６の値を、ステップ４０４で選び出したアクセスパスエントリ１３１１のフィールドＩＤ１３１２に登録された値へ変更し、フィールド１３０８のタイムアウトカウンタを０に設定する（ステップ４０５）。
【０１１８】
一方、ステップ４０３で転送起動フラグが１だった場合、ポートユニット１１１は、図１４のステップ２０３及び２０４と同様の処理を行う（ステップ４０６、４０７）。
ステップ４０５の処理後又はステップ４０７の処理後、ポートユニット１１１は、ルーティングプログラム１２２を実行し、ステップ４０４で生成されたコマンドフレームないしステップ４０６で生成されたレスポンスフレームを記憶装置１０４又はホスト１０５へ転送する（ステップ４０８）。
【０１１９】
ステップ４０８の処理の終了後又はステップ４０２で選択されたエントリ３３０１が、タイムアウトと判断されたエントリ３３０１と同じ使用アクセスパスＩＤを有しないと判断された場合、ポートユニット１１１は、図１４のステップ２０６及び２０７と同様の処理を行い、処理を終了する（ステップ４０９、４１０）。
【０１２０】
本実施形態における仮想化スイッチ３０２と仮想化スイッチ１０２との違いは、データ転送が始まっていないコマンドに対するリカバリ処理の手順である。
具体的には、仮想化スイッチ１０２は、データ転送が始まっているかどうかに関わらず、タイムアウトと判定されたコマンドについて、エラー応答をホスト１０５に送信した。
【０１２１】
一方、本実施形態の仮想化スイッチ３０２は、各コマンドについてコマンド管理エントリ３３０１で、データ転送が始まっているかどうかを判断する転送起動フラグと、そのコマンドの内容を記録している。そのため、データ転送が始まっていないコマンドに対しては、仮想化スイッチ３０２は、ホスト１０５にエラーを返すことなく記憶装置１０４のもうひとつのＳＡＮアドレスへコマンドを再送する。これにより、ホスト１０５がリトライしなくてはならないコマンドの数を減らすことが可能になる。
【０１２２】
次に、本発明を適用したコンピュータシステムの第３の実施形態について説明する。
【０１２３】
本実施形態では、第１、第２の実施形態と同等の機能を提供する仮想化スイッチの異なる構成について説明し、仮想化スイッチ全体としてのリソースを削減可能であることを示す。
図１８は、本実施形態における仮想化スイッチ５０２の構成例を示す図である。仮想化スイッチ５０２と仮想化スイッチ１０２の違いは、ポートユニット５１１が、ポートユニット１１１からタイマ１１１５が省かれた構成である点と、新たにポートユニット１１１からＳＡＮインタフェイス１１１１を省いた構成を有する仮想化ユニット５１３が追加される点である。
【０１２４】
ポートユニット５１１のＲＯＭ１１１４には、ポートユニット１１１のＲＯＭ１１１４に格納されているプログラムやデータのうち、実仮想変換プログラム１２５、障害処理プログラム１２６、コマンド管理テーブル１３０、アクセスパステーブル１３１及び仮想記憶装置構成テーブル１３２以外のプログラム等が格納されている。
また、仮想化ユニット５１３に格納されるプログラム及びデータの構成はポートユニット１１１の構成と同様である。
【０１２５】
本実施形態における仮想化スイッチ５０２では、仮想化ユニット５１３が仮想記憶装置１０７を提供する。このような構成、即ち通常のフレームルーティングの処理と仮想記憶装置１０７に関する処理を切り離す構成とすることで、ポートユニット５１１はポートユニット１１１よりもＣＰＵ１１１２の負荷やＲＡＭ１１１３の容量を節約でき、タイマ１１１５を取り除くことが出来る。その代わり、仮想化スイッチ５０２には仮想化ユニット５１３を追加する必要があるが、ポートユニット５１３を多く持つ仮想化スイッチ５０２の場合は、本構成の方が仮想化スイッチ１０２よりも全体のリソースを節約することが可能である。
【０１２６】
また、同様にして第２の実施形態の仮想化スイッチ３０２のリカバリ処理を本実施例の仮想化スイッチ５０２の構成で行うことも可能である。
尚、上述した各プログラムの実行により行われる処理は、専用のハードウエアで実現されても良い。
【０１２７】
【発明の効果】
本発明により、記憶装置とコンピュータを接続するネットワークにおいて、データ転送用のバッファやキャッシュを用いることなく、またコンピュータに機能を追加することなく、パス切替えを行うスイッチを提供することが可能となる。
【図面の簡単な説明】
【図１】本発明を適用する第１の実施形態のコンピュータシステムの構成図である。
【図２】第１の実施形態の仮想化スイッチの構成図である。
【図３】第１の実施形態のポートユニットのプログラム及びデータの構成図である。
【図４】第１の実施形態の管理ユニットのプログラム及びデータの構成図である。
【図５】第１の実施形態のアクセスパステーブルの構成図である。
【図６】第１の実施形態の仮想記憶装置構成テーブルの構成図である。
【図７】第１の実施形態のルーティングテーブルの構成図である。
【図８】第１の実施形態のルーティング処理のフローチャートである。
【図９】第１の実施形態のコマンド管理テーブルの構成図である。
【図１０】第１の実施形態のコマンド開始処理のフローチャートである。
【図１１】第１の実施形態のデータフレーム処理のフローチャートである。
【図１２】第１の実施形態のコマンド終了処理のフローチャートである。
【図１３】第１の実施形態のタイムアウト検出処理のフローチャートである。
【図１４】第１の実施形態のリカバリ処理のフローチャートである。
【図１５】第２の実施形態のコマンド管理テーブルの構成図である。
【図１６】第２の実施形態のリカバリ処理のフローチャートである。
【図１７】第３の実施形態の仮想化スイッチの構成図である。
【符号の説明】
１０１…ＳＡＮ、１０２…仮想化スイッチ、１０３…スイッチ、１０４…記憶装置、１０５…ホスト、１０６…管理端末、１０７…仮想記憶装置、１１１…ポートユニット、１１２…管理ノード。
【図１】
2005051335.tif 000003
【図２】
2005051335.tif 000004
【図３】
2005051335.tif 000005
【図４】
2005051335.tif 000006
【図５】
2005051335.tif 000007
【図６】
2005051335.tif 000008
【図７】
2005051335.tif 000009
【図８】
2005051335.tif 000010
【図９】
2005051335.tif 000011
【図１０】
2005051335.tif 000012
【図１１】
2005051335.tif 000013
【図１２】
2005051335.tif 000014
【図１３】
2005051335.tif 000015
【図１４】
2005051335.tif 000016
【図１５】
2005051335.tif 000017
【図１６】
2005051335.tif 000018
【図１７】
2005051335.tif 000019