(57)【要約】【課題】コマンド応答のオーバヘッドによる読出性能の低下を抑制する。【解決手段】記憶部１ａは、第１記憶領域４ａのデータ書込の有無を管理するための管理情報１ｃを記憶する。制御部１ｂは、管理情報１ｃから特定される第１記憶領域４ａの終端アドレス４ｂの次のアドレス４ｆを含んで連続する記憶領域である第２記憶領域４ｃに、書込対象データおよび書込対象データに対応するチェックコードを書き込む場合、第１記憶領域４ａの終端アドレス４ｂを第２記憶領域４ｃの終端アドレス４ｄとして、第１記憶領域４ｅが第２記憶領域４ｃを含む範囲となるように管理情報１ｃを更新する。また、制御部１ｂは、管理情報１ｃから特定される第１記憶領域４ｅ内から読出対象データを読み出す場合、読出対象データとともに読出対象データに対応するチェックコードを読み出す。【選択図】図１
2016149051.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置における所定の記憶領域に対するアクセスを制御するストレージ制御装置であって、
論理ボリュームにおける先頭アドレスから連続する第１記憶領域のデータ書込の有無を管理するための管理情報を記憶する記憶部と、
前記管理情報から特定される前記第１記憶領域の終端アドレスの次のアドレスを含んで連続する第２記憶領域に、書込対象データおよび前記書込対象データに対応するチェックコードを所定の領域単位で書き込む場合、前記第１記憶領域の終端アドレスを前記第２記憶領域の終端アドレスとして、前記第１記憶領域が前記第２記憶領域を含む範囲となるように前記管理情報を更新し、
前記管理情報から特定される前記第１記憶領域内から読出対象データを読み出す場合、前記読出対象データとともに前記読出対象データに対応するチェックコードを読み出し、
前記管理情報から特定される前記第１記憶領域外から読出対象データを読み出す場合、前記所定の領域単位でデータ書込の有無を判定し、データ書込有りの記憶領域から前記読出対象データとともに前記読出対象データに対応するチェックコードを読み出し、データ書込無しの記憶領域に対応するチェックコードに所定値を設定する、
制御部と、
を備えるストレージ制御装置。
【請求項２】
前記管理情報は、前記第１記憶領域の終端アドレスを含み、
前記制御部は、前記論理ボリュームの生成時、または前記論理ボリュームのフォーマット時に前記第１記憶領域の終端アドレスを、前記論理ボリュームの先頭アドレスで初期化する、
請求項１記載のストレージ制御装置。
【請求項３】
前記管理情報は、前記論理ボリュームの先頭アドレスのデータ書込の有無を示すデータ書込情報を含み、
前記制御部は、前記データ書込情報が前記先頭アドレスのデータ書込無しを示している状態で前記先頭アドレスを含む連続した記憶領域へのデータ書込があった場合、前記データ書込情報を前記先頭アドレスのデータ書込有りに更新し、前記先頭アドレスを含む連続した記憶領域の終端アドレスを、前記第１記憶領域の終端アドレスとする、
請求項２記載のストレージ制御装置。
【請求項４】
前記制御部は、前記記憶装置から読み出してキャッシュメモリに展開したチェックコードに前記所定値を設定する、
請求項１記載のストレージ制御装置。
【請求項５】
記憶装置における所定の記憶領域に対するアクセスを制御するストレージ制御プログラムであって、
コンピュータに、
論理ボリュームにおける先頭アドレスから連続する第１記憶領域のデータ書込の有無を管理するための管理情報を記憶部から取得し、
前記管理情報から特定される前記第１記憶領域の終端アドレスの次のアドレスを含んで連続する第２記憶領域に、書込対象データおよび前記書込対象データに対応するチェックコードを所定の領域単位で書き込む場合、前記第１記憶領域の終端アドレスを前記第２記憶領域の終端アドレスとして、前記第１記憶領域が前記第２記憶領域を含む範囲となるように前記管理情報を更新し、
前記管理情報から特定される前記第１記憶領域内から読出対象データを読み出す場合、前記読出対象データとともに前記読出対象データに対応するチェックコードを読み出し、
前記管理情報から特定される前記第１記憶領域外から読出対象データを読み出す場合、前記所定の領域単位でデータ書込の有無を判定し、データ書込有りの記憶領域から前記読出対象データとともに前記読出対象データに対応するチェックコードを読み出し、データ書込無しの記憶領域に対応するチェックコードに所定値を設定する、
処理を実行させるストレージ制御プログラム。
【請求項６】
記憶装置における所定の記憶領域に対するアクセスを制御するストレージ制御方法であって、
コンピュータが、
論理ボリュームにおける先頭アドレスから連続する第１記憶領域のデータ書込の有無を管理するための管理情報を記憶部から取得し、
前記管理情報から特定される前記第１記憶領域の終端アドレスの次のアドレスを含んで連続する第２記憶領域に、書込対象データおよび前記書込対象データに対応するチェックコードを所定の領域単位で書き込む場合、前記第１記憶領域の終端アドレスを前記第２記憶領域の終端アドレスとして、前記第１記憶領域が前記第２記憶領域を含む範囲となるように前記管理情報を更新し、
前記管理情報から特定される前記第１記憶領域内から読出対象データを読み出す場合、前記読出対象データとともに前記読出対象データに対応するチェックコードを読み出し、
前記管理情報から特定される前記第１記憶領域外から読出対象データを読み出す場合、前記所定の領域単位でデータ書込の有無を判定し、データ書込有りの記憶領域から前記読出対象データとともに前記読出対象データに対応するチェックコードを読み出し、データ書込無しの記憶領域に対応するチェックコードに所定値を設定する、
処理を実行するストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法に関する。
【背景技術】
【０００２】
ストレージ装置に対するデータ保障要求は年々高まっており、データ保障に関して様々な機能が提供されている。その１つにＴ１０−ＤＩＦ（Data Integrity Field）機能がある。Ｔ１０−ＤＩＦ機能は、予見なく起こりそのデータを復旧することが大変難しいサイレントデータ破壊（Silent Data Corruption）を防ぐための機能として、ＡＮＳＩ（米国規格協会）により規格化されている。
【０００３】
Ｔ１０−ＤＩＦ機能の導入前は、ストレージ装置、サーバ、および伝送路の各々がチェックコードを保持してデータ保護をおこなうことでデータ保証をおこなうため、チェックコードの付け替えが必要であった。これに対して、ストレージ装置とサーバは、双方がＴ１０−ＤＩＦ機能をサポートすることにより、共通のチェックコードを保持してデータ保護範囲を拡張できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−３４４２２３号公報
【特許文献２】特開２０１０−０７９６８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、Ｔ１０−ＤＩＦ機能をサポートするストレージ装置は、未書込領域に対するチェックコードとして、すべてのビットを「１」に設定してサーバに応答することが求められる。
【０００６】
これに対応するため、ストレージ装置は、ＲＥＡＤコマンドをサーバから受信すると、書込済領域に対するＲＥＡＤコマンドであるか、未書込領域に対するに対するＲＥＡＤコマンドであるかを記憶領域ごとに判定する。このような記憶領域ごとの判定動作は、ＲＥＡＤコマンド応答のオーバヘッドとなり読出性能が低下するという問題がある。
【０００７】
１つの側面では、本発明は、コマンド応答のオーバヘッドによる読出性能の低下を抑制できるストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、以下に示すような、記憶装置における所定の記憶領域に対するアクセスを制御するストレージ制御装置が提供される。ストレージ制御装置は、記憶部と、制御部とを備える。記憶部は、論理ボリュームにおける先頭アドレスから連続する第１記憶領域のデータ書込の有無を管理するための管理情報を記憶する。制御部は、管理情報から特定される第１記憶領域の終端アドレスの次のアドレスを含んで連続する第２記憶領域に、書込対象データおよび書込対象データに対応するチェックコードを所定の領域単位で書き込む場合、第１記憶領域の終端アドレスを第２記憶領域の終端アドレスとして、第１記憶領域が第２記憶領域を含む範囲となるように管理情報を更新し、管理情報から特定される第１記憶領域内から読出対象データを読み出す場合、読出対象データとともに読出対象データに対応するチェックコードを読み出し、管理情報から特定される第１記憶領域外から読出対象データを読み出す場合、所定の領域単位でデータ書込の有無を判定し、データ書込有りの記憶領域から読出対象データとともに読出対象データに対応するチェックコードを読み出し、データ書込無しの記憶領域に対応するチェックコードに所定値を設定する。
【発明の効果】
【０００９】
１態様によれば、ストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法において、コマンド応答のオーバヘッドによる読出性能の低下を抑制できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態のストレージ制御装置の構成の一例を示す図である。
【図２】第２の実施形態のストレージシステムの構成の一例を示す図である。
【図３】第２の実施形態のＴ１０−ＤＩＦ機能に対応するデータ構造の一例を示す図である。
【図４】第２の実施形態のストレージ装置の構成の一例を示す図である。
【図５】第２の実施形態のＣＭの処理機能の構成の一例を示すブロック図である。
【図６】第２の実施形態のＬＵ書込管理テーブルのデータ構造の一例を示す図である。
【図７】第２の実施形態の管理領域更新書込と管理領域非更新書込の一例を示す図である。
【図８】第２の実施形態の管理領域内読出と管理領域外読出の一例を示す図である。
【図９】第２の実施形態のＬＵ書込管理テーブル初期化処理のフローチャートを示す図である。
【図１０】第２の実施形態のＷＲＩＴＥコマンド受信処理のフローチャートを示す図である。
【図１１】第２の実施形態のＲＥＡＤコマンド受信処理のフローチャートを示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して実施の形態を詳細に説明する。
［第１の実施形態］
まず、第１の実施形態のストレージ制御装置について図１を用いて説明する。図１は、第１の実施形態のストレージ制御装置の構成の一例を示す図である。
【００１２】
ストレージ制御装置１は、記憶装置３における所定の記憶領域に対するアクセスを制御する。たとえば、ストレージ制御装置１は、ホストやサーバなどの外部装置２からアクセス要求を受け付けて、記憶装置３へのアクセスを制御する。アクセス要求は、たとえば、ＲＥＡＤコマンド（読出要求）やＷＲＩＴＥコマンド（書込要求）がある。
【００１３】
記憶装置３は、物理記憶領域を有し、１または２以上のＳＳＤ（Solid State Drive）やＨＤＤ（Hard Disk Drive）を含む。また、記憶装置３は、ＳＳＤやＨＤＤを収容するＤＥ（Drive Enclosure）であってもよい。記憶装置３は、論理ボリューム３ａに物理記憶領域を割り当てる。
【００１４】
ストレージ制御装置１は、記憶部１ａと、制御部１ｂとを備える。記憶部１ａは、管理情報１ｃを記憶する。記憶部１ａは、たとえば、ＲＡＭ（Random Access Memory）などがある。管理情報１ｃは、第１記憶領域のデータ書込の有無を管理するための情報である。第１記憶領域は、論理ボリューム３ａにおける先頭アドレスから連続してデータ書込のある記憶領域である。終端アドレスは、第１記憶領域の終端を示すアドレスである。たとえば、第１記憶領域（更新前）４ａは、先頭アドレスＬＢＡ（Logical Block Addressing）＃０から終端アドレス４ｂまで連続する記憶領域である。
【００１５】
制御部１ｂは、書込対象データおよび書込対象データに対応するチェックコードを所定の領域（単位領域３ｂ）単位で第２記憶領域に書き込む場合、第１記憶領域が第２記憶領域を含む範囲となるように管理情報１ｃを更新する。このとき制御部１ｂは、第１記憶領域の終端アドレスを第２記憶領域の終端アドレスとして更新することで、第１記憶領域が第２記憶領域を含む範囲とすることができる。
【００１６】
書込対象データおよび書込対象データに対応するチェックコードを第２記憶領域に書き込む場合とは、たとえば、ストレージ制御装置１が外部装置２から第２記憶領域へのＷＲＩＴＥコマンドを受け付けた場合がある。制御部１ｂは、ＷＲＩＴＥコマンドに対応する書込対象データおよび書込対象データに対応するチェックコードを第２記憶領域に書き込む。論理ボリューム３ａは、１または複数の単位領域３ｂを含む。単位領域３ｂは、データブロックとチェックコードを含む。データブロックは、データ（たとえばユーザデータ）を格納する領域である。チェックコードは、データブロックが格納するデータの誤り検出に用いられるコードである。
【００１７】
第２記憶領域は、管理情報１ｃから特定される第１記憶領域の終端アドレスの次のアドレスを含んで連続する記憶領域である。たとえば、第２記憶領域４ｃは、先頭アドレスが第１記憶領域（更新前）４ａの範囲内にあり、終端アドレス４ｄが第１記憶領域（更新前）４ａの範囲外にあり、第１記憶領域（更新前）４ａの終端アドレス４ｂの次のアドレス４ｆを含んで連続する記憶領域である。たとえば制御部１ｂは、第１記憶領域（更新前）４ａの終端アドレス４ｂを終端アドレス４ｄとして、第１記憶領域（更新後）４ｅが第２記憶領域４ｃを含むような管理情報１ｃの更新をおこなう。
【００１８】
また、制御部１ｂは、管理情報１ｃから特定される第１記憶領域内から読出対象データを読み出す場合、読出対象データとともに読出対象データに対応するチェックコードを読み出す。制御部１ｂは、第１記憶領域内にあるチェックコードが、前述したチェックコードの書込により第１記憶領域内にあるデータに対応していることから、チェックコードをそのまま読み出すことができる。
【００１９】
一方、制御部１ｂは、管理情報１ｃから特定される第１記憶領域外から読出対象データを読み出す場合、所定の領域（単位領域３ｂ）単位でデータ書込の有無を判定する。たとえば、制御部１ｂは、メタデータを参照することにより、データ書込の有無を判定できる。
【００２０】
制御部１ｂは、データ書込有りの記憶領域（データ書込有りと判定した単位領域３ｂ）から読出対象データとともに読出対象データに対応するチェックコードを読み出す。制御部１ｂは、第１記憶領域外にあるチェックコードが、データ書込時のデータに対応していることから、チェックコードをそのまま読み出すことができる。
【００２１】
また、制御部１ｂは、データ書込無しの記憶領域（データ書込無しと判定した単位領域３ｂ）に対応するチェックコードに所定値を設定する。制御部１ｂは、第１記憶領域外にあるチェックコードが、未書込領域にあるデータに対応することを保証できないことからチェックコードに所定値を設定する。チェックコードに設定する所定値は、あらかじめ設定された値であり、たとえばすべてのビットが「１」となる値（＝「ＡＬＬ Ｆ」）である。なお、チェックコードに設定する所定値は、データ書込無しの記憶領域に対応するチェックコードであることを外部装置２が検出可能な値である。
【００２２】
これにより、外部装置２と記憶装置３が共通のチェックコードを保持する場合に、ストレージ制御装置１は、第１記憶領域内について所定の領域単位でデータ書込の有無を判定することを要しない。したがって、ストレージ制御装置１は、コマンド応答のオーバヘッドによる読出性能の低下を抑制できる。
【００２３】
［第２の実施形態］
次に、第２の実施形態のストレージシステムについて図２を用いて説明する。図２は、第２の実施形態のストレージシステムの構成の一例を示す図である。
【００２４】
ストレージシステム５は、サーバ６と、ネットワーク（伝送路）７と、ストレージ装置１０とを含む。ネットワーク７は、たとえば１または複数のストレージ装置１０と、１または複数のサーバ６を接続する。ストレージ装置１０は、ネットワーク７を介してサーバ６と通信可能に接続する。サーバ６は、ストレージ装置１０にデータを書き込み、またストレージ装置１０からデータを読み出すことができる。サーバ６は、第１の実施形態の外部装置２の一形態である。
【００２５】
ストレージ装置１０とサーバ６は、Ｔ１０−ＤＩＦ機能をサポートする。ストレージ装置１０は、Ｔ１０−ＤＩＦ機能対応の有無をボリューム属性に設定することができる。ストレージ装置１０とサーバ６は、ボリューム属性を参照することで、Ｔ１０−ＤＩＦ機能に対応する動作と対応しない動作とをボリューム単位で切り替えることができる。
【００２６】
ここで、Ｔ１０−ＤＩＦ機能に対応するデータ構造について図３を用いて説明する。図３は、第２の実施形態のＴ１０−ＤＩＦ機能に対応するデータ構造の一例を示す図である。
【００２７】
Ｔ１０−ＤＩＦ機能は、ＰＩ（Protection Information）と呼ばれるチェックコードを付加することによる、ユーザデータの保護をおこなうための規格であり、Ｔ１０−ＰＩと呼ばれる場合がある。
【００２８】
Ｔ１０−ＤＩＦ機能に対応するデータ構造は、ＬＢＡ単位のデータ構造であり、データブロックとチェックコードを含む。データブロックは、ユーザデータを格納可能な領域であり、たとえば５１２ｂｙｔｅのサイズである。チェックコードは、たとえば、２ｂｙｔｅのＬＢＧ（Logical Block Guard）と、２ｂｙｔｅのＬＢＡＴ（Logical Block Application Tag）と、４ｂｙｔｅのＬＢＲＴ（Logical Block Reference Tag）を含む。ＬＢＧは、データブロックの誤り検出符号であり、たとえばＣＲＣ（Cyclic Redundancy Check）である。ＬＢＡＴは、アプリケーションが定義するデータであり、データブロックにアプリケーションの指定があることを示す。ＬＢＲＴは、参照先を示すデータであり、たとえば、データの書込先ミスの検出のためにＬＢＡの一部を含む。
【００２９】
ストレージ装置１０は、Ｔ１０−ＤＩＦ機能に対応するため、サーバ６と共通のチェックコードをＬＢＡ単位で付す。ストレージ装置１０は、データを書込済の書込済領域に対してデータと同時に書き込まれたチェックコードをサーバ６に応答し、データが書き込まれていない未書込領域に対して「ＡＬＬ Ｆ」を設定したチェックコードをサーバ６に応答する。このとき、ストレージ装置１０は、ＬＢＡ単位で書込済領域であるか、あるいは未書込領域であるか判定することを要する。
【００３０】
次に、第２の実施形態のストレージ装置について図４を用いて説明する。図４は、第２の実施形態のストレージ装置の構成の一例を示す図である。
ストレージ装置１０は、チャネルアダプタ１１，１２と、リモートアダプタ１３，１４と、コントローラモジュール（以下、ＣＭ（Controller Module））２０，３０と、ディスクエンクロージャ（以下、ＤＥ）５０を含む。
【００３１】
ストレージ装置１０は、チャネルアダプタ１１，１２を介してサーバ６と接続する。チャネルアダプタ１１は、ＣＭ２０に対応して備えられ、チャネルアダプタ１２は、ＣＭ３０に対応して備えられる。ストレージ装置１０は、リモートアダプタ１３，１４を介して他のストレージ装置と接続できる。リモートアダプタ１３は、ＣＭ２０に対応して備えられ、リモートアダプタ１４は、ＣＭ３０に対応して備えられる。
【００３２】
ＤＥ５０は、ＨＤＤ５１，５２，５３，５４を含む。なお、ＤＥ５０は、ＳＳＤなどその他のストレージデバイスを含むものであってもよい。
ＣＭ２０とＣＭ３０は、相互に接続して負荷を分担することができる。なお、ストレージ装置１０は、２つのＣＭ２０，３０を含むが、これに限らず、ＣＭ２０とＣＭ３０のいずれか一方を含むものであってもよいし、３つ以上のＣＭを含むものであってもよく、たとえば、４つあるいは８つのＣＭを含むものであってもよい。
【００３３】
ＣＭ２０は、プロセッサ２１と、メモリ２２と、ディスクアダプタ２３，２４を含む。ＣＭ３０は、プロセッサ３１と、メモリ３２と、ディスクアダプタ３３，３４を含む。なお、ＣＭ３０はＣＭ２０と同様の構成を有するため、以下、ＣＭ２０の説明をもってＣＭ３０の説明に代える。
【００３４】
プロセッサ２１、メモリ２２、およびディスクアダプタ２３，２４は、図示しないバスを介して接続されている。プロセッサ２１は、ＣＭ２０全体を制御し、階層制御を含むストレージ制御をおこなう。なお、プロセッサ２１は、マルチプロセッサであってもよい。プロセッサ２１は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ２１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００３５】
メモリ２２は、ＨＤＤ５１，５２，５３，５４からデータを読み出したときにデータを保持するほか、ＨＤＤ５１，５２，５３，５４にデータを書き込むときのバッファとなる。また、メモリ２２は、ユーザデータや制御情報を格納する。
【００３６】
たとえば、メモリ２２は、ＲＡＭや不揮発性メモリを含む。ＲＡＭは、ＣＭ２０の主記憶装置として使用される。ＲＡＭには、プロセッサ２１に実行させるオペレーティングシステム（Operating System）のプログラムやファームウェア、アプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭには、プロセッサ２１による処理に必要な各種データが格納される。また、ＲＡＭは、各種データの格納に用いるメモリと別体にキャッシュメモリを含む。
【００３７】
不揮発性メモリは、ストレージ装置１０の電源遮断時においても記憶内容を保持する。不揮発性メモリは、たとえば、ＥＥＰＲＯＭ（Electrically Erasable and Programmable ROM）やフラッシュメモリなどの半導体記憶装置や、ＨＤＤなどである。また、不揮発性メモリは、ＣＭ２０の補助記憶装置として使用される。不揮発性メモリには、オペレーティングシステムのプログラムやファームウェア、アプリケーションプログラム、および各種データが格納される。
【００３８】
バスに接続される周辺機器としては、入出力インタフェース、および通信インタフェースがある。入出力インタフェースは、入出力装置と接続して入出力をおこなう。入出力インタフェースは、ＨＤＤなどの記憶装置から送られてくる信号やデータをプロセッサ２１やメモリ２２に送信する。また、入出力インタフェースは、たとえば、プロセッサ２１から受信した信号を、他の制御部や、ＣＭ２０と接続する出力装置に出力する。通信インタフェースは、ストレージ装置１０内の他のＣＭ（ＣＭ３０）との間でデータの送受信をおこなう。
【００３９】
ディスクアダプタ２３，２４は、ＨＤＤ５１，５２，５３，５４とのインタフェース制御（アクセス制御）をおこなう。
以上のようなハードウェア構成によって、ストレージ装置１０、あるいはＣＭ２０，３０の処理機能を実現することができる。なお、第１の実施形態に示したストレージ制御装置１も、ストレージ装置１０、あるいはＣＭ２０，３０と同様のハードウェアにより実現することができる。
【００４０】
次に、ＣＭの処理機能の構成について図５を用いて説明する。図５は、第２の実施形態のＣＭの処理機能の構成の一例を示すブロック図である。
ＣＭ２０は、記憶部１００、管理情報生成部１１０と、書込制御部１２０と、読出制御部１３０を備える。ＣＭ２０は、ストレージ制御装置の一形態である。管理情報生成部１１０と、書込制御部１２０と、読出制御部１３０は、たとえば、ＣＭ２０のプロセッサ２１が所定のプログラムを実行することで実現される。また、記憶部１００は、ＬＵ（Logical Unit）書込管理テーブル２００を記憶する。記憶部１００は、たとえば、ＣＭ２０のメモリ２２の所定の記憶領域によって実現される。
【００４１】
ここで、ＬＵ書込管理テーブル２００のデータ構造について図６を用いて説明する。図６は、第２の実施形態のＬＵ書込管理テーブルのデータ構造の一例を示す図である。
ＬＵ書込管理テーブル２００は、ＬＵ（ボリューム）ごとの管理領域のデータ書込の有無を管理するための情報である。管理領域は、ＬＵごとの先頭ＬＢＡから連続する書込済領域であり、第１の実施形態の第１記憶領域の一形態である。
【００４２】
ＬＵ書込管理テーブル２００は、ＬＵ[０]（ＬＵＮ（Logical Unit Number）＝「０」で特定されるＬＵ）からＬＵ[Ｎ]までのＬＢＡ＃０書込状態と終端ＬＢＡを含む。図６は、ＬＢＡ＃０書込状態と終端ＬＢＡについて図示し、ＬＵ[１]からＬＵ[Ｎ]までの各ＬＵのＬＢＡ＃０書込状態と終端ＬＢＡについて図示を省略する。
【００４３】
ＬＢＡ＃０書込状態は、対象ＬＵについてＬＢＡ＃０にデータが書き込まれているか否かを示す。たとえば、ＬＵ[０]についてＬＢＡ＃０書込状態＝「０」は、ＬＢＡ＃０が未だデータが書き込まれていない未書込領域であることを示す。一方、ＬＵ[０]についてＬＢＡ＃０書込状態＝「１」は、ＬＢＡ＃０が既にデータが書き込まれている書込済領域であることを示す。なお、ＬＢＡ＃０は、ユーザ領域の先頭ＬＢＡの一例である。
【００４４】
終端ＬＢＡは、対象ＬＵについてＬＢＡ＃０から連続する書込済領域の終端アドレスを示す。たとえば、終端ＬＢＡ＝「ＬＢＡ＃１００」は、対象ＬＵについてＬＢＡ＃０からＬＢＡ＃１００まで書込済領域が連続することを示し、ＬＢＡ＃１０１が未書込領域であることを示す。
【００４５】
再び、図５を用いたＣＭの処理機能の構成の説明に戻る。管理情報生成部１１０は、ＬＵの生成時に、生成したＬＵに対応するＬＢＡ＃０書込状態と終端ＬＢＡを登録する。また、管理情報生成部１１０は、ＬＵのフォーマット時に、フォーマットしたＬＵに対応するＬＢＡ＃０書込状態と終端ＬＢＡを初期化する。
【００４６】
書込制御部１２０は、サーバ６から受け付けたＷＲＩＴＥコマンドに対応する書込制御をおこなう。書込制御部１２０は、管理領域更新書込部１２１と管理領域非更新書込部１２２を含む。
【００４７】
管理領域更新書込部１２１は、管理領域の更新を伴うデータの書込である管理領域更新書込をおこなう。管理領域非更新書込部１２２は、管理領域の更新を伴わないデータの書込である管理領域非更新書込をおこなう。管理領域更新書込は、管理領域の終端ＬＢＡが書込領域の範囲内に含まれる書込である。管理領域非更新書込は、管理領域の終端ＬＢＡが書込領域の範囲内に含まれない書込である。
【００４８】
読出制御部１３０は、サーバ６から受け付けたＲＥＡＤコマンドに対応する読出制御をおこなう。読出制御部１３０は、管理領域内読出部１３１と管理領域外読出部１３２を含む。管理領域内読出部１３１は、管理領域の範囲内からのデータの読出である管理領域内読出をおこなう。管理領域外読出部１３２は、管理領域の範囲外からのデータの読出である管理領域外読出をおこなう。
【００４９】
管理領域内読出は、管理領域の範囲内が書込済領域であることから、ＬＢＡ単位で書込済領域であるか、あるいは未書込領域であるか判定することを要しない。一方、管理領域外読出は、ストレージ装置１０は、ＬＢＡ単位で書込済領域であるか、未書込領域であるか判定することを要する。
【００５０】
ここで、管理領域更新書込と管理領域非更新書込について図７を用いて説明する。図７は、第２の実施形態の管理領域更新書込と管理領域非更新書込の一例を示す図である。
図７は、先頭ＬＢＡがＬＢＡ＃０であり、終端ＬＢＡがＬＢＡ＃Ａ３である管理領域が設定されていることを示す。ここで、ＬＢＡ＃Ａ１からＬＢＡ＃Ａ２までの連続する記憶領域についての書込は、管理領域の終端ＬＢＡ（ＬＢＡ＃Ａ３）が書込領域の範囲内に含まれないことから管理領域非更新書込である。なお、図示を省略するがＬＢＡ＃Ａ３を超えた先（たとえば、ＬＢＡ＃Ａ４）からの連続する記憶領域についての書込も、管理領域の終端ＬＢＡ（ＬＢＡ＃Ａ３）が書込領域の範囲内に含まれないことから管理領域非更新書込である。
【００５１】
一方、ＬＢＡ＃Ａ２からＬＢＡ＃Ａ４までの連続する記憶領域についての書込は、管理領域の終端ＬＢＡ（ＬＢＡ＃Ａ３）が書込領域の範囲内に含まれることから管理領域更新書込である。管理領域更新書込部１２１は、管理領域更新書込により、終端ＬＢＡをＬＢＡ＃Ａ３からＬＢＡ＃Ａ４に更新して、管理領域の範囲を拡張更新する。
【００５２】
次に、管理領域内読出と管理領域外読出について図８を用いて説明する。図８は、第２の実施形態の管理領域内読出と管理領域外読出の一例を示す図である。
図８は、先頭ＬＢＡがＬＢＡ＃０であり、終端ＬＢＡがＬＢＡ＃Ｂ３である管理領域が設定されていることを示す。ここで、ＬＢＡ＃Ｂ１からＬＢＡ＃Ｂ２までの連続する記憶領域についての読出は、管理領域の範囲内にあることから管理領域内読出である。一方、ＬＢＡ＃Ｂ４からＬＢＡ＃Ｂ５までの連続する記憶領域についての読出は、管理領域の範囲外にあることから管理領域外読出である。
【００５３】
また、読出対象の記憶領域内に終端ＬＢＡを含む場合、読出対象の記憶領域は、終端ＬＢＡを境界にして読出対象の記憶領域を管理領域内読出と管理領域外読出とに分割できる。たとえば、ＬＢＡ＃Ｂ２からＬＢＡ＃Ｂ４までの連続する記憶領域は、終端ＬＢＡ（ＬＢＡ＃Ｂ３）を含むので、ＬＢＡ＃Ｂ２からＬＢＡ＃Ｂ３までを管理領域内読出とし、ＬＢＡ＃Ｂ３からＬＢＡ＃Ｂ４までを管理領域外読出とすることができる。
【００５４】
次に、第２の実施形態のＬＵ書込管理テーブル初期化処理について図９を用いて説明する。図９は、第２の実施形態のＬＵ書込管理テーブル初期化処理のフローチャートを示す図である。
【００５５】
ＬＵ書込管理テーブル初期化処理は、ＬＵ書込管理テーブル２００をボリューム（論理ボリューム：ＬＵ）単位で初期化する処理である。ＬＵ書込管理テーブル初期化処理は、ボリュームに関する操作（ボリューム操作）をサーバ６から受け付けたことを契機に、管理情報生成部１１０が実行する処理である。
【００５６】
［ステップＳ１１］管理情報生成部１１０は、ボリュームに関する操作がボリュームの作成であるか否かを判定する。管理情報生成部１１０は、ボリュームに関する操作がボリュームの作成である場合にステップＳ１２にすすみ、ボリュームに関する操作がボリュームの作成でない場合にステップＳ１３にすすむ。
【００５７】
［ステップＳ１２］管理情報生成部１１０は、ＬＵ書込管理テーブル２００に作成したボリュームのエントリを生成する。
［ステップＳ１３］管理情報生成部１１０は、ボリュームに関する操作がボリュームのフォーマットであるか否かを判定する。管理情報生成部１１０は、ボリュームに関する操作がボリュームのフォーマットである場合にステップＳ１４にすすみ、ボリュームに関する操作がボリュームのフォーマットでない場合にＬＵ書込管理テーブル初期化処理を終了する。
【００５８】
［ステップＳ１４］管理情報生成部１１０は、操作対象のボリュームのＬＢＡ＃０書込状態を初期化する。たとえば、管理情報生成部１１０は、ＬＢＡ＃０が未書込領域であることを示す「０」を、操作対象のボリュームのＬＢＡ＃０書込状態に設定する。
【００５９】
［ステップＳ１５］管理情報生成部１１０は、操作対象のボリュームの終端ＬＢＡを初期化する。たとえば、管理情報生成部１１０は、終端ＬＢＡが未設定であることを示す「０」を、操作対象のボリュームの終端ＬＢＡに設定する。なお、ＬＢＡ＃０書込状態が初期化されている状態で、終端ＬＢＡはドントケアであってもよい。
【００６０】
［ステップＳ１６］管理情報生成部１１０は、サーバ６に対して、受け付けたボリューム操作に対する完了応答をおこなう。
次に、第２の実施形態のＷＲＩＴＥコマンド受信処理について図１０を用いて説明する。図１０は、第２の実施形態のＷＲＩＴＥコマンド受信処理のフローチャートを示す図である。
【００６１】
ＷＲＩＴＥコマンド受信処理は、サーバ６からＷＲＩＴＥコマンドを受信したことを契機に書込制御部１２０が実行する処理である。ＷＲＩＴＥコマンド受信処理は、受信したＷＲＩＴＥコマンドに対応する応答をサーバ６におこなうとともに、書込対象領域に応じたＬＵ書込管理テーブル２００の更新をおこなう処理である。
【００６２】
［ステップＳ２１］書込制御部１２０は、ＬＵ書込管理テーブル２００を参照し、書込対象ボリュームのＬＢＡ＃０書込状態を判定する。書込制御部１２０は、書込対象ボリュームのＬＢＡ＃０書込状態がＯＮ（＝「１」）であればステップＳ２５にすすみ、書込対象ボリュームのＬＢＡ＃０書込状態がＯＦＦ（＝「０」）であればステップＳ２２にすすむ。
【００６３】
［ステップＳ２２］書込制御部１２０は、書込開始ＬＢＡ（書込対象領域の先頭アドレス）がＬＢＡ＃０（書込対象ボリュームの先頭アドレス）であるか否かを判定する。書込制御部１２０は、書込開始ＬＢＡがＬＢＡ＃０である場合にステップＳ２３にすすみ、書込開始ＬＢＡがＬＢＡ＃０でない場合にステップＳ２８にすすむ。
【００６４】
［ステップＳ２３］書込制御部１２０は、書込対象ボリュームのＬＢＡ＃０を含む記憶領域を書込対象とすることから、書込対象ボリュームのＬＢＡ＃０書込状態にＯＮを設定する。書込制御部１２０は、設定変更にしたがいＬＵ書込管理テーブル２００を更新する。
【００６５】
［ステップＳ２４］書込制御部１２０は、書込対象ボリュームの終端ＬＢＡを、書込対象となる記憶領域の終端アドレスで更新する。書込制御部１２０は、終端ＬＢＡの更新にしたがいＬＵ書込管理テーブル２００を更新する。
【００６６】
［ステップＳ２５］書込制御部１２０は、書込開始ＬＢＡ（書込対象となる記憶領域の先頭アドレス）が終端ＬＢＡより小さいか否かを判定する。すなわち、書込制御部１２０は、書込開始ＬＢＡが管理領域（図７参照）内にあるか否かを判定する。書込制御部１２０は、書込開始ＬＢＡが終端ＬＢＡより小さい場合にステップＳ２６にすすみ、書込開始ＬＢＡが終端ＬＢＡより小さくない場合にステップＳ２８にすすむ。
【００６７】
［ステップＳ２６］書込制御部１２０は、書込終了ＬＢＡ（書込対象となる記憶領域の終端アドレス）が終端ＬＢＡより大きいか否かを判定する。すなわち、書込制御部１２０は、書込終了ＬＢＡが管理領域外にあるか否かを判定する。書込制御部１２０は、書込終了ＬＢＡが終端ＬＢＡより大きい場合にステップＳ２７にすすみ、書込終了ＬＢＡが終端ＬＢＡより大きくない場合にステップＳ２８にすすむ。
【００６８】
［ステップＳ２７］書込制御部１２０は、書込終了ＬＢＡで終端ＬＢＡを更新する。すなわち、書込制御部１２０は、ＷＲＩＴＥコマンドにもとづく書込が管理領域更新書込であるか否かをステップＳ２５，Ｓ２６で判定し、ＷＲＩＴＥコマンドにもとづく書込が管理領域更新書込である場合に終端ＬＢＡを更新する。
【００６９】
［ステップＳ２８］書込制御部１２０は、ＷＲＩＴＥコマンドに応じた処理（たとえば、書込対象領域へのデータの書込と、データの書込結果のサーバ６への応答）を実行し、ＷＲＩＴＥコマンド受信処理を終了する。
【００７０】
このように、書込制御部１２０は、終端ＬＢＡ更新（ステップＳ２７）を伴うＷＲＩＴＥコマンド処理（ステップＳ２８）により、図７を用いて説明した管理領域更新書込を実現する。このとき、書込制御部１２０は、管理領域更新書込部１２１として機能する。また、書込制御部１２０は、終端ＬＢＡ更新（ステップＳ２７）を伴わないＷＲＩＴＥコマンド処理（ステップＳ２８）により、図７を用いて説明した管理領域非更新書込を実現する。このとき、書込制御部１２０は、管理領域非更新書込部１２２として機能する。
【００７１】
なお、書込制御部１２０は、ＷＲＩＴＥコマンド受信処理を実行することで、一側面では、ＬＵ書込管理テーブル２００で管理される書込対象ボリュームごとの管理情報を更新する管理情報更新部として機能する。
【００７２】
次に、第２の実施形態のＲＥＡＤコマンド受信処理について図１１を用いて説明する。図１１は、第２の実施形態のＲＥＡＤコマンド受信処理のフローチャートを示す図である。
【００７３】
ＲＥＡＤコマンド受信処理は、サーバ６からＲＥＡＤコマンドを受信したことを契機に読出制御部１３０が実行する処理である。ＲＥＡＤコマンド受信処理は、未書込領域に「ＡＬＬ Ｆ」を設定して、受信したＲＥＡＤマンドに対応する応答をサーバ６におこなう処理である。
【００７４】
［ステップＳ３１］読出制御部１３０は、ＲＥＡＤコマンドに応じて、ＨＤＤ５１，５２，５３，５４のうちからデータを読み出す。
［ステップＳ３２］読出制御部１３０は、読み出したデータをキャッシュメモリに展開する。
【００７５】
［ステップＳ３３］読出制御部１３０は、ＬＵ書込管理テーブル２００を参照し、読出対象ボリュームのＬＢＡ＃０書込状態を判定する。読出制御部１３０は、読出対象ボリュームのＬＢＡ＃０書込状態がＯＮであればステップＳ３４にすすみ、読出対象ボリュームのＬＢＡ＃０書込状態がＯＦＦであればステップＳ３５にすすむ。
【００７６】
［ステップＳ３４］読出制御部１３０は、読出開始ＬＢＡ（読出対象となる記憶領域の先頭アドレス）が終端ＬＢＡより大きいか否かを判定する。すなわち、読出制御部１３０は、読出開始ＬＢＡが管理領域（図８参照）外にあるか否かを判定する。読出制御部１３０は、読出開始ＬＢＡが終端ＬＢＡより大きい場合にステップＳ３５にすすみ、読出開始ＬＢＡが終端ＬＢＡより大きくない場合にステップＳ３６にすすむ。この読出開始ＬＢＡが終端ＬＢＡより大きい場合は、たとえば図８に示したＬＢＡ＃Ｂ４からＬＢＡ＃Ｂ５の範囲で読出をおこなう場合に相当する。
【００７７】
［ステップＳ３５］読出制御部１３０は、ＬＢＡ＃０書込状態がＯＦＦ、かつ読出開始ＬＢＡが管理領域外にある場合に、チェックＬＢＡ数を「０」で初期化する。チェックＬＢＡ数は、読出対象領域が未書込領域であるか否かをＬＢＡ単位で確認する際の進行管理用のカウンタである。
【００７８】
［ステップＳ３６］読出制御部１３０は、読出終了ＬＢＡ（読出対象となる記憶領域の終端アドレス）が終端ＬＢＡより大きいか否かを判定する。すなわち、読出制御部１３０は、読出終了ＬＢＡが管理領域外にあるか否かを判定する。読出制御部１３０は、読出終了ＬＢＡが終端ＬＢＡより大きい場合にステップＳ３７にすすみ、書込終了ＬＢＡが終端ＬＢＡより大きくない場合にステップＳ４２にすすむ。この読出終了ＬＢＡが終端ＬＢＡより大きい場合は、たとえば図８に示したＬＢＡ＃Ｂ２からＬＢＡ＃Ｂ４の範囲で読出をおこなう場合に相当する。
【００７９】
［ステップＳ３７］読出制御部１３０は、チェックＬＢＡ数を管理領域内読出サイズで初期化する。管理領域内読出サイズは、管理領域と読出領域とが重複する記憶領域のＬＢＡ数を示し、たとえば、読出終了ＬＢＡ−終端ＬＢＡにより算出できる。読出制御部１３０は、管理領域内読出サイズをチェックＬＢＡ数の初期値に設定することで、読出対象領域のうち未書込領域を確認する確認対象範囲を限定する。これは、管理領域が書込済領域であることから確認対象として除外できることによる。
【００８０】
［ステップＳ３８］読出制御部１３０は、チェックＬＢＡ数が読出サイズ（読出対象となる記憶領域のＬＢＡ数）であるか否かを判定する。読出制御部１３０は、チェックＬＢＡ数が読出サイズである場合にステップＳ４２にすすみ、チェックＬＢＡ数が読出サイズでない場合にステップＳ３９にすすむ。
【００８１】
［ステップＳ３９］読出制御部１３０は、チェック対象ＬＢＡが未書込領域であるか否かを判定する。たとえば、読出制御部１３０は、メタデータを参照することにより、チェック対象ＬＢＡが未書込領域であるか否かを判定できる。読出制御部１３０は、チェック対象ＬＢＡが未書込領域である場合にステップＳ４０にすすみ、チェック対象ＬＢＡが未書込領域でない場合にステップＳ４１にすすむ。なお、チェック対象ＬＢＡは、読出開始ＬＢＡにチェックＬＢＡ数を加算したＬＢＡである。
【００８２】
［ステップＳ４０］読出制御部１３０は、キャッシュメモリに展開した読出データのうち、チェック対象ＬＢＡのチェックコードに「ＡＬＬ Ｆ」を設定する。これにより、読出制御部１３０は、チェック対象ＬＢＡにチェックコードを高速に設定できる。
【００８３】
［ステップＳ４１］読出制御部１３０は、チェックＬＢＡ数をインクリメントする。
［ステップＳ４２］読出制御部１３０は、ＲＥＡＤコマンドに応じたデータ転送をおこなう。
【００８４】
［ステップＳ４３］読出制御部１３０は、ＲＥＡＤコマンドに応じたステータス転送をおこない、ＲＥＡＤコマンド受信処理を終了する。
このように、読出制御部１３０は、未書込領域であるか否かの判定（ステップＳ３９）を伴わないデータ転送処理（ステップＳ４２）により、図８を用いて説明した管理領域内読出を実現する。このとき、読出制御部１３０は、管理領域内読出部１３１として機能する。また、読出制御部１３０は、未書込領域であるか否かの判定（ステップＳ３９）を伴うデータ転送処理（ステップＳ４２）により、図８を用いて説明した管理領域外読出を実現する。このとき、読出制御部１３０は、管理領域外読出部１３２として機能する。
【００８５】
なお、書込制御部１２０は、ステップＳ３３からＳ３７の処理を実行することで、一側面では、チェックコード変換個所を判定するチェックコード変換個所判定部として機能する。
【００８６】
これにより、読出制御部１３０は、読出対象となる記憶領域のうち管理領域と重複する部分について、未書込領域であるか否かの判定を不要とすることを要しない。このような読出制御部１３０は、読出対象となる記憶領域が管理領域内であればＴ１０−ＤＩＦ機能を使用しないボリュームと同程度の読出性能を実現できる。また、読出制御部１３０は、読出対象となる記憶領域の一部でも管理領域に含まれれば、未書込領域であるか否かの判定にかかるオーバヘッドを低減できる。したがって、ストレージ装置１０は、コマンド応答のオーバヘッドによる読出性能の低下を抑制できる。
【００８７】
なお、管理情報生成部１１０は、ＬＵ書込管理テーブル２００（管理情報）のサイズについてもボリュームのサイズによらず、ボリュームの数に応じて管理できることから、管理に必要な記憶領域を低減することができる。たとえば、管理情報生成部１１０は、ＬＵごとに９ｂｙｔｅ（＝ＬＢＡ（８ｂｙｔｅ）＋ＬＢＡ＃書込状態（１ｂｙｔｅ））を管理情報として割り当てるだけでよく、１００ＧＢのボリューム１００個をわずか９００ｂｙｔｅで管理できることになる。
【００８８】
なお、このような管理情報によらずに１ブロックを１ビットのビットマップで管理しようとした場合、管理のための記憶領域は、ブロックサイズ５１２ｂｙｔｅとしたときに、１ＧＢのボリュームの管理に２５６Ｋｂｙｔｅを要し、ボリューム１００個で２５００ＭＢをも要することとなる。
【００８９】
したがって、ストレージ装置１０は、管理に必要な記憶領域を低減しながら、コマンド応答のオーバヘッドによる読出性能の低下を抑制できる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ制御装置１、ストレージ装置１０、ＣＭ２０，３０が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disk）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【００９０】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００９１】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【００９２】
また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
【符号の説明】
【００９３】
１  ストレージ制御装置
１ａ  記憶部
１ｂ  制御部
１ｃ  管理情報
２  外部装置
３  記憶装置
３ａ  論理ボリューム
３ｂ  単位領域
４ａ  第１記憶領域（更新前）
４ｂ，４ｄ  終端アドレス
４ｃ  第２記憶領域
４ｅ  第１記憶領域（更新後）
５  ストレージシステム
６  サーバ
７  ネットワーク
１０  ストレージ装置
１１，１２  チャネルアダプタ
１３，１４  リモートアダプタ
２０，３０  コントローラモジュール（ＣＭ）
２１，３１  プロセッサ
２２，３２  メモリ
２３，２４，３３，３４  ディスクアダプタ
５０  ディスクエンクロージャ（ＤＥ）
５１，５２，５３，５４  ＨＤＤ
１００  記憶部
１１０  管理情報生成部
１２０  書込制御部
１２１  管理領域更新書込部
１２２  管理領域非更新書込部
１３０  読出制御部
１３１  管理領域内読出部
１３２  管理領域外読出部
２００  ＬＵ書込管理テーブル
【図１】
2016149051.tif 000003
【図２】
2016149051.tif 000004
【図３】
2016149051.tif 000005
【図４】
2016149051.tif 000006
【図５】
2016149051.tif 000007
【図６】
2016149051.tif 000008
【図７】
2016149051.tif 000009
【図８】
2016149051.tif 000010
【図９】
2016149051.tif 000011
【図１０】
2016149051.tif 000012
【図１１】
2016149051.tif 000013