(57)【特許請求の範囲】
【請求項１】
プール（２６０１）の基になる複数の記憶装置（１１１）と、
コントローラ（１２０）と
を備え、
前記プールが、複数のプールサブ領域（２６０３）で構成されており、
プールサブ領域毎に、長さの異なる実ページ長が定義されており、
複数種類の実ページ長のうちの最大の実ページ長は、仮想ページ長と同じであり、
前記コントローラは、
仮想ボリューム（２６０５）を構成する複数の仮想ページのうちのライト先仮想ページに対するライトデータ要素を圧縮する圧縮部（１２６）と、
圧縮されているデータ要素を伸張する伸張部（１２６）と、
下記（条件Ａ）及び（条件Ｂ）を満たす実ページを選択し、前記選択された実ページを前記ライト先仮想ページに割り当てるプール管理部（１３２）と、
（条件Ａ）実ページ長が、圧縮されたライトデータ要素を有するデータユニットのデータ長に基づく実ページ長であること；
（条件Ｂ）実ページが、いずれの仮想ページにも割り当てられていない実ページであること；
前記選択された実ページに前記データユニットを格納するＩ／Ｏ処理部（１３３）と
を備え、
各仮想ページは、仮想的な記憶領域であり、
各実ページは、物理的な記憶領域であり、
前記データユニットは、前記圧縮されたライトデータ要素それ自体である、又は、前記圧縮されたライトデータ要素と特定の情報とで構成されており、
前記ライト先仮想ページに対するライト処理に、実ページリード処理と、暫定実ページライト処理が含まれており、
前記コントローラは、前記ライト処理とは別のタイミングで、非同期圧縮処理を行い、
前記日非同期圧縮処理には、実ページライト処理が含まれており、
前記実ページリード処理では、
（Ａ１）前記プール管理部が、前記ライト先仮想ページに既に実ページが割り当てられているか否かを判断し、
（Ａ２）前記（Ａ１）の判断の結果が肯定的の場合、前記プール管理部が、前記ライト先仮想ページに対するデータ要素の長さが、仮想ページ長と同じか否かを判断し、
（Ａ３）前記（Ａ２）の判断の結果が否定的の場合、前記Ｉ／Ｏ処理部が、前記ライト先仮想ページに割り当てられている実ページからデータユニットを読出し、読み出したデータユニットが有する圧縮されているデータ要素を前記伸張部が伸張し、前記プール管理部が、前記伸張されたデータ要素に、前記ライト先仮想ページに対するデータ要素を上書きし、
前記実ページライト処理でのライトデータ要素は、前記（Ａ２）の判断の結果が否定的だった場合、上書きされたデータ要素であり、前記（Ａ２）の判断の結果が肯定的だった場合、前記ライト先仮想ページに対するデータ要素であり、
前記非同期圧縮処理では、
（Ｄ１）前記プール管理部が、処理対象の仮想ページの状態が未圧縮であるか否かを判断し、
（Ｄ２）前記（Ｄ１）の判断の結果が肯定的の場合、前記プール管理部が、前記処理対象の仮想ページに割り当てられている実ページを特定し、前記Ｉ／Ｏ処理部が、前記特定された実ページからデータユニットを読み出し、前記実ページライト処理が行われ、前記（Ｄ１）の判断結果が否定的の場合、前記処理対処の仮想ページに対しては、前記実ページライト処理が行われず、
前記実ページライト処理では、
（Ｂ１）前記圧縮部が、前記ライトデータ要素を圧縮し、
（Ｂ２）前記プール管理部が、圧縮されたライトデータ要素を含んだデータユニットの長さが仮想ページ以上か否かを判断し、
（Ｂ３）前記（Ｂ２）の判断の結果が肯定的であれば、前記（条件Ａ）は、実ページ長が、仮想ページ長と同じ実ページ長であることであり、前記Ｉ／Ｏ処理部は、前記データユニットではなく、圧縮前のライトデータ要素を有する別のデータユニットを、前記選択された実ページに格納し、
（Ｂ４）前記（Ｂ２）の判断の結果が否定的であれば、前記（条件Ａ）は、実ページ長が、複数種類の実ページ長のうち、前記データユニットの長さ以上であって前記データユニットの長さとの差が最小である実ページ長であることであり、前記Ｉ／Ｏ処理部は、前記データユニットを、前記選択された実ページに格納し、
その後に、前記プール管理部が、前記処理対象の仮想ページの状態を、圧縮済みであると管理し、
前記（Ｄ２）での前記実ページライト処理では、前記ライトデータ要素は、前記（Ｄ２）において読み出されたデータユニットに含まれているデータ要素であり、
前記実ページリード処理の前記（Ａ３）では、前記プール管理部が、前記ライト先仮想ページの状態が未圧縮か否かを判断し、その判断の結果が否定的の場合に、前記伸張部が、前記読み出されたデータユニットが有する圧縮されているデータ要素を伸張する、
ストレージシステム。
【請求項２】
前記複数のプールサブ領域のうちの未使用のプールサブ領域については実ページ長が定義されておらず、
前記プール管理部が、前記実ページライト処理において、前記（条件Ａ）及び（条件Ｂ）を満たす実ページが見つからない場合、いずれかの未使用のプールサブ領域について前記（条件Ａ）を満たす実ページ長を定義し、その定義された実ページ長の実ページを、前記（条件Ａ）を満たす実ページ長が定義されたプールサブ領域から選択する、
請求項１記載のストレージシステム。
【請求項３】
前記（Ｂ４）において、前記（条件Ａ）及び前記（条件Ｂ）を満たす実ページは、いずれの仮想ページにも割り当てられていない二以上の実ページであることがあり、それら二以上の実ページの合計実ページ長は、複数種類の合計実ページ長のうち、前記データユニットの長さ以上であって前記データユニットの長さとの差が最小となる合計実ページ長である、
請求項１又は２に記載のストレージシステム。
【請求項４】
前記暫定実ページライト処理では、
（Ｃ１）前記プール管理部が、仮想ページ長と同じ実ページ長の未割当ての実ページを選択し、前記ライト先仮想ページの状態が未圧縮であると管理し、前記選択した実ページを前記ライト先仮想ページに割り当て、
（Ｃ２）前記Ｉ／Ｏ処理部が、前記選択された実ページに、ライトデータ要素を含んだデータユニットを格納し、
前記暫定実ページライト処理での前記ライトデータ要素は、前記（Ｂ２）の判断の結果が否定的だった場合、上書きされたデータ要素であり、前記（Ｂ２）の判断の結果が肯定的だった場合、前記ライト先仮想ページに対するデータ要素それ自体である、
請求項１乃至３のいずれか１項に記載のストレージシステム。
【請求項５】
前記プールが、複数の実ボリュームで構成されており、
前記実ボリュームは、一以上の記憶装置に基づく論理ボリュームであり、
各実ボリュームは、複数のチャンクで構成されており、
前記プールサブ領域は、チャンクである、
請求項２記載のストレージシステム。
【請求項６】
前記プール管理部は、いずれかの使用中のプールサブ領域を構成する全ての実ページが未割当てか否かを判断し、その判断の結果が肯定的であれば、その使用中のプールサブ領域の状態を使用中から未使用に変更する、
請求項５に記載のストレージシステム。
【請求項７】
前記（条件Ａ）及び前記（条件Ｂ）を満たす実ページは、いずれの仮想ページにも割り当てられていない二以上の実ページであることがあり、それら二以上の実ページの合計実ページ長は、複数種類の合計実ページ長のうち、前記データユニットの長さ以上であって前記データユニットの長さとの差が最小となる合計実ページ長である、
請求項１、５及び６のいずれか１項に記載のストレージシステム。
【請求項８】
前記コントローラは、仮想ページ毎のアクセス頻度を管理するアクセス頻度管理部（２８０１）を更に有し、
前記リード元仮想ページのアクセス頻度が所定のアクセス頻度より高ければ、前記（Ｄ１）の判断の結果が肯定的であっても、前記（Ｄ２）が実行されない、
請求項１記載のストレージシステム。
【請求項９】
前記プール管理部が、定義されている実ページ長が同じである二以上のプールサブ領域を特定し、
前記Ｉ／Ｏ処理部が、前記二以上のプールサブ領域のうちの一つのプールサブ領域内の割当て済みの実ページから、前記二以上のプールサブ領域のうちの他のプールサブ領域内の未割当ての実ページに、データユニットをコピーし、
前記プール管理部が、コピー元の実ページの仮想ページに対する割当てを解除し、その仮想ページに、コピー先の実ページを割り当て、前記特定されたプールサブ領域の状態を未使用状態に更新する、
請求項２、５及び６のいずれかに記載のストレージシステム。
【請求項１０】
仮想ボリュームを構成する複数の仮想ページのうちのライト先仮想ページに対するライトデータ要素を圧縮し（Ｓ８０１）、
下記（条件Ａ）及び（条件Ｂ）を満たす実ページをプール（２６０１）から選択し（Ｓ８０４、Ｓ８１２）、
（条件Ａ）実ページ長が、圧縮されたライトデータ要素を有するデータユニットのデータ長に基づく実ページ長であること；
（条件Ｂ）実ページが、いずれの仮想ページにも割り当てられていない実ページであること；
前記プールが、複数のプールサブ領域（２６０３）で構成されており、
プールサブ領域毎に、長さの異なる実ページ長が定義されており、
複数種類の実ページ長のうちの最大の実ページ長は、仮想ページ長と同じであり、
前記選択された実ページを前記ライト先仮想ページに割り当て（Ｓ８０６、Ｓ８０７）、
前記選択された実ページに前記データユニットを格納し（Ｓ８０８）、
前記プール（２６０１）は、複数の記憶装置（１１１）が基になっており、複数の実ページ（２６０７）で構成されており、
前記複数の実ページには、長さの異なる実ページが含まれており、
各仮想ページは、仮想的な記憶領域であり、
各実ページは、物理的な記憶領域であり、
前記データユニットは、前記圧縮されたライトデータ要素それ自体である、又は、前記圧縮されたライトデータ要素と特定の情報とで構成されており、
前記ライト先仮想ページに対するライト処理に、実ページリード処理と、暫定実ページライト処理が含まれており、
前記ライト処理とは別のタイミングで、非同期圧縮処理を行い、
前記日非同期圧縮処理には、実ページライト処理が含まれており、
前記実ページリード処理では、
（Ａ１）前記ライト先仮想ページに既に実ページが割り当てられているか否かを判断し、
（Ａ２）前記（Ａ１）の判断の結果が肯定的の場合、前記ライト先仮想ページに対するデータ要素の長さが、仮想ページ長と同じか否かを判断し、
（Ａ３）前記（Ａ２）の判断の結果が否定的の場合、前記ライト先仮想ページに割り当てられている実ページからデータユニットを読出し、読み出したデータユニットが有する圧縮されているデータ要素を伸張し、前記伸張されたデータ要素に、前記ライト先仮想ページに対するデータ要素を上書きし、
前記実ページライト処理でのライトデータ要素は、前記（Ａ２）の判断の結果が否定的だった場合、上書きされたデータ要素であり、前記（Ａ２）の判断の結果が肯定的だった場合、前記ライト先仮想ページに対するデータ要素であり、
前記非同期圧縮処理では、
（Ｄ１）処理対象の仮想ページの状態が未圧縮であるか否かを判断し、
（Ｄ２）前記（Ｄ１）の判断の結果が肯定的の場合、前記処理対象の仮想ページに割り当てられている実ページを特定し、前記特定された実ページからデータユニットを読み出し、前記実ページライト処理が行われ、前記（Ｄ１）の判断結果が否定的の場合、前記処理対処の仮想ページに対しては、前記実ページライト処理が行われず、
前記実ページライト処理では、
（Ｂ１）前記ライトデータ要素を圧縮し、
（Ｂ２）圧縮されたライトデータ要素を含んだデータユニットの長さが仮想ページ以上か否かを判断し、
（Ｂ３）前記（Ｂ２）の判断の結果が肯定的であれば、前記（条件Ａ）は、実ページ長が、仮想ページ長と同じ実ページ長であることであり、前記データユニットではなく、圧縮前のライトデータ要素を有する別のデータユニットを、前記選択された実ページに格納し、
（Ｂ４）前記（Ｂ２）の判断の結果が否定的であれば、前記（条件Ａ）は、実ページ長が、複数種類の実ページ長のうち、前記データユニットの長さ以上であって前記データユニットの長さとの差が最小である実ページ長であることであり、前記データユニットを、前記選択された実ページに格納し、
その後に、前記処理対象の仮想ページの状態を、圧縮済みであると管理し、
前記（Ｄ２）での前記実ページライト処理では、前記ライトデータ要素は、前記（Ｄ２）において読み出されたデータユニットに含まれているデータ要素であり、
前記実ページリード処理の前記（Ａ３）では、前記ライト先仮想ページの状態が未圧縮か否かを判断し、その判断の結果が否定的の場合に、前記読み出されたデータユニットが有する圧縮されているデータ要素を伸張する、
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ要素を圧縮して格納する記憶制御に関する。
【背景技術】
【０００２】
データ要素を圧縮して格納するストレージシステムとして、例えば、特許文献１に開示のストレージシステムが知られている。
【０００３】
【特許文献１】特開２００６−２５９９６２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ストレージシステムは、一般に、コントローラと記憶装置群とを備えている。データ要素は、コントローラで圧縮され、圧縮されたデータ要素が、記憶装置群に基づく記憶空間に格納される。
【０００５】
圧縮後のデータ要素の長さ（サイズ）は、一般に、圧縮方式が異なっていれば異なるし、或いは、圧縮方式が同じであっても、圧縮前のデータ要素の内容によって異なる。このため、コントローラが有するメモリに記憶される管理情報は、膨大な量になるおそれがある。なぜなら、管理情報には、例えば、記憶空間における空き記憶領域の位置及び長さを表す情報要素が含まれる必要があり、その情報要素は、空き記憶領域の数が多くなればなるほど増えるからである。また、管理情報には、例えば、圧縮されたデータ要素の格納位置及び長さを表す情報要素が含まれる必要があり、その情報要素は、圧縮されたデータ要素の数が多くなればなるほど増えるからである。
【０００６】
管理情報が膨大な量になるおそれを低減する方法として、記憶空間を固定長の記憶領域（以下、固定領域）に分割しておき一つの圧縮されたデータ要素を一つの固定領域に格納する方法、つまり、固定領域単位での管理を行う方法が考えられる。
【０００７】
しかし、この方法では、固定領域の長さが長いと、一つの固定領域に長い空き領域（圧縮されたデータ要素が占める領域以外の領域）が残る可能性があり、故に、容量効率が悪いと考えられる。一方、固定領域の長さが短いと、一つの固定領域に生じ得る空き領域の長さは短くて済むであろうが、管理しなければならない固定領域の数が多くなる。このため、管理情報の量に制限がある場合、固定領域の長さが短いと、管理可能な固定領域群のトータル長が短く、故に、記憶空間に格納可能なデータ長（圧縮されたデータ要素のトータル長）も短い。つまり、容量スケーラビリティが低下するおそれがある。
【０００８】
そこで、本発明の目的は、データ要素を圧縮して格納するストレージシステムにおいて、高い容量効率を実現し且つ容量スケーラビリティが低下しないようにすることにある。
【課題を解決するための手段】
【０００９】
ストレージシステムが備える複数の記憶装置を基にプールが形成される。プールは、複数の実ページ（物理的な記憶領域）で構成されている。複数の実ページには、長さの異なる実ページが含まれている。
【００１０】
コントローラは、圧縮部と、プール管理部と、Ｉ／Ｏ処理部とを有する。
【００１１】
圧縮部は、仮想ボリュームを構成する複数の仮想ページ（仮想的な記憶領域）のうちのライト先仮想ページに対するライトデータ要素を圧縮する。
【００１２】
プール管理部は、下記（条件Ａ）及び（条件Ｂ）を満たす実ページを選択し、選択された実ページをライト先仮想ページに割り当てる。
（条件Ａ）実ページ長が、圧縮されたライトデータ要素を有するデータユニットのデータ長に基づく実ページ長であること；
（条件Ｂ）実ページが、いずれの仮想ページにも割り当てられていない実ページであること。
【００１３】
Ｉ／Ｏ処理部は、選択された実ページに上記データユニットを格納する。
【００１４】
データユニットは、圧縮されたライトデータ要素それ自体である、又は、圧縮されたライトデータ要素と特定の情報とで構成されている。特定の情報は、例えば、データ保証コード（例えばＥＣＣ（Error-Correcting Code））である。
【００１５】
ここで、「データ要素」（例えばライトデータ要素）は、一つの仮想ページに対応する要素であり、例えば、仮想ページ長と同じ長さを有する。データ要素が圧縮されることにより、仮想ページ長よりも短いデータ要素となる（データ要素の内容等によっては、そうならないこともある）。
【００１６】
圧縮部、プール管理部及びＩ／Ｏ処理部のうちの少なくとも一つは、ハードウェア、コンピュータプログラム又はそれらの組み合わせ（例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること）により構築することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、本発明の第１の実施形態に係る計算機システムの構成図である。
【図２】図２は、管理端末１０２の構成を示す図である。
【図３】図３は、各種テーブルの構成図である。
【図４】図４は、本発明の第１の実施形態でのプール管理画面４０１の一例を示す。
【図５】図５は、仮想ＬＵ管理画面５０１の一例を示す。
【図６】図６は、ライト処理のフローチャートである。
【図７】図７は、本発明の第１の実施形態での実ページリード処理のフローチャートである。
【図８】図８は、本発明の第１の実施形態での実ページライト処理のフローチャートである。
【図９】図９は、デフォルト長実ページ選択処理のフローチャートである。
【図１０】図１０は、実ページ選択処理のフローチャートである。
【図１１】図１１は、本発明の第１の実施形態でのリード処理のフローチャートである。
【図１２】図１２は、本発明の第２の実施形態での不揮発性メモリ１３０が有するプログラム及びテーブルを示す。
【図１３】図１３は、本発明の第２の実施形態での前述したテーブル１３００、１３１０、１３２０及び１３３０の構成図である。
【図１４】図１４は、本発明の第二の実施形態でのプール管理画面１４０１の一例を示す。
【図１５】図１５は、実ページ長管理画面１５０１の一例を示す。
【図１６】図１６は、本発明の第２の実施形態でのデフォルト長実ページ選択処理のフローチャートである。
【図１７】図１７は、本発明の第２の実施形態での実ページ選択処理のフローチャートである。
【図１８】図１８は、チャンクガーベージコレクション処理のフローチャートである。
【図１９】図１９は、本発明の第３の実施形態での仮想ページテーブル１９００の構成図である。
【図２０】図２０は、本発明の第３の実施形態での実ページ選択処理のフローチャートである。
【図２１】図２１は、本発明の第４の実施形態での仮想ページテーブル２１３７の構成図である。
【図２２】図２２は、本発明の第４の実施形態での実ページリード処理のフローチャートである。
【図２３】図２３は、暫定実ページライト処理のフローチャートである。
【図２４】図２４は、本発明の第４の実施形態でのリード処理のフローチャートである。
【図２５】図２５は、非同期圧縮処理のフローチャートである。
【図２６】図２６は、本発明の第１の実施形態の概要を示す。
【図２７】図２７は、本発明の第１乃至第３の実施形態の組み合わせにおいて仮想ＬＵがセカンダリＬＵである実施形態の概要の一例を示す。
【図２８Ａ】図２８Ａは、本発明の第４の実施形態の一変形例での仮想ページテーブル２１３７の構成図である。
【図２８Ｂ】図２８Ｂは、本発明の第４の実施形態の一変形例で不揮発性メモリ１３０に記憶されるアクセス頻度管理プログラムを示す。
【図２８Ｃ】図２８Ｃは、本発明の第４の実施形態の一変形例での非同期圧縮処理の変更箇所を示す。
【図２９Ａ】図２９Ａは、本発明の第２の実施形態の第２の変形例で行われる、プールサブ領域間のデータユニットのコピーを示す。
【図２９Ｂ】図２９Ｂは、本発明の第２の実施形態の第２の変形例において、コピー元の実ページの状態が使用中から未使用に更新されたことを示す。
【図２９Ｃ】図２９Ｃは、コピー元のプールサブ領域の状態が使用中から未使用に更新されたことを示す。
【符号の説明】
【００１８】
１１０…ストレージシステム
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照して、本発明の幾つかの実施形態を説明する。なお、以下、同種の要素を特に区別しない場合には、同一の親番号のみを用い、同種の要素を区別する場合には、親番号と子符号との組合せを用いることとする。
【実施例１】
【００２０】
図２６は、本発明の第１の実施形態の概要を示す。
【００２１】
ストレージシステム１１０は、コントローラ１２０及びプール２６０１を有する。
【００２２】
プール２６０１は、複数のプールサブ領域２６０３（例えば３つのプールサブ領域２６０３Ａ乃至２６０３Ｃ）で構成されている。各プールサブ領域２６０３は、複数の実ページ２６０７を有する。実ページ２６０７の長さ（実ページ長）は、プールサブ領域２６０３毎に定義されている。例えば、プールサブ領域２６０３Ｂ内の各実ページ２６０７Ｂの長さは、プール領域２６０３Ａ内の実ページ２６０７Ａよりも長く、プールサブ領域２６０３Ｃ内の各実ページ２６０７Ｃの長さは、実ページ２６０７Ｂよりも長い。一つのプールサブ領域２６０３内では、全ての実ページの長さは同じである。プール２６０１は、複数のＨＤＤ（Hard Disk Drive）が基になった物理的な記憶空間であり、それ故、各実ページ２６０７は、物理的な記憶領域である。
【００２３】
コントローラ１２０は、仮想ＬＵ（Logical Unit）２６０５をホストに提供する。仮想ＬＵ２６０５は、複数の仮想ページ２６０９で構成されている。仮想ＬＵ２６０５は、仮想的な論理ボリューム（ＨＤＤが基になっていない論理ボリューム）であり、それ故、各仮想ページ２６０９は、仮想的な記憶領域である。一つの仮想ＬＵ２６０５における全ての仮想ページ２６０９は同じ長さである。実ページ２６０７の最大長は、例えば、仮想ページ２６０９の長さと同じである。
【００２４】
以下、第１の実施形態で行われる処理の概要を説明する。
【００２５】
コントローラ１２０は、ホストからライト要求を受けると、各ライトデータ要素（図では紙面の都合上「ＷＤＥ」と略記）について（換言すれば、このライト要求から特定されるライト範囲に属する各仮想ページについて）、次の処理を行う。すなわち、コントローラ１２０は、ライトデータ要素を圧縮する。次に、コントローラ１２０は、圧縮されたライトデータ要素（図では紙面の都合上「ＣＷＤＥ」と略記）を含んだデータユニットの長さに基づく長さの実ページ２６０７であって、どの仮想ページ２６０９にも割り当てられていない実ページ（つまり未使用の実ページ）２６０７を選択する。具体的には、例えば、コントローラ１２０は、下記２つの条件（ａ）及び（ｂ）を満たす長さの実ページ２６０７、
（ａ）データユニットの長さ以上である；
（ｂ）そのデータユニットの長さとの差が最小である；
を選択する。図２６の例によれば、データユニットの長さは実ページ２６０７Ｂの長さと同じであったため、実ページ２６０７Ｂが選択される。そして、コントローラ１２０は、選択した実ページ２６０７Ｂに、そのデータユニットを格納する。データユニットは、圧縮されたライトデータ要素それ自体であっても良いし、圧縮されたライトデータ要素とそのライトデータ要素に付加されたデータ保証コード（例えばＥＣＣ（Error-Correcting Code））とで構成されていても良い。圧縮されたライトデータ要素にデータ保証コードが付加されていることにより、圧縮されたライトデータ要素のデータ化けを防止することができる。
【００２６】
以下、本発明の第１の実施形態を詳細に説明する。なお、以下、説明を分かり易くするために、データユニットは、圧縮されたデータ要素それ自体であるとする。
【００２７】
図１は、本発明の第１の実施形態に係る計算機システムの構成図である。
【００２８】
第一の通信ネットワーク、例えばＳＡＮ（Storage Area Network）１０３に、複数のホスト１０１と、ストレージシステム１１０が接続されている。また、第二の通信ネットワーク、例えば管理ネットワーク、例えばＬＡＮ（Local Area Network）１０４に、管理端末１０２と、ストレージシステム１１０が接続されている。
【００２９】
ホスト１０１は、ストレージシステム１１０にＩ／Ｏ要求（ライト要求又はリード要求）を発行する計算機である。管理端末１０２は、ストレージシステム１１０を管理するための端末である。
【００３０】
ストレージシステム１１０は、コントローラ１２０と記憶装置群１１４を備えている。記憶装置群１１４は、複数のＨＤＤ１１１で構成されている。なお、ＨＤＤ１１１に代えて、他種の物理記憶装置、例えばフラッシュメモリデバイスなどが採用されても良い。
【００３１】
コントローラ１２０は、ホスト１０１から発行されたＩ／Ｏ要求を受け付け、そのＩ／Ｏ要求の処理に伴い、何れか一以上のＨＤＤ１１１にアクセスする。コントローラ１２０は、複数のホストＩＦ１２１と、管理ＩＦ１２２と、ＣＰＵ１２３と、主メモリ１２４と、キャッシュメモリ１２５と、圧縮伸張回路１２６と、不揮発性メモリ１３０と、ＨＤＤ  ＩＦ１２７とを備える。
【００３２】
ホストＩＦ１２１は、ＳＡＮ１０３を通じてホスト１０１等の外部の装置と通信するためのインターフェイス回路である。ホストＩＦ１２１が、ホスト１０１からのＩ／Ｏ要求を受け付ける。
【００３３】
管理ＩＦ１２２は、管理ネットワーク１０４を通じて管理端末１０２等の外部の装置と通信するためのインターフェイス回路である。
【００３４】
ＨＤＤ  ＩＦ１２７は、ＨＤＤ１１１と通信するためのインターフェイス回路である。
【００３５】
キャッシュメモリ１２５は、例えば揮発性のメモリである。このメモリ１２５には、ホスト１０１から受け付けたライト要求に従うライト対象のデータ、及び、ホスト１０１から受け付けたリード要求に従うリード対象のデータが一時的に記憶される。
【００３６】
圧縮伸張回路１２６は、ハードウェア回路であり、入力されたデータ要素を圧縮又は伸張して出力する。圧縮及び伸張の少なくとも一方が、ハードウェア回路に代えて、コンピュータプログラムがＣＰＵ１２３で実行されることによって行われてもよい。
【００３７】
不揮発性メモリ１３０には、管理端末通信プログラム１３１、プール管理プログラム１３２、Ｉ／Ｏ処理プログラム１３３、実ＬＵテーブル１３４、プールテーブル１３５、実ページテーブル１３６、仮想ページテーブル１３７、及び仮想ＬＵテーブル１３８が格納されている。不揮発性メモリ１３０に記憶されているコンピュータプログラムが主メモリ１２４にロードされ、ＣＰＵ１２４によってそれらのプログラムが実行される。管理端末通信プログラム１３１は、管理端末１０２（具体的には後述のストレージ通信プログラム１４９）と通信するためのプログラムである。プール管理プログラム１３２は、実ページの選択などプール管理に関する処理を行うためのプログラムである。Ｉ／Ｏ処理プログラム１３３は、実ページに圧縮後のデータを格納するなどのＩ／Ｏに関する処理を行うためのプログラムである。各種プログラム及び各種テーブルについては、後に詳述する。また、以下の説明において、コンピュータプログラムが行う処理は、実際には、そのコンピュータプログラムを実行するＣＰＵによって行われる。
【００３８】
図２は、管理端末１０２の構成を示す図である。
【００３９】
管理端末１０２は、計算機であり、例えば、入力装置１４２、出力装置１４３、ＣＰＵ１４４、主メモリ１４５、管理ＩＦ１４６、及びＨＤＤ１４７を備えている。これらは、それぞれ、内部バス１５０に接続されている。
【００４０】
入力装置１４２は、ポインティングデバイス（例えばマウス）やキーボード等である。出力装置１４３は、例えば表示装置である。
【００４１】
ＨＤＤ１４７（他種の記憶装置でも良い）には、ユーザインターフェイス（User Interface）制御プログラム（以下、「ＵＩ制御プログラム」という）１４８、及びストレージ通信プログラム１４９が格納されている。これらのコンピュータプログラムは、主メモリ１４５にロードされ、ロードされたプログラムがＣＰＵ１４４によって実行される。管理ＩＦ１４６は、管理ネットワーク１０４を通じてストレージシステム１１０等の外部の装置と通信するためのインターフェイス回路である。ＵＩ制御プログラム１４８は、ＧＵＩ（Graphical User Interface）を出力装置１４３に表示するためのプログラムである。ストレージ通信プログラム１４９は、ストレージシステム１１０と通信するためのコンピュータプログラムである。ＵＩ制御プログラム１４８、及びストレージ通信プログラム１４９については、後に詳述する。
【００４２】
図３は、各種テーブルの構成図である。
【００４３】
実ＬＵテーブル１３４は、実ＬＵに関する情報を管理するためのテーブルである。具体的には、実ＬＵテーブル１３４は、例えば、実ＬＵ毎に、実ＬＵ  ＩＤが記録される欄３０１と、容量情報が記録される欄３０２とを有する。一つの実ＬＵ（以下、この段落において「対象実ＬＵ」と言う）を例に採って言えば、このテーブル１３４に記録される各種情報は、下記の通りである。実ＬＵ  ＩＤは、対象実ＬＵの識別子を表す情報である。容量情報は、対象実ＬＵの記憶容量を表す情報である。ここで、「実ＬＵ」とは、仮想ＬＵと異なり、ＨＤＤ１１１が基になっている論理ボリュームである。
【００４４】
プールテーブル１３５は、プールに関する情報を管理するためのテーブルである。具体的には、プールテーブル１３５は、例えば、プールを構成する実ＬＵ毎に、実ＬＵ  ＩＤが記録される欄３１１と、実ページ長が記録される欄３１２と、先頭実ページＩＤが記録される欄３１３とを有する。プール２６０１を構成する一つの実ＬＵ（以下、この段落において「対象実ＬＵ」と言う）を例に採って言えば、このテーブル１３５に記録される各種情報は、下記の通りである。実ＬＵ  ＩＤは、対象実ＬＵの識別子を表す情報である。実ページ長情報は、対象実ＬＵを構成する実ページの長さを表す情報である。先頭実ページＩＤは、対象実ＬＵの先頭にある実ページの識別子を表す情報である。以上の説明によれば、第１の実施形態では、図２６を参照して説明したプールサブ領域２６０３は、実ＬＵである。なぜなら、実ＬＵ毎に、実ページ長が定義されていることになる。ちなみに、対象実ＬＵを構成する実ページの数は、対象実ＬＵの容量と、対象実ＬＵの実ページの実ページ長とを基に、算出することが可能である。
【００４５】
実ページテーブル１３６は、実ページに関する情報を管理するためのテーブルである。具体的には、実ページテーブル１３６は、例えば、実ページ毎に、実ページＩＤが記録される欄３２１と、実ＬＵ  ＩＤが記録される欄３２２と、状態情報が記録される欄３２３とを有する。一つの実ページ（以下、この段落において「対象実ページ」と言う）を例に採って言えば、このテーブル１３６に記録される各種情報は、下記の通りである。実ページＩＤは、対象実ページの識別子を表す情報である。実ＬＵ  ＩＤは、対象実ページを有する実ＬＵの識別子を表す情報である。状態情報は、対象実ページの状態を表す情報である。例えば、対象実ページが何れかの仮想ページに割り当てられている場合には、状態情報の値は「ｕｓｅｄ」であり、対象実ページがどの仮想ページにも割り当てられていなければ、状態情報の値は「ｕｎｕｓｅｄ」である。なお、このテーブル１３６には、実ページの長さを表す情報は記録されていないが、実ページの長さは、その実ページに対応した実ＬＵ  ＩＤをキーにプールテーブル１３５が参照されれば、特定可能である。なぜなら、プールテーブル１３５には、実ＬＵ  ＩＤに対応した実ページ長情報が記録されているからである。
【００４６】
仮想ページテーブル１３７は、仮想ページに関する情報を管理するためのテーブルである。具体的には、仮想ページテーブル１３７は、例えば、仮想ページ毎に、仮想ページＩＤが記録される欄３３１と、実ページＩＤが記録される欄３３２と、圧縮データ長情報が記録される欄３３３とを有する。一つの仮想ページ（以下、この段落において「対象仮想ページ」と言う）を例に採って言えば、このテーブル１３７に記録される各種情報は、下記の通りである。仮想ページＩＤは、対象仮想ページの識別子を表す情報である。実ページＩＤは、対象仮想ページに割り当てられている実ページの識別子を表す情報である。なお、対象仮想ページに実ページが割り当てられていなければ、実ページＩＤの値は、例えば、「Ｎ／Ａ」（Ｎｏｔ／Ａｓｓｉｇｎｅｄ）」である。圧縮データ長情報は、対象仮想ページに割り当てられている実ページに格納されている圧縮後のデータ要素の長さを表す情報である。対象仮想ページに実ページが割り当てられていなければ、圧縮データ長情報の値も、例えば「Ｎ／Ａ」とされる。圧縮データ長情報は、例えば、後述の実ページリード処理やリード処理において、読み出されたデータ要素のどの部分に対して伸張処理がかけられれば良いかの特定に使用される。例えば、対象仮想ページに割当てられている実ページから読み出されたデータ要素の長さが５１２ｋＢ（キロバイト）であって、対象仮想ページに対応した圧縮データ長情報の値が３４６ｋＢを表している場合、５１２ｋＢのデータ要素のうちの３４６ｋＢのデータ要素部分についてのみ伸張処理が行われれば良いことがわかる。
【００４７】
仮想ＬＵテーブル１３８は、仮想ＬＵに関する情報を管理するためのテーブルである。具体的には、仮想ＬＵテーブル１３８は、例えば、仮想ＬＵ毎に、仮想ＬＵ  ＩＤが記録される欄３４１と、容量情報が記録される欄３４２と、先頭仮想ページＩＤが記録される欄３４３と、圧縮情報が記録される欄３４４とを有する。一つの仮想ＬＵ（以下、この段落において「対象仮想ＬＵ」と言う）を例に採って言えば、このテーブル１３８に記録される各種情報は、下記の通りである。仮想ＬＵ  ＩＤは、対象仮想ＬＵの識別子を表す情報である。容量情報は、対象仮想ＬＵについて定義された容量、つまり対象仮想ＬＵの容量を表す情報である。先頭仮想ページＩＤは、対象仮想ＬＵの先頭の仮想ページの識別子を表す情報である。圧縮情報は、対象仮想ＬＵに格納されるデータを圧縮するか否かを表す情報である。具体的には、例えば、対象仮想ＬＵに格納されるデータが圧縮されるのであれば、圧縮情報の値は「ｏｎ」であり、対象仮想ＬＵに格納されるデータが圧縮されないのであれば、圧縮情報の値「ｏｆｆ」である。
【００４８】
ところで、プール２６０１内のどの実ＬＵの実ページの長さをどのような長さにするかは、例えば、図４に示すプール管理画面４０１を利用して管理端末１０２のユーザが設定する。また、仮想ＬＵの容量をどんな容量にしてその仮想ＬＵに格納されるデータ要素を圧縮するか否かは、例えば、図５に示す仮想ＬＵ管理画面５０１を利用して管理端末１０２のユーザが設定する。
【００４９】
図４は、プール管理画面４０１の一例を示す。
【００５０】
プール管理画面４０１は、ＵＩ制御プログラム１４９によって表示されるＧＵＩである。プール管理画面４０１には、プール２６０１に追加する実ＬＵのＩＤの入力欄４０２と、その追加する実ＬＵの実ページの長さを入力するための入力欄４０３とが設けられている。ユーザは、図２で示した入力装置１４２を用いて、実ＬＵ  ＩＤ入力欄４０２に、追加する実ＬＵのＩＤを入力し、その実ＬＵの実ページの長さを実ページサイズ入力欄４０３に入力する。入力される実ＬＵ  ＩＤは、例えば、既に実ＬＵテーブル３０１に記録されている複数の実ＬＵ  ＩＤのうちのいずれかである。ユーザによって「ＯＫ」ボタンが押されると、ストレージ通信プログラム１４９が、入力欄４０２に入力された実ＬＵ  ＩＤと、入力欄４０３に入力された実ページ長を表す情報とをストレージシステム１１０に通知する。ストレージシステム１１０内の管理端末通信プログラム１３１が、それらの情報を受け、プール管理プログラム１３２が、以下の処理を行う。すなわち、プール管理プログラム１３２は、プールテーブル１３５に、管理端末通信プログラム１３１が受けた（つまりユーザから入力された）実ＬＵ  ＩＤ及び実ページ長の情報を記録したレコードを追加する。また、プール管理プログラム１３２は、プール２６０１に追加された実ＬＵを構成する全ての実ページに対応したレコード（実ページＩＤや実ＬＵ  ＩＤを含んだレコード）を、実ページテーブル１３６に追加する。
【００５１】
図５は、仮想ＬＵ管理画面５０１の一例を示す。
【００５２】
仮想ＬＵ管理画面５０１は、ＵＩ制御プログラム１４９によって表示されるＧＵＩである。仮想ＬＵ管理画面５０１には、仮想ＬＵのＩＤの入力欄５０２と、その仮想ＬＵの容量を入力するための入力欄５０３と、仮想ＬＵに格納されるデータを圧縮するか否かを選択する選択ボタン５０４とが設けられている。ユーザは、図２で示した入力装置１４２を用いて、入力欄５０２に、所望の仮想ＬＵのＩＤを入力し、その仮想ＬＵの容量を入力欄５０３に入力する。さらに、ユーザは、「圧縮ｏｎ」或いは「圧縮ｏｆｆ」の選択ボタン５０４を指定する。
【００５３】
ユーザによって「ＯＫ」ボタンが押されると、ストレージ通信プログラム１４９が、入力欄５０２に入力された仮想ＬＵ  ＩＤと、入力欄５０３に入力された容量を表す情報と、指定された選択ボタン５０４に対応する情報（圧縮ｏｎ又は圧縮ｏｆｆ）をストレージシステム１１０に通知する。管理端末通信プログラム１３１が、それらの情報を受け、プール管理プログラム１３２が、以下の処理を行う。すなわち、プール管理プログラム１３２は、仮想ＬＵテーブル１３８に、管理端末通信プログラム１３１が受けた（つまりユーザから入力された）情報を記録したレコードを追加する。
【００５４】
以下、第１の実施形態で行われる処理を説明する。
【００５５】
図６は、ライト処理のフローチャートである。
【００５６】
ライト処理は、ホスト１０１から受け付けたライト要求で指定されているＬＵが仮想ＬＵであって、その仮想ＬＵに対応する圧縮情報の値が「ｏｎ」である場合に実行される処理である。具体的には、プール管理プログラム１３２は、ライト要求を受け付けた場合、受け付けたライト要求で指定されているＬＵＮから識別されるＬＵが仮想ＬＵであって、その仮想ＬＵに対応した圧縮情報の値（仮想ＬＵテーブル１３８に記録されている値）が「ｏｎ」であるか否かを判断する。この判断の結果が肯定的の場合に、図６に示すライト処理が開始される。
【００５７】
プール管理プログラム１３２は、ライト要求で指定されたライト範囲（例えばＬＢＡ及びライトデータの長さ）に相当する一以上の仮想ページを特定する（ステップＳ６０１）。
【００５８】
次に、プール管理プログラム１３２は、ステップＳ６０１で特定された一以上の仮想ページのうち、最初の仮想ページを以降の処理（つまり、ステップＳ６０３乃至ステップＳ６０５の処理）の対象とする（ステップＳ６０２）。
【００５９】
次に、プール管理プログラム１３２は、処理対象の仮想ページについて、実ページリード処理を行う（ステップＳ６０３）。実ページリード処理については、図７を参照して後に説明する。
【００６０】
次に、プール管理プログラム１３２は、処理対象の仮想ページについて、実ページライト処理を行う（ステップＳ６０４）。実ページライト処理については、図８を参照して後に説明する。
【００６１】
次に、プール管理プログラム１３２は、ステップＳ６０１で特定されたライト範囲に相当する全ての仮想ページの処理が完了したか否かを判断する（ステップＳ６０５）。ステップＳ６０５の判断の結果が否定的（ステップＳ６０５：Ｎｏ）であれば、プール管理プログラム１３２は、それらの仮想ページにおける未処理の仮想ページのうちの次の仮想ページを以降の処理の対象（つまり、ステップＳ６０３乃至ステップＳ６０５の処理）とし（ステップＳ６０６）、その処理対象の仮想ページについて、ステップＳ６０３を行う。一方、ステップＳ６０５の判断の結果が肯定的（ステップＳ６０５：Ｙｅｓ）であれば、ライト処理が終了する。
【００６２】
図７は、実ページリード処理のフローチャートである。
【００６３】
実ページリード処理は、図６のステップＳ６０３で行われる処理である。
【００６４】
プール管理プログラム１３２は、処理対象の仮想ページと対応付けられた実ページ（図７及び８では、Target Real Pageを略して「ＴＲＰ」と表記）を特定する（ステップＳ７０１）。プール管理プログラム１３２は、ステップＳ７０１で実ページの特定に成功すれば（ステップＳ７０２：Ｙｅｓ）、ステップＳ７０５以降の処理を行い、一方、実ページの特定に失敗すれば（ステップＳ７０２：Ｎｏ）、ステップ７０３及び７０４の処理を行う。
【００６５】
プール管理プログラム１３２は、ステップＳ７０２で実ページの特定に失敗した場合（ステップＳ７０２：Ｎｏ）、初回ライトと判断し（ステップＳ７０３）、処理対象の仮想ページにライトされるデータ要素（キャッシュメモリ１２５上のデータ要素）の前後に必要に応じて「０」を付加し、ゼロが付加されたデータ要素を以降の処理対象（ライトデータ要素）とする（ステップＳ７０４）。つまり、ステップＳ７０４では、処理対象の仮想ページにライトされるデータ要素が仮想ページ長よりも短い場合には、そのデータ要素の前及び／又は後にゼロ等の無意味なデータ（具体的には、０を表すビットデータ）を付加することで、全体としてのデータ要素の長さを仮想ページ長と同じ長さにする処理が行われる。
【００６６】
一方、プール管理プログラム１３２は、ステップＳ７０２で実ページの特定に成功した場合（ステップＳ７０２：Ｙｅｓ）、処理対象の仮想ページにライトされるデータ要素の長さと、仮想ページ長が同じか否か判断する（ステップＳ７０５）。ステップＳ７０５の判断の結果が否定的であれば（ステップＳ７０５：Ｎｏ）、ステップＳ７０６以降の処理が行われる。一方、ステップＳ７０５の判断の結果が肯定的であれば（ステップＳ７０５：Ｙｅｓ）、プール管理プログラム１３２が、処理対象の仮想ページにライトされるデータ要素それ自体を以降の処理の対象（ライトデータ要素）とし（ステップＳ７１０）、一連の処理を終了する。
【００６７】
ステップＳ７０５での判断の結果が否定的（ステップＳ７０５：Ｎｏ）の場合、Ｉ／Ｏ処理プログラム１３３は、ステップＳ７０１で見つかった実ページに格納されているデータ要素をリードする（ステップＳ７０６）。次に、プール管理プログラム１３２は、そのリードされたデータ要素を圧縮伸張回路１２６に入力し、圧縮伸張回路１２６が、圧縮されているデータ要素（つまりリードされたデータ要素）の伸張を行う（ステップＳ７０７）。Ｉ／Ｏ処理プログラム１３３は、その伸張されたデータ要素に、処理対象の仮想ページにライトされるデータ要素を上書きする（ステップＳ７０８）。プール管理プログラム１３２は、ステップＳ７０８で上書きされたデータ要素を、以降の処理の対象（ライトデータ要素）とする（ステップＳ７０９）。
【００６８】
以下、ステップＳ７０４、ステップＳ７０９及びステップＳ７１０での結果としてのデータを、図８〜図１０の説明において、「ライトデータ要素」と言う。ステップＳ７０４での結果としてのライトデータ要素は、処理対象の仮想ページにライトされるデータ要素（つまりオリジナルのデータ要素）それ自体、又は、そのデータ要素とその前及び／又は後に追加されたゼロデータとで構成されたデータ要素である。ステップＳ７０９での結果としてのライトデータ要素は、ステップＳ７０１で特定された実ページからリードされ伸張されたデータ要素に、処理対象の仮想ページにライトされるデータ要素（つまりオリジナルのデータ要素)が上書きされたデータである。ステップＳ７１０での処理結果としてのライトデータ要素は、処理対象の仮想ページにライトされるデータ要素（つまりオリジナルのデータ要素）それ自体である。
【００６９】
図８は、実ページライト処理のフローチャートである。
【００７０】
実ページライト処理は、図６のステップＳ６０４で行われる処理である。
【００７１】
プール管理プログラム１３２は、ライトデータ要素（ＷＤＥ）を圧縮伸張回路１２６に入力し、圧縮伸張回路１２６が、ライトデータ要素を圧縮する（ステップＳ８０１）。この結果、例えば、キャッシュメモリ１２５に、回路１２６に入力されたライトデータ要素（圧縮前のライトデータ要素（図では「ＵＷＤＥ」と略記））と、回路１２６によって圧縮されたライトデータ要素（図では「ＣＷＤＥ」と略記）の両方が存在することになる。
【００７２】
次に、プール管理プログラム１３２は、ステップＳ８０１で圧縮されたライトデータ要素の長さが仮想ページ長以上か否か判断する（ステップＳ８０２）。
【００７３】
ステップＳ８０２の判断の結果が否定的であれば（ステップＳ８０２：Ｎｏ）、プール管理プログラム１３２は、圧縮されたライトデータ要素をライト対象とする(ステップＳ８０３)。次に、プール管理プログラム１３２は、図１０に示す実ページ選択処理（図では「RP選択処理」と略記）を行う（ステップＳ８０４）。すなわち、プール管理プログラム１３２は、プールテーブル１３５の欄３１２を参照して、圧縮されたライトデータ要素の長さ以上の実ページ長のうち、最短の実ページ長を特定する（ステップＳ１００１）。次に、プール管理プログラム１３２は、実ページテーブル１３６を参照して、特定された実ページ長の実ページで構成された実ＬＵ内の実ページであって、状態情報の値が「ｕｎｕｓｅｄ」の実ページを選択する（ステップＳ１００２）。
【００７４】
一方、ステップＳ８０３の判断の結果が肯定的であれば（ステップＳ８０２：Ｙｅｓ）、プール管理プログラム１３２は、圧縮前のライトデータ要素をライト対象とする（ステップＳ８１１）。なぜなら、ステップＳ８０２の判断の結果が肯定的であるということは、圧縮されてもライトデータ要素が短くなっておらず圧縮のメリットが実質的に無いからである。次に、プール管理プログラム１３２は、図９に示すデフォルト長実ページ選択処理（図では「DLRP選択処理」と略記）を行う（ステップＳ８１２）。すなわち、プール管理プログラム１３２は、プールテーブル１３５及び実ページテーブル１３６を参照して、仮想ページ長と同じ実ページ長のうち状態情報の値が「ｕｎｕｓｅｄ」の実ページを選択する（ステップＳ９０１）。
【００７５】
ステップ８０４又はＳ８１２の後に、ステップＳ８０５以降が行われる。
【００７６】
すなわち、プール管理プログラム１３２は、ステップＳ８０４又はステップＳ８１２で、実ページの選択に成功したか否かを判断する（ステップＳ８０５）。ステップＳ８０５の判断の結果が否定的であれば（ステップＳ８０５：Ｎｏ）、プール管理プログラム１３２は、エラーをホスト１０１に応答する（ステップＳ８１３）。
【００７７】
一方、ステップＳ８０５の判断の結果が肯定的であれば（ステップＳ８０５：Ｙｅｓ）、ステップＳ８０６以降の処理が行われる。
【００７８】
すなわち、プール管理プログラム１３２は、実ページテーブル１３６を参照し、ステップＳ８０４又はステップＳ８１２で選択された実ページに対応する状態情報の値を「ｕｓｅｄ」に変更する（ステップＳ８０６）。次に、プール管理プログラム１３２は、仮想ページテーブル１３７を参照し、処理対象の仮想ページに関する情報を更新する（ステップＳ８０７）。具体的には、プール管理プログラム１３２は、処理対象の仮想ページに対応した実ページＩＤの値を、ステップＳ８０４又はステップＳ８１２で選択された実ページの実ページＩＤに更新し、且つ、処理対象の仮想ページに対応した圧縮データ長情報の値を、圧縮されたライトデータ要素のデータ長を表す値に更新する。なお、Ｓ８０２の判断の結果が肯定的であれば、プール管理プログラム１３２は、圧縮データ長情報の値を、仮想ページ長と等しい値とする。次に、Ｉ／Ｏ処理プログラム１３３は、仮想ページテーブル１３７を参照し、処理対象の仮想ページに割り当てられた実ページ（すなわち、ステップＳ８０４又はステップＳ８１２で選択された実ページ）に、ライト対象のデータ要素をライトする（ステップＳ８０８）。その際、ライト対象のデータ要素がライト先の実ページよりも短い場合には、ライト先の実ページにおける、ライト対象のデータ要素が存在する領域以外の領域に、無意味なデータ（例えばゼロ）がライトされる。次に、プール管理プログラム１３２が、今回のライトが初回ライトか否か判断し（ステップＳ８０９）、この判断の結果が否定的である場合には（ステップＳ８０９：Ｎｏ）、つまり、図７のステップＳ７０３が行われていない場合には、ステップＳ７０１で選択された実ページ（ＴＲＰ）に対応する状態情報の値（実ページテーブル３２３における値）を「ｕｎｕｓｅｄ」に変更する（ステップＳ８１０）。
【００７９】
図１１は、リード処理のフローチャートである。
【００８０】
リード処理は、ホスト１０１から受け付けたリード要求で指定されているＬＵが仮想ＬＵであって、その仮想ＬＵに対応する圧縮情報の値が「ｏｎ」である場合に実行される処理である。具体的には、プール管理プログラム１３２は、リード要求を受け付けた場合、受け付けたリード要求で指定されているＬＵＮから識別されるＬＵが仮想ＬＵであって、その仮想ＬＵに対応した圧縮情報の値（仮想ＬＵテーブル１３８に記録されている値）が「ｏｎ」であるか否かを判断する。この判断結果が肯定的の場合に、図１１で示すリード処理が開始される。
【００８１】
プール管理プログラム１３２は、リード要求で指定されたリード範囲（例えば、ＬＢＡ及びリード対象のデータの長さ）に相当する一以上の仮想ページを特定する（ステップＳ１１０１）。
【００８２】
次に、プール管理プログラム１３２は、ステップＳ１１０１で特定された一以上の仮想ページのうち、最初の仮想ページを以降の処理（つまり、ステップＳ１１０３乃至ステップＳ１１０７）の対象とする（ステップＳ１１０２）。
【００８３】
次に、プール管理プログラム１３２は、処理対象の仮想ページと対応付けられた実ページ（ＴＲＰ）を特定する（ステップＳ１１０３）。
【００８４】
次に、Ｉ／Ｏ処理プログラム１３３は、ステップＳ１１０３で特定された実ページに格納されているデータ要素をリードする（ステップＳ１１０４）。
【００８５】
次に、プール管理プログラム１３２は、そのリードされたデータ要素を圧縮伸張回路１２６に入力し、圧縮伸張回路１２６が、圧縮されているデータ要素（つまり、リードされたデータ要素）の伸張を行う（ステップＳ１１０５）。ただし、処理対象の仮想ページの圧縮データ長（仮想ページテーブル１３７に記録されている値）が仮想ページ長と同じであれば、Ｓ１１０４でリードされたデータ要素は圧縮されていないため、この伸長の処理は行われない（つまりステップＳ１１０５がスキップされる）。
【００８６】
次に、プール管理プログラム１３２は、ステップＳ１１０１で特定されたリード範囲に相当する全ての仮想ページの処理が完了したか否かを判断する（ステップＳ１１０６）。ステップＳ１１０６の判断の結果が否定的（ステップＳ１１０６：Ｎｏ）であれば、プール管理プログラム１３２は、それらの仮想ページにおける未処理の仮想ページのうちの次の仮想ページを以降の処理の対象（つまり、ステップ１１０３乃至ステップＳ１１０５の処理）とし（ステップＳ１１０８）、その処理対象の仮想ページについて、ステップＳ１１０３を行う。一方、ステップＳ１１０５の判断の結果が肯定的（ステップＳ１１０６：Ｙｅｓ）であれば、プール管理プログラム１３２は、ステップＳ１１０７を行う。すなわち、プール管理プログラム１３２は、キャッシュメモリ１２５に存在する全ての伸張されたデータ要素を結合し（つまり、ホスト１０１から受け付けたリード要求に従うリードデータを生成し）、生成されたリードデータをホスト１０１へ送信する。
【００８７】
以上が、第１の実施形態についての説明である。
【００８８】
第１の実施形態によれば、プール２６０１には、複数種類の実ページ長の実ページが混在しており、実ページ単位での管理が行われる。全ての実ページの長さが短い場合（例えば全ての実ページの長さが仮想ページ長未満である場合）に比べて、管理しなければならない実ページの数が少ない。このため、容量スケーラビリティの低下を抑えることができる。
【００８９】
また、第１の実施形態によれば、圧縮されたライトデータ要素が、圧縮されたライトデータ要素の長さ以上の実ページ長のうち最短の実ページ長が特定され、特定された実ページ長の実ページに格納される。このため、高い容量効率を実現することができる。
【実施例２】
【００９０】
以下、本発明の第２の実施形態を説明する。その際、第１の実施形態との相違点を主に説明し、第１の実施形態との共通点については説明を省略或いは簡略する（この点は、後述の第３及び第４の実施形態についても同様である）。
【００９１】
第２の実施形態では、未使用のプールサブ領域２６０３については、実ページ長が定義されておらず、故に、未使用のプールサブ領域２６０３には、実ページが存在しない。ライト処理において、コントローラ１２０は、圧縮されたライトデータ要素の格納先に相応しい実ページをいずれの使用中のプールサブ領域２６０３からも特定できなかった場合に、未使用のプールサブ領域２６０３についての実ページ長を定義する。それによりその実ページ長の実ページがその未使用のプールサブ領域２６０３に形成される。コントローラ１２０は、その未使用のプールサブ領域２６０３から一つの実ページを選択し、その実ページをライト先仮想ページに割り当てる。また、第２の実施形態では、プール２６０１を構成する各実ＬＵが、複数のチャンク（実ＬＵのサブ記憶領域）で構成されており、チャンク毎に、実ページ長が定義される。それ故、第２の実施形態では、チャンクが、プールサブ領域２６０３である。第２の実施形態では、チャンクは、固定長であり、全てのチャンクが同じ長さである。
【００９２】
以下、本発明の第２の実施形態を詳細に説明する。
【００９３】
図１２は、本発明の第２の実施形態での不揮発性メモリ１３０が有するプログラム及びテーブルを示す。
【００９４】
第２の実施形態では、実ページ長テーブル１３００及びチャンクテーブル１３２０が追加されている。また、プールテーブル１３１０及び実ページテーブル１３３０の内容は、プールテーブル１３５及び実ページテーブル１３６の内容とそれぞれ異なっている。
【００９５】
図１３は、第２の実施形態での前述したテーブル１３００、１３１０、１３２０及び１３３０の構成図である。
【００９６】
実ページ長テーブル１３００は、定義可能な実ページ長のリストである。このテーブル１３００によれば、最大の実ページ長が１ＭＢ（メガバイト）であり、これは、仮想ページ長と同じである。
【００９７】
プールテーブル１３１０は、図３に示した欄３１２及び３１３に代えて、プールを構成する実ＬＵ毎に欄１３１２を有する。欄１３１２には、先頭チャンクＩＤが記録される。先頭チャンクＩＤは、その実ＬＵの先頭にあるチャンクの識別子を示す情報である。このテーブル１３１０によれば、実ＬＵ  ＩＤ「ＲＬ０」の実ＬＵは、チャンクＩＤ「ＣＨ０」〜「ＣＨ９」の１０個のチャンクで構成されていることがわかる。このため、その実ＬＵに対応した先頭チャンクＩＤが「ＣＨ０」になっている。
【００９８】
チャンクテーブル１３２０は、チャンクに関する情報を管理するためのテーブルである。具体的には、チャンクテーブル１３２０は、例えば、チャンク毎に、チャンクＩＤが記録される欄１３２１と、実ページ長が記録される欄１３２２と、状態情報が記録される欄１３２３と、先頭実ページＩＤが記録される欄１３２４とを有する。一つのチャンク（以下、この段落において「対象チャンク」と言う）を例に採って言えば、このテーブル１３２０に記録される各種情報は、下記の通りである。チャンクＩＤは、対象チャンクの識別子を表す情報である。状態情報は、対象チャンクの使用状態を表す情報である。例えば、対象チャンクについて実ページ長が定義済みであれば、状態情報の値は「ｕｓｅｄ」であり、対象チャンクについて実ページ長が定義されていなければ、状態情報の値は「ｕｎｕｓｅｄ」である。先頭実ページＩＤは、対象チャンクの先頭にある実ページの識別子を表す情報である。
【００９９】
実ページテーブル１３３０は、図３に示した欄３３２に代えて、実ページ毎に欄１３３２を有する。欄１３３２には、チャンクＩＤが記録される。チャンクＩＤは、その欄１３３２に対応する実ページを有するチャンクの識別子を表す情報である。
【０１００】
図１４は、第二の実施形態でのプール管理画面１４０１の一例を示す。
【０１０１】
プール管理画面１４０１には、図４に示したプール管理画面４０１と異なり、実ページ長の入力欄が設けられていない。
【０１０２】
ユーザによって「ＯＫ」ボタンが押されると、既に説明したように、プールテーブル１３１０に、ユーザから入力された実ＬＵ  ＩＤを記録したレコードを追加する。そのレコードに記録される先頭チャンクＩＤは、プール２６０１における最終のチャンクのＩＤの次のＩＤとされる。また、プール管理プログラム１３２は、プール２６０１に追加された実ＬＵに対応する容量を基に、その追加された実ＬＵを構成するチャンクの数を特定し、チャンクテーブル１３２０に、特定されたチャンクの数と同数のレコードを追加する。追加された各レコードには、チャンクＩＤが記録されているものの、実ページ長、状態情報及び先頭実ページＩＤの値は「Ｎ／Ａ」である。
【０１０３】
図１５は、実ページ長管理画面１５０１の一例を示す。
【０１０４】
実ページ長管理画面１５０１は、ＵＩ制御プログラム１４８によって表示されるＧＵＩである。実ページ長管理画面１５０１には、追加する実ページ長を入力するための入力欄１５０２が設けられている。ユーザは、図２で示した入力装置１４２を用いて、追加実ページ長入力欄１５０２に、追加する実ページ長を入力する。
【０１０５】
ユーザによって「ＯＫ」ボタンが押されると、ストレージ通信プログラム１４９が、入力欄１５０２に入力された実ページ長をストレージシステム１１０に通知する。ストレージシステム１１０内の管理端末通信プログラム１３１が、その情報を受け、プール管理プログラム１３２が、以下の処理を行う。すなわち、プール管理プログラム１３２は、実ページ長テーブル１３００に、管理端末通信プログラム１３１が受けた（つまりユーザから入力された）実ページ長を記録したレコードを追加する。
【０１０６】
実ページ長テーブル１３００には、製品出荷時に予め複数種類の実データ長が記録されていてそのテーブル１３００の編集が不可能になっていても良い。
【０１０７】
図１６は、第２の実施形態でのデフォルト長実ページ選択処理のフローチャートである。
【０１０８】
デフォルト長実ページ選択処理は、図８のステップＳ８１２で行われる処理である。
【０１０９】
プール管理プログラム１３２は、チャンクテーブル１３２０の欄１３２２を参照して、仮想ページ長と同じ実ページ長のうち状態情報の値が「ｕｎｕｓｅｄ」の実ページを選択する）。
【０１１０】
プール管理プログラム１３２は、ステップＳ１６０１で実ページの選択に成功したか否かを判断する（ステップＳ１６０２）。ステップＳ１６０２の判断の結果が肯定的であれば（ステップＳ１６０２：Ｙｅｓ）、この一連の選択処理が終了する。
【０１１１】
一方、ステップＳ１６０２の判断の結果が否定的であれば（ステップＳ１６０２：Ｎｏ）、例えば、いずれの使用中のチャンクにも、仮想ページ長と同じ長さであって未使用の実ページが無いため、未使用のチャンクについて、仮想ページ長と同じ実ページ長が定義される。
【０１１２】
具体的には、プール管理プログラム１３２は、チャンクテーブル１３２０を参照し、状態が「ｕｎｕｓｅｄ」のチャンクを特定する（ステップＳ１６０３）。
【０１１３】
次に、プール管理プログラム１３２は、ステップＳ１６０３でチャンクの特定に成功したか否かを判断する（ステップＳ１６０４）。ステップＳ１６０４の判断の結果が否定的であれば（ステップＳ１６０４：Ｎｏ）、一連の選択処理が終了する。一方、ステップＳ１６０４の判断の結果が肯定的であれば（ステップＳ１６０４：Ｙｅｓ）、プール管理プログラム１３２は、チャンクテーブル１３２０における、ステップＳ１６０３で特定されたチャンクに対応する状態情報の値を、「ｕｓｅｄ」に更新する（ステップＳ１６０５）。この段階で、例えば、ステップＳ１６０３で特定されたチャンクに対応する先頭実ページＩＤの値が、プール管理プログラム１３２によって、「Ｎ／Ａ」から有効な値に更新される。
【０１１４】
次に、プール管理プログラム１３２は、ステップＳ１６０３で特定されたチャンクを、仮想ページと同じ長さの実ページに分割する（ステップＳ１６０６）。具体的には、プール管理プログラム１３２は、例えば、チャンクテーブル１３２０における、ステップＳ１６０３で特定されたチャンクに対応する実ページ長の値を、仮想ページ長を表す値に更新する（仮想ページ長と同じ実ページ長は実ページ長テーブル１３００に記載されている）。また、プール管理プログラム１３２は、例えば、チャンクの容量（例えば１ＧＢ（ギガバイト））を仮想ページ長で割ることで、ステップＳ１６０３で特定されたチャンクを構成する実ページの数を算出し、実ページテーブル１３３０に、その数と同数のレコードを追加する。追加された各レコードにおいて、実ページＩＤは自動的に割り振られた値（例えば連番）であり、チャンクＩＤは、ステップＳ１６０３で特定されたチャンクの識別子であり、状態は「ｕｎｕｓｅｄ」である。
【０１１５】
次に、プール管理プログラム１３２は、ステップＳ１６０３で特定されたチャンクにおける分割された実ページのうち、最初の実ページを選択する（ステップＳ１６０７）。
【０１１６】
図１７は、第２の実施形態での実ページ選択処理のフローチャートである。
【０１１７】
実ページ選択処理は、図８のステップＳ８０４で行われる処理である。
【０１１８】
プール管理プログラム１３２は、チャンクテーブル１３２０の欄１３２２を参照して、圧縮されたライトデータ要素の長さ以上の実ページ長のうち、最短の実ページ長を特定する（ステップＳ１７０１）。次に、プール管理プログラム１３２は、実ページテーブル１３６を参照して、特定された実ページ長の実ページで構成されたチャンク内の実ページであって、状態情報の値が「ｕｎｕｓｅｄ」の実ページを選択する（ステップＳ１７０２）。
【０１１９】
プール管理プログラム１３２は、ステップＳ１７０２で実ページの選択に成功したか否かを判断する（ステップＳ１７０３）。ステップＳ１７０３の判断の結果が肯定的であれば（ステップＳ１７０３：Ｙｅｓ）、この一連の選択処理が終了する。
【０１２０】
一方、ステップＳ１７０３の判断の結果が否定的であれば（ステップＳ１７０４：Ｎｏ）、例えば、いずれの使用中のチャンクにも、Ｓ１７０１で特定された実ページ長であり未使用の実ページが無いため、圧縮されたライトデータ要素の長さ以上の実ページ長のうち最短の実ページ長が実ページ長テーブル１３００から選択され、選択された実ページ長が、未使用のチャンクについて定義される。
【０１２１】
具体的には、ステップＳ１７０２の後に、ステップＳ１７０３乃至Ｓ１７０８が行われることである。ステップＳ１７０３乃至Ｓ１７０８のＳ１７０７以外の処理は、図１６を参照して説明したＳ１６０２乃至Ｓ１６０７のＳ１６０６以外の処理とそれぞれ同じである。
【０１２２】
ステップＳ１７０７では、プール管理プログラム１３２は、圧縮されたライトデータ要素の長さ以上の実ページ長のうち最短の実ページ長を実ページ長テーブル１３００から選択し、選択した実ページ長の実ページに、特定されたチャンクを分割する。具体的には、プール管理プログラム１３２は、例えば、チャンクテーブル１３２０における、ステップＳ１７０４で特定されたチャンクに対応する実ページ長の値を、上記選択した実ページ長を表す値に更新する。また、プール管理プログラム１３２は、例えば、チャンクの容量を上記選択した実ページ長で割ることで、ステップＳ１７０４で特定されたチャンクを構成する実ページの数を算出し、実ページテーブル１３３０に、その数と同数のレコードを追加する。追加された各レコードにおいて、実ページＩＤは自動的に割り振られた値であり、チャンクＩＤは、ステップＳ１７０４で特定されたチャンクの識別子であり、状態は「ｕｎｕｓｅｄ」である。
【０１２３】
図１８は、チャンクガーベージコレクション処理のフローチャートである。
【０１２４】
チャンクガーベージコレクション処理とは、未使用のチャンクを増やすための処理であり、具体的には、状態がｕｓｅｄのチャンクを構成する全ての実ページの状態がｕｎｕｓｅｄである場合に、そのチャンクの状態をｕｓｅｄからｕｎｕｓｅｄに更新する処理である。チャンクガーベージコレクション処理は、例えば、下記（１６−１）乃至（１６−４）のいずれかの契機で開始される。
（１６−１）ＣＰＵ１２３が低負荷である（例えばＣＰＵ１２３の負荷が所定の負荷より低い）；
（１６−２）定期的；
（１６−３）管理端末１０２のユーザから指示を受けた；
（１６−４）ｕｓｅｄのチャンクの割合が所定の閾値を下回った（例えば、プール管理プログラム１３２が、チャンクテーブル１３２０を参照し、状態情報の値「ｕｓｅｄ」の数が所定数未満になったことを検出した）。
【０１２５】
プール管理プログラム１３２は、チャンクテーブル１３２０を参照し、先頭のチャンクＩＤを、以降の処理の対象とする（ステップＳ１８０１）。
【０１２６】
次に、プール管理プログラム１３２は、実ページテーブル１３３０を参照して、処理対象のチャンクの全実ページの状態が「ｕｎｕｓｅｄ」であるか否かを判断する（ステップＳ１８０２）。ステップＳ１８０２の判断の結果が否定的であれば（ステップＳ１８０２：Ｎｏ）、ステップＳ１８０５が行われる。
【０１２７】
一方、ステップＳ１８０２の判断の結果が肯定的であれば（ステップＳ１８０２：Ｙｅｓ）、プール管理プログラム１３２は、実ページテーブル１３３０から、処理対象のチャンクに対応した全実ページのエントリ（状態情報が「ｕｎｕｓｅｄ」のエントリ）を削除する（ステップＳ１８０３）。
【０１２８】
次に、プール管理プログラム１３２は、チャンクテーブル１３２０を参照し、処理対象のチャンクの状態情報を「ｕｎｕｓｅｄ」に変更する（ステップＳ１８０４）。
【０１２９】
次に、プール管理プログラム１３２は、全チャンクの処理が完了したか否かを判断する（ステップＳ１８０５）。ステップＳ１８０５の判断の結果が肯定的であれば（ステップＳ１８０５：Ｙｅｓ）一連の処理が終了する。一方、ステップ１８０５の判断の結果が否定的であれば（ステップ１８０５：Ｎｏ）、プール管理プログラム１３２は、全チャンクのうちの次のチャンクを以降の処理の対象（つまり、ステップＳ１８０２乃至ステップＳ１８０５の処理）とし（ステップＳ１８０６）、その処理対象のチャンクについて、ステップＳ１８０２を行う。
【０１３０】
以上が、本発明の第２の実施形態についての説明である。第２の実施形態によれば、プールサブ領域２６０３における実ページの長さが動的に定義されたり変更されたりする。このため、予め全てのプールサブ領域２６０３について実ページ長を定義しておくことに比べて、適切に実ページ長が定義されることが期待できる。
【０１３１】
また、第２の実施形態では、プールサブ領域２６０３は、実ＬＵよりも容量の小さいチャンクである。このため、たとえ、一旦或るチャンクに実ページ長が定義された後にあまりその或るチャンクに圧縮されたデータ要素が格納されなくても、空き領域の量は、実ＬＵがプールサブ領域である場合に比べて少なくて済む。
【０１３２】
なお、第２の実施形態では、下記の変形例が考えられる。
【０１３３】
第１の変形例では、コントローラ１２０に、実データ長の自動学習機能が備えられる。具体的には、例えば、プール管理プログラム１３２は、Ｓ１７０７で、Ｓ１７０１で特定された実ページ長を未使用チャンクに定義すると共に、その実ページ長を実ページ長テーブル１３０１に追記する。Ｓ１７０１で特定される実ページ長は、例えば、圧縮されたライトデータ要素の長さ以上で、かつ予め決められた長さ（例えば、６４ｋＢ）の倍数のうち最小の長さである。
【０１３４】
第２の変形例では、コントローラ１２０に、或るプールサブ領域内の全ての使用中実ページから他の１以上のプールサブ領域内の未使用実ページにデータユニットをコピーし、コピー元の全ての実ページの状態を使用中（ｕｓｅｄ）から未使用（ｕｎｕｓｅｄ）に更新する機能が備えられる。例えば、プール管理プログラム１３２が、図２９Ａに示すように、定義されている実ページ長が同じである２以上のプールサブ領域（例えば２つのチャンク２９０１Ａ及び２９０１Ｂ）を特定する。また、プール管理プログラム１３２は、特定された２以上のプールサブ領域のうち、使用中の実ページが最も少ないプールサブ領域を特定する。そして、Ｉ／Ｏ処理プログラム１３３が、特定されたプールサブ領域（例えばチャンク２９０１Ａ）内の全ての使用中の実ページ（図２９Ａにハッチングで示されている実ページ）から、上記２以上のプールサブ領域のうちの１以上の他のプールサブ領域（例えばチャンク２９０１Ｂ）内の未使用の実ページに、データユニットをコピーする。プール管理プログラム１３２は、図２９Ｂに示すように、コピー元の全ての実ページの状態を使用中（ｕｓｅｄ）から未使用（ｕｎｕｓｅｄ）に更新する。これにより、図１８に示したチャンクガーベージコレクション処理が行われれば、図２９Ｃに示すように、コピー元の実ページを有するプールサブ領域（チャンク２９０１Ａ）の状態が、使用中（ｕｓｅｄ）から未使用（ｕｎｕｓｅｄ）に更新される。従って、この第２の変形例によれば、未使用のプールサブ領域を増やすことができる。なお、コピー元を、使用中の実ページが最も少ないプールサブ領域とすることで、コピー回数を最小限に抑えることができる。第２の変形例に係るコピーやコピー元の実ページの状態の更新は、チャンクガーベージコレクション処理に含まれていても良いし、その処理とは別の処理であっても良い。また、コピー元のプールサブ領域を決定する処理を開始する契機は、例えば、前述の（１６−１）乃至（１６−４）のいずれかの契機であって良い。
【実施例３】
【０１３５】
第３の実施形態では、一つの仮想ページに複数の実ページが割り当てられることがある。このため、例えば、実ページリード処理（図７）のＳ７０１及びＳ７０６や、実ページライト処理（図８）のＳ８１０では、ＴＲＰ（処理対象の仮想ページに割り当てられている実ページ）の数は、１であることもあれば、２以上であることもある。同様に、リード処理（図１１）のＳ１１０３で特定される実ページの数は、１であることもあれば、２以上であることもある。
【０１３６】
図１９は、本発明の第３の実施形態での仮想ページテーブル１９００の構成図である。
【０１３７】
このテーブル１９００には、欄３３２の代わりに、欄１９０２が設けられる。欄１９０２には、一つの実ページＩＤだけではなく、複数の実ページＩＤが記録されることがある。前述したように、一つの仮想ページに複数の実ページが割り当てられることがあるからである。
【０１３８】
図２０は、本発明の第３の実施形態での実ページ選択処理のフローチャートである。
【０１３９】
プール管理プログラム１３２は、図３に示すプールテーブル１３５の欄３１２を参照して、圧縮されたライトデータ要素の長さ以上の実ページ長のうち、１以上の実ページ長の合計値が、圧縮されたライトデータ要素の長さより長くなる実ページ長の組み合わせを特定する（ステップＳ２００１）。
【０１４０】
次に、プール管理プログラム１３２は、実ページテーブル１３６を参照して、特定された実ページ長の組み合わせのうち、合計値が最小となる組み合わせを特定する（ステップＳ２００２）。
【０１４１】
次に、プール管理プログラム１３２は、実ページテーブル１３６を参照して、ステップＳ２００２で特定された組み合わせを構成する実ページ長のそれぞれについて、その長さを持つ実ページのうち、状態情報の値が「ｕｎｕｓｅｄ」の実ページを選択する（ステップＳ２００３）。
【０１４２】
以上が、本発明の第３の実施形態についての説明である。第３の実施形態によれば、容量効率の向上が一層期待できる。
【実施例４】
【０１４３】
本発明の第４の実施形態では、コントローラ１２０は、ライト要求をホスト１０１から受け付けた場合、ライト要求を受けた場合に行われるライト処理において、処理対象の仮想ページにライトされるデータ要素を、とりあえず、圧縮することなく、仮想ページ長と同じ長さの実ページに格納しておく。その後、ライト処理とは非同期で、コントローラ１２０は、仮想ページ長と同じ長さの実ページからデータ要素をリードし、リードしたデータ要素について、前述した図８を参照して説明した実ページライト処理を実行する。
【０１４４】
以下、本発明の第４の実施形態を詳細に説明する。
【０１４５】
図２１は、本発明の第４の実施形態での仮想ページテーブル２１３７の構成図である。
【０１４６】
仮想ページテーブル２１３７には、仮想ページ毎に、欄３３１〜３３３に加えて、状態情報が記録される欄３３４が設けられている。状態情報は、その状態情報に対応する仮想ページに割り当てられている実ページ（以下、この段落で「対象実ページ」と言う）に格納されているデータ要素が圧縮されているか否かを表す情報である。例えば、対象実ページに格納されているデータ要素が圧縮されている場合には、状態情報の値は「ｃｏｍｐｒｅｓｓｅｄ」であり、対象実ページに格納されているデータ要素が圧縮されていなければ、状態情報の値は「ｕｎｃｏｍｐｒｅｓｓｅｄ」である。仮想ページに実ページが割り当てられていない場合には、その仮想ページの対応する状態情報の値は、例えば「Ｎ／Ａ」である。
【０１４７】
図２２は、本発明の第４の実施形態での実ページリード処理のフローチャートである。
【０１４８】
第４の実施形態での実ページリード処理のステップＳ２２０１〜Ｓ２２１０は、第１の実施形態での実ページリード処理のＳ７０１〜Ｓ７１０にそれぞれ対応している。Ｓ２２０７がＳ７０７と異なり、それに伴い、Ｓ２２０８がＳ７０８と異なっている。Ｓ２２０１〜Ｓ２２１０のＳ２２０７及びＳ２２０８以外の処理は、Ｓ７０１〜Ｓ７１０のＳ７０７及びＳ７０８以外の処理とそれぞれ同じである。
【０１４９】
Ｓ２２０７では、プール管理プログラム１３２が、仮想ページテーブル２１３７を参照し、処理対象の仮想ページに対応した状態情報の値が「ｃｏｍｐｒｅｓｓｅｄ」であれば、Ｓ２２０６でリードされたデータ要素を圧縮伸張回路１２６に入力し、圧縮伸張回路１２６がそのデータ要素を伸張する。一方、その状態情報の値が「ｃｏｍｐｒｅｓｓｅｄ」でなければ、プール管理プログラム１３２は、リードされたデータ要素を圧縮伸張回路１２６に入力しない。
【０１５０】
このため、Ｓ２２０８では、Ｉ／Ｏ処理プログラム１３３は、その伸張されたデータ要素又はリードされたデータ要素それ自体に、処理対象の仮想ページにライトされるデータ要素を上書きする。
【０１５１】
図２３は、暫定実ページライト処理のフローチャートである。
【０１５２】
暫定実ページライト処理は、図６に示したライト処理におけるＳ６０４で、実ページライト処理に代わって行われる処理である。実ページライト処理は、既に説明し後に詳述するように、ライト処理とは非同期に行われる。
【０１５３】
プール管理プログラム１３２は、図９を参照して説明したデフォルト長実ページ選択処理（図では「ＤＬＲＰ選択処理」と略記）を行う（ステップＳ２３０１）。
【０１５４】
次に、プール管理プログラム１３２は、ステップＳ２３０１で、実ページの選択に成功したか否かを判断する（ステップＳ２３０２）。ステップＳ２３０２の判断の結果が否定的であれば（ステップＳ２３０２：Ｎｏ）、プール管理プログラム１３２は、エラーをホスト１０１に応答する（ステップＳ２３０８）。
【０１５５】
一方、ステップＳ２３０２の判断の結果が肯定的であれば（ステップＳ２３０２：Ｙｅｓ）、ステップＳ２３０３以降の処理が行われる。
【０１５６】
すなわち、プール管理プログラム１３２は、実ページテーブル１３６を参照し、ステップＳ２３０１で選択された実ページに対応する状態情報の値を「ｕｓｅｄ」に変更する（ステップＳ２３０３）。次に、プール管理プログラム１３２は、仮想ページテーブル２１３７を参照し、処理対象の仮想ページに関する情報を更新する（ステップＳ２３０４）。具体的には、プール管理プログラム１３２は、処理対象の仮想ページに対応した実ページＩＤの値を、ステップＳ２３０１で選択された実ページの実ページＩＤに更新し、処理対象の仮想ページに対応した圧縮データ長情報の値を、圧縮されたライトデータ要素のデータ長を表す値に更新し、且つ、処理対象の仮想ページに対応した状態情報の値を「ｕｎｃｏｍｐｒｅｓｓｅｄ」に更新する。次に、Ｉ／Ｏ処理プログラム１３３は、仮想ページテーブル２１３７を参照し、処理対象の仮想ページに割り当てられた実ページに、ライト対象のデータ要素をライトする（ステップＳ２３０５）。その際、ライト対象のデータ要素がライト先の実ページよりも短い場合には、ライト先の実ページにおける、ライト対象のデータ要素が存在する領域以外の領域に、無意味なデータ（例えばゼロ）がライトされる。次に、プール管理プログラム１３２が、今回のライトが初回ライトか否か判断し（ステップＳ２３０６）、この判断の結果が否定的である場合には（ステップＳ２３０６：Ｎｏ）、つまり、図２２のステップＳ２２０３が行われていない場合には、Ｓ２２０１で選択された実ページ（ＴＲＰ）に対応する状態情報の値（実ページテーブル３２３における値）を「ｕｎｕｓｅｄ」に変更する（ステップＳ２３０７）。
【０１５７】
図２４は、本発明の第４の実施形態でのリード処理のフローチャートである。
【０１５８】
第４の実施形態でのリード処理のステップＳ２４０１〜Ｓ２４０８は、第１の実施形態での実ページリード処理のＳ１１０１〜Ｓ１１０８にそれぞれ対応している。Ｓ２４０５がＳ１１０５と異なっており、Ｓ２４０１〜Ｓ２４０８のＳ２４０５以外の処理は、Ｓ１１０１〜Ｓ１１０８のＳ１１０５以外の処理とそれぞれ同じである。
【０１５９】
Ｓ２４０５では、プール管理プログラム１３２が、仮想ページテーブル２１３７を参照し、処理対象の仮想ページに対応した状態情報の値が「ｃｏｍｐｒｅｓｓｅｄ」であれば、Ｓ２４０４でリードされたデータ要素を圧縮伸張回路１２６に入力し、圧縮伸張回路１２６がそのデータ要素を伸張する。
【０１６０】
図２５は、非同期圧縮処理のフローチャートである。
【０１６１】
非同期圧縮処理は、例えば、下記（２５−１）乃至（２５−４）のいずれかの契機で開始される。
（２５−１）ＣＰＵ１２３が低負荷である（例えばＣＰＵ１２３の負荷が所定の負荷より低い）；
（２５−２）定期的；
（２５−３）管理端末１０２のユーザから指示を受けた；
（２５−４）ｃｏｍｐｒｅｓｓｅｄに対応した仮想ページの割合が所定の閾値を下回った（例えば、プール管理プログラム１３２が、仮想ページテーブル２１３７を参照し、状態情報の値「ｃｏｍｐｒｅｓｓｅｄ」の数が所定数未満になったことを検出した）。
【０１６２】
プール管理プログラム１３２が、仮想ＬＵの先頭の仮想ページを、以降の処理（Ｓ２５０２〜Ｓ２５０６）の対象とする（ステップＳ２５０１）。
【０１６３】
プール管理プログラム１３２が、処理対象の仮想ページに対応した状態情報の値が「ｕｎｃｏｍｐｒｅｓｓｅｄ」であるか否かを判断する（ステップＳ２５０２）。
【０１６４】
ステップＳ２５０２の判断の結果が肯定的（Ｓ２５０２：ＹＥＳ）であれば、プール管理プログラム１３２は、処理対象の仮想ページに対応付けられている実ページを特定する（ステップＳ２５０３）。Ｉ／Ｏ処理プログラム１３３が、特定された実ページからデータ要素をリードする（ステップＳ２５０４）。その後、図８に示した実ページライト処理が行われる（ステップＳ２５０５）。実ページライト処理が成功の場合、プール管理プログラム１３２が、処理対象の仮想ページに対応した状態情報の値を「ｕｎｃｏｍｐｒｅｓｓｅｄ」から「ｃｏｍｐｒｅｓｓｅｄ」に変更する（ステップＳ２５０６）。
【０１６５】
ステップＳ２５０２の判断の結果が否定的（Ｓ２５０２：ＮＯ）であれば、又は、ステップＳ２５０６の後に、プール管理プログラム１３２は、仮想ＬＵの全ての仮想ページについて処理が完了したか否かを判断する（ステップＳ２５０７）。この判断の結果が否定的であれば（Ｓ２５０７：ＮＯ）、プール管理プログラム１３２は、次の仮想ページを以降の処理対象とし（ステップＳ２５０８）、ステップＳ２５０２を実行する。一方、Ｓ２５０７の判断の結果が肯定的であれば（Ｓ２５０７：ＹＥＳ）、非同期圧縮処理が終了する。
【０１６６】
以上が、本発明の第４の実施形態の説明である。第４の実施形態によれば、ライト処理では圧縮／伸張が行われないので、ライト処理時のＣＰＵ１２３の負荷を下げることができ、以って、ライト処理の処理速度の向上が期待できる。
【０１６７】
なお、第４の実施形態では、下記の変形例が考えられる。例えば、図２８Ａに示すように、仮想ページテーブル２１３７´に、仮想ページ毎に、アクセス頻度が記録される欄３３５が設けられる（ＩＯＰＳは、「ＩＯ per second」の略）。また、図２８Ｂに示すように、不揮発性メモリ１３０に、ＣＰＵ１２３で実行されるアクセス頻度管理プログラム（２８０１）が記憶される。アクセス頻度管理プログラム２８０１は、仮想ページ毎に、アクセス頻度を監視し、適時に、仮想ページに対応するアクセス頻度（図２８Ａの欄２１０５に記載の値）を更新する。この変形例では、非同期圧縮処理において、処理対象の仮想ページに対応した状態情報の値が「ｕｎｃｏｍｐｒｅｓｓｅｄ」であっても（ステップＳ２５０２：ＹＥＳ）、図２８Ｃに示すように、ステップＳ２５０３以降が行われないことがある。具体的には、プール管理プログラム１３２が、ステップＳ２５０２：ＹＥＳの場合、仮想ページテーブル２１３７´を参照して、処理対象の仮想ページに対応したアクセス頻度を特定し、アクセス頻度が所定の閾値より高ければ（Ｓ２８０１：ＹＥＳ）、Ｓ２５０３を行わない。これにより、アクセス頻度が高い仮想ページに対するライト処理／リード処理では、圧縮／非圧縮が行われないことによる処理速度の向上が期待できる。
【０１６８】
以上、例えば、第２乃至第４の実施形態について、第１の実施形態との相違点を主に説明したが、第１乃至第４の実施形態のうちのどの二以上の実施形態を組み合わせて実施することも可能である。更に、ライト先の仮想ＬＵは、ホスト１０１からのライト要求で指定されるＬＵに代えて又は加えて、プライマリＬＵに記憶されているデータのコピー先となるセカンダリＬＵであっても良い。一例を、図２７に示す。すなわち、ホスト等の外部装置からアクセスされ得るプライマリＬＵ（実ＬＵ又は仮想ＬＵ）から、仮想ページ単位で、データ要素が、プライマリＬＵとペアを構成するセカンダリＬＵ（仮想ＬＵ）にコピーされる。その際、コピー対象のデータ要素が圧縮され、圧縮されたデータ要素を含むデータユニットの長さに基づく一以上の実ページが選択され、選択された実ページがコピー先仮想ページに割り当てられ、その実ページに、圧縮されたデータ要素を含むデータユニットが格納される。もし、圧縮されたデータ要素を含むデータユニットの長さが仮想ページ長以上であるようなら、圧縮前のデータ要素を含んだデータユニットが、仮想ページ長と同じ長さの実ページに格納される。
【０１６９】
以上、本発明の好適な実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０１７０】
例えば、第１、第３又は第４の実施形態での実ページ選択処理では、条件に合致する実ページ長の実ページが見つからなければ、一段階長い実ページが選択されても良い。例えば、圧縮されたライトデータ要素の長さが５１１ｋＢであり、そうすると、条件に合致する実ページ長（圧縮されたライトデータ要素以上の実ページ長のうちの最短の実ページ長）は、５１２ｋＢとなるが、５１２ｋＢの実ページが全て使用中であるため、その種の実ページの選択ができなければ、一段階長い実ページ、例えば仮想ページ長と同じ長さの実ページが選択されても良い。
【０１７１】
また、例えば、データユニットに、圧縮されたライトデータ要素だけでなく他種の情報、例えばデータ保証コードが付加されている場合、仮想ページ長或いは実ページ長との比較（例えば、図８のＳ８０２、図１０のＳ１００１、図１７のＳ１７０１、図２０のＳ２００１）では、データユニットの全体の長さが比較の対象となる。また、例えば、データユニットの長さが仮想ページ長以上であるが故に、仮想ページ長と同じ長さの実ページに圧縮前のライトデータ要素がライトされる場合、圧縮前のライトデータ要素の長さが仮想ページと一致していれば、データ保証コード等の他種の情報が付加されることなく、圧縮前のライトデータ要素のみが、実ページにライトされる。この場合には、圧縮前のライトデータ要素に含まれているデータ保証コード（例えば、５１２バイトのデータに対して付加される８バイトのデータ保証コード）を用いて、圧縮前のライトデータ要素の信頼性が保証される。
【図１】
0005221756.tif 000002
【図２】
0005221756.tif 000003
【図３】
0005221756.tif 000004
【図４】
0005221756.tif 000005
【図５】
0005221756.tif 000006
【図６】
0005221756.tif 000007
【図７】
0005221756.tif 000008
【図８】
0005221756.tif 000009
【図９】
0005221756.tif 000010
【図１０】
0005221756.tif 000011
【図１１】
0005221756.tif 000012
【図１２】
0005221756.tif 000013
【図１３】
0005221756.tif 000014
【図１４】
0005221756.tif 000015
【図１５】
0005221756.tif 000016
【図１６】
0005221756.tif 000017
【図１７】
0005221756.tif 000018
【図１８】
0005221756.tif 000019
【図１９】
0005221756.tif 000020
【図２０】
0005221756.tif 000021
【図２１】
0005221756.tif 000022
【図２２】
0005221756.tif 000023
【図２３】
0005221756.tif 000024
【図２４】
0005221756.tif 000025
【図２５】
0005221756.tif 000026
【図２６】
0005221756.tif 000027
【図２７】
0005221756.tif 000028
【図２８Ａ】
0005221756.tif 000029
【図２８Ｂ】
0005221756.tif 000030
【図２８Ｃ】
0005221756.tif 000031
【図２９Ａ】
0005221756.tif 000032
【図２９Ｂ】
0005221756.tif 000033
【図２９Ｃ】
0005221756.tif 000034