(57)【要約】【課題】容易且つ適切にアクセス性能を比較的高くすることができるようにする。【解決手段】ストレージデバイス４０，４１に対する入出力に係るデータをキャッシュするためのメモリ（ＳＣＭ３２及びＤＲＡＭ３４）と、メモリに接続されたＣＰＵ３３とを備えるストレージシステム２０において、アクセス性能が高いＤＲＡＭ３４と、ＤＲＡＭ３４とアクセス単位が同一であり、且つＤＲＡＭ３４よりもアクセス性能が低いＳＣＭ３２とを有し、ＣＰＵ３３は、ストレージデバイス４０，４１に対する入出力に係るデータに基づいて、ＤＲＡＭ３４と、ＳＣＭ３２とのいずれにキャッシュさせるかを決定し、データを決定したＤＲＡＭ３４又はＳＣＭ３２にキャッシュするように構成する。【選択図】図１
2020071583.tif 000002
【特許請求の範囲】
【請求項１】
ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部と、前記メモリ部に接続されたプロセッサ部とを備えるデータ管理装置であって、
前記メモリ部は、アクセス性能が高い第１種メモリと、前記第１種メモリとアクセス単位が同一であり、且つ前記第１種メモリよりもアクセス性能が低い第２種メモリとを有し、
前記プロセッサ部は、
前記ストレージデバイスに対する入出力に係るデータに基づいて、前記第１種メモリと、前記第２種メモリとのいずれにキャッシュさせるかを決定し、
前記データを前記決定した前記第１種メモリまたは前記第２種メモリにキャッシュする
データ管理装置。
【請求項２】
前記ストレージデバイスに対する入出力に係るデータには、ホストコンピュータからのＩ／Ｏ要求に係るユーザデータと、前記ユーザデータを管理するための管理データとがあり、
前記プロセッサ部は、前記ユーザデータを、前記第１種メモリにキャッシュさせ、前記管理データを前記第２種メモリにキャッシュさせるように決定する
請求項１に記載のデータ管理装置。
【請求項３】
前記プロセッサ部は、前記第１種メモリに前記ユーザデータをキャッシュさせる際に、前記第１種メモリに空きがない場合に、前記第２種メモリにキャッシュさせるように決定する
請求項２に記載のデータ管理装置。
【請求項４】
前記プロセッサ部は、前記第１種メモリに前記ユーザデータをキャッシュさせる際に、前記第１種メモリに空きがない場合に、前記第１種メモリに空きができるまで待った後に、前記ユーザデータを前記第１種メモリにキャッシュさせる
請求項２に記載のデータ管理装置。
【請求項５】
前記プロセッサ部は、前記第２種メモリに前記管理データをキャッシュさせる際に、前記第２種メモリに空きがない場合に、前記第１種メモリにキャッシュさせるように決定する
請求項２に記載のデータ管理装置。
【請求項６】
前記プロセッサ部は、前記第２種メモリに前記管理データをキャッシュさせる際に、前記第２種メモリに空きがない場合に、前記第１種メモリにキャッシュさせるように決定する
請求項２に記載のデータ管理装置。
【請求項７】
前記管理データは、前記ユーザデータを圧縮して前記ストレージデバイスに格納させるアドレスを特定可能なアドレスデータである
請求項２から請求項６のいずれか一項に記載のデータ管理装置。
【請求項８】
前記第１種メモリは、ＤＲＡＭ（Dynamic Random Access Memory）であり、前記第２種メモリは、ＳＣＭ（Storage Class Memory）である
請求項１から請求項７のいずれか一項に記載のデータ管理装置。
【請求項９】
ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部を備えるデータ管理装置によるデータ管理方法であって、
前記メモリ部は、アクセス性能が高い第１種メモリと、前記第１種メモリとアクセス単位が同一であり、且つ前記第１種メモリよりもアクセス性能が低い第２種メモリとを有しており、
前記ストレージデバイスに対する入出力に係るデータに基づいて、前記第１種メモリと、前記第２種メモリとのいずれにキャッシュさせるかを決定し、
前記データを前記決定した前記第１種メモリまたは前記第２種メモリに格納させる
データ管理方法。
【請求項１０】
ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部と、前記メモリ部に接続されたプロセッサ部とを備えるデータ管理装置を構成するコンピュータに実行させるデータ管理プログラムであって、
前記メモリ部は、アクセス性能が高い第１種メモリと、前記第１種メモリとアクセス単位が同一であり、且つ前記第１種メモリよりもアクセス性能が低い第２種メモリとを有し、
前記コンピュータを、
前記ストレージデバイスに対する入出力に係るデータに基づいて、前記第１種メモリと、前記第２種メモリとのいずれにキャッシュさせるかを決定する機能と、
前記データを前記決定した前記第１種メモリまたは前記第２種メモリに格納する機能と、を実現するためのデータ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データのキャッシュ制御の技術に関する。
【背景技術】
【０００２】
メモリの一例として、半導体不揮発性メモリであるＮＡＮＤ型フラッシュメモリが知られている。ＮＡＮＤ型フラッシュメモリは、ＤＲＡＭ等の揮発性メモリに比べて記憶密度を高く、容量当たりのコスト（ビットコスト）を安くすることが可能である。
【０００３】
しかし、フラッシュメモリには次のような制限がある。データを書き換える前には、例えば４ＭＢといった大きなサイズのブロック単位でデータ消去を行う必要がある。また、データの読み書きはページという単位で行う必要がある。各ブロックは複数のページで構成され、そのサイズは例えば８ＫＢや１６ＫＢである。さらに、ブロックの消去回数には上限（書き換え寿命）があり、例えば数千回程度である。
【０００４】
ＮＡＮＤ型フラッシュメモリの低コストの利点を生かし、ＤＲＡＭを媒体とするキャッシュメモリに加えて、ＮＡＮＤ型フラッシュメモリを媒体とするキャッシュメモリを搭載するストレージシステムが開示されている（例えば、特許文献１参照）。
【０００５】
このようなストレージシステムでは、８Ｂや１６Ｂなど小さい単位で書き換えるデータ（例えば管理データ）をＮＡＮＤ型フラッシュメモリを媒体とするキャッシュメモリに格納すると、ページ内の９９％以上を占める更新対象外のデータも同時に書き換える必要がある。ＮＡＮＤ型フラッシュメモリは書き換え寿命が短いため、このような使い方では寿命が早く尽きてしまう。これに対して、特許文献１には、管理データを、ＤＲＡＭを媒体とするキャッシュメモリに優先的に格納する技術が開示されている。
【０００６】
一方で、最近では、ＮＡＮＤ型フラッシュメモリ以外の半導体不揮発性メモリとして、相変化メモリ、磁気抵抗メモリ、抵抗変化メモリなどのＳＣＭ（Storage  Class  Memory）と呼ばれる不揮発性半導体メモリも開発されている。ＳＣＭもＤＲＡＭに比べて記憶密度が高い。ＮＡＮＤ型フラッシュメモリと違い、データ消去が不要で、ＤＲＡＭと同様にバイト単位でアクセスが可能で、書き換え寿命も長いという扱いやすさがある。また、ＤＲＡＭに比べて安価で、同じコストで大容量のメモリを提供できる。しかし、ＳＣＭは一般的にＤＲＡＭに比べるとアクセス性能が低いという特徴がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２０１４／１０３４８９号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ストレージシステムにおいて、ユーザデータのリード／ライト性能を向上させるためには、ユーザデータを管理するために用いる管理データをディスクから読んだり、書いたりする頻度を削減することが有効であり、そのために、管理データをできるだけ多くメモリにキャッシュする必要がある。例えば、ＤＲＡＭに管理データをキャッシュするようにすると、高いシステムコストがかかるという課題がある。
【０００９】
また、管理データに限らず、他のデータについてもＤＲＡＭにキャッシュするようにすると、高いシステムコストがかかるという課題がある。一方、フラッシュメモリにキャッシュするようにすると、フラッシュメモリの寿命が短くなってしまう課題や、アクセス性能が低くなるという課題がある。
【００１０】
本発明は、上記事情に鑑みなされたものであり、その目的は、容易且つ適切にアクセス性能を比較的高くすることのできる技術を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、一観点に係るデータ管理装置は、ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部と、メモリ部に接続されたプロセッサ部とを備えるデータ管理装置であって、メモリ部は、アクセス性能が高い第１種メモリと、第１種メモリとアクセス単位が同一であり、且つ第１種メモリよりもアクセス性能が低い第２種メモリとを有し、プロセッサ部は、ストレージデバイスに対する入出力に係るデータに基づいて、第１種メモリと、第２種メモリとのいずれにキャッシュさせるかを決定し、データを決定した第１種メモリまたは第２種メモリにキャッシュする。
【発明の効果】
【００１２】
本発明によると、容易且つ適切にアクセス性能を比較的高くすることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、一実施形態に係る情報システムの第１の構成例を示す図である。
【図２】図２は、一実施形態に係る情報システムの第２の構成例を示す図である。
【図３】図３は、メモリ媒体の特徴を比較する図である。
【図４】図４は、一実施形態に係るストレージコントローラのＤＲＡＭの構成図である。
【図５】図５は、一実施形態に係るストレージコントローラのＳＣＭの構成図である。
【図６】図６は、一実施形態に係るキャッシング先選択処理の概要を示す図である。
【図７】図７は、一実施形態に係る論理ボリューム、スロット、及びセグメントの関係を示す図である。
【図８】図８は、一実施形態に係るキャッシュ管理データ構造を示す図である。
【図９】図９は、一実施形態に係るキャッシュ管理データの一部のデータ構造を示す図である。
【図１０】図１０は、一実施形態に係るダーティキュー及びクリーンキューのデータ構造を示す図である。
【図１１】図１１は、一実施形態に係るＳＣＭフリーキュー及びＤＲＡＭフリーキューのデータ構造を示す図である。
【図１２】図１２は、一実施形態に係る圧縮モードでの論理アドレスの対応関係を示す図である。
【図１３】図１３は、一実施形態に係る圧縮モードでの管理データ構造を示す図である。
【図１４】図１４は、一実施形態に係るリードコマンド処理のフローチャートである。
【図１５】図１５は、一実施形態に係るユーザデータリード処理のフローチャートである。
【図１６】図１６は、一実施形態に係るセグメント割当処理のフローチャートである。
【図１７】図１７は、一実施形態に係るＳＣＭ優先セグメント割当処理のフローチャートである。
【図１８】図１８は、一実施形態に係るＤＲＡＭ優先セグメント割当処理のフローチャートである。
【図１９】図１９は、一実施形態に係るステージング処理のフローチャートである。
【図２０】図２０は、一実施形態に係るデータ送信処理のフローチャートである。
【図２１】図２１は、一実施形態に係るライトコマンド処理のフローチャートである。
【図２２】図２２は、一実施形態に係るユーザデータライト処理のフローチャートである。
【図２３】図２３は、一実施形態に係る管理データアクセス処理のフローチャートである。
【図２４】図２４は、一実施形態に係るダーティデータ書き出し処理のフローチャートである。
【図２５】図２５は、一実施形態に係るデステージング処理のフローチャートである。
【発明を実施するための形態】
【００１４】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１５】
なお、以後の説明では「ａａａテーブル」等の表現にて情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」等について「ａａａ情報」と呼ぶことができる。
【００１６】
また、以後の説明では「プログラム」を動作の主体として説明を行う場合があるが、プログラムは、プロセッサ（典型的にはＣＰＵ（Central  Processing  Unit））を含む制御デバイスによって実行されることで、定められた処理をメモリ及びＩ／Ｆ（インタフェース）を用いながら行うため、プロセッサ又は制御デバイスを動作主体とした説明としてもよい。制御デバイスは、プロセッサであっても良いし、プロセッサとハードウェア回路を含んでいても良い。また、プログラムを動作主体として開示された処理は、ホスト計算機、ストレージシステムが行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。記憶メディアとしては、例えば、ＩＣカード、ＳＤカード、ＤＶＤ等であってもよい。
【００１７】
また、以下の説明では、「メモリ部」は、１以上のメモリを含む。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１８】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサである。１以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１９】
図１は、一実施形態に係る情報システムの第１の構成例を示す図である。
【００２０】
情報システム１Ａは、ホスト計算機１０と、ホスト計算機１０に直接あるいはネットワークを介して接続されるストレージシステム２０（データ管理装置の一例）とを有する。ストレージシステム２０は、ストレージコントローラ３０と、ストレージコントローラ３０に接続されるＨＤＤ（Hard  Disk  Drive）４０及び／またはＳＳＤ（Solid  State  Drive）４１とを有する。ＨＤＤ４０及び／またはＳＳＤ４１は、ストレージデバイスの一例である。ＨＤＤ４０及び／またはＳＳＤ４１は、ストレージコントローラ３０に内蔵されていてもよい。
【００２１】
ストレージコントローラ３０は、１つ以上のフロントエンドインタフェース（ＦＥ  Ｉ／Ｆ）３１、１つ以上のバックエンドインタフェース（ＢＥ  Ｉ／Ｆ）３５、１つ以上のＳＣＭ（Storage  Class  Memory）３２、ＣＰＵ３３、及びＤＲＡＭ（Dynamic  Random  Access  Memory）３４を含む。ＳＣＭ３２及びＤＲＡＭ３４は、アクセス単位がバイト単位である、すなわち、バイト単位で読み書きが可能なメモリ（メモリデバイス）である。ここで、ＤＲＡＭ３４が第１種メモリに相当し、ＳＣＭ３２が第２種メモリに相当する。また、ＤＲＡＭ３４及びＳＣＭ３２がメモリ部に相当する。
【００２２】
ストレージコントローラ３０は、複数のストレージデバイス（ＨＤＤ４０やＳＳＤ４１）から１以上の論理ボリューム（実体的な論理ボリューム）を形成して、ホスト計算機１０に提供する。すなわち、ホスト計算機１０が形成された論理ボリュームを認識できるようにする。あるいは、ストレージコントローラ３０は、いわゆるシンプロビジョニング技術によって形成される論理ボリューム（仮想的な論理ボリュームであって、論理ボリューム内の各領域には、動的に記憶領域が割り当てられるボリューム）をホスト計算機１０に提供する。
【００２３】
ホスト計算機１０は、ストレージシステム２０から提供される論理ボリューム（実体的な論理ボリュームまたは仮想的な論理ボリューム）及び論理ボリューム内の位置（論理ブロック番号。ＬＢＡと略記されることもある）を指定したＩ／Ｏコマンド（ライトコマンド又はリードコマンド）を発行して、論理ボリュームに対するデータのリード・ライト処理を行う。なお、ストレージコントローラ３０が論理ボリュームを提供しない構成、たとえばストレージシステム２０が、各ＨＤＤ４０、各ＳＳＤ４１を、それぞれ単一のストレージデバイスとしてホスト計算機１０に提供する構成であっても、本発明は有効である。なお、ホスト計算機１０が認識する論理ボリュームのことを、論理ユニット（Logical  Unit。ＬＵと略記されることもある）と呼ぶこともあり、本明細書においては特に断りのない限り、論理ボリュームと論理ユニット（ＬＵ）の語は、いずれも同一の概念を意味するものとして用いられている。
【００２４】
ＦＥ  Ｉ／Ｆ３１は、ホスト計算機１０と通信するためのインタフェースデバイスである。ＢＥ  Ｉ／Ｆ３５は、ＨＤＤ４０又はＳＳＤ４１と通信するためのインタフェースデバイスである。ＢＥ  Ｉ／Ｆ３５は、例えばＳＡＳやFibre  Channelのインタフェースデバイスである。
【００２５】
ＣＰＵ３３は、後述する各種処理を実行する。ＤＲＡＭ３４は、ＣＰＵ３３に実行されるプログラム、ＣＰＵ３３で利用される制御情報、バッファデータを記憶する。ＳＣＭ３２は、例えば、相変化メモリ、磁気抵抗メモリ、抵抗変化メモリなどであり、データを記憶する。ＳＣＭ３２及びＤＲＡＭ３４は、キャッシュメモリ領域を含んでいる。キャッシュメモリ領域は、複数のキャッシュセグメントで構成される。キャッシュセグメントは、ＣＰＵ３３によって管理される単位領域である。例えば、キャッシュメモリ領域では、キャッシュセグメント単位で、領域確保、データの読出し及びデータの書込みが行われてよい。キャッシュメモリ領域には、最終ストレージデバイスから読み出されるデータ、及び、最終ストレージデバイスに書き込まれるデータ（ホスト計算機１０からのＩ／Ｏコマンド（典型的には、ライトコマンド又はリードコマンド）に従うデータであるユーザデータ）がキャッシュされる（一時的に格納される）。最終ストレージデバイスとは、Ｉ／Ｏコマンドで指定されているＩ／Ｏ先に従いストレージコントローラ３０によってＩ／Ｏが行われるデータが格納されるストレージデバイスである。具体的には、例えば、Ｉ／Ｏコマンド（ライトコマンド）に従うデータは、一旦はキャッシュメモリ領域に格納されるが、その後、Ｉ／Ｏコマンドで指定されている論理ユニット（論理ボリューム）を構成しているストレージデバイスの領域（論理ボリュームが仮想的な論理ボリュームである場合には、この論理ボリュームの領域に対して割り当てられているストレージデバイスの領域）に格納される。最終ストレージデバイスとは、この論理ボリュームを形成するストレージデバイスのことを意味する。本実施形態では、最終ストレージデバイスは、ＨＤＤ４０又はＳＳＤ４１であるが、他種のストレージデバイス、例えば、複数のストレージデバイスを有する外部ストレージシステムであってもよい。
【００２６】
また、キャッシュメモリ領域には、管理データがキャッシュされる。管理データとは、例えば、ストレージシステム２０が、ユーザデータを所定の単位で分割したデータ部分を管理するために用いる、各データ部分に対応する小サイズのデータである。管理データは、ストレージシステム２０内部でのみ使用され、ホスト計算機１０からは読み書きされない。管理データもユーザデータと同じく、最終ストレージデバイスに保存される。
【００２７】
図１の情報システム１Ａは、各構成要素を１つずつ備えたものとしているが、冗長化、高性能化、あるいは大容量化などのために、各構成要素を複数備えるようにしてもよい。また、各構成要素間はネットワークを介して接続されてもよい。ネットワークは、スイッチやエキスパンダなどを含んでいてもよい。冗長化や高性能化を考えると、情報システムは、例えば、図2に示すような構成としてもよい。
【００２８】
図２は、一実施形態に係る情報システムの第２の構成例を示す図である。
【００２９】
情報システム１Ｂは、ホスト計算機１０と、ストレージシステム２０と、ホスト計算機１０とストレージシステム２０とを接続するネットワーク５０とを備える。ネットワーク５０は、Fibre  Channel、Ethernet、Infiniband等であってよく、本実施形態では、ネットワーク５０をＳＡＮ(Storage  Area  Network)と総称する。
【００３０】
ストレージシステム２０は、２つのストレージコントローラ３０（ストレージコントローラＡ、ストレージコントローラＢ）と、ドライブエンクロージャ６０とを含む。
【００３１】
ストレージコントローラ３０は、複数のＦＥ  Ｉ／Ｆ３１、複数のＢＥ  Ｉ／Ｆ３５、複数のＳＣＭ３２、複数のＣＰＵ３３、複数のＤＲＡＭ３４、及びノードインタフェース（ノードＩ／Ｆ）３６を含む。ノードインタフェース３６は、例えばInfiniband、Fibre  Channel（ＦＣ）、Ethernet（登録商標）等のネットワークインタフェースのデバイスでもよく、PCI  Expressのようなバスのインタフェースのデバイスでもよい。２つのストレージコントローラ３０は、ノードインタフェース３６を介して接続されている。ここで、ＤＲＡＭ３４が第１種メモリに相当し、ＳＣＭ３２が第２種メモリに相当する。また、ＤＲＡＭ３４及びＳＣＭ３２がメモリ部に相当する。
【００３２】
ドライブエンクロージャ６０は、複数のＨＤＤ４０やＳＳＤ４１を格納する。複数のＨＤＤ４０やＳＳＤ４１は、ドライブエンクロージャ６０内のエキスパンダ４２に接続される。エキスパンダ４２は、各ストレージコントローラ３０のＢＥ  Ｉ／Ｆ３５に接続される。ＢＥ  Ｉ／Ｆ３５がＳＡＳのインタフェースデバイスである場合には、エキスパンダ４２は、例えばSAS  Expanderであり、ＢＥ  Ｉ／Ｆ３５がFibre  Channelのインタフェースデバイスである場合、エキスパンダ４２は、例えばＦＣスイッチである。
【００３３】
なお、ストレージシステム２０は、ドライブエンクロージャ６０を１つ備えているが、複数のドライブエンクロージャ６０を備えてもよい。この場合、ＢＥ  Ｉ／Ｆ３５の複数のポートのそれぞれに対して各ドライブエンクロージャ６０を直接接続してもよいし、ＢＥ  Ｉ／Ｆ３５のポートに、スイッチを経由して複数のドライブエンクロージャ６０を接続してもよい。また、各ドライブエンクロージャ６０のエキスパンダ４２同士をカスケード接続することで複数のドライブエンクロージャ６０を数珠繋ぎにして、ＢＥ  Ｉ／Ｆ３５のポートに接続するようにしてもよい。
【００３４】
次に、メモリ媒体の特徴について説明する。
【００３５】
図３は、メモリ媒体の特徴を比較する図である。
【００３６】
ＤＲＡＭは、非常にアクセス性能が高く、バイト単位で読み書きが可能で、揮発性であるという特性を有している。そのため、一般に主記憶装置やバッファメモリとして使用される。ただし、ビットコストが高いため、大量に搭載するとシステムが高額になるというデメリットがある。
【００３７】
ＳＣＭは、例えばＰＲＡＭ（相変化メモリ）やＭＲＡＭ（磁気抵抗メモリ）、ＲｅＲＡＭ（抵抗変化メモリ）である。ＳＣＭは、ＤＲＡＭに比べてアクセス性能が低いが、ビットコストが低いという特性を有している。ＳＣＭは、ＤＲＡＭと同様にバイト単位で読み書きが可能である。そのため、アクセス性能を許容可能な範囲で、ＤＲＡＭの代替として主記憶装置やバッファメモリに使用することができる。このため、同じコストで情報システムに搭載可能な量を考えれば、ＤＲＡＭよりも多くなるというメリットがある。また、不揮発性があるため、ドライブの媒体として使用することもできる。
【００３８】
ＮＡＮＤは、ＮＡＮＤ型フラッシュメモリである。ＮＡＮＤは、ＳＣＭに比べてアクセス性能が低いが、ビットコストが低いという特性を有している。ＮＡＮＤは、ＤＲＡＭやＳＣＭと異なり、バイトより非常に大きなページという単位で読み書きする必要がある。ページサイズは、例えば、８ＫＢや１６ＫＢである。また、再書き込みの前には、消去が必要であり、消去単位は複数のページをまとめたサイズ（例えば、４ＭＢ）である。非常にビットコストが低く、不揮発性があるため、主にドライブの媒体として使用される。また、ＮＡＮＤは、書き換え寿命が短いという欠点がある。
【００３９】
図４は、一実施形態に係るストレージコントローラのＤＲＡＭの構成図である。
【００４０】
ＤＲＡＭ３４は、ＣＰＵ３３が実行するストレージ制御プログラム３４０、キャッシュ制御情報３４１、及びユーザデータバッファ３４２を格納する。また、ＤＲＡＭ３４は、データをキャッシュして管理するための複数のキャッシュセグメント３４３が格納される。このキャッシュセグメント３４３に、ＨＤＤ４０又はＳＳＤ４１に格納されるユーザデータや管理データ、ＨＤＤ４０又はＳＳＤ４１から読み出されたユーザデータや管理データがキャッシュされる。
【００４１】
ストレージ制御プログラム３４０は、データ管理プログラムの一例であり、キャッシュに関わる各種制御処理を実行する。なお、処理の詳細については後述する。キャッシュ制御情報３４１は、キャッシュディレクトリ１００（図８参照）と、クリーンキュー（図１０参照）と、ダーティキュー（図１０参照）と、ＳＣＭフリーキュー２００（図８参照）と、ＤＲＡＭフリーキュー３００（図８参照）とを含む。キャッシュ制御情報３４１に関するデータ構造については後述する。
【００４２】
ＤＲＡＭ３４の実装方法としては、例えば基板上に複数のＤＲＡＭのメモリチップを搭載したＤＩＭＭのようなメモリモジュールを構成しておき、このメモリモジュールをストレージコントローラ３０の主基板上のメモリスロットに接続するようにしてもよい。なお、ストレージコントローラ３０の主基板と別の基板上にＤＲＡＭ３４を搭載する構成とすることにより、ストレージコントローラ３０の主基板とは独立に保守交換やＤＲＡＭ容量増設を行えるようにすることができる。また、停電など不慮の障害が発生した場合に、ＤＲＡＭ３４上の記憶内容が消失することを避けるために、バッテリを設けて、停電時等にもＤＲＡＭ３４上の記憶内容を維持できるような構成にしてもよい。
【００４３】
図５は、一実施形態に係るストレージコントローラのＳＣＭの構成図である。
【００４４】
ＳＣＭ３２は、データをキャッシュして管理するための複数のキャッシュセグメント３２５を格納する。このキャッシュセグメント３２５に、ＨＤＤ４０又はＳＳＤ４１に格納されるユーザデータや管理データ、ＨＤＤ４０又はＳＳＤ４１から読み出されたユーザデータや管理データをキャッシュすることができる。
【００４５】
次に、本実施形態に係るストレージシステムによるデータのキャッシング先を選択するキャッシング先選択処理の概要について説明する。
【００４６】
図６は、一実施形態に係るキャッシング先選択処理の概要を示す図である。
【００４７】
ストレージシステム２０のストレージコントローラ３０は、ＨＤＤ４０やＳＳＤ４１に管理されるデータをＳＣＭ３２またはＤＲＡＭ３４のいずれかにキャッシュする。ストレージコントローラ３０は、データのキャッシング先を、キャッシュ対象のデータ（キャッシュ対象データ）の種類に基づいて決定する。具体的なキャッシング先選択処理（セグメント割当処理）については後述する。
【００４８】
次に、キャッシュを管理するキャッシュ管理データの構造について説明するにあたって、ボリューム（論理ボリューム）とキャッシュ管理データとの関係の概要を説明する。
【００４９】
図７は、一実施形態に係る論理ボリューム、スロット、及びセグメントの関係を示す図である。
【００５０】
ＨＤＤ４０やＳＳＤ４１には、ホスト計算機１０によりアクセスされる論理ボリューム１０００が格納される。ホスト計算機１０が論理ボリューム１０００にアクセスする際、最小アクセス単位はブロック（たとえば５１２バイト）である。論理ボリューム１０００の各ブロックは、論理ブロックアドレス（ＬＢＡ：論理アドレスと呼ぶこともある）で識別可能となっている。ブロックに対する論理アドレスは、例えば、論理アドレス１０１０に示すように表すことができる。
【００５１】
ストレージシステム２０においては、論理ボリューム上の記憶領域へのアクセス時等に排他制御を行うが、排他制御の単位として、スロット１１００が定義されている。スロット１１００のサイズは、例えば、２５６ＫＢ、例えば、５１２ブロックを含むサイズとなっている。なお、スロット１１００のサイズは、これに限られず、他のサイズとしてもよい。
【００５２】
各スロット１１００は、一意な識別番号（スロットＩＤ）によって識別可能となっている。スロットＩＤは、例えば、スロットＩＤ１１１０に示すように表すことができる。図７においては、論理アドレス１０１０の各論理アドレスは、スロットＩＤ１１１０の各スロットＩＤに対応するスロットの先頭のブロックの論理アドレスを示している。
【００５３】
本実施形態においては、例えば、ホスト計算機１０から受信したＩ／Ｏコマンドで指定されている論理ブロックアドレスを５１２で除算することにより得られる値が論理ブロックアドレスに対応するブロックが属するスロットのスロットＩＤとなる。この除算を行った際における剰余が０である場合には、Ｉ／Ｏコマンドで指定されている論理ブロックアドレスで特定されるブロックは、算出されたスロットＩＤで特定されるスロットの先頭のブロックであることを示し、剰余が０でない値（ここで、この値をＲとする）である場合、このＲは、論理ブロックアドレスで特定されるブロックが、算出されたスロットＩＤで特定されるスロットの先頭ブロックからＲ番目の位置に存在するブロックであることを示している。（ここで、Ｒのことを、スロット内相対アドレスと呼ぶ）。
【００５４】
ストレージコントローラ３０は、論理ボリューム１０００上のデータをキャッシュする場合、ＤＲＡＭ３４またはＳＣＭ３２上の記憶領域をキャッシュ領域として確保する。ストレージコントローラ３０は、キャッシュセグメント（セグメント）(１２０１、１２０２、１２０３、１２０４：以下、キャッシュセグメント１２０１、１２０２、１２０３、１２０４を総称する場合、「キャッシュセグメント１２００」と表記する)という領域単位でキャッシュ領域を確保する。本実施形態では、例えば、キャッシュセグメント１２００のサイズは６４ＫＢであり、各スロットに対して４つのキャッシュセグメント１２００（例えば、１２０１、１２０２、１２０３、１２０４）が対応付けられる。
【００５５】
ストレージシステム２０は、スロット１１００を管理する情報として、スロット１１００毎にスロット制御テーブル１１０（図８参照）有している。スロット制御テーブル１１０には、スロット１１００に対応付けられているキャッシュセグメント１２００の情報（正確には、キャッシュセグメント１２００を管理するための情報へのポインタ）が格納される。ストレージシステム２０は、このスロット制御テーブル１１０を作成、管理することによって、スロット１１００とキャッシュセグメント１２００との対応付けを管理する。なお、キャッシュセグメント１２００のサイズは、６４ＫＢ以外のサイズとしてもよく、また、１つのスロット１１００に対応付けられるキャッシュセグメント１２００の数を、４つ以外の値としてもよい。
【００５６】
次に、ホスト計算機１０が論理ボリューム１０００上の領域にアクセス（リードまたはライト等）する際の、キャッシュ領域の管理に関連する処理の概要について説明する。
【００５７】
ホスト計算機１０は、ユーザデータにアクセスする際には、アクセス先の論理ユニット番号（論理ユニット／論理ボリュームを特定する番号：ＬＵＮ（Logical  Unit  Number）と表記する）と、論理ブロックアドレス１０１０とを指定したＩ／Ｏコマンドをストレージシステム２０に発行する。ストレージシステム２０のストレージコントローラ３０は、受信したＩ／Ｏコマンドに含まれる論理ブロックアドレスを、スロットＩＤ１１１０とスロット内相対アドレスとの組に変換し、変換により得られたスロットＩＤ１１１０で特定されるスロット制御テーブル１１０を参照する。そして、ストレージコントローラ３０は、スロット制御テーブル１１０の情報に基づき、Ｉ／Ｏコマンドで指定された論理ボリューム１０００上の領域（論理ブロックアドレスで特定される領域）に対してキャッシュセグメント１２００が確保されているか否かを判定し、キャッシュセグメント１２００が確保されていなければ、新規にキャッシュセグメント１２００を確保する処理を行う。
【００５８】
次に、キャッシュ管理データ構造について説明する。
【００５９】
図８は、一実施形態に係るキャッシュ管理データ構造を示す図である。
【００６０】
キャッシュ管理データは、キャッシュディレクトリ１００と、ＳＣＭフリーキュー２００と、ＤＲＡＭフリーキュー３００と、ダーティキューおよびクリーンキュー（図１０参照）とを含む。本実施形態では、ＤＲＡＭ３４と、ＳＣＭ３２とにキャッシュセグメント（３４３、３２５）が管理される。各キャッシュセグメントは、セグメント制御テーブル１２０（ＳＧＣＴ：Segment  Control  Table）で管理される。ＳＧＣＴ１２０は、ＤＲＡＭ３４及びＳＣＭ３２で管理されている全てのキャッシュセグメントのそれぞれと一対一に対応して管理される。
【００６１】
キャッシュディレクトリ１００は、キャッシュ対象データの論理アドレス（キャッシュセグメントに格納されたデータの格納先である、論理ボリュームの論理ブロックアドレス）と、メモリ（ＤＲＡＭ３４およびＳＣＭ３２）上の物理アドレスとの対応関係を管理するためのデータである。キャッシュディレクトリ１００は、例えば、キャッシュ対象データのキャッシュセグメントが属するスロットＩＤ（論理ブロックアドレスから特定可能）をキーとするハッシュテーブルであり、スロットＩＤのスロットに対応するスロット制御テーブル１１０（ＳＬＣＴ：Slot  Control  Table）へのポインタをエントリとして格納している。ＳＬＣＴ１１０は、スロットに属するキャッシュセグメントのＳＧＣＴ１２０へのポインタを管理している。ＳＧＣＴ１２０は、そのＳＧＣＴ１２０に対応するキャッシュセグメント（３２５、３４３）へのポインタを管理している。
【００６２】
したがって、キャッシュディレクトリ１００によると、キャッシュ対象データの論理アドレスに基づいて、この論理アドレスに対応するデータがキャッシュされているキャッシュセグメントを特定することができる。なお、ＳＬＣＴ１１０、ＳＧＣＴ１２０の詳細な構成については、後述する。本実施形態は、キャッシュディレクトリ１００は、ＤＲＡＭ３４のキャッシュセグメント３４３と、ＳＣＭ３２のキャッシュセグメント３２５とのすべてをまとめて管理している。このため、キャッシュディレクトリ１００を参照することにより、ＤＲＡＭ３４及びＳＣＭ３２におけるキャッシュのヒット判定を容易に行うことができる。
【００６３】
ＳＣＭフリーキュー２００は、ＳＣＭ３２のフリーセグメント、すなわちいずれのデータも格納していないキャッシュセグメント３２５を管理する制御情報である。ＳＣＭフリーキュー２００は、例えばＳＣＭ３２のフリーセグメントに対応するＳＧＣＴ１２０をエントリに持つ双方向のリンクリストとして構成される。なお、フリーセグメントを管理する制御情報のデータ構造は、必ずしもキューである必要はなく、スタックなどを用いてもよい。
【００６４】
ＤＲＡＭフリーキュー３００は、ＤＲＡＭ３４のフリーセグメントを管理する制御情報である。ＤＲＡＭフリーキュー３００は、例えばＤＲＡＭ３４のフリーセグメントに対応するＳＧＣＴ１２０をエントリに持つ双方向のリンクリストとして構成される。なお、フリーセグメントを管理する制御情報のデータ構造は、必ずしもキューである必要はなく、スタックなどを用いてもよい。
【００６５】
ＳＧＣＴ１２０は、そのＳＧＣＴ１２０に対応するキャッシュセグメントの状態および種類によって、キャッシュディレクトリ１００、ＳＣＭフリーキュー２００、又はＤＲＡＭフリーキュー３００のいずれかに接続された状態をとる。具体的には、ＳＣＭ３２のキャッシュセグメント３２５に対応するＳＧＣＴ１２０は、このキャッシュセグメント３２５が未使用時には、ＳＣＭフリーキュー２００に接続され、このキャッシュセグメント３２５がデータ格納用に割り当てられると、キャッシュディレクトリ１００に接続される。一方、ＤＲＡＭ３４のキャッシュセグメント３４３に対応するＳＧＣＴ１２０は、このキャッシュセグメント３４３が未使用時には、ＤＲＡＭフリーキュー３００に接続され、このキャッシュセグメント３４３がデータ格納用に割り当てられると、キャッシュディレクトリ１００に接続される。
【００６６】
図９は、一実施形態に係るキャッシュ管理データの一部のデータ構造を示す図である。
【００６７】
キャッシュディレクトリ１００は、例えばスロットＩＤをキーとするハッシュテーブルである。キャッシュディレクトリ１００のエントリ（ディレクトリエントリ）１００ａは、スロットＩＤに対応するＳＬＣＴ１１０を示すディレクトリエントリポインタを格納する。ここで、スロットは、排他制御を行うデータの単位（ロック単位）である。例えば、１つのスロットは、複数のキャッシュセグメントを含むことができる。なお、スロットの内の一部しかデータが格納されていない場合には、スロットには、キャッシュセグメントが１つしか含まれていないこともある。
【００６８】
ＳＬＣＴ１１０は、ディレクトリエントリポインタ１１０ａと、前方ポインタ１１０ｂと、後方ポインタ１１０ｃと、スロットＩＤ１１０ｄと、スロットステータス１１０ｅと、ＳＧＣＴポインタ１１０ｆとを含む。ディレクトリエントリポインタ１１０ａは、同一のハッシュ値となる別のキーに対応するＳＬＣＴ１１０を指すディレクトリエントリポインタである。前方ポインタ１１０ｂは、クリーンキュー又はダーティキューにおける前の順番のＳＬＣＴ１１０を示すポインタである。後方ポインタ１１０ｃは、クリーンキュー又はダーティキューにおける後の順番のＳＬＣＴ１１０を示すポインタである。スロットＩＤ１１０ｄは、ＳＬＣＴ１１０に対応するスロットの識別情報（スロットＩＤ）である。スロットステータス１１０ｅは、スロットの状態を示す情報である。スロットの状態としては、例えば、スロットがロックされていることを示す「ロック中」等がある。ＳＧＣＴポインタ１１０ｆは、このスロットに含まれるキャッシュセグメントに対応するＳＧＣＴ１２０を指すポインタである。このスロットにキャッシュセグメントが割り当てられていないときは、ＳＧＣＴポインタ１１０ｆは、ポインタ（アドレス）が無効であることを表す値（例えばＮＵＬＬ）となっている。またスロットに含まれるキャッシュセグメントが複数ある場合には、各ＳＧＣＴ１２０はリンクリストとして管理され、ＳＧＣＴポインタ１１０ｆは、リンクリストにおける先頭のキャッシュセグメントに対応するＳＧＣＴ１２０を指すポインタである。
【００６９】
ＳＧＣＴ１２０は、ＳＧＣＴポインタ１２０ａと、セグメントＩＤ１２０ｂと、メモリ種類１２０ｃと、セグメントアドレス１２０ｄと、ステージングビットマップ１２０ｅと、ダーティビットマップ１２０ｆとを含む。
【００７０】
ＳＧＣＴポインタ１２０ａは、同じスロットに含まれる次のキャッシュセグメントに対応するＳＧＣＴ１２０を指すポインタである。セグメントＩＤ１２０ｂは、キャッシュセグメントの識別情報で、スロット内の何番目に位置づけられるキャッシュセグメントであるかを表す情報である。本実施形態では、１スロットに最大で４つのキャッシュセグメントが割り当てられるので、各キャッシュセグメントのセグメントＩＤ１２０ｂには、０、１、２、３のいずれかの値が格納される。スロットの先頭に位置するキャッシュセグメントのセグメントＩＤ１２０ｂは０となり、以下順に１、２、３のセグメントＩＤ１２０ｂが付与される。例えば、図７におけるキャッシュセグメント１２０１〜１２０４を例にとると、スロット１１００の先頭に対応付けられているキャッシュセグメント１２０１のセグメントＩＤ１２０ｂは０で、以下キャッシュセグメント１２０２、１２０３、１２０４のセグメントＩＤ１２０ｂはそれぞれ、１、２、３となる。メモリ種類１２０ｃは、このＳＧＣＴ１２０に対応するキャッシュセグメントが格納されているキャッシュメモリを構成するメモリの種類である。メモリの種類としては、ＳＣＭと、ＤＲＡＭとのいずれかがある。
【００７１】
セグメントアドレス１２０ｄは、キャッシュセグメントのアドレスである。ステージングビットマップ１２０ｅは、キャッシュセグメントの中でクリーンデータ、つまりドライブ（４０、４１）のデータと一致しているデータがキャッシュされている領域を示すビットマップである。ステージングビットマップ１２０ｅでは、各ビットがキャッシュセグメントにおける各領域に対応し、有効なデータ（ドライブと同じデータ）がキャッシュされている領域に対応するビットはＯＮ（１）に設定され、有効なデータがキャッシュされていない領域に対応するビットはＯＦＦ（０）に設定される。ダーティビットマップ１２０ｆは、キャッシュセグメントの中でダーティデータ、つまりドライブのデータと不一致なデータ（まだドライブに反映されていないデータ）がキャッシュされている領域を示すビットマップである。ダーティビットマップ１２０ｆでは、各ビットがキャッシュセグメントにおける各領域に対応し、ダーティデータがキャッシュされている領域に対応するビットはＯＮ（１）に設定され、ダーティデータがキャッシュされていない領域に対応するビットはＯＦＦ（０）に設定される。
【００７２】
図１０は、一実施形態に係るダーティキュー及びクリーンキューのデータ構造を示す図である。
【００７３】
ダーティキューは、ダーティデータを含むスロットに対応するＳＬＣＴ１１０を接続しているキューである。クリーンキューは、クリーンデータのみを含むスロットに対応するＳＬＣＴ１１０を接続しているキューである。ダーティキュー及びクリーンキューは、キャッシュリプレースやデステージのスケジューリング等に用いられ、それぞれのキャッシュリプレースやデステージのスケジューリング方式等によってさまざまな構造を取りうる。
【００７４】
本実施形態では、キャッシュリプレースおよびデステージのスケジューリングに用いるアルゴリズムをＬＲＵ（Least  Recently  Used）として説明する。なお、ダーティキューおよびクリーンキューは、接続するＳＬＣＴ１１０が違うだけで、キューの基本的な構成は同様であるので、ここでは、ダーティキューを例に挙げて説明する。
【００７５】
ダーティキューは、ＳＬＣＴ１１０の双方向のリンクリストとして構成されている。すなわち、ダーティキューは、ＭＲＵ（Most  Recently  Used）ターミナル１５０の前方ポインタに、最近使用したダーティデータを含むスロット（最終使用時刻の最も新しいスロット）に対応するＳＬＣＴ１１０を接続し、接続されたＳＬＣＴ１１０の前方ポインタ１１０ｂに、次の順番のスロット（次に最近使用したダーティデータを含むスロット）のＳＬＣＴ１１０を接続するといったように、ＳＬＣＴ１１０をダーティデータの使用順番に従って順次接続し、最後の順番のＳＣＬＴ１１０の前方ポインタ１１０ｂにＬＲＵターミナル１６０を接続する一方、ＬＲＵターミナル１６０の後方ポインタに最後の順番のＳＣＬＴ１１０を接続し、接続された後ろの順番のＳＣＬＴ１１０の後方ポインタ１１０ｃに対して、その前の順番のスロットのＳＬＣＴ１１０を順次接続し、最初の順番のＳＬＣＴ１１０をＭＲＵターミナル１５０に接続する。ダーティキューでは、ＭＲＵターミナル１５０側から、最終使用時刻の新しい順にＳＬＣＴ１１０が並ぶこととなる。
【００７６】
図１１は、一実施形態に係るＳＣＭフリーキュー及びＤＲＡＭフリーキューのデータ構造を示す図である。
【００７７】
ＳＣＭフリーキュー２００は、ＳＣＭ３２に格納されている空きキャッシュセグメント３２５を管理するためのキューである。ＤＲＡＭフリーキュー３００は、ＤＲＡＭ３４の空きキャッシュセグメント３４３を管理するためのキューである。ＳＣＭフリーキュー２００及びＤＲＡＭフリーキュー３００は、それぞれ空きキャッシュセグメントのＳＧＣＴ１２０をポインタで接続したリンクリストである。ＳＣＭフリーキュー２００と、ＤＲＡＭフリーキュー３００とは、管理するＳＧＣＴ１２０が異なるだけであり、構成は同一である。
【００７８】
ＳＣＭフリーキュー２００（ＤＲＡＭフリーキュー３００）のフリーキューポインタ２０１(３０１）は、キューの先頭のＳＧＣＴ１２０を指す。ＳＧＣＴ１２０のＳＧＣＴポインタ１２０ａは、次の空きキャッシュセグメントのＳＧＣＴ１２０を指す。
【００７９】
次に、ストレージシステム２０の処理動作について説明する。
【００８０】
ストレージシステム２０は、ユーザデータを圧縮して最終ストレージデバイス（４０、４１）に格納する動作が可能である。ここで、ストレージシステム２０がユーザデータを圧縮して格納するように設定された状態を圧縮モードと呼び、このように設定されていない状態を通常モードと呼ぶ。
【００８１】
ストレージシステム２０は、圧縮モードでは、ライトコマンドに応じてホスト計算機１０から受領したユーザデータを、可逆圧縮アルゴリズムを用いて加工することによって、ユーザデータのサイズを小さくして、最終ストレージデバイスに保存する。また、ストレージシステム２０は、リードコマンドに応じて、最終ストレージデバイスの圧縮されているユーザデータ（圧縮ユーザデータ）を伸張（復元加工）し、元のユーザデータに戻して、ホスト計算機１０に送信する。
【００８２】
この圧縮モードでは、最終ストレージデバイスの記憶領域の消費量を削減できるため、より多くのユーザデータを格納することができる。ただし、ＣＰＵ３３がユーザデータの圧縮や伸張を行うため、一般に処理性能が通常モードよりも低下する。
【００８３】
ストレージシステム２０の動作モードの切り替え（例えば、圧縮モードから通常モードへの切り替え、又は通常モードから圧縮モードへの切り替え）は、ホスト計算機１０からのモード設定コマンド、またはストレージシステム２０の管理用Ｉ／Ｆ（図示せず）を通じた管理コマンドで行うことができる。ストレージコントローラ３０のＣＰＵ３３は、これらのコマンドに応じてストレージシステム２０の動作モードを切り替える。また、ＣＰＵ３３は、モード設定状態（圧縮モード又は通常モードのいずれであるか）を管理する。
【００８４】
次に、圧縮モードでの論理アドレスについて説明する。
【００８５】
図１２は、一実施形態に係る圧縮モードでの論理アドレスの対応関係を示す図である。
【００８６】
圧縮モードでは、ホスト計算機１０がライトコマンドで入力したユーザデータを、ストレージシステム２０は、ストレージシステム２０内で圧縮して保存する一方、ホスト計算機１０がリードコマンドで要求したユーザデータを、ストレージシステム２０は、ストレージシステム２０内で伸張して出力する。そのため、ホスト計算機１０が意識する論理ボリュームは、圧縮せずにユーザデータを保存する通常モードと同じである。圧縮モードでは、この論理ボリュームを平文論理ボリューム２０００と呼ぶ。これに対して、ストレージシステム２０が圧縮ユーザデータを最終ストレージデバイス（４０、４１）に保存する際に意識する論理的なデータ領域を、圧縮論理ボリューム２１００と呼ぶ。
【００８７】
ストレージシステム２０では、ＣＰＵ３３は、平文論理ボリューム２０００のユーザデータを所定の管理単位（例えば、８ＫＢ）に分割し、それぞれの管理単位を圧縮して個別に保存する。圧縮論理ボリューム２１００に圧縮されたユーザデータが保存されると、両論理ボリュームのデータ格納空間のアドレス間の対応関係を示すアドレスマップが形成される。すなわち、ホスト計算機１０が平文論理ボリューム２０００のアドレスＸにユーザデータをライトし、それを圧縮したものが圧縮論理ボリューム２１００のアドレスＹに保存された場合、ＸとＹとの間のアドレスマップが形成される。
【００８８】
ユーザデータを圧縮すると、そのデータ内容に応じて圧縮後のデータ長は変化する。例えば、同じ文字が多く含まれるとデータ長は小さくなり、乱数的パターンが多く含まれるとデータ長は大きくなる。そのため、アドレスマップにおけるアドレスＹの情報は、保存先の先頭位置だけでなく、その位置からの有効データ長も含む。
【００８９】
図１２においては、ホスト計算機１０が平文論理ボリューム２０００のアドレス０ｘ２７１９１０にライトした８ＫＢのユーザデータ部分２０１０は、圧縮されて４ＫＢにサイズが縮小され、圧縮論理ボリューム２１００のアドレス０ｘ２９Ｄ１３１から４ＫＢの範囲２１１０に保存され、また、ホスト計算機１０が平文論理ボリューム２０００のアドレス０ｘ３Ｃ２５３０にライトした８ＫＢのユーザデータ部分２０２０は、圧縮されて３ＫＢにサイズが縮小され、圧縮論理ボリューム２１００のアドレス０ｘ１５Ａ０１２から３ＫＢの範囲２１２０に保存されていることを示している。
【００９０】
ユーザデータを圧縮して保存する場合、できるだけ隙間なくデータを敷き詰めるほうが最終ストレージデバイスの記憶領域の消費量を減らすことができる。そのため、圧縮したユーザデータの保存先は、ホスト計算機１０からライトする順番や、圧縮後サイズと空き領域サイズの大小関係とによってダイナミックに変化する。つまり、アドレスマップもユーザデータのライトによってダイナミックに変化する。
【００９１】
図１２に示す例においては、平文論理ボリュームアドレス空間２０３０と圧縮論理ボリュームアドレス空間２１３０の間では、アドレスマップ２２１０、２２２０が形成される。例えば、アドレスマップ２２１０は、圧縮論理ボリューム２１００の範囲２１１０のアドレス（０ｘ２９Ｄ１３１）と、有効データ長（４ＫＢ）とを含み、アドレスマップ２２２０は、圧縮論理ボリューム２１００の範囲２１２０のアドレス（０ｘ１５Ａ０１２）と、有効データ長（３ＫＢ）とを含む。
【００９２】
これらのアドレスマップは、ユーザデータの保存先を管理するため、ユーザデータを分割した管理単位（ここでは８ＫＢ）ごとに必要な少量の補助データであり、本実施形態では、管理データと呼ぶ。管理データもユーザデータと同様に最終ストレージデバイス（４０、４１）で保存される。
【００９３】
なお、ＳＣＭ３２またはＤＲＡＭ３４のキャッシュメモリ領域では、圧縮された状態のユーザデータがキャッシュされる。したがって、キャッシュ領域でセグメントの割り当てを管理する際の論理アドレスは、圧縮論理ボリューム上のアドレスとなる。また、管理データもＳＣＭ３２またはＤＲＡＭ３４のキャッシュメモリ領域にキャッシュされる。
【００９４】
次に、管理データのデータ構造及びアドレスマップ情報の変更処理について説明する。
【００９５】
図１３は、一実施形態に係る圧縮モードでの管理データ構造を示す図である。
【００９６】
管理データは、平文論理ボリュームと圧縮論理ボリュームとの間のアドレスマップ情報を意味する。本実施形態では、アドレスマップ情報２２１０（２２１０ａ、２２１０ｂ等）は、１単位のサイズが例えば、１６Ｂである。各ＡＭＴＢ（Address  Map  Table  Block）２４００（２４００ａ、２４００ｂ等）は、アドレスマップ情報２２１０を複数管理するブロックであり、そのサイズは、例えば、５１２Ｂであり、アドレスマップ情報２２１０を３２個格納することができる。ＡＭＴＢ２４００におけるアドレスマップ情報２２１０の格納順は平文論理ボリュームのアドレス順と同じである。１つのアドレスマップ情報が８ＫＢのユーザデータに対応するので、１つのＡＭＴＢ２４００によって論理アドレスが連続している２５６ＫＢのユーザデータ（つまり、スロット１つに相当）を管理できる。
【００９７】
各ＡＭＴＤ（Address  Map  Table  Directory）２３００は、ＡＭＴＢ２４００のアドレス（ＡＭＴＢアドレス）２３１０を管理するブロックであり、そのサイズは、例えば、５１２Ｂであり、１つのサイズが８ＢのＡＭＴＢアドレス２３１０を６４個格納することができる。である。ＡＭＴＤ２３００におけるＡＭＴＢアドレス２３１０の格納順は平文論理ボリュームのスロットＩＤ順と同じである。１つのＡＭＴＢ２４００が２５６ＫＢのユーザデータに対応するので、１つのＡＭＴＤ２３００によって論理アドレスが連続している１６ＭＢのユーザデータを管理できる。
【００９８】
アドレスマップ情報の変更は、圧縮モードに設定されている場合に、後述するライトコマンド処理（図２１参照）の際に実施される。
【００９９】
ＣＰＵ３３は、アドレスマップ情報２２１０ａの内容を変更する場合、新しいＡＭＴＢ２４００ｂを作成し、アドレスマップ情報２２１０ｂを書き込む。次に、ＣＰＵ３３は、アドレスマップ情報２２１０ａを含むＡＭＴＢ２４００ａ内の、変更しないその他のアドレスマップ情報をＡＭＴＢ２４００ｂの残り部分に複写する。そして、ＣＰＵ３３は、ＡＭＴＤ２３００内で、ＡＭＴＢ２４００aを指示していたＡＭＴＢアドレス２３１０を、ＡＭＴＢ２４００ｂを指示するように書き換える。
【０１００】
ここで、ＡＭＴＢ２４００ａ内のアドレスマップ情報を変更する際に、直接２２１０aを上書きせずに、別の新しいＡＭＴＢ２４００ｂを作ってアドレスマップ情報を格納する理由について以下に説明する。
【０１０１】
前述のように、管理データはキャッシュメモリ領域にキャッシュされる。アドレスマップ情報の変更に伴って次々と作成されるＡＭＴＢ２４００は、ダーティブロック（横縞部）としてキャッシュセグメント２６００に追記的に格納される。また、ＡＭＴＢアドレスが変更されたＡＭＴＤ２３００も、キャッシュセグメント２５００のダーティブロック（横縞部）となる。この結果、キャッシュメモリ領域において、ダーティブロックが局所的なキャッシュセグメント内に集まりやすくなる。一般に、キャッシュメモリ管理においては、ダーティブロックが局所化しているほうが、デステージするときにストレージコントローラ３０と最終ストレージデバイス（４０、４１）との間のデータ転送処理の回数を減らすことができる。もし、ＡＭＴＢ２４００を上書きする方法を実行するようにすると、ユーザデータのライトがランダムな論理アドレスに対して要求された場合、ＡＭＴＢ２４００のダーティブロックがたくさんのキャッシュセグメント上に散在してしまい、デステージするときにストレージコントローラ３０と最終ストレージデバイス（４０、４１）との間のデータ転送処理の回数が多くなり、ＣＰＵ３３の処理負荷が多くなってしまう。
【０１０２】
次に、本実施例に係る情報システム１Ｂにおける処理動作について説明する。
【０１０３】
図１４は、一実施形態に係るリードコマンド処理のフローチャートである。
【０１０４】
リードコマンド処理は、ストレージシステム２０がホスト計算機１０からリードコマンドを受信した際に実行される処理である。
【０１０５】
ＣＰＵ３３は、ホスト計算機１０からリードコマンドを受信すると、圧縮モードに設定されているか否かを判定し（Ｓ１００）、圧縮モードに設定されていない場合（Ｓ１００：ＮＯ）には、ＣＰＵ３３は処理をステップＳ１０３に進める。
【０１０６】
一方、圧縮モードに設定されている場合（Ｓ１００：ＹＥＳ）には、ＣＰＵ３３は、管理データアクセス処理（図２３参照）によりＡＭＴＤ２３００の参照を実行する（Ｓ１０１）。具体的には、ＣＰＵ３３は、リードコマンドで指定されている、平文論理ボリューム上のアドレスＸから、それに対応するＡＭＴＤ２３００の管理データの保存先アドレスを特定し、ＡＭＴＤ２３００から管理データを取得する。
【０１０７】
次いで、ＣＵＰ３３は、管理データアクセス処理（図２３参照）によりＡＭＴＢ２４００の参照を実行し（Ｓ１０２）、処理をステップＳ１０３に進める。具体的には、ＣＰＵ３３は、ＡＭＴＤ２３００から取得した管理データからＡＭＴＢ２４００の管理データの保存先アドレスを特定し、ＡＭＴＢ２４００から管理データを取得する（ステップＳ１０２）。
【０１０８】
ステップＳ１０３では、ＣＰＵ３３は、圧縮モードに設定されていない場合には、リードコマンドから論理ボリューム上のアドレスＹを特定する一方、圧縮モードに設定されている場合には、取得したＡＭＴＢ２３００の管理データから圧縮論理ボリューム上のアドレスＹ（先頭位置とデータ長）を特定し、特定したアドレスＹに対してユーザデータリード処理（図１５参照）を行う（ステップＳ１０３）。
【０１０９】
次に、ユーザデータリード処理（図１４のステップＳ１０３）について説明する。
【０１１０】
図１５は、一実施形態に係るユーザデータリード処理のフローチャートである。
【０１１１】
まず、ストレージコントローラ３０のＣＰＵ３３は、リード対象のユーザデータの論理ボリュームの論理ブロックアドレス（以下、リードアドレス）に対応するキャッシュセグメントが割り当て済みであるか否かを判定する（ステップＳ１）。具体的には、ＣＰＵ３３は、論理ブロックアドレスをスロットＩＤとスロット内相対アドレスとの組に変換し、変換により得られたスロットＩＤがスロットＩＤ１１０ｄに格納されているＳＬＣＴ１１０のＳＧＣＴポインタ１１０ｆを参照する。ＳＧＣＴポインタ１１０ｆが無効（たとえばＮＵＬＬ）値である場合には、ＣＰＵ３３は、キャッシュセグメントが未割り当てであると判定する。一方、ＳＧＣＴポインタ１１０ｆに有効な値が含まれている場合、少なくともキャッシュセグメントが１つ割り当てられていることが判明するので、ＣＰＵ３３は、ＳＧＣＴポインタ１１０ｆのポインタをたどって、スロット内相対アドレスで特定されるスロット内の位置にキャッシュセグメントが割り当てられているか否かを確認する。具体的には、「スロット内相対アドレス÷１２８」で得られた結果（整数値）と同一のセグメントＩＤが格納されているセグメントＩＤ１２０ｂを有するＳＧＣＴ１２０があるか否かを確認することで、リードアドレスにキャッシュセグメントが割り当てられているか否かを判定することができる。ここで、スロット内相対アドレス÷１２８の計算を行うことで、０〜３のいずれかの整数値が得られるので、スロット内相対アドレスが、０〜３のいずれのセグメントＩＤが付与されたキャッシュセグメントに対応するアドレスであるかを知ることができる。
【０１１２】
この結果、キャッシュセグメントが割り当て済みであれば（ステップＳ１：ＹＥＳ）、ＣＰＵ３３は、ステップＳ３へ処理を進める一方、キャッシュセグメントが未割り当てであれば（ステップＳ１：ＮＯ）、ＣＰＵ３３は、セグメント割当処理（図１６参照）を実行し（ステップＳ２）、ステップＳ３へ処理を進める。セグメント割当処理では、キャッシュされるデータの種類に応じて、ＳＣＭ３２のキャッシュセグメント、またはＤＲＡＭ３４のキャッシュセグメントのいずれかのキャッシュセグメントが割り当てられる。
【０１１３】
ステップＳ３では、ＣＰＵ３３は、リードアドレスに対応するキャッシュセグメントを含むスロットをロックする。ここで、ロックとは、ＣＰＵ３３の他のプロセスがこのスロットの状態を変更しないように排他することである。具体的には、ＣＰＵ３３は、このキャッシュセグメントを含むスロットに対応するＳＬＣＴ１１０のスロットステータス１１０ｅに格納されている「ロック中」を表すビットをＯＮ（例えば、１）にすることで、このスロットがロックされていることを表すようにする。
【０１１４】
続いて、ＣＰＵ３３は、リード対象のユーザデータがキャッシュセグメントに格納されているか否か、すなわち、キャッシュヒットか否かを判定する（ステップＳ４）。具体的には、ＣＰＵ３３は、リード対象のキャッシュセグメントに対応するＳＧＣＴ１２０のステージングビットマップ１２０ｅ及びダーティビットマップ１２０ｆを調べ、リード対象の全ブロックに関して、各ブロックに対応するステージングビットマップ１２０ｅのビット又はダーティビットマップ１２０ｆのビットのいずれかがＯＮ（例えば、１）であれば、キャッシュヒットであると判定する。一方、ＣＰＵ３３は、リード対象の範囲内に、ダーティビットマップ１２０ｆとステージングビットマップ１２０ｅとに対応するビットがいずれもＯＦＦ（例えば、０）であるブロックが１つでもある場合は、キャッシュミスであると判定する。
【０１１５】
この結果、キャッシュヒットの場合（ステップＳ４：ＹＥＳ）は、ＣＰＵ３３は、処理をステップＳ６へ進める一方、キャッシュミスの場合（ステップＳ４：ＮＯ）は、ステージング処理（図１９参照）を実行し（ステップＳ５）、処理をステップＳ６に進める。ステージング処理では、ドライブ（ＨＤＤ４０、またはＳＳＤ４１）からキャッシュセグメント（３２５又は３４３）へデータが読み込まれる。ステージング処理が完了すると、リード対象のデータがキャッシュセグメント（３２５又は３４３）に格納された状態になる。
【０１１６】
ステップＳ６では、ＣＰＵ３３は、キャッシュセグメントに格納されたデータをホスト計算機１０に送信するデータ送信処理（図２０参照）を実行する。
【０１１７】
続いて、ＣＰＵ３３は、完了ステータスをホスト計算機１０に送信する（ステップＳ７）。具体的には、ＣＰＵ３３は、エラーが発生してリード処理が正常に完了しなかった場合は、エラーステータス（例えばCHECK  CONDITION）を返す一方、リード処理が正常に完了した場合は正常ステータス（GOOD）を返す。
【０１１８】
この後、ＣＰＵ３３は、ロックしているスロットを解放（アンロック）し、すなわち、ＳＬＣＴ１１０のスロットステータス１１０ｅに格納されている「ロック中」を表すビットをＯＦＦにし（ステップＳ８）、スロットの状態を変更可能な状態にし、ユーザデータリード処理を終了する。
【０１１９】
次に、セグメント割当処理（図１５のステップＳ２）について説明する。なお、セグメント割当処理は、後述する図２２のステップＳ６２、図２３のステップＳ８２、図２４のステップＳ１１２の処理にも対応する。
【０１２０】
図１６は、一実施形態に係るセグメント割当処理のフローチャートである。
【０１２１】
セグメント割当処理では、ＣＰＵ３３がキャッシュするデータに対して、このデータの種類（データの特性ともいえる）に応じて、ＳＣＭ３２のキャッシュセグメント（ＳＣＭセグメントともいう）３２５、またはＤＲＡＭ３４のキャッシュセグメント（ＤＲＡＭセグメントともいう）３４３を割り当てる。
【０１２２】
ここで、データに割り当てるキャッシュセグメントのメモリ種類、すなわち、ＳＣＭ３２またはＤＲＡＭ３４を選択する際の判断基準の一例について説明する。ＳＣＭ３２は、アクセス性能がＤＲＡＭ３４に比べて低いが、コストがＤＲＡＭ３４に比べて安いという特性を有しているので、本実施形態では、ＤＲＡＭ３４の特性に適合しているデータ（高性能を要求されるデータ）は、ＤＲＡＭ３４を用いたキャッシュセグメントを選択し、ＳＣＭの特性に適合するデータ（高性能を要求されないデータ、例えば、キャッシュしたい量が多いデータ）は、ＳＣＭ３２を用いたキャッシュセグメントを選択する制御を行う。具体的には、次のような基準で割り当てるキャッシュセグメントのメモリ種類を選択する。
【０１２３】
（ａ）キャッシュ対象が、高スループットが求められるユーザデータの場合は、ＣＰＵ３３は、ＤＲＡＭ３４を優先的に選択する。このようなデータをＳＣＭ３２のキャッシュセグメントに格納するようにすると、ストレージシステム２０の性能を低下させてしまう。したがって、ユーザデータに対しては、ＤＲＡＭ３４を優先的に選択した方がよい。ここで、ＤＲＡＭ３４を優先的に選択するとは、例えば、ＤＲＡＭ３４にキャッシュセグメントを確保できる場合には、ＤＲＡＭ３４を割当先に選択することである。
【０１２４】
（ｂ）キャッシュ対象が、アクセス単位が小さいデータである場合には、ＣＰＵ３３は、ＳＣＭ３２を優先的に選択する。例えば、管理データは、通常１つが８Ｂや１６Ｂ程度のサイズであり、ユーザデータと比較すると要求されるスループットが低いため、低コストのＳＣＭ３２にキャッシュした方がよい。なぜなら、ＳＣＭ３２は、同じコストでＤＲＡＭ３４よりも大容量のキャッシュセグメントを用意できるので、キャッシュできる管理データのデータ量が増え、ドライブ（４０、４１）上の管理データの読み出しの頻度が減って、ストレージシステム２０の応答性能が向上する効果があるからである。
【０１２５】
（ｃ）上記以外のデータがキャッシュ対象の場合は、ＣＰＵ３３は、ＤＲＡＭ３４を優先的に選択する。
【０１２６】
まず、ＣＰＵ３３は、アクセス対象のデータ（アクセス対象データ）がユーザデータか否かを判定する（ステップＳ３１）。この判定の結果が真であれば（ステップＳ３１：ＹＥＳ）、ＣＰＵ３３は処理をステップＳ３４に進める一方、偽であれば（ステップＳ３１：ＮＯ）、処理をステップＳ３２に進める。
【０１２７】
ステップＳ３２では、ＣＰＵ３３は、アクセス対象データが管理データか否かを判定する。この判定の結果が真であれば（ステップＳ３２：ＹＥＳ）、ＣＰＵ３３は、処理をステップＳ３３に進める一方、偽であれば（ステップＳ３２：ＮＯ）は、ＣＰＵ３３は、処理をステップＳ３４に進める。
【０１２８】
ステップＳ３３では、ＣＰＵ３３は、ＳＣＭ３２のキャッシュセグメント３２５を優先して割り当てるＳＣＭ優先セグメント割当処理（図１７参照）を実行し、セグメント割当処理を終了する。
【０１２９】
ステップＳ３４では、ＣＰＵ３３は、ＤＲＡＭ３４のキャッシュセグメント３４３を優先して割り当てるＤＲＡＭ優先セグメント割当処理（図１８参照）を実行し、セグメント割当処理を終了する。
【０１３０】
セグメント割当処理が完了すると、アクセス対象データに対して、ＳＣＭ３２またはＤＲＡＭ３４のいずれか一方のキャッシュセグメントが割り当てられることとなる。
【０１３１】
次に、ＳＣＭ優先セグメント割当処理（図１６のステップＳ３３）について説明する。
【０１３２】
図１７は、一実施形態に係るＳＣＭ優先セグメント割当処理のフローチャートである。
【０１３３】
まず、ＣＰＵ３３は、使用可能なＳＣＭ３２のキャッシュセグメント３２５があるか否かを判定する（ステップＳ４１）。ここで、使用可能なＳＣＭ３２のキャッシュセグメント３２５とは、フリーもしくは、クリーンかつロックされていないキャッシュセグメント３２５のことである。なお、使用可能なＳＣＭ３２のキャッシュセグメント３２５があるか否かは、ＳＣＭフリーキュー２００や、ＳＧＣＴ１２０を参照することにより判定することができる。
【０１３４】
この判定結果が真の場合（ステップＳ４１：ＹＥＳ）は、ＣＰＵ３３は、処理をステップ４２に進める一方、偽の場合（ステップＳ４１：ＮＯ）は、処理をステップＳ４３に進める。
【０１３５】
ステップＳ４２では、ＣＰＵ３３は、ＳＣＭ３２のキャッシュセグメントの割り当て（ＳＣＭセグメント割当）を行う。ここで、クリーンなキャッシュセグメント３２５を割り当てる場合は、ＣＰＵ３３は、このキャッシュセグメント３２５をＳＣＭフリーキュー２００およびキャッシュディレクトリ１００から切り離してフリーセグメントにしたうえで割り当てを行う。
【０１３６】
ＳＣＭセグメント割り当てでは、まず、ＣＰＵ３３は、ＳＧＣＴ１２０のセグメントＩＤ１２０ｂ及びメモリ種類１２０ｃに、確保したキャッシュセグメントに対応するセグメントＩＤ及びメモリ種類（ここでは、ＳＣＭ）を設定する。次いで、ＣＰＵ３３は、このキャッシュセグメント３２５を含むスロットに対応するＳＬＣＴ１１０のＳＧＣＴポインタ１１０ｆにこのキャッシュセグメントのＳＧＣＴ１２０へのポインタを設定する。もし、対応するＳＬＣＴ１１０がキャッシュディレクトリ１００に接続されていない場合は、ＣＰＵ３３は、まずＳＬＣＴ１１０の内容を設定したうえ、このＳＬＣＴ１１０をキャッシュディレクトリ１００に接続して、その後、ＳＬＣＴ１１０へＳＧＣＴ１２０を接続する。また、もし、確保したキャッシュセグメント３２５に対応するＳＧＣＴ１２０以外のＳＧＣＴ１２０が既にＳＬＣＴ１１０に接続されている場合は、ＣＰＵ３３は、そのＳＬＣＴ１１０に接続されている終端のＳＧＣＴ１２０に、確保したキャッシュセグメント３２５のＳＧＣＴ１２０を接続する。なお、ＳＣＭセグメント割り当ての終了後には、ＳＣＭ優先セグメント割当処理を終了する。
【０１３７】
ステップＳ４３では、ＣＰＵ３３は、使用可能なＤＲＡＭ３４のキャッシュセグメント３４３があるか否かを判定する。この判定結果が真の場合（ステップＳ４３：ＹＥＳ）は、ＣＰＵ３３は、処理をステップＳ４５へ進める一方、偽の場合（ステップＳ４３：ＮＯ）は、いずれかのキャッシュセグメント３２５，３４３が使用可能になるまで待って（ステップＳ４４）、処理をステップＳ４１に進める。
【０１３８】
ステップＳ４５では、ＣＰＵ３３は、ＤＲＡＭ３４のキャッシュセグメントの割り当て（ＤＲＡＭセグメント割当）を行う。ＤＲＡＭセグメント割当は、ステップＳ４２のＳＣＭセグメント割当において、ＳＣＭ３２のキャッシュセグメント３２５を割り当てていたものを、ＤＲＡＭ３４のキャッシュセグメント３４３を割り当てるように代えたものである。ＤＲＡＭセグメント割当の終了後には、ＳＣＭ優先セグメント割当処理を終了する。
【０１３９】
このＳＣＭ優先セグメント割り当て処理では、ＳＣＭ３２のキャッシュセグメント３２５が優先して割り当てられることとなる。
【０１４０】
次に、ＤＲＡＭ優先セグメント割当処理（図１６のステップＳ３４）について説明する。
【０１４１】
図１８は、一実施形態に係るＤＲＡＭ優先セグメント割当処理のフローチャートである。
【０１４２】
ＤＲＡＭ優先セグメント割当処理は、図１７に示すＳＣＭ優先セグメント割当処理におけるＳＣＭ３２のキャッシュセグメント３２５と、ＤＲＡＭ３４のキャッシュセグメント３４３とを入れ替えた処理であるので、ここでは、簡単に説明を行う。
【０１４３】
まず、ＣＰＵ３３は、使用可能なＤＲＡＭ３４のキャッシュセグメント３４３があるか否かを判定する（ステップＳ５１）。この判定結果が真の場合（ステップＳ５１：ＹＥＳ）は、ＣＰＵ３３は処理をステップＳ５２に進める一方、偽の場合（ステップＳ５１：ＮＯ）は、処理をステップＳ５３に進める。
【０１４４】
ステップＳ５２では、ＣＰＵ３３は、ＤＲＡＭセグメント割当を行う。このＤＲＡＭセグメント割当ては、図１７のステップＳ４５と同様な処理である。ＤＲＡＭセグメント割当の終了後には、ＤＲＡＭ優先セグメント割当処理を終了する。
【０１４５】
ステップＳ５３では、ＣＰＵ３３は、使用可能なＳＣＭセグメント３２５があるか否かを判定する。この判定結果が真の場合（ステップＳ５３：ＹＥＳ）は、ＣＰＵ３３は、処理をステップＳ５５に進める一方、偽の場合（ステップＳ５３：ＮＯ）は、いずれかのキャッシュセグメント３２５，３４３が使用可能になるまで待って（ステップＳ５４）、処理をステップＳ５１に進める。
【０１４６】
ステップＳ５５では、ＣＰＵ３３は、ＳＣＭセグメント割当を行う。このＳＣＭセグメント割当は、図１７のステップＳ４２と同様な処理である。ＳＣＭセグメント割当の終了後には、ＤＲＡＭ優先セグメント割当処理を終了する。
【０１４７】
このＤＲＡＭ優先セグメント割当処理では、ＤＲＡＭセグメント３４３が優先して割り当てられることとなる。
【０１４８】
次に、ステージング処理（図１５のステップＳ５）について説明する。
【０１４９】
図１９は、一実施形態に係るステージング処理のフローチャートである。
【０１５０】
まず、ＣＰＵ３３は、リードアドレスに対応するキャッシュセグメントのメモリの種類を調べ、キャッシュセグメントがＤＲＡＭセグメント３４３であるか否かを判定する（ステップＳ１１）。ここで、キャッシュセグメントの基になっているメモリの種類は、対応するＳＧＣＴ１２０のメモリ種類１２０ｃを参照することにより特定することができる。
【０１５１】
この結果、キャッシュセグメントがＤＲＡＭセグメント３４３であれば（ステップＳ１１：ＹＥＳ）、ＣＰＵ３３は、処理をステップＳ１２に進める一方、キャッシュセグメントがＤＲＡＭセグメント３４３でなければ（ステップＳ１１：ＮＯ）、ＣＰＵ３３は、処理をステップＳ１３に進める。
【０１５２】
ステップＳ１２では、ＣＰＵ３３は、リード対象（ステージング対象）のデータをドライブ（ＨＤＤ４０またはＳＳＤ４１）から読み出して、ＤＲＡＭセグメント３４３に格納し、ステージング処理を終了する。
【０１５３】
ステップＳ１３では、ＣＰＵ３３は、リード対象（ステージング対象）のデータをドライブ（ＨＤＤ４０またはＳＳＤ４１）から読み出して、ＳＣＭセグメント３２５に格納し、ステージング処理を終了する。
【０１５４】
このステージング処理によると、リード対象のデータを、割り当てられているキャッシュセグメントに対して適切に読み出すことができる。
【０１５５】
次に、データ送信処理（図１５のステップＳ６）について説明する。
【０１５６】
図２０は、一実施形態に係るデータ送信処理のフローチャートである。
【０１５７】
まず、ＣＰＵ３３は、リードアドレスに対応するキャッシュセグメントの基になっているメモリ（キャッシュメモリ）の種類を調べ、キャッシュセグメントがＤＲＡＭセグメント３４３であるか否かを判定する（ステップＳ２１）。ここで、キャッシュセグメントの基になっているメモリの種類は、キャッシュセグメントに対応するＳＧＣＴ１２０のメモリ種類１２０ｃを参照することにより特定することができる。
【０１５８】
この結果、キャッシュセグメントがＤＲＡＭセグメント３４３であれば（ステップＳ２１：ＹＥＳ）、ＣＰＵ３３は、処理をステップＳ２２に進める一方、キャッシュセグメントがＤＲＡＭセグメント３４３でなければ（ステップＳ２１：ＮＯ）、処理をステップＳ２３に進める。
【０１５９】
ステップＳ２２では、ＣＰＵ３３は、リード対象（送信対象）のデータをＤＲＡＭセグメント３４３からユーザデータバッファ３４２へ転送し、処理をステップＳ２４に進める。
【０１６０】
ステップＳ２３では、ＣＰＵ３３は、リード対象（送信対象）のデータをＳＣＭセグメント３２５からユーザデータバッファ３４２へ転送し、処理をステップＳ２４に進める。
【０１６１】
ステップＳ２４では、ＣＰＵ３３は、ストレージシステム２０が圧縮モードに設定されているかを調べ、圧縮モードであれば（ステップＳ２４：ＹＥＳ）、ＣＰＵ３３は、処理をステップＳ２５に進める一方、圧縮モードに設定されていなければ（ステップＳ２４：ＮＯ）、処理をステップＳ２６に進める。
【０１６２】
ステップＳ２５では、ＣＰＵ３３は、圧縮されたユーザデータをユーザデータバッファ３４２上で伸張し、圧縮前（元のサイズ）のユーザデータへと復元する。その後、処理をステップＳ２６に進める。
【０１６３】
ステップＳ２６では、ＣＰＵ３３は、ユーザデータバッファ３４２上のユーザデータをホスト計算機１０へ転送し、データ送信処理を終了する。
【０１６４】
このデータ送信処理によると、リード対象のユーザデータを適切にホスト計算機１０に送信することができる。
【０１６５】
次に、ライトデータコマンド処理について説明する。
【０１６６】
図２１は、一実施形態に係るライトコマンド処理のフローチャートである。
【０１６７】
ライトコマンド処理は、ストレージシステム２０がホスト計算機１０からライトコマンドを受信した際に実行される処理である。
【０１６８】
ＣＰＵ３３は、ホスト計算機１０からライトコマンドを受信すると、ＣＰＵ３３は、圧縮論理ボリューム上の空きアドレスＹを選択し、そのアドレスへライトコマンドに対応するライト対象のデータ（ライトデータ）を書き込むためのユーザデータライト処理（図２２参照）を行う（ステップＳ１０４）。
【０１６９】
次いで、ＣＰＵ３３は、ストレージシステム２０が圧縮モードに設定されているか否かを判定し（Ｓ１０５）、圧縮モードに設定されていない場合（Ｓ１０５：ＮＯ）には、ライトコマンド処理を終了する一方、圧縮モードに設定されている場合（Ｓ１０５：ＹＥＳ）には、処理をステップＳ１０６に進める。
【０１７０】
ステップＳ１０６では、ＣＰＵ３３は、管理データアクセス処理（図２３参照）によりＡＭＴＤ２３００の参照を実行する（Ｓ１０６）。具体的には、ＣＰＵ３３は、リードコマンドで指定されている、平文論理ボリューム上のアドレスＸから、それに対応するＡＭＴＤ２３００の管理データの保存先アドレスを特定し、ＡＭＴＤ２３００から管理データを取得する。
【０１７１】
次いで、ＣＰＵ３３は、管理データアクセス処理（図２３参照）によりＡＭＴＢ２４００の参照を実行し（Ｓ１０７）、処理をステップＳ１０８に進める。具体的には、ＣＰＵ３３は、ＡＭＴＤ２３００から取得した管理データからＡＭＴＢ２４００の管理データの保存先アドレスを特定し、ＡＭＴＢ２４００から管理データを取得する。
【０１７２】
ステップＳ１０８では、ＣＰＵ３３は、管理データアクセス処理（図２３参照）によりＡＭＴＢ２４００の更新を実行する。具体的には、ＣＰＵ３３は、ＡＭＴＢ２４００の管理データを、アドレスＸをアドレスＹに新たに対応付ける情報（例えば、先頭位置及びデータ長）に変更する。
【０１７３】
次いで、ＣＰＵ３３は、管理データアクセス処理（図２３参照）によりＡＭＴＤ２３００の更新を実行し（Ｓ１０９）、処理を終了する。具体的には、ＣＰＵ３３は、ＡＭＴＤ２３００の管理データを、ステップＳ１０８で更新されたＡＭＴＢ２４００の管理データの管理データの保存先アドレスを示す情報へ変更し、処理を終了する。
【０１７４】
このライトデータコマンド処理によると、ライトデータを適切に格納することができ、圧縮モードである場合には、ライトデータに対応する管理データを適切に更新することができる。
【０１７５】
次に、ユーザデータライト処理（図２１のステップＳ１０４）について説明する。
【０１７６】
図２２は、一実施形態に係るユーザデータライト処理のフローチャートである。
【０１７７】
ストレージコントローラ３０のＣＰＵ３３は、ユーザデータをライトする、論理ボリュームの論理ブロックアドレス(以下、ライトアドレス)に対応するキャッシュセグメントが割り当て済みであるか否かを判定する（ステップＳ６１）。この処理は、ユーザデータリード処理における処理ステップ（図１５のＳ１）と同様であるので詳細な説明は省略する。
【０１７８】
この結果、キャッシュセグメントが割り当て済みであれば（ステップＳ６１：ＹＥＳ）、ステップＳ６３へ処理を進める一方、キャッシュセグメントが未割り当てであれば（ステップＳ６１：ＮＯ）、セグメント割当処理（図１６参照）を実行し（ステップＳ６２）、ステップＳ６３へ処理を進める。セグメント割当処理では、ライトアドレスに対して、ＤＲＡＭ３４またはＳＣＭ３２からキャッシュセグメントが割り当てられる。なお、ライトされたデータを二重化することで信頼性を確保するために、キャッシュセグメントを２つ割り当てるようにしてもよい。
【０１７９】
ステップＳ６３では、ＣＰＵ３３は、ライトアドレスに対応するキャッシュセグメントを含むスロットをロックする。具体的には、ＣＰＵ３３は、このキャッシュセグメントを含むスロットのＳＬＣＴ１１０のスロットステータス１１０ｅの「ロック中」を表すビットをＯＮにすることで、このスロットがロックされていることを表すようにする。
【０１８０】
続いて、ＣＰＵ３３は、ホスト計算機１０に対し、例えば、XFER_RDYを送信することで、データ受領準備ができたことを通知する（ステップＳ６４）。これに応じてホスト計算機１０はユーザデータを送信することとなる。
【０１８１】
次いで、ＣＰＵ３３は、ホスト計算機１０から送信されるユーザデータを受信して、ユーザデータバッファ３４２に受領する（ステップＳ６５）。
【０１８２】
続いて、ＣＰＵ３３は、ストレージシステム２０が圧縮モードに設定されているか否かを判定し（ステップＳ６６）、圧縮モードに設定されていれば（ステップＳ６６：ＹＥＳ）、処理をステップＳ６７に進める一方、圧縮モードに設定されていなければ（ステップＳ６６：ＮＯ）、処理をステップＳ６８に進める。
【０１８３】
ステップＳ６７では、ＣＰＵ３３は、ユーザデータをユーザデータバッファ３４２上で圧縮し、圧縮された（元のサイズ以下の）ユーザデータへと変換し、処理をステップＳ６８に進める。
【０１８４】
ステップＳ６８では、ＣＰＵ３３は、割り当てられているキャッシュセグメントがＤＲＡＭセグメント３４３であるか否かを判定する。この結果、割り当てられているキャッシュセグメントがＤＲＡＭセグメント３４３であれば（ステップＳ６８：ＹＥＳ）、ＣＰＵ３３は、ユーザデータをＤＲＡＭセグメント３４３に書き込み（ステップＳ６９）、処理をステップＳ７１に進める。一方、割り当てたキャッシュセグメントがＳＣＭセグメント３２５であれば（ステップＳ６８：ＮＯ）、ＣＰＵ３３は、ユーザデータをＳＣＭセグメント３２５に書き込み（ステップＳ７０）、処理をステップＳ７１に進める。
【０１８５】
ステップＳ７１では、ＣＰＵ３３は、書き込んだデータがダーティデータであると設定する。すなわち、ＣＰＵ３３は、書き込んだキャッシュセグメントに対応するＳＧＣＴ１２０のダーティビットマップ１２０ｆにおけるデータが書き込まれたブロックに対応するビットをＯＮに設定する。
【０１８６】
続いて、ＣＰＵ３３は、完了ステータスをホスト計算機１０に送信する（ステップＳ７２）。すなわち、ＣＰＵ３３は、エラーが発生してライト処理が正常に完了しなかった場合はエラーステータス（例えばCHECK  CONDITION）を返す一方、ライト処理が正常に完了した場合は正常ステータス（GOOD）を返す。
【０１８７】
続いて、ＣＰＵ３３は、ロックしているスロットを解放（アンロック）して（ステップＳ７３）、このスロットの状態を変更可能な状態にし、ユーザデータライト処理を終了する。
【０１８８】
次に、管理データアクセス処理（図１４のＳ１０１,Ｓ１０２、図２１のＳ１０６〜Ｓ１０９）について説明する。
【０１８９】
図２３は、一実施形態に係る管理データアクセス処理のフローチャートである。
【０１９０】
管理データアクセス処理には、管理データを参照する処理（管理データ参照処理）と、管理データを更新する処理（管理データ更新処理）とが含まれており、管理データ参照処理をするのか、管理データ更新処理をするかにより、実行される処理が変わる。
【０１９１】
管理データ参照処理は、例えば、ストレージシステム２０が圧縮モードに設定されている状態においてリードコマンドを受信した際に、リードコマンドで指定された、平文論理ボリューム上のリードアドレスに対応付けられている、圧縮論理ボリューム上のリードアドレス（先頭位置とデータ長）を参照するために実行される（図１２のＳ１０１）。
【０１９２】
一方、管理データ更新処理は、例えば、ストレージシステム２０が圧縮モードに設定されている状態においてライトコマンドを受信した際に、ライトコマンドで指定された、平文論理ボリューム上のライトアドレスを、圧縮論理ボリューム上のライトアドレス（先頭位置とデータ長）に新たに対応づけるために実行される（図２１のＳ１０８）。
【０１９３】
まず、ＣＰＵ３３は、アクセスする管理データを保存する最終ストレージデバイス（４０、４１）上のアドレス（以下、管理データアドレス）を特定し、管理データアドレスに対してキャッシュセグメントが割り当て済みであるか否かを判定する（ステップＳ８１）。この処理は、ユーザデータリード処理の処理ステップ（図１５のＳ１）と同様であるので詳細な説明は省略する。なお、管理データアドレスは、例えば、ＡＭＴＤ２３００における管理データのアドレス、やＡＭＴＢ２４００の管理データのアドレスである。
【０１９４】
この結果、キャッシュセグメントが割り当て済みであれば（ステップＳ８１：ＹＥＳ）、ＣＰＵ３３は、ステップＳ８３へ処理を進める一方、キャッシュセグメントが未割り当てであれば（ステップＳ８１：ＮＯ）、セグメント割当処理（図１６参照）を実行し（ステップＳ８２）、ステップＳ８３へ処理を進める。
【０１９５】
ステップＳ８３では、ＣＰＵ３３は、管理データアドレスに対応するキャッシュセグメントを含むスロットをロックする。具体的には、ＣＰＵ３３は、このキャッシュセグメントを含むスロットのＳＬＣＴ１１０のスロットステータス１１０ｅの「ロック中」を表すビットをＯＮにすることで、このスロットがロックされていることを表すようにする。
【０１９６】
続いてＣＰＵ３３は、管理データがキャッシュセグメントに格納されているか否か、すなわち、キャッシュヒットか否かを判定する（ステップＳ８４）。具体的には、ＣＰＵ３３は、管理データのキャッシュセグメントに対応するＳＧＣＴ１２０のステージングビットマップ１２０ｅ及びダーティビットマップ１２０ｆを調べ、参照する管理データの全ブロックに関して、各ブロックに対応するステージングビットマップ１２０ｅのビットもしくはダーティビットマップ１２０ｆのビットのいずれかがＯＮであれば、キャッシュヒットであると判断する。一方、ＣＰＵ３３は、参照する範囲内に、ダーティビットマップ１２０ｆとステージングビットマップ１２０ｅとの対応するビットがいずれもＯＦＦであるブロックが１つでもある場合は、キャッシュミスであると判断する。
【０１９７】
この結果、キャッシュヒットの場合（ステップＳ８４：ＹＥＳ）は、ＣＰＵ３３は、処理をステップＳ８６へ進める一方、キャッシュミスの場合（ステップＳ８４：ＮＯ）は、ステージング処理（図１９参照）を実行し（ステップＳ８５）、処理をステップＳ８６に進める。ステージング処理では、ドライブ（ＨＤＤ４０、またはＳＳＤ４１）からキャッシュセグメント（３２５又は３４３）へ管理データが読み込まれる。ステージング処理が完了すると、管理データがキャッシュセグメント（３２５又は３４３）に格納された状態になる。
【０１９８】
続いて、ＣＰＵ３３は、管理データへのアクセスの種類が何であるか（参照又は更新のいずれか）を判定する（ステップＳ８６）。この結果、アクセスの種類が「参照」である場合（ステップＳ８６：参照）は、ＣＰＵ３３は、キャッシュセグメントに格納された管理データを参照し（ステップＳ８７）、処理をステップＳ９０へ進める。
【０１９９】
一方、アクセス種類が「更新」である場合（ステップＳ８６：更新）は、ＣＰＵ３３は、キャッシュセグメント上の管理データのブロックを更新する（ステップＳ８８）。続いて、ＣＰＵ３３は、更新したブロックがダーティデータであると設定し（ステップＳ８９）、処理をステップＳ９０に進める。すなわち、ＣＰＵ３３は、更新したブロックを含むキャッシュセグメントに対応するＳＧＣＴ１２０のダーティビットマップ１２０ｆにおける更新ブロックに対応するビットをＯＮに設定し、処理をステップＳ９０へ進める。
【０２００】
ステップＳ９０では、ＣＰＵ３３は、ロックしているスロットを解放（アンロック）し、このスロットの状態を変更可能な状態にし、管理データアクセス処理を終了する。
【０２０１】
この管理データアクセス処理によると、管理データを参照したり、更新したりすることができる。
【０２０２】
次に、ダーティデータ書き出し処理について説明する。
【０２０３】
図２４は、一実施形態に係るダーティデータ書き出し処理のフローチャートである。
【０２０４】
ダーティデータ書き出し処理は、ＬＲＵ（Least Recently Used）アルゴリズムに基づいてメモリのキャッシュ領域内のダーティなデータを選択し、このデータを最終ストレージデバイスに書き出し、クリーン化する処理である。データをクリーン化することで、キャッシュ領域からこのデータが使用しているキャッシュセグメントをいつでも空き（未割り当て）状態にすることができる。ダーティデータ書き出し処理は、例えば、メモリに新しいデータをキャッシュするための空きキャッシュセグメントが不足している場合に行う。ダーティデータ書き出し処理は、ストレージシステム２０のＣＰＵ３３の使用率が低い時に、バックグラウンド処理として実行することが好ましい。ホスト計算機１０からのリード／ライトコマンド契機に空きキャッシュセグメント不足を検知してからダーティデータ書き出し処理を実行すると、この処理によるダーティデータの書き出しにかかる時間分だけ、応答性能が落ちるためである。
【０２０５】
最終ストレージデバイス（４０、４１）に保存するユーザデータや管理データは、デバイス故障によるデータ損失を防ぐために、ＲＡＩＤ（Redundant  Arrays  of  Independent  Disks）技術に基づく、冗長化を施してからデバイスに記録してもよい。例えば、最終ストレージデバイスの台数がＮ台であれば、書き出すデータを（Ｎ−１）台に均等に配分して記録し、この書き出すデータの排他的論理和を計算して作ったパリティを残りの１台に記録する。これにより、Ｎ台のうち１台が故障しても、データ復元が可能となる。例えば、Ｎ＝４のとき、３台のデバイスに等しいサイズのデータＤ１、Ｄ２、Ｄ３を記録して、残りの１台のデバイスにＰ＝Ｄ１＋Ｄ２＋Ｄ３（＋は排他的論理和を示す）により計算されるパリティＰを記録する。Ｄ２を記録するデバイスが故障した場合は、Ｐ＋Ｄ１＋Ｄ３＝Ｄ２の性質を利用して、Ｄ２を復元することができる。このような管理をする場合には、ＣＰＵ３３は、一時的にパリティをキャッシュメモリ領域に格納するため、キャッシュセグメントを利用する。
【０２０６】
図２４において、まず、ＣＰＵ３３は、最終ストレージデバイス（４０、４１）に書き出すデータ（書出対象データ）のパリティを格納するためのキャッシュセグメントが割り当て済みであるか否かを判定する（ステップＳ１１１）。この処理はユーザデータリード処理の処理ステップ（図１５のＳ１）と同様であるので詳細な説明は省略する。
【０２０７】
この結果、キャッシュセグメントが割り当て済みであれば（ステップＳ１１１：ＹＥＳ）、ステップＳ１１３へ処理を進める一方、キャッシュセグメントが未割り当てであれば（ステップＳ１１１：ＮＯ）、セグメント割当処理（図１６参照）を実行し（ステップＳ１１２）、ステップＳ１１３へ処理を進める。セグメント割当処理では、パリティの記録先アドレスに対して、ＤＲＡＭ３４またはＳＣＭ３２からキャッシュセグメントが割り当てられる。本実施形態では、パリティは、ユーザデータと同様にキャッシュセグメントの割り当てが行われている。なお、パリティを二重化することで信頼性を確保するために、キャッシュセグメントを２つ割り当てるようにしてもよい。
【０２０８】
ステップＳ１１３では、ＣＰＵ３３は、パリティを格納するキャッシュセグメントを含むスロットをロックする。具体的には、ＣＰＵ３３は、このキャッシュセグメントを含むスロットのＳＬＣＴ１１０のスロットステータス１１０ｅの「ロック中」を表すビットをＯＮにすることで、このスロットがロックされていることを表すようにする。
【０２０９】
続いて、ＣＰＵ３３は、書出対象データからパリティを生成して割り当て済みのセグメントに格納する（ステップＳ１１４）。
【０２１０】
続いて、ＣＰＵ３３は、書出対象データと、生成したパリティとに対して、デステージング処理（図２５参照）を行う（ステップＳ１１５）。でステージング処理の詳細は後述する。
【０２１１】
続いて、ＣＰＵ３３は、デステージングが完了した書出対象データとパリティとをクリーンデータであると設定する。すなわち、ＣＰＵ３３は、キャッシュセグメントに対応するＳＧＣＴ１２０のダーティビットマップ１２０ｆにおけるデータが書き込まれたブロックに対応するビットをＯＦＦに設定する（ステップＳ１１６）。
【０２１２】
続いて、ＣＰＵ３３は、ロックしているスロットを解放（アンロック）し（ステップＳ１１７）、このスロットの状態を変更可能な状態にし、ダーティデータ書き出し処理を終了する。
【０２１３】
ダーティデータ書き出し処理によると、キャッシュに使用できるキャッシュセグメントを適切に増加させることができる。
【０２１４】
次に、デステージング処理（図２４のステップＳ１１５）について説明する。
【０２１５】
図２５は、一実施形態に係るデステージング処理のフローチャートである。
【０２１６】
このデステージング処理は、書出対象データ及びパリティのそれぞれを対象に実行される。まず、ＣＰＵ３３は、対象のデータ（書出対象データ／生成したパリティ）に割り当てられているキャッシュセグメントがＤＲＡＭセグメント３４３であるか否かを判定する（ステップＳ１２１）。
【０２１７】
この結果、割り当てられているキャッシュセグメントがＤＲＡＭセグメント３４３であれば（ステップＳ１２１：ＹＥＳ）、ＣＰＵ３３は、書出対象データ／パリティをＤＲＡＭセグメント３４３から読み出してストレージデバイス（ＨＤＤ４０又はＳＳＤ４１）に書き込み（ステップＳ１２２）、デステージング処理を終了する。一方、割り当てたキャッシュセグメントがＳＣＭセグメント３２５であれば（ステップＳ１２１：ＮＯ）、ＣＰＵ３３は、書出データ／パリティをＳＣＭセグメント３２５から読み出してストレージデバイス（ＨＤＤ４０又はＳＳＤ４１）に書き込み（ステップＳ１２３）、デステージング処理を終了する。
【０２１８】
以上、本発明の一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施することが可能である。
【０２１９】
例えば、上記実施形態では、ユーザデータについては、ＤＲＡＭセグメント３４３が使用可能でない場合には、ＳＣＭセグメント３２５が使用可能であれば使用する（ユーザデータをＳＣＭセグメント３２５に格納する）ようにしていたが、本実施形態では、これに限られず、例えば、ユーザデータについて、ＤＲＡＭセグメント３４３が使用可能でない場合には、ＤＲＡＭセグメント３４３が使用可能になるまで待つようにしてもよい。具体的には、図１８のＤＲＡＭ優先セグメント割当処理のステップＳ５１でＮＯの場合に、ＣＰＵ３３がステップＳ５４に処理を進めるようにし、ステップＳ５４でＤＲＡＭセグメント３４３が使用可能になるまで待つようにしてもよい。このようにすると、ユーザデータを常にＤＲＡＭセグメント３４３に格納することができ、ユーザデータに対するアクセス性能を高く維持することができる。
【０２２０】
また、上記実施形態では、管理データについては、ＳＣＭセグメント３２５が使用可能でない場合には、ＤＲＡＭセグメント３４３が使用可能であれば使用する（管理データをＤＲＡＭセグメント３４３に格納する）ようにしていたが、本実施形態では、これに限られず、例えば、管理データについて、ＳＣＭセグメント３２５が使用可能でない場合には、ＳＣＭセグメント３２５が使用可能になるまで待つようにしてもよい。具体的には、図１７のＳＣＭ優先セグメント割当処理のステップＳ４１でＮＯの場合に、ＣＰＵ３３がステップＳ４４に処理を進めるようにし、ステップＳ４４でＳＣＭセグメント２５が使用可能になるまで待つようにしてもよい。このようにすると、管理データがＤＲＡＭセグメント３４３に格納されることを防ぐことができ、ＤＲＡＭ３４３の空き領域を適切に確保することができる。
【０２２１】
また、上記実施形態では、ユーザデータをＤＲＡＭ３４に優先的にキャッシュし、管理データをＳＣＭ３２に優先的にキャッシュするようにしていたが、ＤＲＡＭ３４にキャッシュするのか、ＳＣＭ３２にキャッシュするのかのデータのキャッシュ先の切り分けはこれに限られない。例えば、比較的高い性能が要求される特性を有するユーザデータについては、ＤＲＡＭ３４にキャッシュするようにし、それ以外のユーザデータについては、ＳＣＭ３２にキャッシュするようにしてもよく、要は、比較的高い性能が要求される特性のデータを高性能なメモリにキャッシュし、それ以外の特性のデータを低性能なメモリにキャッシュするようにすればよい。例えば、比較的高い性能が要求される特性を有するデータであるか否かについては、このようなデータを特定可能な情報（例えば、データ種類名、格納先のＬＵや、ＬＵのＬＢＡ等）を設定しておき、この情報に基づいて判断するようにすればよい。
【０２２２】
また、上記実施形態では、アクセス性能の違うメモリとして、ＤＲＡＭ３４と、ＳＣＭ３２とを例に挙げていたが、例えば、アクセス性能の高いＤＲＡＭと、アクセス性能の低いＤＲＡＭとを用意し、これらを用いて、データ種類によりキャッシュさせるメモリを制御するようにしてもよい。また、アクセス性能の違うメモリとして、２種類のメモリを備えるようにしていたが、アクセス性能の違う３種類以上のメモリを備えるようにしてもよい。この場合には、データの種類に応じてキャッシュさせるメモリを制御するようにすればよい。
【符号の説明】
【０２２３】
１Ａ，１Ｂ…情報システム、２０・・・ストレージシステム、３０…ストレージコントローラ、３２…ＳＣＭ、３４…ＤＲＡＭ、４０・・・ＨＤＤ、４１・・・ＳＳＤ
【図１】
2020071583.tif 000003
【図２】
2020071583.tif 000004
【図３】
2020071583.tif 000005
【図４】
2020071583.tif 000006
【図５】
2020071583.tif 000007
【図６】
2020071583.tif 000008
【図７】
2020071583.tif 000009
【図８】
2020071583.tif 000010
【図９】
2020071583.tif 000011
【図１０】
2020071583.tif 000012
【図１１】
2020071583.tif 000013
【図１２】
2020071583.tif 000014
【図１３】
2020071583.tif 000015
【図１４】
2020071583.tif 000016
【図１５】
2020071583.tif 000017
【図１６】
2020071583.tif 000018
【図１７】
2020071583.tif 000019
【図１８】
2020071583.tif 000020
【図１９】
2020071583.tif 000021
【図２０】
2020071583.tif 000022
【図２１】
2020071583.tif 000023
【図２２】
2020071583.tif 000024
【図２３】
2020071583.tif 000025
【図２４】
2020071583.tif 000026
【図２５】
2020071583.tif 000027