(57)【要約】【課題】ストレージデバイスの入出力オペレーションを実行するための方法などを提供する。【解決手段】本発明にかかる方法は、ユーザによりストレージデバイスの入出力オペレーションのエラー回復レベルを選択し、入出力オペレーションを実行する要求を受信し、入出力オペレーションを試み、入出力オペレーションが失敗に終わったときに、ユーザによって指定されたエラー回復レベルを実行する。また、本発明にかかるストレージデバイスは、データを記憶するためのストレージ媒体と、ストレージ媒体に接続され、ストレージデバイスのオペレーションを制御する制御回路と、制御回路に関連付けられ、すべての入出力オペレーションに使用され、ユーザにより異なる複数から選択されて入力されるエラー回復レベルを有するエラー回復機能とを備える。【選択図】図２Ａ
2006114039.tif 000002
【特許請求の範囲】
【請求項１】
ユーザによって、ストレージデバイスの入出力オペレーションのエラー回復レベルを選択する（２００）ことと、
前記入出力オペレーションを実行する要求を受信する（２０２）ことと、
前記入出力オペレーションを試みる（２０４）ことと、
前記入出力オペレーションが失敗に終わった場合に、前記ユーザによって指定された前記エラー回復レベルを実行する（２０８）ことと
を含む方法。
【請求項２】
データを記憶するためのストレージ媒体（１１０）と、
前記ストレージ媒体に接続され、前記ストレージデバイスのオペレーションを制御する制御回路（１０８）と、
前記制御回路に関連付けられたエラー回復機能（１１２）であって、
すべての入出力オペレーションに使用するエラー回復レベル
を有するエラー回復機能と
を備え、
前記エラー回復レベルは、複数の異なるエラー回復レベルから選択されて、ユーザから入力される
ストレージデバイス。
【請求項３】
前記複数の異なるエラー回復レベルは、少なくとも第１のエラー回復レベル及び第２のエラー回復レベルを含み、前記第１のエラー回復レベルは前記第２のエラー回復レベルよりも多くのエラー回復を実行する
請求項２に記載のストレージデバイス。
【請求項４】
ストレージデバイスのエラー回復レベルを設定するユーザコマンドを受信する（２００）ことによって、前記ストレージデバイスのエラー回復を調節することと、
前記コマンドが或る状態を示している場合に、失敗に終わった入出力オペレーションについて限られたエラー回復を可能にすることと、
前記コマンドが別の状態を示している場合に、失敗に終わった入出力オペレーションについてより高いエラー回復レベルを可能にすることと
を含む方法。
【請求項５】
入出力オペレーションの要求を受信する（４００）ことと、
前記入出力オペレーションが失敗に終わった場合に、使用するエラー回復レベルを決定する（４０２）ことと、
前記エラー回復レベルを示す状態信号を、前記入出力オペレーションを実行するコマンドに組み込む（４０４）ことと、
前記コマンドを発行する（４０６）ことと
を含む方法。
【請求項６】
状態信号を前記組み込むことは、
デバイスドライバに発行される入出力コマンドに状態信号を組み込むこと
を含む
請求項５に記載の方法。
【請求項７】
状態信号を前記組み込むことは、
ストレージデバイスに発行される入出力コマンドに状態信号を組み込むこと
を含む請求項５に記載の方法。
【請求項８】
デバイスドライバにおいて前記コマンドを受信することと、
ストレージデバイスへ前記コマンドを伝播することと
をさらに含む請求項５に記載の方法。
【請求項９】
前記コマンドを前記伝播することは、
前記組み込まれた状態信号を選択的に変更すること
を含む請求項８に記載の方法。
【請求項１０】
入出力オペレーションの要求を受信する（６００）ことと、
前記入出力オペレーションに使用するエラー回復レベルを示す状態信号を前記要求から抽出する（６０２）ことと、
前記入出力オペレーションを試みる（６０６）ことと、
前記入出力オペレーションが失敗に終わった場合に、前記抽出した状態信号に基づいてエラー回復オペレーションを実行する（６１０）ことと
を含む方法。
【請求項１１】
データを記憶するためのストレージ媒体（１１０）と、
前記ストレージ媒体に接続され、前記ストレージデバイスのオペレーションを制御する制御回路（１０８）と、
前記制御回路に関連付けられたエラー回復機能（１１２）と、
を備え、
前記エラー回復機能は、前記制御回路によって受信された入出力要求に組み込まれた状態信号を受信し、前記状態信号は、前記入出力要求を実行するのに使用するエラー回復レベルを示す
ストレージデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入出力オペレーションのエラー回復に関する。
【背景技術】
【０００２】
ストレージドライバサブシステムは、永久ストレージ媒体へのユーザデータの記憶（書き込み）及び永久ストレージ媒体からのユーザデータの取り出し（読み出し）を行うように設計される。
しかしながら、ドライバサブシステムは、入出力（Ｉ／Ｏ）オペレーションを常に完了できるとは限らない。
場合により、ドライバサブシステムは、データの読み出し又は書き込みの試みが所与の回数成功しなかった後、要求されたＩ／Ｏオペレーションを完了しない可能性がある。
しかし、他のシステムは、故障を認識することもできないし、Ｉ／Ｏオペレーション中の故障を無視するように選択することもできない。
これらの場合、ドライバサブシステムは、読み出しオペレーション又は書き込みオペレーションを継続的又は無制限に試みることがある。
【０００３】
故障したストレージデバイス及び失敗に終わったＩ／Ｏオペレーションの影響を軽減するために、ストレージＩ／Ｏスタックのレイヤが冗長性を追加するように開発されている。
故障したストレージデバイスの影響を軽減する一方法は、複数のロケーションにデータのコピーを書き込むことである。
この方法では、Ｉ／Ｏの故障がデータのどの所与の部分に発生しても、そのデータは、依然として別のロケーションで利用可能である。
Ｉ／Ｏスタックのこのレイヤは、一般に、論理ストレージマネージャ（ＬＳＭ（Logical Storage Manager））又は論理ボリュームマネージャ（ＬＶＭ（Logical Volume Manager））として知られている。
また、ハードウェアも、この冗長性を提供するように開発されてきた。
これらのストレージデバイスは、独立（又は安価）ディスク冗長アレイコントローラ、すなわちＲＡＩＤコントローラとして知られている。
【０００４】
Ｉ／Ｏオペレーション及び関連したあらゆるエラー回復の制御は、要求を有するレイヤからレイヤを通ってオペレーションを実行する。
一般に、Ｉ／ＯオペレーションがＬＳＭ／ＬＶＭレイヤから、下にあるデバイスドライバへ発行されると、デバイスドライバは、そのＩ／Ｏオペレーション、あらゆるエラー回復、又は再試行を制御する。
これと同じことは、デバイスドライバがそのデバイス自身（ＲＡＩＤコントローラを含む）へＩ／Ｏを発行した場合にも当てはまり、デバイスは、その後、Ｉ／Ｏ、あらゆるエラー回復、又は再試行を制御する。
【０００５】
小型コンピュータシステムインターフェース（ＳＣＳＩ）デバイスの場合、ＳＣＳＩストレージデバイスのエラー回復／再試行方法論を確立するための方法が存在する。
この方法は、ＳＣＳＩエラー回復モードページを介し、オペレーティングシステムを通じて実行される。
しかしながら、多くのストレージデバイス及びオペレーティングシステムは、この方法を十分に実施しない。
これに加えて、この方法は、Ｉ／Ｏごとに使用されると、性能をかなり低下させることになり得る。
【０００６】
アプリケーションは、アプリケーション自身のＩ／Ｏ要求ができるだけ迅速に完了されることを望む。
エラー回復が、下にあるハードウェアデバイスドライバ又はソフトウェアデバイスドライバによって起動されると、その回復によって、アプリケーションのＩ／Ｏオペレーションの完了が不必要に遅延されることがある。
例えば、ミラーリングしている状況では、一方のユニットが故障し始めると、その故障し始めているユニットにおいてエラー回復を開始するよりも、代わりのデータセットへ切り換える方が好まれることがある。
しかしながら、階層化されたプロトコルスタックは、一般に、境界交差を禁止しているので、下にあるデバイスドライバが、エラー回復を行うべき時及び行うべきでない時を知ることは望ましくなく、ハードウェアにあってはそれを知ることすらできない。
【０００７】
１つの解決法では、下にあるデバイスドライバが、上位レイヤにタイマを提供する。
ＬＳＭ／ＬＶＭレイヤは、各Ｉ／Ｏオペレーションが許可される時間量を決定し、この時間を（実際のタイミングが発生する）下位レイヤに指定する。
次に、デバイスドライバはその時間内にＩ／Ｏを完了する。
デバイスドライバは成功してデータを返すか、又は、Ｉ／Ｏが終了されて、失敗が返される。
しかしながら、この解決法は、デバイスドライバレイヤにかなりの複雑さを追加する。
デバイスドライバは、Ｉ／Ｏオペレーションを終了するのに要する時間を求めなければならず（いくつかのＩ／Ｏプロトコルを使用する場合には、使用する正確な値を求めることさえ可能でない場合がある）、求めた時間を、ユーザが要求した制限時間から差し引かなければならない。
例えば、ＬＳＭ／ＬＶＭレイヤが、２０秒の制限時間を要求するが、デバイスドライバがＩ／Ｏを終了するのに５秒を要する場合、Ｉ／Ｏを実行するのに１５秒しか使用することができない。
１５秒後には、Ｉ／Ｏは終了され、次いで、指定された２０秒の制限前に、Ｉ／Ｏは失敗ステータスで返される可能性がある。
【発明の開示】
【課題を解決するための手段】
【０００８】
本発明による実施の形態は、ストレージデバイスの入出力オペレーションを実行するための方法、システム、及び装置を提供する。
一例示の実施の形態では、方法は、ユーザによって、ストレージデバイスの入出力オペレーションのエラー回復レベルを選択すること、入出力オペレーションを実行する要求を受信すること、入出力オペレーションを試みること、及び、入出力オペレーションが失敗に終わった場合に、ユーザによって指定されたエラー回復レベルを実行すること、を含む。
【０００９】
別の実施の形態では、ストレージデバイスが提供される。
このストレージデバイスは、データを記憶するためのストレージ媒体と、ストレージ媒体に接続され、ストレージデバイスのオペレーションを制御する制御回路と、制御回路に関連付けられたエラー回復機能であって、すべての入出力オペレーションに使用するエラー回復レベルを有する、エラー回復機能と、を備え、エラー回復レベルは、複数の異なるエラー回復レベルから選択されて、ユーザから入力される。
【００１０】
別の実施の形態では、方法が提供される。
この方法は、入出力オペレーションの要求を受信すること、入出力オペレーションが失敗に終わった場合に、使用するエラー回復レベルを決定すること、エラー回復レベルを示す状態信号を、入出力オペレーションを実行するコマンドに組み込むこと、及び、コマンドを発行すること、を含む。
【００１１】
他の実施の形態及びこれらの実施の形態の変形は、添付図面に図示され、詳細な説明に教示される。
【発明を実施するための最良の形態】
【００１２】
以下の詳細な説明では、本明細書の一部を成す添付図面への参照が行われる。
添付図面では、参照は、本発明による実施の形態を実施できる図に特有の例示の実施の形態として示されている。
これらの実施の形態は、例示であって、当業者が本発明を実施することを可能にするために十分詳細に説明されている。
【００１３】
本発明の精神及び範囲から逸脱することなく、他の実施の形態を利用できることが理解されるべきであり、論理的、機械的、電気的、又はアルゴリズム的な変更を行うことが可能であることが理解されるべきである。
したがって、以下の詳細な説明は、限定する意味に解釈されるべきではない。
【００１４】
［Ｉ．概要］
本発明の実施の形態は、入出力（Ｉ／Ｏ）オペレーションのエラー回復の調節、調整、又は選択を可能にするものである。
例えば、エラー回復レベルの選択的な調節を使用して、失敗に終わったＩ／Ｏオペレーションから回復することができる。
以下の節ＩＩでは、失敗に終わったＩ／Ｏオペレーションに使用されるエラー回復レベルが、例えば管理インターフェースを通じてユーザにより選択される例示の一実施の形態を説明する。
この実施の形態によって、オペレーティングシステムが直接的に関与することなく、エラー回復技法を変更することが可能になる。
この実施の形態では、エラー回復レベルが、ストレージデバイスのすべてのＩ／Ｏオペレーションについて全体的に設定されるか、又は、ストレージデバイスの個々のサブユニット（ＳＣＳＩ  ＬＵＮや論理ユニット等）について設定される。
以下の節ＩＩＩでは、エラー回復レベルが、Ｉ／Ｏコマンドに組み込まれた信号を使用してＩ／Ｏごとに選択される例示の一実施の形態を説明する。
この組み込まれた信号は、一実施の形態では、ストレージデバイスにおいて実行されるエラー回復手順を制御する。
別の実施の形態では、この組み込まれた信号は、オペレーティングシステムのデバイスドライバで実行されるエラー回復手順、又は、Ｉ／Ｏが通過しなければならないＩ／Ｏスタックの他の或るレベルで実行されるエラー回復手順を制御する。
【００１５】
［ＩＩ．ストレージデバイスにおけるエラー回復］
＜直接的なオペレーティングシステムの関与を伴わない場合＞
図１は、全体を１００で示す情報システムのブロック図である。
この情報システムは、失敗に終わった入出力オペレーションに使用されるエラー回復技法の調節を可能にするストレージデバイス１０２を有する。
ストレージデバイス１０２は、ホストシステム１０４に接続されている。
ホストシステム１０４は、例えば、ストレージデバイスにデータを記憶するコンピュータ、ネットワーク、又は他の適切な電子回路である。
また、ストレージデバイス１０２は、当該ストレージデバイス１０２の態様を構成するのに使用される管理ツール又はインターフェース１０６にも接続されている。
一実施の形態では、管理ツール１０６は、直接接続を介してストレージデバイス１０２に接続されている管理コンソールを備える。
他の実施の形態では、管理ツール１０６は、コマンドラインインターフェース又はグラフィカルユーザインターフェース（ＧＵＩ）としてストレージデバイス１０２に提供される。
一実施の形態では、管理ツール１０６は、ホストシステム１０４においてアプリケーションとして実行される。
【００１６】
一実施の形態では、ストレージデバイス１０２は、複数の論理ユニット（ＬＵＮ）を備え、したがって、物理的には１つのデバイスであるが、独立に制御される複数のストレージデバイスの見え方をホストシステム１０４に提示する。
ストレージデバイス１０２が複数のＬＵＮで実施される場合、エラー回復技法の調節は、ＬＵＮごとに独立に制御することができる。
したがって、この明細書においては、用語「ストレージデバイス」は、物理的に独立したストレージデバイスもカバーするように意図されているし、同じ物理デバイスに存在するＬＵＮの少なくとも一部で実施される複数のＬＵＮもカバーするように意図されている。
【００１７】
ストレージデバイス１０２は、ホストシステム１０４のデータの読み出し及び書き込みを行うためのストレージ媒体１１０を提供する。
一実施の形態では、ストレージ媒体１１０には、磁気ディスク、光ディスク、テープ、フラッシュメモリ、又はデータの電子記憶に適した他の媒体の１つ又は複数が含まれる。
【００１８】
ストレージデバイス１０２は、制御回路１０８を通じてストレージ媒体１１０からデータを読み出し、且つストレージ媒体１１０へデータを書き込む。
制御回路１０８は、ソフトウェア、ハードウェア、又はファームウェアの１つ又は複数として実施される。
制御回路１０８は、一態様では、エラー回復機能１１２を含む。
エラー回復機能１１２は、制御回路１０８によって実行された入出力オペレーションが失敗に終わった場合に実行されるエラー回復オペレーションを制御する。
一実施の形態では、エラー回復レベルが、管理ツール１０６を通じて選択され、すべての入出力オペレーションについて選択されたレベルに設定される。
一実施の形態では、管理ツール１０６は、異なるエラー回復レベルを有する２つの状態から選択を行うのに使用される。
一方の状態では、エラー回復機能１１２がエラー回復を制限できるようにされる。
例えば、この状態では、入出力オペレーションが失敗に終わった場合に、エラー回復はエラーを返すことに制限される。
他方の状態では、より高いエラー回復レベルが提供される。
この状態では、例えば、エラー回復機能１１２が、入出力オペレーションの実行を複数回（指定された回数等）、或いは、場合によっては無制限に試行できるようにされる。
したがって、一実施の形態では、これら２つの状態は、エラーが返される前に試行されたエラー回復の試みの回数によって区別され、一方の状態では、エラー回復の試みが多く行われ、他方の状態では、エラー回復の試みがあまり行われない。
一実施の形態では、ストレージ媒体１１０に記憶されたデータが別のストレージデバイスでも利用可能である場合に、管理コンソールは、エラー回復オペレーションの実行が少ない方の状態を選択するのに使用される。
さらに、ストレージ媒体１１０に記憶されたデータが他の場所で利用可能でない場合には、エラー回復オペレーションの実行が多い方の状態が選択される。
【００１９】
この実施の形態では、管理ツール１０６がエラー回復レベルを設定するのに使用されるので、ストレージデバイスのオペレーションは、ホストシステム１０４で実行されているオペレーティングシステムから独立したものとなる。
したがって、ホストシステム１０４のオペレーティングシステムは、ストレージ媒体１１０のデータの状態について独立して知っている必要はない。
さらに、ホストシステム１０４は、データを取り出す際に別のことを何ら行う必要がない。
したがって、既存のオペレーティングシステムを変更する必要なく、オペレーティングシステムプラットフォームの全体にわたって、エラー回復のさまざまな状態を使用することができる。
【００２０】
図２Ａは、すべての入出力オペレーションについて、オペレーティングシステムとは独立した、選択されたエラー回復レベルを有するストレージデバイスの入出力オペレーションを実行するための方法の一実施の形態のフローチャートである。
この方法はブロック２００で開始する。
ブロック２００において、ストレージデバイスに対する失敗に終わった入出力オペレーションに使用されるエラー回復レベルが、そのストレージデバイスによって実行されるすべての入出力オペレーションについて選択される。
一実施の形態では、このエラー回復レベルの選択は、管理インターフェースを通じてユーザにより行われる。
このようなエラー回復レベルの選択によって、オペレーティングシステムの標準オペレーションを何ら変更することなく、多種多様なオペレーティングシステムにわたってこの方法を適用することが可能になる。
選択が行われると、選択されたエラー回復レベルに適合するように、ストレージデバイスの適切なパラメータが更新される。
【００２１】
この方法は入出力（Ｉ／Ｏ）要求を処理する。
ブロック２０２において、この方法は、Ｉ／Ｏ要求が受信されているかどうかを判断する。
一実施の形態では、Ｉ／Ｏ要求には、ストレージデバイスからデータを読み出す要求、及び、ストレージデバイスへデータを書き込む要求が含まれる。
利用可能なＩ／Ｏ要求が存在しない場合、このプロセスはブロック２０２に戻って、ブロック２０２においてＩ／Ｏ要求を待つ。
一方、Ｉ／Ｏ要求が存在する場合、この方法はブロック２０４に進む。
ブロック２０４において、この方法は、ストレージデバイスでＩ／Ｏオペレーションを試みる。
この方法は、ブロック２０６において、Ｉ／Ｏオペレーションにエラーがあるかどうかを判断する。
エラーがない場合、Ｉ／Ｏオペレーションは完了し、成功指示子が返され、そして、この方法はブロック２０２に戻る。
一方、Ｉ／Ｏオペレーションにエラーがある場合、この方法はブロック２０８に進む。
【００２２】
ブロック２０８において、この方法は、ストレージデバイスに対して可能にされたあらゆるエラー回復を実行する。
この方法は、ストレージデバイスについて選択された状態のエラー回復レベルを決定する。
選択された状態がエラー回復を許可するものである場合、このプロセスはブロック２０４に戻って、Ｉ／Ｏオペレーションを再試行する。
一方、状態がエラー回復を許可するものでない場合、このプロセスはブロック２０２に戻る。
さらに、このプロセスは、Ｉ／Ｏオペレーションが失敗に終わったことを示すエラーメッセージを返す。
この実施の形態は、２つのエラー回復レベルを用いて説明してきた。
他の実施の形態では、３つ以上のエラー回復レベルが使用され、それにより、関与したアプリケーション及びデータに基づいて、再試行しない場合と無制限に再試行する場合の両極端の間のエラー回復レベルが提供される。
【００２３】
図２Ｂは、すべての入出力オペレーションについて、オペレーティングシステムとは独立して、選択されたエラー回復レベルを有するストレージデバイスの入出力オペレーションを実行するための方法の別の実施の形態のフローチャートである。
この方法はブロック２５０で開始する。
ブロック２５０において、ストレージデバイスに対する失敗に終わった入出力オペレーションに使用されるエラー回復レベルが、そのストレージデバイスによって実行されるすべての入出力オペレーションについて選択される。
一実施の形態では、このエラー回復レベルの選択は、管理インターフェースを通じてユーザにより行われる。
このようなエラー回復レベルの選択によって、オペレーティングシステムの標準オペレーションを何ら変更することなく、多種多様なオペレーティングシステムにわたってこの方法を適用することが可能になる。
選択が行われると、選択されたエラー回復レベルに適合するように、ストレージデバイスの適切なパラメータが更新される。
【００２４】
この方法は入出力（Ｉ／Ｏ）要求を処理する。
ブロック２５２において、この方法は、Ｉ／Ｏ要求が受信されているかどうかを判断する。
一実施の形態では、Ｉ／Ｏ要求には、ストレージデバイスからデータを読み出す要求、及び、ストレージデバイスへデータを書き込む要求が含まれる。
利用可能なＩ／Ｏ要求が存在しない場合、このプロセスはブロック２５２に戻って、ブロック２５２においてＩ／Ｏ要求を待つ。
一方、Ｉ／Ｏ要求が存在する場合、この方法はブロック２５４に進む。
ブロック２５４において、この方法は、ストレージデバイスでＩ／Ｏオペレーション（再試行及びエラー回復を含む）を試みる。
この方法は、ブロック２５６において、Ｉ／Ｏオペレーションにエラーがあるかどうかを判断する。
エラーがない場合、Ｉ／Ｏオペレーションは完了し、成功指示子が返され、そして、この方法はブロック２５２に戻る。
一方、Ｉ／Ｏオペレーションにエラーがある場合、この方法はブロック２５８に進む。
【００２５】
ブロック２５８において、この方法は、選択されたエラー回復レベルを調べる。
この方法は、エラー回復レベルが低いと判断すると、ブロック２６２に進む。
ブロック２６２において、この方法は、致命的エラー表示をホストのオペレーティングシステムに返し、ブロック２５２に戻る。
一方、この方法は、ブロック２５８において、高い方のエラー回復レベルが選択されていると判断すると、ブロック２６０に進み、「再試行」メッセージをオペレーティングシステムに返す。
この時点で、この方法は、ブロック２５２に戻り、要求されたＩ／Ｏオペレーションを待つ。
この実施の形態は、２つのエラー回復レベルを用いて説明してきた。
他の実施の形態では、３つ以上のエラー回復レベルが使用され、それにより、関与したアプリケーション及びデータに基づいて、再試行しない場合と無制限に再試行する場合の両極端の間のエラー回復レベルが提供される。
【００２６】
［ＩＩＩ．Ｉ／Ｏごとのエラー回復］
図３は、失敗に終わった入出力（Ｉ／Ｏ）オペレーションのシステムのエラー回復メカニズムの調節をＩ／Ｏごとに可能にする、全体を３００で示すシステムの一実施の形態のブロック図である。
このシステム３００は、アプリケーション３０８によって代表されるアプリケーション、及び、オペレーティングシステム３０６を実行するホストシステム３０２を含む。
アプリケーション３０８は、オペレーティングシステム３０６の制御下でデータの記憶及び取り出しを行う。
オペレーティングシステム３０６は、ストレージデバイス３０４−１〜３０４−Ｎにデータを記憶する。
システム３００は、２つのストレージデバイスを有するものとして示されている。
任意の適切な個数のストレージデバイスが特定のシステムに含まれ、アプリケーションは、２つのストレージデバイスと共に使用することに限定されないことを理解されたい。
さらに、一実施の形態では、ストレージデバイス３０４−１〜３０４−Ｎが、物理的に分離したストレージデバイスを備えることを理解されたい。
他の実施の形態では、ストレージデバイス３０４−１〜３０４−Ｎは、同じ物理デバイスの一部の場合がある論理ユニット（ＬＵＮ）を備える。
ＬＵＮの場合、失敗に終わったＩ／Ｏオペレーションに使用されるエラー回復メカニズムは、ＬＵＮが同じ物理デバイスに存在する場合であっても、ＬＵＮごとに独立に調節することができる。
したがって、上述したように、この明細書で使用されるストレージデバイスという用語は、独立した物理デバイス全体に限定されるものではない。
そうではなく、この用語は、独立した物理デバイス全体だけでなく、物理デバイスの一部もカバーする。
【００２７】
オペレーティングシステム３０６は、アプリケーション３０８によって要求されると、Ｉ／Ｏオペレーションを実行するように共に動作する複数のレイヤを含む。
オペレーティングシステムの或るレイヤは、従来から、論理ストレージマネージャ又は論理ボリュームマネージャ（ＬＳＭ／ＬＶＭ）レイヤ３１０と呼ばれている。
このレイヤは、故障したストレージデバイスの影響を軽減するために部分的に開発されたものである。
基本的に、ＬＳＭ／ＬＶＭレイヤ３１０は、ストレージデバイス３０４−１〜３０４−Ｎの複数のロケーションにアプリケーション３０８のデータのコピーを記憶する。
したがって、アプリケーション３０８は、複数のロケーションからトランスペアレントにデータを読み出すことができ、複数のロケーションへトランスペアレントにデータを書き込むことができる。
これによって、アプリケーション３０８は、ストレージデバイス３０４−１〜３０４−Ｎの１つが故障しても、データにアクセスすることが可能になる。
【００２８】
また、オペレーティングシステム３０６は、デバイスドライバインスタンス３１２−１〜３１２−Ｎも含む。
これらのドライバインスタンスは、オペレーティングシステム３０６とストレージデバイス３０４−１〜３０４−Ｎとの間のインターフェースとして動作する。
【００２９】
Ｉ／Ｏオペレーションがアプリケーション３０８によって要求されると、オペレーティングシステム３０６は、冗長データがその要求について利用可能であるかどうかに基づいて、失敗に終わったＩ／Ｏオペレーションに使用されるエラー回復レベルを調節する。
オペレーティングシステム３０６は、エラー回復レベルを選択する信号をＩ／Ｏコマンドに組み込むことによって、Ｉ／Ｏごとにエラー回復レベルを調整する。
したがって、冗長データが、要求されたＩ／Ｏオペレーションを満たすのに利用可能である場合、オペレーティングシステムが入出力の失敗によってハング状態になる可能性が低減される。
一実施の形態では、オペレーティングシステム３０６のＬＳＭ／ＬＶＭレイヤ３１０は、デバイスドライバ３１２−１〜３１２−Ｎを通じてストレージデバイス３０４−１〜３０４−Ｎにより実行されるエラー回復レベルを制御する。
他の実施の形態では、オペレーティングシステム３０６のＬＳＭ／ＬＶＭレイヤ３１０は、デバイスドライバ３１２−１〜３１２−Ｎによって実行されるエラー回復レベルを制御する。
さらに、一実施の形態では、エラー回復レベルは、システム３００のさまざまなレベルを通って伝播するにつれて調節される。
例えば、オペレーティングシステム３０６は、例えばデバイスドライバ３１２−１といったデバイスドライバに対して、高いエラー回復レベルでエラー回復レベルを設定することができる。
デバイスドライバ３１２−１は、このエラー回復レベルを、ストレージデバイス３０４−１に、同じエラー回復レベルとして渡すこともできるし、又は例えばそれよりも低いエラー回復レベルといった異なるエラー回復レベルとして渡すこともできる。
したがって、エラー回復レベルは、オペレーティングシステムから物理デバイスへＩ／Ｏスタックの各レイヤを通って伝播するにつれて変化することがある。
【００３０】
一実施の形態では、ストレージデバイス３０４−１〜３０４−Ｎのそれぞれは、ストレージデバイス１０２と同様に構成される。
この実施の形態では、エラー回復機能１１２が、失敗に終わったＩ／Ｏオペレーションのエラー回復を実行する際に使用するエラー回復レベルを選択する、組み込まれた信号を受信する。
この実施の形態では、エラー回復レベルは、Ｉ／Ｏごとに選択される。
その後、任意の所与の時刻において、ストレージデバイス３０４−１〜３０４−Ｎは、異なるエラー回復レベルを有するＩ／Ｏオペレーションを同時に処理することができる。
【００３１】
図４は、Ｉ／Ｏオペレーションのエラー回復を調節するための方法のフローチャートである。
この方法は、Ｉ／Ｏ要求が、例えばアプリケーション３０８から受信された時に、ブロック４００において開始する。
ブロック４０２において、このプロセスは、Ｉ／Ｏオペレーションについてエラー回復レベルを決定して指定する。
一実施の形態では、このプロセスは、冗長データの可用性に基づいてエラー回復レベルを決定する。
例えば、Ｉ／Ｏ要求が、データが複数のロケーションに記憶されるアプリケーションに関係するものである場合、このプロセスは、低いエラー回復レベル、例えば、Ｉ／Ｏオペレーションが失敗に終わった時にエラーが返されて、再試行が実行されないエラー回復レベルを設定する。
データが冗長ロケーションに記憶されない場合、高い方のエラー回復レベルが選択され、例えば、Ｉ／Ｏオペレーションが複数回（場合によっては、Ｉ／Ｏオペレーションが成功するまで）再試行される状態が選択される。
他の実施の形態では、３つ以上のエラー回復レベルが使用され、それにより、関与したアプリケーション及びデータに基づいて、再試行しない場合と無制限に再試行する場合の両極端の間のエラー回復レベルが提供される。
【００３２】
この方法は、次に、選択されたエラー回復レベルに基づいてＩ／Ｏコマンドを生成する。
ブロック４０４において、このプロセスは、エラー回復レベルを示す信号をＩ／Ｏコマンドに組み込む。
例えば、このプロセスは、Ｉ／Ｏコマンドの１ビット又は２ビット以上のビットを設定して、Ｉ／Ｏオペレーションが失敗に終わった場合に使用するエラー回復レベルを示す。
一実施の形態では、Ｉ／Ｏコマンドは、読み出しコマンド、書き込みコマンド、検証、及び他のあらゆる適切な媒体アクセスコマンドのうちの１つを含む。
ブロック４０６において、このコマンドは発行される。
例えば、一実施の形態では、コマンドは、ＬＳＭ／ＬＶＭレイヤによってデバイスドライバへ発行され、そのデバイスドライバで実行されるエラー回復を制御する。
他の実施の形態では、コマンドは、デバイスドライバからストレージデバイスへ発行され、そのデバイスにおけるエラー回復を制御する。
【００３３】
＜Ａ．ストレージデバイスにおけるエラー回復＞
図５は、オペレーティングシステムから受信された、組み込まれた信号に基づいて、ストレージデバイスにおけるＩ／Ｏオペレーションのエラー回復を調節するための方法のフローチャートである。
この方法は、ブロック５００において開始し、Ｉ／Ｏオペレーションの要求、例えば、読み出しオペレーション、書き込みオペレーション、又は他のあらゆる適切な媒体アクセスコマンドを受信する。
ブロック５０２において、この方法は、失敗に終わったＩ／Ｏオペレーションのエラー回復オペレーションの状態を示す信号をコマンドから抽出する。
一実施の形態では、この状態信号は、Ｉ／Ｏコマンドの１ビット又は２ビット以上のビットとして組み込まれている。
ブロック５０４において、この方法は、要求されたＩ／Ｏオペレーションを試みる。
ブロック５０６において、この方法は、Ｉ／Ｏオペレーションが失敗に終わったかどうかを判断する。
この方法は、Ｉ／Ｏオペレーションが成功したと判断すると、ブロック５１０において終了し、成功指示子がオペレーティングシステムに返される。
一方、この方法は、Ｉ／Ｏオペレーションが失敗に終わったと判断すると、ブロック５０８に進み、ブロック５０２において抽出されたエラー回復オペレーションの状態信号に基づいて、取るべき次のステップを決定する。
この状態信号が、エラー回復が実行されないことを示している場合、この方法は、ブロック５１０に進み、ブロック５１０において完了すると共に、オペレーティングシステムにエラー表示を返す。
一方、この状態信号が、エラー回復が実行されることを示している場合、このプロセスは、ブロック５０４に戻り、Ｉ／Ｏオペレーションを再試行する。
この方法は、状態信号の条件（terms）に従ってこのプロセスを繰り返す。
例えば、一実施の形態では、状態信号は、Ｉ／Ｏオペレーションの完了を無制限に試行することを示す。
他の状態では、この方法は、Ｉ／Ｏオペレーションが失敗に終わったことを示すエラー信号を返す前に、限られた回数の再試行を試みる。
【００３４】
一実施の形態では、状態信号は、現在予約されているフィールド又は他の任意の適切なフィールドの１ビット又は２ビット以上を使用して、ｒｅａｄ（６）、ｒｅａｄ（１０）、ｒｅａｄ（１２）、ｒｅａｄ（１６）、ｗｒｉｔｅ（＊）、ｒｅａｄ  ｌｏｎｇ、ｖｅｒｉｆｙ（＊）、ｗｒｉｔｅ  ａｎｄ  ｖｅｒｉｆｙ、及び他のあらゆる媒体アクセスコマンド等のＳＣＳＩコマンドに組み込まれる。
例えば、ＳＣＳＩのｒｅａｄコマンドのバイト１のビット５〜７のいずれか１つ又は複数をこの目的に使用することができる。
一実施の形態では、Ｎビットが状態信号として使用される場合、最大２Ｎ個までのエラー回復レベルの状態が提供される。
【００３５】
さらに、一実施の形態では、選択された状態の特定のエラー回復技法のパラメータが、ＳＣＳＩエラー回復モードページにパターン化されたモードページを使用して指定される。
このＳＣＳＩエラー回復モードページは、「Information Technology - SCSI-3 Block Commands (SBC)」改定８版（１９９７年２月１３日）（以下「ｓｂｃ−ｒ０８」という）という表題のＸ３Ｔ１０  ＡＮＳＩ委員会のプロジェクト９９６Ｄの標準草案に記載されている。
ｓｂｃ−ｒ０８草案では、オペレーティングシステムがＳＣＳＩデバイスによって使用されるエラー回復技法を変更することを可能にするためのモードページが定義されている。
一実施の形態では、この種類の複数のモードページがストレージデバイスに提供され、各状態につき１つが提供される。
特定のＩ／Ｏコマンドの状態信号に基づいて、対応するモードページのエラー回復機能が実行される。
【００３６】
＜Ｂ．デバイスドライバにおけるエラー回復＞
図６は、失敗に終わったＩ／Ｏオペレーションについてデバイスドライバで使用されるエラー回復技法を調節するための方法のフローチャートである。
この方法は、Ｉ／Ｏオペレーションがアプリケーションによって要求された時、ブロック６００において開始する。
ブロック６０２において、この方法は、失敗に終わったＩ／Ｏオペレーションに使用されるエラー回復レベルを決定する。
一実施の形態では、Ｉ／Ｏ要求に関連したデータが複数のロケーションに記憶されているかどうかに基づいて、エラー回復オペレーションの状態が選択される。
一実施の形態では、この方法は、エラー回復技法の複数の状態の中から１つを選択し、例えば、Ｉ／Ｏオペレーションが失敗に終わった際にＩ／Ｏコマンドが何度も（場合によっては、無制限に）再試行される状態、Ｉ／Ｏオペレーションが失敗に終わった際に、エラーが返される別の状態、及び他のエラー回復レベルを有するあらゆる適切な状態の中から１つを選択する。
ブロック６０４において、この方法は、Ｉ／Ｏオペレーションを実行するためのコマンドを生成する。
このコマンドは、Ｉ／Ｏオペレーションが失敗に終わった場合に実行されるエラー回復オペレーションの選択された状態を示す、組み込まれた信号を含む。
この方法は、実行するために、このコマンドをデバイスドライバに渡す。
【００３７】
ブロック６０６において、デバイスドライバは、ストレージデバイスへ要求を回送することによってＩ／Ｏオペレーションを試みる。
一実施の形態では、デバイスドライバは、Ｉ／Ｏオペレーションが失敗に終わった場合に、ストレージデバイスにおいて実行されるエラー回復レベルを示す状態信号を渡す。
他の実施の形態では、デバイスドライバは、組み込まれた状態信号に基づいてエラー回復技法を実行する。
ブロック６０８において、この方法は、Ｉ／Ｏオペレーションが失敗に終わったかどうかを判断する。
Ｉ／Ｏオペレーションが成功した場合、この方法は、ブロック６１２において終了し、成功指示子が返される。
一方、この方法は、ブロック６０８において、Ｉ／Ｏオペレーションが失敗に終わったと判断すると、ブロック６１０に進み、状態信号に指定されたエラー回復レベルを実行する。
例えば、エラー回復が実行されないことを状態信号が示している場合、このプロセスは、ブロック６１２においてエラーメッセージを返して終了する。
一方、エラー回復が実行されることを状態信号が示している場合、このプロセスは、ブロック６０６に戻り、エラー回復レベルを設定している状態信号に従って、指定されたＩ／Ｏオペレーションを試みる。
【００３８】
本明細書で説明した方法及び技法は、デジタル電子回路機構において実施することもできるし、プログラマブルプロセッサ（例えば、専用プロセッサ又はコンピュータ等の汎用プロセッサ）のファームウェア又はソフトウェアを用いて実施することもできるし、ファームウェア及びソフトウェアを組み合わせて実施することもできる。
これらの技法を具現する装置は、適切な入力デバイス及び出力デバイス、プログラマブルプロセッサ、並びに、プログラマブルプロセッサによって実行するための、機械可読媒体上のプログラム命令を有形に具現するストレージ媒体を含んでもよい。
これらの技法を具現するプロセスは、プログラマブルプロセッサが、入力データに対して操作を行って適切な出力を生成することにより所望の機能を実行する命令から成るプログラムを実行することによって、実行することができる。
これらの技法は、プログラマブルシステムにおいて実行可能な１つ又は複数のプログラムに実施することができる。
このプログラマブルシステムは、データストレージシステムからデータ及び命令を受信し、且つ、データストレージシステムへデータ及び命令を送信するように接続された少なくとも１つのプログラマブルプロセッサと、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを含むものである。
一般に、プロセッサは、読み出し専用メモリ及び／又はランダムアクセスメモリから命令及びデータを受信する。
コンピュータプログラム命令及びデータを有形に具現するのに適した機械可読媒体又はストレージデバイスには、例として、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリデバイス等の半導体メモリデバイス、内部ハードディスクやリムーバブルディスク等の磁気ディスク、磁気光ディスク、及びＤＶＤディスクを含めて、あらゆる形式の不揮発性メモリが含まれる。
上記のいずれも、特別設計された特定用途向け集積回路（ＡＳＩＣ）によって補完することもできるし、当該ＡＳＩＣに組み込むこともできる。
【図面の簡単な説明】
【００３９】
【図１】失敗に終わった入出力オペレーションに使用されるエラー回復技法の調節を可能にするストレージデバイスを有する情報システムの一例示の実施の形態のブロック図である。
【図２Ａ】すべての入出力オペレーションについて、オペレーティングシステムとは独立して、選択されたエラー回復レベルを有するストレージデバイスの入出力オペレーションを実行するための方法の例示の実施の形態のフローチャートである。
【図２Ｂ】すべての入出力オペレーションについて、オペレーティングシステムとは独立して、選択されたエラー回復レベルを有するストレージデバイスの入出力オペレーションを実行するための方法の例示の実施の形態のフローチャートである。
【図３】失敗に終わった入出力（Ｉ／Ｏ）オペレーションのシステムのエラー回復メカニズムの調節をＩ／Ｏごとに可能にするシステムの一例示の実施の形態のブロック図である。
【図４】Ｉ／Ｏオペレーションについてエラー回復をストレージデバイスでどのように調節するかをシステムがストレージデバイスに指定するための例示の方法のフローチャートである。
【図５】オペレーティングシステムから受信された、組み込まれた信号に基づいて、ストレージデバイスにおけるＩ／Ｏオペレーションのエラー回復を調節するための例示の方法のフローチャートである。
【図６】失敗に終わったＩ／Ｏオペレーションについてデバイスドライバで使用されるエラー回復技法を調節するための例示の方法のフローチャートである。
【符号の説明】
【００４０】
１０２・・・ストレージデバイス，
１０４・・・ホストシステム，
１０６・・・管理ツール，
１０８・・・制御回路，
１１０・・・ストレージ媒体，
１１２・・・エラー回復機能，
３０２・・・ホストシステム，
３０４−１，３０４−Ｎ・・・ストレージデバイス，
３０６・・・オペレーティングシステム，
３０８・・・アプリケーション，
３１２−１、３１２−Ｎ・・・デバイスドライバ，
【図１】
2006114039.tif 000003
【図２Ａ】
2006114039.tif 000004
【図２Ｂ】
2006114039.tif 000005
【図３】
2006114039.tif 000006
【図４】
2006114039.tif 000007
【図５】
2006114039.tif 000008
【図６】
2006114039.tif 000009