(57)【要約】【課題】デバイスの状態を正確に判断するための監視装置を提供すること。【解決手段】デバイスの状態を判断可能な装置は、コントローラ（６２８）と該コントローラ上において実行可能なモニタ（１００）とからなる。モニタは、受動的にイニシエータとデバイス間のトラフィックを監視し、受動的に監視されたトラフィックがデバイスの状態を特定するには十分でないときを判断する。そして、受動的に監視されたトラフィックが十分ではないとき、能動的に捕捉的なコマンドをデバイスに送出し、デバイス情報をリフレッシュする。モニタは、デバイス情報からデバイス状態を判断することもできる。【選択図】図１
2004220615.tif 000002
【特許請求の範囲】
【請求項１】
デバイスの状態を判断可能な装置であって、
コントローラと、
該コントローラ上で実行可能な監視装置であって、
イニシエータと前記デバイスとの間のトラフィックを受動的に監視することと、
受動的に監視された前記トラフィックが前記デバイスの状態を特定するのに不十分であるときを判断することと、
受動的に監視された前記トラフィックが不十分であるとき、追加のコマンドを前記デバイスに能動的に発行してデバイス情報をリフレッシュすることと、
前記デバイス情報からデバイスの状態を判断することと、
を実行可能な前記監視装置と、
を備えた、デバイスの状態を判断することができる装置。
【請求項２】
前記監視装置は、
前記デバイスからの入力および／または出力トラフィックを代行受信することと、
代行受信された前記トラフィックをサンプリングして前記デバイスの状態を判断することと、
をさらに実行可能である、請求項１記載のデバイスの状態を判断可能な装置。
【請求項３】
サンプリングによって前記デバイスの状態を示すデータ構造の保全性を維持するのに適した時間内で情報が供給されないとき、前記監視装置は情報を求めて前記デバイスをポーリングすることをさらに実行可能である、請求項１記載のデバイスの状態を判断可能な装置。
【請求項４】
前記監視装置は、複数の状態からデバイス状態パラメータを抽出するバックグラウンドプロセスにおいて前記複数の状態を分析することを実行可能であり、前記デバイス状態パラメータはデバイス状態を動的に示すものである、請求項１記載のデバイスの状態を判断可能な装置。
【請求項５】
前記コントローラに接続されるとともに、少なくとも１つのイニシエータと前記デバイスとの間のデータパスに接続されたデバイス状態キャッシュをさらに備え、該デバイス状態キャッシュは、前記デバイスがイニシエータにバインディングされているか否かをリアルタイムで判定する情報を記憶可能なメモリを含む、請求項１記載のデバイスの状態を判断可能な装置。
【請求項６】
前記コントローラに接続されるとともに、前記デバイスと少なくとも１つのイニシエータとの間のデータパスに接続されたデバイス状態キャッシュをさらに備え、該デバイス状態キャッシュは、前記デバイスの状態を判定する情報を記憶可能なメモリを含む、請求項１記載のデバイスの状態を判断可能な装置。
【請求項７】
前記コントローラに接続され、前記デバイスをエミュレートするコマンドシーケンスおよび応答シーケンスを記憶可能なメモリを含むデバイスプロファイルキャッシュをさらに備えた、請求項１記載のデバイスの状態を判断可能な装置。
【請求項８】
コンピュータで実行可能なプログラムコードを含むコンピュータプログラムであって、
プロセッサに、イニシエータと物理デバイスとの間のトラフィックを受動的に監視させる手段と、
前記プロセッサに、前記受動的に監視されたトラフィックが物理デバイス状態を特定するのに不十分であるときを求めさせる手段と、
前記プロセッサに、前記受動的に監視されるトラフィックが不十分であるとき、追加のコマンドを前記物理デバイスに能動的に発行して物理デバイス情報をリフレッシュさせる手段と、
前記プロセッサに、前記物理デバイス情報からデバイス状態を求めさせる手段と、
して機能させるプログラム。
【請求項９】
前記プログラムは、
前記プロセッサに、前記物理デバイスからの入力および／または出力トラフィックを代行受信させる手段と、
前記プロセッサに、代行受信された前記トラフィックをサンプリングさせて、前記物理デバイスの状態を判断させる手段と、
して機能させる請求項８記載のプログラム。
【請求項１０】
サンプリングにより、前記物理デバイスの状態を示すデータ構造の保全性を維持するに適した時間内で情報が供給されないとき、前記プロセッサに、情報を求めて前記物理デバイスをポーリングさせる手段としてさら機能させる請求項８記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイスの状態を判断する装置に関する
【背景技術】
【０００２】
開示されるシステムおよび動作方法は、以下の同時係属中の特許出願：（１）「Storage System with LUN Virtualization」と題する米国特許出願第１０／３４６，０４５号、および（２）「Dynamic Command Filter」と題する米国特許出願第１０／３４６，００２号に開示される主題に関連する。
【０００３】
情報処理システムは、データ転送アプリケーションを制御する様々なデバイスおよび構成要素を含む。データ転送アプリケーションは、物理デバイスの状態に関連する情報に頻繁にアクセスして使用する。システムの信頼性および性能は、状態情報の正確性によって決まる。物理デバイスは、様々なアプリケーションタイプおよびシステムタイプにおいて多くの形をとりうる。データ記憶システムでは、物理デバイスとしては通常、テープドライブ、ディスクドライブ、他のタイプの記憶ドライブおよび組み合わせデバイスまたは混成型デバイスが挙げられる。
【０００４】
一般的なシステムでは、デバイスの状態は頻繁に変わりうる。コマンドシーケンスを発行するという比較的時間のかかるプロセスによって、状態を通常正確に決定することができるため、多くのアプリケーションは状態を一度確認し、いずれの状態変更も送信したコマンドの結果に基づいて発生するものであると仮定する。状態変更がほとんど決定論的にコマンドストリームに基づいて発生し、外来の事象による変更は稀な直接接続モデルにおいて、この仮定は一般に比較的問題を生じない。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
エラーが発生することがあり、デバイスの状態は、アプリケーションによって送られるコマンド以外の事象によっても変化しうる。一例としては、デバイスに障害が発生することがある。障害は稀な事象であるが、高度なアプリケーションによっては、障害に関わりなく動作を継続するよう求められるものがある。したがって、動作の仮定が常に正しいわけではなく、現場での信頼性の損失につながる可能性がある。
【０００６】
システムによっては複数のホスト、サーバ、または他のイニシエータをサポートするものもあり、よって、２つのイニシエータが同じデバイスを同時に使用するか、または使用しようとすることに起因してデバイスの状態が変更される場合がある。マルチイニシエータ構成では、２つ以上のイニシエータがデバイスの状態を変更しうるが、各イニシエータは、状態がそのイニシエータからのコマンドに基づいてのみ変更されるものと仮定している。多くの場合、デバイスの実際の状態は任意のイニシエータの仮定とは異なりうる。ストレージエリアネットワーク（ＳＡＮ）構成では、デバイスが一般に１ダースまたはそれよりも多くのサーバによって共有される場合があり、状態の仮定が不正確である可能性が増す。
【０００７】
システムによっては、規則的または不規則的な間隔でデバイスをポーリングすることによってデバイスの競合を解決しようとするものもある。たとえば、Ｎｅｔｂａｃｋｕｐスキャンホストの概念を用いて、単一のサーバがコマンドセットを発行して、非使用中の任意のデバイスの状態を求めることができる。Ｎｅｔｂａｃｋｕｐを実行している別のイニシエータまたはサーバが状態情報にアクセスしようとするとき、イニシエータまたはサーバは、ポーリングコマンドを発行するのではなくスキャンホストデータベースにコンタクトする。この概念は、デバイスへの考えられるすべてのコンタクトが適宜構成されたＮｅｔｂａｃｋｕｐを通して行われる場合しか通用せず、拡張性を不十分なものにする。Ｎｅｔｂａｃｋｕｐを使用するには通常、追加のサーバまたはイニシエータがスキャンホスト機能をサポートする必要もある。
【課題を解決するための手段】
【０００８】
開示されるシステムのいくつかの実施形態によれば、デバイスの状態を判断可能な装置は、コントローラと、コントローラ上で実行可能なモニタ（監視装置）と、を備える。モニタは、イニシエータとデバイスとの間のトラフィックを受動的に監視すること、受動的に監視されるトラフィックがデバイスの状態を特定するのに不十分であるときを判断すること、および受動的に監視されるトラフィックが不十分である場合、補足的なコマンドをデバイスに能動的に発行してデバイス情報をリフレッシュすること、を実行可能である。モニタは、デバイス情報からデバイスの状態を求めることも可能である。
【０００９】
他の実施形態によれば、デバイスの状態を得る方法は、イニシエータと物理デバイスとの間のトラフィックを受動的に監視すること、および受動的に監視されるトラフィックが物理デバイスの状態を特定するのに不十分であるときを判断する、を含む。本方法は、受動的に監視されるトラフィックが不十分である場合、補足的なコマンドを物理デバイスに能動的に発行して物理デバイスの情報をリフレッシュすること、および物理デバイス情報から物理デバイスの状態を判断すること、を含む。
【００１０】
構造および動作方法の両方に関連する本発明の実施形態は、以下の説明および添付図面を参照することによって最もよく理解することができる。
【発明を実施するための最良の形態】
【００１１】
マルチイニシエータシステムに共通する課題は、他のイニシエータからのコマンド、デバイスの障害、または他の外来事象の発生により変更が行われうるため、個々のイニシエータで利用可能な状態情報が不正確である可能性があることである。別の課題は、正確な状態情報の取得に時間がかかりうることである。
【００１２】
必要なのは、デバイスの状態情報をより堅牢な方法で取得するシステムである。
【００１３】
情報処理システムは、すべてのコマンドおよび／またはデバイスに向けられた他の指示にモニタ（監視装置）を通過させることによって正確性および性能を向上させることができる。モニタは、発信元に関わりなくデバイスへのすべてのトラフィックをサンプリングする。モニタはまた、デバイスから受け渡されるすべての出力信号もサンプリングすることができる。
【００１４】
サンプリングに加えて、モニタはポーリングを行うことができ、デバイスに対して独立してコマンドを生成し、コマンドの結果にアクセスして状態情報の正確性を維持する。実施形態によっては、動作がインテリジェントであることができ、したがってポーリングは、サンプリングによってすでに存在する情報の複製に使用されない。
【００１５】
実施形態によっては、監視動作は他のシステムの動作と並列して実行することができる。
【００１６】
実施形態によっては、監視の程度は、デバイス状態を正確に評価しながら性能への影響が最小限のレベルに、特定のアプリケーションの要件に従って低減または管理することができる。
【００１７】
システムは、インテリジェントサンプリング技法に基づいてデバイスに関連する状態情報を得るモニタを備える。デバイスの状態はポーリングによって決定することができるが、デバイスが複数のイニシエータによって制御される場合はポーリングが不正確なことがある。例示的なシステムは、デバイスからの入力および／または出力トラフィックを代行受信し、代行受信したトラフィックをサンプリングしてデバイスの状態を判断することでポーリングを置き換える、または補足することができる。モニタは通常、サンプリングにより、デバイスの状態を含むデータ構造の保全性を維持するに適した時間内に情報が供給されない場合に、所望の情報を求めてデバイスをポーリングする。
【００１８】
各種実施形態では、例示的な記憶システムは、時間切れ期間内にターゲットドライブの代わりに仮想的な応答を使用して、ターゲットリセット動作等の管理コマンドおよびタスク管理動作に応答することによって可用性エラーを回避する。仮想ターゲットデバイスは、ルータに第１のイニシエータに関連するターゲットドライブ状態を通知し、続いて動作するイニシエータからのコマンドを代行受信し、かつキューイングなしで後続するイニシエータに応答することによってコマンドに応答する。仮想ターゲットデバイスは、タスク管理動作を発行するイニシエータのターゲットドライブの状態をエミュレート（スプーフィングとも呼ばれる）することによってタスク管理動作に応答する。
【００１９】
各種実施形態では、記憶システムは、いくつかの機能のうちの１つまたは複数を実行して、可用性、データ保全性および性能を向上させることができる。システムは、第１のイニシエータとのデータ転送または媒体移動コマンドに従事する際にドライブの状態を保護する。システムは、不必要なエラーリカバリおよびタスク管理トラフィックを回避し、予期される管理データを予期されるタイミング仕様内で第２のイニシエータに供給することによって最適な性能を維持する。記憶システムは、ドライブのインタフェース仕様を維持するとともに、将来のオペレーティングシステムのバージョンおよびアプリケーションをサポートするために書くことができる新しいインタフェース仕様を定義することによって、オペレーティングシステムまたはバックアップアプリケーションに新たな問題が持ち込まれないようにすることができるか、または持ち込まれる新たな問題を低減することができる。
【００２０】
構成によっては、システムは、デバイスの通信および／またはアクティビティを積極的に監視するとともに、監視情報に基づいてデバイスについての現在の状態情報を維持するデバイスモニタを含む。システム内の他の構成要素およびデバイスは、過去の動作から蓄積され記憶されている状態情報を用いることによってコマンドの発行および結果の解析についてのオーバヘッドを回避することができる。
【００２１】
図１を参照すると、概略的なブロック図は、インテリジェントサンプリングを介して被監視デバイス１１８の状態を求めることができるデバイスモニタ１００を示す。デバイスモニタ１００はコマンドをデバイス１１８に発行し、デバイス１１８から状態および何等かのデータを取り込む。デバイス１１８は通常、物理デバイスである。記憶システムでは、デバイスはテープドライブ、ディスクドライブ、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）ドライブ、他のタイプの記憶デバイス、または現在既知の、もしくは後に開発されるデバイスの組み合わせであることができる。
【００２２】
デバイスモニタ１００は、入力コマンドからセンスデータおよびログデータを代行受信し、かつ適切であればセンスコマンドおよびログコマンドを生成してデバイス状態キャッシュ１２２をリフレッシュすることにより、デバイス状態キャッシュ１２２の保全性を確保する。デバイス状態キャッシュ１２２は、デバイスがバインディングされているか否かをリアルタイムで判定するための情報を記憶した揮発性メモリまたは記憶デバイスであることができる。デバイス固有のコマンドシーケンスは、デバイスプロファイルキャッシュ１２４からの読み出しによって解決することができる。デバイスの状態は、デバイス状態キャッシュ１２２から読み出し、デバイスを直接ポーリングする必要性を低減することによって解決することができる。デバイスプロファイルキャッシュ１２４は通常、特定のデバイスタイプをエミュレートするためのコマンドシーケンスおよび応答シーケンスを記憶した不揮発性メモリまたは記憶デバイスである。
【００２３】
デバイスモニタ１００はコマンド（Ｃｏｍｍａｎｄ）を受け取り、そのコマンドをデバイス１１８に発行し、かつデバイス１１８から状態情報およびデータを含む出力信号（ｄｅｖｉｃｅ  ｏｕｔｐｕｔ）を取り込む。デバイスモニタ１００は、デバイス状態情報Ｓｔａｔｕｓをデバイス状態キャッシュ１２２に渡して、デバイス状態キャッシュ１２２の保全性を維持する。
【００２４】
デバイスモニタ１００は、コマンドからのセンスログデータを代行受信し、デバイス１１８のデータ（ｄｅｖｉｃｅ  ｏｕｔｐｕｔ）から状態情報を抽出してこの状態情報（Ｓｔａｔｅ）をデバイス状態キャッシュ１２２に渡すことによって、デバイス状態キャッシュ１２２の正確性を維持する。デバイスモニタ１００は、デバイス１１８の状態（Ｓｔａｔｕｓ）から状態情報を抽出し、この状態情報をデバイス状態（Ｓｔａｔｅ）としてデバイス状態キャッシュ１２２に渡す。
【００２５】
デバイスモニタ１００は、適当なときにセンスログコマンドも生成してデバイス状態キャッシュ１２２をリフレッシュし、デバイス固有のコマンドシーケンスは、デバイスプロファイルキャッシュ１２４からの記憶コマンドシーケンス（ＣｏｍｍａｎｄＳｅｑ）を使用して解決される。
【００２６】
デバイス状態キャッシュ１２２は、デバイスの状態を含む情報をデバイス１１８から受け取り、デバイス１１８がバインディングされているか否かをリアルタイムで判定する。デバイス状態キャッシュ１２２は、判定の結果をＢｏｕｎｄ信号として供給することができる。
【００２７】
デバイスプロファイルキャッシュ１２４は、デバイスタイプをエミュレートするためのコマンドシーケンスＣｏｍｍａｎｄＳｅｑおよび応答シーケンスＲｓｐＳｅｑを記憶する。コマンドシーケンスＣｏｍｍａｎｄＳｅｑはデバイスモニタ１００に渡される。応答シーケンスＲｓｐＳｅｑは他のデバイスに受け渡される。
【００２８】
図２を参照すると、フローチャートは、デバイスの状態を求める方法での適した初期化技法の一例を示す。この例示的な技法は、デバイスの状態を定義するのに適した情報のデータ構造またはテンプレートにアクセスし、これに対して作用する。テンプレート中の項目はアプリケーション固有であり、デバイスタイプ、デバイスの動作条件、システム条件等に応じて可変であり得る。例示的な一例としては、図５Ａおよび図５Ｂの表中のテンプレートは高可用性アプリケーションでのデータを示す。
【００２９】
初期化２００状態において、出力が、アプリケーションによって決まるデフォルト値にセットされる（２０２）。デバイスモニタ１００はデバイス１１８にコンタクトをとり（２０４）、最初の試みが失敗した場合には再試行する。デバイスモニタ１００は、外部から受け取ったコマンドあるいは内部にプログラミングされたコマンドのいずれかを通して、テンプレート値に関連するメソッドおよびコマンドを呼び出し（２０６）、テンプレート値を集める（２０８）。たとえば、照会コマンドを呼び出すことによって照会データを得ることができる。テンプレート値の収集が完了する（２１０）と、デバイス状態についての評価が行われる（２１２）。実施形態によっては、この評価はデバイスモニタ１００において実行される制御動作を介して行うことができる。他の実施形態では、外部のデバイスまたはコントローラがコマンドを呼び出し、デバイス出力にアクセスして状態を評価することができる。デバイス状態出力は、実際のデバイスの状態を反映するようにセットされる（２１４）。
【００３０】
図３を参照すると、フローチャートは、コマンドが存在していない場合にデバイスの状態を定常状態に更新する方法３００を示す。デバイス状態出力は、状態の更新に備えて、使用中状態（ビジー）を反映するように更新される（３０２）。サンプリングが、テンプレートのメタデータに適切な最高頻度から選択される時間間隔でアクティブになる（３０４）。したがって、サンプリングは考えられるいずれの状態変更も追跡するのに十分な間隔で行われる。デバイスモニタ１００は、たとえばテンプレート中のデータの古さに基づいて正確性を評価し（３０６）、更新が適当な場合はメソッドを呼び出してデータをリフレッシュする（３０８）。リフレッシュメソッドは、デバイスの状態を変更すなわちリフレッシュする、デバイス１１８に発行される１つまたは複数の一続きのコマンドを含む。デバイスモニタ１００は、デバイスがメソッドを実行することに起因してテンプレートデータおよびメタデータをリフレッシュする（３１０）。デバイスモニタ１００は、呼び出されたメソッドまたはコマンドの結果を反映するようにデバイス状態出力信号を更新する（３１２）。
【００３１】
図４を参照すると、フローチャートは、コマンドが存在している場合にデバイスの状態を定常状態に更新する方法４００を示す。デバイス状態出力が使用中状態を反映するように更新される（４０２）。存在しているコマンドがリフレッシュメソッドに使用される場合（４０４）、デバイス出力がサンプリングされ（４０６）、システムに渡される。デバイスモニタ１００は、サンプルに基づいてテンプレートデータおよびメタデータをリフレッシュする（４０８）。デバイスモニタ１００は、実際のデバイス状態を反映するようにデバイス状態出力信号を更新する（４１０）。
【００３２】
デバイスモニタ１００は、ハードウェア、ソフトウェア、ファームウェア等、様々な構成で実施することができる。機能特徴は、特定のプラットフォームに制限されることなく、プロセッサ、マイクロプロセッサ、中央演算処理デバイス、状態マシン、プログラマブルロジックアレイおよび他の同様のデバイスで実施することができる。デバイスモニタ１００は、内蔵システムおよびプロセッサベースのシステムに非常に適している。
【００３３】
図５Ａおよび図５Ｂを参照すると、表は、高可用性デバイスアプリケーションに対応するテンプレートの一例におけるデータを示す。表またはリスト中のフィールドは、正確性または古さ、更新の頻度または手段および更新メソッド等のメタデータを含む。この表は、最初の列に、デバイス状態キャッシュ１２２に記憶されているテンプレートにおいてセットまたは更新される値を示す。２番目の列は、テンプレートを更新するための取得メソッド中に発行されるコマンドを示す。通常、取得メソッドをデバイスプロファイルキャッシュ１２４に記憶し、デバイスモニタ１００に渡して、テンプレートを周期的に更新することができる。
【００３４】
図６を参照すると、概略的なブロック図は、ストレージエリアネットワーク（ＳＡＮ）等の記憶システム６００において使用するのに適したルータ６１０の一例を示す。ルータ６１０は、ファイバチャネル・スイッチ・ファブリック（ＦＣ−ＳＷ）環境あるいはファイバチャネル・アービトレーテッド・ループ（ＦＣ−ＡＬ）環境のいずれかにおいてＮａｒｒｏｗ／Ｗｉｄｅ  Ｆａｓｔ／Ｕｌｔｒａ−２  ＳＣＳＩ（小型コンピュータシステムインタフェース）バス６１２の双方向接続を可能にする。ルータ６１０は、ファイバチャネルプロトコル（ＦＣＰ）をＳＣＳＩプロトコル間で変換し、コマンド、データおよび状態情報をファイバチャネルホスト６１６、デバイス６２０、ＳＣＳＩホスト６１８およびデバイス６１４との間で転送することができる。ルータ６１０は、イニシエータデバイスとしてファイバチャネルホスト６１６およびＳＣＳＩホスト６１８をサポートする。ルータ６１０は、ＲＡＩＤ（Ｒａｎｄｏｍ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋ：低コストディスク冗長アレイ）コントローラ、ディスクドライブ、ＪＢＯＤ（Ｊｕｓｔ  ａ  Ｂｕｎｃｈ  ｏｆ  Ｄｉｓｋｓ：単体ディスクの集合体）等を含むファイバチャネルデバイス６２０もサポートする。ＳＣＳＩデバイス６１４は、テープドライブ、テープライブラリ等の順次アクセスデバイスも含む。各種ＳＣＳＩデバイス６１４およびファイバチャネルデバイス６２０は、テープライブラリおよび磁気光学ライブラリを含む。ファイバチャネルホスト６１６およびデバイス６２０は、ハブまたはスイッチ６２６を介してルータ６１０と通信する。
【００３５】
他の実施形態、たとえば将来の実施形態では、例示的なシステムをファイバ−ファイバルータおよびインターネットＳＣＳＩ（ｉＳＣＳＩ）−ＳＣＳＩアプリケーションに使用することができる。したがって、例示的なシステムおよび技法は、例示的なファイバチャネル−ＳＣＳＩ実施形態以外の規格に従って使用することも可能である。
【００３６】
ルータ６１０は通常、ファイバチャネルバスおよびＳＣＳＩバス６１２それぞれを介して通信するための１つまたは複数のファイバチャネルコントローラ６２２および１つまたは複数のＳＣＳＩコントローラ６２４を含む複数のコントローラを有する。ルータ６１０は、ルータ６１０ならびにメモリ６３０、たとえば揮発性メモリおよび不揮発性メモリの動作を制御するプロセッサ６２８をさらに含むことができる。プロセッサ６２８は、内部バス６３２上の通信を介してファイバチャネルコントローラ６２２およびＳＣＳＩコントローラ６２４の動作を制御する。
【００３７】
ルータ６１０は、ファイバチャネルホスト６１６からルータ６１０にカプセル化ＦＣＰプロトコルコマンドパケットが発行されたことを受けて、ファイバチャネルホストプロトコルをＳＣＳＩデバイスプロトコルに変換する。ルータファイバチャネルコントローラ６２２はファイバチャネル情報を解釈し、このパケットをバッファメモリ６３０に配置する。プロセッサ６２８はファイバチャネル情報パケットを解釈し、ルータＳＣＳＩコントローラ６２４を、このトランザクションを処理するようにプログラムする。ルータＳＣＳＩコントローラ６２４は、コマンドをターゲットＳＣＳＩデバイス６１４に送り、ＳＣＳＩデバイス６１４はこのコマンドを解釈して実行する。
【００３８】
ＳＣＳＩ−ファイバチャネルプロトコルプロセスにおいて、イニシエータは、ＳＣＳＩバス６１２上の、コマンドを発行するＳＣＳＩホスト６１８であり、したがって情報がルータ６１０を通してファイバチャネルストレージエリアネットワーク（ＦＣ−ＳＡＮ）６３４上のターゲットに渡される。ＳＣＳＩホスト６１８はコマンドをルータ６１０に発行する。ルータＳＣＳＩコントローラ６２４はそのコマンドを解釈し、その解釈されたコマンドをバッファメモリ６３０に配置する。プロセッサ６２８はデータを解釈し、ルータファイバチャネルコントローラ６２２を、トランザクションを処理するようにプログラムする。ルータファイバチャネルコントローラ６２２は、そのデータをＦＣＰプロトコルパケットに翻訳し、そのパケットをターゲットファイバチャネルデバイス６２０に送る。ターゲットファイバチャネルデバイス６２０はＦＣＰプロトコルパケットを解釈し、コマンドを実行する。
【００３９】
記憶システム６００は、特定の用途に応じて多くの異なるトポロジおよび構成として構成することが可能である。容量の拡張が望まれて追加のデバイスおよび構成要素が追加される場合が多い。１つの適したタイプのトポロジは、１つまたは複数のハブまたはスイッチによって接続された一連のスイッチまたは階層化されたスイッチを使用して縦続されたファブリックである。別の適したタイプのトポロジは、すべてのスイッチが相互接続され、したがって任意の１つのスイッチから別のスイッチへの少なくとも２つのパスまたはルートがファブリックに存在するメッシュファブリックである。リングファブリックは、スイッチが接続されて単一のファブリックになった連続リングである。バックボーンファブリックは、ファブリック内の他のスイッチと接続するファブリックバックボーンとして機能する１つまたは複数のスイッチを有し、バックボーンスイッチが他のすべてのスイッチとの全帯域・冗長接続性を有するルータとして機能する。他のタイプのトポロジも可能である。例示的なシステムの実施形態は、記憶デバイスに同時にアクセス可能な、またはアクセスを試みることが可能な複数のイニシエータを含むトポロジに使用することができる。
【００４０】
図７を参照すると、概略的なブロック図は、論理デバイス番号（ＬＵＮ）としての使用に適した記憶デバイス７００の一例を示す。記憶デバイス７００は、ドライブまたはライブラリ等、任意のタイプの記憶デバイスであることができる。記憶デバイス７００によっては、テープドライブまたはテープライブラリであることができるものもあり、ディスクドライブまたは光学記憶ドライブの形であることができるものもある。一例では、記憶デバイス７００は、何百ものテープカートリッジ用の１ダースまたはそれよりも多くのテープドライブおよびスロットを含むテープライブラリであることができる。記憶デバイス７００は、業界標準のソフトウェアまたはカスタムソフトウェアを直接接続デバイスとして、またはマルチサーバシステムの一部として使用して動作することが可能である。
【００４１】
記憶デバイス７００は、ＰＣＩバスバックプレーン等のバスバックプレーンを組み込み、複数の様々なタイプのデバイス、システムまたは構成要素とインタフェースする。たとえば、記憶デバイス７００は、ホストインタフェース７１２、ネットワークインタフェース７１４、サーバ７１６およびＲＡＩＴ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｔａｐｅｓ：低コストテープの冗長アレイ）インタフェース７２０に接続されたバス７０２を含むことができる。ホストインタフェース７１２は、ＳＣＳＩ、Ｕｌｔｒａ−ＳＣＳＩ、Ｕｌｔｒａ−２ＳＣＳＩ、ギガビットイーサネット、ファイバチャネルおよび他を含むがこれらに限定されない各種リンクへの接続性をサポートすることができ、ファイバチャネルバックアップサーバおよびさらなるファイバチャネルアダプタカードを備えたネットワークに直接接続できるようにする。ネットワークインタフェース７１４は、ＰＣ−イーサネット、周辺機器相互接続−ファイバチャネル分散データインタフェース（ＰＣＩ−ＦＤＤＩ）、周辺機器相互接続−非同期転送モード（ＰＣＩ−ＡＴＭ）カードおよび他を追加したネットワークに直接接続することが可能である。サーバ７１６のインタフェースは、シングルカードプロセッサもしくはＣＰＵを収容することができるか、またはネットワーク接続型記憶デバイスとして使用することができる。ＲＡＩＴインタフェース７２０は、部分的にＲＡＩＴカードを追加することによる自動テープコピー、ミラーリングおよびテープストライピングを通して耐故障性のサポートを可能にする。
【００４２】
記憶デバイス７００は、各種電気構成要素または電気機械構成要素を制御および管理する複数のコントローラを有する。コントローラは、主ライブラリコントローラ７０４、ロードポートコントローラ７０６、機械機構コントローラ７０８およびドライブコントローラ７１０を含むことができる。主ライブラリコントローラ７０４は、マルチホストおよびライブラリ区画化、シリアル通信制御、診断およびデータパススルーを含む複数の様々な制御、管理および監視といった動作を実行するシステムコントローラである。たとえば、主ライブラリコントローラ７０４は、操作機能性、構成、障害検出、診断テストおよびウェブインタフェース等のネットワークインタフェースに役立つグラフィカルユーザインタフェース（ＧＵＩ）タッチスクリーン等の制御パネル７２８への接続を介してシステム管理をサポートする。ドライブコントローラ７１０は複数の記憶デバイス７２２と通信し、データルーティング、ドライブ利用およびドライブフェイルオーバーを含む複数の動作を制御する。ロードポートコントローラ７０６はロードポート７２６と通信し、記憶デバイス７００へのデータカートリッジの出入りを管理する。一例として、ロードポート７２６は、１つまたは複数のマルチカートリッジ除去可能マガジンを含み、カートリッジのインポートおよびエクスポートならびにオフサイトデータストレージに役立つことができる。機械機構コントローラ７０８は、記憶スロット、記憶デバイス７２２およびロードポート７２６の間でデータカートリッジを搬送するカートリッジ取り扱い機構７２４等の機械機構と通信する。
【００４３】
各種インタフェース、すなわちホストインタフェース７０４、ネットワークインタフェース７０６、サーバ７０８およびＲＡＩＴインタフェース７１０から受け取ったコマンドは、少なくとも記憶ドライブ７２２および機械機構７２４の動作を制御する。
【００４４】
図８を参照すると、概略的なブロック図は、可用性、データ保全性および性能を向上させるように動作する要素を含むＬＵＮ仮想化システム８００を示す。ＬＵＮ仮想化システム８００はルータに実装することができる。ルータは仮想化の実施に非常に適している。これは、仮想化には通常メッセージの代行受信が含まれ、メッセージトラフィックは一般にルータを通過するためである。他の実施形態では、ＬＵＮ仮想化システム８００は、スイッチ、ハブ、記憶デバイス、記憶ライブラリ、サーバ、ホスト等、他のデバイス、構成要素またはシステムで実施することが可能である。実施形態によっては、例示的なＬＵＮ仮想化システム８００は、ルータまたは他のデバイス内のプロセッサまたはコントローラ上で実行可能なファームウェア構成要素として実施することができる。ＬＵＮ仮想化システム８００のブロック図は、単一ＬＵＮについて可用性、データ保全性および性能の改良を実施する構成要素およびデータフローを示す。データパスは太線で示されている。ＬＵＮ仮想化システム８００は、ルータまたは他のデバイスによってサポートされるＬＵＮ毎に複製することができる。
【００４５】
ＬＵＮ仮想化システム８００は、プロトコルインタフェース８１０、コマンドフィルタ８１２、ＬＵＮモニタ８１４、データフィルタ８１６、物理ＬＵＮ８１８、仮想ＬＵＮ８２０、デバイス状態キャッシュ８２２およびデバイスプロファイルキャッシュ８２４を含む。
【００４６】
プロトコルインタフェース８１０は、仮想／物理マッピングを実行して記憶ＬＵＮの仮想化に役立つ。プロトコルインタフェース８１０はコマンドを受け取り、たとえば、状態を正しいコマンドにマッチングし、その状態フレームにヘッダ情報を与えることによって伝送するために情報ブロックを構成する。プロトコルインタフェース８１０は、たとえば、イニシエータへの最初のアクセスについてユニットアテンションを得ることによって、イニシエータプロトコルも処理する。プロトコルインタフェース８１０は、複数のＬＵＮからの信号を管理することができる。プロトコルインタフェース８１０は、外部通信の共通インタフェースポイントとしての役割を果たす。
【００４７】
具体的な一例では、プロトコルインタフェース８１０は、ファイバチャネル／ＳＣＳＩ（小型コンピュータシステムインタフェース）変換、ホストからのコマンドパケット受信、ヘッダおよび外来情報のストライピング、およびＳＣＳＩコマンドの受け渡しを行うことができる。情報を戻すために、プロトコルインタフェース８１０は、ストライピングされた情報の少なくともいくらかを保存し、戻す情報を、開始デバイスへの返送に適した形に再度パッケージ化する。
【００４８】
コマンドフィルタ８１２はコマンドおよびタスク管理指示を受け取り、物理デバイスがコマンドおよび指示に従っていつどのように動作するかを決定する。コマンドフィルタ８１２は、コマンドが仮想ＬＵＮに向けられているのか、それとも物理ＬＵＮに向けられているのかも決定する。デバイスがバインディングされている場合、バインディングイニシエータからのコマンドは物理ＬＵＮに渡され、他のイニシエータからのコマンドは、そのコマンド、条件および状況に応じて拒絶されるか、あるいは仮想ＬＵＮによって処理される。特定の実例では、コマンドフィルタ８１２は、ＡＢＯＲＴ（アボート）、ＲＥＳＥＴ（リセット）、ＴＡＲＧＥＴ  ＲＥＳＥＴ（ターゲットリセット）、ＡＢＯＲＴ  ＴＡＳＫ（タスクアボート）、ＡＢＯＲＴ  ＣＯＭＭＡＮＤ  ＳＥＴ（コマンドセットアボート）および他等のＳＣＳＩコマンドを処理する。
【００４９】
例示的なコマンドフィルタ８１２は、管理されたデバイスの状態に基づいて情報をフィルタリングする動的フィルタであり、状態変更時にはフィルタパラメータを常に更新することができる。コマンドフィルタ８１２は、コマンドおよびタスク管理指示を迅速かつ効率的にフィルタリングして、コマンドおよびタスク管理指示をＬＵＮ、たとえば物理ＬＵＮ８１８あるいは仮想ＬＵＮ８２０のいずれかに選択的に指向する。システムは常に、条件から単一パラメータ、デバイス状態を抽出するバックグランドプロセスで複数の条件を解析し、単一パラメータはフィルタリング判定のベースである。例示的な実施形態では、ＬＵＮモニタ８１４がバックグラウンドプロセスを実行する。
【００５０】
コマンドフィルタ８１２はＬＵＮ仮想化の初期化も実行する。システムに電源が投入されるか他の条件で、システムは、どのような状態であるか分からず開始情報もない状態で開始する。初期化手順がデバイス状態キャッシュ８２２中の記憶デバイスについての情報を収集して、ＬＵＮ仮想化を可能にする。一実施形態では、コマンドフィルタ８１２が初期化を呼び出し、ＬＵＮモニタ８１４がデバイス状態キャッシュ８２２中の記憶要素にアクセスし、状態が規定されていないと決定する。ＬＵＮモニタ８１４はデバイスプロファイルキャッシュ８２４にアクセスして、デバイス状態キャッシュ８２２中の記憶要素を埋める。
【００５１】
ＬＵＮモニタ８１４は物理ＬＵＮにコマンドを発行し、物理ＬＵＮから状態データおよび何等かのデータを取り込む。ＬＵＮモニタ８１４は、デバイス状態キャッシュの保全性を維持し、かつ確保する。ＬＵＮモニタ８１４は、入力コマンドからのセンスおよびログデータを代行受信してデバイス状態キャッシュの正確性を維持し、それによってデバイス状態を含むデータ構造を維持する。ＬＵＮモニタ８１４は、適切な場合はセンスおよびログコマンドも生成して、デバイス状態キャッシュ８２２をリフレッシュする。デバイス固有のコマンドシーケンスは、デバイスプロファイルキャッシュ８２４を使用することによって解決することができる。データを得るためのポーリングは、競合を回避するために低減される。
【００５２】
ＬＵＮモニタ８１４は、コマンドおよびタスク管理指示トラフィックを知的に監視して、デバイスの状態を絶えず更新することができる。ＬＵＮモニタ８１４は、物理ＬＵＮ８１８がホストまたはイニシエータによって要求されたコマンドを実行すると利用可能になる状態情報を代行受信し、代行受信した状態情報に基づいてデバイス状態キャッシュ８２２を更新する。したがって、ＬＵＮモニタ８１４は、コマンドをＬＵＮに発行することなく、ひいては外来のトラフィックを増大することなく受動的に状態を更新することができる。物理ＬＵＮ８１８は、コマンドを実行した結果として状態情報ＰＳｔａｔｕｓを生成する。ＬＵＮモニタ８１４はＰＳｔａｔｕｓにアクセスし、情報がトラッキングに有用か否かを判定し、有用である場合はデバイス状態キャッシュ８２２に情報を記憶するか、または更新する。積極的にコマンドを要求するのではなく、外部から要求されたコマンドからのＰＳｔａｔｕｓを受動的にトラッキングすることで情報を更新することにより、ＬＵＮモニタ８１４は、物理ＬＵＮ８１８へのコマンドトラフィックを増大することなくデバイス状態キャッシュ８２２をリフレッシュすることができる。
【００５３】
ＬＵＮモニタ８１４は概して、情報セットがデバイスまたはＬＵＮの状況および動作を記述するために望ましいことを基準にして機能する。情報の大部分は、コマンド、タスク管理、データおよび状態トラフィックを含む、イニシエータとＬＵＮの間のトラフィックを受動的に監視することによって取り込むことができる。ＬＵＮモニタ８１４は、補足的なコマンドをＬＵＮに発行することによって、適した間隔内で取り込まれない情報をリフレッシュする。例示的な実施形態では、デバイス状態キャッシュ８２２は所望の情報を記憶し、デバイスプロファイルキャッシュ８２４は記憶する情報を定義する。
【００５４】
ＬＵＮモニタ８１４は、デバイス状態キャッシュ８２２に維持する情報を識別するデバイスプロファイルキャッシュ８２４からの情報にアクセスする。ＬＵＮモニタ８１４は情報の更新をトラッキングし、情報が利用不可能か、あるいは古いことにより情報をいつリフレッシュすべきかを決定する。リフレッシュが適当である場合、ＬＵＮモニタ８１４は、コマンドを物理ＬＵＮ８１８に発行することによって情報を直接要求することができる。デバイスプロファイルキャッシュ８２４は、一度セットされたら更新する必要のない識別情報、特定の情報についてのリフレッシュレート等を含む各種管理情報を包含する。情報によっては、異なるレートで進化するものがある。ＬＵＮモニタ８１４は、ＬＵＮ動作の動的に変化する態様に従ってリフレッシュレートを適合することができる。
【００５５】
データフィルタ８１６は、センスデータおよびログデータに関してデータをフィルタリングする。データフィルタ８１６は、データにアクセスして制御情報を監視する。たとえば、ＬＯＧ  ＰＡＧＥおよびＭＯＤＥ  ＳＥＮＳＥ情報が状態のトラッキングに有用でありうる。データフィルタ８１６は、ごくわずかな時間遅延を導入しながら、制御情報、たとえばデータパスからのコピー情報にアクセスするデータパスのフィルタリングを可能にする。データフィルタ８１６は、フィルタリングが望ましくない場合に非アクティブまたはトランスペアレント（透過的であって認識されない）になる。したがってデータフィルタ８１６は、データパスへの影響を低くして、それによってフィルタを通過する際の遅延を低減して実施することができる。
【００５６】
通常、ほとんどの制御情報はデータパスからではなく状態ＰＳｔａｔｕｓから得られるため、データフィルタ８１６は非アクティブでありうる場合が多い。アクティブであるとき、データフィルタ８１６は、通過する情報に変更を加えることなく情報を通し、データ保全性を正確に維持する。
【００５７】
物理ＬＵＮ８１８は、物理ドライブまたは物理ＬＵＮのドライバであるが、仮想ＬＵＮ８２０は、デバイスプロファイルキャッシュ８２４を使用してデバイス固有の応答シーケンスを解決する物理ＬＵＮのエミュレータである。仮想ＬＵＮ８２０は、物理ＬＵＮ８１８の１つまたは複数の振る舞いをエミュレートすることができるとともに、コマンド指示に応答することができる。コマンド指示の例としては、ＬＯＧ  ＳＥＮＳＥ（ログセンス）、ＭＯＤＥ  ＳＥＮＳＥ（モードセンス）、ＲＥＣＥＩＶＥＤ  ＤＩＡＧＮＯＳＴＩＣＳ（受信診断）、ＩＮＱＵＩＲＹ（照会）および他が挙げられる。仮想ＬＵＮ８２０は通常、物理ＬＵＮ８１８のイメージで構成される。実施形態によっては、仮想ＬＵＮ８２０の記憶量を、仮想ＬＵＮが大量のデータを受け取ることができないように制限することができる。このような実施形態では、供給されるデータ、たとえば、ログページおよびメンテナンス情報等、デバイス状態キャッシュ８２２に記憶される情報は一般に小さいため、仮想ＬＵＮ８２０はデータを入手することができる。記憶容量が大きい実施形態は、より高い能力を有し、データを生成して受信することができる。
【００５８】
デバイス状態キャッシュ８２２は、物理ＬＵＮがバインディングされているか否かをリアルタイムで判定するための情報を記憶する揮発性メモリまたは記憶デバイスである。実施形態によっては、ルータによってホストされるドライブファームウェアモジュールは、デバイス状態キャッシュ８２２を管理することができる。
【００５９】
デバイスプロファイルキャッシュ８２４は通常、特定のドライブタイプをエミュレートするためのコマンドシーケンスおよび応答シーケンスを記憶する不揮発性メモリまたは記憶デバイスである。実施形態によっては、ルータによってホストされるドライブファームウェアモジュールは、デバイスプロファイルキャッシュ８２４を実施することができる。
【００６０】
プロトコルインタフェース８１０は、外部通信の共通インタフェースとして動作する際に複数の信号を処理する。プロトコルインタフェース８１０は、タスク管理情報（ＴｓｋＭｇｍｔ）を入力タスク管理指示として各種デバイス、実例としては第１のＬＵＮおよび第２のＬＵＮから受け取る。タスク管理指示としては、ＴＡＲＧＥＴ  ＲＥＳＥＴ（ターゲットリセット）、ＡＣＡ（Ａｕｔｏｍａｔｉｃ  Ｃｏｎｔｉｎｇｅｎｔ  Ａｌｌｅｇｉａｎｃｅ）タスク属性およびＡＢＯＲＴ  ＴＡＳＫ（タスクアボート）を挙げることができる。プロトコルインタフェース８１０は、タスク管理指示をコマンドフィルタ８１２に渡し、コマンドフィルタ８１２から代わりにタスク管理指示を受け取ることができる。プロトコルインタフェース８１０は、ＬＵＮから入力コマンド（Ｃｍｄ）も受け取り、そのコマンドをコマンドフィルタ８１２に受け渡す。プロトコルインタフェース８１０は、ＬＵＮから、たとえばＬＯＧＩＮ指示およびＬＯＧＯＵＴ指示を含む入力セッション管理（ＳｅｓｓＭｇｍｔ）指示を受け取る。プロトコルインタフェース８１０は、セッション管理指示をコマンドフィルタ８１２に渡し、また、コマンドフィルタ８１２からリターンセッション管理指示を受け取る。プロトコルインタフェース８１０はＬＵＮからソース識別子（ＳｏｕｒｃｅＩＤ）情報を受け取り、この情報をコマンドフィルタ８１２に渡す。ＬＵＮからプロトコルインタフェース８１０への他の情報は、追加のドライブ情報（ＥｘｔＤｒｖＩｎｆｏ）、外部ソースからのドライブ状態についての情報を含む。たとえば、ライブラリによっては、ＡＣＩ（Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｔｒｏｌ  Ｉｎｔｅｒｆａｃｅ）ポートを介してＬＯＡＤ  ＵＮＬＯＡＤコマンドを発行するものもある。プロトコルインタフェース８１０は、ＥｘｔＤｒｖＩｎｆｏをコマンドフィルタ８１２に渡す。
【００６１】
プロトコルインタフェース８１０は、イニシエータへのデータ入力（ＤａｔａＩｎ）ラインおよびイニシエータからのデータ出力（ＤａｔａＯｕｔ）ラインを含むデータパスへのインタフェースである。ＤａｔａＩｎは、ＰＤａｔａＩｎ（物理ＬＵＮから読み取られたデータ）またはＶＤａｔａＩｎ（仮想ＬＵＮから読み取られたデータ）からプロトコルインタフェース８１０によって解決される。ＤａｔａＯｕｔは、物理ＬＵＮ８１８あるいは仮想ＬＵＮ８２０のいずれかから返されたＳｔａｔｕｓ情報からプロトコルインタフェース８１０によって解決される。状態は、仮想ＬＵＮ８２０あるいは仮想ＬＵＮ８１８のいずれかからプロトコルインタフェース８１０を介してイニシエータに返される。プロトコルインタフェース８１０は、ＶＳｔａｔｕｓあるいはＰＳｔａｔｕｓからＳｔａｔｕｓを解決する。
【００６２】
コマンドフィルタ８１２は、イニシエータからの入力コマンドＣｍｄ、タスク管理指示（ＴｓｋＭｇｍｔ）およびセッション管理指示（ＳｅｓｓＭｇｍｔ）に対して動作し、これらコマンドおよび指示をフィルタリングしてコマンドを物理ＬＵＮ８１８および仮想ＬＵＮ８２０に渡す。コマンドフィルタ８１２は、物理コマンド（ＰＣｍｄ）および物理タスク管理コマンド（ＰＴｓｋＭｇｍｔ）を物理ＬＵＮ８１８に渡す。コマンドフィルタ８１２は、物理ＬＵＮ８１８に関する物理タスク管理コマンド（ＰＴｓｋＭｇｍｔ）をフィルタリングすることによってタスク管理の処理を決める。コマンドフィルタ８１２は、物理ＬＵＮ８１８あるいは仮想ＬＵＮ８２０のいずれかにコマンドを指向する。複数のＬＵＮからの競合コマンド等の各種状況において、コマンドフィルタ８１２はコマンドをフィルタリングし、仮想ＬＵＮ８２０に仮想コマンド（ＶＣｍｄ）を送るとともに、仮想タスク管理コマンド（ＶＴｓｋＭｇｍｔ）を仮想ＬＵＮ８２０に送る。コマンドフィルタ８１２は、外部ドライブ情報（ＥｘｔＤｒｖＩｎｆｏ）をプロトコルインタフェース８１０からＬＵＮモニタ８１４に通過させる。
【００６３】
コマンドフィルタ８１２は、ＬＵＮからの情報およびデバイス状態キャッシュ８２２からの情報を用いて、コマンドおよび指示をフィルタリングする。デバイス状態キャッシュ８２２からのＢｏｕｎｄ信号は、デバイス状態キャッシュ８２２の中味から推論された状態情報を含む。物理ＬＵＮ８１８がバインディングされている場合、コマンドフィルタ８１２はコマンドをバインディングされたイニシエータから物理ＬＵＮ８１８に渡し、他のイニシエータからのコマンドを拒絶またはリダイレクト（再方向付け）する。
【００６４】
ＬＵＮモニタ８１４は、フィルタリングされた物理コマンドＰＣｍｄおよび物理タスク管理コマンドＰＴｓｋＭｇｍｔをコマンドフィルタ８１２から受け取り、これらコマンドを物理ＬＵＮ８１８に発行し、物理ＬＵＮ８１８から物理状態ＰＳｔａｔｕｓおよび何等かの物理データＰＤａｔａＩｎを取り込む。ＬＵＮモニタ８１４は、物理状態ＰＳｔａｔｕｓをプロトコルインタフェース８１０およびデバイス状態キャッシュ８２２に返して、デバイス状態キャッシュ８２２の保全性を維持する。ＬＵＮモニタ８１４はコマンドＰＣｍｄおよびＰＴｓｋＭｇｍｔからセンス、ログデータを代行受信し、フィルタアクティブ（ＦｉｌｔｅｒＡｃｔｉｖｅ）信号をデータフィルタ８１６に渡してフィルタをアクティブ化／非アクティブ化する。ＬＵＮモニタ８１４によるデータフィルタ８１６の管理により、デバイス状態キャッシュ８２２の正確性が維持される。ＬＵＮモニタ８１４およびデータフィルタ８１６は、物理ＬＵＮ８１８データ（ＰＤａｔａＩｎ）から状態情報を抽出し、センスデータ（ＳｅｎｓＤａｔａ）中の状態情報をデバイス状態キャッシュ８２２に渡す。ＬＵＮモニタ８１４は、物理ＬＵＮ８１８状態（ＰＳｔａｔｕｓ）から状態情報を抽出し、この状態情報を物理デバイス状態（ＰＳｔａｔｅ）としてデバイス状態キャッシュ８２２に渡す。ＬＵＮモニタ８１４はまた、適切な場合は、センス、ログコマンドを生成し、デバイスプロファイルキャッシュ８２４からの、記憶されているコマンドシーケンス（ＣｍｄＳｅｑ）を使用して解決されたデバイス固有のコマンドシーケンスでデバイス状態キャッシュ８２２をリフレッシュする。
【００６５】
データフィルタ８１６は、物理ＬＵＮ８１８から物理データＰＤａｔａＩｎを受け取り、ＬＵＮモニタ８１４からのＦｉｌｔｅｒＡｃｔｉｖｅの制御下でＰＤａｔａＩｎをフィルタリングし、このフィルタリングされたデータをイニシエータからの物理データ出力（ＰＤａｔａＯｕｔ）としてプロトコルインタフェース８１０に渡すとともに、物理ＬＵＮ８１８に返す。
【００６６】
物理ＬＵＮ８１８は物理記憶デバイス、通常はテープドライブであるが、ディスクドライブ、ＣＤ−ＲＯＭドライブ等他のタイプのドライブであることもできる。ＬＵＮモニタ８１４からの物理コマンドＰＣｍｄおよび物理タスク管理指示ＰＴｓｋＭｇｍｔの指示の下、物理ＬＵＮ８１８はイニシエータ間でデータを転送する。イニシエータへの物理データＰＤａｔａＩｎは、物理ＬＵＮ８１８にアクセスされるデータである。イニシエータからの物理データは、物理ＬＵＮ８１８に書き込まれるデータである。イニシエータに送られる物理データＰＤａｔａＩｎは、データパスフィルタ８１６にてフィルタリングして、物理ＬＵＮ８１８がイニシエータにバインディングされているか否かを示す状態情報を抽出する。物理ＬＵＮ８１８からの物理デバイス状態情報は、ＬＵＮモニタ８１４によってアクセスされ、プロトコルインタフェース８１０を通してイニシエータに渡される。
【００６７】
仮想ＬＵＮ８２０は、物理ＬＵＮ８１８の各種態様をエミュレートする仮想的な記憶デバイスである。各種実施形態では、物理ドライブの様々な態様をエミュレートすることができる。たとえば、実施形態によっては、仮想ＬＵＮ８２０はタスク管理および／または動作の他の制御態様をエミュレートすることが可能である。実施形態によっては、仮想ＬＵＮ８２０は、動作のデータパス態様をエミュレートするのに十分な記憶容量を含みうる。コマンドフィルタ８１２からの仮想コマンドＶＣｍｄおよび仮想タスク管理コマンドＶＴｓｋＭｇｍｔの指示の下、仮想ＬＵＮ８２０はイニシエータ間で情報を転送する。イニシエータからの物理データ出力ＰＤａｔａＯｕｔを仮想ＬＵＮ８２０に書き込むことができる。イニシエータへのＶＤａｔａＩｎ中の仮想データは、仮想ＬＵＮ８２０から読み取ることのできるデータである。デバイス固有の応答シーケンスＲｓｐＳｅｑは、デバイスプロファイルキャッシュ８２４によって解決される。仮想ＬＵＮ８２０からの状態である仮想状態ＶＳｔａｔｕｓは、解決のためにプロトコルインタフェース８１０に、そしてまたイニシエータに渡される。
【００６８】
状態は、物理ＬＵＮ８１８あるいは仮想ＬＵＮ８２０のいずれかからイニシエータに返され、仮想状態ＶＳｔａｔｕｓあるいは物理状態ＰＳｔａｔｕｓのいずれかからのプロトコルインタフェース８１０によって解決される。
【００６９】
デバイス状態キャッシュ８２２は、物理デバイス状態ＰＳｔａｔｅおよび状態情報ＳｅｎｓｅＤａｔａを含む情報を物理ＬＵＮ８１８から受け取り、物理ＬＵＮ８１８がバインディングされているか否かをリアルタイムで判定する。デバイス状態キャッシュ８２２は、判定結果をＢｏｕｎｄ信号としてコマンドフィルタ８１２に供給し、コマンドフィルタ８１２はこの情報を用いて、コマンドおよび管理指示を物理ＬＵＮ８１８および仮想ＬＵＮ８２０に向ける。
【００７０】
デバイスプロファイルキャッシュ８２４は、デバイスタイプをエミュレートするためのコマンドシーケンスＣｍｄＳｅｑおよび応答シーケンスＲｓｐＳｅｑを記憶する。コマンドシーケンスＣｍｄＳｅｑはＬＵＮモニタ８１４に渡される。応答シーケンスＲｓｐＳｅｑは仮想ＬＵＮ８２０に渡される。
【００７１】
仮想化は、たとえば、すべてのコマンドを物理ＬＵＮ８１８に渡すようにコマンドフィルタ８１２およびＬＵＮモニタ８１４に作用するタスク管理指示ＴｓｋＭｇｍｔを介してイネーブルまたはディスエーブルすることができる。仮想化機構は、望ましくは、診断解析およびテスト、ならびに特徴を別個に許可する能力等、様々な理由によりイネーブルまたはディスエーブルすることができることに基づいて管理可能である。各種実施態様において、仮想化機構は、アクティブ化および非アクティブ化するときを一連の対話ではなく単一の離散した対話に限定することにより、管理のしやすさに貢献する。システムは、機構アクティブ化時の初期化および機構非アクティブ化時にすべてのアクティブＬＵＮについての状態を送信する等、各種技法を用いて不安定または不正確な状態を回避することができる。
【００７２】
実例として特定の記憶デバイスおよびシステムについて述べたが、この技法は他の様々なシステムに使用することができる。概して、本技法は、複数のホスト、サーバ、またはイニシエータが同じデバイスに同時にアクセスを試みることが可能であり、デバイスが一度に１つの要求にしか対処することができないいずれのシステムにも適用することが可能である。
【図面の簡単な説明】
【００７３】
【図１】インテリジェントサンプリングを介してデバイスの状態を求めることができるデバイスモニタの一実施形態を示す概略的なブロック図。
【図２】デバイスの状態を求める方法の一実施形態での適した初期化技法の一例を示すフローチャート。
【図３】コマンドが存在していない場合にデバイスの状態を定常状態に更新する方法の一実施形態を示すフローチャート。
【図４】コマンドが存在している場合にデバイスの状態を定常状態に更新する方法の一実施形態を示すフローチャート。
【図５Ａ】高可用性デバイスアプリケーションに対応するテンプレート中のデータの表の一実施形態の図。
【図５Ｂ】高可用性デバイスアプリケーションに対応するテンプレート中のデータの表の一実施形態の図。
【図６】ストレージエリアネットワーク（ＳＡＮ）等の記憶システムでの使用に適したルータの一例を示す概略的なブロック図。
【図７】論理デバイス番号（ＬＵＮ）として使用するのに適した記憶デバイスの一例を示す概略的なブロック図。
【図８】ルータ要素を含む記憶システムの一実施形態を示す概略的なブロック図。
【図１】
2004220615.tif 000003
【図２】
2004220615.tif 000004
【図３】
2004220615.tif 000005
【図４】
2004220615.tif 000006
【図５Ａ】
2004220615.tif 000007
【図５Ｂ】
2004220615.tif 000008
【図６】
2004220615.tif 000009
【図７】
2004220615.tif 000010
【図８】
2004220615.tif 000011