(57)【特許請求の範囲】
【請求項１】
記憶媒体とその記憶媒体に格納するデータを圧縮する媒体コントローラとをそれぞれが有する複数の記憶デバイスと、
ホスト計算機から第１のデータを伴う第１のライト要求を受信し、前記複数の記憶デバイスのうち、前記第１のライト要求に従うライト先の記憶デバイスに、前記第１のデータに基づく第２のデータを伴うライトコマンドであって前記第２のデータの圧縮要否を示す圧縮要否情報を含んだ第１のライトコマンドを送信するストレージコントローラと
を備え、
前記ライト先の記憶デバイスの媒体コントローラは、前記ストレージコントローラから前記第１のライトコマンドを受信し、前記第１のライトコマンドに含まれる圧縮要否情報が圧縮不要を示している場合、前記第２のデータを圧縮せずに前記記憶媒体に格納し、
前記複数の記憶デバイスの各々は、
前記ストレージコントローラから受信したライトコマンド内の圧縮要否情報が圧縮要を示していればそのライトコマンドに付随するデータを圧縮して前記記憶媒体にライトする同期圧縮モードと、そのライトコマンド内の圧縮要否情報が圧縮要を示していてもそのライトコマンドに付随するデータを圧縮せずに前記記憶媒体にライトし、後にそのデータを前記記憶媒体からリードし圧縮して前記記憶媒体にライトする非同期圧縮モードと、を有しており、
前記ストレージコントローラは、
前記ライト先の記憶デバイスに対して、前記第２のデータを前記同期圧縮モード又は前記非同期圧縮モードの何れで圧縮すべきかを指示する
ストレージシステム。
【請求項２】
前記複数の記憶デバイスの各々における媒体コントローラは、前記ストレージコントローラからのライトコマンドを受けること無しに前記記憶媒体の或る領域に保持されているデータを前記記憶媒体の別の領域に移動する内部移動処理を行うようになっており、前記記憶媒体に格納されているデータのうち、非同期圧縮モードに対応したデータを移動対象のデータとし、
前記内部移動処理において、非同期圧縮モードに対応したデータの移動は、前記記憶媒体からリードされ圧縮されて前記記憶媒体にライトされることである
請求項１に記載のストレージシステム。
【請求項３】
前記第１のライトコマンドには、前記同期圧縮モード又は前記非同期圧縮モードの何れで圧縮すべきかを示す圧縮モード情報が含まれており、
前記ライト先の記憶デバイスは、
前記第１のライトコマンドに含まれている前記圧縮モード情報が示す圧縮モードに従い、前記第２のデータを圧縮する
請求項１に記載のストレージシステム。
【請求項４】
前記ストレージコントローラは、
前記第２のデータのサイズが閾値以上である場合、前記圧縮モード情報を、前記同期圧縮モードを示す情報とする
請求項３に記載のストレージシステム。
【請求項５】
記憶媒体とその記憶媒体に格納するデータを圧縮する媒体コントローラとをそれぞれが有する複数の記憶デバイスと、
ホスト計算機に対して論理ボリュームを提供し、前記ホスト計算機から第１のデータと前記論理ボリュームにおける前記第１のデータのライト先の領域のアドレスとを伴う第１のライト要求を受信し、前記複数の記憶デバイスのうち、前記第１のライト要求に従う前記ライト先の領域又は前記ライト先の領域に割り当てられた領域の基になっているライト先の記憶デバイスに、前記第１のデータに基づく第２のデータを伴うライトコマンドであって前記第２のデータの圧縮要否を示す圧縮要否情報を含んだ第１のライトコマンドを送信するストレージコントローラと
を備え、
前記ストレージコントローラは、前記ホスト計算機から設定された前記論理ボリュームの属性に基づいて圧縮要否を判定し、前記論理ボリュームの属性に暗号化又は圧縮化が設定されている場合、圧縮不要を示す圧縮要否情報を前記第１のライトコマンドに含め、
前記ライト先の記憶デバイスの媒体コントローラは、前記ストレージコントローラから前記第１のライトコマンドを受信し、前記第１のライトコマンドに含まれる圧縮要否情報が圧縮不要を示している場合、前記第２のデータを圧縮せずに前記記憶媒体に格納する
ストレージシステム。
【請求項６】
前記第１のライトコマンドは、前記第２のデータを含む複数のデータのライトを指示するライトコマンドであって、前記複数のデータの各々について圧縮要否情報を含む
請求項５に記載のストレージシステム。
【請求項７】
前記ライト先の記憶デバイスは、
前記第１のライトコマンドに含まれる複数の圧縮要否情報の何れかが圧縮必要を示す場合、前記第１のライトコマンドに付随する複数のデータのうち圧縮必要である１又は２以上のデータをまとめて圧縮して前記記憶媒体にライトする
請求項６に記載のストレージシステム。
【請求項８】
前記記憶媒体が、フラッシュメモリである
請求項５乃至７の何れか１項に記載のストレージシステム。
【請求項９】
記憶媒体とその記憶媒体に格納するデータを圧縮する媒体コントローラとをそれぞれが有する複数の記憶デバイスと、ストレージコントローラとを備えるストレージシステムにおけるデータライト方法であって、
ストレージコントローラが、ホスト計算機から第１のデータを伴う第１のライト要求を受信し、前記複数の記憶デバイスのうち、前記第１のライト要求に従うライト先の記憶デバイスに、前記第１のデータに基づく第２のデータを伴うライトコマンドであって前記第２のデータの圧縮要否を示す圧縮要否情報を含んだ第１のライトコマンドを送信し、
前記ライト先の記憶デバイスの媒体コントローラが、前記ストレージコントローラから前記第１のライトコマンドを受信し、前記第１のライトコマンドに含まれる圧縮要否情報が圧縮不要を示している場合、前記第２のデータを圧縮せずに前記記憶媒体に格納し、
前記複数の記憶デバイスの各々は、
前記ストレージコントローラから受信したライトコマンド内の圧縮要否情報が圧縮要を示していればそのライトコマンドに付随するデータを圧縮して前記記憶媒体にライトする同期圧縮モードと、そのライトコマンド内の圧縮要否情報が圧縮要を示していてもそのライトコマンドに付随するデータを圧縮せずに前記記憶媒体にライトし、後にそのデータを前記記憶媒体からリードし圧縮して前記記憶媒体にライトする非同期圧縮モードと、を有しており、
前記ストレージコントローラは、
前記ライト先の記憶デバイスに対して、前記第２のデータを前記同期圧縮モード又は前記非同期圧縮モードの何れで圧縮すべきかを指示する
データライト方法。
【請求項１０】
記憶媒体とその記憶媒体に格納するデータを圧縮する媒体コントローラとをそれぞれが有する複数の記憶デバイスと、ストレージコントローラとを備えるストレージシステムにおけるデータライト方法であって、
ストレージコントローラが、ホスト計算機に対して論理ボリュームを提供し、前記ホスト計算機から第１のデータと前記論理ボリュームにおける前記第１のデータのライト先の領域のアドレスとを伴う第１のライト要求を受信し、前記複数の記憶デバイスのうち、前記第１のライト要求に従う前記ライト先の領域又は前記ライト先の領域に割り当てられた領域の基になっているライト先の記憶デバイスに、前記第１のデータに基づく第２のデータを伴うライトコマンドであって前記第２のデータの圧縮要否を示す圧縮要否情報を含んだ第１のライトコマンドを送信し、
前記ストレージコントローラは、前記ホスト計算機から設定された前記論理ボリュームの属性に基づいて圧縮要否を判定し、前記論理ボリュームの属性に暗号化又は圧縮化が設定されている場合、圧縮不要を示す圧縮要否情報を前記第１のライトコマンドに含め、
前記ライト先の記憶デバイスの媒体コントローラは、前記ストレージコントローラから前記第１のライトコマンドを受信し、前記第１のライトコマンドに含まれる圧縮要否情報が圧縮不要を示している場合、前記第２のデータを圧縮せずに前記記憶媒体に格納する
データライト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム内の記憶デバイスにおけるデータの圧縮の技術に関する。
【背景技術】
【０００２】
ストレージシステムに格納されるデータ（例えば、コンテンツデータ）量は増大の一途をたどっている。ストレージシステムに格納可能なデータ量を増やすために多数の記憶デバイスを搭載すると、ストレージシステムのコストが増大するため、ユーザにとって好ましくない。そこで、データを圧縮して格納することにより、格納可能なデータ量を実質的に増大させる技術がある。【０００３】
近年、フラッシュメモリを記憶媒体として用いた記憶デバイス（例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ））が、ストレージシステムに利用されている。ＳＳＤは、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）と比較して高速な入出力が可能である。しかし、ＳＳＤは、ＨＤＤと比較してビットコストが高価であるため、データを圧縮して格納することにより、ビットコストを低下させる技術が望まれている。データの圧縮は、ストレージシステムのコントローラや記憶デバイスによって行われる。ストレージシステムのコントローラは、データの入出力処理やコピー処理など、システム全体を制御しているため、ストレージシステムのコントローラに圧縮処理を実行させるとシステム全体の性能低下の要因となる。そこで、記憶デバイスがデータ圧縮を実行する技術がある（特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】ＵＳ２０１１／０３２０９１５
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、圧縮してもほとんどデータサイズの変化しない（圧縮効果の小さい）データが存在する。特許文献１に記載の圧縮機能を有するＳＳＤは、受信したデータを一旦すべて圧縮し、データの圧縮効果が小さい場合、圧縮していない状態のデータを格納する。ＳＳＤ単体では、データを実際に圧縮して圧縮後のデータサイズを確認してからでないと圧縮効果があったか否かを判断することができないからである。圧縮効果の小さいデータを圧縮する処理は、無駄なオーバーヘッドであり、性能低下の原因となる。【０００６】
そこで、本発明の目的は、ストレージシステムにおいて、ストレージシステムのコントローラと記憶デバイスが連携することにより、圧縮処理によって発生し得るストレージシステムの性能低下を低減することにある。
【課題を解決するための手段】
【０００７】
本発明の一実施例に係るストレージシステムは、記憶媒体とその記憶媒体にライトするデータの圧縮機能を有する媒体コントローラとをそれぞれが有する複数の記憶デバイスを備える。ストレージシステムは、ホスト計算機から第１のデータの第１のライト要求を受信し、複数の記憶デバイスのうち、第１のライト要求に従うライト先の記憶デバイスに、第１のデータに基づく第２のデータのライトコマンドであって第２のデータの圧縮要否を示す圧縮要否情報を含んだ第１のライトコマンドを送信するストレージコントローラを備える。ライト先の記憶デバイスの媒体コントローラは、ストレージコントローラから第１のライトコマンドを受信し、第１のライトコマンドに含まれる圧縮要否情報が圧縮不要を示している場合、第２のデータを圧縮せずに記憶媒体に格納する。
【発明の効果】
【０００８】
本発明によれば、ビットコストを低下させるための圧縮処理により発生し得るストレージの性能低下を低減させることができる。
【図面の簡単な説明】
【０００９】
【図１】ストレージシステムのハードウェア構成例を示すブロック図である。
【図２】仮想ボリュームと論理ボリュームとの関係性を説明するための模式図である。
【図３】ＦＭＰＫ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  Ｐａｃｋａｇｅ）のハードウェア構成例を示すブロック図である。
【図４】ＦＭＰＫに圧縮データが格納されている状態の一例を示す模式図である。
【図５】ストレージコントローラの有する機能の一例を示すブロック図である。
【図６】仮想−論理ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）マッピングテーブルの構成例を示す。
【図７】ボリューム管理テーブルの構成例を示す。
【図８】プール管理テーブルの構成例を示す。
【図９】論理−仮想ＬＢＡマッピングテーブルの構成例を示す。
【図１０】ライトコマンドのフォーマットの構成例を示す。
【図１１】仮想ボリューム作成部の処理例を示すフローチャートである。
【図１２】ストレージコントローラにおけるライト処理部の処理例を示すフローチャートである。
【図１３】ＦＭＰＫコントローラの有する機能の一例を示すブロック図である。
【図１４】論理−物理ページマッピングテーブルの構成例を示す。
【図１５】物理−論理ページマッピングテーブルの構成例を示す。
【図１６】ＦＭＰＫコントローラにおけるコマンド処理部の処理例を示すフローチャートである。
【図１７】ＦＭＰＫコントローラにおいて非同期圧縮モードでデータを圧縮してライトする処理例を示すフローチャートである。
【図１８】実施例２におけるストレージシステムの処理概要を示す模式図である。
【図１９】一括送信用ライトコマンドのフォーマットの構成例を示す。
【図２０】ストレージコントローラにおいて一括送信用ライトコマンドを生成する処理の一例を示すフローチャートである。
【図２１】ＦＭＰＫコントローラにおいて一括送信用ライトデータを受信した場合の処理例を示すフローチャートである。
【図２２】圧縮モード切替コマンドを導入したストレージコントローラにおける処理の一例を示すフローチャートである。
【図２３】圧縮オプションに圧縮モードのフラグを追加したストレージコントローラにおける処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、ストレージコントローラ２０からＦＭＰＫ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  Ｐａｃｋａｇｅ）３０に対して、ＦＭＰＫ３０における圧縮要否を伝えられるようにライトコマンドを拡張したストレージシステムの実施例について、図面を参照しながら説明する。圧縮効果の大小は、データパターンに依存する。例えば、暗号化されたデータはデータパターンがランダムになるため、圧縮効果は小さい場合が多い。通常、ストレージコントローラは暗号化の情報を保持しているが、記憶デバイスはこのような情報を持たない。このため、ストレージコントローラが保持している情報に基づいて、記憶デバイスに圧縮要否を通知することで、不要な圧縮処理のオーバーヘッドを削減することができる。
【実施例１】
【００１１】
図１は、ストレージシステム１０のハードウェア構成例を示すブロック図である。
ホスト計算機１１と、ストレージシステム１０とは、通信ネットワーク１３を通じて双方向にデータを送受信できる。通信ネットワーク１３は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、またはこれらの組み合わせで構成されてよい。【００１２】
管理装置１２と、ストレージシステム１０とは、所定の通信線１４を通じて双方向にデータを送受信できる。通信線１４に代えて、通信ネットワーク１３又は別の通信ネットワークが採用されてよい。管理装置１２と、ストレージコントローラ２０の備えるＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）とが通信線１４によって接続されてもよい。【００１３】
ホスト計算機１１は、計算機であり、ストレージシステム１０にライト要求及びリード要求を送信することができる。ストレージコントローラ２０は、そのライト要求又はリード要求を受信し、受信したライト要求又はリード要求に従い、データをライト又はリードすることができる。【００１４】
管理装置１２は、計算機であり、ストレージシステム１０を管理する。管理装置１２は、例えば、キーボード及びマウス等の入力Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）と、ディスプレイ及びスピーカ等の出力Ｉ／Ｆと、を備える。管理者は、例えば、管理装置１２を通じて、ストレージシステム１０にＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループ２９を構成したり、ＲＡＩＤレベルを設定したりすることができる。ストレージシステム１０は、管理装置１２から設定されたＲＡＩＤレベルに従いデータを記憶するＲＡＩＤグループ２９を構成する。【００１５】
ストレージシステム１０は、複数の記憶デバイス（ＦＭＰＫ３０及びＨＤＤ５０等）と、それら複数の記憶デバイスに接続されたストレージコントローラ２０とを有する。【００１６】
ストレージコントローラ２０は、ストレージシステム１０の動作を制御する。ストレージコントローラ２０は、例えば、Ｉ／Ｏポート２２と、メモリ２３と、ＮＩＣ２６と、ドライブポート２４と、それらに接続されたＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１とを有する。これらの要素２１〜２４、２６は、双方向にデータ送受信可能な内部バス２５で接続されている。【００１７】
Ｉ／Ｏポート２２は、ストレージコントローラ２０を通信ネットワーク１３に接続するためのＩ／Ｆである。ストレージコントローラ２０は、Ｉ／Ｏポート２２を通じて、ホスト計算機１１とデータを送受信する。ストレージコントローラ２０は、複数のＩ／Ｏポート２２を有してもよい。【００１８】
ドライブポート２４は、ストレージコントローラ２０に、ＦＭＰＫ３０及びＨＤＤ５０等の記憶デバイスを接続するためのＩ／Ｆである。ドライブポート２４は、例えば、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＳＡＴＡ（ＳｅｒｉａｌＡＴＡ）及び／又はＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）に準拠したＩ／Ｆである。ストレージコントローラ２０は、複数のドライブポート２４を備えてもよい。ドライブポート２４には、複数のＦＭＰＫ３０及び複数のＨＤＤ５０が接続されてもよい。【００１９】
ＣＰＵ２１は、ストレージコントローラ２０を制御する。ＣＰＵ２１は、メモリ２３から読み出したコンピュータプログラム（以下「プログラム」という）を実行し、ストレージコントローラ２０の有する様々な機能を実現する。ＣＰＵ２１は、所定の処理に特化した演算回路を備えてもよい。【００２０】
メモリ２３は、プログラム及びデータ等を記憶する。メモリ２３は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性メモリであってもよいし、フラッシュメモリ等の不揮発性メモリであってもよい。【００２１】
本明細書等においてストレージコントローラ２０を主体として説明する処理は、このＣＰＵ２１が各要素２２〜２６と連携して実行する処理であってよい。【００２２】
記憶デバイスは、不揮発性の記憶媒体を有する。不揮発性の記憶媒体は、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリ（ＰＲＡＭ（相変化メモリ）、ＲｅＲＡＭ（抵抗変化メモリ）、ＭＲＡＭ（磁気抵抗メモリ）など）である。【００２３】
ＦＭＰＫ３０の記憶媒体は、複数のＦＭ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）チップから構成される。ＨＤＤ５０の記憶媒体は、磁気ディスクである。ＦＭＰＫ３０及びＨＤＤ５０は、ストレージコントローラ２０に接続されている。【００２４】
ＲＡＩＤグループ２９は、複数の記憶デバイスから構成される。ＲＡＩＤグループ２９を基に複数（又は１つ）の論理ボリューム１４０が作成される。ＲＡＩＤグループ２９を基に作成された論理ボリューム１４０は、ホスト計算機１１に提供されてもよいし、ホスト計算機１１に提供されずプール１００（図２参照）の一要素とされてもよい。プール１００を構成する論理ボリューム１４０は、複数の記憶領域（以下、便宜上「チャンク」という）に分割されている。仮想ボリューム１６０（図２参照）にプール１００からチャンクが割り当てられる。論理ボリューム１４０と仮想ボリューム１６０との関係については後述する。【００２５】
ストレージコントローラ２０は、論理ボリューム１４０及び仮想ボリューム１６０のうちの少なくとも一方をホスト計算機１１に提供する。本明細書等では、論理ボリューム１４０及び仮想ボリューム１６０を区別せずにボリュームということがある。ホスト計算機１１は、ストレージコントローラ２０から提供されたボリュームを指定したリード要求及びライト要求を送信することができる。ライト要求は、ライト先情報を含み、リード要求は、リード元情報を含む。ライト先情報は、ライト先のボリュームのＩＤ（例えば、ＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ））と、ライト先の領域のアドレス（例えばＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ））とを含む。リード元情報は、リード元のボリュームのＩＤと、リード元の領域のアドレスとを含む。【００２６】
記憶デバイスは、内部に圧縮機能を有してもよい。本実施例では、記憶デバイスであるＦＭＰＫは、圧縮機能を有する。圧縮機能を有する記憶デバイスは、その圧縮機能によってデータを圧縮し、その圧縮したデータ（圧縮データ）を内部の記憶媒体に格納する。また、圧縮機能を有する記憶デバイスは、その圧縮機能によって圧縮データを伸長し、その伸長されたデータをその記憶デバイス外に送信する。また、圧縮機能を有する記憶デバイスは、データを圧縮して格納するか若しくは圧縮しないで格納するか、または、圧縮データを伸長して送信するか若しくは伸長しないで送信するかを制御する。【００２７】
図２は、仮想ボリューム１６０と論理ボリューム１４０との関係性を説明するための模式図である。
ストレージコントローラ２０は、図１に示すように、ＲＡＩＤグループ２９内に１又は２以上の論理ボリューム１４０を作成できる。【００２８】
ストレージコントローラ２０は、論理ボリューム１４０を複数のチャンク（記憶領域）に分割して管理する。ストレージコントローラ２０は、複数の論理ボリューム１４０の各々が有する複数のチャンクを、まとめて１つのプール１００として管理する。つまり、プール１００は、複数のチャンクを有している。【００２９】
また、ストレージコントローラ２０は、シンプロビジョニングに従う仮想ボリューム１６０を作成することができる。ストレージコントローラ２０は、仮想ボリューム１６０を作成する段階で、その仮想ボリューム１６０の容量及び論理アドレス空間（ＬＢＡ）を設定する。しかし、ストレージコントローラ２０は、この段階では、プール１００から仮想ボリューム１６０にチャンクを割り当てない。【００３０】
ストレージコントローラ２０は、ホスト計算機１１から仮想ボリューム１６０を指定したライト要求を受信した場合に、プール１００から使用可能なチャンクを選択し、そのライト要求の指定するＬＢＡに対応する領域に、その選択したチャンクを割り当てる。そして、ストレージコントローラ２０は、その割り当てたチャンクに、ライト要求に付随するデータ（ライトデータ）をライトする。ライト要求の指定するＬＢＡに既にチャンクが割り当てられている場合、ストレージコントローラ２０は、新たにチャンクを割り当てる必要はない。【００３１】
仮想ボリューム１６０を用いることで、ストレージシステム１０の有する記憶領域を効率的に利用することができる。
ストレージコントローラ２０は、複数の記憶デバイスのうち、ライト先の記憶デバイスにライトコマンドを送信し、リード元の記憶デバイスにリードコマンドを送信する。ライトコマンドは、ライト先のアドレス（例えばＬＢＡ）を含み、リードコマンドは、リード元のアドレス（例えばＬＢＡ）を含む。ライト先の記憶デバイスは、ライト要求に従うライト先の領域（例えばチャンク）の基になっている記憶デバイスである。リード元の記憶デバイスは、リード要求に従うリード元の領域（例えばチャンク）の基になっている記憶デバイスである。
本実施例では、ホスト計算機１１に提供されるボリュームは仮想ボリューム１６０であり、論理ボリューム１４０は、プール１００の一要素であるとする。【００３２】
図３は、ＦＭＰＫ３０のハードウェア構成例を示すブロック図である。
ＦＭＰＫ３０は、フラッシュメモリと、フラッシュメモリに接続されたＦＭＰＫコントローラ３１とを有する。フラッシュメモリは、複数のＦＭチップ３９で構成されている。ＦＭＰＫコントローラ３１は、メモリ３４と、圧縮伸張回路３６と、上位Ｉ／Ｆ３３と、ＦＭ  Ｉ／Ｆ３５と、それらに接続されたＣＰＵ３２とを有する。これらの要素３２〜３６は、双方向にデータ送受信可能な内部バス３７で接続されている。【００３３】
ＣＰＵ３２は、ＦＭＰＫ３０の動作を制御する。ＣＰＵ３２は、メモリ３４から読み出したプログラムを実行し、ＦＭＰＫ３０の有する様々な機能を実現する。ＣＰＵ３２は、所定の処理に特化した演算回路を備えてもよい。【００３４】
メモリ３４は、プログラム及びデータ等を記憶する。メモリ３４は、例えば、ＤＲＡＭ等の揮発性半導体メモリであってもよいし、フラッシュメモリ等の不揮発性メモリであってもよい。【００３５】
圧縮伸張回路３６は、データの圧縮処理及び伸張処理を行うための演算回路である。ＣＰＵ３２は、ストレージコントローラ２０から受信したライトデータをこの圧縮伸張回路３６を用いて圧縮してから、ＦＭチップ３９にライトする。または、ＣＰＵ３２は、ＦＭチップ３９からリードした圧縮データをこの圧縮伸張回路３６を用いて伸張してから、ストレージコントローラ２０に送信する。【００３６】
上位Ｉ／Ｆ３３は、ＦＭＰＫ３０をストレージコントローラ２０に接続するためのＩ／Ｆである。ＣＰＵ３２は、この上位Ｉ／Ｆ３３を通じて、ストレージコントローラ２０からライトコマンド及びライトデータ等を受信する。ＣＰＵ３２は、この上位Ｉ／Ｆ３３を通じて、ストレージコントローラ２０に完了応答等を送信する。【００３７】
ＦＭ  Ｉ／Ｆ３５は、ＦＭチップ３９を接続するためのＩ／Ｆである。ＦＭ  Ｉ／Ｆ３５には、複数のＦＭチップが接続される。ＣＰＵ３２は、このＦＭ  Ｉ／Ｆ３５を通じて、ＦＭチップ３９にデータをライトしたり、ＦＭチップ３９に格納されているデータをリードしたりする。ＦＭチップ３９は、例えばＮＡＮＤ型のＦＭチップであり、複数の物理ブロックを有する。各物理ブロックは、複数の物理ページで構成されている。データのリード及びライトは、ページ単位で行われ、データの消去は、ブロック単位で行われる。データが記憶されている物理ページにデータを新たにライトすることはできず、新たなデータは空きの物理ページに書き込まれる。【００３８】
以上のように、これらの要素３２〜３７をまとめてＦＭＰＫコントローラ３１という。本明細書等においてＦＭＰＫコントローラ３１を主体として説明する処理は、このＣＰＵ３２が各要素３３〜３７と連携して実行する処理であってもよい。【００３９】
図４は、ＦＭＰＫ３０に圧縮データが格納されている状態の一例を示す模式図である。
ＦＭＰＫコントローラ３１は、ＦＭチップ３９の物理的な記憶領域に基づいて構成される物理アドレス空間４１０と、ストレージコントローラ２０に提供する論理アドレス空間４２０とを有し、物理アドレス空間４１０と論理アドレス空間４２０との対応関係を管理する。【００４０】
ＦＭＰＫコントローラ３１は、論理アドレス空間４１０を所定単位の論理ページ４１２に分割して管理する。物理アドレス空間４２０は、フラッシュメモリの複数の物理ページ４２２で構成されている。ＦＭＰＫコントローラ３１は、論理ページ４１２と物理ページ４２２との対応関係を管理する。１つの物理ページ４２２に格納されるデータ（ページ単位のデータ）は、１又は２以上のＣＷ（Ｃｏｄｅ  Ｗｏｒｄ）４２１の集合である。ＣＷは、例えば、データとＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔ）のセットである。ＦＭＰＫコントローラ３１は、フラッシュメモリの特性上、前述したように、物理ページ４２２の単位でデータをリード及びライトする。【００４１】
ＦＭＰＫコントローラ３１は、例えば、次のようにデータを圧縮してライトする。
（１）ＦＭＰＫコントローラ３１は、論理ページ４１２＃１のＬＢＡを指定したライトコマンドに付随するライトデータを圧縮することにより圧縮データ４０５＃Ａを生成する。同様に、ＦＭＰＫコントローラ３１は、論理ページ４１２＃２のＬＢＡを指定したライトコマンドに付随するライトデータを圧縮することにより圧縮データ４０５＃Ｂを生成し、論理ページ４１２＃３のＬＢＡを指定したライトコマンドに付随するライトデータを圧縮することにより圧縮データ４０５＃Ｃを生成する。圧縮データ４０５のサイズがＣＷ４２１のサイズ以下の場合、その圧縮データ４０５は１つのＣＷ４２１を使用する。圧縮データ４０５のサイズがＣＷ４２１のサイズよりも大きい場合、その圧縮データ４０５が格納可能な数のＣＷ４２１を使用する。つまり、１つの圧縮データ４０５のサイズは、ＣＷ４２１の数で表現することができる。【００４２】
（２）ＦＭＰＫコントローラ３１は、ＣＷ４２１の単位の圧縮データ４０５を、物理ページ４２２の単位となるように結合又は分割する。例えば、図４の場合、圧縮データ４０５＃Ａ、＃Ｂ、＃ＣはそれぞれＣＷ４２１の１つ分なので、ＦＭＰＫコントローラ３１は、圧縮データ４０５＃Ａ、＃Ｂ、＃Ｃを結合して１つのデータ４０６として物理ページ４２２＃１にライトする。フラッシュメモリの特性上、物理ページの単位でライトする必要があるためである。例えば、ＦＭＰＫコントローラ３１は、圧縮データ４０５がＣＷ４２１の４つ分である場合は、圧縮データ４０５をＣＷ４２１の３つ分と１つ分に分割して、それぞれを物理ページ４２２にライトする。【００４３】
図５は、ストレージコントローラ２０の有する機能の一例を示すブロック図である。
ストレージコントローラ２０は、例えば、仮想ボリューム作成部２０１と、コマンド処理部２０２と、仮想−論理ＬＢＡマッピングテーブル２１０と、ボリューム管理テーブル２２０と、プール管理テーブル２３０と、論理−仮想ＬＢＡマッピングテーブル２４０とを有する。仮想ボリューム作成部２０１及びコマンド処理部２０２は、例えば、ＣＰＵ２１がプログラムを実行することにより実現される機能である。【００４４】
仮想ボリューム作成部２０１は、管理装置１２（管理者）からの指示に基づいて、仮想ボリューム１６０を作成する。例えば、仮想ボリューム作成部２０１は、管理装置１２から指示されたボリューム容量、ボリューム属性、及び使用するプール番号等に基づいて、仮想ボリューム１６０を生成する。管理装置１２は、ボリューム属性として、暗号化属性または圧縮属性を設定することができる。ストレージコントローラ２０（コマンド処理部２０２）は、暗号化属性が設定された仮想ボリューム１６０がライト先の場合、ライト対象のデータを暗号化してライト先の仮想ボリューム１６０（割り当てられたチャンク）に格納する。また、ストレージコントローラ２０（コマンド処理部２０２）は、圧縮属性が設定された仮想ボリューム１６０がライト先の場合、ライト対象のデータを圧縮してライト先の仮想ボリューム１６０に格納する。【００４５】
コマンド処理部２０２は、ホスト計算機１１からのライト要求に基づいて、データのライト処理を実行する。つまり、コマンド処理部２０２は、ライト要求に基づくライトコマンドを生成し、その生成したライトコマンドを、ライト先の記憶デバイスに送信する。【００４６】
コマンド処理部２０２は、ライト先の記憶デバイスが圧縮機能を有している記憶デバイスの場合、ライト先の記憶デバイスに送信するライトコマンドに、圧縮が必要か否かを表す圧縮要否情報を含めることができる。本実施例では、圧縮機能を有する記憶デバイスは、ＦＭＰＫ３０であり、圧縮要否情報の一例が圧縮要否フラグである。すなわち、コマンド処理部２０２は、ＦＭＰＫ３０における圧縮要否を示す圧縮要否フラグ（圧縮オプション）を含むライトコマンドを生成しそのＦＭＰＫ３０に送信する。コマンド処理部２０２は、ライト要求の指定する仮想ボリューム１６０のボリューム属性に基づいて、圧縮要否フラグ（圧縮オプション）の要否を設定してもよい。コマンド処理部２０２は、ライト要求の指定する仮想ボリューム１６０のボリューム属性が暗号化属性である場合、圧縮要否フラグ（圧縮オプション）を「不要」に設定してもよい。【００４７】
図６は、仮想−論理ＬＢＡマッピングテーブル２１０の構成例を示す。
仮想−論理ＬＢＡマッピングテーブル２１０は、仮想ボリューム１６０毎に生成され、その仮想ボリューム１６０に係るＬＢＡが、どの論理ボリューム１４０のどのＬＢＡに対応付けられているかを管理する。【００４８】
仮想−論理ＬＢＡマッピングテーブル２１０は、複数のエントリ２１１ａ、２１１ｂ等を有し、各エントリはデータフィールドとして、仮想ボリュームのＬＢＡを示す仮想ボリュームＬＢＡ２１２と、論理ボリュームのＩＤを示す論理ボリュームＩＤ２１３と、論理ボリュームのＬＢＡを示す論理ボリュームＬＢＡ２１４とを有する。【００４９】
例えば、図６のエントリ２１１ｂは、仮想ボリュームＬＢＡ「０ｘ００００２０００」が、論理ボリュームＩＤ「＃０００１」の論理ボリュームＬＢＡ「０ｘ１０００１０００」にマッピングされていることを示す。また、エントリ２１１ａは、仮想ボリュームＬＢＡ「０ｘ００００１０００」が、何れの論理ボリューム１４０にもマッピングされていない（ＮＵＬＬ）ことを示す。【００５０】
図７は、ボリューム管理テーブル２２０の構成例を示す。
ストレージコントローラ２０は、自己の管理下のボリューム（仮想ボリューム１６０及び論理ボリューム１４０）をこのボリューム管理テーブル２２０で管理する。【００５１】
ボリューム管理テーブル２２０は、複数のエントリ２２１等を有し、各エントリは、データフィールドとして、ボリュームＩＤ２２２と、ボリューム種別２２３と、ボリューム容量２２４と、プール番号２２５と、ボリューム属性２２６とを有する。【００５２】
ボリュームＩＤ２２２には、ストレージコントローラ２０において、論理ボリューム１４０及び仮想ボリューム１６０を含めたボリュームを一意に識別し得るＩＤが格納される。【００５３】
ボリューム種別２２３には、ボリュームＩＤ２２２に対応するボリュームが、論理ボリューム１４０であるか、それとも仮想ボリューム１６０であるかを識別し得る情報が格納される。【００５４】
ボリューム容量２２４には、ボリュームＩＤ２２２に対応するボリュームの容量が格納される。【００５５】
プール番号２２５には、ボリュームＩＤ２２２に対応する仮想ボリューム１６０を構成するプール１００の場号が格納される。つまり、その仮想ボリューム１６０には、プール番号の示すプール１００の有するチャンクが割り当てられる。【００５６】
ボリューム属性２２６には、ボリュームＩＤ２２２に対応するボリュームの属性が格納される。例えば、暗号化属性が設定されているボリュームの場合、このボリューム属性２２６には「暗号化」が格納される。例えば、圧縮属性が設定されているボリュームの場合、このボリューム属性２２６には「圧縮」が格納される。このボリューム属性２２６は、例えば、ホスト計算機１１から設定される。【００５７】
例えば、図７のエントリ２２１の示すボリュームＩＤ「１０」に対応するボリュームは、ボリューム容量が「１．５ＴＢ」の「仮想ボリューム」であり、プール番号「１０」のプール１００に含まれるチャンクが割り当てられ、データを「暗号化」して格納することを示す。【００５８】
図８は、プール管理テーブル２３０の構成例を示す。
プール管理テーブル２３０は、プール１００毎に生成され、自己のプール１００が何れの論理ボリューム１４０によって構成されているか、及びその論理ボリューム１４０に対応付けられている論理−仮想ＬＢＡマッピングテーブル２４０は何れであるかを管理する。【００５９】
プール管理テーブル２３０は、複数のエントリ２３１等を有し、各エントリは、データフィールドとして、論理ボリュームのＩＤを示す論理ボリュームＩＤ２３２と、論理−仮想ＬＢＡマッピングテーブル２４０の参照先（ポインタ）とを有する。【００６０】
例えば、図８に示すプール管理テーブル２３０は、自己のプール１００が、論理ボリュームＩＤが「＃０００１」、「＃ＦＦＢＡ」及び「＃００２０」の論理ボリュームで構成されていることを示す。また、エントリ２３１は、論理ボリュームＩＤ「＃０００１」に対応する論理ボリュームの論理−仮想ＬＢＡマッピングテーブル２４０の参照先（ポインタ）が「０ｘＡＢ８ＦＦＦ００」であることを示す。【００６１】
図９は、論理−仮想ＬＢＡマッピングテーブル２４０の構成例を示す。
論理−仮想ＬＢＡマッピングテーブル２４０は、論理ボリューム１４０毎に生成され、その論理ボリューム１４０に係るＬＢＡが、どの仮想ボリューム１６０のどのＬＢＡにマッピングされているかを管理する。【００６２】
論理−仮想ＬＢＡマッピングテーブル２４０は、複数のエントリ２４０ａ、２４０ｂ等を有し、各エントリはデータフィールドとして、論理ボリュームＬＢＡ２４２と、仮想ボリュームＩＤ２４３と、仮想ボリュームＬＢＡ２４４とを有する。【００６３】
例えば、図９のエントリ２４１ｂは、論理ボリュームＬＢＡ「０ｘ０１００３０００」が、仮想ボリュームＩＤ「＃８００１」の仮想ボリュームＬＢＡ「０ｘ００１０１０００」にマッピングされていることを示す。また、エントリ２４１ａは、論理ボリュームＬＢＡ「０ｘ０１００１０００」が、何れの仮想ボリューム１６０のＬＢＡにもマッピングされていない（ＮＵＬＬ）ことを示す。【００６４】
図１０は、ライトコマンド１０００のフォーマットの構成例を示す。
ストレージコントローラ２０は、ＦＭＰＫ３０毎にライトコマンド１０００を生成し、その生成したライトコマンド１０００を対応するＦＭＰＫ３０に送信する。【００６５】
ライトコマンド１０００は、データフィールドとして、コマンドコード１００１と、先頭ＬＢＡ１００２と、データサイズ１００３と、圧縮オプション１００４と、その他の情報１００５とを有する。【００６６】
コマンドコード１００１には、このコマンドが「ライトコマンド」であることを示すコードが格納される。コマンドコード１００１は、圧縮オプション付きのライトコマンドと、圧縮オプションのない通常のライトコマンドとで異なっていてもよい。【００６７】
先頭ＬＢＡ１００２には、このコマンドの送信先であるＦＭＰＫ３０の論理アドレス空間４１０における、データのライトの開始位置を示すＬＢＡが格納される。【００６８】
データサイズ１００３には、このライトコマンド１０００によってライトするデータのサイズが格納される。【００６９】
圧縮オプション１００４には、このライトコマンドによってライトするデータの圧縮要否を示すフラグである圧縮要否フラグが格納される。圧縮要否は、ストレージコントローラ２０で判定される。ストレージコントローラ２０は、ライトコマンド１０００の送信先のＦＭＰＫ３０において、このデータを圧縮してライトする必要があると判定した場合、この圧縮要否フラグに「必要」を格納する。ストレージコントローラ２０は、ライトコマンド１０００の送信先のＦＭＰＫ３０において、このデータを圧縮してライトする必要はないと判定した場合、この圧縮要否フラグに「不要」を格納する。【００７０】
図１１は、ストレージコントローラ２０における仮想ボリューム作成部２０１の処理例を示すフローチャートである。【００７１】
仮想ボリューム作成部２０１は、管理装置１２から仮想ボリューム作成要求を受信すると（Ｓ１０１）、以降の処理を実行する。【００７２】
仮想ボリューム作成部２０１は、ボリューム管理テーブル２２０に、仮想ボリューム作成要求の指示する仮想ボリュームに係るエントリを新規作成し、その作成したエントリのボリューム種別２２３に「仮想ボリューム」を格納する（Ｓ１０２）。【００７３】
仮想ボリューム作成部２０１は、その作成したエントリのボリューム容量２２４及びプール番号２２５に、仮想ボリューム作成要求の指示する設定値を格納する（Ｓ１０３）。【００７４】
仮想ボリューム作成部２０１は、ボリューム容量２２４に対応する仮想−論理ＬＢＡマッピングテーブル２１０を作成する（Ｓ１０４）。【００７５】
仮想ボリューム作成部２０１は、仮想ボリューム作成要求からボリューム属性２２６に「暗号化」が指定されているか否かを判定する（Ｓ１０５）。【００７６】
「暗号化」が指定されていない場合（Ｓ１０５：ＮＯ）、仮想ボリューム作成部２０１は、管理装置１２に完了応答を送信し（Ｓ１０７）、当該処理を終了する（終了）。【００７７】
「暗号化」が指定されている場合（Ｓ１０５：ＹＥＳ）、仮想ボリューム作成部２０１は、その作成したエントリのボリューム属性２２６に「暗号化」を設定する（Ｓ１０６）。そして、ストレージコントローラ２０は、管理装置１２に完了応答を送信し（Ｓ１０７）、当該処理を終了する（終了）。【００７８】
以上の処理により、ストレージコントローラ２０は、仮想ボリューム作成要求に基づく仮想ボリューム１６０を作成することができる。【００７９】
図１２は、ストレージコントローラ２０におけるコマンド処理部２０２の処理例を示すフローチャートである。【００８０】
コマンド処理部２０２は、ホスト計算機１１からライト要求を受信すると、そのライト要求に付随するライトデータをメモリ２３（キャッシュ領域）に格納する（Ｓ２０１）。【００８１】
コマンド処理部２０２は、ライト要求によって指定された仮想ボリューム１６０におけるライト先の領域（仮想ボリュームＬＢＡ）（以下「ライト対象領域」という）に、チャンク（論理ボリュームＬＢＡ）が割り当て済みであるか否かを判定する（Ｓ２０２）。【００８２】
ライト対象領域にチャンクが割り当て済みである場合（Ｓ２０２：ＹＥＳ）、コマンド処理部２０２は、ステップＳ２０４に進む。【００８３】
ライト対象領域にチャンクが割り当て済みでない場合（Ｓ２０２：ＮＯ）、コマンド処理部２０２は、仮想ボリューム１６０に対応付けられたプール１００から未使用のチャンクを取得し、そのチャンクをライト対象領域に割り当てる（Ｓ２０３）。そして、コマンド処理部２０２は、ステップＳ２０４に進む。【００８４】
コマンド処理部２０２は、ライト対象領域に割り当てられたチャンクが圧縮機能を有する論理ボリューム１４０に属しているか否かを判定する（Ｓ２０４）。【００８５】
そのチャンクが圧縮機能を有さない論理ボリューム１４０に属している場合（Ｓ２０４：ＮＯ）、コマンド処理部２０２は、圧縮要否フラグに「不要」をセットにしたライトコマンド１０００を生成し（Ｓ２１１）、ステップＳ２２０に進む。【００８６】
そのチャンクが圧縮機能を有する論理ボリューム１４０に属している場合（Ｓ２０４：ＹＥＳ）、コマンド処理部２０２は、ボリューム管理テーブル２２０を参照し、そのライト対象領域を含む仮想ボリューム１６０のボリューム属性２２６に「暗号化」が設定されているか否かを判定する（Ｓ２０５）。【００８７】
そのボリューム属性２２６に「暗号化」が設定されていない場合（Ｓ２０５：ＮＯ）、コマンド処理部２０２は、圧縮要否フラグを「不要」にセットしたライトコマンド１０００を生成し（Ｓ２０６）、ステップＳ２２０に進む。暗号化されていないライトデータは、圧縮によってデータサイズが小さくなり得る（暗号化されているデータと比べて圧縮効果が大きい）からである。【００８８】
そのボリューム属性２２６に「暗号化」が設定されている場合（Ｓ２０５：ＹＥＳ）、コマンド処理部２０２は、ライトデータを暗号化する（Ｓ２１０）。そして、コマンド処理部２０２は、圧縮要否フラグに「不要」をセットしたライトコマンド１０００を生成し（Ｓ２１１）、ステップＳ２２０に進む。暗号化されたライトデータは、圧縮してもデータサイズがほとんど小さくならない（圧縮効果が小さい）からである。【００８９】
ステップＳ２２０において、コマンド処理部２０２は、ステップＳ２０６又はステップＳ２１１で生成したライトコマンド１０００を、ライト対象のＦＭＰＫ３０に送信する（Ｓ２２０）。そして、コマンド処理部２０２は、ホスト計算機１１に完了応答を送信し（Ｓ２２１）、当該処理を終了する（終了）。なお、完了応答は、Ｓ２２０の後に代えて、Ｓ２０１とＳ２０２の間、すなわち、ライト要求に付随するライトデータがメモリ２３（キャッシュ領域）に格納されたときに行われてもよい。【００９０】
以上のように、ストレージコントローラ２０は、ボリューム管理テーブル２２０のボリューム属性２２６に基づいてライトデータの圧縮要否を判定し、その判定結果をＦＭＰＫ３０に伝えることができる。これによりＦＭＰＫ３０は、ライトデータを圧縮すべきか否かを知ることができる。よって、ＦＭＰＫ３０における無駄な圧縮処理を低減することができる。これにより、ＦＭＰＫ３０の負荷が低減され、ＦＭＰＫ３０からストレージコントローラ２０への応答性能が向上する。ＦＭＰＫ３０のビットコストを低減する圧縮機能を有しながらも、ストレージシステムとしての性能低下を抑制することができる。【００９１】
図１３は、ＦＭＰＫコントローラ３１の有する機能の一例を示すブロック図である。
ＦＭＰＫコントローラ３１は、管理下のＦＭチップ３９に対するデータのリード及びライトを制御する。【００９２】
圧縮機能を有するＦＭＰＫコントローラ３１は、データを圧縮してＦＭチップ３９にライトすることにより、物理的な記憶容量（例えば１ＴＢ）よりも大きな論理的な記憶容量（例えば８ＴＢ）を、ストレージコントローラ２０に提供することができる。【００９３】
ＦＭＰＫコントローラ３１は、例えば、設定パラメータとして、同期圧縮モードと非同期圧縮モードとを有する。【００９４】
同期圧縮モードが設定されている場合、ＦＭＰＫコントローラ３１は、ライト対象のデータを受信したらそのデータを圧縮してＦＭチップ３９にライトする。【００９５】
非同期圧縮モードが設定されている場合、ＦＭＰＫコントローラ３１は、受信したデータを一時的に非圧縮のまま（つまり圧縮しないで）ＦＭチップ３９にライトし、所定のタイミングでその非圧縮のデータをＦＭチップ３９からリードし圧縮して同一又は別のＦＭチップ３９にライトする。所定のタイミングとは、例えば、ＦＭチップ３９内のデータの移動のためにデータのリードを必要とする内部処理のタイミング、具体的には、例えば、データのリクラメーション時などである。【００９６】
ここで、フラッシュメモリはその特性上、複数の物理ページから構成されるブロック単位でデータを消去する必要があるので、或るブロック内のデータを消去する前にそのブロック内で必要なデータ（有効データ）を他のブロックにコピーする必要がある。このような処理をリクラメーション処理という。また、フラッシュメモリはその特性上、セル内部の浮遊ゲートに蓄えた電子が漏れるため、データを高信頼に保持可能な時間は有限であり、それ故、ＦＭチップにデータをライト後、一定時間以内に一旦リードし、生じている障害ビットを訂正した後、他のブロックに書き直す処理を行うことが望ましい。このような処理をリフレッシュ処理という。また、ブロックにおけるデータの消去回数（ライト回数）に限界が存在するため、各ブロックの消去回数を平準化して、フラッシュメモリ全体を長寿命化させることが望ましい。そこで、リクラメーション処理やリフレッシュ処理のような、データ移動を伴う内部処理（ストレージコントローラ２０のような上位デバイスからＩ／Ｏコマンドを受けたタイミングとは非同期に行われる処理）において、ＦＭＰＫコントローラ３１は、これらの問題を解決するために、データの移動先のブロックを、そのブロックの消去回数を基に決定し、それにより、ブロックの消去回数の平準化を図ってよい。これは、ウェアレベリングの一環であってよい。このように、ＦＭＰＫ内部で発生するリクラメーション時などにあわせて圧縮処理を実行することで、圧縮処理のためだけのオーバーヘッドを削減することができる。【００９７】
実施例１は、非同期圧縮モードの設定されたＦＭＰＫ３０を想定して説明する。しかし、同期圧縮モードの設定されたＦＭＰＫ３０であったとしても、この実施例１に示す内容は実施可能である。【００９８】
ＦＭＰＫコントローラ３１は、例えば、コマンド処理部３０１と、圧縮処理部３０２と、論理−物理ページマッピングテーブル３１０と、物理−論理ページマッピングテーブル３３０とを有する。コマンド処理部３０１及び圧縮処理部３０２は、プログラムがＣＰＵ３２に実行されることにより発揮される機能であってもよい。【００９９】
コマンド処理部３０１は、ストレージコントローラ２０のような上位デバイスからのコマンド（例えばリードコマンド及びライトコマンド）を処理する。例えば、コマンド処理部３０１は、ライトコマンドに含まれる圧縮要否フラグ（圧縮オプション）に基づいて、データを圧縮せずにＦＭチップ３９にライトするか、データを圧縮してＦＭチップ３９にライトするかを判定する。コマンド処理部３０１は、圧縮要否フラグが「必要」であった場合、圧縮処理部３０２にそのデータを圧縮させ、その圧縮データをＦＭチップ３９にライトする。コマンド処理部３０１は、圧縮要否フラグが「不要」であった場合、そのままの非圧縮データをＦＭチップ３９にライトする。【０１００】
圧縮処理部３０２は、圧縮伸張回路３６を用いてデータを圧縮し、圧縮データを生成する。【０１０１】
図１４は、論理−物理ページマッピングテーブル３１０の構成例を示す。
論理−物理ページマッピングテーブル３１０は、ＦＭＰＫ３０内に１つ生成され、そのＦＭＰＫ３０の論理アドレス空間４１０を構成する各論理ページ４１２が、物理アドレス空間４２０のどの物理ページ４２２に対応付けられているかを管理する（図４参照）。【０１０２】
論理−物理ページマッピングテーブル３１０は、複数のエントリ３１１ａ、３１１ｂ等を有し、各エントリはデータフィールドとして、論理ページ番号３１２と、物理ページ番号３１３と、圧縮属性３１４と、開始アドレス３１５とを有する。【０１０３】
論理ページ番号３１２には、ＦＭＰＫ３０内で論理ページ４１２を一意に識別可能な番号が格納される。【０１０４】
物理ページ番号３１３には、ＦＭＰＫ３０内で物理ページ４２２を一意に識別可能な番号が格納される。論理ページ４１２に割り当てられていない物理ページ４２２の物理ページ番号３１３には「未割当」が格納される。【０１０５】
圧縮属性３１４には、物理ページ番号３１３の示す物理ページ４２２に格納されているデータが圧縮データであるか否かを示す情報が格納される。例えば、圧縮データの格納されている物理ページ４２２に対応する圧縮属性３１４には「圧縮」が格納され、非圧縮データの格納されている物理ページ４２２の圧縮属性３１４には「非圧縮」が格納される。【０１０６】
開始アドレス３１５には、物理ページ番号３１３の示す物理ページ４２２に圧縮データが格納されている場合において、物理ページ４２２におけるその圧縮データの開始位置（アドレス）が格納される。【０１０７】
例えば、図１４のエントリ３１１ａは、論理ページ番号「１」の論理ページ４１２は、物理ページ番号「５００」の物理ページ４２２に対応付けられており、この物理ページ４２２には「圧縮データ」が記憶されており、この圧縮データの物理ページ４２２内における開始アドレスは「０」であることを示す。【０１０８】
また、エントリ３１１ｂは、論理ページ番号「１０００」の論理ページ４１２は、物理ページ番号「５００」の物理ページ４２２に対応付けられており、この物理ページ４２２には「圧縮データ」が記憶されており、この圧縮データの物理ページ４２２内における開始アドレスは「４０９６」であることを示す。このように、論理ページ４１２では別々に管理されている圧縮データが、実体としては同じ物理ページ４２２に格納されていることがある。【０１０９】
図１５は、物理−論理ページマッピングテーブル３３０の構成例を示す。
物理−論理ページマッピングテーブル３３０は、ＦＭＰＫ３０内に１つ生成され、そのＦＭＰＫ３０の物理アドレス空間４２０を構成する各物理ページ４２２が、論理アドレス空間４１０のどの論理ページ４１２に対応付けされているかを管理する。つまり、物理−論理ページマッピングテーブル３３０は、上記の論理−物理ページマッピングテーブル３１０の逆引き用のテーブルともいえる。【０１１０】
物理−論理ページマッピングテーブル３３０は、複数のエントリ３３１ａ、３３１ｂ等を有し、各エントリはデータフィールドとして、物理ページ番号３３２と、論理ページ番号３３３と、圧縮状態３３４とを有する。物理ページ番号３３２及び論理ページ番号３３３は、上記で説明したとおりである。【０１１１】
圧縮状態３３４には、物理ページ番号３３２の示す物理ページ４２２に格納されているデータは圧縮が不要であるか否かを示す情報が格納される。また、圧縮状態３３４には、圧縮が必要なデータについて、その物理ページ４２２に格納されているデータは既に圧縮済みであるか、それとも今後圧縮される予定であるかを示す情報が格納される。例えば、物理ページ４２２に圧縮が必要かつ圧縮済みのデータ（以下「圧縮済みデータ」という）が格納されている場合、この圧縮状態３３４には「済み」が格納される。物理ページ４２２に圧縮が必要且つ未圧縮のデータ（以下「圧縮予定データ」という）が格納されている場合、この圧縮状態３３４には「予定」が格納される。物理ページ４２２に圧縮が不要なデータが格納されている場合、この圧縮属性３３４には「不要」が格納される。このように圧縮属性が「不要」であることを管理することで、ＦＭＰＫコントローラは非同期処理の際にもそのデータに対する圧縮が不要であると判断できる。つまり、圧縮属性が「不要」であれば、ＦＭＰＫコントローラは、そのデータを圧縮されていない状態（伸長された状態）に維持する。【０１１２】
例えば、図１５のエントリ３３１ａは、物理ページ番号「３００」の物理ページ４２２が、論理ページ番号「１００」の論理ページ４１２に対応付けられており、この物理ページ４２２には「圧縮予定データ」が格納されていることを示す。【０１１３】
また、エントリ３３１ｂは、物理ページ番号「５００」の物理ページ４２２が、論理ページ番号「１」と「１０００」の２つの論理ページ４１２に対応付けられており、この物理ページ４２２には「圧縮済みデータ」が格納されていることを示す。【０１１４】
図１６は、ＦＭＰＫコントローラ３１におけるコマンド処理部３０１の処理例を示すフローチャートである。【０１１５】
コマンド処理部３０１は、ストレージコントローラ２０からライトコマンド１０００を受信すると、ライトデータをいったんメモリ３４にライトし、以下の処理をする（Ｓ３０１）。【０１１６】
コマンド処理部３０１は、ライトコマンド１０００で指定されたライトデータのデータサイズ１００３の分の未割当の物理ページ４２２を確保する（Ｓ３０２）。また、コマンド処理部３０１は、物理−論理ページマッピングテーブル３３０に、その確保した物理ページ４２２に対応するエントリを構築する。【０１１７】
コマンド処理部３０１は、ライトコマンド１０００の示す先頭ＬＢＡ１００２に対応する論理ページ番号を算出し、その確保した物理ページ４２２の物理ページ番号とその算出した論理ページ番号とを対応関係を、物理−論理ページマッピングテーブル３３０に登録する。また、コマンド処理部３０１は、その物理ページ番号と論理ページ番号との対応関係を、論理−物理ページマッピングテーブル３１０にも登録する（Ｓ３０３）。【０１１８】
コマンド処理部３０１は、その確保した物理ページ４２２にデータをライトする（Ｓ３０４）。【０１１９】
コマンド処理部３０１は、ライトコマンド１０００の圧縮オプション１００４に係る圧縮要否フラグが「必要」であるか否かを判定する（Ｓ３０５）。【０１２０】
この圧縮要否フラグが「不要」である場合（Ｓ３０５：不要）、コマンド処理部３０１は、物理−論理ページマッピングテーブル３３０において、データをライトした物理ページ４２２に対応する圧縮状態３３４に「不要」を格納し（Ｓ３０７）、当該処理を終了する（終了）。【０１２１】
この圧縮要否フラグが「必要」である場合（Ｓ３０５：必要）、コマンド処理部３０１は、物理−論理ページマッピングテーブル３３０において、データをライトした物理ページ４２２に対応する圧縮状態３３４に「予定」を格納し（Ｓ３０６）、当該処理を終了する（終了）。【０１２２】
以上の処理により、ＦＭＰＫコントローラ３１は、ライトコマンド１０００の圧縮要否フラグに基づいて、ライトデータを圧縮すべきか否かを判断することができる。【０１２３】
図１７は、ＦＭＰＫコントローラ３１において非同期圧縮モードでデータを圧縮してライトする処理例を示すフローチャートである。【０１２４】
ＦＭＰＫコントローラ３１は、物理−論理ページマッピングテーブル３３０に、圧縮状態３３４が「予定」のエントリが存在するか否かを判定する（Ｓ４０１）。【０１２５】
圧縮状態３３４が「予定」のエントリが存在しない場合（Ｓ４０１：ＮＯ）、ＦＭＰＫコントローラ３１は、当該処理を終了する（終了）。【０１２６】
圧縮状態３３４が「予定」のエントリが存在する場合（Ｓ４０１：ＹＥＳ）、ＦＭＰＫコントローラ３１は、圧縮状態３３４が「予定」のエントリの内、当該処理において未選択のエントリを１つ選択する（Ｓ４０２）。【０１２７】
ＦＭＰＫコントローラ３１は、選択したエントリの物理ページ４２２からデータをリードし、圧縮データを生成する（Ｓ４０３）。【０１２８】
ＦＭＰＫコントローラ３１は、「（メモリに格納されている圧縮データの合計サイズ）＋（Ｓ４０３で生成した圧縮データのサイズ）＞（物理ページサイズ）」であるか否かを判定する（Ｓ４０４）。【０１２９】
ステップＳ４０４の条件式が満たされない場合（Ｓ４０４：ＮＯ）、ＦＭＰＫコントローラ３１は、ステップＳ４０８に進む。【０１３０】
ステップＳ４０４の条件式が満たされる場合（Ｓ４０４：ＹＥＳ）、ＦＭＰＫコントローラ３１は、未使用の物理ページ４２２を確保する（Ｓ４０５）。【０１３１】
そして、ＦＭＰＫコントローラ３１は、メモリ３４に格納されている圧縮データを結合して確保した物理ページ４２２にライトし、その物理ページ４２２に対応する圧縮状態３３４を「予定」から「済み」に変更する（Ｓ４０６）。【０１３２】
ＦＭＰＫコントローラ３１は、そのライトした圧縮データをメモリ３４から消去し、論理−物理ページマッピングテーブル３１０及び物理−論理ページマッピングテーブル３３０において、その圧縮データを格納していた物理ページ４２２に係るエントリを「未割当」に変更し（Ｓ４０７）、ステップＳ４０８に進む。【０１３３】
ＦＭＰＫコントローラ３１は、ステップＳ４０３で生成した圧縮データをメモリ３４に格納し（Ｓ４０８）、ステップＳ４０１に戻る。【０１３４】
以上の処理により、１つの圧縮データのサイズが物理ページ４２２のサイズに満たない場合であっても、複数の圧縮データを結合して物理ページ４２２に格納することができる。よって、ＦＭチップ３９から構成される物理的な記憶容量を効率的に使用することができる。【０１３５】
実施例１によれば、ＦＭＰＫ３０における圧縮効果の小さいデータの圧縮処理を低減することができる。これにより、ＦＭＰＫ３０における無駄なオーバーヘッド発生を低減させることができるので、ストレージシステム１０全体の性能を向上させることができる。
【実施例２】
【０１３６】
ＦＭＰＫ３０内において物理ページ４２２のページサイズよりも小さいサイズのデータを圧縮してＦＭチップ３９に格納したとしても、ＦＭＰＫ３０の全体の消費量の削減にはつながらない。上述のとおり、フラッシュメモリはその特性上、物理ページ４２２の単位で、データをリード及びライトする必要があるためである。例えば、８ＫＢのデータを１ＫＢに圧縮しても、そのデータを格納するためには１ページ分の物理ページ４２２が消費されてしまう。したがって、ＦＭＰＫ３０において、同期圧縮モードの場合にページサイズよりも小さいサイズのデータを圧縮することは無駄な処理となる。【０１３７】
そこで、本実施例では、ライト先のＦＭＰＫ３０の論理アドレスが連続しない複数のデータをＦＭＰＫ３０に送信するにあたり、ストレージコントローラ２０は、ある程度のデータをまとめて一括でＦＭＰＫ３０に送信する。そして、ＦＭＰＫコントローラ３１は、その一括で送信されたデータをまとめて圧縮データを生成し、その圧縮データを物理ページ４２２にライトする。以下、詳細を説明する。なお、以下の説明では、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。【０１３８】
図１８は、実施例２におけるストレージシステム１０の処理概要を示す模式図である。
図１８において、ストレージコントローラ２０は、ホスト計算機１１から受信した複数のライト要求にそれぞれ付随した複数のライトデータＤ１、Ｄ２、Ｄ３をメモリ２３の所定のキャッシュ領域に格納する。ライトデータＤ１、Ｄ２、Ｄ３の各々について、ホスト計算機１１からのライト要求で指定された格納先ＬＢＡは連続していない（つまり、ライトデータＤ１、Ｄ２、Ｄ３は、シーケンスライトデータではなくランダムライトデータである）。また、ライトデータＤ１，Ｄ２、Ｄ３は、ＦＭＰＫ３０に未だライトされていないデータである。このように、ホスト計算機１１から受信して、キャッシュ領域に格納されたまま、未だＦＭＰＫ３０のような記憶デバイスにライトされていないデータを「ダーティデータ」という。これに対して、ＦＭＰＫ３０のような記憶デバイスにライトされたデータを「クリーンデータ」という。【０１３９】
ここで、一例として、図１８に示すダーティデータＤ１、Ｄ２、Ｄ３の各々のデータサイズは、ＦＭＰＫ３０におけるページサイズよりも小さいものとする。したがって、ダーティデータＤ１、Ｄ２、Ｄ３を個別にＦＭＰＫ３０に送信すると、ＦＭＰＫ３０ではそれぞれが個別に圧縮されて物理ページ４２２にライトされてしまう。これは、ストレージコントローラ２０とＦＭＰＫ３０との間のデータ伝送帯域の消費量が多くなってしまう上、ＦＭＰＫコントローラ３１内で無駄な圧縮処理が発生してしまう。なお、Ｄ１、Ｄ２、Ｄ３の各々のデータサイズがページサイズより大きくても、ストレージコントローラが一括で転送することで、圧縮処理の回数を削減することができ、圧縮後のデータを格納する物理ページの数を抑制することもできる。【０１４０】
また、実施例１に示したようにＦＭＰＫ３０を非同期圧縮モードで動作させ、いったん圧縮予定のデータを非圧縮でＦＭチップ３９に格納しておき、所定のタイミングで複数の圧縮予定のデータをまとめて圧縮し、ＦＭチップ３９に再度ライトするという方法もある。しかし、この方法は、ＦＭチップ３９へのライト回数が増加してしまうので、上述のとおりＦＭチップ３９の寿命を縮めることになる。【０１４１】
そこで、本実施例におけるストレージコントローラ２０は、以下の図１９に示すような、複数のライトデータを一括でＦＭＰＫ３０に送信する一括送信用ライトコマンド１１００を生成する。【０１４２】
図１９は、一括送信用ライトコマンド１１００のフォーマットの構成例を示す。
ストレージコントローラ２０は、ＦＭＰＫ３０毎に一括送信用ライトコマンド１１００を生成し、その生成した一括送信用ライトコマンド１１００を対応するＦＭＰＫ３０に送信する。【０１４３】
一括送信用ライトコマンド１１００は、データフィールドとして、コマンドコード１１０１を有し、それに続き、一括で送信する複数のライトデータの各々について、先頭ＬＢＡ１１０２と、データサイズ１１０３と、圧縮オプション１１０４と、を有する。つまり、ストレージコントローラ２０は、一括送信用ライトコマンド１１００を用いて、同じＦＭＰＫ３０にライトするデータをまとめることができる。【０１４４】
コマンドコード１１０１には、このコマンドが「ライトコマンド」であることを示すコードが格納される。コマンドコード１１０１には、「一括送信用ライトコマンド」であることを示すコードが格納されるとしてもよい。つまり、コマンドコードには、通常のライトコマンド及び圧縮オプションを有するライトコマンドとは区別し得るコードが格納されるとしてもよい。先頭ＬＢＡ１１０２と、データサイズ１１０３と、圧縮オプション１１０４とは、図１０で説明したとおりであるので、説明を省略する。【０１４５】
一括送信用ライトコマンド１１００は、ライトデータ毎に圧縮オプション１１０４を備えており、ライトデータ毎に圧縮要否フラグを設定できる。なぜなら、一括送信用ライトコマンド１１００は１つのＦＭＰＫ３０に送信されるが、そのＦＭＰＫ３０が、例えば、暗号化属性を有する論理ボリューム１４０と暗号化属性を有さない論理ボリューム１０４とを構成している場合がある。この場合、ストレージコントローラ２０は、暗号化属性を有する論理ボリューム１４０にライトされるデータに対応する圧縮要否フラグを「不要」に設定し、暗号化属性を有さない論理ボリューム１４０にライトされるデータに対応する圧縮要否フラグを「必要」に設定した一括送信用ライトコマンド１１００を生成することができる。【０１４６】
一括送信用ライトコマンド１１００は、ライトデータ毎に圧縮オプション１１０４を備えるのではなく、１つの圧縮オプションを備えるとしてもよい。この場合、例えば、ＦＭＰＫ３０は、圧縮要否フラグが「必要」に設定されている場合に、全てのライトデータを圧縮し、圧縮要否フラグが「不要」に設定されている場合に、全てのライトデータを圧縮しない。【０１４７】
ストレージコントローラ２０は、ＦＭＰＫ３０の論理ボリューム１４０毎にダーティデータをまとめて一括送信用ライトコマンド１１００を生成するとしてもよい。この場合、一括送信用ライトコマンド１１００は、ライトデータ毎に圧縮オプションを備えるとしてもよいし、または、１つの圧縮オプションを備えるとしてもよい。【０１４８】
ストレージコントローラ２０は、ＦＭＰＫ３０に対して、圧縮が必要なダーティデータと、圧縮が不要なダーティデータとをそれぞれまとめた一括送信用ライトデータ１１００を生成するとしてもよい。この場合、一括送信用ライトコマンド１１００は、１つの圧縮オプションを備えるとしてもよい。【０１４９】
ストレージコントローラ２０は、一括送信用ライトデータ１１００によってまとめて送信可能なダーティデータの数の上限値を設けてもよい。【０１５０】
図２０は、ストレージコントローラ２０において一括送信用ライトコマンド１１００を生成する処理の一例を示すフローチャートである。【０１５１】
ストレージコントローラ２０は、一定の周期でこの処理を実行するとしてもよい。または、ストレージコントローラ２０は、キャッシュ領域に格納されているダーティデータの合計サイズが所定以上となった場合に、この処理を実行するとしてもよい。例えば、ストレージコントローラ２０は、キャッシュ領域に格納されているダーティデータの合計サイズが物理ページ４２２のサイズ以上となった場合に、この処理を実行する。または、ストレージコントローラ２０は、ホスト計算機１１から新たに受信したライトデータを、キャッシュ領域の容量不足によってそのキャッシュ領域にライトできなかった場合、この処理を実行するとしてもよい。以下、フローチャートを説明する。【０１５２】
ストレージコントローラ２０は、所定のキャッシュ管理情報を参照し、キャッシュ領域に格納されているダーティデータを特定する（Ｓ５０１）。【０１５３】
ストレージコントローラ２０は、その特定したダーティデータのライト先に割り当てられるチャンクのアドレス（論理ボリューム１４０におけるチャンクのアドレス）を基に、そのダーティデータの送信先となるＦＭＰＫ３０を特定する（Ｓ５０２）。【０１５４】
ストレージコントローラ２０は、ダーティデータの送信先となるＦＭＰＫ３０毎に、一括送信用ライトコマンド１１００を生成する（Ｓ５０３）。ストレージコントローラ２０は、同じＦＭＰＫ３０に２つ以上のダーティデータを送信する場合、図１９に示す一括送信用ライトコマンド１１００を生成し、同じＦＭＰＫ３０に１つのダーティデータを送信する場合、図１０に示すライトコマンド１０００を生成するとしてもよい。【０１５５】
ストレージコントローラ２０は、その生成した一括送信用ライトコマンド１１００を、各ＦＭＰＫ３０に送信する（Ｓ５０４）。【０１５６】
ストレージコントローラ２０は、一部のＦＭＰＫ３０から完了応答を一定時間経っても受信しない場合又は失敗応答を受信した場合（Ｓ５０５：ＮＯ）、失敗したＦＭＰＫ３０を特定し、その失敗したＦＭＰＫ３０に対して再度ステップＳ５０３からの処理を実行する（Ｓ５０６）。【０１５７】
ストレージコントローラ２０は、全てのＦＭＰＫ３０から完了応答を受信した場合（Ｓ５０５：ＹＥＳ）、当該処理を終了する（終了）。【０１５８】
以上の処理により、ストレージコントローラ２０は、一括送信用ライトコマンド１１００を生成し、その生成した一括送信用ライトコマンド１１００を各ＦＭＰＫ３０に送信することができる。【０１５９】
図２１は、ＦＭＰＫコントローラ３１において一括送信用ライトデータ１１００を受信した場合の処理例を示すフローチャートである。【０１６０】
ＦＭＰＫコントローラ３１は、ストレージコントローラ２０から一括送信用ライトコマンド１１００を受信すると、その一括送信用ライトコマンド１１００に対応する複数のライトデータをいったんメモリ３４に格納する（Ｓ６０１）。【０１６１】
ＦＭＰＫコントローラ３１は、一括送信用ライトコマンド１１００において、圧縮要否フラグ「必要」に対応するライトデータと、圧縮要否フラグ「不要」に対応するライトデータとを分離し、各々のライトデータに対して以下の処理を実行する（Ｓ６０２）。【０１６２】
＜圧縮要否フラグ「必要」に対応するライトデータの処理＞
ＦＭＰＫコントローラ３１は、圧縮要否フラグが「必要」に対応するライトデータを一括で圧縮し、圧縮データを生成する（Ｓ６０３）。【０１６３】
ＦＭＰＫコントローラ３１は、圧縮データのサイズ分の未割当の物理ページ４２２を確保する（Ｓ６０４）。この処理は、例えば、図１６のステップＳ３０２と同様の処理である。【０１６４】
ＦＭＰＫコントローラ３１は、論理ページ４１２とその確保した物理ページ４２２との対応関係を、論理−物理ページマッピングテーブル３１０及び物理−論理ページマッピングテーブル３３０に反映する（Ｓ６０５）。この処理は、例えば、図１６のステップＳ３０３と同様の処理である。【０１６５】
ＦＭＰＫコントローラ３１は、その確保した物理ページ４２２に圧縮データをライトする（Ｓ６０６）。この処理は、例えば、図１６のステップＳ３０４と同様の処理である。【０１６６】
ＦＭＰＫコントローラ３１は、物理−論理ページマッピングテーブル３３０において、そのライト先の物理ページ４２２に対応するエントリの圧縮状態３３４に「済み」を格納し（Ｓ６０７）、当該処理を終了する（終了）。ここで、ＦＭＰＫコントローラ３１が、図１６のステップＳ３０６の場合とは異なり圧縮状態３３４に「済み」を格納するのは、「同期圧縮モード」が設定されているからである。【０１６７】
＜圧縮要否フラグが「不要」に対応するライトデータの処理＞
ＦＭＰＫコントローラ３１は、ライトデータのサイズ分の未割当の物理ページ４２２を確保する（Ｓ６１１）。この処理は、例えば、図１６のステップＳ３０２と同様の処理である。【０１６８】
ＦＭＰＫコントローラ３１は、論理ページ４１２とその確保した物理ページ４２２との対応関係を、論理−物理ページマッピングテーブル３１０及び物理−論理ページマッピングテーブル３３０に反映する（Ｓ６１２）。この処理は、例えば、図１６のステップＳ３０３と同様の処理である。【０１６９】
ＦＭＰＫコントローラ３１は、その確保した物理ページ４２２にライトデータをライトする（Ｓ６１３）。この処理は、例えば、図１６のステップＳ３０４と同様の処理である。【０１７０】
ＦＭＰＫコントローラ３１は、物理−論理ページマッピングテーブル３３０において、そのライトした物理ページ４２２に対応するエントリの圧縮状態３３４に「不要」を格納し（Ｓ６１４）、当該処理を終了する（終了）。この処理は、例えば、図１６のステップＳ３０６と同様の処理である。【０１７１】
実施例２によれば、ストレージコントローラ２０は、複数のダーティデータを、一回の一括送信用ライトコマンド１１００で（又は少ない回数で）、ＦＭＰＫ３０に送信することができる。これにより、複数のダーティデータを個別のライトコマンド１０００で送信する場合と比べて、ストレージコントローラ２０とＦＭＰＫ３０との間のデータ伝送帯域の消費量を抑制することができる。【０１７２】
また、ＦＭＰＫコントローラ３１は、複数のライトデータを一括で圧縮することができる。これにより、ダーティデータを個別に圧縮する場合と比べて、ＦＭＰＫコントローラ３１の処理負荷を軽減することができる。これらの効果は、ダーティデータのサイズが小さい場合（例えばページサイズよりも小さい場合）に、より高い効果を得ることができる。
【実施例３】
【０１７３】
圧縮機能を有するＦＭＰＫ３０は、複数のＦＭチップ３９から構成される物理的な記憶領域（例えば１ＴＢ）よりも大きな論理的な記憶領域（例えば８ＴＢ）を、ストレージコントローラ２０に提供することができる。【０１７４】
非同期圧縮モードの設定されているＦＭＰＫコントローラ３１は、サイズの大きなデータのライトコマンド１０００を受信すると、いったん、そのライトデータを圧縮せずに非圧縮で物理的な記憶領域にライトする。しかし、ＦＭＰＫコントローラ３１は、物理的な記憶領域にそのライトデータよりも大きな空き領域が存在しない場合、そのデータをライトすることができない。これに対して、同期圧縮モードの設定されているＦＭＰＫコントローラ３１は、受信したライトデータを順次圧縮して物理的な記憶領域にライトするので、必ずしもそのライトデータよりも大きな空き容量が物理的な記憶領域に存在しなくてもよい。【０１７５】
そこで、本実施例では、ＦＭＰＫコントローラ３１に対して同期圧縮モード及び非同期圧縮モードの切り替えを指示できる「圧縮モード切替コマンド」を新たに導入する。そして、ストレージコントローラ２０は、サイズの大きなデータのライトコマンド１０００をＦＭＰＫ３０に送信する前に、ＦＭＰＫ３０に同期圧縮モードへの切り替えを指示する圧縮モード切替コマンドを送信する。その後、ストレージコントローラ２０は、ライトコマンド１０００をＦＭＰＫ３０に送信する。ＦＭＰＫコントローラ３１は、圧縮モード切替コマンドを受信した場合、そこで指定された圧縮モードに従って、その後に受信したデータを圧縮して格納する。【０１７６】
または、上述のライトコマンド１０００の圧縮オプション１００４に、同期圧縮モード又は非同期圧縮モードの設定フラグを追加する。例えば、圧縮オプション１００４には、上述の圧縮要否フラグと組み合わせて、「不要」、「非同期圧縮必要」、及び「同期圧縮必要」の何れかをセットできるとしてもよい。例えば、ストレージコントローラ２０は、データのサイズが閾値よりも大きい場合、ライトコマンド１０００の圧縮オプション１００４に「同期圧縮必要」をセットしてＦＭＰＫ３０に送信する。ＦＭＰＫコントローラ３１は、圧縮オプション１００４に「同期圧縮必要」が設定されている場合、同期圧縮モードでライトデータを圧縮してライトする。【０１７７】
サイズの大きなライトデータを一度に格納する場合とは、例えば、コレクションコピー、フォーマット及びボリュームのイニシャルコピー等が実行される場合である。コレクションコピーとは、ＲＡＩＤ機能によるデータ復旧に係る処理であり、例えば、ＲＡＩＤを構成する１つのドライブが故障したときに、スペアの記憶デバイス等にデータを回復させる処理である。フォーマットとは、ボリュームを初期化する処理であり、例えばボリューム全体にゼロデータを書き込む。ボリュームのイニシャルコピーとは、或るボリューム内の全てのデータを別のボリュームにコピーする処理である。【０１７８】
コレクションコピーは、ＦＭＰＫ３０の単位で実行される。ストレージコントローラ２０は、コレクションコピーを実行する場合、処理対象のＦＭＰＫ３０に所定のコマンドを送信する。【０１７９】
ボリュームのイニシャルコピーは、ボリュームの単位で実行される。ストレージコントローラ２０は、ボリュームのイニシャルコピーを実行する場合、ボリュームを構成する複数のＦＭＰＫ３０を特定し、それら特定した複数のＦＭＰＫ３０の各々に所定のコマンドを送信する。【０１８０】
図２２は、圧縮モード切替コマンドを導入した場合のストレージコントローラ２０における処理の一例を示すフローチャートである。【０１８１】
ストレージコントローラ２０は、ライトデータのサイズが閾値以上であるか否かを判定する（Ｓ１００１）。この閾値は、所定値であってもよいし、または、ライト対象のＦＭＰＫ３０の空き容量に基づいて決定される値（例えば、空き容量の９０％の値）であってもよい。【０１８２】
「ライトデータのサイズ＜閾値」である場合（Ｓ１００１：ＮＯ）、ストレージコントローラ２０は、ライト対象のＦＭＰＫ３０にライトコマンド１０００を送信し（Ｓ１００６）、処理を終了する（終了）。【０１８３】
「ライトデータのサイズ≧閾値」である場合（Ｓ１００１：ＹＥＳ）、ストレージコントローラ２０は、ライト対象のＦＭＰＫ３０が非同期圧縮モードであるか否かを判定する（Ｓ１００２）。ここで、ストレージコントローラ２０は、各ＦＭＰＫ３０の圧縮モードを所定のテーブルで管理する構成をとってもよいし、または、毎回ＦＭＰＫ３０に圧縮モードを問い合わせる構成をとってもよい。【０１８４】
ライト対象のＦＭＰＫ３０が非同期圧縮モードであった場合（Ｓ１００２：非同期）、ストレージコントローラ２０は、ライト対象のＦＭＰＫ３０に、同期圧縮モードへの変更を指示する「圧縮モード切替コマンド」を送信し（Ｓ１００３）、ステップＳ１００４に進む。【０１８５】
ライト対象のＦＭＰＫ３０が同期圧縮モードであった場合（Ｓ１００２：同期）、ストレージコントローラ２０は、そのままステップＳ１００４に進む。つまり、ステップＳ１００４の段階でライト対象のＦＭＰＫ３０は、同期圧縮モードとなっている。【０１８６】
ストレージコントローラ２０は、ライト対象のＦＭＰＫ３０に、圧縮要否フラグに「必要」を設定したライトコマンドを送信する（Ｓ１００４）。このライトコマンドを受信したＦＭＰＫ３０は、同期圧縮モードでデータを圧縮してＦＭチップ３９にライトする。【０１８７】
その後（例えば、ＦＭＰＫ３０から完了応答を受信した後）、ストレージコントローラ２０は、ライト対象のＦＭＰＫ３０に、非同期圧縮モードへの変更を指示する「圧縮モード切替コマンド」を送信し（Ｓ１００５）、当該処理を終了する（終了）。【０１８８】
ストレージコントローラ２０は、コレクションコピー、フォーマット、又はボリュームのイニシャルコピー等が要求されたことを契機として、ステップＳ１００２以降の処理を実行するとしてもよい。【０１８９】
ＦＭＰＫ３０は、圧縮モード切替コマンドで「同期圧縮モード」が指示された場合には、その後に受信したライトコマンドが圧縮要否フラグ「不要」または圧縮オプションを含まない場合であってもライトデータを圧縮してライトするとしてもよい。【０１９０】
図２３は、圧縮オプション１００４に圧縮モードのフラグを追加した場合のストレージコントローラ２０における処理の一例を示すフローチャートである。【０１９１】
ストレージコントローラ２０は、ライトデータのサイズが閾値以上であるか否かを判定する（Ｓ１１０１）。これは、図２２のステップＳ１００１と同様の処理である。【０１９２】
「ライトデータのサイズ＜閾値」である場合（Ｓ１１０１：ＮＯ）、ストレージコントローラ２０は、ステップＳ１１０４の処理に進む。【０１９３】
「ライトデータのサイズ≧閾値」である場合（Ｓ１１０１：ＹＥＳ）、ストレージコントローラ２０は、ライト対象のＦＭＰＫ３０が非同期圧縮モードであるか否かを判定する（Ｓ１１０２）。ここで、ライト対象のＦＭＰＫ３０が非同期圧縮モードにしか対応していない場合、ストレージコントローラ２０は、このステップＳ１１０２を省略し、ステップＳ１１０３に進んでもよい。【０１９４】
ライト対象のＦＭＰＫ３０が非同期圧縮モードであった場合（Ｓ１１０２：非同期）、ストレージコントローラ２０は、圧縮オプション１００４に「同期圧縮必要」をセットしたライトコマンド１０００を生成してライト対象のＦＭＰＫ３０に送信し（Ｓ１００３）、当該処理を終了する（終了）。このライトコマンド１０００を受信したＦＭＰＫ３０は、同期圧縮モードでデータをライトする。このとき、ＦＭＰＫ３０は、このライトコマンドに対応するデータのみ同期圧縮モードでライトするとしてもよい。【０１９５】
ライト対象のＦＭＰＫ３０が同期圧縮モードであった場合（Ｓ１１０２：同期）、又はステップＳ１１０２において「ライトデータのサイズ＜閾値」であった場合（Ｓ１１０１：ＮＯ）、ストレージコントローラ２０は、「非同期圧縮必要」をセットしたライトコマンドを生成してライト対象のＦＭＰＫ３０に送信し（Ｓ１１０４）、当該処理を終了する（終了）。【０１９６】
実施例３に係る構成は、実施例２に示した一括送信用ライトコマンド１１００にも適用可能である。【０１９７】
実施例３によれば、ストレージコントローラ２０は、ＦＭＰＫ３０にライトするデータのサイズに応じて、そのＦＭＰＫ３０の同期圧縮モードと非同期圧縮モードとを切り替えることができる。つまり、ＦＭＰＫ３０の空き容量が少ない場合であっても、サイズの大きなデータをそのＦＭＰＫ３０に格納することができる。【０１９８】
上述した実施例は、本発明の説明のための例示であり、本発明の範囲をそれらの実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【０１９９】
１０…ストレージシステム  １１…ホスト計算機  １２…管理装置  ２０…ストレージコントローラ  ３０…ＦＭＰＫ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  Ｐａｃｋａｇｅ）
【図１】
0006007332.tif 000002
【図２】
0006007332.tif 000003
【図３】
0006007332.tif 000004
【図４】
0006007332.tif 000005
【図５】
0006007332.tif 000006
【図６】
0006007332.tif 000007
【図７】
0006007332.tif 000008
【図８】
0006007332.tif 000009
【図９】
0006007332.tif 000010
【図１０】
0006007332.tif 000011
【図１１】
0006007332.tif 000012
【図１２】
0006007332.tif 000013
【図１３】
0006007332.tif 000014
【図１４】
0006007332.tif 000015
【図１５】
0006007332.tif 000016
【図１６】
0006007332.tif 000017
【図１７】
0006007332.tif 000018
【図１８】
0006007332.tif 000019
【図１９】
0006007332.tif 000020
【図２０】
0006007332.tif 000021
【図２１】
0006007332.tif 000022
【図２２】
0006007332.tif 000023
【図２３】
0006007332.tif 000024