(57)【要約】  データをリード及びライトする単位であるページを複数個有する記憶媒体を備える記憶装置において、上位装置から受信したデータブロックを含む第１データブロックを生成し、１以上の第１データブロックを分割することなく含む所定サイズの第２データブロックを生成し、第２データブロックに訂正用コードを付与した第３データブロックを生成し、第３データブロックをページバッファに格納し、そのページバッファに格納された１以上の第３データブロックを記憶媒体のページのうちのライト先のページへライトする。
2015029230.tif 000002
【特許請求の範囲】
【請求項１】
上位装置に接続される記憶装置であって、
データをリード及びライトする単位であるページを複数個有する記憶媒体と、
前記記憶媒体に対し上位装置から要求されたデータのリード及びライトを制御する媒体コントローラと
を備え、
前記記憶媒体は、ページ単位でリード又はライトされるデータを格納するページバッファを有し、
前記媒体コントローラは、
前記上位装置から受信したデータブロックを含む第１データブロックを生成し、
１以上の第１データブロックを分割することなく含む所定サイズの第２データブロックを生成し、
前記第２データブロックに訂正用コードを付与した第３データブロックを生成して前記記憶媒体のページバッファに格納し、
前記記憶媒体は、
前記ページバッファに格納された１以上の前記第３データブロックを前記複数のページのうちのライト先のページへライトする
記憶装置。
【請求項２】
前記第２データブロックは、１以上の圧縮された第１データブロックである圧縮データ部を少なくとも含んだデータ群を含み、且つ、そのデータ群のサイズが前記所定サイズ未満の場合に、そのデータ群のサイズとの合計が前記所定サイズとなるよう前記所定サイズに満たない部分に追加されたパディングデータを含む
請求項１に記載の記憶装置。
【請求項３】
前記圧縮データ部は、前記データ群のサイズが前記所定サイズ以下となる範囲で最大数の圧縮された第１データブロックを含む
請求項２に記載の記憶装置。
【請求項４】
前記データ群は、前記圧縮データ部と、前記圧縮データ部の保証コードである圧縮用保証コードとで構成されている、
請求項２に記載の記憶装置。
【請求項５】
前記所定サイズは、前記第１のデータブロックのサイズのＮ倍（Ｎは正の整数）である、
請求項１に記載の記憶装置。
【請求項６】
連続した２以上の第１のデータブロックの合計サイズが、前記所定サイズを超える場合、或る第２のデータブロックが、前記連続した２以上の第１のデータブロックのうちの末端の第１のデータブロック以外のデータブロックであるデータ部と、そのデータ部のサイズとの合計が前記所定のサイズになるよう追加されたパディングデータとで構成され、前記或る第２のデータブロックの次の第２のデータブロックのデータ部における先頭が、前記末端の第１のデータブロックである、
請求項１に記載の記憶装置。
【請求項７】
ホストコンピュータに接続された前記上位装置であるストレージコントローラと、
前記ストレージコントローラに接続されたＲＡＩＤグループと
を有し、
前記ＲＡＩＤグループが、複数の記憶デバイスで構成されており、
各記憶デバイスが、前記媒体コントローラ及び前記記憶媒体を含み、
前記ストレージコントローラは、前記ホストコンピュータから受信したデータに基づくデータブロックとそのデータブロックの保証用コードとを含んだデータユニットを、前記複数の記憶デバイスのうちのそのデータユニットの送信先の記憶デバイスに送信し、
前記第１データブロックは、前記ストレージコントローラから受信したデータユニットと、当該受信したデータユニットに対して付加された保証コードとを含む
請求項１に記載の記憶装置。
【請求項８】
前記記憶媒体は、
前記ページからリードしたデータを一時的に前記ページバッファに格納し、
前記媒体コントローラは、
前記記憶媒体のページバッファに格納されたページのデータから、１以上の前記第３データブロックを取得し、
その取得した第３データブロックから前記訂正用コードを用いて訂正処理された前記第２データブロックを抽出し、
その抽出した第２データブロックから第１データブロックを抽出し、
その抽出した第１データブロックに含まれるデータブロックを前記上位装置に送信する
請求項１に記載の記憶装置。
【請求項９】
データをリード及びライトする単位であるページを複数個有する記憶媒体を備える記憶装置において、
上位装置から受信したデータブロックを含む第１データブロックを生成し、
１以上の第１データブロックを分割することなく含む所定サイズの第２データブロックを生成し、
前記第２データブロックに訂正用コードを付与した第３データブロックを生成し、
前記第３データブロックを、前記ページ単位でリード又はライトされるデータを格納するページバッファに格納し、
前記ページバッファに格納された１以上の前記第３データブロックを、前記記憶媒体の前記複数のページのうちのライト先のページへライトする
データ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置においてデータをリードおよびライトする技術に関する。
【背景技術】
【０００２】
ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）に対応するストレージ装置は、例えば５１２Ｂｙｔｅのデータブロックの単位でデータが送受信される。【０００３】
近年、記憶媒体にフラッシュメモリを使用したＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等のストレージ装置が存在する。ＮＡＮＤ型のフラッシュメモリは、例えば８ＫＢｙｔｅの「ページ」と呼ばれる単位でデータがリード／ライトされる。【０００４】
フラッシュメモリはその特性上、保持中のデータにエラーが発生しやすいため、ＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）が付与されている。ここで、フラッシュメモリに格納されるデータ及びそのデータに対するＥＣＣのセットをＣＷ（ＣｏｄｅＷｏｒｄ）と呼ぶ（特許文献１、２）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】ＵＳ８１０３９３６
【特許文献２】ＵＳ２０１１／０３２０９１５
【発明の概要】
【発明が解決しようとする課題】
【０００６】
フラッシュメモリを有するストレージ装置からデータをリードする場合、ＥＣＣを用いてデータに対するエラー訂正処理を実行する必要がある。したがって、エラー訂正処理の実行回数はできるだけ少ない方が、ストレージ装置の応答性能は向上する。
本発明の目的は、エラー訂正処理の実行回数を少なくすることにある。
【課題を解決するための手段】
【０００７】
本発明の一実施例に係る記憶装置は、データをリード及びライトする単位であるページを複数個有する記憶媒体と、記憶媒体に対し上位装置から要求されたデータのリード及びライトを制御する媒体コントローラとを備える。記憶媒体は、ページ単位でリード又はライトされるデータを格納するページバッファを有する。
媒体コントローラは、上位装置から受信したデータブロックを含む第１データブロックを生成し、１以上の第１データブロックを分割することなく含む所定サイズの第２データブロックを生成し、第２データブロックに訂正用コードを付与した第３データブロックを生成して記憶媒体のページバッファに格納する。
記憶媒体は、ページバッファに格納された１以上の第３データブロックを複数のページのうちのライト先のページへライトする。
【発明の効果】
【０００８】
本発明によれば、エラー訂正処理の実行回数を少なくすることができ、それによって、フラッシュメモリを有するストレージ装置の応答性能を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】比較例のストレージシステムの構成とデータブロックの構成との対応関係の例を示す。
【図２】第１の実施例に係るストレージシステムの構成とデータブロックの構成との対応関係の例を示す。
【図３】ストレージシステムの構成例を示すブロック図である。
【図４】ＳＳＤ４０の構成例を示すブロック図である。
【図５】ＦＭコントローラ及びフラッシュメモリの構成例を示すブロック図である。
【図６】保証コードを含むデータブロックの構成の例を示す。
【図７】ホストコンピュータに提供されるＬＢＡ空間とデータブロックの構成との関係を示す。
【図８】論理物理変換テーブルの構成例を示す。
【図９】ストレージシステムにおけるデータライト処理の一例を示すシーケンス図である。
【図１０】ストレージシステムにおけるデータリード処理の一例を示すシーケンス図である。
【図１１】ＳＳＤコントローラにおけるＳＳＤ内データリード処理（Ｓ２２）の詳細を示すフローチャートの例である。
【図１２】ＦＭコントローラにおけるデータリード処理（Ｓ３２）の詳細を示すフローチャートの例である。
【図１３】ＦＭコントローラがＦＭからデータをリードする処理（Ｓ４５）の詳細を示すフローチャートである。
【図１４】ストレージシステムの構成要素と転送データのサイズとの関係の一例を示す。
【図１５】ＦＭのデータ格納フォーマットの変形例を示す。
【図１６】第２の実施例に係るストレージシステムの構成とデータブロックの構成との対応関係の例を示す。
【図１７】第２の実施例におけるＳＳＤ内データリード処理（Ｓ２２）の詳細を示すフローチャートの例である。
【図１８】第２の実施例における圧縮ブロック伸長処理（Ｓ８１）の詳細を示すフローチャートの例である。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら、記憶媒体としてフラッシュメモリを備えるストレージシステムにおけるデータリード及びライトの実施例を示す。
【実施例１】
【００１１】
図１は、比較例のストレージシステムの構成とデータブロックの構成との対応関係の例を示す。【００１２】
本実施例において、ストレージシステムは、ホストコンピュータ１０と、ストレージ装置３０とを備える。ストレージ装置３０は、アレイコントローラ３２と、ＳＳＤ４０とを有する。ホストコンピュータ１０、アレイコントローラ３２およびＳＳＤ４０は、ＳＣＳＩプロトコルに従ってデータを送受信する。ＳＣＳＩプロトコルでは、所定のデータブロック（以下「ＳＣＳＩブロック」という）の単位でデータが転送される。１つのＳＣＳＩブロックのサイズは、例えば５１２Ｂｙｔｅである。以下、ホストコンピュータ１０が、ライト用のデータとしてＳＣＳＩブロック１００をアレイコントローラ３２に送信した場合について説明する。【００１３】
アレイコントローラ３２は、例えば、ＤＩＦ（Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  Ｆｉｅｌｄ）回路３５を有する。ＤＩＦ回路３５は、ストレージ装置内におけるデータの整合性を保証するためのアレイコントローラ用の保証コード（以下「アレイ用保証コード」という）１１０を生成する。ＤＩＦ回路３５は、ホストコンピュータ１０から送信されたＳＣＳＩブロック１００に、アレイ用保証コード１１０を付与する。【００１４】
ＳＳＤ４０は、上位装置との通信インタフェースである上位Ｉ／Ｆ５２と、データを一時的に格納するキャッシュメモリ５６と、ＦＭ（フラッシュメモリ）を制御するＦＭコントローラ５８と、ＦＭ５９と、を備える。本比較例では、ＳＳＤ４０の上位装置は、アレイコントローラ３２である。ホストコンピュータ１０にＳＳＤ４０が外付けの記憶デバイスとして接続されるような環境では、ＳＳＤ４０の上位装置はホストコンピュータ１０である。【００１５】
上位Ｉ／Ｆ５２は、例えば、ＤＩＦ回路５３を有する。ＤＩＦ回路５３は、ＳＳＤ内部におけるデータの整合性を保証するための、ＳＳＤ内部用の保証コード（以下「ＳＳＤ用保証コード」という）１２０を生成する。【００１６】
ＦＭコントローラ５８は、例えば、ＥＣＣ回路６１を有する。ＥＣＣ回路６１は、ＦＭへ格納するデータにＥＣＣを付与する。【００１７】
ＦＭ５９は、複数のページ７２と、ページ７２に対してリード／ライトするデータを一時的に格納するページバッファ７１とを有する。具体的には、例えば、ＦＭ５９は、ＮＡＮＤ型のＦＭであり、複数のブロックを有し、各ブロックが、２以上のページ７２を有する。ＦＭ５９は、上書きが不可能なタイプのＦＭである。ＦＭ５９は、ページ単位でデータがリード／ライトされ、ブロック単位でデータが消去される。【００１８】
アレイコントローラ３２は、ＳＳＤ４０に対して、ＳＣＳＩブロック１００にアレイ用保証コード１１０を付加したデータを送信する。【００１９】
上位Ｉ／Ｆ５２内のＤＩＦ回路５３は、受信したデータにＳＳＤ用保証コード１２０を付与する。図１に示すように、ＳＣＳＩブロック１００とアレイ用保証コード１１０とＳＳＤ用保証コード１２０とを含むデータを、ＳＳＤブロック３０２という。ＳＳＤコントローラ５０は、ＳＳＤブロックの単位でデータを管理する。【００２０】
ＳＳＤコントローラ５０は、ＥＣＣ回路６１を用いて、複数のＳＳＤブロックに対するＥＣＣを生成する。ここで、図１に示すように、ＥＣＣ９１の対象である複数のＳＳＤブロック３００、３０１、…をデータ部９０という。ＥＣＣは、このデータ部のエラーを訂正するために用いられる。図１に示すように、データ部９０とＥＣＣ９１とによって構成されるデータをＣＷ８０という。ＦＭ５９のページ７２には、１又は２以上のＣＷ８０、８１、…が格納される。【００２１】
ＣＷのサイズは、必要とされるエラー訂正能力によって決定される。高いエラー訂正能力が必要とされる場合は、データ部のサイズに対してより大きな割合のＥＣＣが付与される。ＣＷのサイズおよびデータ部に対するＥＣＣの割合は、変更可能である。【００２２】
比較例において、データ部９０のサイズは、ＳＳＤブロック１つ分のサイズの倍数とは限らない。例えば、図１に示すように、比較例において、ＳＳＤブロック３０２は、データ部９０（ブロック３０２ａ）とデータ部９２（ブロック３０２ｂ）とに分割され格納される。つまり、１つのＳＳＤブロック３０２が、ＣＷ８０とＣＷ８１とに分割され格納される。【００２３】
以下に、図１を参照しながら、比較例において、ホストコンピュータ１０から送信されたＳＣＳＩブロック１００がストレージ装置３０のＦＭ５９にライトされる処理の一例を示す。
（１）ホストコンピュータ１０は、アレイコントローラ３２に対して、ＳＣＳＩブロック１００のライト要求を送信する。
（２）アレイコントローラ３２は、ＤＩＦ回路３５を用いて、ＳＣＳＩブロック１００にアレイ用保証コード１００を付与し、ＳＳＤ４０の備える上位Ｉ／Ｆ５２に転送する。
（３）上位Ｉ／Ｆ５２は、ＤＩＦ回路５３を用いて、アレイコントローラ３２から転送されたデータブロックにさらにＳＳＤ用保証コード１２０を付与し、キャッシュメモリ５２に格納する。以下、このＳＣＳＩブロック１００と、アレイ用保証コード１１０と、ＳＳＤ用保証コード１２０とのセットをＳＳＤブロック３０２とする。
（４）ＦＭコントローラ５８は、キャッシュメモリ５６に格納されている複数のＳＳＤブロック３００〜３０２から所定長のデータ部９０を抽出し、ＥＣＣ回路６１を用いて、そのデータ部９０に対応するＥＣＣ９１を生成する。そして、ＦＭコントローラ５８は、そのデータ部９０にＥＣＣ９１を付与したＣＷ８０を生成し、ＦＭ５９のページバッファ７１へ格納する。ここで、データ部のサイズがＳＳＤブロックのサイズの整数倍でない場合は、例えば図１に示すように、ＳＳＤブロック３０２がブロック３０２ａと３０２ｂとに分割されて、それぞれ異なるデータ部９０と９２に含まれることとなる。
（５）ＦＭ５９は、ページバッファ７１から１ページ分のＣＷを抽出し、その抽出した１以上のＣＷをまとめてページ７２にライトする。
このように、１つのＳＳＤブロック３０２が、２つのＣＷ８０、８１にまたがって格納されることがある。【００２４】
以下に、図１を参照しながら、比較例において、ホストコンピュータ１０がストレージ装置３０からＳＣＳＩブロック１００をリードする処理の一例を示す。
（１）ホストコンピュータ１０は、アレイコントローラ３２に対して、ＳＣＳＩブロック１００のリード要求を送信する。
（２）アレイコントローラ３２は、ＳＣＳＩブロック１００が格納されているＳＳＤ４０のＳＳＤコントローラ５０に対して、データ転送を指示する。図１において、ＳＣＳＩブロック１００は、ＳＳＤブロック３０２に含まれている。そして、このＳＳＤブロック３０２は、ＣＷ８０とＣＷ８１とに分割されて格納されている。
（３）ＳＳＤコントローラ５０は、ページ７２に格納されているデータを一括で読み出し、ページバッファ７１に格納する。ＦＭ５９は、ページ単位でデータをリード（およびライト）する必要があるからである。
（４）ＳＣＳＩブロック１００がＣＷ８０とＣＷ８１とに分割されているので、ＳＳＤコントローラ５０は、ページバッファ７１に格納したページ単位のデータから、ＣＷ８０およびＣＷ８１のデータを取得する。このように、ページ単位でページバッファ７１に格納されたデータから、その一部分のＣＷを取得する方法を、以下では「部分読み」ということがある。
（５）ＳＳＤコントローラ５０は、ＥＣＣ回路６１を用いて、ＣＷ８０から、ＥＣＣ９１によってエラー訂正されたデータ部９０を抽出する。同様に、ＳＳＤコントローラ５０は、ＥＣＣ回路６１を用いて、ＣＷ８１から、ＥＣＣ９３によってエラー訂正されたデータ部９２を抽出する。そして、ＳＳＤコントローラ５０は、その抽出したデータ部９０およびデータ部９１を、キャッシュメモリ５６に格納する。
（６）ＳＳＤコントローラ５０は、データ部９０に含まれるブロック３０２ａと、データ部９２に含まれるブロック３０２ｂを結合して、ＳＳＤブロック３０２を生成する。
（７）ＳＳＤコントローラ５０は、その生成したＳＳＤブロック３０２のデータを、上位Ｉ／Ｆ５２へ転送する。
（８）上位Ｉ／Ｆ５２のＤＩＦ回路５３は、ＳＳＤ用保証コード１２０を用いて、ＳＣＳＩブロック１００およびアレイ用保証コード１１０のセットに整合性を確認し、問題がない場合、ＳＣＳＩブロック１００およびアレイ用保証コード１１０のセットを、アレイコントローラ３２に転送する。【００２５】
このように、比較例において、２つのＣＷ８０、８１に分割されたＳＳＤブロック３０２をアレイコントローラ３２に転送する場合、ＳＳＤコントローラ５０は、その２つのＣＷ８０、８１をキャッシュメモリ５６に読み出す必要がある。したがって、ページバッファ７１と、ＦＭコントローラ５８と、キャッシュメモリ５６との間で、２つ分のＣＷ８０、８１のデータ転送が発生する。また、ＦＭコントローラ５８は、ＥＣＣ回路６１を用いて、２つ分のＣＷのエラー訂正を実行する必要がある。つまり、比較例において、２つのＣＷにまたがるＳＳＤブロックを読み出す場合は、１つのＣＷに含まれるＳＳＤブロックを読み出す場合と比較して、ＥＣＣ回路６１によるエラー訂正処理の回数と、ページバッファ７１からキャッシュメモリ５６までの間のデータ転送帯域とが、共に２倍となってしまう。これは、ＳＳＤ４０の応答速度の低下にもつながる。そこで、本実施例に係るストレージシステムは、以下に示すように、ＳＳＤブロックが２つのＣＷにまたがって格納されないように構成されている。【００２６】
図２は、第１の実施例に係るストレージシステムの構成とデータブロックの構成との対応関係の例を示す。【００２７】
本実施例では、ＣＷのデータ部を、ＳＳＤブロックを１以上含み、且つ、ＳＳＤブロックの一部のみのデータを含まないように構成する。上述の部分読みに最適なデータ格納フォーマットを実現するためである。例えば、ＣＷのデータ部のサイズを、ＳＳＤブロックのサイズの倍数（Ｎ倍（Ｎは正の整数））とする。【００２８】
例えば、図２に示すように、３つのＳＳＤブロック３００、３０１、３０２で１つのＣＷ８０のデータ部９０を構成する。【００２９】
この場合の上記（４）の処理は、ＳＳＤコントローラ５０は、ページバッファ７１に格納したページ単位のデータからＣＷ８０の部分のデータを読み出す。そして、ＳＳＤコントローラ５０は、その読み出したＣＷ８０に対してのみ上記（５）以降の処理を実行すればよい。【００３０】
つまり、図２に示す本実施例は、ＳＳＤブロック３０２を読み出す際、図１に示した例と比較して、ページバッファ７１とＦＭコントローラ５８とキャッシュメモリ５６との間で、１つのＣＷ８０のみデータ転送すればよい。また、ＦＭコントローラ５８のＥＣＣ回路６１において、１つのＣＷ８０のみエラー訂正処理を実行すればよい。したがって、図２に示す本実施例は、図１に示した例と比較して、ＳＳＤ４０の応答速度の低下が発生しない。なお、図２において、ＣＷ８０のデータ部９０のサイズをＳＳＤブロックのサイズの３倍としているが、ＣＷ８０のデータ部９０のサイズとＳＳＤブロックのサイズとを同じにしてもよい。【００３１】
また、本実施例によれば、ＦＭ５９から読み出すデータのサイズを、ＳＣＳＩプロトコルの規定する最小のデータ転送サイズと等しくすることができる。これにより、ページサイズ未満のデータのリード要求に対するＳＳＤの応答速度を高めることができる。【００３２】
図２によれば、ページ７２へのデータの書込みにおいて、ＳＳＤコントローラ５０によってページ７２に書きこまれるＣＷ８０中のデータ部９０は、データ格納フォーマットによれば、Ｎ（Ｎは正の整数）個のＳＳＤブロック（例えば３個のＳＳＤブロック３００〜３０２）のみで構成される。なお、１つのＳＳＤブロックが２つのデータ部に跨りさえしなければ、必ずしも、データ部９０のサイズはＳＳＤブロックの倍数でなくてよい。例えば、ＳＳＤコントローラ５０は、連続した（Ｎ＋１）個のＳＳＤブロックが、第１のＣＷ中のデータ部９０に収まらなければ、連続した（Ｎ＋１）個のＳＳＤブロックのうちの末端のＳＳＤブロックを、第２のＣＷ（第１のＣＷの次のＣＷ）中のデータ部９２における先頭のＳＳＤブロックとし、且つ、第１のＣＷ中のデータ部９０にパディングすることで、第１のＣＷ中のデータ部９０が、連続したＮ個のＳＳＤブロックとパディングされたデータとで構成されてよい。【００３３】
図３は、ストレージシステムの構成例を示すブロック図である。
ストレージシステム１は、ストレージ装置３０と、ホストコンピュータ１０とを備える。【００３４】
ホストコンピュータ１０は、ストレージ装置３０を利用する上位装置の一例である。ホストコンピュータ１０は、例えば、アプリケーションサーバである。ホストコンピュータ１０とストレージ装置３０とは、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）２０を経由して通信する。ＳＡＮ２０には、例えば、ファイバチャネル、ＳＣＳＩ、ｉＳＣＳＩ（ｉｎｔｅｒｎｅｔ  ＳＣＳＩ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＩＥＥＥ１３９４バス、及び／又はＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）等が用いられてよい。ＳＡＮ２０に代えて、他種の通信ネットワーク（例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ））が用いられてもよい。ストレージシステム１は、複数のホストコンピュータ１０及び／又は複数のストレージ装置３０を備えてもよい。【００３５】
ストレージ装置３０は、アレイコントローラデバイス３１と、複数の記憶デバイスとを備える。記憶デバイスは、例えば、ＳＳＤ４０、ＳＡＳ対応ＨＤＤ４１またはＳＡＴＡ対応ＨＤＤ４２等である。【００３６】
アレイコントローラデバイス３１は、ストレージ装置３０を制御するアレイコントローラ３２と、データを一時的に格納するキャッシュメモリ３３、３４とを有する。アレイコントローラデバイス３１は、１または２以上のキャッシュメモリを備えてよい。キャッシュメモリは、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）及び／又はＳＳＤ等で構成されてよい。【００３７】
アレイコントローラ３２は、アレイ用保証コードの生成、付与、チェック及び削除等を行うＤＩＦ回路３５を有してよい。【００３８】
ホストコンピュータ１０、アレイコントローラ３２およびＳＳＤコントローラ５０（図４参照）は、ＳＣＳＩ、ＳＡＴＡ、ＡＴＡまたはＮＶＭ  Ｅｘｐｒｅｓｓ等の通信プロトコルを用いて、論理アドレス空間の定義およびデータの転送を行ってよい。【００３９】
図４は、ＳＳＤ４０の構成例を示すブロック図である。
ＳＳＤ４０は、複数のＦＭ５９とそれらに接続されたＳＳＤコントローラ５０とを有する。【００４０】
ＳＳＤコントローラ５０は、ＳＳＤ４０の動作を制御する。ＳＳＤコントローラ５０は、ＣＰＵ５１と、上位装置との通信インタフェースである上位Ｉ／Ｆ５２と、ＳＳＤ内部においてデータを圧縮及び伸長する圧縮伸長回路５４と、データを一時的に格納するキャッシュメモリ５６と、ＦＭ５９を制御するＦＭコントローラ５８とを備える。これらの要素５１、５２、５４、５８は、双方向にデータ通信可能な内部バス５５で接続されている。【００４１】
上位Ｉ／Ｆ５２は、ＳＳＤ保証コードの生成、付与、チェックおよび削除を行うＤＩＦ回路５３を有してよい。圧縮伸長回路５４は、圧縮データの整合性をチェックするＤＩＦ回路５５を有してよい。キャッシュメモリ５６には、ＳＳＤ４０内の論理アドレス空間と物理アドレス空間との対応関係を管理する論理物理変換テーブル５７が格納されてよい。【００４２】
ＦＭ５９は、例えば、ＮＡＮＤ型のＦＭであるが、ＮＯＲ型のＦＭでもよい。ＦＭ５９に代えて、磁気抵抗メモリであるＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、抵抗変化型メモリであるＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、または強誘電体メモリであるＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）等の各種半導体メモリが使用されてもよい。【００４３】
図５は、ＦＭコントローラ５８及びＦＭ５９の構成例を示すブロック図である。なお、図５に示すように、複数の同種の要素を区別して説明する場合には、複数の同種の要素の参照符号（例えば５９）に異なる子符号（ａ、ｂ、…）を付す。【００４４】
ＦＭコントローラ５８は、ＦＭ５９とキャッシュメモリ５６との間で転送されるデータを制御する。ＦＭコントローラ５８は、ＤＩＦ回路６０とＥＣＣ回路６１とを有してよい。ＤＩＦ回路６０は、ＳＳＤ用保証コードを用いてデータの整合性をチェックする。ＥＣＣ回路６１は、ＦＭ５９に格納するデータに対するＥＣＣの生成、付与、削除およびエラー訂正等を行う。ＦＭコントローラ５８は、データのＤＭＡ転送を実行するＤＭＡ６２と、データ転送対象のＦＭ５９を選択するＦＭセレクタ６３と、ＦＭ５９に対するコマンドを生成するプロトコル回路６５とを有する。【００４５】
ＦＭ５９ａおよび５９ｂは、それぞれ、内部にＦＭを制御するためのコントロール回路７０と、データを一時的に格納するページバッファ７１と、複数のページ７２とを有する。【００４６】
ページ７２には、１又は２以上のＣＷで構成されたデータがページ単位で格納される。図５において、ＣＷ８０には、データ部９０とＥＣＣ９１とが含まれており、ＣＷ８１には、データ部９２とＥＣＣ９３とが含まれている。【００４７】
ＦＭセレクタ６３と各ＦＭのコントロール回路７０とは、独立したＦＭバス６７で接続されている。ＤＭＡ６２と各ページバッファ７１とは、１つのＦＭバス６４を共有して接続されている。したがって、ＦＭコントローラ５８は、或る時点において１つのＦＭ５９とのみ通信することができる。【００４８】
以下、ＦＭコントローラ５８が、ＦＭ５９ｂからデータをリードする場合の処理を説明する。ＦＭコントローラ５８は、ＦＭセレクタ６３を通じて、ＦＭ５９ｂのコントロール回路７０へセレクト信号を送付する。セレクト信号を受信したＦＭ５９ｂは、以降に送付されるコマンドが自身にとって有効であると解釈する。【００４９】
次に、ＦＭコントローラ５８は、ＦＭバス６４を通じて、ＦＭ５９ｂにリードコマンドを送信する。このリードコマンドを受信したＦＭ５９ｂは、例えば、ページ７２の全データをページバッファ７１へ転送する。このとき、リードコマンドは、ＦＭ５９ａおよびＦＭ５９ｂの両方に送信されるが、ＦＭ５９ａにはセレクト信号が送信されていないため、ＦＭ５９ｂのみが受信したコマンドに対する動作を実行する。【００５０】
ページ７２からページバッファ７１へのデータ転送処理は、一般的にＣｈｉｐＢｕｓｙ処理と呼ばれる。このＣｈｉｐＢｕｓｙ処理は、或る程度の時間を要する。ＦＭコントローラ５８は、例えば、ＦＭ５９ｂがＣｈｉｐＢｕｓｙ処理の間、ＦＭ５９ｂに対してセレクト状態を無効化する信号を送信する。ＦＭコントローラ５８が、例えば、ＦＭ５９ｂがＣｈｉｐＢｕｓｙ処理中に、その裏で、他のＦＭ５９ａと通信できるようにするためである。つまり、ＦＭコントローラ５８が、複数のＦＭを並列に動作させることができるようにするためである。【００５１】
ＦＭ５９ｂにおけるＣｈｉｐＢｕｓｙ処理の終了後、ＦＭコントローラ５８は、ＦＭ５９ｂにセレクト信号を送信する。そして、ＦＭコントローラ５８は、ページバッファ７１内のデータをＥＣＣ回路へ転送するためのコマンドを、ＦＭ５９ｂに送信する。例えば、ＦＭコントローラ５８は、ＦＭ５９ｂに対し、最初にページバッファ７１内のデータ転送開始位置（オフセット）を指定するコマンドを送信し、次にデータ転送を指示するコマンドを送信する。データ転送指示のコマンドを受信したＦＭ５９ｂは、指定されたオフセット位置から所定のデータをページバッファ７１から読み出し、ＦＭバス６４を通じてＦＭコントローラ５８へ送信する。【００５２】
ＦＭコントローラ５８は、データ転送指示の発行回数を決定することで、ページバッファ７１からリードするデータの長さを決定することができる。例えば、ＦＭバス６４のバス幅が１Ｂｙｔｅであった場合、５１２Ｂｙｔｅ分のデータを転送するには、ＦＭコントローラ５８は、データ転送指示を５１２回発行すればよい。【００５３】
例えば、ページの先頭に格納されているＣＷのデータのみをリードする場合、ＦＭコントローラ５８は、オフセットを先頭（ゼロ）に指定し、ＣＷサイズ分のデータ転送指示をＦＭ５９２に対して発行すればよい。【００５４】
例えば、ページ単位でデータをリードする場合、ＦＭコントローラ５８は、ページバッファ７１内の全ＣＷのデータをリードすればよい。つまり、ＦＭコントローラ５８は、ページのサイズに応じたデータ転送指示を、ＦＭ５９ｂに対して発行すればよい。ページバッファ７１からのデータ転送の終了後、ＦＭコントローラ５８は、ＦＭ５９ｂに対してセレクト状態を無効化する信号を送信する。【００５５】
ＥＣＣ回路６１に転送されたデータは、ＣＷ単位でＥＣＣによるエラー訂正が実行される。その後、ＥＣＣが削除され、ＤＩＦ回路６０に転送される。ＤＩＦ回路６０では、ＳＳＤ用保証コードによってデータの整合性がチェックされる。そして、そのチェックを通過したデータがキャッシュメモリ５６へ転送される。【００５６】
図６は、保証コードを含むデータブロックの構成の例を示す。
アレイコントローラ３２は、ホストコンピュータ１０から受信したＳＣＳＩブロック１００にアレイ用保証コード１１０を付与し、アレイブロック２００を生成する。このアレイ用保証コード１１０は、例えば、ＳＣＳＩブロック１００のエラーを検出するためのＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）と、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送時のアドレスのエラーを検出するためのアドレス情報となどから構成される。アレイコントローラ３２は、データリード時に、ＣＲＣを再計算して期待値と比較し、データのエラーを検出する。アレイコントローラ３２は、アドレス情報と期待値とを比較し、正しいアドレスのデータを転送できているか否かを確認する。これにより、アレイコントローラ３２は、ホストコンピュータ１０のリード要求に対して誤ったデータを提供すること防止している。【００５７】
次に、アレイコントローラ３２は、アレイブロック２００をＳＳＤコントローラ５０へ送信する。ＳＳＤコントローラ５０は、アレイブロック２００にＳＳＤ用保証コード１２０を付与し、ＳＳＤブロック３００を生成する。ＳＳＤコントローラ５０は、ＳＳＤ用保証コード１２０を付与することにより、アレイコントローラ３２のリード要求に対して誤ったデータを提供することを防止している。【００５８】
ＦＭコントローラ５８は、１又は２以上のＳＳＤブロック３００に対して１つのＥＣＣ９１を付与し、ＣＷ８０を生成する。そして、ＦＭコントローラ５８は、ＣＷ８０をＦＭ５９へ格納する。一つのＣＷに格納するＳＳＤブロックの数は、ＳＳＤの目標とするデータ故障確率等に応じて任意に決定することができる。ＦＭコントローラ５８は、ＥＣＣ９１を付与することにより、ＦＭからリードしたエラーを訂正することができる。【００５９】
図７は、ホストコンピュータ１０に提供されるＬＢＡ空間とデータブロックの構成との関係を示す。
前述の通り、ストレージシステム内における各デバイスは、ＳＣＳＩプロトコルに従ってデータ通信を行う。そのため、ホストコンピュータ１０は、アレイコントローラ３２の提供する論理アドレス空間を、「５１２Ｂｙｔｅ×Ｎ（Ｎは正の整数）」のサイズとして認識する。ホストコンピュータ１０とアレイコントローラ３２との間のデータ転送は、ＳＣＳＩブロックのサイズである５１２Ｂｙｔｅ単位で実行される。【００６０】
次に、アレイコントローラ３２は、例えば、１つのＳＣＳＩブロック１００に、８Ｂｙｔｅのアレイ用保証コード１１０を付与する。すなわち、１つのアレイブロックのサイズは、５２０Ｂｙｔｅとなる。アレイコントローラ３２は、ＳＳＤコントローラ５０の提供する論理アドレス空間を、「５２０Ｂｙｔｅ×Ｎ（Ｎは正の整数）」のサイズとして認識する。【００６１】
ＳＳＤコントローラ５０は、例えば、１つのアレイブロックに、８ＢｙｔｅのＳＳＤ用保証コード１２０を付与する。すなわち、１つのＳＳＤブロックのサイズは、５２８Ｂｙｔｅとなる。【００６２】
図７において、ＣＷのデータ部のサイズは、ＳＣＳＩブロックの５１２ｂｙｔｅに、アレイ用保証コード８ｂｙｔｅと、ＳＳＤ用保証コード８ｂｙｔｅとを加算した５２８Ｂｙｔｅとなる。そして、ＣＷのサイズは、そのデータ部に任意のＥＣＣを加算したサイズとなる。ページ７２のサイズは、例えば、このＣＷ×Ｎ（Ｎは正の整数）となる。【００６３】
図８は、論理物理変換テーブル５７の構成例を示す。
論物変換テーブル５７は、データ項目として、ＬＢＡ５７０と、論理ページ番号５７１と、論理ページサイズ５７２と、ステータス５７３と、ブロック番号５７４と、ページ番号５７５と、ＣＷ位置５７６とを有する。【００６４】
ＬＢＡ５７０は、アレイコントローラ３２に提供するＬＢＡの開始位置を示す値である。ＬＢＡ５７０は、特定のサイズを持つ論理ページとして管理される。論理ページ番号５７１は、論理ページを一意に識別する値である。論理ページサイズ５７２は、論理ページのサイズを示す値である。【００６５】
ステータス５７３は、各論理ページが、「有効」、「無効」または「空き」のいずれであるかを示す値である。追記型のデバイスであるＳＳＤは、ライトデータを格納するための「空き」の領域を、リクラメーション処理により確保する必要がある。ステータス５７３は、リクラメーション処理を制御するために使用される。【００６６】
リクラメーション処理とは、或るページに格納されているデータを、別のページにコピーする処理である。ＳＳＤは、複数のページから構成されるブロックという単位でデータを消去する必要がある。そのため、ブロック内のデータを全て消去する前に、有効なデータを他のページにコピーする必要がある。このような場合に、リクラメーション処理が実行される。【００６７】
ブロック番号５７４、ページ番号５７５及びＣＷ位置５７６は、論理ページが、それぞれどのブロックの、どのページの、どのＣＷの位置に格納されているかを示す値である。【００６８】
図９は、ストレージシステムにおけるデータライト処理の一例を示すシーケンス図である。
ホストコンピュータ１０は、アレイコントローラ３２に対して、ライトコマンド及びライト用のデータを送信する（Ｓ１０）。【００６９】
アレイコントローラ３２は、ＳＣＳＩブロック（５１２Ｂｙｔｅ）毎にアレイ用保証コード（８Ｂｙｔｅ）を付与してアレイブロック（５２０Ｂｙｔｅ）を生成し、キャッシュメモリ３３に格納する（Ｓ１１）。【００７０】
アレイコントローラ３２は、ホストコンピュータ１０に対して、処理の完了通知を送信する（Ｓ１２）。また、アレイコントローラ３２は、アレイブロックを格納先のＳＳＤへ送信する（Ｓ１４）。【００７１】
アレイコントローラ３２から完了通知を受信したホストコンピュータ１０は、一連の処理を終了する（Ｓ１３）。【００７２】
一方、ＳＳＤコントローラ５０は、アレイコントローラ３２から受信したアレイブロック（５２０Ｂｙｔｅ）毎にＳＳＤ用保証コード（８Ｂｙｔｅ）を付与したＳＳＤブロック（５２８Ｂｙｔｅ）を生成し、キャッシュメモリ５６に格納する（Ｓ１５）。【００７３】
ＳＳＤコントローラ５０は、アレイコントローラ３２に対して、処理の完了通知を送信する（Ｓ１６）。また、ＳＳＤコントローラ５０は、論理物理変換テーブル５７を参照してライト対象のＦＭを選択する（Ｓ１８）。そして、ＳＳＤコントローラ５０は、ＣＷ毎にＥＣＣを付与し、ＦＭに格納する（Ｓ１９）。【００７４】
ＳＳＤコントローラ５０から処理の完了通知を受信したアレイコントローラ３２は、一連の処理を終了する（Ｓ１７）。【００７５】
以上の処理により、ホストコンピュータ１０から送信されたライト用のデータがＦＭに格納される。【００７６】
図１０は、ストレージシステムにおけるデータリード処理の一例を示すシーケンス図である。【００７７】
ホストコンピュータ１０は、アレイコントローラ３２に対して、データのリードコマンドを送信する（Ｓ２０）。【００７８】
アレイコントローラ３２は、リードコマンドを解釈し、データ格納先のＳＳＤコントローラ５０に対してデータ転送指示を送信する（Ｓ２１）。【００７９】
アレイコントローラ３２からデータ転送指示を受信したＳＳＤコントローラ５０は、ＦＭからデータをリードする。そして、ＳＳＤコントローラ５０は、そのリードしたデータをアレイコントローラ３２へ送信する（Ｓ２２）。Ｓ２２の処理は、図１１にて詳述する。【００８０】
アレイコントローラ３２は、ＳＳＤコントローラ５０からデータを受信する（Ｓ２３）。そして、アレイコントローラ３２は、アレイ保証コードを用いてデータの整合性をチェックする（Ｓ２４）。そして、アレイコントローラ３２は、アレイ用保証コードを取り外したＳＣＳＩブロックを、ホストコンピュータ１０へ送信する（Ｓ２５）。ホストコンピュータ１０は、アレイコントローラ３２からＳＣＳＩブロックを受信し、当該処理を終了する（Ｓ２６）。【００８１】
図１１は、ＳＳＤコントローラ５０におけるＳＳＤ内データリード処理（Ｓ２２）の詳細を示すフローチャートの例である。【００８２】
上位Ｉ／Ｆ５２は、上位装置であるアレイコントローラ３２から受信したＩ／Ｏ要求（ここではリード要求）をＣＰＵ５１へ通知する（Ｓ３０）。【００８３】
ＣＰＵ５１は、そのコマンドがリード要求であることを解釈する（Ｓ３１）。そして、ＣＰＵ５１は、ＦＭコントローラ５８に対して、リード要求の示すデータを含むＣＷを、キャッシュメモリ５６へ転送する指示を発行する（Ｓ３２）。Ｓ３２の処理は、図１２にて詳述する。【００８４】
ＣＰＵ５１は、ＦＭコントローラ５８からデータ転送の終了通知を受信する（Ｓ３３）。そして、ＣＰＵ５１は、上位Ｉ／Ｆ５２に対して、キャッシュメモリ５６内のデータをアレイコントローラ３２に転送するよう指示する（Ｓ３４）。【００８５】
データ転送指示を受信した上位Ｉ／Ｆ５２は、ＳＳＤ用保証コードを用いてアレイブロックの整合性をチェックする（Ｓ３５）。そして、上位Ｉ／Ｆ５２は、ＳＳＤ用保証コードを取り外したアレイデータを、上位装置であるアレイコントローラ３２へ転送し（Ｓ３６）、当該処理を終了する（ＥＮＤ）。【００８６】
図１２は、ＦＭコントローラにおけるデータリード処理（Ｓ３２）の詳細を示すフローチャートの例である。【００８７】
ＣＰＵ５１は、リードコマンドに含まれるＬＢＡをキーとして、論理物理変換テーブル５７から、リード対象のデータが格納されているＦＭ及びページを特定する（Ｓ４０）。【００８８】
ＣＰＵ５１は、リード範囲を「ページ単位」とするか、それとも「ＣＷ単位」とするかを判定する（Ｓ４１）。【００８９】
リード要求のサイズがページのサイズと等しい場合、ＣＰＵ５１は、リード範囲を「ページ単位」と判定する（Ｓ４１：ページ単位）。そして、ＣＰＵ５１は、ＦＭコントローラ５８に、ページ単位（全ＣＷ）のリードを指示する（Ｓ４２）。ページ単位のリードとは、ページに格納されている全てのＣＷをリードすることである。ＦＭコントローラ５８は、ページ単位のリード指示を受信した場合、ＦＭから全ＣＷをリードし（Ｓ４５）、当該処理を終了する（ＥＮＤ）。Ｓ４５の処理は、図１３にて詳述する。【００９０】
リード要求のサイズがページのサイズよりも小さい場合、ＣＰＵ５１は、リード範囲を「ＣＷ単位」と判定する（Ｓ４１：ＣＷ単位）。そして、ＣＰＵ５１は、論理物理変換テーブル５７を参照し、リード対象のＣＷを決定する（Ｓ４３）。そして、ＣＰＵ５１は、ＦＭコントローラ５８へ、ＣＷ単位のリード（例えば、ＣＷ×Ｎ個のリード）を指示する（Ｓ４４）。ＦＭコントローラ５８は、ＣＰＵ５１からＣＷ単位のリード指示を受信した場合、ＦＭからその指定されたＣＷをリードし（Ｓ４５）、当該処理を終了する（ＥＮＤ）。【００９１】
図１３は、ＦＭコントローラがＦＭからデータをリードする処理（Ｓ４５）の詳細を示すフローチャートの例である。【００９２】
ＦＭコントローラ５８は、ＣＰＵ５１からの指示を解釈し、リード対象のＦＭ（以下「対象ＦＭ」という）を選択する（Ｓ５０）。つまり、対象ＦＭ５９に対してセレクト信号を送信する。【００９３】
ＦＭコントローラ５８は、対象ＦＭ５９に対して、ページ７２からページバッファ７１へのデータ転送のコマンドを送信する（Ｓ５１）。そのコマンドを受信したＦＭ５９は、ＣｈｉｐＢｕｓｙ処理中の状態に遷移する。そして、ＦＭ５９は、所定時間の経過後、ＣｈｉｐＢｕｓｙ処理の終了通知を、ＦＭコントローラ５８へ送信する（Ｓ５２）。【００９４】
ＦＭコントローラ５８は、ページバッファ７１から必要な数のＣＷを取得する（Ｓ５３）。そして、ＦＭコントローラ５８におけるＥＣＣ回路６１は、その取得したＣＷから、ＥＣＣを用いてエラー訂正を行ったデータ部を抽出する（Ｓ５４）。【００９５】
ＦＭコントローラ５８におけるＤＩＦ回路６０は、ＳＳＤ用保証コードを用いてＳＳＤブロックの整合性をチェックする（Ｓ５５）。【００９６】
ＦＭコントローラ５８は、ＳＳＤブロックをキャッシュメモリ５６へ転送する（Ｓ５６）。そして、ＦＭコントローラ５８は、ＣＰＵ５１に処理の完了通知を送信し（Ｓ５７）、当該処理を終了する。【００９７】
図１４は、ストレージシステムの構成要素と転送データのサイズとの関係の一例を示す。
図１４は、ホストコンピュータ１０から１つのＳＣＳＩブロック（５１２Ｂｙｔｅ）のデータリード要求が発生し、ＳＳＤ４０では１つのＳＳＤブロック（５２８Ｂｙｔｅ）に１つのＥＣＣが付与され、１つのＣＷのサイズが「５２８Ｂｙｔｅ＋ＥＣＣのサイズ」となっている場合の例である。【００９８】
まず、ページ７２からページバッファ７１へは、１つのページのデータが転送される。１つのページは、例えば、Ｎ個（Ｎは正の整数）のＣＷで構成される。【００９９】
次に、ページバッファ７１からＥＣＣ回路６１へは、１つのＣＷが転送される。１つのＣＷは、例えば、１つのＳＳＤブロック（５２８Ｂｙｔｅ）＋ＥＣＣ（所定のサイズ）で構成される。【０１００】
ＥＣＣ回路６１でＥＣＣは取り外され、ＥＣＣ回路６１からキャッシュメモリ５６へは、１つのＳＳＤブロック（５２８Ｂｙｔｅ）が転送される。【０１０１】
次に、キャッシュメモリ５６から上位Ｉ／Ｆ５２へは、ＳＳＤブロック（５２８Ｂｙｔｅ）が転送される。上位Ｉ／Ｆ５２のＤＩＦ回路５３でＳＳＤ用保証コード（８Ｂｙｔｅ）が取り外され、上位Ｉ／Ｆ５２からアレイコントローラ３２へは、アレイブロック（５２０Ｂｙｔｅ）が転送される。【０１０２】
次に、アレイコントローラ３２のＤＩＦ回路３５でアレイ用保証コード（８Ｂｙｔｅ）が取り外され、アレイコントローラ３２からホストコンピュータ１０へは、ＳＣＳＩブロック（５１２Ｂｙｔｅ）が転送される。【０１０３】
上述に示すように、第１の実施例では、ページバッファ７１とキャッシュメモリ５６との間で、１つのＳＳＤブロックが２つのＣＷに分割されない格納フォーマットを示した。これにより、余分なデータ転送の発生を防止することができる。よって、ＳＳＤの応答速度の低下を防ぐことができる。【０１０４】
上述の方法は、ＦＭコントローラの指定する任意のサイズのデータをＦＭから転送できる他の方法であってもよい。ページ格納フォーマットも、ＳＳＤの接続構成等に応じて、例えば、以下の図１５のように変更してもよい。【０１０５】
図１５は、ＦＭのデータ格納フォーマットの変形例を示す。
ページ７２には、ＣＷ単位でデータが格納される。しかし、ＣＷのサイズの倍数が必ずしもページのサイズと一致するとは限らない。この場合、ページ７２のサイズとなるまでの端数部分を、「０」又は「ＮＵＬＬ」等のパディングデータ８９で埋めてもよい。【０１０６】
ＣＷのデータ部９０には、１以上のＳＳＤブロック３００が格納されてよい。ＳＳＤブロック３００は、ＳＣＳＩブロックと、アレイ用保証コードと、ＳＳＤ用保証コードとによって構成されてもよい。アレイコントローラ３２は、アレイ用保証コードを付与しなくても良い。ＳＳＤコントローラ５０は、ＳＳＤ用保証コードを付与しなくてもよい。【０１０７】
アレイコントローラ３２またはＳＳＤコントローラ５０のどちらか一方のみが保証コードを付与する場合は、上述の説明において、１つのＳＳＤブロック３００のサイズを「５２０Ｂｙｔｅ」と読み替えればよい。アレイコントローラ３２またはＳＳＤコントローラ５０のどちらも保証コードを付与しない場合は、上述の説明において、１つのＳＳＤブロック３００のサイズを「５１２Ｂｙｔｅ」と読み替えればよい。【０１０８】
上述の説明において、保証コードのサイズは「８Ｂｙｔｅ」以外の値であってもよい。その場合、保証コードのサイズに応じて、本実施例におけるＳＳＤブロック３００のサイズとＣＷのデータ部９０のサイズを読み替えればよい。【０１０９】
ＳＣＳＩブロック１００のサイズは「５１２Ｂｙｔｅ」以外の値であってもよい。ＳＣＳＩブロック１００のサイズは、通信プロトコルの規定する最小データ転送サイズ以上の任意のサイズに応じて変更されてよい。【０１１０】
ＳＳＤ４０がホストコンピュータ１０に直接接続されている場合であっても、通信プロトコルまたは保証コードの有無に応じて、ＳＳＤブロック３００のサイズとＣＷのデータ部９０のサイズに応じて変更されてもよい。
【実施例２】
【０１１１】
第２の実施例では、ＳＳＤ４０が内部でデータの圧縮を行う場合について説明する。【０１１２】
図１６は、第２の実施例に係るストレージシステムの構成とデータブロックの構成との対応関係の例を示す。
第２の実施例は、第１の実施例と比較して、ＳＳＤ４０が、データの圧縮伸張を行う圧縮伸長回路５４を有する点が相違する。したがって、第２の実施例は、第１の実施例と比較して、キャッシュメモリ５６とＦＭ５９との間でＳＳＤブロックを転送するシーケンスにおいて相違する。ホストコンピュータ１０とアレイコントローラ３２との間のデータ転送については、第１の実施例と同じであるため、ここでの説明を省略する。【０１１３】
以下、第２の実施例に係るストレージシステムがデータをライトする処理の一例を説明する。
１）ＳＳＤコントローラ５０は、アレイコントローラ３２にて生成されたアレイブロック２００に、ＳＳＤ用保証コード１２０を付与し、ＳＳＤブロック３００を生成する。そして、ＳＳＤコントローラ５０は、そのＳＳＤブロック３００をキャッシュメモリ５６に格納する。【０１１４】
２）ＳＳＤコントローラ５０は、キャッシュメモリ５６に格納したＮ個のＳＳＤブロックを、圧縮伸長回路５４を用いて圧縮する。この圧縮したデータを、圧縮データ部４１０という。【０１１５】
３）圧縮伸長回路５４は、圧縮データ部４１０に、パディングデータ４２０及び圧縮データ部用の保証コード（以下「圧縮用保証コード」という）４３０とを付与し、圧縮ブロック４００を生成する。パディングデータ４２０を付与する理由は、次のとおりである。圧縮データ部４１０のサイズは、データの圧縮率によって変化し得る。圧縮用保証コード４３０は、通常固定サイズである。よって、圧縮データ部４１０と圧縮用保証コード４３０とのサイズの合計が、所定の圧縮ブロック４００に満たない場合が発生し得る。そこで、圧縮ブロック４００のサイズに満たない部分をパディングデータ４２０で埋めている。圧縮データ部４１０のサイズが圧縮ブロック４００のサイズよりも大きくなってしまった場合には、圧縮データ部４１０のサイズが圧縮ブロック４００のサイズよりも小さくなるように、圧縮対象とするＳＳＤブロックの数を減らせばよい。【０１１６】
４）ＳＳＤコントローラ５０は、その圧縮ブロック４００を、キャッシュメモリ５６へ転送する。ＳＳＤコントローラ５０は、ＥＣＣ回路６１を用いて、圧縮ブロック４００にＥＣＣ９１を付与し、ＣＷを生成する。そして、ＳＳＤコントローラ５０は、ＦＭに対して、その生成したＣＷのライトを指示する。【０１１７】
上述に示すようにデータフォーマットを構成することにより、１つの圧縮データ部４１０が２つのＣＷに分割されてＦＭに格納されることを防止できる。つまり、ＳＳＤブロック３００は、データ圧縮後であっても１つのＣＷに含まれる。したがって、ＳＳＤブロックをリードする場合、部分読みによってＦＭから１つのＣＷをリードし、そのＣＷに格納されていた圧縮ブロック４００を伸長することにより、１つのＳＳＤブロックを抽出することができる。【０１１８】
第２の実施例によれば、比較例であれば、圧縮データ部４１０が２つのＣＷに分割されて格納された場合に発生する可能性のあった余分なデータ転送及び圧縮伸長処理を防止することができる。よって、第２の実施例によれば、応答速度の低下を防止することができる。また、データリード時に、ＦＭコントローラ５８のＤＩＦ回路６０において、圧縮用保証コード４３０を用いて圧縮データ部の整合性がチェックされるので、リードデータに対する信頼性も向上する。【０１１９】
図１７は、第２の実施例におけるＳＳＤ内データリード処理（Ｓ２２）の詳細を示すフローチャートの例である。【０１２０】
図１７は、第１の実施例に係る図１１と比較して、Ｓ３３とＳ３４との間にデータの伸長処理（Ｓ８０〜Ｓ８２）が追加された点が相違する。以下では、Ｓ３３とＳ３４との間の処理について説明し、それ以外の図１１と同様の処理については説明を省略する。【０１２１】
ＣＰＵ５１は、ＦＭコントローラ５８からデータ転送の完了通知を受信し（Ｓ３３）、圧縮伸長回路５４に対して圧縮ブロックの伸長処理を指示する（Ｓ８０）。【０１２２】
ＣＰＵ５１から伸長処理を指示された圧縮伸長回路５４は、圧縮ブロックの伸長処理を実行し、処理の完了通知をＣＰＵ５１へ送信する（Ｓ８１）。Ｓ８１の処理は、図１８で詳述する。【０１２３】
ＣＰＵ５１は、圧縮ブロック伸長処理の完了通知を受信し（Ｓ８２）、Ｓ３４の処理に進む。以降の処理は、図１１と同様であるので説明を省略する。【０１２４】
図１８は、第２の実施例における圧縮ブロック伸長処理（Ｓ８１）の詳細を示すフローチャートの例である。【０１２５】
圧縮伸長回路５４は、ＣＰＵ５１からの指示に従い、キャッシュメモリ５６から伸長対象の圧縮ブロック４００を取得する（Ｓ９０）。【０１２６】
圧縮伸張回路５４に係るＤＩＦ回路５５は、圧縮用保証コード４３０を用いて、圧縮データ部の整合性をチェックする（Ｓ９１）。【０１２７】
圧縮伸張回路５４は、圧縮データ部を伸長し、１以上のＳＳＤブロックを抽出する（Ｓ９２）。このとき、圧縮伸張回路５４は、パディングデータ４２０を削除する。【０１２８】
圧縮伸張回路５４は、その抽出したＳＳＤブロックをキャッシュメモリ５６へ転送する（Ｓ９３）。そして、圧縮伸張回路５４は、ＣＰＵ５１に対して伸長処理の完了を通知し（Ｓ９４）、当該処理を終了する（ＥＮＤ）。【０１２９】
上述において、圧縮伸張回路５４は、圧縮用保証コード４３０を付与せずに、その部分をパディングデータ４２０で埋めてもよい。【０１３０】
実施例１、２のいずれにおいても、最終記憶媒体として扱われるＳＳＤ４０を一例として説明したが、キャッシュメモリとして用いられるＳＳＤ３４において、同様の構成を適用してもよい。【０１３１】
上述した実施例は、本発明の説明のための例示であり、本発明の範囲をそれらの実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【０１３２】
１…ストレージシステム  １０…ホストコンピュータ  ３０…ストレージ装置  ３１…アレイコントローラデバイス  ４０…ＳＳＤ
【図１】
2015029230.tif 000003
【図２】
2015029230.tif 000004
【図３】
2015029230.tif 000005
【図４】
2015029230.tif 000006
【図５】
2015029230.tif 000007
【図６】
2015029230.tif 000008
【図７】
2015029230.tif 000009
【図８】
2015029230.tif 000010
【図９】
2015029230.tif 000011
【図１０】
2015029230.tif 000012
【図１１】
2015029230.tif 000013
【図１２】
2015029230.tif 000014
【図１３】
2015029230.tif 000015
【図１４】
2015029230.tif 000016
【図１５】
2015029230.tif 000017
【図１６】
2015029230.tif 000018
【図１７】
2015029230.tif 000019
【図１８】
2015029230.tif 000020
【手続補正書】
【提出日】平成28年9月23日(2016.9.23)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
上位装置に接続される記憶装置であって、
データをライトする単位であるページを複数個有する記憶媒体と、
前記記憶媒体に対し上位装置から要求されたデータのリード及びライトを制御する媒体コントローラと
を備え、
前記記憶媒体は、データを格納するページバッファを有し、
前記媒体コントローラは、
前記上位装置から受信したデータブロックを含む第１データブロックを生成し、
１以上の第１データブロックを分割することなく含む所定サイズの第２データブロックを生成し、
前記第２データブロックに訂正用コードを付与した第３データブロックを生成して前記記憶媒体のページバッファに格納し、
前記記憶媒体は、
前記ページバッファに格納された１以上の前記第３データブロックを前記複数のページのうちのライト先のページへライトし、
前記第２データブロックは、１以上の圧縮された第１データブロックである圧縮データ部と、前記圧縮データ部の保証コードである圧縮用保証コードとで構成されたデータ群を含み、
前記圧縮用保証コードは、前記圧縮データ部の生成後に前記媒体コントローラにより付与されたコードである
記憶装置。
【請求項２】
前記１以上の第３データブロックの各々は、ＣＷ（Code Word）であり、
前記第２データブロックは、１つのＣＷに収まるサイズであり、
ＣＷサイズは、ページサイズより小さく、
前記媒体コントローラは、前記記憶媒体の論理アドレスと１以上のＣＷの各々のＣＷ位置を含んだ物理アドレスとの対応関係を管理する論理物理変換情報を参照し、リード対象の論理アドレスに対応した各ＣＷ位置からＣＷ単位でデータをリードする、
請求項１に記載の記憶装置。
【請求項３】
前記第２データブロックは、前記データ群のサイズが前記所定サイズ未満の場合に、そのデータ群のサイズとの合計が前記所定サイズとなるよう前記所定サイズに満たない部分に追加されたパディングデータを含む
請求項１又は２に記載の記憶装置。
【請求項４】
前記圧縮データ部は、前記データ群のサイズが前記所定サイズ以下となる範囲で最大数の圧縮された第１データブロックを含む
請求項１乃至３のうちのいずれか１項に記載の記憶装置。
【請求項５】
前記所定サイズは、前記第１のデータブロックのサイズのＮ倍（Ｎは正の整数）である、
請求項１乃至４のうちのいずれか１項に記載の記憶装置。
【請求項６】
連続した２以上の第１のデータブロックの合計サイズが、前記所定サイズを超える場合、或る第２のデータブロックが、前記連続した２以上の第１のデータブロックのうちの末端の第１のデータブロック以外のデータブロックであるデータ部と、そのデータ部のサイズとの合計が前記所定のサイズになるよう追加されたパディングデータとで構成され、前記或る第２のデータブロックの次の第２のデータブロックのデータ部における先頭が、前記末端の第１のデータブロックである、
請求項１乃至５のうちのいずれか１項に記載の記憶装置。
【請求項７】
ホストコンピュータに接続された前記上位装置であるストレージコントローラと、
前記ストレージコントローラに接続されたＲＡＩＤグループと
を有し、
前記ＲＡＩＤグループが、複数の記憶デバイスで構成されており、
各記憶デバイスが、前記媒体コントローラ及び前記記憶媒体を含み、
前記ストレージコントローラは、前記ホストコンピュータから受信したデータに基づくデータブロックとそのデータブロックの保証用コードとを含んだデータユニットを、前記複数の記憶デバイスのうちのそのデータユニットの送信先の記憶デバイスに送信し、
前記第１データブロックは、前記ストレージコントローラから受信したデータユニットと、当該受信したデータユニットに対して付加された保証コードとを含む
請求項１乃至６のうちのいずれか１項に記載の記憶装置。
【請求項８】
前記記憶媒体は、
前記ページからリードしたデータを一時的に前記ページバッファに格納し、
前記媒体コントローラは、
前記記憶媒体のページバッファに格納されたページのデータから、１以上の前記第３データブロックを取得し、
その取得した第３データブロックから前記訂正用コードを用いて訂正処理された前記第２データブロックを抽出し、
その抽出した第２データブロックから第１データブロックを抽出し、
その抽出した第１データブロックに含まれるデータブロックを前記上位装置に送信する
請求項１乃至７のうちのいずれか１項に記載の記憶装置。
【請求項９】
データをライトする単位であるページを複数個有する記憶媒体を備える記憶装置において、
上位装置から受信したデータブロックを含む第１データブロックを生成し、
１以上の第１データブロックを分割することなく含む所定サイズの第２データブロックを生成し、
前記第２データブロックは、１以上の圧縮された第１データブロックである圧縮データ部と、その圧縮データ部の保証コードである圧縮用保証コードとで構成されたデータ群を含み、
前記圧縮用保証コードは、前記圧縮データ部の生成後に付与されたコードであり、
前記第２データブロックに訂正用コードを付与した第３データブロックを生成し、
前記第３データブロックを、データを格納するページバッファに格納し、
前記ページバッファに格納された１以上の前記第３データブロックを、前記記憶媒体の前記複数のページのうちのライト先のページへライトする
データ制御方法。
【国際調査報告】
2015029230.tif 000021
2015029230.tif 000022
2015029230.tif 000023
2015029230.tif 000024