【実施例1】
【0023】
以下、本発明の実施例1を説明する。
【0024】
<記憶デバイスへの圧縮データの格納手順>
図1は、本発明の実施例1のストレージシステム100が実行する、データ圧縮処理を伴うデータライト手順を示す説明図である。
【0025】
ストレージシステム100は、ホスト計算機30及びストレージ装置11によって構成される。ホスト計算機30は、ネットワーク31を介してストレージ装置11に接続され、管理計算機(図示せず)によって管理される。ストレージ装置11は、1以上のボリューム(論理的な記憶領域)を有する。ホスト計算機30は、物理的な計算機でもよいし、物理的な計算機で実行される仮想的な計算機でもよい。ホスト計算機30は、ストレージシステムにおいて実行される仮想的な計算機でもよい。
【0026】
ホスト計算機30からは、ストレージ装置11のストレージコントローラ1_22A又はストレージコントローラ2_22Bに対してデータの書き込みが行われる。このストレージシステム100において、ホスト計算機30からの圧縮処理を伴うデータのライト処理について説明する。
【0027】
本実施例では、ホスト計算機30からのライト命令をストレージコントローラ1_22Aが受領した場合について示す。
【0028】
具体例は、下記に示す通りである。
【0029】
(S1)ストレージ装置11は、ホスト計算機30からネットワーク31を介してライト命令を受信する。ライト命令は、データとデータの割当先アドレス1100とを含んでいる。ライト命令を受信した場合に、S2以降のライト処理が開始する。
【0030】
(S2)ストレージ装置11は、ライト命令に応答して、割当先アドレス1100が示すスロットの排他を確保する。これによって、そのスロット内のデータが他のライト命令によって更新されることを防ぐ。「スロット」とは、ボリューム(VOL)における領域である。具体的には、本実施例のスロットは、ドライブ29への書き込みが行われたか否か、及び、バッファ領域202への転送が行われたか否か等の管理の単位となる領域である。本実施例ではこの領域を「スロット」と呼ぶが、他の名称で呼ばれてもよい。
【0031】
「スロットの排他を確保」とは、ホスト計算機30からのリード命令及びライト命令で指定されたアドレスが示すスロットに対するリード及びライトを防ぐ操作であり、排他を確保したことをホスト計算機30が認識するための情報が管理される。なお、この情報はビットマップ又は時間情報など識別できるものであれば種別は問わない。また、本実施例において、「スロット」が、VOL(例えば、シンプロビジョニングに従うVOLであるTP−VOL)における領域であるのに対し、「データ領域」は、スロットに割り当てられる領域(例えば、プール内の領域であるプール領域)である。
【0032】
(S3)ストレージ装置11のストレージコントローラ1_22A内、キャッシュ領域203Aにおいて、データの割当先アドレス1100に対応するアドレス1100Aにデータを格納する。
【0033】
(S4)ストレージコントローラ1_22Aは、キャッシュ領域203A内に格納されたデータをストレージコントローラ2_22Bに転送する。ストレージコントローラ2_22Bは、割当先アドレス1100に対応するキャッシュ領域203B内のアドレス1100Bに受領したデータを格納して、ストレージコントローラ1_22Aへ応答を返すことでストレージ装置11内での二重化を完了する。
【0034】
(S5)二重化を完了した後にストレージ装置11からホスト計算機30に対してネットワーク31を介してライト完了を応答する。なお、この時点でホスト計算機30はライトが完了したと認識する。
【0035】
(S6)ストレージコントローラ1_22Aは、キャッシュ領域203Aからドライブへ書き出すデータを選択し、選択したデータを圧縮してバッファ領域202A内のアドレス1101Aに格納する。なお、この処理はバッファ領域202A内にパリティサイクル分のデータが溜まるまで実施される。
【0036】
また、後述するように、ストレージコントローラ1_22Aは、選択したデータを圧縮せずにそのままアドレス1101Aに格納してもよいし、圧縮以外の処理(例えば重複排除又は暗号化等)を行って、処理後のデータをアドレス1101Aに格納してもよい。
【0037】
(S7)ストレージコントローラ1_22Aは、バッファ領域202A内のデータ量がパリティサイクル分に達すると、格納したデータからパリティデータを生成し、バッファ領域202A内のアドレス1104Aへ格納する。
【0038】
(S8)ストレージコントローラ1_22Aは、バッファ領域202A内の圧縮データ及びパリティデータをドライブ29へ書き出す(デステージ処理)。
【0039】
(S9)ストレージコントローラ1_22Aは、デステージ処理が完了すると、(S2)において確保したスロットの排他を解放する。
【0040】
以上が、ライト処理の一例である。
【0041】
<ストレージ装置>
図2は、本発明の実施例1のストレージ装置11の構成を示すブロック図である。
【0042】
ストレージ装置11は、1以上のストレージコントローラ22と、1以上のストレージコントローラ22に接続された複数のドライブ29とを有する。
【0043】
ストレージコントローラ22は、ホスト計算機30との通信を行うFE_I/F(フロントエンドインターフェースデバイス)23、ストレージ装置間での通信を行うためのストレージI/F(ストレージインターフェースデバイス)28、装置全体を制御するプロセッサ24、プロセッサ24で使用されるプログラム及び情報を格納するメモリ25、ドライブ29との通信を行うBE_I/F(バックエンドインターフェースデバイス)27、及びそれらをつなぐ内部ネットワーク26を備える。
【0044】
メモリ25は、プログラムを管理するプログラム領域201、データの転送及びコピーの時の一時的な保存領域であるバッファ領域202、ホスト計算機30からのライトデータ(ライト命令に応答して書き込まれるデータ)及びドライブ29からのリードデータ(リード命令に応答して読み出されたデータ)を一時的に格納するキャッシュ領域203、及び、種々のテーブルを格納するテーブル管理領域206を有する。
【0045】
キャッシュ領域203は、ホスト計算機30からのライトデータを一時的に格納する非圧縮データ格納領域204、及び、圧縮したデータを格納する圧縮データ格納領域205を有する。テーブル管理領域206は、VOLに関する情報を保持するVOL管理テーブル207、プールに関する情報を保持するプール構成管理テーブル208、RAID構成に関する情報を保持するRAID構成管理テーブル209、プール割当てに関する情報を保持するプール割当管理テーブル210、ドライブ割当てに関する情報を保持するドライブ割当管理テーブル211、及び、メモリ割当てに関する情報を保持するメモリ割当管理テーブル212を格納する。
【0046】
ドライブ29は、不揮発性のデータ記憶媒体を有する装置であり、例えばSSD(Solid State Drive)でもHDD(Hard Disk Drive)でもよい。複数のドライブ29が、複数のRAIDグループ(パリティグループとも呼ばれる)を構成してよい。各RAIDグループは、1以上のドライブ29から構成される。
【0047】
FE_I/F23、BE_I/F27及びストレージI/F28が、インターフェース部の一例である。メモリ25が、メモリ部の一例である。プロセッサ24が、プロセッサ部の一例である。
【0048】
<VOL管理テーブル>
図3は、本発明の実施例1のストレージ装置11が保持するVOL管理テーブル207の構成例を示す説明図である。
【0049】
VOL管理テーブル207は、VOL毎にエントリを有する。各エントリは、VOL_ID41、VOL属性42、VOL容量43及びプールID44といった情報を格納する。以下、1つのVOL(
図3の説明において「対象VOL」)を例に取る。
【0050】
VOL_ID41は、対象VOLのIDである。VOL属性42は、対象VOLの属性(例えば、対象VOLがシンプロビジョニングを適用されるVOLであるか、通常のVOLであるか、また、圧縮が有効であるか否かなど)を示す。VOL容量43は、対象VOLの容量を示す。プールID44は、対象VOLに関連付けられているプールのIDである。
【0051】
プロセッサ24は、デステージ処理において、VOL管理テーブル207のVOL属性42を参照することで、データ圧縮を必要とするVOLか否かを判定できる。例えば、VOL属性42“圧縮有効”ならばデータ圧縮処理を行う。
【0052】
<構成管理テーブル>
図4は、本発明の実施例1のストレージ装置11が保持するプール構成管理テーブル208の構成例を示す説明図である。
【0053】
プールは、1以上のRAIDグループを基に構成された論理記憶領域である。プール構成管理テーブル208は、プール毎にエントリを有する。各エントリは、プールID51、RAIDグループID52、プール容量53及びプール使用容量54といった情報を格納する。以下、1つのプール(
図4の説明において「対象プール」)を例に取る。
【0054】
プールID51は、対象プールのIDである。RAIDグループID52は、対象プールの基になっている1以上のRAIDグループの各々のIDである。プール容量53は、対象プールの容量を示す。プール使用容量54は、対象プールのプール容量のうちVOLに割り当てられている領域の総量を示す。
【0055】
図5は、本発明の実施例1のストレージ装置11が保持するRAID構成管理テーブル209の構成例を示す説明図である。
【0056】
RAID構成管理テーブル209は、RAIDグループ毎にエントリを有する。各エントリは、RAIDグループID61、RAIDレベル62、ドライブID63、ドライブ種別64、容量65及び使用容量66といった情報を格納する。以下、1つのRAIDグループ(
図5の説明において「対象RAIDグループ」)を例に取る。
【0057】
RAIDグループID61は、対象RAIDグループのIDである。RAIDレベル62は、対象RAIDグループに適用されるRAIDアルゴリズムの種別を示す。ドライブID63は、対象RAIDグループを構成する1以上のドライブの各々のIDである。ドライブ種別64は、対象RAIDグループを構成するドライブの種別(例えばHDDかSSDか)を示す。容量65は、対象RAIDグループの容量を示す。使用容量66は、対象RAIDグループの容量のうちの使用されている容量を示す。
【0058】
<割当管理テーブル>
図6は、本発明の実施例1のストレージ装置11が保持するプール割当管理テーブル210の構成例を示す説明図である。
【0059】
プール割当管理テーブル210は、VOLアドレス(VOL内のスロットを示すアドレス)毎にエントリを有する。各エントリは、VOL_ID71、VOLアドレス72、プールID73、プールアドレス74、圧縮前サイズ75、圧縮後サイズ76、及び圧縮率77といった情報を格納する。以下、1つのVOLアドレス(
図6の説明において「対象VOLアドレス」)を例に取る。
【0060】
VOL_ID71は、対象VOLアドレスによって識別されるスロットが属するVOLのIDである。VOLアドレス72は、対象VOLアドレスである。プールID73は、対象VOLアドレスに割り当てられているデータ領域を含むプールのIDである。プールアドレス74は、対象VOLアドレスに割り当てられているデータ領域のアドレス(プールに属するアドレス)である。圧縮前サイズ75は、対象プールアドレスを指定したライト命令に従うデータの圧縮前サイズを示す。圧縮後サイズ76は、対象プールアドレスを指定したライト命令に従うデータの圧縮後のサイズを示す。圧縮率77は、圧縮後サイズ76/圧縮前サイズ75の値である。
【0061】
図7は、本発明の実施例1のストレージ装置11が保持するドライブ割当管理テーブル211の構成例を示す説明図である。
【0062】
ドライブ割当管理テーブル211は、プールアドレス毎にエントリを有する。各エントリは、プールID81、プールアドレス82、RAIDグループID83、ドライブID84及びドライブアドレス85といった情報を格納する。以下、1つのプールアドレス(
図7の説明において「対象プールアドレス」)を例に取る。
【0063】
プールID81は、対象プールアドレスが属するプールのIDである。プールアドレス82は、対象プールアドレスである。RAIDグループID83は、対象プールアドレスが示すデータ領域の基になっているRAIDグループのIDである。ドライブID84は、対象プールアドレスが示すデータ領域の基になっているドライブのIDである。ドライブアドレス85は、対象プールアドレスに対応したドライブアドレスである。
【0064】
<論理記憶階層>
図8は、本発明の実施例1のストレージ装置11によって管理される論理記憶階層の構成例を示す説明図である。
【0065】
VOL1000は、ホスト計算機30に提供される。また、コピー処理又は重複排除処理によって、VOL1000内の複数のスロットから1つのプールアドレスを指すことがあり、複数のVOLのスロットから一つのプールアドレスを指すこともある。
図8の例では、異なる2つのスロット(VOLアドレス)1100及び1103が、同一のプールアドレス1101を指している。なお、VOL1000からプール1001の割当ては、プール割当管理テーブル210を基に管理される。また、プール1001からドライブアドレス空間1003(すなわちRAIDグループ1002を構成する複数のドライブ29が提供する複数のドライブアドレス空間)への割当ては、ドライブ割当管理テーブル211を基に管理される。
【0066】
<メモリ割当管理テーブル>
図9は、本発明の実施例1のストレージ装置11が保持するメモリ割当管理テーブル212の構成例を示す説明図である。
【0067】
メモリ割当管理テーブル212は、VOLアドレス(スロットを示すアドレス)毎にエントリを有する。各エントリは、VOL_ID91、VOLアドレス92、バッファ(BF)アドレス93、圧縮後VOLアドレス94、キュー状態95及びBF転送状態96といった情報を格納する。以下、1つのVOLアドレス(
図9の説明において「対象VOLアドレス」)を例に取る。
【0068】
VOL_ID91は、対象VOLアドレスによって識別されるスロットが属するVOLのIDである。VOLアドレス92は、対象VOLアドレスである。BFアドレス93は、対象VOLアドレスを指定してライトされたデータの転送先BFアドレスを示す。圧縮後VOLアドレス94は、対象VOLアドレスを指定してライトされたデータの内、BFへの転送の対象外となったデータの転送先VOLアドレスを示す。キュー状態95は、対象VOLアドレスを指定してライトされたデータのドライブ29へのデータ格納が完了しているかを示す。
図9では、キュー状態95の値のうち“Dirty”はドライブ29への格納が出来ていないことを、“Clean”はドライブ29への格納が済んでいることを表す。BF転送状態96は、対象VOLアドレスを指定してライトされたデータが圧縮されてBFへ転送されているか否かを示す。BFへの転送が完了している場合、BF転送状態96の値は“転送済み”となり、転送が行われていない場合は“無し”となる。
【0069】
図10は、本発明の実施例1のストレージ装置11におけるメモリ割当の構成例を示す図である。
【0070】
キャッシュ領域203は、VOLに対応した仮想的なアドレス空間である非圧縮データ格納領域204、及び、プールアドレスに対応した圧縮データ格納領域205をストレージコントローラ22へ提供している。ホスト計算機30からストレージコントローラ22へのライト命令によって、VOLアドレスに対応した非圧縮データ格納領域204が割当てられる。ストレージコントローラ22は、ライト命令と非同期でデータを圧縮すると、圧縮したデータを、バッファ領域202、又は、キャッシュ領域203内圧縮データ格納領域205に、プールアドレスに対応させて格納する。
【0071】
図10の例では、ライトされたデータが格納されているVOL内のスロット1100が、プールアドレスに対応したバッファ領域202上の領域1101を指している。VOLアドレスとプールアドレスの割当ては、プール割当管理テーブル210で管理される。また、バッファ領域202への割当てはメモリ割当管理テーブル212のBFアドレス93で、圧縮データ格納領域への割当てはメモリ割当管理テーブル212の圧縮後VOLアドレス94で、それぞれ管理される。
【0072】
バッファ領域202では、バッファ領域内のデータ量がパリティサイクルのサイズに達すると、プロセッサ24を介して非圧縮データ格納領域204とは対応しないパリティ1104が生成される。
【0073】
以下、本実施例で行われる処理の例を説明する。
【0074】
<リード処理>
図11は、本発明の実施例1のストレージ装置11が実行するリード処理を示すフローチャートである。
【0075】
リード処理は、ホスト計算機30からネットワーク31を介してストレージ装置11がリード命令を受けた場合に開始する。リード命令では、例えば、仮想ID(例えば、仮想VOL_ID)、アドレス、及びデータサイズが指定される。
【0076】
S1201で、プロセッサ24は、リード命令から特定されるスロットの排他を確保する。なお、スロット排他確保時に他の処理がスロットの排他を確保している場合、プロセッサ24は、一定の時間待ってから、S1201を行う。
【0077】
S1202で、プロセッサ24は、リードデータがキャッシュ領域203に存在するか否かを判定する。S1202の判定結果が真の場合、S1204に進む。S1202の判定結果が偽の場合、プロセッサ24は、S1203で、RAIDグループからリードデータをバッファ領域202に転送する。なお、この際、プロセッサ24は、ホスト計算機30が指定したVOL_IDとVOLアドレスから、プール割当管理テーブル210のプールID73、プールアドレス74及び圧縮後サイズ76を特定し、ドライブ割当管理テーブル211からドライブID84及びドライブアドレス85を参照し、データの格納場所及びデータサイズを特定する。
【0078】
S1204で、プロセッサ24はバッファ領域202上のリードデータが圧縮されているか否かを圧縮後サイズ76から判定し、圧縮済みのデータであればS1205において伸長し、圧縮データで無い場合はS1205をスキップする。
【0079】
S1206で、プロセッサ24はバッファ領域202上のリードデータをホスト計算機30に転送する。ホスト計算機30は、S1206のデータ転送が完了した時点でリード処理が終了したと認識する。
【0080】
その後、プロセッサ24は、S1205で、確保していたスロット排他を解除する。
【0081】
<ライト処理>
図12は、本発明の実施例1のストレージ装置11が実行するライト処理を示すフローチャートである。
【0082】
ライト処理は、ホスト計算機30からストレージ装置11がライト命令を受信した場合に開始する。なお、以下の説明では、例えば、ストレージコントローラ2_22Aのプロセッサ24をプロセッサ24Aと記載するなど、ストレージコントローラ2_22A及びストレージコントローラ2_22Bに属するものをそれぞれ参照符号に付した「A」及び「B」によって区別する。
【0083】
ホスト計算機30からのライト命令には、割当て先アドレスが付随している。ストレージ装置11は、S1301において割当て先アドレスが示すスロットの排他を確保する。なお、スロット排他確保と同時に、プロセッサ24Aは、データのライト先とするキャッシュ領域203Aのスロット領域を割当てる。
【0084】
S1302で、プロセッサ24Aは、ホスト計算機30に対してライト処理の準備ができたことを示す「Ready」を応答する。プロセッサ24Aは、「Ready」を受け取ったホスト計算機30から、ライトデータを受ける。その後、S1303でプロセッサ24はライト命令と同期して圧縮処理を実行する必要があるかを判定する。なお、プロセッサ24Aの負荷、ストレージ装置11に対するライト量、及びライトデータのデータ長から、ストレージシステム100においてレスポンス性能を優先するケース1及びスループット性能を優先するケース2のいずれかへ分岐する。例えば、ストレージ装置11は、以下のような条件を保持し、プロセッサ24Aは、ライト命令を受信すると、保持している条件に基づいてレスポンス性能及びスループット性能のいずれを優先するかを判定してもよい。
【0085】
<ケース1>レスポンス優先
レスポンス性能を優先する条件として以下のものがある。例えば、以下の複数の条件のうちいずれか一つのみ、又は、複数の組合せに基づいて、レスポンス性能を優先するか否かが判定されてもよい。後述するスループット性能に関する条件についても同様である。
【0086】
(1)ストレージコントローラ22の(すなわちプロセッサ24の)負荷が所定の基準より低い
【0087】
(2)ライトデータを圧縮した場合の圧縮率が所定の基準より低くなることが予想される
【0088】
(3)書き込み先のボリュームに圧縮データを格納できない
【0089】
ここで、上記(1)は、所定の基準近傍で判定結果が頻繁に切り替わると負荷の変動が不安定になるため、これを防ぐために多段階で基準を変動させてもよい。また、上記(1)は、例えばストレージ装置11に対するIO命令の量に基づいて判定されてもよい。例えば、単位時間当たりのIO命令の回数、又は、IO命令によって書き込み/読み出しが行われるデータ量が所定の基準より少ない場合に、負荷が低いと判定されてもよい。
【0090】
上記(2)は、例えば、ライトデータのサイズが所定の基準より小さい場合に、ライトデータの圧縮率が低い、すなわち圧縮によるデータ削減が見込めないと判定されてもよい。上記(3)は、例えば、ライトデータの書き込み先のVOLに対応するVOL管理テーブル207のVOL属性42が“圧縮有効”でない場合に、書き込み先のボリュームに圧縮データを格納できないと判定されてもよい。
【0091】
例えばプロセッサ24Aが低負荷であり、レスポンス性能を優先する場合、S1303の判定において偽となる。この場合、プロセッサ24Aは、S1306において受け取ったライトデータを割当てたキャッシュ領域203Aへ格納する。S1307において、ストレージコントローラ1_22Aからストレージコントローラ2_22Bに対してキャッシュ領域203Aに格納したライトデータを転送し、キャッシュ領域203Bに格納することで二重化を行う。
【0092】
S1308において、プロセッサ24Aは、メモリ割当管理テーブル212を更新する。なお、本ケースにおいてライトデータは未だ圧縮されていない。このため、データのライト先として割当てられたスロットのVOLアドレスに対応するBFアドレス93及び圧縮後VOLアドレス94の値は無く、プロセッサ24Aは、キュー状態95を“Dirty”に更新する。
【0093】
次に、S1309において、ストレージ装置11から、ネットワーク31を介してホスト計算機30に対してライト処理が完了したとして完了応答を返却する。完了応答を返却すると、S1310においてストレージ装置11は確保していたスロットの排他を解放してライト処理を終了する。
【0094】
<ケース2>スループット優先
スループット性能を優先する条件として以下のものがある。
【0095】
(4)ストレージコントローラ22の(すなわちプロセッサ24の)負荷が所定の基準より高い
【0096】
(5)ライトデータを圧縮した場合の圧縮率が所定の基準より高くなることが予想される
【0097】
ここで、上記(4)は、上記(1)と同様に、例えばストレージ装置11に対するIO命令の量に基づいて判定することができる。例えば、単位時間当たりのIO命令の回数等が所定の基準より多い場合に、負荷が高いと判定されてもよい。
【0098】
上記(5)は、例えば、ライトデータのサイズが所定の基準より大きい場合に、ライトデータの圧縮率が高い、すなわち圧縮によるデータ削減が見込まれると判定されてもよい。
【0099】
例えばプロセッサ24が高負荷であり、スループット性能を優先する場合、S1303の判定において真となる。この場合、プロセッサ24Aは、S1304において受け取ったライトデータをバッファ領域202Aへ転送する。次に、S1305で、プロセッサ24Aは、バッファ内のデータを圧縮する。
【0100】
なお、S1304及びS1305において、ライトデータのバッファ領域202Aへの格納時に圧縮が行われても良い(すなわち、バッファ領域202Aへの格納前に圧縮が行われ、圧縮されたデータがバッファ領域202Aへ格納されても良い)し、バッファ領域202Aへの格納後にバッファ領域202A内で圧縮が行われても良い。いずれの場合も、最終的には、圧縮後のデータがバッファ領域202Aに格納される。
【0101】
また、この圧縮は、バッファ領域202A以外の記憶領域(例えばプロセッサ24A内のメモリ)において行われてもよい。
【0102】
ここで、圧縮は、ライトデータに対して行われる所定の処理の一例である。プロセッサ24は、圧縮以外の処理、例えば、重複排除、暗号化又は冗長化等を行い、処理後のデータをバッファ領域202Aに格納してもよい。後述する
図14のS1411についても同様である。
【0103】
次に、S1306において、プロセッサ24Aは、バッファ領域202A内の圧縮データを、割当てたキャッシュ領域203Aへ格納する。S1307において、ストレージコントローラ1_22Aからストレージコントローラ2_22Bに対してキャッシュ領域203Aに格納したライトデータを転送し、キャッシュ領域203Bに格納することで圧縮データの二重化を行う。
【0104】
S1308において、プロセッサ24Aは、メモリ割当管理テーブル212を更新する。なお、本ケースにおいてライトデータは圧縮されており、圧縮データに対してアドレスが割当てられる。このため、データのライト先として割当てられたスロットのVOLアドレスに対応する圧縮後VOLアドレス94が更新される。また、BFアドレス93の値は無く、プロセッサ24Aは、キュー状態95を“Dirty”に更新する。
【0105】
次に、S1309において、ストレージ装置11から、ネットワーク31を介してホスト計算機30に対してライト処理が完了したとして完了応答を返却する。完了応答を返却すると、S1310においてストレージ装置11は確保していたスロットの排他を解放してライト処理を終了する。
【0106】
<デステージ処理>
図13は、本発明の実施例1のストレージ装置11が実行するデステージ処理を示すフローチャートである。
【0107】
デステージ処理は、ホスト計算機30からストレージ装置11へのライト命令が完了した後、非同期的に行われる。なお、デステージは、ライト命令が完了したことを契機として開始されても良いし、周期的に起動しても良いし、キャッシュ領域203の消費量などからライト量を判定して選択しても良い。
【0108】
デステージ処理が開始されると、ストレージ装置11は、S1401において、デステージ処理の対象領域がキャッシュ領域上の圧縮データ格納領域205に属しているか否かを判定する。判定が真の場合(すなわち対象領域が圧縮データ格納領域205に属している場合)はケース2−1、判定が偽の場合(すなわち対象領域が非圧縮データ格納領域204に属している場合)はケース1−1の処理が行われる。
【0109】
<ケース2−1>圧縮済データのデステージ
S1401の判定が真の場合、キャッシュ領域203内の圧縮データ格納領域205に対してデステージ処理(S1402〜S1406)が行われる。S1402では、プロセッサ24Aは、圧縮データ格納領域205からデステージ処理を実行するデータを選択する。通常、パリティサイクル分のデータが並ぶデータ列(ストライプ列)が選択され、それに対してデステージが行われる。
【0110】
S1403で、プロセッサ24は、デステージするデータが属するスロットの排他を確保する。排他を確保した後、プロセッサ24Aは、S1404で対象のデータ列からパリティデータを生成する。S1405で、プロセッサ24Aは、対象のデータ列及び生成したパリティデータをドライブに書き出す。S1406において、プロセッサ24Aは、メモリ割当管理テーブル212を更新する。なお、本ケースにおいて、キュー状態95が“Clean”に更新される。S1407で、プロセッサ24Aは、デステージされた範囲のスロットの排他を解放し、処理を終了する。
【0111】
<ケース1−1>圧縮及びデステージ一括処理(デステージ中排他保持)
S1401の判定が偽の場合、キャッシュ領域203内の非圧縮データ格納領域204に対してデステージ処理(S1408〜S1415)が行われる。S1408では、プロセッサ24Aは、非圧縮データ格納領域204に格納されているデータのうち、キュー状態95が“Dirty”であるスロットに属するデータから、デステージ処理を実行するデータを選択する。通常、パリティサイクル分のデータが並ぶデータ列(ストライプ列)が選択され、それに対してデステージが行われる。
【0112】
S1409で、プロセッサ24は、デステージするデータが属するスロットの排他を確保する。なお、
図13に示すデステージ処理が、
図12に示したライト処理の終了を契機として(すなわちライト処理の直後に)行われる場合には、S1310及びS1409を省略してもよい。
【0113】
排他を確保した後、プロセッサ24Aは、S1410で対象のデータを読み出して、バッファ領域202へ転送する。なお転送の際、プロセッサ24は、メモリ割当管理テーブル212のBFアドレス93及び圧縮後VOLアドレス94を割当てる。また、プロセッサ24Aは、バッファ領域202への転送完了後、BF転送状態96を“転送済”に更新する。なお、圧縮後VOLアドレス94の割当ては、パリティサイクル分を割当てることが明らかなため、あらかじめパリティサイクル分の領域を割当てることで、マッピング情報の更新回数を削減できる。
【0114】
S1411で、プロセッサ24Aは、転送したデータを圧縮する。なお、圧縮処理はバッファ転送時に行っても良い(すなわち、バッファ領域202への格納前に圧縮が行われ、圧縮されたデータがバッファ領域202へ格納されても良い)し、転送後バッファ内で行っても良い。
【0115】
S1412において、プロセッサ24Aは、バッファ内の圧縮データの量を判定する。圧縮データ量がパリティサイクル分よりも小さい場合、プロセッサ24は、S1408に戻ってデステージするデータを追加で選択する。パリティサイクル分のデータがバッファ領域202内に溜まった場合、S1412の判定を真としてS1413に進む。なお、圧縮データサイズは可変長であるため、バッファ領域202内のデータが必ずしもパリティサイクル分揃うとは限らないことから、パリティサイクルを超える前にS1413へ処理を進めることもありえる。
【0116】
S1413において、プロセッサ24Aは、バッファ領域202内の圧縮データからパリティデータを生成する。S1414で、プロセッサ24Aは、対象のデータ列及び生成したパリティデータを、RAIDグループを構成するドライブ29に書き出す。S1415において、プロセッサ24Aは、メモリ割当管理テーブル212の更新を確定する。なお、本ケースにおいて、キュー状態95が“Clean”に更新される。S1407で、プロセッサ24Aは、デステージされた範囲のスロットの排他を解放し、処理を終了する。
【0117】
上記の例では、S1412において、バッファ内の圧縮データの量がパリティサイクルのデータ量に達したか否かが判定されている。しかし、ドライブ29がRAIDを構成するか否かにかかわらず、所定の量のデータをまとめてドライブ29に格納する場合には、プロセッサ24Aは、S1412においてバッファ内の圧縮データの量が当該所定の量に達したか否かを判定する。本実施例のS1412におけるパリティサイクルのデータ量は、上記の所定のデータ量の一例である。
【0118】
なお、プロセッサ24Aは、S1401の判定が偽の場合であっても、S1408〜S1415ではなく、S1402〜S1406を実行する場合がある。例えば、ライトデータの書き込み先のVOL属性42が圧縮有効でないために、
図12のS1303の判定が偽であった場合、非圧縮データがキャッシュ領域203Aに格納されている。この場合、S1401の判定は偽となるが、データの圧縮は行わないため、S1402〜S1406が実行される。
【0119】
上記の例では、スループット性能が優先される場合に、ライト処理時には圧縮後のデータがキャッシュ領域203で二重化された時点でホスト計算機30に応答が返され、デステージ処理ではデータの圧縮が不要となる。これによって、レスポンス性能は低下するが、デステージ処理の際のキャッシュアクセスが削減されるため、スループット性能が向上する。このような処理は一例であり、スループット性能が優先される場合に、ライト処理の際にさらに多くの処理が行われてもよい。
【0120】
例えば、プロセッサ24Aは、S1303(
図12)の判定が真である場合に、S1304〜S1308を実行し、続いて、S1412、S1404〜S1406(
図13)と同様の処理を実行し、その後にS1309、S1310を実行してもよい。すなわち、ライト命令に対して圧縮処理及びデステージまで一括して行われるため、レスポンス性能はさらに低下するが、スループット性能は向上する。
【0121】
この場合も、S1303(
図12)の判定が偽であるときの処理は、上記の
図12及び
図13を示して説明した通りである。すなわち、プロセッサ24Aは、S1304〜S1305を実行せずに、S1306〜S1310を実行する。さらに、プロセッサ24Aは、S1408〜S1415及びS1407を実行する。
【0122】
上記の例によれば、デステージが開始されるとスロットの排他が確保され(S1409)、その後、データのドライブ29への転送が終了して(S1414)マッピング情報が更新される(S1415)まで、スロットの排他が確保される(S1407)。このように長時間排他を確保することによって、必要なIO命令が実行できないといったトラブルが発生する場合がある。このようなトラブルを回避するために、ケース1−1における排他手順を変更した実施例として、以下のケース1−2を示す。
【0123】
図14は、本発明の実施例1のストレージ装置11が実行する、排他手順を変更したデステージ処理を示すフローチャートである。
【0124】
<ケース1−2>圧縮及びデステージ一括処理(デステージ中排他解放)
S1501において、ストレージ装置11は、
図13のS1401と同様の判定を行う。S1501の判定が真の場合、キャッシュ領域203内の圧縮データ格納領域205に対してデステージ処理(S1502〜S1507)が行われる。これらの処理は、
図13のS1402〜S1407と同様であるため、説明を省略する。
【0125】
S1501の判定が偽の場合、キャッシュ領域203内の非圧縮データ格納領域204に対してデステージ処理が行われる(S1508〜S1519)。S1508では、プロセッサ24は、非圧縮データ格納領域204に格納されているデータのうち、キュー状態95が“Dirty”であるスロットに属するデータからデステージ処理を実行するデータを選択する。通常、パリティサイクル分のデータが並ぶデータ列(ストライプ列)が選択され、それに対してデステージが行われる。
【0126】
先述のケース1−1ではデステージ処理が完了するまでデステージ対象となるスロット範囲が保持されている。しかし、圧縮後のデータサイズがパリティサイクル分に達する広範囲の排他を保持し続けると、ホスト計算機30からのライト命令が排他範囲に生じることによってデステージ待ちを生じる可能性が高くなる。そこで、プロセッサ24は、S1509でデステージするデータが属するスロットの排他を確保した後、S1510のバッファ転送及びS1511の圧縮処理を行う。そして、プロセッサ24は、圧縮処理が完了した後のS1512でメモリ割当管理テーブル212のBF転送状態96を“転送済”に更新する。更新が完了すると、プロセッサ24は、S1513においてスロット排他を解放する。
【0127】
以後、プロセッサ24は、S1514のドライブ転送可否の判定、S1515のパリティ生成、S1516のドライブ転送を、それぞれケース1−1のS1412、S1413及びS1414と同様に行う。
【0128】
S1517において、プロセッサ24は、デステージ範囲のスロット排他を再度確保し、S1518でメモリ割当管理テーブル212のキュー状態95を“Clean”に更新する。
【0129】
なお、S1517までの間に、上記のデステージ範囲のスロットに対してホスト計算機30からの更新ライトが発生した場合、プロセッサ24は、S1308においてメモリ割当管理テーブル212のBF転送状態96を“無し”に更新する。この場合、S1518でプロセッサ24がキュー状態95を更新する際にBF転送状態96が切り替わったことを判定することによって、更新ライトが発生したことに気づくことが出来る。
【0130】
なお、更新ライトの発生に気づいた(すなわちS1512で“転送済”に更新したBF転送状態96がS1517の時点で“無し”となっていた)場合、プロセッサ24は、処理をやり直すか又は対象箇所のマッピング情報更新をスキップする。具体的には、プロセッサ24は、S1518に進まずにS1508に戻り、更新ライトが行われたスロットを対象とするデステージ処理をやり直してもよい。あるいは、プロセッサは、そのままS1508に進み、更新ライトが行われたスロットのキュー状態95を“Clean”に更新せずに、S1519に進んでもよい。その場合、当該スロットは次回以降のデステージ処理の対象となる。
【0131】
最後にS1519で、プロセッサ24は、デステージされた範囲のスロットの排他を解放し、処理を終了する。
【0132】
以上の本発明の実施例によれば、キャッシュ領域に格納されたデータをデステージする際に、圧縮処理から記憶デバイス(ドライブ)への格納までを一括で行うことによって、圧縮データの二重化処理が省略される。キャッシュ領域における圧縮データの二重化が不要になることで、キャッシュアクセス量を削減し、データ書き込みの最大速度が向上できる。
【0133】
また、記憶デバイスへの圧縮データの格納が完了するまでキャッシュメモリ上に圧縮前のデータを二重化して保持することによって、圧縮処理及び記憶デバイスへの格納などの処理中に装置障害が発生してもデータを保護することができる。ストレージ装置が圧縮以外の処理(例えば重複排除、暗号化又は冗長化等)を行う場合にも、同様の効果が得られる。
【0134】
また、デステージの際に圧縮処理を行う場合、例えばパリティサイクル等の所定の大きさの領域を予め割り当てることができるため、マッピング情報の更新回数を削減することができる。
【0135】
また、本発明の実施例によれば、ストレージ装置は、所定の条件に基づいてレスポンス性能及びスループット性能のいずれを優先するかを判定する。そして、レスポンス性能を優先する場合にはキャッシュメモリ上に圧縮前のデータを二重化して保持したところでホストに応答する。これによって、レスポンス性能が向上する。一方、スループット性能を優先する場合には圧縮を行い、圧縮後のデータを二重化して保持したところでホストに応答する。これによってレスポンス性能は低下するが、デステージの際のキャッシュアクセス量が削減されるため、スループット性能は向上する。
【0136】
例えば、IO命令の量、予想される圧縮率又は書き込み先のボリュームの属性などに基づいてレスポンス性能又はスループット性能のいずれを優先するかを判定することによって、状況に応じて最適な性能を実現することができる。
【0137】
また、キャッシュ領域に格納された圧縮前のデータをデステージする場合に、当該データをキャッシュ領域から読み出すときから記憶デバイスへの圧縮後のデータの格納が完了し、キュー状態を“Clean”に変更するまで(S1409〜S1415、S1407)、当該データの領域の排他を確保してもよい。これによって、まだデステージされていないデータがデステージされたと誤って判定することが防止される。
【0138】
あるいは、当該データを読み出して、圧縮を行い、バッファ領域に転送した時点で排他を一旦解除してもよい(S1513)。これによって、排他が確保される時間が短縮し、必要なIOが実行できないというトラブルが軽減される。この場合、排他を一旦解除(S1513)してから当該データの記憶デバイスへの転送が終了(S1516)するまでの間に新たな書き込みが行われると、そのことが記録される(すなわちBF転送状態が“転送済み”から“なし”に更新される)。これによって、まだデステージされていないデータがデステージされたと誤って判定することが防止される。
【0139】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明のより良い理解のために詳細に説明したのであり、必ずしも説明の全ての構成を備えるものに限定されものではない。
【0140】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によってハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによってソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【0141】
また、制御線及び情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線及び情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。