(57)【要約】【課題】データを圧縮して適切に管理できるようにする。【解決手段】データを格納可能なＦＭチップを備える１以上のＦＭＰＫ１１３と、ＦＭＰＫ１１３に対する所定のライト要求のライトデータの格納を制御するストレージコントローラ１０９とを備えるストレージ装置１０４において、ＦＭＰＫ１１３は、第１圧縮アルゴリズムと異なる第２圧縮アルゴリズムによりデータを圧縮させる圧縮伸長回路を備え、ストレージコントローラ１０９は、第１圧縮アルゴリズムによりデータを圧縮させ、所定の条件に基づいて、ライトデータを、ストレージコントローラ１０９と、圧縮伸長回路とのいずれにより圧縮させるかを決定し、決定したストレージコントローラ１０９又は圧縮伸長回路によりライトデータを圧縮させてＦＭＰＫ１１３に格納させるように構成する。【選択図】図２
2019079113.tif 000002
【特許請求の範囲】
【請求項１】
データを格納可能な不揮発記録媒体を備える１以上の不揮発メモリパッケージと、前記不揮発メモリパッケージに対する所定のライト要求のライトデータの格納を制御するストレージコントローラとを備えるストレージ装置であって、
第１圧縮アルゴリズムによりデータを圧縮させる第１データ圧縮部と、
第１圧縮アルゴリズムと異なる第２圧縮アルゴリズムによりデータを圧縮させる第２データ圧縮部と、を備え、
前記ストレージコントローラは、
所定の条件に基づいて、前記ライトデータを、前記第１データ圧縮部又は前記第２データ圧縮部のいずれにより圧縮させるかを決定し、決定した前記第１データ圧縮部又は前記第２データ圧縮部により前記ライトデータを圧縮させて前記不揮発メモリパッケージに格納させるストレージ装置。
【請求項２】
前記ストレージ装置においては、
前記不揮発メモリパッケージの前記不揮発記録媒体の記憶領域により構成される容量プールの記憶領域が割り当てられる仮想ボリュームが構成されており、
前記ストレージコントローラは、
ホスト装置から前記仮想ボリュームの所定のページを上書きするライト要求である上書き要求があった場合に、前記仮想ボリュームの前記所定のページに割り当てられている前記容量プールの領域に対して、前記上書き要求のライトデータを格納させるように前記不揮発メモリパッケージにライト要求を出力し、
前記不揮発メモリパッケージのコントローラは、前記ライト要求を受け取った場合に、前記容量プールの領域に対して割り当てられている記憶領域を別の記憶領域に変更し、前記別の記憶領域に前記ライトデータを格納させる
請求項１に記載のストレージ装置。
【請求項３】
前記ストレージコントローラは、
前記ホスト装置との間では、前記仮想ボリュームのページを単位としたデータの送受信を行い、前記不揮発メモリパッケージとの間では、前記ページよりも小さいサイズのブロックを単位としたデータの送受信を行い、
前記ストレージコントローラは、前記ストレージコントローラに含まれている前記第１データ圧縮部又は前記第２データ圧縮部の少なくとも一方により、前記ライト要求対象のデータを圧縮して得られた圧縮データのサイズが、前記ブロックのサイズよりも小さい場合に、前記圧縮データを、所定の調整データを付加して前記ブロックのサイズに調整した後に、前記不揮発メモリパッケージに送信する
請求項２に記載のストレージ装置。
【請求項４】
前記不揮発メモリパッケージは、
前記ストレージコントローラから受信した前記ブロックの中に前記調整データが含まれている場合には、前記ブロックから前記調整データを取り除いた前記圧縮データを取出し、前記圧縮データを格納する
請求項３に記載のストレージ装置。
【請求項５】
前記ストレージコントローラは、
前記ホスト装置から前記仮想ボリュームに対するリード要求を受け取った場合であって、前記リード要求対象のデータが、前記ブロックのサイズよりも小さい前記圧縮データである場合に、前記圧縮データを含むブロックデータを前記不揮発メモリパッケージから取得し、前記ブロックから前記調整データを取り除いた圧縮データを取出し、前記圧縮データを伸長して、前記ホスト装置に送信する
請求項４に記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、
前記ライト要求のライト先となる前記仮想ボリュームのページのアクセス頻度に基づいて、前記第１データ圧縮部又は前記第２データ圧縮部のいずれにより圧縮させるかを決定する
請求項２乃至請求項５のいずれか一項に記載のストレージ装置。
【請求項７】
前記第１圧縮アルゴリズムは、前記第２圧縮アルゴリズムよりも圧縮処理に係る時間が長いが圧縮率が高いアルゴリズムであり、
前記ストレージコントローラは、
前記アクセス頻度が所定の閾値よりも大きい場合には、前記第２データ圧縮部により前記ライトデータを圧縮させ、前記アクセス頻度が所定の閾値よりも大きくない場合には、前記ライトデータを前記第１データ圧縮部により圧縮させる
請求項６に記載のストレージ装置。
【請求項８】
前記ストレージコントローラは、
前記仮想ボリュームのページに格納されているデータについて、前記アクセス頻度に基づいて、前記データを圧縮するために適切なアルゴリズムである適切アルゴリズムを決定し、前記データを圧縮するために使用したアルゴリズムが適切アルゴリズムであるか否かを判定し、前記データを圧縮するために使用したアルゴリズムが適切アルゴリズムでない場合に、前記データを伸長させた後、前記適切アルゴリズムで圧縮させて、前記不揮発メモリパッケージに格納させる
請求項６又は請求項７に記載のストレージ装置。
【請求項９】
前記ストレージコントローラは、
前記ストレージ装置における業務負荷が所定値以下である場合であって、前記データを圧縮するために使用したアルゴリズムが適切アルゴリズムでない場合に、前記データを伸長させた後、前記適切アルゴリズムで圧縮させて、前記不揮発メモリパッケージに格納させる
請求項８に記載のストレージ装置。
【請求項１０】
前記第１データ圧縮部は、ストレージコントローラ側に備えられ、
前記第２データ圧縮部は、前記不揮発メモリパッケージに含まれている
請求項１乃至請求項９のいずれか一項に記載のストレージ装置。
【請求項１１】
前記第１データ圧縮部及び前記第２データ圧縮部は、ストレージコントローラ側に備えられている
請求項１乃至請求項９のいずれか一項に記載のストレージ装置。
【請求項１２】
前記第１データ圧縮部及び前記第２データ圧縮部は、前記不揮発メモリパッケージに含まれている
請求項１乃至請求項９のいずれか一項に記載のストレージ装置。
【請求項１３】
データを格納可能な不揮発記録媒体を備える１以上の不揮発メモリパッケージと、前記不揮発メモリパッケージに対するデータの格納を制御するストレージコントローラとを備えるストレージ装置によるデータ管理方法であって、
前記ストレージ装置は、
第１圧縮アルゴリズムによりデータを圧縮させる第１データ圧縮部と、
第１圧縮アルゴリズムと異なる第２圧縮アルゴリズムによりデータを圧縮させる第２データ圧縮部と、を備えており、
所定の条件に基づいて、前記第１データ圧縮部又は前記第２データ圧縮部のいずれによりデータを圧縮させるかを決定し、
決定した前記第１データ圧縮部又は前記第２データ圧縮部により前記データを圧縮させて前不揮発メモリパッケージに格納させる
データ管理方法。
【請求項１４】
データを格納可能な不揮発記録媒体を備える１以上の不揮発メモリパッケージに対するデータの格納を制御するストレージコントローラを構成するコンピュータに実行させるためのデータ管理プログラムであって、
前記コンピュータを、
所定の条件に基づいて、第１圧縮アルゴリズムによりデータを圧縮させる第１データ圧縮部、又は前記第１圧縮アルゴリズムと異なる第２圧縮アルゴリズムによりデータを圧縮させる第２データ圧縮部のいずれによりデータを圧縮させるかを決定する手段と、
決定した前記第１データ圧縮部又は前記第２データ圧縮部により前記データを圧縮させて前記不揮発メモリパッケージに格納させる手段と、
して機能させるためのデータ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを圧縮させて管理するストレージ装置等に関する。
【背景技術】
【０００２】
オールフラッシュアレイ（ＡＦＡ：Ａｌｌ  Ｆｌａｓｈ  Ａｒｒａｙ）などのフラッシュストレージ装置の価格はフラッシュメモリの媒体コストによって決まるが、フラッシュメモリのビットコストは依然として高価である。オールフラッシュアレイでは、圧縮をはじめとする種々の技術によってフラッシュメモリの物理容量を削減することでビットコストの低減を図っている。
【０００３】
ストレージ装置に採用されている圧縮アルゴリズムは数種類あり、各圧縮アルゴリズムは、圧縮伸長速度、圧縮率、圧縮伸長処理に必要なメモリ量などの特徴が異なる。
【０００４】
従来、ストレージ装置の圧縮機能としては、いずれか１つの圧縮アルゴリズムが選択されて採用されている。
【０００５】
ストレージ装置における圧縮データを格納する技術としては、例えば、特許文献１に記載の技術が知られている。
【０００６】
また、圧縮機能を実装しているフラッシュストレージ装置が知られているが、フラッシュストレージ装置では、追記型のログストラクチャード方式によるデータ格納方法が採用されている。このログストラクチャード方式によるデータ格納方法によると、フラッシュストレージ装置での上書きライト処理は、旧データ（更新前のデータ）が書き込まれた記憶領域（ストレージ装置のストレージコントローラが管理している記憶領域）ではなく、上書きライトデータ用にストレージコントローラにより新たに確保された記憶領域に上書きライトデータを書き込む（追記）する。旧データが格納された記憶領域は、データが新たに書き込めない無効領域、即ちガベージとなる。フラッシュストレージ装置においては、ガベージが一定量たまった時、ストレージコントローラによりガベージコレクション(ＧＣ)処理が実行されて、ガベージが新たにデータを書き込むことのできる空き領域とされる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−１０４２３６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ストレージ装置において或る圧縮アルリズムが採用されている場合には、この採用した圧縮アルゴリズムの特性によって、実現できる圧縮率や、圧縮処理や伸長処理における負荷等が決まってしまう。ストレージ装置に格納するデータの性質（例えば、高アクセス頻度、低アクセス頻度等）によっては、ストレージ装置における容量効率を向上したい場合や、圧縮処理や伸長処理における負荷を軽減したいということが考えられるが、採用している圧縮アルゴリズムによって制限されてしまう虞がある。
【０００９】
本発明は、上記事情に鑑みなされたものであり、その目的は、ストレージ装置において、データを圧縮して適切に管理することのできる技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、一観点に係るストレージ装置は、データを格納可能な不揮発記録媒体を備える１以上の不揮発メモリパッケージと、不揮発メモリパッケージに対する所定のライト要求のライトデータの格納を制御するストレージコントローラとを備えるストレージ装置であって、第１圧縮アルゴリズムによりデータを圧縮させる第１データ圧縮部と、第１圧縮アルゴリズムと異なる第２圧縮アルゴリズムによりデータを圧縮させる第２データ圧縮部と、を備え、ストレージコントローラは、所定の条件に基づいて、ライトデータを、第１データ圧縮部又は第２データ圧縮部のいずれにより圧縮させるかを決定し、決定した第１データ圧縮部又は第２データ圧縮部によりライトデータを圧縮させて不揮発メモリパッケージに格納させる。
【発明の効果】
【００１１】
本発明によれば、データを圧縮して適切に管理することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、第１実施形態に係るデータ管理方法の概要を示すフローチャートである。
【図２】図２は、第１実施形態に係る計算機システムの全体構成図である。
【図３】図３は、第１実施形態に係るフラッシュメモリパッケージの構成図である。
【図４】図４は、第１実施形態に係るストレージ装置における仮想ボリューム、プール、フラッシュ側プール、及びフラッシュメモリパッケージを用いたデータの格納状況を説明する図である。
【図５】図５は、第１実施形態に係る共有メモリの構成図である。
【図６】図６は、第１実施形態に係るＦＭＰＫのメモリの構成図である。
【図７】図７は、第１実施形態に係る仮想ボリューム情報の構成図である。
【図８】図８は、第１実施形態に係るプール情報の構成図である。
【図９】図９は、第１実施形態に係るフラッシュ側プール情報の構成図である。
【図１０】図１０は、第１実施形態に係る圧縮アルゴリズム情報の構成図である。
【図１１】図１１は、第１実施形態に係るＦＭＰＫ情報の構成図である。
【図１２】図１２は、第１実施形態に係るライト処理のフローチャートである。
【図１３】図１３は、第１実施形態に係るリード処理のフローチャートである。
【図１４】図１４は、第１実施形態に係る圧縮アルゴリズム変更判定処理のフローチャートである。
【図１５】図１５は、第１実施形態に係る圧縮アルゴリズム変更メイン処理のフローチャートである。
【図１６】図１６は、第１実施形態に係る圧縮時間重視への圧縮アルゴリズム変更処理のフローチャートである。
【図１７】図１７は、第１実施形態に係る圧縮率重視への圧縮アルゴリズム変更処理のフローチャートである。
【図１８】図１８は、第２実施形態に係るストレージ装置における圧縮アルゴリズム変更処理のフローチャートである。
【発明を実施するための形態】
【００１３】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１４】
以下の説明では、実施形態に係る情報を、例えば、テーブルよるデータ構造で表現して説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくてもよく、「リスト」、「ＤＢ（データベース）」、「キュー」等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「ＤＢ」、「キュー」等については、単に「情報」と呼ぶこともできる。また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」「番号」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
【００１５】
また、以下の説明では「プログラム」を動作の主体として説明を行うが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、プロセッサを主体とした説明としてもよく、コントローラを主体とした説明としてもよい。
【００１６】
また、プログラムを主語として開示された処理は、ストレージ装置等の計算機（コンピュータ、情報処理装置）が行う処理としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや記憶メディア（例えば、不揮発性記録メディア）によって各計算機にインストールされてもよい。
【００１７】
また、リード／ライト処理を読み出し／書き込み処理または更新処理と記載することがある。これらの処理をまとめてアクセス要求アクセス処理と記載することもある。
【００１８】
また、「圧縮」とは、例えばＬＺＷアルゴリズム等の可逆圧縮アルゴリズムを用いて、データの意味を保ったままデータサイズを縮小することを意味する。実施形態に係る計算機システムでは、ストレージ装置内において、ホストから書き込まれるデータの圧縮を行うことがある。ストレージ装置で圧縮処理が行われたことによりサイズが縮小されたデータのことを、「圧縮データ」と呼び、ストレージ装置で圧縮処理が施されていないデータの事を「非圧縮データ」と呼ぶ。また可逆圧縮アルゴリズムを用いて、圧縮データを元のデータサイズに戻すことを、「伸長」と呼ぶ。
【００１９】
また、以下の説明では、データ圧縮によるデータサイズの縮小効率の指標として、「圧縮率」を用いる。本明細書における圧縮率は、以下の計算式により定義されるものである。
圧縮率＝圧縮データのサイズ÷非圧縮データのサイズ
【００２０】
また、「更新」とは、記憶領域に格納されているデータの内容を新しい内容に書き換える（上書きする）ことを意味する。或る記憶領域が更新される前に、その記憶領域に格納されていたデータは、「更新前データ」と呼ばれる。一方その記憶領域に新たに書き込まれるデータのことは、「更新データ」または「更新後データ」と呼ばれる。
【００２１】
また、以下の説明では、「ＲＡＩＤ」は、Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  （ｏｒ  Ｉｎｅｘｐｅｎｓｉｖｅ）  Ｄｉｓｋｓの略である。ＲＡＩＤ  Ｇｒｏｕｐ（ＲＡＩＤグループ）は、複数の物理デバイス（典型的には同種の物理デバイス）で構成され、そのＲＡＩＤ  Ｇｒｏｕｐに関連付けられたＲＡＩＤレベルに従いデータを記憶する。ＲＡＩＤ  Ｇｒｏｕｐは、パリティグループと呼ばれてもよい。パリティグループは、例えば、パリティを格納するＲＡＩＤ  Ｇｒｏｕｐのことでよい。
【００２２】
まず、第１実施形態に係るデータ管理方法の概要を説明する。
【００２３】
図１は、第１実施形態に係るデータ管理方法の概要を示すフローチャートである。
【００２４】
ストレージ装置１０４（図２参照）は、上位計算機（例えば、ホスト計算機１０１）から、ストレージ装置１０４で記憶しているボリュームに対するユーザからの上書きライト要求を受信する。ストレージ装置１０４は、上書きライト要求を受信すると、上書きライト要求の対象のデータ（ライトデータ）のライト先となるページ（ライト対象ページ）についてのＩ／Ｏ要求の頻度であるアクセス頻度情報を参照する（Ｓ１０）。ここで、上書きライト要求とは、ライトデータが既に格納されているボリュームの箇所に対してライトデータをライトさせるライト要求のことである。
【００２５】
次いで、ストレージ装置１０４は、ライト対象ページのアクセス頻度が、予め設定されている閾値より高いか否かを判定する（Ｓ２０）。
【００２６】
この結果、アクセス頻度が閾値よりも高い場合（Ｓ２０：ＹＥＳ）には、ストレージ装置１０４は、ライト対象ページをアクセス頻度が高いページと判断し、フラッシュメモリパッケージ（ＦＭＰＫ）１１３（図２参照）側に、ライトデータの圧縮処理をオフロードする（Ｓ３０）一方、ライト対象ページのアクセス頻度が低い場合（Ｓ２０：ＮＯ）には、ストレージ装置１０４は、ストレージコントローラ１０９側（ストレージコントローラ１０９又はストレージコントローラ１０９とバスを介して接続された回路等）でライトデータの圧縮処理を行う（Ｓ４０）。本実施形態においては、ＦＭＰＫ１１３で実行される圧縮処理と、ストレージコントローラ１０９側で実行される圧縮処理とは、異なる圧縮アルゴリズムであり、ライト対象ページのアクセス頻度に基づいて、いずれの圧縮アルゴリズムによる圧縮処理を実行するかを選択し、その圧縮アルゴリズムによりライトデータを圧縮した後、ＦＭＰＫ１１３のＦＭチップ２８０（図３参照）に格納する。
【００２７】
次に、第１実施形態に係る計算機システムについて詳細に説明する。
【００２８】
図２は、第１実施形態に係る計算機システムの全体構成図である。
【００２９】
計算機システム１００は、１以上のホスト計算機（ホストという）１０１と、１以上の管理装置１０２と、ストレージ装置１０４とを備える。ホスト１０１と、管理装置１０２と、ストレージ装置１０４とは、ネットワーク１０３を介して接続されている。ネットワーク１０３は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）や、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよい。また、ホスト１０１とストレージ装置１０４とを接続するネットワークと、管理装置１０２とストレージ装置１０４とを接続するネットワークとを別のネットワークとしてもよい。また、計算機システム１００に管理装置１０２を備えないようにしてもよい。
【００３０】
ホスト１０１は、例えば、汎用大型コンピュータやサーバや汎用のハードウェアコンポーネントから構成される装置や汎用サーバなどで構成してもよく、アプリケーションプログラムを実行する計算機である。ホスト１０１は、ストレージ装置１０４が提供する論理的な記憶領域（仮想ボリューム）にネットワーク１０３経由でアクセスする。ホスト１０１は、ストレージ装置１０４に対して、アクセスコマンドであるリードコマンド（リード要求）やライトコマンド（ライト要求）を発行することで、ストレージ装置１０４の仮想ボリュームに格納されたデータにアクセスする。
【００３１】
管理装置１０２は、例えば、管理計算機やサーバや汎用のハードウェアコンポーネントから構成される装置や汎用サーバなどで構成してもよく、ストレージ装置１０４の記憶領域の構成を管理する。
【００３２】
ストレージ装置１０４は、ＦＭＰＫ１１３の記憶領域にデータを格納する。ストレージ装置１０４は、ホスト１０１に対して１以上のボリューム（仮想ボリューム又は論理ボリューム）を提供する。
【００３３】
ストレージ装置１０４は、ホストインターフェイス（Ｉ／Ｆ）１０６、保守Ｉ／Ｆ１０７、ストレージコントローラ１０９、キャッシュメモリ１１０、共有メモリ１１１、ドライブインターフェイス（Ｉ／Ｆ）１０８、不揮発メモリパッケージの一例としてのＦＭＰＫ１１３（１１３Ａ〜１１３Ｄ）を含む。これらのハードウェアの構成要素は、冗長化されていてもよい。これら構成要素は、バス１１２によって相互接続されている。なお、ストレージ装置１０４からＦＭＰＫ１１３を除いた構成とし、この構成のストレージ装置１０４と、ＦＭＰＫ１１３とを図示しない外部ネットワークを介して接続するようにしてもよい。
【００３４】
ホストＩ／Ｆ１０６は、ストレージ装置１０４がホスト１０１等のイニシエータと通信するために用いられるインターフェイスデバイスである。ホストＩ／Ｆ１０６は、ネットワーク１０３を介してホスト１０１との間でデータを送受信する。ホスト１０１がボリュームにアクセスするために発行するコマンドは、ホストＩ／Ｆ１０６に到来する。また、ストレージ装置１０４は、ホスト１０１にホストＩ／Ｆ１０６から情報（応答）を返す。
【００３５】
保守Ｉ／Ｆ１０７は、ストレージ装置１０４が管理装置１０２と通信するためのインターフェイスデバイスである。保守Ｉ／Ｆ１０７は、ネットワーク１０３を介してホスト１０１、又は、管理装置１０２との間でシステム管理上必要なデータ（管理情報）を送受信する。管理装置１０２からのコマンドは保守Ｉ／Ｆ１０７に到来する。また、ストレージ装置１０４は、管理装置１０２に保守Ｉ／Ｆ１０７から情報（応答）を返す。
【００３６】
ストレージコントローラ１０９は、プロセッサ１０５と、プロセッサ１０５と接続されたローカルメモリ１１４とを備える。ローカルメモリ１１４は、例えばＲＡＭ等で構成され、プロセッサ１０５に使用されるプログラムやデータ等を格納する。プロセッサ１０５は、共有メモリ１１１に格納されているプログラムをローカルメモリ１１４に読み込んで、そのプログラムに記述されている処理を実行する。プロセッサ１０５が実行するプログラムとしては、例えば、所定の圧縮アルゴリズムに従うデータの圧縮処理及び伸長処理（圧縮伸長処理）を実行する圧縮伸長プログラムがある。本実施形態では、プロセッサ１０５が圧縮伸長プログラムを実行することにより、データの圧縮伸長処理を実行するようにしているが、本発明はこれに限られず、例えば、圧縮伸長処理を実行するハードウェア回路をストレージコントローラ１０９内や、バス１１２に接続するようにし、この回路により圧縮伸長処理を実行するようにしてもよい、
【００３７】
共有メモリ１１１は、例えば、ハードディスクやフラッシュメモリ等の不揮発性メモリで構成され、プロセッサ１０５に実行されるプログラムや構成情報等を格納する。なお、共有メモリ１１１を、ＤＲＡＭ、ＳＲＡＭ等の揮発性メモリ又は不揮発性メモリで構成してもよい。
【００３８】
キャッシュメモリ１１０は、例えば、ＤＲＡＭ、ＳＲＡＭ等の揮発性メモリ又は不揮発性メモリで構成され、仮想ボリューム（ＦＭＰＫ１１３）に対するライトデータ、又は仮想ボリューム（ＦＭＰＫ１１３）から読み出されたデータ（リードデータ）を一時的に記憶する。
【００３９】
キャッシュメモリ１１０と共有メモリ１１１は、コントローラ１０９内のローカルメモリ１１４と異なり、任意のコントローラ１０９のプロセッサ１０５からアクセス可能である。
【００４０】
ドライブＩ／Ｆ１０８は、ＦＭＰＫ１１３との間でデータを送受信する。なお、ストレージ装置１０４に、保守Ｉ／Ｆ１０７と異なるネットワークＩ／Ｆを設け、このネットワークＩ／Ｆ及びネットワークを介して外部のストレージ装置を接続するようにしてもよい。この場合には、外部のストレージ装置から提供される記憶領域を、ストレージ装置１０４で管理する、後述するプールの少なくとも一部の記憶領域としてもよい。
【００４１】
ＦＭＰＫ１１３は、ホスト１０１からのライトデータを最終的に格納するための不揮発性記憶媒体を含む記憶デバイスである。ストレージコントローラ１０９は、一台のＦＭＰＫ１１３が故障しても、そのＦＭＰＫ１１３のデータを復元できるＲＡＩＤ機能をもっていてもよい。この場合には、複数のＦＭＰＫ１１３が、１つのＲＡＩＤグループ（パリティグループ）３０８を構成する。
【００４２】
ＦＭＰＫ１１３は、不揮発記録媒体として、例えば、１以上のフラッシュメモリチップ２８０（図３参照）を有する。ＦＭＰＫ１１３の一例としては、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）がある。
【００４３】
ＦＭＰＫ１１３は、ライトデータを圧縮して自身の記憶媒体に格納する機能（圧縮機能）を有してもよい。複数のＦＭＰＫ１１３は、ＲＡＩＤグループに基づいて１つ以上の論理記憶領域（論理ボリューム）を提供する。論理ボリュームは、ＲＡＩＤグループのＦＭＰＫ１１３が有する物理的な記憶領域と関連付けられる。
【００４４】
次に、ＦＭＰＫ１１３について詳細に説明する。
【００４５】
図３は、第１実施形態に係るフラッシュメモリパッケージの構成図である。
【００４６】
ＦＭＰＫ１１３は、フラッシュメモリ（ＦＭ）コントローラ２１０と、データを記憶するための不揮発記憶媒体である複数のフラッシュメモリ（ＦＭ）チップ２８０とを備える。
【００４７】
ＦＭコントローラ２１０は、ドライブインターフェイス（Ｉ／Ｆ）２１１、プロセッサ２１３、メモリ２１４、フラッシュインターフェイス（Ｉ／Ｆ）２１５、圧縮伸長回路２１６を含む。これら構成要素は、内部ネットワーク２１２を介して相互接続されている。なお、圧縮伸長回路２１６を備えていなくてもよい。
【００４８】
ドライブＩ／Ｆ２１１は、ストレージ装置１０４のストレージコントローラ１０９と通信するためのインターフェイスデバイスである。フラッシュＩ／Ｆ２１５は、ＦＭコントローラ２１０がＦＭチップ２８０と通信するためのインターフェイスデバイスである。
【００４９】
メモリ２１４は、プロセッサ２１３が実行するプログラムや、プロセッサ２１３が使用する制御情報等を格納する。
【００５０】
プロセッサ２１３は、ＦＭＰＫ１１３のメモリ２１４に格納されたプログラムを実行することにより、各種処理（例えば、後述する記憶領域の管理、ストレージコントローラ１０９からのアクセス要求に対応する処理等）を実行する。例えば、プロセッサ２１３は、ストレージコントローラ１０９からリード要求又はライト要求を受け付け、受けた要求に従う処理を実行する。プロセッサ２１３は、ストレージコントローラ１０９からライト要求を受け、そのライト要求に従うデータをＦＭチップ２８０に書き込んだ段階で、そのライト要求を完了し、ライト要求の完了をストレージコントローラ１０９に報告するようにしてもよい。また、プロセッサ２１３は、ストレージコントローラ１０９とＦＭチップ２８０との間でリード又はライトされるデータをバッファ（図示せず）に一時的に格納してもよい。また、プロセッサ２１３は、ストレージコントローラ１０９からのライト要求に従うデータを、バッファに書き込んだ段階で、そのライト要求の完了報告をストレージコントローラ１０９に送信してもよい。
【００５１】
圧縮伸長回路２１６は、データの圧縮処理及び伸長処理を行うデバイスである。圧縮伸長回路２１６は、例えば、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等のハードウェアで実装される。なお、圧縮伸長回路２１６を、ＣＰＵとメモリとで構成してもよい。この場合、ＣＰＵがデータ圧縮及び／又は伸長処理を行うためのプログラムを実行することにより、データの圧縮または伸長処理を行うようにすればよい。また、プロセッサ２１３がデータ圧縮及び／又は伸長処理を行うためのプログラムを実行することにより、データの圧縮処理及び／又は伸長処理を行うようにしてもよい。このようにした場合には、ＦＭコントローラ２１０内に圧縮伸長回路２１６を備えなくてもよい。
【００５２】
上記した計算機システム１００において、複数の圧縮アルゴリズムによる圧縮伸長処理を実行可能にする場合、圧縮伸長処理を実行する構成としては、以下の３つの組合せが考えられる。
【００５３】
１．ストレージコントローラ１０９側（ストレージコントローラ１０９内又は、ストレージコントローラ１０９とバス１１２を介して接続された範囲）と、ＦＭＰＫ１１３内とのそれぞれの圧縮伸長処理を実行する機能を利用する構成。
２．ストレージコントローラ１０９側の複数の圧縮伸長処理を実行する機能を利用する構成。
３．ＦＭＰＫ１１３内の複数の圧縮伸長処理を実行する機能を利用する構成。
【００５４】
第１実施形態の以下の説明においては、１．ストレージコントローラ１０９側と、ＦＭＰＫ１１３内とのそれぞれの圧縮伸長処理を実行する機能を利用する構成を例に説明するが、他の構成としてもよい。
【００５５】
ストレージ装置１０４は、一般にシンプロビジョニングといわれる容量仮想化機能をもつている。容量仮想化における記憶領域の制御単位はページである。本実施形態では、ページのサイズは、ＦＭチップ２８０における消去単位よりも大きい。ページのサイズは、例えば、４２ＭＢである。ストレージコントローラ１０９によるＦＭＰＫ１１３との間でのＩ／Ｏの単位であるブロックのサイズは、例えば、８ＫＢである。
【００５６】
図４は、第１実施形態に係るストレージ装置における仮想ボリューム、プール、フラッシュ側プール、及びフラッシュメモリパッケージを用いたデータの格納状況を説明する図である。
【００５７】
ストレージ装置１０４は、ホスト１０１からのアクセスを許す記憶領域である１以上のターゲットデバイス３１０を備える。ターゲットデバイス３１０は、容量仮想化されたボリューム（仮想ボリューム）３１１や、論理ボリュームが関連付けられる。また、ターゲットデバイス３１０には、ホストＩ／Ｆ１０６の通信ポート３１４が関連付けられる。
【００５８】
仮想ボリューム３１１は、プール３０３を用いて定義された、シンプロビジョニング又は／及びティアリングを適用した仮想記憶領域である。仮想ボリューム３１１は、１以上のページ３２１によって構成されている。仮想ボリューム３１１はオンラインボリュームである。
【００５９】
プール３０３は、シンプロビジョニングやティアリングに用いるプールボリューム３０５の集合である。プール３０３のページ３２３は、プールボリューム３０５から切り出された記憶領域である。プールボリューム３０５は、オフラインボリュームである。このため、ホスト１０１から指定されるターゲットデバイス３１０には関連付けられていない。
【００６０】
プールボリューム３０５は、１以上のページ３２４により構成されている。なお、図４において、プール３０３のページ３２３と、プールボリューム３０５のページ３２４とは、概念の説明上別々に図示してあるが、同じものである。
【００６１】
仮想ボリューム３１１のページ３２１に対しては、プール３０３のページ３２３が割り当てられる。
【００６２】
プール３０３に対しては、仮想ボリューム３１１の記憶領域に対応するアドレスと、実記憶領域のアドレスとをマッピングするためのプール３０３上のアドレス空間であるプールアドレス空間が定義されている。
【００６３】
ページ３２３は、フラッシュ側プール３０４を介して、パリティグループ（ＲＡＩＤグループ）３０８の実記憶領域が割り当てられる。パリティグループ３０８は、複数のＦＭＰＫ（記憶デバイス）１１３を用いて定義される。これにより、ＲＡＩＤによる高信頼化、高速化、大容量化が達成される。
【００６４】
ＦＭＰＫ１１３の記憶領域は、ブロックを単位として管理されている。ストレージコントローラ１０９は、ブロック単位で、ＦＭＰＫ１１３にアクセスする。フラッシュ側プール３０４のブロック３２５は、ストレージコントローラ１０９から見た仮想ブロックである。パリティグループ３０８のブロック３２６は、ストレージコントローラ１０９にとっては、実際にデータを格納すると把握されているブロックである。
【００６５】
フラッシュ側プール３０４は、１以上のブロック３２５から構成される。プール３０３のページ３２３は、複数のブロック３２５に対応付けられる。ブロック３２５に格納されるデータは、ＦＭＰＫ１１３内のブロック３２６に格納される。
【００６６】
ＦＭＰＫ１１３においては、複数のＦＭチップ２８０の記憶領域に対して、フラッシュメモリアドレス空間が定義されている。
【００６７】
また、ＦＭＰＫ１１３においては、フラッシュメモリアドレス空間と、フラッシュ側プール３０４のアドレス空間とのマッピングのためのＦＭＰＫアドレス空間が定義されている。すなわち、フラッシュ側プール３０４のブロック３２５は、ＦＭＰＫアドレス空間のブロックを介して、ブロック３２６にマッピングされる。ＦＭＰＫアドレス空間は、ストレージコントローラ１０９から見えるＦＭＰＫ１１３のアドレス空間である。各ＦＭＰＫ１１３に対して、フラッシュメモリアドレス空間とＦＭＰＫアドレス空間が定義されている。
【００６８】
１つのＦＭＰＫ１１３において、ＦＭＰＫアドレス空間のブロックにより構成される容量は、ブロック３２６により構成される容量よりも大きい場合があり得る。ブロック３２６は、フラッシュメモリアドレス空間のブロックである。ＦＭＰＫ１１３は、実ブロック数より多くの仮想ブロックをもっているように、ストレージコントローラ１０９に見せることができる。このため、仮想ブロックにより構成される容量のほうが、実ブロックにより構成される容量より大きい。
【００６９】
ＦＭＰＫ１１３は、ブロック３２６を割り当てていないブロック３２５に属するアドレスを指定したライト要求をストレージコントローラ１０９から受け付けた場合、そのブロック３２５にブロック３２６を割り当てる。ブロック３２５へ上書きライトする場合、ＦＭＰＫ１１３は、ＦＭＰＫ１１３内でブロック３２６に対してＦＭチップ２８０のブロックを新規に確保して割り当て、新規に割り当てたブロックにライトデータを格納し、ＦＭＰＫアドレス空間とフラッシュメモリアドレス空間とのマッピングをし直す。
【００７０】
パリティグループ３０８は、複数の同種、同一通信インターフェイスのＦＭＰＫ１１３によって構成されており、それら複数のＦＭＰＫ１１３に跨るストライプライン（記憶領域）３０７が定義される。ストライプライン３０７は、消失データを回復可能な冗長構成を有する、ホストデータとパリティデータ（冗長データ）とを格納する。
【００７１】
プール３０３のページ３２３には、仮想ボリューム３１１のページ３２１に含まれない冗長データが格納されることがある。
【００７２】
フラッシュ側プール３０４は、パリティグループ３０８に基づく仮想的な記憶資源である。フラッシュ側プール３０４に対して、コントローラ１０９側の記憶容量を管理するアドレス空間と、ＦＭＰＫ１１３内の記憶容量を管理するアドレス空間とをマッピングするためのフラッシュ側プールアドレス空間が定義されている。
【００７３】
ＦＭＰＫアドレス空間とフラッシュ側プールアドレス空間との間のマッピングは、一度決定されると維持される、すなわち、静的である。また、フラッシュ側プールアドレス空間とプールアドレス空間との間のマッピングも静的である。
【００７４】
一方、プールアドレス空間は、仮想ボリューム３１１にアドレス領域を動的に割り当てプール３０３のアドレス空間である。ページ３２３（３２４）を構成するブロックは、フラッシュ側プール３０４のブロック３２５と、１対１でマッピングされている。ブロック３２５は、ストライプライン３０７の記憶領域と関連付けられている。ページ３２４のブロックに格納されるデータは、そのブロックに関連付けられているストライプライン３０７に格納される。１つのページ３２４に複数のストライプライン３０７が関連付けられていてもよい。
【００７５】
上記した構成におけるリード、ライトの処理について説明する。
【００７６】
ホスト１０１が、ターゲットデバイス３１０を指定したＩ／Ｏコマンド（ライトコマンド又はリードコマンド）をストレージ装置１０４に送信した場合を例に説明する。ここで、ターゲットデバイス３１０には、上述した通り、仮想ボリューム３１１が関連付けられている。
【００７７】
ストレージ装置１０４は、仮想ボリューム３１１に関連付けられているターゲットデバイス３１０を指定したライトコマンドを受信した場合、プール３０３から空いているページ３２３を選択し、仮想ボリューム３１１のライト先のページ３２１に割り当てる。
【００７８】
ストレージ装置１０４は、選択したページ３２３にライトデータを書き込む。ページ３２３にデータを書き込むことは、このページ３２３にマッピングされたフラッシュ側プールアドレス空間のブロック３２５に関連づけられているストライプライン３０７に書き込むこととなり、更には、ストライプライン３０７に関連付けられたＦＭチップ２８０にデータを書き込むこととなる。具体的には、ストレージコントローラ１０９は、ライト先のページ３２３に対応するフラッシュ側プールアドレス空間のブロック３２５が、マッピングされているＦＭＰＫアドレス空間のブロックを検索して、検索したブロックに対するリード／ライト要求をＦＭＰＫ１１３に出す。
【００７９】
なお、仮想ボリューム３１１とＦＭＰＫ１１３との間で管理するデータの単位をそろえることで、プール３０３とフラッシュ側プール３０４とを１つのプールとして管理することもできる。
【００８０】
ここで、圧縮機能がストレージコントローラ側に設けてあり、ログストラクチャード方式によりＦＭＰＫにデータを格納する場合についての処理について説明する。このログストラクチャード方式によりデータを格納する場合には、仮想ボリュームの或るページ３２１に対する上書きライト要求があると、ストレージコントローラは、上書きライト要求の対象のライトデータを圧縮処理し、仮想ボリュームのページ３２１に割り当てられているプール３０３のページ３２３とは異なる新規なページ３２３に圧縮したデータを格納する。新規ページ３２３は、仮想ボリューム３１１のどのページにも割り当てられていない空きページである。次いで、ストレージコントローラは、仮想ボリュームのページ３２１に対して、データを格納した新規なページ３２３を割り当てる。
【００８１】
このような上書きライト処理により、旧データが格納されたページ３２３は、無効領域、すなわちガベージとなる。このため、ストレージコントローラは、ガベージの総量が一定量溜まった時、ガベージを空き領域にするためのガベージコレクション処理を実行する必要がある。したがって、カベージコレクション処理を実行するための負荷がストレージコントローラに掛かることとなる。
【００８２】
これに対して、図４に示す構成において、上書きライト要求があった場合の処理について説明する。
【００８３】
ホスト１０１から仮想ボリューム３１１の或るページ３２１に対する上書きライト要求があると、ストレージコントローラ１０９は、上書きライト要求の対象のライトデータをストレージコントローラ１０９側で圧縮処理し、仮想ボリューム３１１のページ３２１に割り当てられているプール３０３のページ３２３に対して静的にマッピングされたフラッシュ側プール３０４のブロック３２５へライトする。すなわち、ストレージコントローラ１０９は、フラッシュ側プール３０４のブロック３２５へのライト要求をＦＭＰＫ１１３に送信する。この結果、ＦＭＰＫ１１３では、ライト要求に従ったライト処理を実施する。ＦＭＰＫ１１３では、物理的なＦＭチップ２８０にデータを格納する際に、新しい領域へデータを格納し、この新しい領域をＦＭＰＫアドレス空間のブロックへマッピングしなおす。
【００８４】
このような処理により、上記したログストラクチャード方式によりＦＭＰＫにデータを格納する場合と異なり、プール３０３内にガベージが溜まることが無い。このため、ストレージコントローラ１０９によるガベージコレクション処理を実行する必要がなく、ガベージコレクション処理によるオーバヘッドを低減でき、オーバヘッドを低減した分だけのストレージコントローラ１０９の資源をＩ／Ｏ処理に振り分けることができるため、Ｉ／Ｏ処理性能を向上することができる。
【００８５】
以上の構成をとることで、ガベージコレクション処理のオーバヘッドをＦＭＰＫ１１３側にオフロードできる。
【００８６】
図５は、第１実施形態に係る共有メモリの構成図である。
【００８７】
ストレージ装置１０４の共有メモリ１１１は、Ｉ／Ｏ処理プログラム３１００、プール管理プログラム３２００、圧縮アルゴリズム選択プログラム３３００、及び圧縮補正処理プログラム３４００といったプログラムモジュールを格納する。また、共有メモリ１１１は、プログラムによって参照等される仮想ボリューム情報２１００、プール情報２２００、フラッシュ側プール情報２３００、及び圧縮アルゴリズム管理情報２４００を格納する。
【００８８】
Ｉ／Ｏ処理プログラム３１００は、実ページに圧縮後のデータを格納するなどのＩ／Ｏに関する処理を行うためのプログラムである。プール管理プログラム３２００は、実ページの選択などプール管理に関する処理を行うためのプログラムである。圧縮アルゴリズム選択プログラム３３００及び圧縮補正処理プログラム３４００による処理内容については後述する。
【００８９】
共有メモリ１１１に格納されたプログラムや情報は、例えば、必要に応じてストレージコントローラ１０９のローカルメモリ１１４にロードされた後、プロセッサ１０５により実行されたり、処理に利用されたりする。
【００９０】
図６は、第１実施形態に係るＦＭＰＫのメモリの構成図である。
【００９１】
ＦＭＰＫ１１３のメモリ２１４は、圧縮補正処理プログラム３７００と、ＦＭＰＫ情報２７００とを格納する。圧縮補正処理プログラム３７００による処理内容については後述する
【００９２】
次に、ストレージ装置１０４の共有メモリ１１１と、ＦＭＰＫ１１３のメモリ２１４に格納されている情報について説明する。
【００９３】
図７は、第１実施形態に係る仮想ボリューム情報の構成図である。
【００９４】
仮想ボリューム情報２１００は、仮想ボリューム３１１を管理するための情報である。
共有メモリ１１１には、ストレージ装置１０４の１つの仮想ボリューム３１１に対して、１つの仮想ボリューム情報２１００が格納されている。
【００９５】
仮想ボリューム情報２１００は、仮想ボリュームＩＤ２１１０と、仮想ページ番号２１２０と、プール内のページ番号２１３０と、アクセス頻度２１４０と、選択アルゴリズム２１５０と、変更選択アルゴリズム２１６０とのフィールドを含む。仮想ページ番号２１２０、プール内のページ番号２１３０、アクセス頻度２１４０、選択アルゴリズム２１５０、及び変更選択アルゴリズム２１６０のフィールドの組は、各仮想ページに対応して設けられている。
【００９６】
仮想ボリュームＩＤ２１１０には、仮想ボリュームを識別する番号が格納される。仮想ページ番号２１２０には、仮想ボリュームを構成するページ（仮想ページ）の番号が格納される。なお、仮想ボリュームには、仮想ボリュームの容量／１ページサイズに相当する個数(割り切れない場合は切り上げた個数)の仮想ページが登録されている。
【００９７】
プール内のページ番号２１３０には、仮想ページに割り当てられたプール３０３のページの番号が格納される。プール内のページ番号２１３０には、仮想ページに実ページが割り当てられていない場合には、対応する実ページがないことを示す情報（例えば「Ｎ／Ａ」）が格納される。
【００９８】
アクセス頻度２１４０には、仮想ページに対する単位時間当たりのアクセス数が多いか否かを判定するために使う情報が格納される。アクセス頻度２１４０には、例えば、予め決めた時間範囲における仮想ページへのリードライト要求数が取得されて登録されてもよく、または、リード要求数とライト要求数とが登録されてもよく、全体のリードライト要求数に対する仮想ページへのリードライト要求数の割合が登録されてもよい。
【００９９】
選択アルゴリズム２１５０には、仮想ページのデータに対して圧縮機能を適用する場合における使用している圧縮アルゴリズム情報が格納される。圧縮アルゴリズム情報は、圧縮アルゴリズム情報テーブル２４００に格納されている圧縮アルゴリズム番号であってもよい。変更選択アルゴリズム２１６０には、対象となるページにデータに対する圧縮アルゴリズムを変更する場合における変更後の圧縮アルゴリズム（適切アルゴリズム）の情報が格納される。
【０１００】
図８は、第１実施形態に係るプール情報の構成図である。
【０１０１】
プール情報２２００は、プール３０３を管理するための情報である。共有メモリ１１１には、ストレージ装置１０４の１つのプール３０３に対して、１つのプール情報２２００が格納されている。
【０１０２】
プール情報２２００は、プールＩＤ２２１０と、フラッシュ側プールＩＤ２２２０と、プールページ番号２２３０と、プールページのブロック番号２２４０と、フラッシュ側プールアドレス空間のブロック番号２２５０と、使用状態２２６０とのフィールドを有する。プールページ番号２２３０、プールページのブロック番号２２４０、フラッシュ側プールアドレス空間のブロック番号２２５０、及び使用状態２２６０のフィールドの組は、プール３０３の各ページに対応して設けられている。
【０１０３】
プールＩＤ２２１０には、プールを識別する番号の情報（プールＩＤ）が格納される。フラッシュ側プールＩＤ２２２０には、プールに対応するフラッシュ側のプール空間を示す識別番号が格納される。プールページ番号２２３０には、プールを構成するページの番号（プールページ番号）が格納される。プールページのブロック番号２２４０には、プールページ番号に対応するページに含まれるブロック番号が格納される。フラッシュ側プールアドレス空間のブロック番号２２５０には、プールのページに含まれるブロックに対応するフラッシュ側プール３０４のブロックの番号が格納される。使用状態２２６０には、プールページ番号２２３０のプールページ番号に対応するページを仮想ページに割り当てた状態（使用中）であるか、未割当の状態（未使用）であるかを示す情報が格納される。なお、従来においては、使用状態２２６０には、プールページ番号２２３０のプールページ番号に対応するページが無効領域となっているか否かの情報が格納されていた。使用状態２２６０に、使用中を格納させる場合には、プールページをどの仮想ボリュームの仮想ページに割り当てたかの情報をさらに格納させるようにしてもよい。
【０１０４】
図９は、第１実施形態に係るフラッシュ側プール情報の構成図である。
【０１０５】
フラッシュ側プール情報２３００は、フラッシュ側プール３０４を管理するための情報である。フラッシュ側プール情報２３００は、フラッシュ側プールアドレス空間とフラッシュパッケージアドレス空間との間のマッピングを管理する。共有メモリ１１１には、ストレージ装置１０４の１つのフラッシュ側プール３０４に対して、１つのフラッシュ側プール情報２３００が格納されている。
【０１０６】
フラッシュ側プール情報２３００は、フラッシュ側プールＩＤ２３１０と、フラッシュ側プールブロック番号２３２０と、ＦＭＰＫ  ＩＤ２３３０と、ＦＭＰＫアドレス空間のブロック番号２３４０とのフィールドを有する。フラッシュ側プールブロック番号２３２０、ＦＭＰＫ  ＩＤ２３３０、及びＦＭＰＫアドレス空間のブロック番号２３４０のフィールドの組は、フラッシュ側プールの各ブロックに対応して設けられている。
【０１０７】
フラッシュ側プールＩＤ２３１０には、フラッシュ側プール３０４の識別子（フラッシュ側プールＩＤ）が格納される。フラッシュ側プールブロック番号２３２０には、フラッシュ側プールアドレス空間の管理単位であるブロック（フラッシュ側プールブロック）の番号が格納される。このブロックの番号は、パリティグループ３０８のストライプラインに対応するフラッシュ側プールブロックの番号である。ＦＭＰＫ  ＩＤ２３３０には、フラッシュ側プールブロックが格納されるＦＭＰＫの識別子（ＦＭＰＫ  ＩＤ）が格納される。ＦＭＰＫアドレス空間のブロック番号２３４０には、フラッシュ側プールブロック番号２３２０のブロック番号のブロックに対してマッピングされた、ＦＭＰＫアドレス空間のブロックの番号が格納される。
【０１０８】
図１０は、第１実施形態に係る圧縮アルゴリズム情報の構成図である。
【０１０９】
圧縮アルゴリズム情報２４００は、ストレージ装置１０４内で適用できるデータの圧縮アルゴリズムに関する情報である。圧縮アルゴリズム情報２４００は、圧縮アルゴリズムごとにアルゴリズム番号２４１０と、アルゴリズム名２４２０と、適用条件２４３０とのフィールドを含む。
【０１１０】
アルゴリズム番号２４１０には、圧縮アルゴリズムに対応する番号が格納される。アルゴリズム名２４２０には、圧縮アルゴリズムの名前（アルゴリズム名）が格納される。適用条件２４３０には、圧縮アルゴリズムが適用される条件（適用条件）が格納される。適用条件としては、例えば、データを格納する記憶領域に対するアクセス頻度に関する条件であってもよい。
【０１１１】
図１０に示す圧縮アルゴリズム２４００は、ストレージ装置１０４内には、アルゴリズム１とアルゴリズム２の２つの圧縮機能が設けられており、アルゴリズム１（第１圧縮アルゴリズムの一例）は、Ｚｓｔｄ（Ｚｓｔａｎｄａｒｄ）というアルゴリズムであり、このアルゴリズムは、アクセス頻度が低いデータについて適用され、アルゴリズム２（第２圧縮アルゴリズムの一例）は、ＬＺ４というアルゴリズムであり、アクセス頻度が高いデータについて適用される。アクセス頻度が低いとは、例えば、対象となる記憶領域への単位時間当たりのＩ／Ｏ数が、予め決めた閾値より低い場合としてもよい。ここで、Ｚｓｔｄは、ＬＺ４よりも圧縮率が高いが、圧縮伸長処理におけるオーバヘッドが大きいというアルゴリズムである。
【０１１２】
図１１は、第１実施形態に係るＦＭＰＫ情報の構成図である。
【０１１３】
ＦＭＰＫ情報２７００は、各ＦＭＰＫ１１３のメモリ２１４に格納される情報であって、ＦＭＰＫアドレス空間とフラッシュメモリのアドレス空間とのマッピングを管理する。ＦＭＰＫ情報２７００は、ストレージコントローラ１０９からはアクセスされない。
【０１１４】
ＦＭＰＫ情報２７００は、ＦＭＰＫ  ＩＤ２７１０と、ＦＭＰＫグループＩＤ２７２０と、ＦＭＰＫアドレス空間のブロック番号２７３０と、フラッシュメモリアドレス空間のブロック番号２７４０と、圧縮後サイズ２７５０とのフィールドを含む。ＦＭＰＫアドレス空間のブロック番号２７３０、フラッシュメモリアドレス空間のブロック番号２７４０、及び圧縮後サイズ２７５０とのフィールドの組は、ＦＭＰＫアドレス空間の各ブロックに対応して設けられている。
【０１１５】
ＦＭＰＫ  ＩＤ２７１０には、ＦＭＰＫ１１３の識別子（ＦＭＰＫ  ＩＤ）が格納される。ＦＭＰＫグループＩＤ２７２０には、ＦＭＰＫ１１３が属するパリティグループ３０８と対応しているフラッシュ側プール３０４のフラッシュ側プールＩＤが格納される。ＦＭＰＫアドレス空間のブロック番号２７３０には、ＦＭＰＫの容量をブロック単位で管理するためのアドレス空間（ＦＭＰＫアドレス空間）におけるブロックの番号が格納される。
【０１１６】
フラッシュメモリアドレス空間のブロック番号２７４０には、ＦＭＰＫ１１３のＦＭチップ２８０の容量をブロック単位で管理するためのアドレス空間（フラッシュメモリアドレス空間）におけるブロックの番号が格納される。具体的には、フラッシュメモリアドレス空間のブロック番号２７４０には、ＦＭＰＫアドレス空間のブロック番号２７３０のブロック番号のブロックに関連付けられた物理的なＦＭチップ２８０の格納位置を示す情報が格納される。ＦＭＰＫアドレス空間の空きブロックに最初にデータが格納されるときには、このブロックの番号に対して、データを実際に格納するフラッシュメモリアドレス空間のブロック番号が割り当てられる。
【０１１７】
圧縮サイズ２７５０には、ＦＭＰＫアドレス空間のブロックに格納された圧縮データについてのサイズが格納される。例えば、ストレージコントローラ１０９で圧縮処理が行われたデータについてのサイズは、ストレージコントローラ１０９から受け取って圧縮サイズ２７５０に格納される。
【０１１８】
本実施形態に係るストレージ装置１０４におけるデータの圧縮伸長機能の一例について説明する。
【０１１９】
本実施形態では、ストレージコントローラ１０９と、ＦＭＰＫ１１３とのそれぞれに異なる圧縮アルゴリズムによる圧縮伸長機能を備えている。ストレージコントローラ１０９に備える圧縮伸長機能の圧縮アルゴリズム（第１圧縮アルゴリズム）は、ＦＭＰＫ１１３に備える圧縮伸長機能よりも圧縮処理時間はかかるが圧縮率が高いことを特徴としたものであり、アクセス頻度が低いデータに対して有効なアルゴリズムである。一方、ＦＭＰＫ１１３に備える圧縮伸長機能の圧縮アルゴリズム（第２圧縮アルゴリズム）は、圧縮率は低いが、圧縮処理時間が短いことを特徴としたものであり、アクセス頻度が高いデータに対して有効なアルゴリズムである。例えば、アルゴリズム１は、圧縮率が高いことを要求するもの、例えばデータベースなどに適用するようにしてもよい。ここで、この例においては、ストレージコントローラ１０９のプロセッサ１０５が第１データ圧縮部に相当し、ＦＭＰＫ１１３の圧縮伸長回路２１６が第２データ圧縮部に相当する。
【０１２０】
この構成によると、一部のデータについての圧縮処理をＦＭＰＫ１１３へオフロードすることにより、ストレージコントローラ１０９のプロセッサ１０５の圧縮処理に係る負荷を抑制することができ、ストレージ装置１０３の全体としてのＩ／Ｏ処理の性能を向上することができる。
【０１２１】
次に、ストレージ装置１０４の処理動作について説明する。
【０１２２】
図１２は、第１実施形態に係るライト処理のフローチャートである。
【０１２３】
ストレージ装置１０４は、ホスト１０１からライト要求を受け付けたか否かを判定し（Ｓ１１０）、ライト要求を受け付けていない場合（Ｓ１１０：ＮＯ）には、Ｓ１１０を繰り返し実行する一方、ライト要求を受け付けた場合（Ｓ１１０：ＹＥＳ）には、プール管理プログラム３２００は、ライト要求で指定された、ＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ：仮想ボリュームＩＤに相当）とライト範囲（例えばＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）など）に相当する仮想ページを特定する。
【０１２４】
次いで、プール管理プログラム３２００は、指定されたＬＵに対応する仮想ボリューム情報２１００を特定し、この仮想ボリューム情報２１００を用いて、ＬＢＡにより、仮想ボリュームの中のライト処理の対象となる仮想ページ（以下、この処理の説明において対象仮想ページという）の番号を検索して特定する。次いで、プール管理プログラム３２００は、特定した仮想ページ番号が格納された仮想ページ番号２１２０に対応するプール内のページ番号２１３０に、プール内ページ番号が格納されているか否かを判定することにより、対象仮想ページ（対象領域）に対する１回目（初めて）のライト処理であるか否かを判定する（Ｓ１１５）。例えば、仮想ページ番号２１２０に対応するプール内のページ番号２１３０に、プール内ページ番号が格納されていない場合には、この対象仮想ページに対する１回目のライト処理となる。
【０１２５】
この結果、１回目のライト処理である場合（Ｓ１１５：ＹＥＳ）には、プール管理プログラム３２００は、プール情報２２００内の使用状態２２６０が空き状態であるページに対応するプール３０３内のページ番号を、対象仮想ページに対応するプール内のページ番号２１３０に登録し、デフォルトで設定された圧縮アルゴリズム（例えば、アクセス頻度が高い場合の圧縮アルゴリズム）を対象仮想ページに対応する選択アルゴリズム２１５０へ登録し（Ｓ１２５）、処理をＳ１３０へ進める。
【０１２６】
一方、１回目のライト処理でない場合（Ｓ１１５：ＮＯ）には、プール管理プログラム３２００は、対象仮想ページに対応するアクセス頻度２１４０の値に基づいて、アクセス頻度が高いか否かを判定し（Ｓ１２０）、アクセス頻度が高いと判定した場合（Ｓ１２０：ＹＥＳ）には、ＦＭＰＫ１１３側でライト要求に対応するデータ（ライトデータ）の圧縮処理を行わせるために、処理をＳ１３０へ進める一方、アクセス頻度が低いと判定された場合（Ｓ１２０：ＮＯ）には、処理をＳ１４０へ進める。なお、仮想ページに対するアクセス頻度の判定は、監視している期間が短いと正しく判定できないため、監視している期間が短い場合においては、アクセス頻度が高いと判定された場合と同様の処理を進めるようにしてもよい。
【０１２７】
Ｓ１３０では、Ｉ／Ｏ処理プログラム３１００は、仮想ページに割り当てられたプールのページ内のブロック（対象ブロック）へのライト要求を、ＦＭＰＫ１１３側での圧縮処理を行わせる指示（又は圧縮処理を行わせる指示に対応する情報であって、ＦＭＰＫ１１３で圧縮処理を行うことが判断できる情報）と、ライトデータとともに、ＦＭＰＫ１１３へ転送する（Ｓ１３０）。このようにライト要求を転送する際には、Ｉ／Ｏ処理プログラム３１００は、対象ブロックを以下のように算出する。すなわち、Ｉ／Ｏ処理プログラム３１００は、仮想ページに割り当てられたプール内のページ番号（仮想ページに対応するプール内のページ番号２１３０のページ番号）を特定し、このページ番号に対応するブロック番号（ページ番号が格納されたプールページ番号２２３０に対応するプールページのブロック番号２２４０のブロック番号）を算出する。なお、プールページのブロック番号２２４０のブロック番号に対応するフラッシュ側プールアドレス空間のブロック番号２２５０のブロック番号に対応するフラッシュメモリアドレスが、ライトデータを格納する実領域となる。
【０１２８】
Ｓ１３０で転送されたライト要求及び圧縮指示をＦＭＰＫ１１３が受け取ると、ＦＭＰＫ１１３は、自身がライトデータの圧縮処理をすることを認識し、ライトデータに対して所定の圧縮アルゴリズムによる圧縮処理を実施する（Ｓ１８０）。圧縮処理を実施することにより、ライトデータのサイズは、送信時のブロックサイズより小さいサイズとなる。ＦＭＰＫ１１３のプロセッサ２１３は、圧縮されたデータを、ライト要求に対応するＦＭチップ２８０の対象の記憶領域に書き込み（Ｓ１９０）、ストレージコントローラ１０９へライト処理の完了を報告する。ライト処理の完了報告のタイミングは、Ｓ１３０で送信されたストレージコントローラ１０９からのライトデータを受け取って、図示しないバッファに一時格納完了したタイミングとしてもよい。
【０１２９】
Ｓ１４０では、プール管理プログラム３２００がライトデータに対して、所定の圧縮アルゴリズムによる圧縮処理を実施する。
【０１３０】
ここで、ＦＭＰＫ１１３へのライト処理は、仮想ページに割り当てられたプールのページ内のブロック単位である。そこで、圧縮補正処理プログラム３４００は、ＦＭＰＫ１１３へライトデータを転送する前の事前処理を行う（Ｓ１５０）。この事前処理においては、圧縮処理後のライトデータ（圧縮データ）のデータサイズが転送単位であるブロックサイズより小さくなった場合に、圧縮データを、ブロックサイズのデータとなるように補正する。ここで、この事前処理を行わないと、ブロックにおける圧縮データが格納されていない空き領域に格納されている情報がＦＭＰＫ１１３に格納されてしまい、このブロックに格納されたデータをリードした場合、このブロックの一部分が正しくないデータとなってしまうためである。そこで、圧縮補正処理プログラム３４００は、圧縮データのデータサイズがブロックのサイズより小さい場合は、圧縮データが格納されない部分に所定のデータ（例えば、すべてゼロ(‘０’)のデータ：調整データ）を埋め込み、ブロックサイズのデータに形成する。
【０１３１】
その後、Ｉ／Ｏ処理プログラム３１００は、ライト要求とともに、形成した圧縮データを含むブロックのデータと、圧縮データのサイズ（ライトデータの圧縮後のサイズ）の情報（圧縮サイズ情報）を、フラッシュパッケージ１１３へ転送する（Ｓ１６０）。
【０１３２】
Ｓ１６０で転送されたライト要求等をＦＭＰＫ１１３が受け取ると、ＦＭＰＫ１３は、ライト要求の対象となるＦＭＰＫアドレス空間のブロック番号に対応する圧縮後サイズ２７５０に受け取った圧縮後サイズを登録し、圧縮補正処理プログラム３７００は、ライトデータを実領域であるＦＭチップ２８０に格納するための事前処理を行う（Ｓ１７０）。具体的には、ＦＭＰＫ１１３は、ストレージ装置１０４により圧縮されて補正されたデータが転送されたことを、例えば、圧縮後サイズ情報が転送されたことにより認識する。圧縮補正処理プログラム３７００は、圧縮後サイズ情報を参照し、転送されたブロック単位のデータのうち、先頭からどこまでがライトデータの圧縮データに対応する有効データであり、それ以降が埋めこまれた調整データであるかを判別する。圧縮補正処理プログラム３７００は、受け取ったブロック単位のデータのうち、調整データを回収し（削除し）、有効データ（圧縮データ）を取り出す。
【０１３３】
次いで、ＦＭＰＫ１１３のプロセッサ２２４は、Ｓ１７０で取り出した圧縮データをＦＭチップ２８０の対象の記憶領域に書き込み（Ｓ１９０）、ストレージコントローラ１０９へライト処理の完了を報告する。ライト処理の完了報告のタイミングは、Ｓ１６０で送信されたストレージコントローラ１０９からのライトデータを受け取って、図示しないバッファに一時格納完了したタイミングとしてもよい。
【０１３４】
なお、Ｓ１９０にて、ＦＭチップ２８０にデータを書き込む際は、ＦＭＰＫ１１３のプロセッサ２２４は、ＦＭチップ２８０の新しい領域を確保してデータを格納する処理を行う。これは、従来のＦＭチップ２８０における書き込み処理と同様な処理である。この後、ＦＭＰＫ１１３は、ライト要求に対応したＦＭＰＫアドレスに対して、確保した新しい領域のアドレスをマッピングし直す。ＦＭＰＫ１１３は、旧ライトデータが格納されたＦＭチップ２８０の記憶領域をガベージ（無効領域）として管理する。なお、ＦＭＰＫ１１３のプロセッサ２２４の稼働率が低い時などにバックグラウンド処理としてガベージコレクション処理を実行することにより、ガベージから空き領域を生成してＦＭチップ２８０のアクセス可能な記憶領域の容量を増やすようにしてもよい。上記処理においては、ＦＭチップ２８０の実領域には、圧縮データのみが格納されることとなるので、ＦＭチップ２８０における容量効率を上げることができる。
【０１３５】
図１３は、第１実施形態に係るリード処理のフローチャートである。
【０１３６】
ストレージ装置１０４は、ホスト１０１からリード要求を受け付けたか否かを判定し（Ｓ２１０）、リード要求を受け付けていない場合（Ｓ２１０：ＮＯ）には、Ｓ２１０を繰り返し実行する一方、リード要求を受け付けた場合（Ｓ２１０：ＹＥＳ）には、プール管理プログラム３２００は、リード要求で指定された、ＬＵ（仮想ボリュームＩＤに相当）とリード範囲（例えばＬＢＡなど）に相当する仮想ページを特定する。
【０１３７】
次いで、プール管理プログラム３２００は、指定されたＬＵに対応する仮想ボリューム情報２１００を特定し、この仮想ボリューム情報２１００を用いて、ＬＢＡにより、仮想ボリュームの中のリード処理の対象となる仮想ページ（以下、この処理の説明において対象仮想ページという）の番号を検索して特定する。
【０１３８】
次いで、プール管理プログラム３２００は、特定した仮想ページ番号が格納された仮想ページ番号２１２０に対応する選択アルゴリズム２１５０に登録された情報を参照し、対象仮想ページに適用されている圧縮アルゴリズムが、アクセス頻度が高いデータ用のアルゴリズム（本例では、アルゴリズム２）であるか否かを判定する（Ｓ２２０）。
【０１３９】
この結果、対象仮想ページに適用されている圧縮アルゴリズムが、アクセス頻度が高いデータ用であると判定された場合（Ｓ２２０：ＹＥＳ）、すなわち、圧縮アルゴリズムがアルゴリズム２であると判定された場合は、プール管理プログラム３２００は、処理をＳ２３０へ進める一方、対象仮想ページに適用されている圧縮アルゴリズムが、アクセス頻度が高いデータ用でないと判定された場合（Ｓ２２０：ＮＯ）、すなわち、圧縮アルゴリズムがアルゴリズム１であると判定された場合には、プール管理プログラム３２００は、処理をＳ２５０へ進める。
【０１４０】
Ｓ２３０では、リード対象のデータ（リード対象データ）は、ＦＭＰＫ１１３で圧縮処理が実施されているため、Ｉ／Ｏ処理プログラム３１００は、ＦＭＰＫ１１３で伸長処理を実施させる指示とともに、対象仮想ページに割り当てられたプールのページ内のブロックに対するリード要求を、ＦＭＰＫ１１３へ転送する（Ｓ２３０）。
【０１４１】
ＦＭＰＫ１１３はＳ２３０で転送されたリード要求を受け取ると、伸長処理を伴うリード処理であることを認識し、リード対象データの格納位置を検索し、ＦＭチップ２８０からリード対象データを読み出し、読み出したリード対象データをＦＭＰＫ１１３の図示しないキャッシュメモリにステージングする（Ｓ３２０）。次いで、圧縮伸長回路２１６は、キャッシュメモリにステージングされたリード対象データに対して伸長処理を実施する（Ｓ３３０）。次いで、ＦＭＰＫ１１３は、伸長処理されたリード対象データをストレージコントローラ１０９へ転送する（Ｓ３４０）。ストレージコントローラ１０９に転送されたリード対象データは、ホスト１０１へ転送され（Ｓ２４０）、リード処理が終了する。
【０１４２】
Ｓ２５０（Ｓ２２０の判定で、適用されている圧縮アルゴリズムが、アクセス頻度が低いデータ用のアルゴリズム１であると判定された場合）では、Ｉ／Ｏ処理プログラム３１００は、リード要求をＦＭＰＫ１１３に転送する。この際、リード対象データについての圧縮処理をストレージコントローラ１０９で行っているため、Ｉ／Ｏ処理プログラム３１００は、ＦＭＰＫ１１３に、ストレージコントローラ１０９側でリード対象データの圧縮処理を行っていることを伝達する。
【０１４３】
ＦＭＰＫ１１３は、Ｓ２５０で転送されたリード要求を受け取ると、リード対象データの格納位置を検索し、ＦＭチップ２８０からＦＭＰＫ１１３のキャッシュメモリにリード要求データをステージングする（Ｓ２９０）。ここで、キャッシュメモリにステージングされたリード対象データは、ストレージコントローラ１０９で圧縮されているため、スストレージコントローラ１０９とのデータ転送で用いるブロックのブロックサイズより、データサイズが通常は小さくなっている。キャッシュメモリにステージングしたデータのデータサイズを圧縮データサイズと呼ぶ。
【０１４４】
圧縮補正処理プログラム３７００は、リード対象データをストレージコントローラ１０９とのデータ転送で用いるブロックサイズに合わせるために、ブロックサイズに満たない領域に調整データ（例えば、０（ゼロ）データ）を埋めて補正する（Ｓ３００）。
【０１４５】
次いで、ＦＭＰＫ１１３は、補正したリード対象データと、圧縮データサイズ（すなわち、調整データで調整していない部分のサイズ）をストレージコントローラ１０９へ転送する（Ｓ３１０）。
【０１４６】
ストレージコントローラ１０９がＳ３１０で転送されたリード対象データを受け取ると、圧縮補正処理プログラム３４００は、ＦＭＰＫ１１３側で補正された調整データを回収（削除）する伸長事前処理を実施し（Ｓ２６０）、プール処理プログラム３２００が調整データを取り除いたリード対象データに対して伸長処理(アルゴリズム１に対応する伸長処理)を実施し（Ｓ２７０）、伸長処理を実施したリード対象データをホスト１０１へ転送し（Ｓ２８０）、リード処理を終了する。
【０１４７】
次に、ＦＭＰＫ１１３に既に格納されているデータの圧縮アルゴリズムの変更判定を行う圧縮アルゴリズム変更判定処理について説明する。
【０１４８】
図１４は、第１実施形態に係る圧縮アルゴリズム変更判定処理のフローチャートである。
【０１４９】
例えば、ストレージ装置１０４の自動階層制御機能では、データのチャンク毎のアクセス頻度を監視している。例えば、ストレージ装置１０４は、容量仮想化機能で扱う単位であるページ単位に、対象となるページへの予め決めた期間（例えば１日単位）でのＩ／Ｏ数をカウントし、ページ毎のアクセス頻度を、「Ｉ／Ｏ数÷期間＝アクセス頻度」により算出する。次いで、ストレージ装置１０４は、算出結果に基づいて、アクセス頻度の高いページから、高性能で応答時間が短い記憶媒体へページのデータを格納する。
【０１５０】
ここで、ストレージ装置１０４は、仮想ボリュームの各ページ（各仮想ページ）を処理対象として、圧縮アルゴリズム変更判定処理を実行する。まず、ストレージ装置１０４は、自動階層制御機能を応用し、１日単位でのページのアクセス頻度を算出する（Ｓ４１０）。
【０１５１】
次いで、圧縮アルゴリズム選択プログラム３３００は、処理対象のページ（対象ページ）に対して算出されたアクセス頻度が予め設定している閾値（閾値１）以上であるか否かを判定する（Ｓ４２０）。
【０１５２】
この結果、アクセス頻度が閾値１以上である場合（Ｓ４２０：ＹＥＳ）には、圧縮アルゴリズム選択プログラム３３００は、圧縮アルゴリズム情報２４００のアルゴリズム番号２４１０に格納されているアルゴリズム番号のうち、アクセス頻度の高い時に適用するアルゴリズムに対応するアルゴリズム番号（図１０の例では、アルゴリズム２：適切アルゴリズム）を選択する。次いで、圧縮アルゴリズム選択プログラム３３００は、対象ページに対応する選択アルゴリズム２１５０の選択アルゴリズムを参照し、選択アルゴリズムがアクセス頻度の低い時に適用するアルゴリズム（アルゴリズム１）であるか否かを判定する（Ｓ４３０）。
【０１５３】
この結果、選択アルゴリズムがアクセス頻度の低い時に適用するアルゴリズム（アルゴリズム１）である場合（Ｓ４３０：ＹＥＳ）には、対象ページの前回のアクセス頻度は閾値１より低く、今回のアクセス頻度が閾値１以上となったことを示しており、圧縮アルゴリズムをアクセス頻度の高い時に適用するアルゴリズム（アルゴリズム２）に変更する必要があるために、圧縮アルゴリズム選択プログラム３３００は、対象ページ対応する変更選択アルゴリズム２１６０にアクセス頻度の高い時に適用するアルゴリズムの番号を登録し（Ｓ４４０）、処理を終了する。
【０１５４】
一方、選択アルゴリズムがアクセス頻度の低い時に適用するアルゴリズム（アルゴリズム１）でない場合（Ｓ４３０：ＮＯ）には、対象ページに適用したアルゴリズムがアクセス頻度の低い時に適用するアルゴリズム（アルゴリズム２）であることを意味しているので、圧縮アルゴリズムを変更する必要がないので、処理を終了する。
【０１５５】
一方、アクセス頻度が閾値１よりも小さい場合（Ｓ４２０：ＮＯ）には、圧縮アルゴリズム選択プログラム３３００は、圧縮アルゴリズム情報２４００のアルゴリズム番号２４１０に格納されているアルゴリズム番号のうち、アクセス頻度の低い時に適用するアルゴリズムに対応するアルゴリズム番号（図１０の例では、アルゴリズム１：適切アルゴリズム）を選択する。次いで、圧縮アルゴリズム選択プログラム３３００は、対象ページに対応する選択アルゴリズム２１５０の選択アルゴリズムを参照し、選択アルゴリズムがアクセス頻度の高い時に適用するアルゴリズム（アルゴリズム２）であるか否かを判定する（Ｓ４５０）。
【０１５６】
この結果、選択アルゴリズムがアクセス頻度の高い時に適用するアルゴリズム（アルゴリズム２）である場合（Ｓ４５０：ＹＥＳ）には、対象ページの前回のアクセス頻度は閾値１以上であり、今回のアクセス頻度が閾値１より小さくなったことを示しており、圧縮アルゴリズムをアクセス頻度の低い時に適用するアルゴリズム（アルゴリズム１）に変更する必要があるために、圧縮アルゴリズム選択プログラム３３００は、対象ページ対応する変更選択アルゴリズム２１６０にアクセス頻度の低い時に適用するアルゴリズムの番号を登録し（Ｓ４４０）、処理を終了する。
【０１５７】
一方、選択アルゴリズムがアクセス頻度の高い時に適用するアルゴリズム（アルゴリズム２）でない場合（Ｓ４５０：ＮＯ）には、対象ページに適用したアルゴリズムがアクセス頻度の低い時に適用するアルゴリズム（アルゴリズム１）であることを意味しているので、圧縮アルゴリズムを変更する必要がないので、処理を終了する。
【０１５８】
上記処理によると、各ページに対して次回から使用する適切な圧縮アルゴリズムを、ページに対するアクセス頻度に基づいて適切に決定することができる。なお、この処理の終了時点においては、ＦＭＰＫ１１３に格納されているデータは、前回選択された圧縮アルゴリズム（選択アルゴリズム２１５０の圧縮アルゴリズム）により圧縮されたデータのままである。以降に、ＦＭＰＫ１１３に格納されているデータを、適切な圧縮アルゴリズムで圧縮した状態とする圧縮アルゴリズム変更メイン処理を説明する。
【０１５９】
図１５は、第１実施形態に係る圧縮アルゴリズム変更メイン処理のフローチャートである。
【０１６０】
圧縮アルゴリズム変更メイン処理は、仮想ページに適用する圧縮アルゴリズムを、図１４に示す圧縮アルゴリズム変更判定処理において登録された変更選択アルゴリズムに変更する処理である。ここで、圧縮アルゴリズムを変更するとは、具体的には、仮想ページに割り付けられた実ページに対応するＦＭチップ２８０に書き込まれたデータを一旦読み出して、新しい圧縮アルゴリズムを適用して圧縮した後にＦＭチップ２８０に再度書き込むことをいう。
【０１６１】
圧縮アルゴリズム変更処理は、バックグラウンドで処理される。
【０１６２】
まず、プール管理プログラム３２００は、所定時間ごとに通常業務のＩ／Ｏ数が少ないか否かを判定する（Ｓ５１０）。具体的には、プール管理プログラム３２００は、プロセッサ１０５の稼動率が予め設定された設定値より低いか否かを判定する。
【０１６３】
この結果、プロセッサ１０５の稼動率が設定値よりも低くない場合（Ｓ５１０：ＮＯ）には、通常業務のＩ／Ｏ数が多いことを表しているので、プール管理プログラム３２００は、通常業務に影響を与えないように処理を実行せず、処理をＳ５１０に進める。
【０１６４】
一方、プロセッサ１０５の稼動率が設定値よりも低い場合（Ｓ５１０：ＹＥＳ）には、通常業務のＩ／Ｏ数が少ないことを表しているので、プール管理プログラム３２００は、仮想ボリューム情報２１００の変更選択アルゴリズム２１６０に圧縮アルゴリズムが登録されている仮想ページを処理対象として抽出する（Ｓ５２０）。仮想ページの抽出の仕方は、例えば、仮想ボリューム単位に先頭の仮想ページから順次、変更選択アルゴリズム２１６０に圧縮アルゴリズム名が登録されている仮想ページを抽出してもよく、または、変更選択アルゴリズム２１６０に圧縮アルゴリズム名が登録されている仮想ページを別のテーブルを設けて管理し、このテーブルを参照して、仮想ページを抽出するようにしてもよい。なお、仮想ページの抽出の仕方はこれに限らない。
【０１６５】
次いで、プール管理プログラム３２００は、Ｓ５２０で抽出した仮想ページに対応する現在の圧縮アルゴリズム（仮想ページに対応する選択アルゴリズム２１５０に格納されているアルゴリズム）がアルゴリズム１であり、かつ、変更後の圧縮アルゴリズム（仮想ページに対応する変更選択アルゴリズム２１６０に格納されているアルゴリズム）がアルゴリズム２であるか否かを判定する（Ｓ５３０）。この結果、仮想ページに対応する現在の圧縮アルゴリズムがアルゴリズム１であり、かつ、変更後の圧縮アルゴリズムがアルゴリズム２である場合（Ｓ５３０：ＹＥＳ）には、アクセス頻度が低いデータ用のアルゴリズムからアクセス頻度が高いデータ用のアルゴリズムへ変更する変更処理（圧縮時間重視への圧縮アルゴリズム変更処理：図１６参照）を行う（Ｓ５４０）。
【０１６６】
一方、Ｓ５２０で抽出した仮想ページに対応する現在の圧縮アルゴリズムがアルゴリズム１であり、かつ、変更後の圧縮アルゴリズムがアルゴリズム２でない場合（Ｓ５３０：ＮＯ）には、プール管理プログラム３２００は、仮想ページに対応する現在の圧縮アルゴリズムがアルゴリズム２であり、かつ、変更後の圧縮アルゴリズムがアルゴリズム１であるか否かを判定する（Ｓ５６０）。
【０１６７】
この結果、仮想ページに対応する現在の圧縮アルゴリズムがアルゴリズム２であり、かつ、変更後の圧縮アルゴリズムがアルゴリズム１である場合（Ｓ５６０：ＹＥＳ）には、プール管理プログラム３２００は、アクセス頻度が高いデータ用のアルゴリズムからアクセス頻度が低いデータ用のアルゴリズムへ変更する変更処理（圧縮率重視への圧縮アルゴリズム変更処理：図１７参照）を行う（Ｓ５７０）。なお、仮想ページに対応する現在の圧縮アルゴリズムがアルゴリズム２であり、かつ、変更後の圧縮アルゴリズムがアルゴリズム１でない場合（Ｓ５６０：ＮＯ）は、本来であれば、発生しないはずであるが、発生した場合には、アルゴリズムの変更がないため、プール管理プログラム３２００は、変更選択アルゴリズム２１６０を初期化して処理を終了する。
【０１６８】
Ｓ５４０およびＳ５７０で、仮想ページに対応する圧縮アルゴリズムを変更した後には、プール管理プログラム３２００は、この仮想ページに対応する変更選択アルゴリズム２１６０に登録されているアルゴリズムを選択アルゴリズム２１５０へ格納し、変更選択アルゴリズム２１６０を初期化し（Ｓ５５０）、処理を終了する。
【０１６９】
上記した圧縮アルゴリズム変更メイン処理によると、Ｉ／Ｏ処理と非同期に実施し、通常業務のＩ／Ｏ処理が少ない場合に、仮想ページに対応する圧縮アルゴリズムを変更するようにしているので、この処理によるオーバヘッドによって通常業務におけるＩ／Ｏ性能が低下することを抑制することができる。
【０１７０】
なお、圧縮アルゴリズム変更メイン処理のＳ５７０の処理については、プロセッサ１０５の稼動率が低い時（所定の閾値以下の時）に実行するようにし、Ｓ５４０の処理については、すぐに実行するようにしてもよい。これは、アクセス頻度が低いものからアクセス頻度が高くなった場合、圧縮伸長処理時間が短い方が良いためである。
【０１７１】
例えば、Ｓ５４０の処理をデータのリード要求処理又はライト要求処理の延長で実施してもよい。Ｓ５４０の処理をデータの上書き要求処理の延長で実施する場合は、図１２のライト処理をそのまま適用すればよい。また、Ｓ５４０の処理をリード要求処理の延長で実施する場合は、図１３のリード処理後に、図１２のライト処理を実施するようにすればよい。
【０１７２】
また、圧縮アルゴリズム変更処理のＳ５４０、又はＳ５７０の処理は、データを移行する処理に伴って実施するようにしてもよい。ストレージ装置１０４に自動階層制御機能を備えている場合には、自動階層制御機能は、アクセス頻度が低かったデータのアクセス頻度が高くなった場合、このデータをアクセス頻度が高いデータ用の階層の記憶領域へ移行するデータ移行処理が行われることとなる。このデータ移行処理では、移行する対象のデータをリードし、その後新たな記憶領域へライトする。このデータ移行処理において、Ｓ５４０の処理を実施するようにすればよい。同様に、アクセス頻度が高かったデータのアクセス頻度が低くなった場合には、このデータをアクセス頻度が低いデータ用の階層の記憶領域へ移行するデータ移行処理において、Ｓ５７０の処理を実施するようにすればよい。
【０１７３】
図１６は、第１実施形態に係る圧縮時間重視への圧縮アルゴリズム変更処理のフローチャートである。
【０１７４】
圧縮時間重視への圧縮アルゴリズム変更処理は、図１５のステップＳ５４０の処理に対応する。
【０１７５】
仮想ページ単位に適用する圧縮アルゴリズムを設定しているため、圧縮時間重視への圧縮アルゴリズム変更処理は、仮想ページに割り付けられた実ページを構成するブロック全てについて下記の処理を行う。
【０１７６】
ストレージ装置１０４のＩ／Ｏ処理プログラム３１００は、ＦＭＰＫ１１３へ処理対象の仮想ページのブロックに対するリード要求を送信する。このブロックのデータについては、圧縮処理をストレージコントローラ１０９で行っているため、Ｉ／Ｏ処理プログラム３１００は、ＦＭＰＫ１１３にストレージコントローラ１０９で圧縮を行っていることも伝達する（Ｓ６１０）。
【０１７７】
ＦＭＰＫ１１３は、Ｓ６１０で送信されたリード要求を受け取ると、リード対象データの格納位置を検索し、ＦＭチップ２８０からＦＭＰＫ１１３のキャッシュメモリにリード要求データをステージングする（Ｓ６２０）。
【０１７８】
圧縮補正処理プログラム３７００は、リード対象データをストレージコントローラ１０９とのデータ転送で用いるブロックサイズに合わせるために、ブロックサイズに満たない領域に調整データ（例えば、０（ゼロ）データ）を埋めて補正する（Ｓ６３０）。
【０１７９】
次いで、ＦＭＰＫ１１３は、補正したリード対象データと、圧縮データサイズ（すなわち、調整データで調整していないサイズ）をストレージコントローラ１０９へ送信する（Ｓ６４０）。
【０１８０】
ストレージコントローラ１０９がＳ６４０で送信されたリード対象データを受け取ると、圧縮補正処理プログラム３４００は、ＦＭＰＫ１１３側で補完された調整データを回収（削除）する伸長事前処理を実施し（Ｓ６５０）、プール処理プログラム３２００が調整データを取り除いたリード対象データに対して伸長処理(アルゴリズム１に対応する伸長処理)を実施し（Ｓ６６０）、伸長処理を実施したリード対象データをＦＭＰＫ１１３へ送信する（Ｓ６７０）。この際、Ｉ／Ｏ処理プログラム３１００は、ＦＭＰＫ１１３側へ圧縮指示も出す。
【０１８１】
Ｓ６７０で送信されたライト要求及び圧縮指示を、ＦＭＰＫ１１３が受け取ると、ＦＭＰＫ１３は、自身がライトデータの圧縮処理をすることを認識し、ライトデータに対して所定の圧縮アルゴリズムによる圧縮処理を実施する（Ｓ６８０）。次いで、ＦＭＰＫ１１３のプロセッサ２１３は、圧縮されたデータを、ライト要求に対応するＦＭチップ２８０の対象の記憶領域に書き込み（Ｓ６９０）、ストレージコントローラ１０９へライト処理の完了を報告する。ライト処理の完了報告のタイミングは、Ｓ６７０で送信されたストレージコントローラ１０９からのライトデータを受け取って、図示しないバッファに一時格納完了したタイミングとしてもよい。なお、ライト処理の完了報告を受け取ったストレージコントローラ１０９は、圧縮時間重視への圧縮アルゴリズム変更処理を終了する。
【０１８２】
上記した圧縮時間重視への圧縮アルゴリズム変更処理によると、ＦＭチップ２８０に格納されているデータを、圧縮時間が短い（基本的には、伸長時間が短いに対応）圧縮アルゴリズムによる圧縮データに変更してＦＭチップ２８０に格納させることができる。これにより、ストレージ装置１０４における圧縮処理（及び伸長処理）の負荷を軽減することができる。
【０１８３】
図１７は、第１実施形態に係る圧縮率重視への圧縮アルゴリズム変更処理のフローチャートである。
【０１８４】
圧縮率重視への圧縮アルゴリズム変更処理は、図１５のステップＳ５７０の処理に対応する。
【０１８５】
仮想ページ単位に適用する圧縮アルゴリズムを設定しているため、圧縮時間重視への圧縮アルゴリズム変更処理は、仮想ページに割り付けられた実ページを構成するブロック全てについて下記の処理を行う。
【０１８６】
ストレージ装置１０４のＩ／Ｏ処理プログラム３１００は、ＦＭＰＫ１１３へ処理対象の仮想ページのブロックに対するリード要求を送信する。このブロックのデータについては、圧縮処理をＦＭＰＫ１１３で行っているため、Ｉ／Ｏ処理プログラム３１００は、ＦＭＰＫ１１３にＦＭＰＫ１１３で圧縮を行っていることも伝達する（Ｓ７１０）。
【０１８７】
ＦＭＰＫ１１３はＳ２３０で転送されたリード要求を受け取ると、伸長処理を伴うリード処理であることを認識し、リード対象データの格納位置を検索し、ＦＭチップ２８０からリード対象データを読み出し、読み出したリード対象データをＦＭＰＫ１１３の図示しないキャッシュメモリにステージングする（Ｓ７２０）。次いで、圧縮伸長回路２１６は、キャッシュメモリにステージングされたリード対象データに対して伸長処理を実施する（Ｓ７３０）。次いで、ＦＭＰＫ１１３は、伸長処理されたリード対象データをストレージコントローラ１０９へ送信する（Ｓ７４０）。
【０１８８】
リード対象データを受信したストレージコントローラ１０９では、プール管理プログラム３２００がリード対象データに対して、所定の圧縮アルゴリズムによる圧縮処理を実施する（Ｓ７５０）。
【０１８９】
次いで、圧縮補正処理プログラム３４００は、ＦＭＰＫ１１３へリード対象データをライトデータとして転送する前の事前処理を行う（Ｓ７６０）。圧縮補正処理プログラム３４００は、圧縮データ（圧縮されたリード対象データ）のデータサイズがブロックのサイズより小さい場合は、圧縮データが格納されない部分に所定のデータ（例えば、すべてゼロ(‘０’)のデータ：調整データ）を埋め込み、ブロックサイズのデータに形成する。
【０１９０】
その後、Ｉ／Ｏ処理プログラム３１００は、ライト要求とともに、形成した圧縮データを含むブロックのデータと、圧縮データのサイズ（ライトデータの圧縮後のサイズ）の情報（圧縮サイズ情報）を、ＦＭＰＫ１１３へ送信する（Ｓ７７０）。
【０１９１】
Ｓ７７０で送信されたライト要求等をＦＭＰＫ１１３が受け取ると、ＦＭＰＫ１１３は、ライト要求の対象となるＦＭＰＫアドレス空間のブロック番号に対応する圧縮後サイズ２７５０に受け取った圧縮後サイズを登録し、圧縮補正処理プログラム３７００は、ライトデータを実領域であるＦＭチップ２８０に格納するための事前処理を行う（Ｓ７８０）。具体的には、ＦＭＰＫ１１３は、ストレージ装置１０４により圧縮されて補正されたデータが転送されたことを、例えば、圧縮後サイズ情報が転送されたことにより認識する。圧縮補正処理プログラム３７００は、圧縮後サイズ情報を参照し、転送されたブロック単位のデータのうち、先頭からどこまでがライトデータの圧縮データに対応する有効データであり、それ以降が埋めこまれた調整データであるかを判別する。圧縮補正処理プログラム３７００は、受け取ったブロック単位のデータのうち、調整データを回収し（削除し）、有効データ（圧縮データ）を取り出す。
【０１９２】
次いで、ＦＭＰＫ１１３のプロセッサ２２４は、Ｓ７８０で取り出した圧縮データをＦＭチップ２８０の対象の記憶領域に書き込み（Ｓ７９０）、ストレージコントローラ１０９へライト処理の完了を報告する。ライト処理の完了報告のタイミングは、Ｓ７７０で送信されたストレージコントローラ１０９からのライトデータを受け取って、図示しないバッファに一時格納完了したタイミングとしてもよい。なお、ライト処理の完了報告を受け取ったストレージコントローラ１０９は、圧縮率重視への圧縮アルゴリズム変更処理を終了する。
【０１９３】
上記した圧縮率重視への圧縮アルゴリズム変更処理によると、ＦＭチップ２８０に格納されているデータを、圧縮率が高い圧縮アルゴリズムによる圧縮データに変更してＦＭチップ２８０に格納させることができる。これにより、ストレージ装置１０４における容量効率を向上することができる。
【０１９４】
次に、第２実施形態に係るストレージ装置について説明する。なお、第２実施形態に係るストレージ装置の説明においては、便宜的に第１実施形態に係るストレージ装置と対応する構成部分については、同様な符号を付して説明する。
【０１９５】
第２実施形態に係るストレージ装置１０４においては、ＦＭＰＫ１１３は、圧縮アルゴリズムが異なる複数の圧縮機能を有しており、データの圧縮においては、ＦＭＰＫ１１３の複数の圧縮機能を使用するようにしている。
【０１９６】
本実施形態では、ストレージコントローラ１０９がリードライト処理の対象となるブロックを含むページについてのアクセス頻度を判定し、アクセス頻度に応じた圧縮アルゴリズムを示す情報をＦＭＡＰＫ１１３に指示する。そして、ＦＭＰＫ１１３は、ストレージコントローラ１０９からの指示に基づいて、格納するデータの圧縮アルゴリズムを選択して、選択した圧縮アルゴリズムを使用してデータを圧縮する圧縮処理を行って、圧縮されたデータをＦＭチップ２８０に格納する。
【０１９７】
図１８は、第２実施形態に係るストレージ装置における圧縮アルゴリズム変更処理のフローチャートである。
【０１９８】
この圧縮アルゴリズム変更処理は、ＦＭＰＫ１１３内で、データに対する圧縮アルゴリズムを切り替える処理を示している。
【０１９９】
ストレージコントローラ１０９は、ページ毎のアクセス頻度を監視し、ページ毎に適用する圧縮アルゴリズムを決定し、ページに適用する圧縮アルゴリズムを変更することを決定すると、ＦＭＰＫ１１３に圧縮アルゴリズム変更指示を出す（Ｓ８１０）。圧縮アルゴリズム変更指示には、例えば、変更後のアルゴリズムを示す情報が含まれている。
【０２００】
ＦＭＰＫ１１３は、圧縮アルゴリズム変更指示を受け取ると、処理対象のページのデータ（対象データ）の格納位置を検索し、ＦＭチップ２８０から対象データを読み出し、対象データをＦＭＰＫ１１３内のキャッシュメモリにステージングする（Ｓ８２０）。
【０２０１】
ＦＭＰＫ１１３は、キャッシュメモリにステージングされた対象データを、変更前の圧縮アルゴリズムに対応する伸長処理により伸長する（Ｓ８３０）。なお、伸長処理を実行する機能部としては、ＦＭＰＫ１１３のプロセッサ２１３であってもよいし、圧縮伸長回路１１６であってもよい。
【０２０２】
次いで、ＦＭＰＫ１１３は、伸長されたデータを変更後の圧縮アルゴリズムに対応する圧縮処理により圧縮する（Ｓ８４０）。なお、圧縮処理を実行する機能部としては、ＦＭＰＫ１１３のプロセッサ２１３であってもよいし、圧縮伸長回路１１６であってもよい。
【０２０３】
次いで、ＦＭＰＫ１１３のプロセッサ２１３は、圧縮されたデータを、ＦＭチップ２８０に書き込み（Ｓ８５０）、ストレージコントローラ１０９へ処理の完了を報告する。なお、処理の完了の報告を受けたストレージコントローラ１０９は、圧縮アルゴリズム変更処理を終了する。
【０２０４】
上記した第２実施形態に係るストレージ装置１０４によると、圧縮伸長処理による負荷が、ストレージコントローラ１０９に掛からないので、ストレージコントローラ１０９の性能を別の処理に振り分けることができる。
【０２０５】
なお、本実施形態では、ストレージコントローラ１０９がアクセス頻度に基づいて圧縮アルゴリズムの変更を決定して、ＦＭＰＫ１１３に通知するようにしていたが、本発明はこれに限られず、例えば、ストレージコントとローラ１０９がアクセス頻度の情報をＦＭＰＫ１１３に通知するようにし、ＦＭＰＫ１１３側で、圧縮アルゴリズムの変更を決定するようにしてもよい。
【０２０６】
また、ストレージコントローラ１０９がＩ／Ｏごとや、格納する領域ごとに、データの圧縮アルゴリズムを指示するようにしてもよい。
【０２０７】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【０２０８】
例えば、上記実施形態において、ストレージコントローラ１０９側に、複数の圧縮アルゴリズムによる圧縮機能を備えるようにして、ストレージコントローラ１０９側で、複数の圧縮アルゴリズムの圧縮機能を使い分けるようにしてもよい。
【０２０９】
また、ストレージコントローラ１０９側に複数の圧縮アルゴリズムによる圧縮機能を備えると共に、ＦＭＰＫ１１３に複数の圧縮アルゴリズムによる圧縮機能を備えるようにし、それら複数の圧縮機能を使い分けるようにしてもよい。
【０２１０】
なお、上記第１実施形態では、ストレージコントローラ１０９にアクセス頻度が低いデータ用の圧縮アルゴリズムによる圧縮機能を実行させ、ＦＭＰＫ１１３にアクセス頻度が高いデータ用の圧縮アルゴリズムによる圧縮機能を実行させることにより、主に、ストレージコントローラ１０９側の負荷を軽減するようにしていたが、本発明はこれに限られず、例えば、ストレージ装置１０４におけるストレージコントローラ１０９の性能や、ＦＭＰＫ１１３の性能や、ストレージ装置１０４が取り扱うデータの種類等に応じて、ボトルネックとなる部分を解消するように、複数の圧縮アルゴリズムの使い分けや、圧縮アルゴリズムを実行する実行部位を決定すればよい。
【符号の説明】
【０２１１】
１００…計算機システム、１０１…ホスト、１０２…管理装置、１０４…ストレージ装置、１０５…プロセッサ、１０９…ストレージコントローラ、１１３…ＦＭＰＫ、２１０…ＦＭコントローラ、２１３…プロセッサ、２８０…ＦＭチップ
【図１】
2019079113.tif 000003
【図２】
2019079113.tif 000004
【図３】
2019079113.tif 000005
【図４】
2019079113.tif 000006
【図５】
2019079113.tif 000007
【図６】
2019079113.tif 000008
【図７】
2019079113.tif 000009
【図８】
2019079113.tif 000010
【図９】
2019079113.tif 000011
【図１０】
2019079113.tif 000012
【図１１】
2019079113.tif 000013
【図１２】
2019079113.tif 000014
【図１３】
2019079113.tif 000015
【図１４】
2019079113.tif 000016
【図１５】
2019079113.tif 000017
【図１６】
2019079113.tif 000018
【図１７】
2019079113.tif 000019
【図１８】
2019079113.tif 000020