(58)【調査した分野】(Int.Cl.,DB名)
前記キャッシュ手段は、前記ストレージコントローラが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、前記リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
請求項1または2に記載のストレージコントローラ。
前記設定手段は、前記ストレージコントローラがいずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
請求項1から3のいずれか一項に記載のストレージコントローラ。
前記キャッシュ処理は、前記コンピュータが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
請求項8に記載のプログラム。
【発明を実施するための形態】
【0021】
以下、図面を参照しながら、本発明の実施形態を詳細に説明する。
【0022】
<<第1の実施形態>>
まず、本発明の第1の実施形態について説明する。
【0023】
<構成>
図1は、第1の実施形態に係るストレージアレイ装置300の構成を示すブロック図である。
【0024】
ストレージアレイ装置300は、ホスト計算機100との間で、有線または無線の通信により、相互に信号のやりとりが可能であるように構成される。
【0025】
ストレージアレイ装置300は、ストレージコントローラ310と、ディスクドライブ320と、を含む。ディスクドライブ320は、ホスト計算機100が扱うデータを記憶する。ストレージコントローラ310は、ディスクドライブ320におけるデータの読み出しおよび書き込みを行う。
【0026】
ディスクドライブ320は、データを記憶する実体である物理ディスク800を備える。物理ディスク800は、例えば、HDD(Hard Disk Drive)である。物理ディスク800は、SSD(Solid State Drive)等、他の記憶装置でもよい。
【0027】
図1において、物理ディスク800におけるデータの配置の例が、実線の吹き出しの中に示されている。
図1で示される例において、1つのセルは4KB(キロバイト)分の領域を表している。例えば、「データC」は、物理アドレスにおける番号16から31までの領域に格納されている。
【0028】
また、ディスクドライブ320においては、ホスト計算機100による、データに対する操作(読み出し(リード)および書き込み(ライト))を行う対象である、論理ディスク321が構築されている。論理ディスク321におけるデータの配置の例が、
図1において破線の吹き出しの中に示されている。例えば、「データC」は、論理ディスクにおいては論理アドレスの番号が64から95までの範囲を占めるデータである。
【0029】
ストレージコントローラ310は、キャッシュ管理部311と、圧縮伸長制御部312と、書き戻し部313とを備える。
【0030】
圧縮伸長制御部312は、データの圧縮、および圧縮されたデータの伸長(すなわち復元)を行う。圧縮伸長制御部312は、データを、ディスクドライブ320に格納する際には圧縮する。圧縮伸長制御部312は、データをキャッシュする際、すなわち、データをディスクドライブ320から読み出してキャッシュ管理部311のキャッシュ記憶部400(後述)へ格納する際には、読み出したデータを伸長する。
【0031】
書き戻し部313は、ディスクへのデータの書き戻し処理、すなわち、キャッシュ記憶部400に記憶されたデータをディスクドライブ320へ格納する処理を、行う。
【0032】
キャッシュ管理部311は、キャッシュデータを管理する。キャッシュ管理部311は、キャッシュ記憶部400と制御情報記憶部500とに大別される。
【0033】
キャッシュ記憶部400は、キャッシュデータを記憶する。キャッシュ記憶部400は、キャッシュテーブル410を用いてキャッシュデータを管理する。キャッシュテーブル410は、例えば、キャッシュデータと、キャッシュデータを識別するID(Identifier)であるページIDと、キャッシュデータの論理アドレスの情報と、LRU(Least Recently Used)ビットと、を記憶する。LRUビットは、数字が小さいほど、LRUビットが付与されたキャッシュデータが、最後に使用されてからの経過時間が長いデータであることを示す、情報である。
【0034】
制御情報記憶部500は、データのキャッシングとディスクドライブへのデータの格納に関する処理の制御を行うための情報を記憶する。制御情報記憶部500は、アドレス変換テーブル510と、破棄対象管理テーブル520と、隣接グループ管理テーブル530と、隣接グループリンク540と、を保持している。本実施形態ではこれらのテーブルは別々のものとして説明されるが、1つのテーブルが複数のテーブルの役割を担っていてもよい。
【0035】
アドレス変換テーブル510は、論理アドレスと物理アドレスとの対応関係を表す情報を記憶するテーブルである。後の説明で参照される
図4のテーブル510aおよびテーブル510bが、アドレス変換テーブル510の例である。
【0036】
破棄対象管理テーブル520は、キャッシュデータの破棄(すなわち、キャッシュ記憶部400からの削除)についての情報を管理するテーブルである。具体的には、破棄対象管理テーブル520は、キャッシュデータの各々について、そのキャッシュデータが破棄の対象であるかを示す「破棄対象フラグ」が関連づけられた情報を記憶する。本開示の説明では、例えば、破棄対象フラグの値が「1」であるときは、そのキャッシュデータが破棄の対象であることを意味するとする。後の説明で参照される
図5のテーブル520a、テーブル520bおよびテーブル520cが、破棄対象管理テーブル520の例である。
【0037】
隣接グループ管理テーブル530は、隣接グループの情報を記憶する。
【0038】
隣接グループとは、ストレージコントローラ310により設定される、データのグループである。隣接グループの構成員は、圧縮データ、または、1つの圧縮データに圧縮され得るひとまとまりのデータ(以下、「圧縮単位データ」と表記する)である。以下では、隣接グループを構成するデータを、「隣接グループに属するデータ」とも表記する。なお、隣接グループは概念上のものであるので、隣接グループについて言及する場合において、隣接グループに属するデータが圧縮されている状態であるか伸長されている状態であるかは、不問である。
【0039】
隣接グループ管理テーブル530は、
図6のテーブル530aおよびテーブル530bのように、設定された隣接グループごとに、隣接グループを識別する番号である隣接グループ番号と、物理アドレスにおける開始位置である先頭物理アドレスと、物理ディスク800における格納範囲の長さを示すブロック長と、論理アドレスにおける開始位置である先頭論理アドレスと、論理ディスクにおける長さである論理範囲と、を示す情報を、記憶する。
【0040】
隣接グループリンク540は、隣接グループとキャッシュデータとの関係を表す情報を記憶する。後の説明で参照される
図7のテーブル540aおよびテーブル540bが、隣接グループリンク540の例である。隣接グループリンク540において、キャッシュされているデータのページIDが、そのデータが属する隣接グループの隣接グループ番号に関連づけられる。なお、以下、隣接グループリンク540においてデータが隣接グループ番号に関連づけられることを、特に「データが隣接グループに紐付けられる」と称する。
【0041】
また、隣接グループリンク540は、隣接グループごとに格納フラグの値を記憶する。格納フラグは、二値の変数であり、例えば「0」または「1」の値をとる。本開示の説明では、格納フラグが「1」であることは、その格納フラグが付与された隣接グループに紐付けられているデータが、キャッシュ記憶部400から破棄される場合に物理ディスクへ格納される、ということを意味する。
【0042】
<動作>
以下、ストレージアレイ装置300の動作を説明する。
【0043】
図2は、ホスト計算機100がストレージアレイ装置300にリード要求またはライト要求を発信した場合に開始される、ストレージアレイ装置300の動作の流れを示すフローチャートである。
【0044】
ストレージアレイ装置300は、ホスト計算機100から要求を受信すると(ステップS1)、受信した要求がリード要求であるかライト要求であるかによって異なる処理を行う。なお、リード要求は、データを読み出す要求であり、ライト要求は、データを書き込む(すなわち、対象の範囲のデータを更新する)要求である。
【0045】
受信した要求がリード要求である場合(ステップS2において「リード要求」)、ストレージアレイ装置300は、キャッシュヒットが起こるかを調べる(ステップS3)。キャッシュヒットとは、リード要求の対象となるデータがキャッシュ記憶部400から見つけ出されることである。キャッシュヒットが起こった場合(ステップS3においてYES)、ストレージコントローラ310は、キャッシュ記憶部400からリード要求の対象となるデータに対応するキャッシュデータを読み出し、そのキャッシュデータをホスト計算機100に送信すればよい(ステップS91)。この場合は、ストレージアレイ装置300は、要求に対する処理を、ステップS91の処理をもって終了する。
【0046】
キャッシュヒットが起こらなかった場合(ステップS3においてNO)、ストレージコントローラ310は、リード要求の対象となるデータを含む圧縮単位データ(以下、「リードデータ」)に対して隣接グループが設定されているか(言い換えれば、リードデータがいずれかの隣接グループに属するか)を調べる。具体的には、ストレージコントローラ310は、隣接グループ管理テーブル530を参照し、リードデータの論理アドレスの範囲が既存の隣接グループの範囲のいずれかに含まれるかを調べればよい。リードデータに対して隣接グループが設定されていない場合(ステップS4においてNO)、ストレージコントローラ310は、第1のケースの処理(ステップS10)を行う。リードデータに対して隣接グループが設定されている場合(ステップS4においてYES)、ストレージコントローラ310は、第4のケースの処理(ステップS40)を行う。
【0047】
第1のケースの処理または第4のケースの処理を行う場合は、ストレージコントローラ310は、ホスト計算機100からの要求に対する応答として、リード要求の対象となるデータをホスト計算機100に送信する(ステップS5)。なお、ストレージコントローラ310は、このステップS5の処理を、第1のケースの処理または第4のケースの処理の途中で行ってもよい。
【0048】
受信した要求がライト要求である場合(ステップS2において「ライト要求」)、ストレージコントローラ310は、ライト要求の対象の範囲のデータを、ライト要求に従って更新する(ステップS6)。ライト要求の対象の範囲のデータがキャッシュデータとして既にキャッシュ記憶部400にある場合は、ストレージコントローラ310は、そのキャッシュデータを更新すればよい。ライト要求の対象の範囲のデータがキャッシュ記憶部400に無い場合において、ライト要求の対象が、物理ディスク800に記憶されている圧縮データの一部の範囲であるときは、ストレージコントローラ310は、物理ディスク800からその圧縮データをキャッシュしてから、キャッシュされたデータにおけるライト要求の対象の範囲を更新する。ライト要求の対象が、物理ディスク800に記憶されている圧縮データの全部であるときは、ストレージコントローラ310は、物理ディスク800から圧縮データをキャッシュせず、ライト要求が書き込みを要求しているデータをキャッシュ記憶部400に記録するだけでもよい。
【0049】
以下、ライトデータによって更新された範囲を含む圧縮単位データを、「ライトデータ」と表記する。
【0050】
次に、ストレージコントローラ310は、ライトデータに対して隣接グループが設定されているかを調べる(ステップS7)。ライトデータに対して隣接グループが設定されていない場合(ステップS7においてNO)、ストレージコントローラ310は、第3のケースの処理(ステップS30)を行う。ライトデータに対して隣接グループが設定されている場合(ステップS7においてYES)、ストレージコントローラ310は、第5のケースの処理(ステップS50)を行う。
【0051】
以下、第1のケースの処理から第5のケースの処理について、詳細に説明する。なお、第2のケースの処理は、キャッシュの破棄の必要が生じたケースにおける処理である。
【0052】
[[第1のケースの処理]]
第1のケースは、いずれの隣接グループにも属さないデータの一部または全部に対するリード要求を、ストレージアレイ装置300が受信するケースである。
【0053】
以下の説明において、キャッシュテーブル410、アドレス変換テーブル510、破棄対象管理テーブル520、隣接グループ管理テーブル530、隣接グループリンク540、および、物理ディスク800におけるデータの配置を、それぞれ
図3から
図8に示す。
【0054】
第1のケースが起こる直前の状況の例(以下、「第1の状況例」とも称す)として、以下の状況を想定する。物理ディスク800には、圧縮データ「A」、「B」および「C」が格納されている(
図8の配置例800a)。圧縮データ「A」、「B」および「C」は、それぞれ、1つの圧縮データに圧縮され得るひとまとまりのデータである圧縮単位データ「A」、「B」および「C」のそれぞれが圧縮された状態のデータである。以下の説明では、圧縮データ「A」と圧縮単位データ「A」とを、区別せずにデータ「A」と呼ぶ。データ「B」およびデータ「C」も同様である。データ「A」、「B」および「C」は、物理ディスク800においては、圧縮率50%で圧縮された状態で格納されている。データに付された記号「A」、「B」および「C」は、説明のために付された記号である。ストレージアレイ装置300は、圧縮されたひとまとまりのデータの各々の範囲を認識できていればよく、必ずしもデータを名前によって識別しなくてもよい。
【0055】
物理ディスク800においては、
図8の配置例800aの通り、データ「A」とデータ「B」とは、互いに離れた位置にある。一方、論理ディスク321においては、データ「A」のアドレスの範囲は0〜31、データ「B」のアドレスの範囲は32〜63、データ「C」のアドレスの範囲は64〜95であるとする。アドレス変換テーブル510には、データ「A」、「B」、および「C」の論理アドレスの範囲と物理アドレスの範囲とに関する情報が記憶されている(
図4のテーブル510a)。ただし、「データ名」は、本実施形態の説明の便宜のために示されているが、実際にアドレス変換テーブル510が「データ名」の情報を有している必要はない。また、アドレス変換テーブル510における「格納ブロック個数」とは、物理ディスク800においてデータが格納されている範囲の長さを、4KBを単位として表した情報である。
【0056】
キャッシュ記憶部400のキャッシュテーブル410には、圧縮伸長制御部312により伸長されたデータ「A」が、ページIDが「0」であるキャッシュデータとして、既に格納されているとする(
図3のテーブル410a)。
【0057】
第1の状況例では、隣接グループは、まだ1つも設定されていないとする。隣接グループ管理テーブル530および隣接グループリンク540は初期状態(すなわち、隣接グループが1つも設定されていない状態)を表す(
図6のテーブル530aおよび
図7のテーブル540a)。また、破棄対象管理テーブル520における各ページIDの破棄対象フラグの値は、「0」(初期値)である(
図5のテーブル520a)。
【0058】
以上説明された第1の状況例において、ストレージアレイ装置300はホスト計算機100からデータ「B」のリード要求を受信したとする。そのような場合、データ「B」には隣接グループが設定されていないので、ストレージコントローラ310は、第1のケースの処理(ステップS10)を行う。以下、第1のケースの処理の流れを、上記の第1の状況例に沿って説明する。
図9は、第1のケースの処理の流れを示すフローチャートである。
【0059】
まず、ストレージコントローラ310は、リードデータをキャッシュする(ステップS11)。具体的には、ストレージコントローラ310は、リードデータを、物理ディスク800から読み出し、圧縮伸長制御部312により伸長する。そして、ストレージコントローラ310は、伸長された後のデータをキャッシュ記憶部400に格納する。キャッシュ記憶部400は、キャッシュテーブル410を、リードデータ「B」が例えばページIDが「1」であるデータとしてキャッシュされていることを示す状態に、更新する(
図3のテーブル410b)。ストレージコントローラ310は、このステップS11の処理の後に、リード要求に対する応答としてデータ「B」をホスト計算機100に送信してもよい(
図2のステップS5)。
【0060】
次に、ストレージコントローラ310は、論理ディスクにおいて、リードデータに隣接するキャッシュデータがあるかを調べる(ステップS12)。すなわち、ストレージコントローラ310は、リードデータの論理アドレスの範囲の直前または直後に位置するデータを特定し、特定されたデータがキャッシュ記憶部400に記憶されているかを調べる。アドレス変換テーブル510(
図4のテーブル510a)によれば、リードデータ「B」の直前にはデータ「A」があり、直後にはデータ「C」がある。そして、キャッシュテーブル410によれば、データ「A」は、キャッシュ記憶部400に記憶されており、データ「C」は、キャッシュ記憶部400に記憶されていない。よって、このような状況例では、ストレージコントローラ310は、論理ディスクにおいてリードデータに隣接するキャッシュデータとして、データ「A」が存在することを検出する(ステップS12においてYES)。この場合、処理はステップS13に移る。以下、ステップS12で検出されるデータを「隣接データ」と呼ぶ。
【0061】
なお、隣接データが無かった場合(ステップS12においてNO)は、ストレージコントローラ310は、ステップS13以降の処理を行わずに処理を終了する。
【0062】
ステップS13では、ストレージコントローラ310は、リードデータと隣接データとが、物理ディスク800において隣接しているかを調べる。
【0063】
図8の配置例800a、および、アドレス変換テーブル510(
図4のテーブル510a)で示される通り、リードデータ「B」の物理アドレスの範囲と隣接データ「A」の物理アドレスの範囲とは、連続しない。すなわち、リードデータ「B」と隣接データ「A」とは、物理ディスク800において隣接していない(ステップS13においてNO)。この場合、処理はステップS14に移る。
【0064】
なお、リードデータと隣接データとが物理ディスク800において隣接している場合(ステップS13においてNO)は、ストレージコントローラ310は、ステップS14以降の処理を行わずに処理を終了してもよい。
【0065】
ステップS14において、ストレージコントローラ310は、隣接データに隣接グループが設定されているかを調べる。第1の状況例では、隣接データ「A」にはいずれの隣接グループも設定されていないため(ステップS14においてNO)、処理はステップS15に移る。
【0066】
ステップS15において、ストレージコントローラ310は、リードデータと隣接データとを含む新たな隣接グループを設定する。具体的には、ストレージコントローラ310は、未使用の隣接グループ番号(たとえば番号「0」)を、リードデータと隣接データとが属する新たな隣接グループの隣接グループ番号として選択する。そして、ストレージコントローラ310は、隣接グループリンク540において、選択された隣接グループ番号にリードデータのページIDと隣接データのページIDとを紐付ける(
図7のテーブル540b)。また、ストレージコントローラ310は、隣接グループ管理テーブル530の選択された隣接グループ番号の欄において、先頭論理アドレス(その隣接グループを構成するデータのうち先頭のデータの、先頭論理アドレス)と、論理範囲(先頭論理アドレスから、その隣接グループを構成するデータのうち最後尾のデータの、論理アドレスの最後尾までの、長さ)を書き込んでもよい。
【0067】
なお、隣接データが隣接グループに属している場合(ステップS14においてYES)は、処理はステップS16に移る。ステップS16では、ストレージコントローラ310は、隣接データが属する隣接グループにリードデータを追加する。すなわち、ストレージコントローラ310は、隣接グループリンク540において、隣接データが属する隣接グループの隣接グループ番号に、リードデータのページIDを紐付ける。また、隣接データが属する隣接グループのデータのうちキャッシュされていないデータがあれば、そのデータをキャッシュする(ステップS17)。
【0068】
ステップS15またはステップS17の処理の後、ストレージコントローラ310は、隣接グループリンク540において、リードデータが属することとなった隣接グループの格納フラグの値を「1」に設定する(ステップS18)。
【0069】
以上をもって、ストレージコントローラ310は、第1のケースの処理を終了する。
【0070】
[補足]
ステップS12の処理で2つの隣接データが検出される場合があり得る。この場合、ストレージコントローラ310は、検出された2つの隣接データのうちいずれか1つを、ステップS13以降の処理で扱う隣接データとして選択してもよい。
【0071】
あるいは、ストレージコントローラ310は、2つの隣接データに隣接グループが設定されていない場合、2つの隣接データとリードデータとを含む新たな隣接グループを設定してもよい。また、ストレージコントローラ310は、2つの隣接データのうち一方に隣接グループが設定されている場合、その隣接グループにリードデータともう一方の隣接データとを追加してもよい。また、ストレージコントローラ310は、2つの隣接データの両方に隣接グループが設定されている場合、2つの隣接グループを統合して、元の隣接グループに属するデータと、リードデータとで構成される、1つの隣接グループを設定してもよい。
【0072】
あるいは、ストレージコントローラ310は、2つの隣接データそれぞれに対し、別々の隣接グループを設定してもよい。なお、この場合、リードデータを含む隣接グループが2つ設定されることとなる。
【0073】
あるいは、ストレージコントローラ310は、2つの隣接データとリードデータとのみで構成される新たな隣接グループを設定してもよい。なお、この場合、2つの隣接データは、それぞれ、2つの隣接グループ(すなわち、元の隣接グループと、新たな隣接グループ)に属することがあり得る。
【0074】
[変形例1]
ストレージコントローラ310は、ステップS12において、直前または直後のどちらかの隣接データのみを検出するように構成されてもよい。
【0075】
[変形例2]
ステップS13の分岐はなくてもよい。すなわち、ストレージコントローラ310は、リードデータと隣接データとが物理ディスク800において隣接しているか否かを問わず、ステップS14以降の処理を行うよう、構成されていてもよい。ただし、リードデータと隣接データとが物理ディスク800において隣接している場合は、ステップS18の処理が省略されてもよい。
【0076】
[[第2のケースの処理]]
キャッシュの破棄の必要が生じたケースを第2のケースとして、第2のケースにおけるストレージアレイ装置300の動作の流れを、
図10のフローチャートを参照しながら説明する。具体的な状況の例(以下、「第2の状況例」とも称す)として、上記第1のケースの説明で例示された一連の処理が終わった後の状況を想定する。
【0077】
キャッシュの破棄の必要が生じた場合とは、例えば、新たなキャッシュデータをキャッシュ記憶部400に記憶させるための領域が不足する場合である。この場合、ストレージコントローラ310は、まず、破棄対象フラグの値が「0」であるキャッシュデータの中から、削除対象を決定する(ステップS21)。
【0078】
ストレージコントローラ310は、例えば、LRU(Least Recently Used)方式に則り、削除対象を決定する。すなわち、ストレージコントローラ310は、最後に使用されて(例えば、読み出されることと更新されることとを含む)からの経過時間が最も長いキャッシュデータを、削除対象として決定する。
【0079】
削除対象を決定した後、ストレージコントローラ310は、削除対象に隣接グループが設定されているかを調べる(ステップS22)。例えば、隣接グループリンク540(
図7のテーブル540b)において、削除対象のページIDが、いずれかの隣接グループ番号に紐付けられていたら、削除対象に隣接グループが設定されていることがわかる。
【0080】
削除対象に隣接グループが設定されていなければ(ステップS22においてNO)、ストレージコントローラ310は、削除対象をキャッシュ記憶部400から削除し(ステップS92)、処理を終了してよい。
【0081】
削除対象に隣接グループが設定されている場合は(ステップS22においてYES)、ストレージコントローラ310は、破棄対象管理テーブル520における、その削除対象の破棄対象フラグの値を「1」に設定する(ステップS23)。ストレージコントローラ310は、隣接グループリンク540において隣接グループに紐付くキャッシュデータ全ての破棄対象フラグの値が「1」になるまで、その隣接グループを構成するキャッシュデータの削除を行わない。
【0082】
破棄対象フラグの値が「1」に設定された削除対象が属する隣接グループに紐付くキャッシュデータのいずれかの破棄対象フラグの値が「0」である場合、その隣接グループに紐付くキャッシュデータはまだ削除されない。このような場合は、ストレージコントローラ310はステップS21の処理を再び行い、新たな削除対象を決定してもよい(ステップS24においてNO)。
【0083】
なお、破棄対象フラグの値が「1」であるキャッシュデータをリードの対象とするリード要求が新たにホスト計算機100によりなされた場合、ストレージコントローラ310は、破棄対象フラグの値を「0」に設定してもよい。
【0084】
図5のテーブル520bは、ページIDが「0」であるキャッシュデータと、ページIDが「1」であるキャッシュデータとが、削除対象になった場合の、破棄対象管理テーブル520の例を示す。上記2つのページIDに関連づけられる破棄対象フラグの値が「1」になっている。
【0085】
図5のテーブル540bのように、隣接グループリンク540において或る隣接グループに紐付くキャッシュデータ全ての破棄対象フラグの値が「1」になった場合(ステップS24においてYES)、ストレージコントローラ310は、隣接グループリンク540においてその隣接グループの格納フラグが「1」であるかを調べる(ステップS25)。
【0086】
隣接グループの格納フラグが「1」であれば(ステップS25においてYES)、ストレージコントローラ310は、その隣接グループに紐付くキャッシュデータを対象とする、書き戻し処理を行う(ステップS26)。この書き戻し処理については後で詳述する。隣接グループの格納フラグが「1」でなければ(ステップS25においてNO)、ストレージコントローラ310は、ステップS26の処理を行わなくてよい。
【0087】
ステップS26の処理の後、またはステップS25の判定の結果が「NO」であった場合は、ストレージコントローラ310は、キャッシュ記憶部400から、書き戻し処理が行われたキャッシュデータを削除する(ステップS27)(
図3のテーブル410c)。
【0088】
そして、ストレージコントローラ310は、破棄対象管理テーブル520、および隣接グループリンク540から、削除したキャッシュデータの情報を消去する(ステップS28)。つまり、ストレージコントローラ310は、破棄対象管理テーブル520において、削除したキャッシュデータのページIDの破棄対象フラグの値を初期値の「0」にする(
図5のテーブル520c)。また、ストレージコントローラ310は、隣接グループリンク540を、対象の隣接グループの格納フラグの値が初期値の「0」である状態、および、対象の隣接グループにはどのデータも紐付けられていない状態にする(
図7のテーブル540a)。
【0089】
以上をもって、ストレージコントローラ310は、第2のケースの処理を終了する。
【0090】
[書き戻し処理の詳細]
ステップS26の、対象のキャッシュデータをディスクドライブ320へ格納する書き戻し処理について、
図11のフローチャートを参照しながら詳述する。
【0091】
まず、ストレージコントローラ310内の書き戻し部313は、書き戻し処理の対象のキャッシュデータを論理アドレス順に並べる(ステップS261)。隣接グループ番号「0」に紐付くデータであるデータ「A」およびデータ「B」が書き戻し処理の対象である場合、書き戻し部313は、アドレス変換テーブル510(
図4のテーブル510a)の先頭論理アドレスの情報に基づき、2つのデータを、データ「A」、データ「B」の順に並べる。
【0092】
次に、書き戻し部313は、対象のキャッシュデータが属する隣接グループの格納範囲が設定されているかを調べる(ステップS262)。すなわち、書き戻し部313は、隣接グループ管理テーブル530において、対象のキャッシュデータが属する隣接グループ(以下、「対象隣接グループ」とも表記する)の先頭ブロックアドレスとブロック長が設定されているかを調べる。本実施形態では、先頭ブロックアドレスとブロック長との情報は、後述するステップS265の処理で初めて入力される情報であるから、対象隣接グループの先頭ブロックアドレスとブロック長とが設定されている場合とは、すなわち、対象隣接グループに属する少なくとも一部のキャッシュデータが以前に対象隣接グループに属している状態で書き戻し処理を受けている場合に相当する。対象隣接グループの先頭ブロックアドレスとブロック長とが設定されていない場合とは、すなわち、対象隣接グループに属する全てのキャッシュデータが、対象隣接グループに属してからは一度も書き戻し処理を受けていない場合に相当する。第2の状況例では、隣接グループ管理テーブル530は
図6のテーブル530aの状態であり、格納範囲は設定されていないので、ステップS262の判定の結果は「NO」となる。
【0093】
ステップS262の判定の結果が「NO」である場合、書き戻し部313はステップS264の処理(後述)を行う。
【0094】
なお、ステップS262の判定の結果が「YES」である場合、書き戻し部313は、書き戻し処理の対象となったキャッシュデータの圧縮後のデータ(以下、「圧縮後書き戻しデータ」と表記する)が、元の圧縮データの格納範囲に収まるかを判定する(ステップS263)。
【0095】
元の圧縮データとは、ディスクドライブ320に格納されている、対象のキャッシュデータのキャッシュ前のデータに相当する圧縮データのことである。元の圧縮データの格納範囲は、アドレス変換テーブル510の「先頭物理アドレス」および「格納ブロック個数」によって示されている。例えば、
図4のテーブル510aを参照すると、元の圧縮データ「A」の格納範囲は、番号「112」から4ブロック分(16KB分)の範囲である。
【0096】
圧縮後書き戻しデータのサイズは、対象のキャッシュデータが元の圧縮データから更新されていない場合は、元の圧縮データのサイズと同じである。対象のキャッシュデータが元の圧縮データから更新されている場合は、ストレージコントローラ310は、圧縮伸長制御部312により対象のキャッシュデータを圧縮し、その圧縮後のデータのサイズを特定すればよい。圧縮後のデータのサイズを特定する処理を行うタイミングは問わない。
【0097】
一例として、圧縮後書き戻しデータが、或る隣接グループを構成するキャッシュデータの全部に相当する場合、書き戻し部313は、隣接グループ管理テーブル530において示されたその隣接グループのブロック長と、圧縮後書き戻しデータのサイズとを比較すればよい。
【0098】
ステップS263の判定の結果が「NO」である場合、書き戻し部313は、ステップS264の処理を行う。
【0099】
ステップS264では、書き戻し部313は、圧縮後書き戻しデータの新たな格納範囲を決定する。書き戻し部313は、例えば、物理ディスクにおける、圧縮後書き戻しデータが収まる空の領域を任意に特定し、その領域を新たな格納範囲として決定してもよい。圧縮後書き戻しデータの元の圧縮データの格納範囲の直前および直後の少なくともいずれかが空であり、圧縮後書き戻しデータが収まる長さまでその格納範囲を拡張することが可能である場合は、書き戻し部313は、その格納範囲を拡張した範囲を新たな格納範囲として決定してもよい。
【0100】
ステップS264の処理により新たな格納範囲が決定されたら、ストレージコントローラ310は、隣接グループ管理テーブル530を更新する(ステップS265)。具体的には、ストレージコントローラ310は、隣接グループ管理テーブル530における、対象のキャッシュデータが属する隣接グループの、先頭物理アドレスの情報と、ブロック長の情報とを、決定された新たな格納範囲に基づいて書き込む。対象の隣接グループを構成する全てのデータが圧縮後書き戻しデータである場合は、ストレージコントローラ310は、例えば、先頭物理アドレスとして、決定された格納範囲の先頭アドレスを書き込み、ブロック長として、決定された格納範囲の長さを書き込む。ブロック長は、他のデータの格納範囲に重ならない範囲であれば、決定された格納範囲の長さを超える長さでもよい。なお、既に、先頭物理アドレスの情報と、ブロック長の情報とが書き込まれている場合は、ストレージコントローラ310は、圧縮後書き戻しデータの格納範囲が元の格納範囲から変化することによって変化する情報のみを、更新すればよい。
【0101】
また、ストレージコントローラ310は、先頭論理アドレス(対象隣接グループを構成するデータのうち先頭のデータの、先頭論理アドレス)と、論理範囲(対象隣接グループを構成するデータの各々の、論理ディスク上で占める範囲の合計)を書き込み、または更新する。
【0102】
なお、ステップS263の判定の結果が「YES」である場合は、書き戻し部313は、元の圧縮データの格納範囲を、圧縮後書き戻しデータの格納範囲として決定する(ステップS266)。この場合、書き戻し部313は、ステップS264およびステップS265の処理を行わなくてよい。
【0103】
格納範囲が決定されたら、書き戻し部313は、物理ディスク800における、元の圧縮データが格納されている領域を解放する(ステップS267)。すなわち、書き戻し部313は、元の圧縮データを物理ディスク800から消去する。言い換えれば、書き戻し部313は、元の圧縮データが格納されている領域に、無効データを書き込む。
【0104】
圧縮伸長制御部312が対象のキャッシュデータを圧縮する(ステップS268)。そして、書き戻し部313は、圧縮後のデータである圧縮後書き戻しデータを、ステップS264またはステップS266にて決定された格納範囲に格納する(ステップS269)。例として、物理ディスク800におけるデータの配置は、
図8の配置例800bのようになる。
【0105】
また、ストレージコントローラ310は、圧縮後書き戻しデータの格納範囲に従って、アドレス変換テーブル510を更新する(ステップS270)。第2の状況例では、データ「A」とデータ「B」との格納範囲が変化したので、ストレージコントローラ310は、アドレス変換テーブル510におけるデータ「A」およびデータ「B」の「先頭物理アドレス」の値を、それぞれのデータの新たな開始位置の番号に更新する(
図4のテーブル510b)。
【0106】
以上が、ステップS26の書き戻し処理の詳細例である。
【0107】
[[第3のケースの処理]]
第3のケースは、隣接グループを構成しないデータの一部または全部に対するライト要求を、ストレージアレイ装置300が受信するケースである。例えば、上記第1のケースの初期状態において、データ「B」の一部または全部に対するライト要求をストレージアレイ装置300が受信するケースが、この第3のケースに相当する。
【0108】
第3のケースの処理(ステップS30)の流れを、
図12のフローチャートを参照しながら説明する。第3のケースの処理の流れは、第1のケースの処理に類似する。
【0109】
ストレージコントローラ310は、ライト要求に従って対象のデータを更新した後(
図2のステップS6)、論理ディスクにおいて、更新後のデータに隣接するキャッシュデータがあるかを調べる(ステップS31)。以下、ステップS31で検出されるデータを「隣接データ」と呼ぶ。
【0110】
隣接データが無かった場合(ステップS31においてNO)は、ストレージコントローラ310は、ステップS32以降の処理を行わずに処理を終了する。
【0111】
隣接データがあった場合(ステップS31においてYES)は、ストレージコントローラ310は、更新後のデータと隣接データとが、物理ディスク800において隣接しているかを調べる(ステップS32)。
【0112】
更新後のデータと隣接データとが、物理ディスク800において隣接している場合(ステップS32においてYES)は、ストレージコントローラ310は、ステップS33以降の処理を行わずに処理を終了する。
【0113】
更新後のデータと隣接データとが、物理ディスク800において隣接していない場合(ステップS32においてNO)、次にストレージコントローラ310は、隣接データに隣接グループが設定されているかを調べる(ステップS33)。
【0114】
隣接データ「A」に隣接グループが設定されていない場合(ステップS33においてNO)、ストレージコントローラ310は、ライトデータと隣接データとを含む新たな隣接グループを設定する(ステップS34)。
【0115】
隣接データ「A」に隣接グループが設定されている場合(ステップS33においてYES)、ストレージコントローラ310は、隣接データが属する隣接グループにライトデータを追加する(ステップS35)。すなわち、ストレージコントローラ310は、隣接グループリンク540において、隣接データが属する隣接グループの隣接グループ番号に、ライトデータのページIDを紐付ける。また、ストレージコントローラ310は、隣接データが属する隣接グループに属するデータのうち、キャッシュされていないデータをキャッシュする(ステップS36)
ステップS35またはステップS36の処理の後、ストレージコントローラ310は、隣接グループリンク540において、ライトデータが属することとなった隣接グループの格納フラグの値を「1」に設定する(ステップS37)。
【0116】
以上をもって、ストレージコントローラ310は第3のケースの処理を完了する。
【0117】
[[第4のケースの処理]]
第4のケースは、隣接グループを構成するデータの一部または全部に対するリード要求を、ストレージアレイ装置300が受信するケースである。
【0118】
第4のケースが発生する直前の状況の例(以下、「第4の状況例」とも称す)として、上記第2のケースで例示された一連の処理が終わった後の状況を想定する。すなわち、データ「A」およびデータ「B」は、隣接グループ番号が「0」である隣接グループに属し、物理ディスク800上で並んで格納されているとする。
【0119】
キャッシュテーブル410は
図3のテーブル410cの状態であり、アドレス変換テーブル510は
図4のテーブル510bの状態であり、破棄対象管理テーブル520は
図5のテーブル520cの状態であり、隣接グループ管理テーブル530は
図6のテーブル530bの状態であり、隣接グループリンク540は
図7のテーブル540aの状態であり、物理ディスク800におけるデータの配置は
図8の配置例800bの状態であるとする。
【0120】
上記のような第4の状況例で、ホスト計算機100から、データ「B」を読み出す要求を含むリード要求が発信されたとする。
図4のテーブル510bおよび
図6のテーブル520bに示されるように、データ「B」は、隣接グループ番号が「0」である隣接グループの格納範囲に含まれるので、ストレージコントローラ310は、第4のケースの処理(ステップS40)を行う。以下、
図13のフローチャートを参照しながら第4のケースの処理の流れを説明する。
【0121】
まず、ストレージコントローラ310は、リードデータが属する隣接グループに属するデータをキャッシュする(ステップS41)。ストレージコントローラ310は、隣接グループ管理テーブル530において「先頭アドレス」の情報と「ブロック長」の情報とによって示される範囲を、物理ディスク800から読み出せばよい。第4の状況例では、これにより、リードデータ「B」と同一の隣接グループに属するデータであるデータ「A」が、キャッシュ記憶部400に記憶される。
【0122】
ストレージコントローラ310は、このステップS41の処理の後に、リード要求に対する応答としてデータ「B」をホスト計算機100に送信してもよい(
図2のステップS5)。
【0123】
そして、ストレージコントローラ310は、隣接グループリンク540を更新する(ステップS42)。具体的には、ストレージコントローラ310は、隣接グループリンク540における、リードデータが属する隣接グループの隣接グループ番号に、その隣接グループを構成するデータ(読み出されたデータ)を紐付ける。
【0124】
なお、格納フラグの値は「0」のままでよい。
【0125】
また、ストレージコントローラ310は、ステップS42の処理でキャッシュされた、リードデータ以外のデータに対しては、破棄対象フラグの値を「1」に設定してもよい。
【0126】
以上をもって、第4のケースにおけるストレージアレイ装置300の処理は完了する。
【0127】
[補足1] リードデータが複数のグループに属している場合
あるデータが複数のグループに属することがあり得る実施形態では、ステップS41においてリードデータが属する隣接グループが複数検出される場合があり得る。そのような場合、例えば、ストレージコントローラ310は、検出された隣接グループのうちいずれか1つを、第4のケースの処理の対象となる隣接グループとして選択すればよい。
【0128】
隣接グループの選択にあたっては、優先順位を決定する任意のアルゴリズムに基づいて選択すればよい。上記のアルゴリズムは、例えば、構成するデータの使用頻度の平均が高いグループほど優先度を高く評価するアルゴリズム、構成するデータのうち最後に使用されたデータが最後に使用されてからの経過時間が短いほど優先度を高く評価するアルゴリズム、データ長が短いほど(または長いほど)優先度を高く評価するアルゴリズム、またはそれらのアルゴリズムの組み合わせでもよい。
【0129】
[補足2] 読み出すデータの長さ
隣り合うデータを際限なくグループ化すると、ステップS42の処理においてキャッシングの対象となるデータが長すぎる場合があり得る。
【0130】
そこで、ストレージコントローラ310は、ステップS42の処理において、読み出す範囲を絞ってもよい。例えば、ストレージコントローラ310は、隣接グループを構成する圧縮データのうち所定の長さの範囲以内の、連続する圧縮データの組を、読み出してもよい。
【0131】
例えば、ストレージコントローラ310は、リードデータとリードデータより前のデータとを含む、所定の長さの範囲のデータを読み出してもよい。あるいは、リードデータの格納範囲と、リードデータより前の所定の長さの範囲のデータを、読み出してもよい。
【0132】
[[第5のケースの処理]]
第5のケースは、隣接グループを構成するデータの一部または全部に対するライト要求を、ストレージアレイ装置300が受信するケースである。第5のケースの処理(ステップS50)の流れを、
図14のフローチャートを参照しながら説明する。
【0133】
ストレージコントローラ310は、ライト要求の対象のデータ(以下、「ライトデータ」と呼ぶ)をライト要求に従って更新した(
図2のステップS6)後、ライトデータの更新後のデータを圧縮した場合のデータのサイズを特定する(ステップS51)。ストレージコントローラ310は、圧縮伸長制御部312により更新後のデータを圧縮し、圧縮後のデータのサイズを特定すればよい。ストレージコントローラ310は、圧縮後のデータをキャッシュ記憶部400に一時的に格納してもよい。
【0134】
次に、ストレージコントローラ310は、更新後のデータの圧縮後のデータが元の圧縮データのサイズを超えるかを調べる(ステップS52)。
【0135】
更新後のデータの圧縮後のデータが元の圧縮データのサイズを超えないならば、更新後のデータは、元の圧縮データの格納範囲に収まるはずである。そのような場合(ステップS52においてNO)、隣接グループ管理テーブル530の内容は変更されなくてよい。また、ストレージコントローラ310は、ライトデータが属する隣接グループを構成するデータを、並べ直す必要はない。したがって、処理は後述のステップS57に移る。
【0136】
更新後のデータの圧縮後のデータが元の圧縮データのサイズを超える場合(ステップS52においてYES)は、ライトデータが属する隣接グループの少なくとも一部のデータの格納範囲が変更される必要がある。この場合、ストレージコントローラ310は、更新後のデータの圧縮後のデータが元の圧縮データのサイズを超える分(以下、「超過分」)の空き領域が、元の圧縮データの格納範囲の直前または直後にあるかを調べる(ステップS53)。
【0137】
超過分の空き領域が元の圧縮データの領域の直後にある場合(ステップS53において「直後にある」)、ストレージコントローラ310は、圧縮データの格納範囲を、後ろに拡張すればよい。この場合、ライトデータよりも物理ディスク上で先(前、早い方)にあるデータを移動させる必要はない。ストレージコントローラ310は、ライトデータと同一の隣接グループに属するデータのうち、論理ディスク上で更新後のデータより後ろにある、キャッシュされていないデータをキャッシュする(ステップS54)。
【0138】
超過分の空き領域が元の圧縮データの領域の直前にある場合(ステップS53において「直前にある」)、ストレージコントローラ310は、圧縮データの格納範囲を、前側に拡張すればよい。この場合、ライトデータよりも物理ディスク上で後ろにあるデータを移動させる必要はない。ストレージコントローラ310は、ライトデータと同一の隣接グループに属するデータのうち、論理ディスク上で更新後のデータより先(前、早い方)にある、キャッシュされていないデータをキャッシュする(ステップS55)。
【0139】
超過分の空き領域が元の圧縮データの領域の直前にも直後にもない場合(ステップS53において「ない」)、ライトデータが属する隣接グループに属するデータ全体を移動させる必要がある。ストレージコントローラ310は、ライトデータと同一の隣接グループに属する、キャッシュされていないデータをキャッシュする(ステップS56)。
【0140】
ステップS54、ステップS55またはステップS56の処理の後は、処理はステップS57に移る。
【0141】
ステップS57では、ストレージコントローラ310は、隣接グループリンク540における、ライトデータが属する隣接グループの隣接グループ番号に、ライトデータと、ステップS54〜ステップS56の処理でキャッシュされたデータ(ある場合)とを、紐付ける。
【0142】
そして、ストレージコントローラ310は、隣接グループリンク540における、ライトデータが属する隣接グループの格納フラグの値を「1」に設定する(ステップS58)。
【0143】
以上をもって、第5のケースにおけるストレージアレイ装置300の処理は完了する。
【0144】
[具体例]
第5のケースが発生する状況の例として、上記第2のケースで例示された一連の処理が終わった後の状況を想定する。すなわち、データ「A」およびデータ「B」は、隣接グループ番号が「0」である隣接グループに属し、物理ディスク800上で並んで格納されているとする。
【0145】
キャッシュテーブル410は
図15のテーブル410c、アドレス変換テーブル510は
図16のテーブル510c、隣接グループ管理テーブル530は
図17のテーブル530c、隣接グループリンク540は
図18のテーブル540c、物理ディスク800におけるデータの配置は
図19の配置例800c、の状態であるとする。
【0146】
上記のような状況で、ホスト計算機100から、データ「B」を更新する要求を含むライト要求が発信されたとする。この場合のストレージアレイ装置300の処理の流れを説明する。
【0147】
ストレージアレイ装置300がライト要求を受信する(ステップS1)と、ストレージコントローラ310は、データ「B」をキャッシュし、キャッシュされているデータ「B」を更新する(ステップS6)。隣接グループ管理テーブル530によれば、データ「B」に対して、隣接グループ番号が「0」である隣接グループが設定されているので(ステップS7においてYES)、ストレージコントローラ310は、更新後のデータ「B」を圧縮した場合のデータのサイズを特定する(ステップS51)。例として、ストレージコントローラ310は、圧縮伸長制御部312により更新後のデータを圧縮し、圧縮後のデータ「B’」を、キャッシュテーブル410に、ページIDが「1」のデータとして格納する(
図15のテーブル410d)。そして、ストレージコントローラ310は、圧縮データ「B’」のサイズを特定する。圧縮データ「B’」のサイズは、24KBであるとする。
【0148】
更新後のデータの圧縮後のデータが元の圧縮データのサイズを超えるので(ステップS52においてYES)、ストレージコントローラ310は、超過分、すなわち、データ「B’」と元の圧縮データ「B」との差(8KB)の分の空き領域が、元の圧縮データの格納範囲の直前または直後にあるかを調べる(ステップS53)。
【0149】
8KBの空き領域が元の圧縮データの領域の直後にあるとする(ステップS53において「直後にある」)。この場合、処理はステップS54に移るが、データ「B」は隣接グループの最後尾のデータであるので、キャッシュすべきデータはない。
【0150】
そして、ストレージコントローラ310は、データ「B」のページIDを、隣接グループ番号「0」に紐付ける(ステップS57)。また、ストレージコントローラ310は、隣接グループ番号が「0」である隣接グループの格納フラグの値を「1」に設定する(ステップS58)。隣接グループリンク540は、
図18のテーブル540dの状態になる。
【0151】
この後、データ「A」がキャッシュされることなく、データ「B」の破棄対象フラグが「1」になった場合、ステップS26の書き戻し処理により、データ「B」は圧縮され、物理ディスク800へ格納される。ストレージコントローラ310は、ステップS264の処理により、例えば物理アドレス番号「144」から「167」までの範囲を、データ「B」の新たな格納範囲として決定する。ステップS265の処理により、隣接グループ管理テーブル530は、例えば
図17のテーブル530dの状態に更新される。ステップS269の処理により、圧縮されたデータ「B」が、
図19の配置例800dで示されるように物理ディスク800へ格納される。また、ステップS270の処理により、アドレス変換テーブル510は、
図16のテーブル510dの状態になる。
【0152】
[別の具体例]
上記具体例において、ステップS53の判定の結果が「ない」であった場合の処理の流れを説明する。この場合、処理はステップS56に移り、ストレージコントローラ310は、データ「A」をキャッシュする。
【0153】
そして、ストレージコントローラ310は、データ「B」のページIDと、データ「A」のページIDとを、隣接グループ番号「0」に紐付ける(ステップS57)。また、ストレージコントローラ310は、隣接グループ番号が「0」である隣接グループの格納フラグの値を「1」に設定する(ステップS58)。
【0154】
この後、データ「A」およびデータ「B」の破棄対象フラグがいずれも「1」になった場合、ステップS26の書き戻し処理により、データ「A」およびデータ「B」は圧縮され、物理ディスク800へ格納される。ステップS264の処理により、例えば物理アドレス番号「1056」から「1071」の範囲がデータ「A」の新たな格納範囲として決定され、「1072」から「1095」までの範囲がデータ「B」の新たな格納範囲として決定される。
【0155】
<効果>
第1の実施形態のストレージアレイ装置300によれば、書き戻し処理により、キャッシュされているデータのうち、論理アドレスが隣り合うデータ同士が、物理アドレスにおいても隣り合うようになる。これにより、データの読み出しに係る性能が向上する。その理由は、論理アドレスが隣り合う(いわば、同時にリード要求の対象となる可能性が高い)複数のデータを、一度に(すなわち、一回のシークで連続的に)読み出すことができるようになるからである。
【0156】
書き戻し処理は、LRU方式に基づいて、対象のデータのいずれも破棄対象となったタイミングで行われるので、この書き戻し処理は、上位装置であるホスト計算機100からの要求とは競合しない。すなわち、要求に対する応答の性能の低下を伴うことなくデータの並べ替えは行われる。
【0157】
なお、第1のケースで説明されたように、ストレージコントローラ310は、リード要求のみがなされたデータに対しても書き戻し処理を行うので、ダーティデータに対してのみライトバックを行う場合と比べ、論理アドレスと物理アドレスとのいずれでも隣り合うデータはより多くなると考えられる。
【0158】
第4のケースにおける処理によれば、リードデータと隣り合うデータが、リードデータと隣り合うデータに対する操作の要求が発せられる前に、キャッシュされる。これにより、論理アドレス上で隣り合うデータは関連性が高い可能性が高いので、キャッシュヒット率が向上する。
【0159】
特に、シンクライアントのような、頻繁に使用されるデータ群がある場合において、ホスト計算機100に対する応答の性能の向上は顕著となる。頻繁に使用されるデータ群に隣接グループが設定されることで、そのデータ群を構成するデータは物理ディスクにおいて連続的に配置されるようになり、そのデータ群を構成する複数のデータを一度に読み出す場合にかかる時間が、短くなる。そして、第4のケースの処理により、そのデータ群を構成するデータが、リード要求を受ける前に予め読み出されれば、要求に対する応答がさらに早くなる。
【0160】
<<第2の実施形態>>
本発明の一実施形態に係るストレージコントローラ31について説明する。ストレージコントローラ31は、論理ディスクが構築されたストレージからのデータの読み出し、および該ストレージへのデータの書き込みを行うモジュールである。
図20は、ストレージコントローラ31の構成を示すブロック図である。ストレージコントローラ31は、キャッシュ処理部32と、設定部33と、決定部34と、書き込み部35と、を備える。
【0161】
キャッシュ処理部32は、物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行う。物理ディスクはストレージにおいてデータを記憶している実体である。キャッシュ記憶部は、データをキャッシュとして記憶する記憶領域である。第1の実施形態における圧縮伸長制御部312は、キャッシュ処理部32の一例である。
【0162】
設定部33は、キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ物理ディスクにおいて隣り合っていない、データの組を特定する。そして、設定部33は、特定されたデータの組を含むグループを設定する。
【0163】
論理ディスクにおいて2つのデータが隣り合うとは、2つのデータのそれぞれに設定されている論理アドレスの範囲が連続することである。
【0164】
物理ディスクにおいて2つのデータが隣り合うとは、2つのデータのそれぞれが格納される場所として設定されているブロックの範囲が、連続することである。
【0165】
第1の実施形態における第1のケースの処理は、設定部33による上記の処理の一例である。
【0166】
決定部34は、グループに属するデータのうちキャッシュされているデータ全てがキャッシュ記憶部から削除される対象となったことを契機として、決定処理を行う。決定処理では、決定部34は、物理ディスクにおいて該グループに属するデータ全てが連続的に配置されるように、物理ディスクにおける、削除される対象となったデータを格納する範囲を決定する。第1の実施形態における「書き戻し処理」のステップS261からステップS266の処理は、上記決定処理の一例である。
【0167】
書き込み部35は、決定部34により決定された範囲に、削除される対象となったデータを書き込む。第1の実施形態における「書き戻し処理」のステップS268およびステップS269の処理は、書き込み部35による処理の一例である。
【0168】
ストレージコントローラ31による処理の流れを、
図21のフローチャートを参照しながら説明する。
【0169】
まず、キャッシュ処理部32が、物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行う(ステップS101)。キャッシュ処理を行う契機は、例えば、ホスト計算機等の上位装置からリード要求またはライト要求を受けることである。
【0170】
次に、設定部33が、キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ物理ディスクにおいて隣り合っていない、データの組を特定する(ステップS102)。そして、設定部33は、特定されたデータの組を含むグループを設定する(ステップS103)。
【0171】
次に、グループに属するデータのうちキャッシュされているデータ全てがキャッシュ記憶部から削除される対象となったことを契機として(ステップS104においてYES)、決定部34が、物理ディスクにおいて該グループに属するデータ全てが連続的に配置されるように、物理ディスクにおける、削除される対象となったデータを格納する範囲を決定する。
【0172】
そして、書き込み部35が、決定部34により決定された範囲に、削除される対象となったデータを書き込む(ステップS105)。
【0173】
<実施形態の各部を実現するハードウェアの構成>
以上で説明された本発明の各実施形態において、各装置の各構成要素を示すブロックは、機能単位で示されている。しかし、構成要素を示すブロックは、各構成要素が別個のモジュールにより構成されることを必ずしも意味していない。
【0174】
各構成要素の処理は、たとえば、コンピュータシステムが、コンピュータ読み取り可能な記憶媒体により記憶された、その処理をコンピュータシステムに実行させるプログラムを、読み出し、実行することによって、実現されてもよい。「コンピュータ読み取り可能な記憶媒体」は、たとえば、光ディスク、磁気ディスク、光磁気ディスク、および不揮発性半導体メモリ等の可搬媒体、ならびに、コンピュータシステムに内蔵されるROM(Read Only Memory)およびハードディスク等の記憶装置である。「コンピュータ読み取り可能な記憶媒体」は、コンピュータシステム内部の揮発性メモリのようにプログラムを一時的に保持可能なもの、および、ネットワークや電話回線等の通信回線のように、プログラムを伝送するものも含む。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよく、更に前述した機能をコンピュータシステムにすでに記憶されているプログラムとの組み合わせで実現できるものであってもよい。
【0175】
「コンピュータシステム」とは、一例として、
図22に示されるようなコンピュータ900を含むシステムである。コンピュータ900は、以下のような構成を含む。
・1つまたは複数のCPU(Central Processing Unit)901
・ROM902
・RAM(Random Access Memory)903
・RAM903へロードされるプログラム904Aおよび記憶情報904B
・プログラム904Aおよび記憶情報904Bを格納する記憶装置905
・記憶媒体906の読み書きを行うドライブ装置907
・通信ネットワーク909と接続する通信インタフェース908
・データの入出力を行う入出力インタフェース910
・各構成要素を接続するバス911
たとえば、各実施形態における各装置の各構成要素は、その構成要素の機能を実現するプログラム904AをCPU901がRAM903にロードして実行することで実現される。各装置の各構成要素の機能を実現するプログラム904Aは、例えば、予め、記憶装置905やROM902に格納される。そして、必要に応じてCPU901がプログラム904Aを読み出す。記憶装置905は、たとえば、ハードディスクである。プログラム904Aは、通信ネットワーク909を介してCPU901に供給されてもよいし、予め記憶媒体906に格納されており、ドライブ装置907に読み出され、CPU901に供給されてもよい。なお、記憶媒体906は、たとえば、光ディスク、磁気ディスク、光磁気ディスク、および不揮発性半導体メモリ等の、可搬媒体である。
【0176】
各装置の実現方法には、様々な変形例がある。例えば、各装置は、構成要素毎にそれぞれ別個のコンピュータ900とプログラムとの可能な組み合わせにより実現されてもよい。また、各装置が備える複数の構成要素が、一つのコンピュータ900とプログラムとの可能な組み合わせにより実現されてもよい。
【0177】
また、各装置の各構成要素の一部または全部は、その他の汎用または専用の回路、コンピュータ等やこれらの組み合わせによって実現されてもよい。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。
【0178】
各装置の各構成要素の一部または全部が複数のコンピュータや回路等により実現される場合には、複数のコンピュータや回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、コンピュータや回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【0179】
上記実施形態の一部または全部は以下の付記のようにも記載され得るが、以下には限られない。
【0180】
<<付記>>
[付記1]
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ手段と、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定手段と、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定手段と、
前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み手段と、
を備えるストレージコントローラ。
[付記2]
前記データの各々は、個別に圧縮されることが可能な単位のデータであり、
前記書き込み手段は、前記削除される対象となったデータの各々を個別に圧縮し、圧縮された各々のデータを前記決定された範囲に格納する、
付記1に記載のストレージコントローラ。
[付記3]
前記キャッシュ手段は、前記ストレージコントローラが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
付記1または2に記載のストレージコントローラ。
[付記4]
前記設定手段は、前記ストレージコントローラがいずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
付記1から3のいずれか一つに記載のストレージコントローラ。
[付記5]
前記キャッシュ手段は、前記ストレージコントローラが前記グループに属するデータの一部のデータを更新するライト要求を受信した場合に、
前記ライト要求の対象のデータを更新した後のデータのサイズと、当該ライト要求の対象のデータの更新前のデータのサイズと、の比較に基づいて、前記グループに含まれるデータからキャッシュするデータを決定し、決定されたデータをキャッシュする、
付記1から4のいずれか一つに記載のストレージコントローラ。
[付記6]
付記1から5のいずれか一つに記載のストレージコントローラと、
前記キャッシュ記憶部と、
前記物理ディスクを含み、前記論理ディスクが構築されたディスクドライブと、
を含むストレージアレイ装置。
[付記7]
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行い、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定し、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定し、
前記決定された範囲に、前記削除される対象となったデータを書き込む、
データ格納方法。
[付記8]
前記データの各々は、個別に圧縮および伸長されることが可能な単位のデータであり、
前記データ格納方法は、前記削除される対象となったデータの各々を個別に圧縮し、圧縮された各々のデータを前記決定された範囲に格納する、
付記7に記載のデータ格納方法。
[付記9]
前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
付記7または8に記載のデータ格納方法。
[付記10]
いずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
付記7から9のいずれか一つに記載のデータ格納方法。
[付記11]
前記グループに属するデータの一部のデータを更新するライト要求を受信した場合に、
前記ライト要求の対象のデータを更新した後のデータのサイズと、当該ライト要求の対象のデータの更新前のデータのサイズと、の比較に基づいて、前記グループに含まれるデータからキャッシュするデータを決定し、決定されたデータをキャッシュする、
付記7から10のいずれか一つに記載のデータ格納方法。
[付記12]
物理ディスクに記憶されたデータをキャッシュ記憶部に格納するキャッシュ処理を行うキャッシュ処理と、
前記キャッシュ記憶部に記憶されたデータのうち、論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合っていない、データの組を特定し、特定されたデータの組を含むグループを設定する設定処理と、
前記グループに属するデータのうちキャッシュされているデータ全てが前記キャッシュ記憶部から削除される対象となったことを契機として、前記物理ディスクにおいて前記グループに属するデータ全てが連続的に配置されるように、前記物理ディスクにおける、前記削除される対象となったデータを格納する範囲を決定する決定処理と、
前記決定された範囲に、前記削除される対象となったデータを書き込む書き込み処理と、
をコンピュータに実行させるプログラム。
[付記13]
前記データの各々は、個別に圧縮および伸長されることが可能な単位のデータであり、
前記書き込み処理は、前記削除される対象となったデータの各々を個別に圧縮し、圧縮された各々のデータを前記決定された範囲に格納する、
付記12に記載のプログラム。
[付記14]
前記キャッシュ処理は、前記コンピュータが前記グループに属するデータの一部のデータを読み出すリード要求を受信した場合に、前記グループに属する、当該リード要求の対象でないデータも前記キャッシュ記憶部に格納する、
付記12または13に記載のプログラム。
[付記15]
前記設定処理は、前記コンピュータがいずれの前記グループにも属さないデータを読み出すリード要求を受信した場合、前記キャッシュ記憶部に記憶された、当該リード要求の対象のデータと前記論理ディスクにおいて隣り合い、かつ前記物理ディスクにおいて隣り合う、データを特定し、特定されたデータと当該リード要求の対象のデータとを含むグループを設定する、
付記12から14のいずれか一つに記載のプログラム。
[付記16]
前記キャッシュ処理は、前記コンピュータが前記グループに属するデータの一部のデータを更新するライト要求を受信した場合に、
前記ライト要求の対象のデータを更新した後のデータのサイズと、当該ライト要求の対象のデータの更新前のデータのサイズと、の比較に基づいて、前記グループに含まれるデータからキャッシュするデータを決定し、決定されたデータをキャッシュする、
付記12から15のいずれか一つに記載のプログラム。
【0181】
本願発明は以上に説明された実施形態に限定されるものではない。以上に説明された実施形態の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。