(58)【調査した分野】(Int.Cl.,DB名)
前記決定部は、前記メモリから前記記憶装置に書き出すデータを順に選択し、選択したデータの書込アクセスの時刻と、当該選択したデータの直前の書込アクセスの時刻との差分を算出し、算出した差分が前記閾値以下である場合に、前記選択したデータを前記直前の書込アクセスに係るデータが属する一括圧縮のグループに含める、
ことを特徴とする、請求項1記載の情報処理装置。
第1のデータを第1のアドレスに書き込む第1の書込アクセスの時刻が前記管理情報に記録された状態で、前記第1のデータと同一の第2のデータを第2のアドレスに書き込む第2の書込アクセスを受け付けた場合に、前記第2のアドレスを前記第1のデータに関連付けるとともに、前記メモリへの前記第2のデータの格納を抑止する抑止部をそなえ、
前記決定部は、前記一括圧縮のグループに含めるデータの候補から前記第2のデータを除外する、
ことを特徴とする、請求項1〜4のいずれか1項記載の情報処理装置。
【発明を実施するための形態】
【0017】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【0018】
〔1〕一実施形態
〔1−1〕データの圧縮について
上述のように、ブロックストレージでは、記憶装置等のデバイスに書き込むデータをブロック(例えば8KB(バイト))単位で個別に圧縮するよりも、複数のブロックを一括して圧縮することで、データの圧縮率を向上させることができる(
図1参照)。
【0019】
一方、
図2に例示するように、書込データを圧縮処理により一括圧縮した場合、圧縮データ(例えば複数ブロックを圧縮した20KBのデータ)から一部のデータを読み出すためには、読出対象の部分まで全ての圧縮データを展開することになる。例えば、最終ブロックを読み出すためには、当該圧縮データ全体の展開処理が行なわれる。なお、読出対象の部分まで全てを展開した後、読出対象のデータがピックアップされる。
【0020】
より具体的に、例えば、
図3に示すように、LBA(Logical Block Address)0〜3にデータが書き込まれた後(書込1)、時間を置いて別の書き込みがLBA4〜7に発生し(書込2)、LBA0〜7のデータを一括圧縮した場合を想定する。
【0021】
この場合において、LBA4〜7のデータに読出要求(読込I/O;Input / Output)が発生すると、圧縮されたデータの全体が展開された上で、LBA4〜7のデータが読込データとしてピックアップされる。このとき、LBA0〜3の部分のデータは読み込まれないため、読込I/O及び展開処理が無駄になる。
【0022】
このように、複数のブロックを一括で圧縮する場合、圧縮率は向上する可能性があるが、圧縮データのうちの先頭ブロック以外の部分(例えば中間又は最終ブロック)に対する部分読み出しのアクセス性能に悪影響を与える可能性がある。
【0023】
一実施形態では、以下に説明する手法により、圧縮データの部分読み出しが発生する可能性を低減させることで、データの圧縮率の向上とアクセス性能低下の軽減とを両立させる。
【0024】
〔1−2〕一実施形態の構成例
以下、
図4〜
図9を参照して、一実施形態の構成例について説明する。
【0025】
〔1−2−1〕システムの構成例
図4は、一実施形態に係るシステム1の構成例を示すブロック図である。
図4に示すように、システム1は、例示的に、1以上(
図4の例では複数)のストレージ装置2、及び、ホスト装置5をそなえてよい。
【0026】
ストレージ装置2は、情報処理システムの一例である。ストレージ装置2は、例示的に、1以上のCM(Controller Module)3、及び、1以上(
図4の例では複数)の記憶装置4をそなえてよく、ホスト装置5に対して記憶装置4の記憶領域を提供してよい。例えば、ストレージ装置2は、RAID(Redundant Arrays of Inexpensive Disks)を用いて複数の記憶装置4にデータを分散又は冗長化した状態で保存してもよい。
【0027】
CM3は、ホスト装置5から複数の記憶装置4に対する種々のI/Oを制御する情報処理装置(コンピュータ)又は制御装置の一例である。
【0028】
記憶装置4は、種々のデータやプログラム等を格納するハードウェアの一例である。記憶装置4としては、例えば、SSD(Solid State Drive)等の半導体ドライブ装置、不揮発性メモリ、HDD(Hard Disk Drive)等の磁気ディスク装置等が挙げられる。不揮発性メモリとしては、例えば、フラッシュメモリ、SCM(Storage Class Memory)、ROM(Read Only Memory)等が挙げられる。
【0029】
なお、ストレージ装置2は、CM3を格納する制御筐体としてのCE(Controller Enclosure)、及び、記憶装置4を搭載するDE(Drive Enclosure)をそなえ、複数のストレージ装置2によってスケールアウト型のストレージシステムを構成してもよい。なお、この場合、CE及びDEの双方が記憶装置4を搭載してもよい。
【0030】
ホスト装置5は、ネットワーク6を介して1以上のストレージ装置2に対して書込要求や読出要求等の種々のI/Oを発行する。I/Oのアクセス対象は、ホスト装置5が認識する論理アドレス、例えばLBAによって指定されてよい。なお、以下の説明で、「I/O」とは、アクセス対象の論理アドレス、及び、書込対象のデータ(書込アクセスの場合)を少なくとも含むアクセス要求であるものとする。
【0031】
ホスト装置5としては、例えば業務サーバや基幹サーバ、或いはクライアントマシン等のコンピュータが挙げられる。
図4には1台のホスト装置5が示されているが、システム1には複数のホスト装置5が存在してもよい。
【0032】
ネットワーク6は、例えば、SAN(Storage Area Network)を含んでよく、図示しない1以上のスイッチ等のネットワーク機器を含んでもよい。また、ネットワーク6は、インターネット、又は、LAN(Local Area Network)若しくはWAN(Wide Area Network)等を含んでもよい。ストレージ装置2とホスト装置5との間は、ネットワーク6を介して、例えばFC(Fibre Channel)又はiSCSI(Internet Small Computer System Interface)等に準拠した光ケーブル又はイーサネット(登録商標)ケーブルによって接続されてよい。
【0033】
〔1−2−2〕CMのハードウェア構成例
次に、
図4を参照して、CM3のハードウェア構成例について説明する。
図4に示すように、CM3は、例示的に、プロセッサ3a、メモリ3b、記憶部3c、CA(Channel Adaptor)3d−1、DA(Device Adaptor)3d−2、入出力部3e、及び、読取部3fをそなえてよい。
【0034】
プロセッサ3aは、種々の制御や演算を行なう演算処理装置の一例である。プロセッサ3aは、各ブロック3b〜3fとバスで相互に通信可能に接続されてよい。プロセッサ3aとしては、CPU、MPU、DSP、ASIC、FPGA等の集積回路(IC)が用いられてもよい。なお、CPUはCentral Processing Unitの略称であり、MPUはMicro Processing Unitの略称であり、DSPはDigital Signal Processorの略称である。また、ASICはApplication Specific Integrated Circuitの略称であり、FPGAはField Programmable Gate Arrayの略称である。
【0035】
メモリ3bは、種々のデータやプログラムを格納するハードウェアの一例である。メモリ3bとしては、例えばRAM(Random Access Memory)等の揮発性メモリが挙げられる。なお、メモリ3bの一部の記憶領域は、記憶装置4に対するアクセス等に用いられるデータやプログラムを一時的に記憶するキャッシュメモリとして用いられてもよい。
【0036】
記憶部3cは、種々のデータやプログラム等を格納するハードウェアの一例である。記憶部3cとしては、例えば、HDD等の磁気ディスク装置、SSD等の半導体ドライブ装置、不揮発性メモリ等の各種記憶装置が挙げられる。記憶部3cは、CM3の各種機能の全部若しくは一部を実現するプログラム3hを格納してもよい。プロセッサ3aは、例えば、記憶部3cに格納されたプログラム3hをメモリ3bに展開して実行することにより、CM3の機能を実現できる。
【0037】
CA3d−1は、ホスト装置5との間の接続及び通信の制御等を行なう通信インタフェースの一例である。DA3d−2は、記憶装置4との間の接続及び通信の制御等を行なう通信インタフェースの一例である。また、CM3は、作業者の作業端末との間の接続及び通信の制御等を行なう通信インタフェースをそなえてもよく、当該通信インタフェースを用いて、ネットワーク6又は図示しない他のネットワークからプログラム3hをダウンロードしてもよい。
【0038】
入出力部3eは、マウス、キーボード、操作ボタン等の入力部、並びにディスプレイ又はプリンタ等の出力部の少なくとも一部を含んでよい。
【0039】
読取部3fは、記録媒体3gに記録されたデータやプログラムを読み出すリーダの一例である。読取部3fは、記録媒体3gを接続又は挿入可能な接続端子又は装置を含んでもよい。読取部3fとしては、例えばUSB(Universal Serial Bus)等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、SDカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体3gにはプログラム3hが格納されてもよい。
【0040】
記録媒体3gとしては、例示的に、磁気/光ディスクやフラッシュメモリ等の非一時的なコンピュータ読取可能な記録媒体が挙げられる。磁気/光ディスクとしては、例示的に、フレキシブルディスク、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク、HVD(Holographic Versatile Disc)等が挙げられる。フラッシュメモリとしては、例示的に、USBメモリやSDカード等が挙げられる。なお、CDとしては、例示的に、CD−ROM、CD−R、CD−RW等が挙げられる。また、DVDとしては、例示的に、DVD−ROM、DVD−RAM、DVD−R、DVD−RW、DVD+R、DVD+RW等が挙げられる。
【0041】
上述したCM3のハードウェア構成は例示である。従って、CM3内でのハードウェアの増減(例えば任意のブロックの追加や削除)、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
【0042】
〔1−2−3〕ストレージ装置の説明
次に、一実施形態に係るストレージ装置2の動作について簡単に説明する。一実施形態に係るストレージ装置2は、圧縮データの部分読み出しが発生する可能性を低減させるために、一括圧縮の対象となる複数のブロックを選択的に決定する。
【0043】
例えば、近い時間差で(例えばほぼ同時に)書き込まれたデータは、読み出されるときも一緒に読み出される可能性が高いという傾向がある。このようなI/Oの一例としては、ホスト装置5からのI/Oリクエストのレベルでは分割されておりアクセス先のLBAも大きく異なるが、ホスト装置5において一連の処理で発生する読み書きである場合が挙げられる。
【0044】
従って、近い時間差で書き込まれたデータをまとめて圧縮しても、部分読み出しによるアクセス性能の低下が起きにくいことが期待できる。
【0045】
例えば、ストレージ装置2のCM3は、データの書込アクセスの時刻をデータごとに管理情報に記録してよい。また、CM3は、書込アクセスに係るデータを記憶するメモリからデータを記憶装置4に書き出す際に、管理情報に基づいて、複数の書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定してよい。そして、CM3は、決定したグループに対応する複数のデータを一括圧縮し、一括圧縮で得られた圧縮データを記憶装置4に書き込んでよい。
【0046】
このように、一実施形態に係るCM3は、上述した書込アクセスの時間的局所性を利用して、一括圧縮を行なう複数のブロックを選択的に決定することで、部分読み出しが発生する可能性を低減させることできる。これにより、データの圧縮率の向上とアクセス性能低下の軽減とを両立させることができる。
【0047】
〔1−2−4〕CMの機能構成例
次に、CM3の機能構成例について説明する。
図5に示すように、CM3は、例示的に、メモリ部31、キャッシュメモリ32、I/O制御部33、重複除去部34、制御部35、及び、圧縮展開処理部36をそなえてよい。
【0048】
メモリ部31は、CM3の制御やI/Oの管理に関する種々の情報を記憶する。一例として、メモリ部31は、論理アドレステーブル312、ページテーブル314、圧縮データ展開情報316、及び、読込キャッシュリスト318の情報を記憶してよい。メモリ部31は、例えば、
図4に示すメモリ3b又は記憶部3cの一部の記憶領域によって実現されてよい。
【0049】
論理アドレステーブル312及びページテーブル314は、論理アドレスと物理アドレスとを対応付ける情報の一例である。
【0050】
図6に論理アドレステーブル312の一例を示す。論理アドレステーブル312は、論理アドレスとキャッシュメモリ32のキャッシュページとを対応付ける情報である。
【0051】
論理アドレステーブル312には、例示的に、論理アドレス、及び、ページID(Identifier)が設定されてよい。論理アドレスは例えばLBAであってよい。ページIDはキャッシュページを特定するIDである。論理アドレスが示すブロックのサイズとキャッシュページのサイズとは一致してよく、一例として8KBである。
【0052】
図7にページテーブル314の一例を示す。ページテーブル314は、キャッシュページごとに、圧縮データの記憶装置4上の物理アドレスや、重複除去処理及び圧縮処理に関する情報を管理する管理情報の一例である。
【0053】
ページテーブル314は、例示的に、ページID、ブロックのハッシュ値、参照数、物理アドレス、圧縮データ内オフセット、タイムスタンプ[ms]、及び、ボリュームIDが設定されてよい。ページIDは、論理アドレステーブル312のページIDに対応するIDであり、ページテーブル314のエントリとなる。
【0054】
ブロックのハッシュ値及び参照数は、重複除去処理に関する情報である。
【0055】
重複除去処理は、同一のデータを有するブロック(以下、「同一ブロック」と表記する)をストレージ装置2内に複数存在させないための処理である。重複除去(排除)技術により、データ量を削減し容量効率を向上させることができる。これにより、コスト削減のほか、フラッシュメモリやSSD等の装置寿命の延長を実現できる。
【0056】
重複除去処理では、CM3(例えば後述する重複除去部34)は、ストレージ装置2に対して同一ブロックが書き込まれた場合に、2個目のブロック以降は記憶装置4への記録を行なわずに最初に書き込んだブロックの参照数をインクリメントする。これにより、1つの物理アドレスに対して複数の論理アドレスが対応付けられた状態になる。
【0057】
このように、論理アドレスと物理アドレスとが1対1に対応しない場合があるため、ページテーブル314には論理アドレスの代わりにページIDを設定し、論理アドレステーブル312のページIDをキーにページテーブル314を参照できるようになっている。換言すれば、論理アドレステーブル312には、複数の論理アドレスに同一のページIDを設定することが許容される。
【0058】
なお、重複除去処理における同一ブロックの判定では、例えば、ブロックのハッシュ値の算出及び比較が行なわれてよい。ハッシュ値(フィンガープリント)は、元となるブロックに対してハッシュ関数による所定の演算を行なうことで得られる固定長のデータである。
【0059】
図7の説明に戻り、ブロックのハッシュ値には、重複除去処理で演算されたハッシュ値が設定されてよい。参照数には、重複が発生していないブロックに“1”(初期値)が設定され、重複排除が行なわれたブロックには、重複排除が行なわれるごとに1を加算した値が設定される。例えば、
図7のページID“0”の参照数“2”は、重複排除が1回行なわれたことを示している。
【0060】
物理アドレスには、当該ブロックを含む圧縮データの記憶装置4上の物理アドレスが設定されてよい。圧縮データ内オフセットには、当該圧縮データにおけるブロックのオフセット(位置)が設定されてよい。上述のように、一実施形態では複数のブロックが一括して圧縮されるため、圧縮データ内オフセットによって、圧縮データ内のどの位置にブロックが存在するのかを示している。
【0061】
なお、圧縮データは単一のデータであるため、
図7のページID“1”及び“2”の物理アドレス“0xbcde”のように、同一の圧縮データに含まれる複数のブロックには、同一の物理アドレスが設定されてよい。
【0062】
物理アドレス及び圧縮データ内オフセットは、後述する制御部35及び圧縮展開処理部36により登録される情報であるため、キャッシュメモリ32にデータが格納される段階ではこれらの情報は未登録でもよい。
【0063】
タイムスタンプ[ms]には、CM3が書込I/Oを受け付けたときの時刻が設定されてよい。なお、
図7の例では、便宜上、タイムスタンプを時間的な前後関係を表す数値(“10”、“100”、“101”等の値が大きいほど新しい時刻を示す値)としているが、実際には、日付及び時刻(例えばミリ秒単位まで)を含む情報が設定されてよい。
【0064】
なお、重複排除が行なわれた場合、該当するページIDのタイムスタンプは更新されない。換言すれば、重複排除の有無に関わらず、ページIDには最初に書込アクセスのあった時刻が設定されてよい。
【0065】
ボリュームIDは、I/Oの対象となるボリュームを識別する情報の一例である。例えば、ボリュームIDとしては、ブロックを書き込むLUN(Logical Unit Number)が挙げられる。タイムスタンプ及びボリュームIDは、後述する制御部35による制御に用いられる。
【0066】
図5の説明に戻り、キャッシュメモリ32は、記憶装置4に対するアクセス等に用いられるデータやプログラムを一時的に記憶する。一例として、キャッシュメモリ32は、書込I/Oに係る書込データや、読込I/Oに応じて記憶装置4から読み出された読出データ等を記憶してよい。
【0067】
キャッシュメモリ32に記憶されたデータは、CM3によるキャッシュページ置換アルゴリズムによって、所定のタイミングで記憶装置4に書き出されたり、キャッシュメモリ32から解放されたりしてよい。キャッシュメモリ32は、例えば、
図4に示すメモリ3bの一部の記憶領域によって実現されてよい。
【0068】
I/O制御部33は、ホスト装置5に対するI/Oの受付及び応答等のI/Oに関する種々の制御を行なう。
【0069】
例えば、I/O制御部33は、書込I/Oを受け付けると、タイムスタンプを取得し、取得したタイムスタンプを、受け付けた書込I/Oとともに重複除去部34に渡す。
【0070】
また、I/O制御部33は、読込I/Oを受け付けると、論理アドレステーブル312を参照して読出対象の論理アドレスのデータがキャッシュメモリ32に存在するか否かを判定する。キャッシュヒットの場合、I/O制御部33は、キャッシュメモリ32からデータを読み出して読込I/Oに応答する。一方、キャッシュミスの場合、I/O制御部33は、受け付けた読込I/Oを制御部35に渡す。
【0071】
重複除去部34は、I/O制御部33が受け付けた書込I/Oに対して、重複除去処理を行なう。
【0072】
例えば、重複除去部34は、書込対象のデータのハッシュ値を演算し、演算により得られたハッシュ値をキーにページテーブル314を検索して、得られたハッシュ値と同一のハッシュ値を持つキャッシュページの有無を判定する。
【0073】
得られたハッシュ値と同一のハッシュ値を持つキャッシュページが存在する場合、書込対象のデータと同一のデータがキャッシュページ内に存在することを意味する。従って、重複除去部34は、書込対象のデータを重複除去し(キャッシュメモリ32には書き込まず)、同一のハッシュ値を持つキャッシュページの参照数をインクリメントする。また、重複除去部34は、論理アドレステーブル312に書込先の論理アドレス(例えばLBA)のエントリを追加し、ページIDに同一のハッシュ値を持つキャッシュページのページIDを登録する。
【0074】
一方、得られたハッシュ値と同一のハッシュ値を持つキャッシュページが存在しない場合、重複除去部34は、論理アドレステーブル312に書込先の論理アドレスのエントリを追加し、新たなページIDを登録する。また、重複除去部34は、ページテーブル314に対して、論理アドレステーブル312に登録したページIDのエントリを追加する。例えば、重複除去部34は、ページテーブル314のエントリに対して、演算したハッシュ値、参照数“1”、I/O制御部33から取得したタイムスタンプ、及び、書込対象のボリュームID等の情報を設定する。
【0075】
以上のように、I/O制御部33及び重複除去部34は、データの書込アクセスの時刻をデータごとにページテーブル314に記録する記録部の一例である。
【0076】
また、重複除去部34は、以下の処理を行なう抑止部の一例である。この処理は、第1のデータを第1のアドレスに書き込む第1の書込アクセスの時刻がページテーブル314に記録された状態で、第1のデータと同一の第2のデータを第2のアドレスに書き込む第2の書込アクセスを受け付けた場合に行なわれる。この場合、抑止部としての重複除去部34は、第2のアドレスを第1のデータに関連付けるとともに、キャッシュメモリ32への第2のデータの格納を抑止する。
【0077】
制御部35は、キャッシュメモリ32から記憶装置4へのデータの書き出し、記憶装置4からキャッシュメモリ32へのデータの読み出し、及び、メモリ部31が記憶する情報の更新等の種々の制御を行なう。制御部35は、例示的に、書出制御部352及びパラメータ変更部354をそなえてよい。
【0078】
書出制御部352は、一括圧縮のグループに関する制御を行なう。書出制御部352による制御は、例えば、キャッシュメモリ32から記憶装置4に対するデータの書き出しの際に行なわれてよい。
【0079】
例えば、書出制御部352は、書出対象のブロックを順に選択し、ページテーブル314を参照して、選択したブロックの書込I/Oのタイムスタンプとその直前の書込I/Oのタイムスタンプとの差分を算出する。そして、書出制御部352は、算出した差分が閾値(T)以下であれば、当該選択したブロックをその直前の書込I/Oに係るブロックが属する一括圧縮のグループ(以下、「圧縮グループ」と表記する場合がある)に含める。
【0080】
閾値(T)[秒]は、ブロックをグループ化するか否かの判断に用いるタイムスタンプ差判断閾値である。閾値(T)の初期値は、例えば、ストレージ装置2に対して連続書き込みを行なった場合のアクセス間隔の実測値(C)[秒](事前に計測した値でよい)の5倍程度の時間であってよい。閾値(T)は、パラメータ変更部354によって動的に変更されてよい。
【0081】
なお、ページテーブル314には、書込順にエントリが作成されるため、書出制御部352は、選択したブロックのタイムスタンプと、1つ上のエントリ(キャッシュページ)のタイムスタンプとを比較して差分を算出すればよい。
【0082】
また、書出制御部352は、グループの判定に、以下の(a)〜(c)のうちの少なくとも1つの条件を考慮してもよい。以下の説明では、書出制御部352が、タイムスタンプ差の判定に加えて、(a)〜(c)の全ての条件を満たす場合に、選択したブロックをその直前に書き込まれたブロックの圧縮グループに加えると判定するものとする。
【0083】
(a)重複排除が行なわれていない(参照数が“1”である)。
書出制御部352は、重複除去が行なわれたデータ(ブロック)については、一括圧縮の対象から除外してよい。重複除去が行なわれたデータを一括圧縮のグループに含めないことで、圧縮グループに対する一連の読み出しとは異なるタイミングで圧縮グループの部分読み出しが発生する可能性を低減できる。
【0084】
そこで、書出制御部352は、ページテーブル314を参照して、選択したブロックの参照数が“1”である場合、すなわち重複排除対象でない場合に、条件(a)を満たす(選択したブロックを一括圧縮のグループに加える)と判定してよい。一方、書出制御部352は、重複排除されたブロックを、一括圧縮のグループに含めるデータの候補から除外する。
【0085】
(b)同一のボリュームIDである。
ホスト装置5から近い時間に発生した複数の書込I/Oがいずれも同一のボリュームから書き込まれたI/Oである場合、これらの書込I/Oは一連の書込アクセスである可能性が高い。一方、複数の書込I/Oが近い時間に発生していてもこれらが異なるボリュームから書き込まれたI/Oであれば、これらの書込I/OはI/Oの発行時刻は近いものの互いに関連しない書込アクセスであると考えられる。
【0086】
そこで、書出制御部352は、ページテーブル314を参照して、選択したブロックのボリュームIDと、その直前に書き込まれたブロックのボリュームIDとが一致する場合に、条件(b)を満たすと判定してよい。換言すれば、書出制御部352は、同一のボリュームに属する複数のブロックを、一括圧縮グループに含めるデータの候補とする。
【0087】
(c)グループ内のブロック数がグループ化数(N)に達していない。
データの圧縮率を高めるためには圧縮グループに多くのブロックを含めることが有効であるが、圧縮グループ内のブロック数が多くなるほど、部分読み出しが発生する可能性も高くなる。
【0088】
そこで、後述するパラメータ変更部354により、一括圧縮のグループに含めるブロック数の上限であるグループ化数(N)を動的に変更し、最適なグループ化数の上限を設定する。なお、グループ化数(N)の初期値としては、ブロックサイズやストレージ装置2の利用形態等により異なるが、例えば“8”等の数値が挙げられる。
【0089】
書出制御部352は、圧縮グループ内のブロック数がグループ化数(N)に達していない場合に、条件(c)を満たすと判定してよい。
【0090】
書出制御部352は、書出対象の全てのブロックについて順に選択して上記の判定を行ない、選択したブロックが直前に書き込まれたブロックとは異なるグループであると判定されるまで、ブロックを圧縮グループに追加する。
【0091】
なお、直前及び直後に書き込まれたブロックのいずれとも同じグループに属さないと判定されたブロック(例えば重複排除が行なわれたブロック)は、個別圧縮するグループに切り替えられ、単一のブロックとして圧縮されることになる。
【0092】
書出制御部352によって所属するグループが判定されると、判定されたグループの1以上のブロックが圧縮展開処理部36によって圧縮され、圧縮データが記憶装置4に書き込まれる。
【0093】
以上のように、書出制御部352は、キャッシュメモリ32からデータを記憶装置4に書き出す際に、ページテーブル314に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部の一例である。
【0094】
なお、書出制御部352又は圧縮展開処理部36は、ページテーブル314に対して、圧縮グループを決定したとき、又は、圧縮データを記憶装置4に書き込んだときに、圧縮データ内オフセット及び物理アドレスを設定してよい。
【0095】
パラメータ変更部354は、圧縮データに対する読込アクセスの状況に応じて、閾値(T)やグループ化数(N)等のパラメータを変更する。パラメータ変更部354による処理には、例えば、以下の(i)〜(iii)の少なくとも1つの処理が含まれてよい。
【0096】
(i)閾値(T)の変更処理(減少制御)
パラメータ変更部354は、読込アクセスの際に、記憶装置4に格納された圧縮データのうちの先頭以外の領域のデータに対して読出アクセスが発生した場合、換言すれば部分読み出しが発生した場合、以下の処理を行なう。
【0097】
例えば、パラメータ変更部354は、ページテーブル314を参照して、圧縮グループ内における、読込アクセスが発生したブロックのタイムスタンプと、その直前のブロックのタイムスタンプとの差分(Δt)を算出する。算出したΔtがストレージ装置2に対する連続アクセスで発生するリクエスト間隔(C)(上述した実測値)よりも長い場合、パラメータ変更部354は、Δtに近づくように閾値(T)を減少させる、又は、閾値(T)にΔtの値をセットする。
【0098】
圧縮データからの部分読み出しが発生する理由の1つとして、複数のブロックを圧縮グループに加える際の判断条件である閾値(T)が大きいことが挙げられる。そこで、パラメータ変更部354は、閾値(T)が連続アクセスで発生するリクエスト間隔(C)以下にならない範囲で閾値(T)をΔtに近づけることで、閾値(T)をより小さい(制限した)値に調整するのである。
【0099】
(ii)閾値(T)の変更処理(増加制御)
パラメータ変更部354は、読込アクセスの際に、記憶装置4に格納された圧縮データであって単一のデータを圧縮した圧縮データに対して読出アクセスが発生した場合(個別圧縮データを展開する場合)、以下の処理を行なう。
【0100】
例えば、パラメータ変更部354は、ページテーブル314を参照して、個別圧縮されたブロックのタイムスタンプと、その直前に読み込まれたブロックの書き込みタイムスタンプとの差分(Δt)を算出する。Δtが判定値(L)よりも小さい場合、パラメータ変更部354は、Δtに近づくように閾値(T)を増加させる、又は、閾値(T)にΔtの値をセットする。なお、判定値(L)は、2つの書込アクセスが互いに関連のないアクセスであると見做す上で十分な経過時間であり、例えば、“1秒”等の時間である。
【0101】
Δtが判定値(L)よりも小さい場合、個別圧縮されたブロックと、その直前に書き込まれたブロックとは、必ずしも互いに関連のないアクセスによるデータであるとはいえない。換言すれば、これらのデータブロックは、タイムスタンプ差分が閾値(T)よりも大きいものの、一連の書込アクセスによるデータの可能性もある。そこで、パラメータ変更部354は、閾値(T)が判定値(L)以上にならない範囲で閾値(T)をΔtに近づけることで、閾値(T)をより大きい値に調整するのである。
【0102】
(iii)グループ化数(N)の変更処理
パラメータ変更部354は、展開された圧縮データが読込キャッシュ(キャッシュメモリ32)から追い出される際、又は、読込キャッシュに展開してから一定時間経過後に、以下の処理を行なう。
【0103】
例えば、パラメータ変更部354は、展開された圧縮データのうちの全体の領域(例えば圧縮グループに属する全ブロック)に対する実際に読込アクセスされた領域(例えばブロック)の割合を算出する。そして、パラメータ変更部354は、算出した割合が所定の範囲(例えば(U
L)〜(U
H)の範囲)に収まらない場合に、グループ化数の上限である(N)の値を変化させる。
【0104】
一例として、パラメータ変更部354は、算出した割合が(U
L)よりも小さい場合には、グループ化数(N)を減少させてよい。なお、グループ化数(N)の下限(N
min)を設けてもよい。また、パラメータ変更部354は、算出された割合が(U
H)よりも大きい場合には、グループ化数(N)を増加させてよい。なお、グループ化数(N)の上限(N
max)を設けてもよい。
【0105】
なお、(U
L)は、圧縮データ読み込み後の利用率の判断基準(第1基準値)であり、例えば“20%”等の値である。(U
H)は、圧縮データ読み込み後の利用率の判断基準(第2基準値)であり、例えば“80%”等の値である。(N
min)は、(N)の取り得る最小値であり、1以上(N
max)未満の整数である。(N
min)の一例として、“2”等の値が挙げられる。(N
max)は、Nの取り得る最大値であり、(N
min)よりも大きい整数である。(N
max)の一例として、“32”等の値が挙げられる。
【0106】
パラメータ変更部354は、展開された圧縮データに係る利用率を算出するために、圧縮データ展開情報316及び読込キャッシュリスト318を用いてよい。
【0107】
図8に圧縮データ展開情報316の一例を示す。圧縮データ展開情報316は、圧縮データごとに、圧縮グループ内の各エントリ(例えば各ブロック)に対する読込状況を管理する情報である。圧縮データ展開情報316には、例示的に、物理アドレス、及び、読込フラグが設定されてよい。
【0108】
物理アドレスは、圧縮データを識別する情報の一例である。なお、圧縮データを識別できる値であれば、物理アドレス以外の情報が用いられてもよい。読込フラグは、圧縮グループ内のエントリ数により可変長のフラグであり、1ビットで1エントリ(ブロック)に対する読込アクセスの有無を示す情報である。
【0109】
図9に読込キャッシュリスト318の一例を示す。読込キャッシュリスト318は、キャッシュメモリ32内のキャッシュページのアドレス等の情報と当該キャッシュページに記憶された圧縮データとを対応付けた情報である。
【0110】
読込キャッシュリスト318は、例えば、キャッシュ管理に用いられるLRU(Least Recently Used)のリストに対して、圧縮データを識別できる値を付加した情報であってもよい。このため、読込キャッシュリスト318におけるキャッシュページのアドレスや当該キャッシュページに読み込まれた圧縮データの物理アドレス(圧縮データが格納されている物理アドレス)は、制御部35によるキャッシュ制御によって更新されてよい。
【0111】
例えば、パラメータ変更部354は、制御部35及び圧縮展開処理部36により読込I/Oに応じてキャッシュメモリ32に展開された圧縮データ(展開データ)について、読込キャッシュリスト318を参照して当該圧縮データの物理アドレスを特定する。そして、パラメータ変更部354は、特定した物理アドレスをキーに圧縮データ展開情報316を検索し、圧縮グループの読込フラグに対して、読込対象のブロックに対応するビットに“1”を立てる。なお、読込フラグのビットは、例えばページテーブル314に設定された圧縮データ内オフセットに基づき特定できる。
【0112】
なお、パラメータ変更部354は、圧縮データ展開情報316に該当する物理アドレスのエントリが存在しない場合には、当該物理アドレスのエントリを作成し、圧縮グループ内のブロック数と同一ビット数のビット列の読込フラグを追加してよい。このとき追加される読込フラグは、読込対象のブロックに対応するビットに“1”が設定され、それ以外のビットには“0”が設定されたビット列となる。
【0113】
パラメータ変更部354は、圧縮データ展開情報316の圧縮データに対応する読込フラグについて、全ビット数に対する“1”が設定されたビット数の割合を算出することで、展開された圧縮データに係る利用率を算出できる。
【0114】
なお、上記(i)〜(iii)において、閾値(T)やグループ化数(N)を減少又は増加させる際に、パラメータ変更部354は、閾値(T)やグループ化数(N)に対して、定数等の加算若しくは減算、又は、定数等の乗算若しくは除算等を行なってよい。
【0115】
以上のように、パラメータ変更部354は、記憶装置4に格納された圧縮データに対する読出アクセスに基づいて、閾値(T)の値を変更する制御を行なう閾値変更部の一例である。
【0116】
また、パラメータ変更部354は、展開された圧縮データに対する読出アクセスの状況を管理し、展開された圧縮データがキャッシュメモリ32から解放される際に、読出アクセスの状況に基づいて、上限(N)を変更する上限変更部の一例である。
【0117】
図5の説明に戻り、圧縮展開処理部36は、制御部35の制御の下、キャッシュメモリ32から読み出された少なくとも1つのブロックに対してデータ圧縮処理を行ない、圧縮データを記憶装置4に書き込む。例えば、圧縮展開処理部36は、書出制御部352から一括圧縮グループの情報、例えば一括圧縮グループに属する複数のブロックのキャッシュページの情報(一例としてページID)を通知されることでデータ圧縮処理の対象ブロックを認識してよい。
【0118】
また、圧縮展開処理部36は、制御部35の制御の下、記憶装置4から読み出した圧縮データに対してデータ展開処理を行ない、展開した少なくとも1つのブロックをキャッシュメモリ32に格納する。
【0119】
なお、データ圧縮処理はZIP等による圧縮と処理自体は同様である。データ圧縮処理の圧縮アルゴリズムは、特に限定しないが、一実施形態では、LZ77、LZSS、LZ4等の辞書式圧縮アルゴリズムが用いられることを前提とする。データ展開処理は、データ圧縮処理に対応したアルゴリズムにより実施されてよい。
【0120】
以上のように、圧縮展開処理部36は、書出制御部352が決定したグループに対応する複数のデータを一括圧縮し、一括圧縮して得られた圧縮データを記憶装置4に書き込む圧縮処理部の一例である。
【0121】
また、圧縮展開処理部36は、記憶装置4から読み出した圧縮データをキャッシュメモリ32に展開する展開処理部の一例である。
【0122】
上述したストレージ装置2によれば、複数のブロックを一括して圧縮するため、圧縮処理の際に、複数回現れるデータ列についてブロックを跨いで検出できる。従って、圧縮率の向上を図ることができる。特に、ブロックストレージにおいては、ブロックサイズが4KBや8KB等の比較的小さいサイズであるため、複数のブロックを一括して圧縮することは、ブロックを個別に圧縮する場合と比べて、圧縮率の向上により効果的である。
【0123】
また、ストレージ装置2により、近い時間に書き込まれたブロック、すなわち同時にアクセスが発生する可能性が高いブロックをグループ化するため、部分読み出しが発生しにくい状況を作ることができ、アクセス性能の低下を軽減できる。
【0124】
さらに、ストレージ装置2により、部分読み出しが発生した際に、閾値(T)の調整が行なわれるため、以後に発生する書込アクセスに対して、アクセス特性に応じた適切なグループ化を行なうことができる。
【0125】
また、ストレージ装置2により、圧縮データの読込状況に応じて、グループ化を行なう上限数(N)を動的に変更できるため、アクセス性能低下を防止又は軽減できる。
【0126】
さらに、ストレージ装置2により、一括圧縮されたデータを読込キャッシュに展開する際に、将来読み込みが発生する可能性のあるデータ(例えば今回の読込対象とは異なるブロック)もまとめて展開される。従って、プリフェッチ(先読み)と同様の効果を奏することができる。
【0127】
また、ストレージ装置2により、複数の論理アドレスから参照されているブロック、すなわち重複排除されたブロックは他のブロックとグループ化されない。
【0128】
例えば、第1及び第2の論理アドレスから参照されている重複排除されたブロックを、第1の論理アドレスによる書込アクセスと同時に書き込まれたブロックとともに一括圧縮した場合を考える。この場合、圧縮データは、第1の論理アドレスに対する読込I/Oでは、他のブロックとともに例えばデータの先頭から読み出される可能性が高い。一方、第2の論理アドレスに対する読込I/Oでは、当該重複排除されたブロックが単独で部分読み出しされる可能性が高い。
【0129】
従って、重複排除されたブロックを他のブロックとグループ化しないことにより、アクセス性能の低下を防止又は軽減できる。
【0130】
〔1−3〕動作例
次に、
図10〜
図15を参照して、上述の如く構成されたストレージ装置2の動作例を説明する。
【0131】
〔1−3−1〕書込I/O処理
はじめに、
図10を参照して、ストレージ装置2がホスト装置5からデータの書込I/Oを受信する場合の動作例を説明する。
【0132】
I/O制御部33は、書込I/Oを受信すると(ステップS1)、タイムスタンプを取得し(ステップS2)、書込I/O及びタイムスタンプを重複除去部34に渡す。
【0133】
重複除去部34は、書込I/Oに基づき重複除去処理を行なう(ステップS3)。例えば、重複除去部34は、書込I/Oに含まれる書込データのハッシュ値を演算し、演算したハッシュ値とページテーブル314に登録されたハッシュ値とを比較して、書込データに一致するハッシュ値を持つキャッシュページが存在するか否かを判定する。
【0134】
重複除去が行なわれない場合(ステップS4、S4でNo)、すなわち、書込データに一致するハッシュ値を持つキャッシュページが存在しない場合、重複除去部34は、データをキャッシュメモリ32に配置する(ステップS5)。
【0135】
また、重複除去部34は、論理アドレステーブル312及びページテーブル314にそれぞれエントリを追加して、これらのテーブル312及び314を更新する(ステップS6)。このとき、重複除去部34は、ページテーブル314のエントリにはI/O制御部33から通知されたタイムスタンプを付加する。
【0136】
一方、ステップS3で重複除去が行なわれた場合(ステップS4でYes)、すなわち、書込データに一致するハッシュ値を持つキャッシュページが存在する場合、重複除去部34は、テーブル312及び314を更新する(ステップS8)。このとき、重複除去部34は、論理アドレステーブル312にエントリを追加し、ページテーブル314の該当するキャッシュページの参照数をインクリメントする。
【0137】
ステップS6又はS7でテーブル312及び314を更新すると、I/O制御部33は、ホスト装置5に対してデータの書込I/Oに対する完了応答を送信し(ステップS8)、処理が終了する。
【0138】
〔1−3−2〕データ書出処理
次に、
図11を参照して、キャッシュメモリ32からデバイス(例えば記憶装置4)へのデータ書出処理の動作例について説明する。
【0139】
制御部35の書出制御部352は、キャッシュページ置換アルゴリズムに従ったキャッシュメモリ32のデータ書出タイミングを待ち受ける(ステップS11、S11でNo)。データ書出タイミングになると(ステップS11でYes)、書出制御部352は、新しいグループを作成する(ステップS12)。
【0140】
書出制御部352は、キャッシュメモリ32にデバイスへ書き出すページが存在するか否かを判定する(ステップS13)。書き出すページが存在する場合(ステップS13でYes)、書出制御部352は、デバイスに書き出すページを1つ選択する(ステップS14)。
【0141】
そして、書出制御部352は、ページテーブル314を参照して、以下のステップS15〜S18の判定を行なう。なお、ステップS15〜S17の少なくとも1つの判定は省略されてもよい。
【0142】
書出制御部352は、選択したページの重複除去に係る参照数が“1”か否かを判定する(ステップS15)。参照数が“1”の場合(ステップS15でYes)、書出制御部352は、選択したページのブロックがグループ内のブロックと同一のボリュームか否かを判定する(ステップS16)。
【0143】
グループ内のブロックと同一のボリュームの場合(ステップS16でYes)、書出制御部352は、グループ内のブロック数が
グループ化数(N)未満か否かを判定する(ステップS17)。
【0144】
グループ内のブロック数が
グループ化数(N)未満の場合(ステップS17でYes)、書出制御部352は、選択したページのブロックのタイムスタンプと、その直前に書き込まれたブロックのタイムスタンプとの差を演算する。そして、書出制御部352は、タイムスタンプ差が閾値(T)以下か否かを判定する(ステップS18)。
【0145】
タイムスタンプ差が閾値(T)以下の場合(ステップS18でYes)、書出制御部352は、グループに選択したページのブロックを追加し(ステップS19)、処理がステップS13に移行する。
【0146】
一方、ステップS15〜S18のいずれかでNoの場合、書出制御部352は、グループにブロックが存在するか否かを判定する(ステップS20)。
【0147】
グループにブロックが存在する場合(ステップS20でYes)、書出制御部352は、圧縮展開処理部36に当該グループの圧縮を指示する。圧縮展開処理部36は、指示されたグループを圧縮し(ステップS21)、圧縮データをデバイスへ書き出す(ステップS22)。なお、書出制御部352又は圧縮展開処理部36は、圧縮データを書き込んだ物理アドレス、及び、圧縮データ内の各ブロックのオフセットの情報を登録することでページテーブル314を更新してよい(ステップS23)。
【0148】
ステップS21で圧縮した圧縮グループには、選択したページのブロックの直前(及びそれよりも前)に書き込まれたブロックが含まれているが、選択したページのブロックは含まれていない。そこで、書出制御部352は、新しいグループを作成し(ステップS24)、当該グループにステップS14で選択したページのブロックを追加し(ステップS25)、処理がステップS13に移行する。
【0149】
一方、ステップS20でグループにブロックが存在しない場合(ステップS20でNo)、書出制御部352は、既存のグループにステップS14で選択したページのブロックを追加し(ステップS25)、処理がステップS13に移行する。
【0150】
また、ステップS13で書き出すページが存在しない場合(ステップS13でNo)、書出制御部352は、グループにブロックが存在するか否かを判定する(ステップS26)。
【0151】
グループにブロックが存在する場合(ステップS26でYes)、書出制御部352は、圧縮展開処理部36に当該グループの圧縮を指示する。圧縮展開処理部36は、指示されたグループを圧縮し(ステップS27)、圧縮データをデバイスへ書き出す(ステップS28)。また、書出制御部352又は圧縮展開処理部36は、圧縮データを書き込んだ物理アドレス、及び、圧縮データ内の各ブロックのオフセットの情報を登録することで、ページテーブル314を更新し(ステップS29)、処理が終了する。
【0152】
一方、ステップS26でグループにブロックが存在しない場合(ステップS26でNo)、処理が終了する。
【0153】
〔1−3−3〕閾値変更処理(減少制御)
次に、
図12を参照して、タイムスタンプ差判断閾値(T)の変更処理(減少制御)の動作例について説明する。
【0154】
記憶装置4からの圧縮データの部分読み出しが発生すると(ステップS31)、制御部35のパラメータ変更部354は以下の処理を行なう。なお、I/O制御部33から読込I/Oを通知された制御部35は、ページテーブル314を参照し、読み出し対象のブロックの圧縮データ内オフセットが“0”以外の場合に、読込I/Oが部分読み出しであると判断してよい。
【0155】
パラメータ変更部354は、ページテーブル314を参照し、部分読み出し対象のブロックと、同じ圧縮データ中の直前に書き込まれたブロックとのタイムスタンプ差分を算出する(ステップS32)。そして、パラメータ変更部354は、タイムスタンプ差分がリクエスト間隔(実測値)(C)よりも大きいか否かを判定する(ステップS33)。
【0156】
タイムスタンプ差分がリクエスト間隔(C)よりも大きい場合(ステップS33でYes)、パラメータ変更部354は、閾値(T)を減少させ(ステップS34)、処理が終了する。一方、タイムスタンプ差分がリクエスト間隔(C)よりも大きくない場合(ステップS33でNo)、閾値(T)は変更されず(ステップS35)、処理が終了する。
【0157】
なお、
図12の例において、制御部35及び圧縮展開処理部36による記憶装置4からの部分読み出しの処理は、ステップS32〜S35の処理の前後に又は並行して行なわれてよい。
【0158】
〔1−3−4〕閾値変更処理(増加制御)
次に、
図13を参照して、タイムスタンプ差判断閾値(T)の変更処理(増加制御)の動作例について説明する。
【0159】
記憶装置4からの個別ブロックの読み出しが発生すると(ステップS41)、パラメータ変更部354は以下の処理を行なう。なお、I/O制御部33から読込I/Oを通知された制御部35は、ページテーブル314を参照し、読み出し対象のブロックの物理アドレスが前後に書き込まれたブロックのいずれとも異なる場合に、読込I/Oが個別ブロックの読み出しであると判断してよい。
【0160】
パラメータ変更部354は、ページテーブル314を参照し、読出対象のブロックと直前に書き込まれたブロックとのタイムスタンプ差分を算出する(ステップS42)。そして、パラメータ変更部354は、タイムスタンプ差分が判定値(L)よりも小さいか否かを判定する(ステップS43)。
【0161】
タイムスタンプ差分が判定値(L)よりも小さい場合(ステップS43でYes)、パラメータ変更部354は、閾値(T)を増加させ(ステップS44)、処理が終了する。一方、タイムスタンプ差分が判定値(L)よりも小さくない場合(ステップS43でNo)、閾値(T)は変更されず(ステップS45)、処理が終了する。
【0162】
なお、
図13の例において、制御部35及び圧縮展開処理部36による記憶装置4からの個別ブロックの読み出しの処理は、ステップS42〜S45の処理の前後に又は並行して行なわれてよい。
【0163】
〔1−3−5〕読込フラグ更新処理
次に、
図14を参照して、読込フラグの更新処理の動作例について説明する。
【0164】
記憶装置4からの圧縮データの読み出しが発生すると(ステップS51)、パラメータ変更部354は、圧縮データ展開情報316の読込フラグを更新し(ステップS52)、処理が終了する。例えば、パラメータ変更部354は、圧縮データ展開情報316における該当する圧縮グループの読込フラグに対して、読込対象のブロックに対応するビットに“1”を立てる。
【0165】
〔1−3−6〕グループ化数変更処理
次に、
図15を参照して、グループ化数(上限)(N)の変更処理の動作例について説明する。
【0166】
読込キャッシュの追い出しが発生する、又は、圧縮データを読込キャッシュに展開してから設定時間が経過すると(ステップS61)、パラメータ変更部354は、以下の処理を行なう。なお、読込キャッシュの追い出しの発生や、圧縮データを読込キャッシュに展開してから設定時間が経過したことは、制御部35によるキャッシュ制御によって判断されてよい。
【0167】
パラメータ変更部354は、圧縮データ展開情報316にエントリが存在するか否かを判定する(ステップS62)。
【0168】
圧縮データ展開情報316にエントリが存在する場合(ステップS62でYes)、パラメータ変更部354は、圧縮データ展開情報316から1つの行(エントリ)を選択し、該当行を削除する(ステップS63)。
【0169】
そして、パラメータ変更部354は、追出対象のブロックが属する圧縮グループにおいて読み出された領域の割合を算出する(ステップS64)。一例として、パラメータ変更部354は、ステップS63で削除した行の圧縮グループの読込フラグに“01001”が設定されている場合、2(“1”のビット数)/5(全ビット数)=0.4(40%)を得る。
【0170】
パラメータ変更部354は、算出した割合が(U
L)よりも小さいか否かを判定する(ステップS65)。算出した割合が(U
L)よりも小さい場合(ステップS65でYes)、パラメータ変更部354は、(N)を減少(例えば“1”減少)させ(ステップS66)、処理がステップS62に移行する。
【0171】
一方、算出した割合が(U
L)よりも小さくない場合(ステップS65でNo)、パラメータ変更部354は、算出した割合が(U
H)よりも大きいか否かを判定する(ステップS67)。
【0172】
算出した割合が(U
H)よりも大きい場合(ステップS67でYes)、パラメータ変更部354は、(N)を増加(例えば“1”増加)させ(ステップS68)、処理がステップS62に移行する。
【0173】
算出した割合が(U
H)よりも大きくない場合(ステップS67でNo)、(N)の値は変化せず(ステップS69)、処理がステップS62に移行する。
【0174】
また、ステップS62において、圧縮データ展開情報316にエントリが存在しない場合(ステップS62でNo)、すなわち、読込キャッシュからの追い出しに係る全ての圧縮データについて、(N)の変更処理の判定が終わっている場合、処理が終了する。
【0175】
〔2〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
【0176】
例えば、
図5に示すCM3の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
【0177】
また、CM3の機能は、マルチプロセッサやマルチコアのプロセッサ3aによって実現されてもよい。
【0178】
〔3〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【0179】
(付記1)
データの書込アクセスの時刻をデータごとに管理情報に記録する記録部と、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部と、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む圧縮処理部と、をそなえる
ことを特徴とする、情報処理装置。
【0180】
(付記2)
前記決定部は、前記メモリから前記記憶装置に書き出すデータを順に選択し、選択したデータの書込アクセスの時刻と、当該選択したデータの直前の書込アクセスの時刻との差分を算出し、算出した差分が前記閾値以下である場合に、前記選択したデータを前記直前の書込アクセスに係るデータが属する一括圧縮のグループに含める、
ことを特徴とする、付記1記載の情報処理装置。
【0181】
(付記3)
前記記憶装置に格納された圧縮データに対する読出アクセスに基づいて、前記閾値の値を変更する制御を行なう閾値変更部をそなえる
ことを特徴とする、付記1又は付記2記載の情報処理装置。
【0182】
(付記4)
前記変更部は、記憶装置に格納された圧縮データのうちの先頭以外の領域のデータに対して読出アクセスが発生した場合に、前記閾値の値を減少させる制御を行なう、
ことを特徴とする、付記3記載の情報処理装置。
【0183】
(付記5)
前記変更部は、前記記憶装置に格納された圧縮データであって単一のデータを圧縮した圧縮データに対して読出アクセスが発生した場合に、前記閾値の値を増加させる制御を行なう、
ことを特徴とする、付記3又は付記4記載の情報処理装置。
【0184】
(付記6)
前記決定部は、前記一括圧縮のグループに含めるデータ数の上限に基づき、前記決定を行なう、
ことを特徴とする、付記1〜5のいずれか1項記載の情報処理装置。
【0185】
(付記7)
前記記憶装置から読み出した圧縮データを前記メモリに展開する展開処理部と、
前記展開された圧縮データに対する読出アクセスの状況を管理し、前記展開された圧縮データが前記メモリから解放される際に、前記読出アクセスの状況に基づいて、前記上限を変更する上限変更部と、をそなえる
ことを特徴とする、付記6記載の情報処理装置。
【0186】
(付記8)
第1のデータを第1のアドレスに書き込む第1の書込アクセスの時刻が前記管理情報に記録された状態で、前記第1のデータと同一の第2のデータを第2のアドレスに書き込む第2の書込アクセスを受け付けた場合に、前記第2のアドレスを前記第1のデータに関連付けるとともに、前記メモリへの前記第2のデータの格納を抑止する抑止部をそなえ、
前記決定部は、前記一括圧縮のグループに含めるデータの候補から前記第
2のデータを除外する、
ことを特徴とする、付記1〜7のいずれか1項記載の情報処理装置。
【0187】
(付記9)
前記決定部は、同一のボリュームに属する複数のデータを、前記一括圧縮のグループに含めるデータの候補とする、
ことを特徴とする、付記1〜8のいずれか1項記載の情報処理装置。
【0188】
(付記10)
データを記憶する記憶装置と、
前記記憶装置に対する制御を行なう情報処理装置と、をそなえ、
前記情報処理装置は、
データの書込アクセスの時刻をデータごとに管理情報に記録する記録部と、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定する決定部と、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む圧縮処理部と、をそなえる
ことを特徴とする、情報処理システム。
【0189】
(付記11)
コンピュータに、
データの書込アクセスの時刻をデータごとに管理情報に記録し、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定し、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む
処理を実行させることを特徴とする、情報処理プログラム。
【0190】
(付記12)
前記決定は、前記メモリから前記記憶装置に書き出すデータを順に選択し、選択したデータの書込アクセスの時刻と、当該選択したデータの直前の書込アクセスの時刻との差分を算出し、算出した差分が前記閾値以下である場合に、前記選択したデータを前記直前の書込アクセスに係るデータが属する一括圧縮のグループに含める、
ことを特徴とする、付記11記載の情報処理プログラム。
【0191】
(付記13)
前記コンピュータに、
前記記憶装置に格納された圧縮データに対する読出アクセスに基づいて、前記閾値の値を変更する制御を行なう、
処理を実行させることを特徴とする、付記11又は付記12記載の情報処理プログラム。
【0192】
(付記14)
前記変更する制御は、記憶装置に格納された圧縮データのうちの先頭以外の領域のデータに対して読出アクセスが発生した場合に、前記閾値の値を減少させる制御を含む、
ことを特徴とする、付記13記載の情報処理プログラム。
【0193】
(付記15)
前記変更する制御は、前記記憶装置に格納された圧縮データであって単一のデータを圧縮した圧縮データに対して読出アクセスが発生した場合に、前記閾値の値を増加させる制御を含む、
ことを特徴とする、付記13又は付記14記載の情報処理プログラム。
【0194】
(付記16)
前記決定は、前記一括圧縮のグループに含めるデータ数の上限に基づき、前記決定を行なうことを含む、
ことを特徴とする、付記11〜15のいずれか1項記載の情報処理プログラム。
【0195】
(付記17)
前記コンピュータに、
前記記憶装置から読み出した圧縮データを前記メモリに展開し、
前記展開された圧縮データに対する読出アクセスの状況を管理し、前記展開された圧縮データが前記メモリから解放される際に、前記読出アクセスの状況に基づいて、前記上限を変更する、
処理を実行させることを特徴とする、付記16記載の情報処理プログラム。
【0196】
(付記18)
前記コンピュータに、
第1のデータを第1のアドレスに書き込む第1の書込アクセスの時刻が前記管理情報に記録された状態で、前記第1のデータと同一の第2のデータを第2のアドレスに書き込む第2の書込アクセスを受け付けた場合に、前記第2のアドレスを前記第1のデータに関連付けるとともに、前記メモリへの前記第2のデータの格納を抑止する、
処理を実行させ、
前記決定は、前記一括圧縮のグループに含めるデータの候補から前記第
2のデータを除外することを含む、
ことを特徴とする、付記11〜17のいずれか1項記載の情報処理プログラム。
【0197】
(付記19)
前記決定は、同一のボリュームに属する複数のデータを、前記一括圧縮のグループに含めるデータの候補とすること含む、
ことを特徴とする、付記11〜18のいずれか1項記載の情報処理プログラム。
【0198】
(付記20)
データの書込アクセスの時刻をデータごとに管理情報に記録し、
書込アクセスに係るデータを記憶するメモリからデータを記憶装置に書き出す際に、前記管理情報に基づいて、書込アクセスの時刻の差分が閾値以下である複数のデータを一括圧縮のグループに決定し、
前記決定したグループに対応する複数のデータを一括圧縮し、前記一括圧縮して得られた圧縮データを前記記憶装置に書き込む
ことを特徴とする、情報処理方法。