(57)【要約】  実効的にサーバストレージ間の転送データ量を削減し、サーバストレージ間の実効帯域の広帯域化を実現する。インタフェースデバイスは、サーバモジュール内に位置し、サーバプロセッサにより発行されたリードリクエストを受信すると、リードリクエストに基づくリードコマンドを、ストレージプロセッサへ送信し、ストレージプロセッサから、リードリクエストの対象データを変換して得られた変換後対象データの逆変換をインタフェースデバイスに行わせるとの逆変換指示を受けた場合に、ストレージメモリ上の転送元アドレスに格納された変換後対象データを逆変換しながらサーバメモリ上の転送先アドレスに転送するＤＭＡを行う。
2015181902.tif 000002
【特許請求の範囲】
【請求項１】
ストレージプロセッサとストレージメモリと記憶デバイスとを有するストレージモジュールと、
サーバプロセッサとサーバメモリとを有するサーバモジュールと、
前記サーバプロセッサと前記ストレージプロセッサとに接続されるインタフェースデバイスとを有し、
前記インタフェースデバイスは、
前記サーバモジュール内に位置し、
前記サーバプロセッサにより発行されたリードリクエストを受信すると、前記リードリクエストに基づくリードコマンドを、前記ストレージプロセッサへ送信し、
前記ストレージプロセッサから、前記リードリクエストの対象データを変換して得られた変換後対象データの逆変換を前記インタフェースデバイスに行わせるとの逆変換指示を受けた場合に、前記ストレージメモリ上の転送元アドレスに格納された前記変換後対象データを逆変換しながら前記サーバメモリ上の転送先アドレスに転送するＤＭＡ（Direct  Memory  Access）を行う
計算機システム。
【請求項２】
請求項１記載の計算機システムであって、
前記ストレージプロセッサは、
前記リードリクエストの対象データがデータ量の削減された変換後対象データとして前記記憶デバイスに格納されている場合に、前記インタフェースデバイスに前記逆変換を行わせるか判定し、
前記逆変換を行わせると判定した場合に、前記リードコマンドの返信として、前記ストレージメモリ上の前記転送元アドレスと、前記逆変換指示とを、前記インタフェースデバイスに送信する
計算機システム。
【請求項３】
請求項１記載の計算機システムであって、
前記変換は圧縮処理であり、前記逆変換は伸張処理である
計算機システム。
【請求項４】
請求項２記載の計算機システムであって、
前記ストレージプロセッサは、前記対象データのサイズが所定値以上の場合に、前記インタフェースデバイスに前記逆変換を行わせると判定する
計算機システム。
【請求項５】
請求項１記載の計算機システムであって、
前記ストレージプロセッサは、前記ストレージメモリ上の前記転送元アドレスに格納された前記変換後対象データのサイズと前記変換後対象データの前記変換前のサイズに関する情報も、前記インタフェースデバイスに送信する
計算機システム。
【請求項６】
請求項５記載の計算機システムであって、
前記記憶デバイスは、逆変換機能を有するコントローラと複数のメモリとを有し、
前記ストレージプロセッサは、前記インタフェースデバイスに前記逆変換を行わせると判定した場合に、前記サイズに関する情報と前記対象データの前記変換後対象データとを、前記ストレージメモリ上の前記転送元アドレスに読み出す指示である読み出し指示を前記コントローラに行い、
前記読み出し指示は、前記逆変換を行わずに前記対象データを読み出す指示である
計算機システム。
【請求項７】
請求項５記載の計算機システムであって、
前記ストレージプロセッサは、前記インタフェースデバイスに前記逆変換を行わせないと判定した場合に、前記逆変換機能を有するコントローラに、前記リードリクエストの対象データの読み出しを指示し、
前記コントローラは記憶される前記変換後対象データを前記逆変換して前記ストレージメモリ上の前記転送元アドレスに読み出す
計算機システム。
【請求項８】
請求項１記載の計算機システムであって、
前記インタフェースデバイスは、前記対象データを所定サイズのブロック毎に前記逆変換することにより逆変換結果データを生成し、前記逆変換結果データが前記リードリクエストの対象データ以外のデータを含む場合、前記逆変換結果データから前記対象データを抽出して前記サーバメモリ上の転送先アドレスに転送する
計算機システム。
【請求項９】
請求項１記載の計算機システムであって、
前記逆変換指示は、前記対象データのサイズと、前記対象データに付加された第一保障コードの期待値とを含み、
前記インタフェースデバイスは、前記逆変換された逆変換結果データと前記第一保障コードの期待値とに基づいて、前記逆変換が成功であるか否かを判定し、前記逆変換が成功である旨の応答を前記ストレージプロセッサへ通知する
計算機システム。
【請求項１０】
請求項９記載の計算機システムであって、
前記逆変換指示は、前記変換後対象データに付加された第二保障コードの期待値を含み、
前記インタフェースデバイスは、前記読み出された変換後対象データと前記第二保障コードの期待値とに基づいて、前記変換後対象データが正常であるか否かを判定し、前記変換後対象データが正常であると判定された場合に前記逆変換が成功であるか否かを判定する
計算機システム。
【請求項１１】
請求項１記載の計算機システムであって、
前記サーバプロセッサと前記インタフェースデバイスとを接続するバスによって、前記インタフェースデバイスと前記ストレージプロセッサは接続される
計算機システム。
【請求項１２】
請求項１記載の計算機システムであって、
前記インタフェースデバイスは、前記サーバプロセッサにより発行されたライトリクエストを受信し、前記ストレージプロセッサから、前記ライトリクエストのライト対象データの変換を前記インタフェースデバイスに行わせるとの変換指示をうけた場合に、
前記サーバメモリ上に格納された前記ライト対象データを前記変換しながら前記ストレージメモリ上のアドレスに転送するＤＭＡを行う
計算機システム。
【請求項１３】
ストレージプロセッサとストレージメモリと記憶デバイスとを有するストレージモジュールと、
サーバプロセッサとサーバメモリとを有するサーバモジュールと、
を有する計算機システムを制御する計算機システム制御方法であって、
前記サーバプロセッサと前記ストレージプロセッサとに接続され前記サーバモジュール内に位置するインタフェースデバイスを用いて、前記サーバプロセッサにより発行されたリードリクエストを受信すると、前記リードリクエストに基づくリードコマンドを、前記ストレージプロセッサへ送信し、
前記インタフェースデバイスを用いて、前記ストレージプロセッサから、前記リードリクエストの対象データを変換して得られた変換後対象データの逆変換を前記インタフェースデバイスに行わせるとの逆変換指示を受けた場合に、前記ストレージメモリ上の転送元アドレスに格納された前記変換データを逆変換しながら前記サーバメモリ上の転送先アドレスに転送するＤＭＡ（Direct  Memory  Access）を行う
ことを備える計算機システム制御方法。
【請求項１４】
請求項１３記載の計算機システム制御方法であって、
前記ストレージプロセッサを用いて、前記リードリクエストの対象データがデータ量の削減された変換後対象データとして前記記憶デバイスに格納されている場合に、前記インタフェースデバイスに前記逆変換を行わせるか判定し、
前記ストレージプロセッサを用いて、前記逆変換を行わせると判定した場合に、前記リードコマンドの送信の返信として、前記ストレージメモリ上の前記転送元アドレスと、前記逆変換指示とを、前記インタフェースデバイスに送信する
ことを更に備える計算機システム制御方法。
【請求項１５】
請求項１３記載の計算機システム制御方法であって、
前記変換は圧縮処理であり、前記逆変換は伸張処理である
計算機システム制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムおよび計算機システム制御方法に関する。
【背景技術】
【０００２】
計算機システムで取り扱われるデータ量は近年ますます増加してきている。例えば、サーバからデータを日々収集してストレージ上でデータベースを構築し、所定のタイミングで、分析用サーバに蓄積したデータを読み出し、分析処理するような大規模データ分析システム技術が知られている。こうした計算機システムでは膨大な処理要求に対しての高速なレスポンスが求められる。【０００３】
一方で、サーバ及びストレージそれぞれの性能向上及び、フラッシュメモリ記憶装置のストレージ利用によるバックエンドの広帯域化に合わせて、サーバとストレージ間の接続帯域も、より広帯域化が必要となってきている。【０００４】
例えば、サーバ計算機とストレージ装置がＳＡＮ（Storage  Area  Network）を介して接続される計算機システムにおいて、例えばサーバ計算機に圧縮伸張機構を設けることで圧縮されたデータをＳＡＮの線路を介して転送する技術が知られている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１３／０３３２６５２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１のシステムは、サーバ計算機とストレージ装置間をＦＣ（Fibre  Channel）で接続している。本構成でサーバ計算機とストレージ装置間の帯域向上を図るには、ＦＣのポート数増加や次世代品の利用などがあるが、高コストとなってしまう。【０００７】
また、特許文献１のシステムはサーバ側にデータキャッシュ用のフラッシュメモリドライブを搭載し、リードデータのヒットミス判定を実施することでストレージアクセスの低減を可能とする。このため、フラッシュをサーバ側に準備し、サーバによるキャッシュ領域の管理が必要となる。更に、サーバ側での圧縮データを伸張せずに読み出すべきかについての判定を行うため、予めオブジェクト毎にポリシーを設定し、データが格納されている領域が圧縮されているかの情報をサーバ側で管理する必要がある。更に、キャッシュミスの場合にストレージデータをサーバ側メモリへの転送前に一旦フラッシュメモリに格納する処理、又、圧縮データの伸張処理等によるサーバ処理コストが大きく、結果としてパス帯域以外の伸張処理負荷が原因でシステム性能が低下する可能性がある。【０００８】
よって、本願ではアプリケーション側での事前設計を不要とし、Ｉ／Ｏの特性に連動して必要に応じた伸張リード、非伸張リードの使い分けを実現し、これにより、実効的にサーバストレージ間の転送データ量を削減し、サーバストレージ間の実効帯域の広帯域化を実現することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明の一態様である計算機システムは、ストレージプロセッサとストレージメモリと記憶デバイスとを有するストレージモジュールと、サーバプロセッサとサーバメモリとを有するサーバモジュールと、サーバプロセッサとストレージプロセッサとに接続されるインタフェースデバイスとを有する。インタフェースデバイスは、サーバモジュール内に位置し、サーバプロセッサにより発行されたリードリクエストを受信すると、リードリクエストに基づくリードコマンドを、ストレージプロセッサへ送信し、ストレージプロセッサから、リードリクエストの対象データを変換して得られた変換後対象データの逆変換をインタフェースデバイスに行わせるとの逆変換指示を受けた場合に、ストレージメモリ上の転送元アドレスに格納された変換後対象データを逆変換しながらサーバメモリ上の転送先アドレスに転送するＤＭＡ（Direct  Memory  Access）を行う。
【図面の簡単な説明】
【００１０】
【図１】実施例のサーバストレージシステムの構成を示す。
【図２】第一具体例のサーバストレージシステムの構成を示す。
【図３】第二具体例のサーバストレージシステムの構成を示す。
【図４】第三具体例のサーバストレージシステムの構成を示す。
【図５】第四具体例のサーバストレージシステムの構成を示す。
【図６】仮想サーバストレージシステムの構成を示す。
【図７】変形例のサーバストレージシステムの構成を示す。
【図８】ＳＳ接続機構の構成を示す。
【図９】ＤＭＡコントローラの構成を示す。
【図１０】圧縮記憶デバイスの構成を示す。
【図１１】ＳＴメモリ内の記憶領域の構成を示す。
【図１２】物理デバイス内の記憶領域の構成を示す。
【図１３】ストレージシステム内の記憶領域の構成を示す。
【図１４】ストレージシステム内のページの構成を示す。
【図１５】仮想ボリューム管理テーブルを示す。
【図１６】ストレージプール管理テーブルを示す。
【図１７】ＲＡＩＤグループ管理テーブルを示す。
【図１８】物理デバイス管理テーブルを示す。
【図１９】仮想ページ管理テーブルを示す。
【図２０】実ページ管理テーブルを示す。
【図２１】空き実ページ管理テーブルを示す。
【図２２】物理デバイス内の記憶領域の構成を示す。
【図２３】圧縮管理テーブルを示す。
【図２４】ＳＴコントローラが圧縮記憶デバイスから圧縮情報を取得する動作を示す。
【図２５】ＳＴコントローラが圧縮記憶デバイスから圧縮データを取得する第一の動作を示す。
【図２６】ＳＴコントローラが圧縮記憶デバイスから圧縮データを取得する第二の動作を示す。
【図２７】ＳＴコントローラが圧縮記憶デバイスから圧縮データを取得する第三の動作を示す。
【図２８】伸張ＤＭＡ処理におけるＳＴコントローラとＳＳ接続機構の間の動作を示す。
【図２９】圧縮情報ＳＧＬを示す。
【図３０】データフォーマットを示す。
【図３１】ＳＳシステムのリード処理の中の第一処理を示す。
【図３２】ＳＳシステムのリード処理の中の第一処理に続く第二処理を示す。
【図３３】ＳＳ接続機構による伸張ＤＭＡ処理の中の第一処理を示す。
【図３４】ＳＳ接続機構による伸張ＤＭＡ処理の中の第一処理に続く第二処理を示す。
【図３５】伸張ＤＭＡ処理中の保障コードチェック処理の中の第一処理を示す。
【図３６】伸張ＤＭＡ処理中の保障コードチェック処理の中の第一処理に続く第二処理を示す。
【図３７】伸張ＤＭＡ処理中の保障コードチェック処理の中の第二処理に続く第三処理を示す。
【図３８】ＳＳシステムのライト処理の中の第一処理を示す。
【図３９】ＳＳシステムのライト処理の中の第一処理に続く第二処理を示す。
【図４０】ＳＳシステムのライト処理の中の第二処理に続く第三処理を示す。
【図４１】ＳＳ接続機構による圧縮ＤＭＡ処理の中の第一処理を示す。
【図４２】ＳＳ接続機構による圧縮ＤＭＡ処理の中の第一処理に続く第二の処理を示す。
【図４３】圧縮オフロードライト処理を示す。
【図４４】サーバによる復号とＳＳ接続機構による伸張を行う場合のリード処理の中の第一処理を示す。
【図４５】サーバによる復号とＳＳ接続機構による伸張を行う場合のリード処理の中の第一処理の後の第二処理を示す。
【図４６】サーバ・サーバ間接続の構成を示す。
【図４７】ストレージ・ストレージ間接続の構成を示す。
【発明を実施するための形態】
【００１１】
以後の説明では「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」、「ａａａキュー」等の表現にて本発明の情報を説明するが、情報はテーブル、リスト、ＤＢ、キュー、等のデータ構造以外で表現されていてもよい。そのため、情報がデータ構造に依存しないことを示すために「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」、「ａａａキュー」等について「ａａａ情報」と呼ぶことがある。
【００１２】
更に、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いるが、これらについてはお互いに置換が可能である。
【００１３】
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御デバイス）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理はストレージコントローラ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部又は全ては専用ハードウェアによって実現されてもよい。
【００１４】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディア（computer-readable  memory  media）によって各計算機にインストールされてもよい。この場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ：Central  Processing  Unit）と記憶資源を含み、記憶資源は更に配布プログラムと配布対象であるプログラムを記憶している。そして、配布プログラムをＣＰＵが実行することで、プログラム配布サーバのＣＰＵは配布対象のプログラムを他の計算機に配布する。
【００１５】
以下、本発明の実施例について図面を用いて説明する。
【００１６】
以下、本発明の実施例のサーバストレージ（ＳＳ）システムについて説明する。
【００１７】
図１は、実施例のサーバストレージシステムの構成を示す。
【００１８】
このＳＳシステムは、サーバ１００と、ストレージシステム３００とを含む。サーバ１００とストレージシステム３００は、一つの筺体に格納されていても良い。ＳＳシステムを計算機システムと呼ぶことがある。
【００１９】
サーバ１００は、サーバ（ＳＶ）メモリ１１０と、サーバ（ＳＶ）プロセッサ１２０と、サーバストレージ（ＳＳ）接続機構２００とを含む。ＳＶメモリ１１０とＳＶプロセッサ１２０は、内部バスを介して互いに接続されている。ＳＶメモリ１１０は、メモリであり、アプリケーション、ＯＳ（Operating  System）、ドライバ等、サーバ１００の制御のためのプログラム及びデータを格納する。ＳＶプロセッサ１２０は、マイクロプロセッサであり、ＳＶメモリ１１０内のプログラムに従って処理を実行する。ＳＳ接続機構２００は、サーバ側バスを介してＳＶプロセッサ１２０に接続され、ストレージ側バスを介してストレージシステム３００に接続され、ＳＶプロセッサ１２０とストレージシステム３００の間の通信を制御する。
【００２０】
ＳＶプロセッサ１２０とＳＳ接続機構２００の間は、サーバ側バスで接続されている。ＳＳ接続機構２００とＳＴプロセッサ４２０の間は、サーバ側バスと同一形式のバスであるストレージ側バスで接続されている。本実施例は、サーバ側バス及びストレージ側バスとして、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）を用いる。サーバ側バス及びストレージ側バスの夫々は、バックプレーン等の基板であっても良いし、ケーブルであっても良い。本システムでは、サーバ１００の内部バスと同じバスでサーバ１００からストレージシステム３００までを接続することでサーバ１００とストレージシステム３００の記憶領域間のＤＭＡ転送を可能とし、ＳＶプロセッサ１２０から発行した要求に対して、ストレージシステム３００内のストレージ（ＳＴ）プロセッサがＳＳ接続機構２００に搭載したＤＭＡエンジンを起動し、ストレージシステム３００内のＳＴメモリ上のデータをＳＶメモリ１１０上へ、または、ＳＶメモリ１１０上のデータをストレージシステム３００内のＳＴメモリ上へ転送する。この構成により、サーバ１００とストレージシステム３００をいわゆるＳＡＮ等のネットワークスイッチのフォワード機能に頼らずに広帯域なバスで接続した一体型システムを構築し、帯域拡張とレイテンシ向上を実現する。さらに本システムにおいてＤＭＡ転送を実現することでＩ／Ｏ性能の向上を図ることができる。
【００２１】
なお、サーバ１００は、圧縮伸張機能を有するフラッシュメモリ（ＦＭ）である圧縮伸張機能付ＦＭを含んでも良い。サーバ１００は、内部バスを介してＳＶプロセッサ１２０に接続され且つサーバ側バスを介してＳＳ接続機構２００に接続されたRoot  Complex（ＲＣ）を含んでも良い。
【００２２】
ＳＳ接続機構２００は、サーバ１００からのライトデータを圧縮してストレージシステム３００へ転送し、ストレージシステム３００からのリードデータを伸張してサーバ１００へ転送する。
【００２３】
ストレージシステム３００は、ストレージ（ＳＴ）コントローラ４００と、記憶装置５００とを含む。記憶装置５００は、サーバ１００からアクセスされるデータを格納する。ＳＴコントローラ４００は、記憶装置５００とサーバ１００に接続され、記憶装置５００へのアクセスを制御する。ＳＴコントローラ４００をコントローラと呼ぶことがある。
【００２４】
ＳＴコントローラ４００は、ストレージ（ＳＴ）メモリ４１０と、ストレージ（ＳＴ）プロセッサ４２０と、ドライブインタフェース（Ｉ／Ｆ）４３０とを含む。ＳＴメモリ４１０とＳＴプロセッサ４２０とドライブＩ／Ｆ４３０は、内部バスを介して互いに接続されている。ＳＴメモリ４１０は、メモリであり、ストレージシステム３００の制御のためのプログラム及びデータを格納する。ＳＴプロセッサ４２０は、マイクロプロセッサであり、ストレージ側バスを介してＳＳ接続機構２００に接続され、ＳＴメモリ４１０に格納されたプログラムに従って処理を実行する。ドライブＩ／Ｆ４３０は、記憶装置側バスを介して記憶装置５００に接続されており、ＳＴプロセッサ４２０と記憶装置５００の間の通信を制御する。
【００２５】
なお、ＳＴコントローラ４００は、圧縮伸張機能付ＦＭを含んでも良い。この場合、ＳＴプロセッサ４２０は、圧縮伸張機能付ＦＭをキャッシュ領域として用い、キャッシュされたデータの圧縮及び伸張を行わせることができる。ＳＴコントローラ４００は、内部バスを介してＳＴプロセッサ４２０に接続され且つストレージ側バスを介してＳＳ接続機構２００に接続されたＲＣを含んでも良い。
【００２６】
記憶装置５００は、複数の記憶デバイス６００（＃０、＃１、＃２、＃３）を含む。物理的な記憶デバイス６００を物理デバイスと呼び、仮想的な記憶デバイスを仮想デバイスと呼ぶことがある。データの圧縮伸張機能を含む物理デバイスを圧縮記憶デバイス６００ａと呼び、データの圧縮伸張機能を含まない物理デバイスを非圧縮記憶デバイス６００ｂと呼ぶことがある。
【００２７】
なお、データの圧縮及び復号は、圧縮記憶デバイス６００ａで行われても良いし、ＳＴコントローラ４００により行われても良いし、サーバ１００で行われても良い。
【００２８】
また、ＳＳシステムにおける圧縮を、重複排除（deduplication）など、他の変換に置き換えることができる。この変換により元データから変換結果データが生成される。変換結果データのサイズは、元データのサイズより小さくなる。また逆変換により変換結果データから元データが生成される。圧縮に対する逆変換は、伸張である。重複排除に対する逆変換は元データの復元である。
【００２９】
ここでは、サーバストレージシステムの構成の幾つかの具体例について説明する。
【００３０】
図２は、第一具体例のサーバストレージシステムの構成を示す。
【００３１】
各ＳＳ接続機構２００は、複数のＳＴコントローラ４００に直接接続されていても良い。第一具体例のＳＳシステムは、複数のサーバ１００と、一つのストレージシステム３００を含む。ストレージシステム３００は、二つのＳＴコントローラ４００を含む。各ＳＴコントローラ４００は、二つのＳＴプロセッサ４２０と、各ＳＴプロセッサ４２０に接続されている複数のＳＴメモリ４１０と、各ＳＴプロセッサ４２０に接続されている複数のドライブＩ／Ｆ４３０とを含む。一方のＳＴコントローラ４００内の二つのＳＴプロセッサ４２０は、他方のＳＴコントローラ４００内の二つのＳＴプロセッサ４２０にＳＴコントローラ４００間バスを介して夫々接続されている。なお、ＳＴプロセッサ４２０は複数でもよい。複数の場合も夫々他方のＳＴコントローラ４００内の複数のＳＴプロセッサ４２０にＳＴコントローラ間バスを介して夫々接続されている。
【００３２】
図３は、第二具体例のサーバストレージシステムの構成を示す。
【００３３】
各ＳＳ接続機構２００は、インタフェース拡張装置７００を介して複数のＳＴコントローラ４００に接続されていても良い。ここでは第一具体例に対する第二具体例の相違点について説明する。第二具体例のＳＳシステムは、複数のサーバ１００と、各ＳＴコントローラ４００とに接続されたインタフェース拡張装置７００を含む。インタフェース拡張装置７００は、サーバ１００とＳＴコントローラ４００の間の接続パス数を増やす制御を行う。インタフェース拡張装置７００により、より多くのサーバ１００が一台のストレージに直結できる。インタフェース拡張装置７００は例えば、ＰＣＩｅスイッチである。
【００３４】
図４は、第三具体例のサーバストレージシステムの構成を示す。
【００３５】
各サーバ１００は、複数のＳＳ接続機構２００を含んでいても良い。ここでは第二具体例に対する第三具体例の相違点について説明する。第三具体例において、各サーバ１００は、二つのＳＳ接続機構２００を含む。二つのＳＳ接続機構２００は、インタフェース拡張装置７００を介して二つのＳＴコントローラ４００に夫々接続される。
【００３６】
この構成において、ストレージ側バスを２本のＰＣＩｅｘ４、サーバ側バスを１本のＰＣＩｅｘ８とすることにより、ストレージ側バスとサーバ側バスの帯域のバランスが取れるとする。ここで、ストレージ側バスを１本のＰＣＩｅｘ４、サーバ側バスを１本のＰＣＩｅｘ８に変更することにより、ストレージ側バスの帯域だけを１／２に変更する。この場合、ストレージ側バスからＳＳ接続機構２００へ転送された圧縮データがＳＳ接続機構２００で伸張されてサーバ側バスへ転送される際に、ストレージ側バスにおいて１／２に圧縮されていたデータが、サーバ側バスにおいてもとのサイズのデータに戻っても、ストレージ側バス及びサーバ側バスは、それぞれの帯域を確保できる。また、各サーバ１００が２つのＳＳ接続機構２００を含むことでハードウェアの冗長性を確保できる。なお、各サーバ１００が１つのＳＳ接続機構２００を含み、圧縮率を考慮してサーバ側バスの帯域をストレージ側バスより広帯域にしておいても良い。例えば、ストレージ側バスを２本のＰＣＩｅｘ４とし、サーバ側バスを１本のＰＣＩｅｘ１６としても良い。更に、ストレージ側バスを２本のＰＣＩｅｘ４とし、サーバ側バスを２本のＰＣＩｅｘ８としても、同等の効果を得ることができる。このようにサーバ側バス及びストレージ側バスが、ＰＣＩｅに従うことにより、圧縮に応じて必要な帯域を割り当てられることができる。
【００３７】
図５は、第四具体例のサーバストレージシステムの構成を示す。
【００３８】
ＳＳシステムは、複数のストレージシステム３００を含んでいても良い。ここでは第三具体例に対する第四具体例の相違点について説明する。第四具体例において、ＳＳシステムは、二つのストレージシステム３００を含む。一つのサーバ１００内の二つのＳＳ接続機構２００は、インタフェース拡張装置７００を介して二つのストレージシステム３００に夫々接続される。一つのＳＳ接続機構２００は、インタフェース拡張装置７００を介して一つのストレージシステム３００内の二つのＳＴコントローラ４００に接続される。この構成において、サーバ１００に二つのＳＳ接続機構２００を搭載することで、より多くのストレージシステム３００をサーバ１００に接続することができ、サーバ１００に対して広帯域、高性能なストレージリソースを提供できる。
【００３９】
図６は、仮想サーバストレージシステムの構成を示す。
【００４０】
物理的なＳＳシステム２０００は、仮想化機構３０００を実行し、仮想化機構３０００上で仮想サーバストレージ（ＳＳ）システム１０００を実行しても良い。仮想ＳＳシステム１０００は、仮想サーバ１１００と、仮想ストレージシステム１３００とを含む。この場合、ＳＳシステム２０００は少なくともプロセッサ２０２０、メモリ２０１０、記憶装置２５００、ＳＳ接続機構２２００を物理的に備える。仮想サーバ１１００は、サーバ１００と同様の機能を提供する。より具体的には、仮想サーバ１１００は、ＳＶメモリ１１０と同様の機能を提供する仮想ＳＶメモリ２１１０と、ＳＳ接続機構２００と同様の機能を提供する仮想ＳＳ接続機構１２００とを含む。仮想ストレージシステム１３００は、ＳＴコントローラ４００と同様の機能を提供する仮想ＳＴコントローラ１４００と、記憶装置５００と同様の機能を提供する仮想記憶装置１５００とを含む。仮想ＳＴコントローラ１４００は、ＳＴメモリ４１０と同様の機能を提供する仮想ＳＴメモリ１４１０を含む。
【００４１】
仮想化機構３０００は、メモリ２０１０内の記憶領域を仮想ＳＶメモリ１１１０に割り当て、ＳＳ接続機構２２００の処理能力を仮想ＳＳ接続機構１２００に割り当て、メモリ２０１０内の記憶領域を仮想ＳＴメモリ１４１０に割り当て、記憶装置２５００内の記憶領域を仮想記憶装置１５００に割り当てる。
【００４２】
仮想ＳＳシステム１０００は、単独のサーバや、サーバとストレージシステム等、他の構成の計算機システム上で実行されても良い。また、計算機システムは、ＳＳ接続機構に代えて圧縮伸張回路を含んでも良い。
【００４３】
図７は、変形例のサーバストレージシステムの構成を示す。
【００４４】
ここでは実施例のＳＳシステムに対する変形例のＳＳシステムの相違点について説明する。この変形例においてＳＳシステムは、ストレージシステム３００の代わりにストレージシステム３００ａを有し、ＳＴコントローラ４００の代わりにＳＴコントローラ４００ａを有する。サーバ１００内のＳＳ接続機構２００に代えて、ＳＴコントローラ４００ａ内にＳＳ接続機構２００が設けられる。ＳＳ接続機構２００は、サーバ１００内のＳＶプロセッサ１２０に接続され、ＳＴコントローラ４００ａ内のＳＴプロセッサ４２０に接続される。サーバ１００は更にＦＭ１４０を含んでいても良い。このＦＭ１４０が圧縮伸張機能を有し、ＳＶプロセッサ１２０からの指示に応じて圧縮伸張を行っても良い。ＳＴコントローラ４００ａは更に、ＦＭ４４０を含んでいても良い。このＦＭ４４０が圧縮伸張機能を有し、ＳＴプロセッサ４２０からの指示に応じて、ＳＳ接続機構２００の代わりに圧縮又は伸張を行っても良い。本構成のとき、ライトの動作は図３８〜４０に開示したフローにおいて、ＳＳ接続機構２００への送出前にＦＭ１４０でデータが圧縮される。ＳＳ接続機構２００はこの圧縮データを読み出して伸張し、更に、本実施例のストレージシステム３００の圧縮フォーマットに圧縮しなおしながらＳＴメモリ４１０を介して記憶デバイス６００に書き込む。なお、ＳＳ接続機構２００は圧縮データを読み出したときに伸張せずに、更に、本実施例のストレージシステム３００の圧縮フォーマットに圧縮しても良い。本構成によりライト帯域を広帯域化することができる。又、リード動作は図３１，３２に開示したフローにおいてＳＴコントローラ４００ａ内のＦＭ４４０で圧縮されたデータまたは、記憶デバイス６００に圧縮格納されたデータをＳＳ接続機構２００が読み出す場合に、データを伸張した上でサーバ１００の圧縮フォーマットに圧縮しなおしながらサーバ１００側のＦＭ１４０またはＳＶメモリ１１０との間でＤＭＡ転送を行う。以上の構成により、ＳＳ接続機構２００は、圧縮伸張機能を有したＦＭ４４０と連携してシステムの広帯域化を実現する。なお、前述のようにＳＳ接続機構２００が伸張しないで圧縮データを読み出した場合、サーバ１００の圧縮フォーマットに圧縮しなおさなくても良い。即ち、ＳＳ接続機構２００は、サーバ１００内に設けられても良いし、ＳＴコントローラ４００内に設けられても良いし、サーバ１００とＳＴコントローラ４００の間に設けられても良い。
【００４５】
図８は、ＳＳ接続機構２００の構成を示す。
【００４６】
ＳＳ接続機構２００は、例えば、ＡＳＩＣ（application  specific  integrated  circuit）として実装される。ＳＳ接続機構２００は、ＩＦ（Interface）プロセッサ２１０と、ＤＭＡ（Direct  Memory  Access）コントローラ２２０と、内部メモリ２３０と、レジスタ２４０と、インタフェース２５０と、二つのインタフェース２６０と、内部スイッチ２７０とを含む。ＤＭＡコントローラ２２０をＤＭＡと呼ぶことがある。ＩＦプロセッサ２１０と、ＤＭＡコントローラ２２０と、内部メモリ２３０と、レジスタ２４０と、インタフェース２５０と、二つのインタフェース２６０とは、内部スイッチ２７０を介して互いに接続されている。一方のインタフェース２５０は、サーバ側バスを介してＳＶプロセッサ１２０に接続されている。他方の二つのインタフェース２６０は、ストレージ側バスを介して二つのＳＴプロセッサ４２０に夫々接続されている。内部メモリ２３０は、メモリであり、プログラム及びデータを格納する。ＩＦプロセッサ２１０は、マイクロプロセッサであり、内部メモリ２３０内のプログラムに従って処理を実行する。ＤＭＡコントローラ２２０は、ＩＦプロセッサ２１０からの指示に従ってデータ転送（メモリ間転送）を実行する。レジスタ２４０は、ＩＦプロセッサ２１０の設定値を格納する。内部スイッチ２７０は、ＩＦプロセッサ２１０からの指示に従って各部の間の通信を制御する。なお、ＳＶ側インタフェース及びＳＴ側インタフェースは夫々複数あって、各バス及びインタフェース拡張を介して、ＳＶプロセッサ１２０とＳＴプロセッサ４２０に接続されていても良い。
【００４７】
図９は、ＤＭＡコントローラ２２０の構成を示す。
【００４８】
ＤＭＡコントローラ２２０は、圧縮デバイス２２１と、伸張デバイス２２２と、保障コード処理デバイス（０）２２４と、保障コード処理デバイス（１）２２４と、データ転送制御デバイス２２５と、二つのインタフェース２２６、２２７とを含む。二つのインタフェースは、内部スイッチに接続されている。圧縮デバイス２２１は、非圧縮データを圧縮して圧縮データに変換する。伸張デバイス２２２は、圧縮データを伸張して非圧縮データに変換する。保障コード処理デバイス（０）２２３は、非圧縮データの保障コードを算出し、非圧縮データに保障コードを付加する。更に、保障コード処理デバイス（０）２２３は、非圧縮データと保障コードに基づいて非圧縮データの誤りを検出する。保障コード処理デバイス（１）は、圧縮データの保障コードを算出し、圧縮データに保障コードを付加する。更に、保障コード処理デバイス（１）２２４は、圧縮データと保障コードに基づいて圧縮データの誤りを検出する。また、夫々の保障コード処理デバイスは、保障コードの削除も行う。データ転送制御デバイス２２５は、データの転送を制御する。
【００４９】
ＳＳ接続機構２００がサーバ１００とＳＴコントローラ４００にＰＣＩｅで接続されることにより、サーバ１００内のＳＶメモリ１１０と、ＳＴコントローラ４００のＳＴメモリ４１０の間でＤＭＡ転送を行うことができ、ＤＭＡ転送時にデータの圧縮又は伸張を行うことができる。
【００５０】
以下、圧縮記憶デバイス６００ａについて説明する。
【００５１】
図１０は、圧縮記憶デバイス６００ａの構成を示す。
【００５２】
圧縮記憶デバイス６００ａは、記憶デバイス（ＳＤ）コントローラ６１０と、ＳＤコントローラ６１０に接続されている複数のフラッシュメモリ（ＦＭ）６２０とを含む。ＳＤコントローラ６１０は、ＲＡＭ（Random  Access  Memory）６１１と、物理デバイス（ＳＤ）プロセッサ６１２と、保障コード処理デバイス６１３と、圧縮・伸張デバイス６１４と、Ｉ／Ｏインタフェース６１５と、ＦＭインタフェース６１６とを含む。ＳＤコントローラ６１０内の各部は内部バスを介して互いに接続されている。Ｉ／Ｏインタフェース６１５は、記憶装置側バスを介してＳＴコントローラ４００のドライブＩ／Ｆ４３０に接続されている。ＲＡＭ６１１は、例えばＤＲＡＭ（Dynamic  RAM）であり、プログラム及びデータを格納する。ＳＤプロセッサ６１２は、マイクロプロセッサであり、ＲＡＭ６１１に格納されたプログラムに従って処理を実行する。保障コード処理デバイス６１３は、データに基づいて保障コードを生成し、データに保障コードを付加し、データと保障コードに基づいてデータのチェックをし、誤りを検出する。また、保障コードの削除も行う。圧縮・伸張デバイス６１４は、非圧縮データを圧縮して圧縮データに変換し、圧縮データを伸張して非圧縮データに変換する。ＦＭインタフェース６１６は、複数のＦＭ６２０に接続されている。この圧縮記憶デバイス６００ａが、ＳＴプロセッサ４２０からの指示に応じて、ＳＳ接続機構２００の代わりに圧縮又は伸張を行っても良い。また、圧縮記憶デバイス６００ａは、データ入力に対して内部判断でデータを圧縮しても良く、ＳＴプロセッサ４２０から特に指示がない場合は内部で圧縮されているデータを伸張して出力しても良い。
【００５３】
以下、ストレージシステム３００内の記憶領域の構成について説明する。
【００５４】
図１１は、ＳＴメモリ４１０内の記憶領域の構成を示す。
【００５５】
ＳＴメモリ４１０内の記憶領域は、仮想ボリューム管理テーブル８１０と、ストレージプール管理テーブル８２０と、ＲＡＩＤグループ管理テーブル８３０と、物理デバイス管理テーブル８４０と、仮想ページ管理テーブル８５０と、実ページ管理テーブル８６０と、空き実ページ管理テーブル８７０とを含む。これらのテーブルについては後述する。ＳＴメモリ４１０内の記憶領域は更に、ストレージ（ＳＴ）キャッシュ領域８８０と、ストレージ（ＳＴ）バッファ領域８９０とを含む。ＳＴキャッシュ領域８８０は、ライトデータやリードデータを一時的に保持し、ライトやリードアクセスに対する、データヒットに利用する。ＳＴバッファ領域８９０は、ＳＴコントローラ４００により送受信されるデータや制御情報を格納する。
【００５６】
図１２は、圧縮記憶デバイス６００ａ内の記憶領域の構成を示す。
【００５７】
圧縮記憶デバイス６００ａ内の記憶領域は、ＲＡＭにおける、メタデータ領域９１０と、キャッシュ領域９３０と、バッファ領域９４０と、ＦＭ６２０における、データ領域９５０とを含む。メタデータ領域９１０は、メタデータを格納し、圧縮管理テーブル９２０を含む。キャッシュ領域９３０は、一時的なデータを格納する。バッファ領域９４０は、圧縮記憶デバイス６００ａにより送受信されるデータや制御情報を格納する。データ領域９５０は、データを格納する。なお、ＳＤコントローラ６１０内のＲＡＭ６１１内の情報は接続されているＦＭ６２０内にあっても良い。
【００５８】
図１３は、ストレージシステム３００内の記憶領域の構成を示す。
【００５９】
ＳＴコントローラ４００は、物理デバイス内の記憶領域を仮想デバイスに割り当てる。物理デバイスは、圧縮記憶デバイス６００ａ（圧縮ＳＤ）と非圧縮記憶デバイス（非圧縮ＳＤ）の何れであっても良い。ＳＴコントローラ４００は、複数の仮想デバイスを用いてパリティグループを作成する。パリティグループは、複数の圧縮記憶デバイス６００ａに夫々基づく複数の仮想デバイスを用いる圧縮パリティグループと、複数の非圧縮記憶デバイスに夫々基づく複数の仮想デバイスを用いる非圧縮パリティグループとの何れであっても良い。ＳＴコントローラ４００は、ストレージプール管理テーブル８２０を用いて、パリティグループ内の記憶領域をストレージプールに割り当てる。ＳＴコントローラ４００は、仮想ボリューム管理テーブル８１０を用いて、ストレージプール内の記憶領域を仮想ボリュームに割り当てる。ストレージプール毎に、圧縮データ格納用の圧縮ストレージプールと、圧縮されずに格納されるデータ用の非圧縮ストレージプールが存在してもよい。尚、圧縮ストレージプールは、例えば圧縮機能を有した機能デバイスの記憶領域で構成された圧縮パリティグループによって提供されていてもよいし、当該プールへの格納はＳＴコントローラ４００やＳＴコントローラ４００に接続される圧縮機構によって圧縮されるような構成としてもよい。また、仮想ボリュームも書き込まれたデータが圧縮されて記憶領域に格納される圧縮仮想ボリュームと書き込まれたデータが圧縮されることなく記憶領域に格納される非圧縮仮想ボリュームがあっても良く、混在していても良い。ＳＴコントローラ４００は、仮想ボリュームをサーバ１００へ提供する。
【００６０】
図１４は、ストレージシステム３００内のページの構成を示す。
【００６１】
パリティグループは、複数の実ページを含む。仮想ボリュームは、複数の仮想ページを含む。ＳＴコントローラ４００は、実ページ管理テーブル８６０を用いて、実ページを仮想ページに割り当てる。圧縮パリティグループを用いることにより、仮想ページに割り当てる実ページの合計サイズを物理デバイスの合計サイズより大きくすることができる。また、ＳＴコントローラ４００は、圧縮パリティグループ内の実ページと非圧縮パリティグループ内の実ページとを切り替えて仮想ページに割り当てることができる。これにより、圧縮の効果の有無を切り替えることができる。また、圧縮パリティグループを用いるときに、仮想ページに割り当てる実ページの合計サイズを物理デバイスの合計サイズと同じサイズにして、ＦＭ６２０の容量を増やさないで利用率を下げ、ＦＭ６２０を長寿命化することもできる。
【００６２】
図１５は、仮想ボリューム管理テーブル８１０を示す。
【００６３】
仮想ボリューム管理テーブル８１０は、仮想ボリューム毎のエントリを含む。一つの仮想ボリュームに対応するエントリは、ボリューム番号（＃）と、ボリューム容量と、割当済み容量と、プール番号（＃）と、ボリューム属性とを含む。ボリューム番号は、当該仮想ボリュームを示す識別子である。ボリューム容量は、当該仮想ボリュームの容量である。割当済み容量は、当該仮想ボリューム内で、実ページが割り当てられている仮想ページの合計サイズである。プール番号は、当該仮想ボリュームに割り当てることができる実ページを含むストレージプールを示す識別子である。ボリューム属性は、当該仮想ボリュームにおける圧縮の有無を示す。
【００６４】
図１６は、ストレージプール管理テーブル８２０を示す。
【００６５】
ストレージプール管理テーブル８２０は、ストレージプール毎のエントリを含む。一つのストレージプールに対応するエントリは、プール番号（＃）と、ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）グループリストと、プール属性と、空き仮想ページ数とを含む。プール番号は、当該ストレージプールを示す識別子である。ＲＡＩＤグループリストは、当該ストレージプールに含まれるＲＡＩＤグループを示す識別子である。プール属性は、当該ストレージプールに用いられている物理デバイスの種類を示す。空き仮想ページ数は、当該ストレージプールの空き仮想ページの数を示す。尚、システム内に図１３に示したように圧縮ストレージプールと非圧縮ストレージプールを設ける場合には、圧縮／非圧縮のプール属性を格納する欄があってもよい。
【００６６】
図１７は、ＲＡＩＤグループ管理テーブル８３０を示す。
【００６７】
ＲＡＩＤグループ管理テーブル８３０は、ＲＡＩＤグループ毎のエントリを含む。一つのＲＡＩＤグループに対応するエントリは、ＲＡＩＤグループ番号（＃）と、ＲＡＩＤレベルと、物理デバイス番号（＃）とを含む。ＲＡＩＤグループ番号は、当該ＲＡＩＤグループを示す識別子である。ＲＡＩＤレベルは、当該ＲＡＩＤグループのＲＡＩＤレベルを示す。物理デバイス番号は、当該ＲＡＩＤグループに用いられている物理デバイスを示す識別子である。
【００６８】
図１８は、物理デバイス管理テーブル８４０を示す。
【００６９】
物理デバイス管理テーブル８４０は、物理デバイス毎のエントリを含む。一つの物理デバイスに対応するエントリは、仮想デバイス番号（＃）と、物理デバイス番号（＃）と、物理容量と、論理使用容量と、物理使用容量とを含む。仮想デバイス番号は、当該物理デバイスを割り当てられた仮想デバイスを示す識別子である。物理デバイス番号は、当該物理デバイスを示す識別子である。物理容量は、当該物理デバイスの容量である。論理使用容量は、当該仮想デバイスの論理記憶領域の使用量である。物理使用容量は、当該物理デバイスの物理記憶容量の使用量である。
【００７０】
図１９は、仮想ページ管理テーブル８５０を示す。
【００７１】
仮想ページ管理テーブル８５０は、仮想ページ毎に作成される。一つの仮想ページに対応する仮想ページ管理テーブル８５０は、仮想ボリューム番号（＃）と、実ページポインタと、ページ属性とを含む。仮想ボリューム番号は、当該仮想ページを含む仮想ボリュームを示す識別子である。実ページポインタは、当該仮想ページに割り当てられた実ページを指すポインタである。ページ属性は、当該実ページが圧縮データを格納するか非圧縮データを格納するかを示す。この図に示されている二つの仮想ページ管理テーブル８５０のうち、上の仮想ページ管理テーブル８５０は、実ページを割り当てられている仮想ページを示し、実ページポインタが実ページを指している。下の仮想ページ管理テーブル８５０は、実ページを割り当てられていない仮想ページを示し、実ページポインタがＮＵＬＬを示している。
【００７２】
図２０は、実ページ管理テーブル８６０を示す。
【００７３】
実ページ管理テーブル８６０は、実ページ毎に作成される。一つの実ページに対応する実ページ管理テーブル８６０は、ＲＡＩＤグループ番号（＃）と、実ページ先頭アドレスと、空きページポインタとを含む。ＲＡＩＤグループ番号は、当該実ページを含むＲＡＩＤグループを示す識別子である。実ページ先頭アドレスは、当該ＲＡＩＤグループにおける当該実ページの先頭アドレスを示す。空きページポインタは、当該実ページが空き実ページである場合に次の空き実ページの実ページ管理テーブル８６０を指す。
【００７４】
図２１は、空き実ページ管理テーブル８７０を示す。
【００７５】
空き実ページ管理テーブル８７０は、空きページ管理ポインタを含む。この空きページ管理ポインタは、空きページの実ページ管理テーブル８６０を指す。連続する空きページの最後の空きページの実ページ管理テーブル８６０内の空きページポインタは、空きページ管理ポインタを指す。
【００７６】
図２２は、物理デバイス内の記憶領域の構成を示す。
【００７７】
圧縮記憶デバイス６００ａは、圧縮管理テーブル９２０をＲＡＭ６１１またはＦＭ６２０に格納する。圧縮記憶デバイス６００ａのＳＤコントローラ６１０は、記憶領域のブロック単位の論理アドレスをＳＴコントローラ４００へ提供し、圧縮管理テーブル９２０を用いて論理アドレスに対しブロック単位で実アドレスを割り当てる。ここで示すブロック単位はブロックストレージのデータ単位を示す。圧縮記憶デバイス６００ａは、非圧縮データ換算で複数ブロックをまとめた単位（例えばブロックサイズ０．５ｋＢを複数個まとめた８ｋＢ、以降圧縮単位）で圧縮可否を判断し、圧縮する場合にはこの単位で非圧縮データを圧縮単位毎に圧縮する。非圧縮記憶デバイスは、実アドレス管理テーブルをＲＡＭに格納する。非圧縮記憶デバイスのＳＤコントローラ６１０は、ブロック毎の論理アドレスをＳＴコントローラ４００へ提供し、実アドレス管理テーブルを用いて論理アドレスに対しブロックの実アドレスを割り当てる。
【００７８】
図２３は、圧縮管理テーブル９２０を示す。
【００７９】
圧縮管理テーブル９２０は、記憶デバイス６００毎に、記憶デバイス６００内のＲＡＭ６１１またはＦＭ６２０に格納される。記憶デバイス６００がＨＤＤの場合、圧縮管理テーブル９２０はＨＤＤに格納される。別の方法として複数の記憶デバイス６００の圧縮管理テーブル９２０をまとめて、ストレージコントローラのＳＴメモリ４１０、または、ストレージコントローラのフラッシュメモリに格納して管理しても良い。
【００８０】
圧縮管理テーブル９２０は、圧縮記憶デバイス６００ａ内の圧縮単位毎のエントリを含む。一つの圧縮単位に対応するエントリは、論理アドレスと、実アドレスと、圧縮フラグと、圧縮後ブロック数とを含む。論理アドレスは、当該圧縮データの先頭の論理アドレスを示す。実アドレスは、当該圧縮単位の先頭の実アドレスを示す。圧縮フラグは、当該圧縮単位のデータが圧縮されるか否かを示す。圧縮後ブロック数は、当該非圧縮データの圧縮後のデータについてのブロック数を示す。ここで、圧縮単位内のブロックがすべて非圧縮データだった場合の圧縮後ブロック数を最大ブロック数とし、圧縮単位が圧縮ブロックを含む場合、圧縮ブロック数は最大ブロック数より小さい。即ち、圧縮単位内のブロックがすべて非圧縮ブロックである場合、圧縮後ブロック数は一定であり、圧縮単位が圧縮ブロックを含む場合、圧縮後ブロック数は可変である。なお、圧縮後ブロック数が最大ブロック数と同じまたは多い場合、非圧縮データを圧縮データの代わりに格納するため、圧縮後ブロック数が最大ブロック数と同じである場合、非圧縮データが格納されることとし、当該圧縮単位のデータが圧縮されているか否かを示す圧縮フラグはなくても良い。図２３では８ＫＢの圧縮単位が８ＫＢの圧縮データとなっている場合を示しており、このときは圧縮フラグで該当の８ＫＢが圧縮データか否かを判別するようにしている。
【００８１】
図２４は、ＳＴコントローラ４００が圧縮記憶デバイス６００ａから圧縮情報を取得する第一の動作を示す。
【００８２】
圧縮情報は、圧縮記憶デバイス６００ａに格納されている対象データの圧縮に関する情報である。ＳＴコントローラ４００は、対象データの圧縮情報を取得するための圧縮情報リクエストを圧縮記憶デバイス６００ａへ発行する。圧縮記憶デバイス６００ａは、圧縮情報リクエストに応じて対象データの圧縮情報を圧縮管理テーブル９２０から読み出し、圧縮情報を示す圧縮情報レスポンスをＳＴコントローラ４００へ発行する。圧縮情報は、対象データの圧縮の状態を示す。圧縮情報リクエストは、圧縮情報を要求することを示すコマンドコードと、当該リクエストの識別子と、圧縮記憶デバイス６００ａ内での対象データの論理アドレスであるアドレスと、対象データのサイズであるリクエストサイズとを含む。圧縮情報レスポンスは、対応する圧縮情報リクエストの識別子と、対象データを含む圧縮単位群の圧縮後のサイズである圧縮後全体サイズと、当該対象データを含む圧縮単位群の先頭の圧縮単位を伸張した際に、その伸張データの先頭から対象データの先頭までのオフセットである先頭オフセット位置とを含む。更に圧縮情報レスポンスは、当該圧縮単位群内の圧縮単位毎に、当該圧縮単位の圧縮の有無を示す圧縮有無フラグと、圧縮後の当該圧縮単位内のブロック数を示す圧縮後ブロック数とを含む。なお、ＳＴコントローラ４００が、圧縮後ブロック数が圧縮前ブロック数と同じ場合は非圧縮と判定し、圧縮後ブロック数と圧縮前ブロック数が異なる場合は圧縮と判定する場合、圧縮有無フラグを不要としても良い。
【００８３】
この動作によれば、ＳＴコントローラ４００は、圧縮記憶デバイス６００ａやＳＳ接続機構２００等、ＳＴコントローラ４００以外により圧縮されたデータの圧縮情報を取得することができる。また、ＳＴコントローラ４００が、ＳＳシステム内の他の部位へ圧縮情報を送ることにより、圧縮を行った部位以外の部位であっても、伸張に必要な圧縮情報を取得することができる。また、ＳＴコントローラ４００は、複数の圧縮記憶デバイス６００ａに分散されて格納されている圧縮データを論理アドレス順に夫々読み出すと共に、夫々の圧縮記憶デバイス６００ａから圧縮情報を取得することにより、複数の圧縮記憶デバイス６００ａに分散された格納されている圧縮データを連続してＳＴメモリ４１０へ保存するように並びかえることができる。なお、ＳＴコントローラ４００は、並び替えにはＳＧＬをつかい、論理的に連続させ、物理的に連続していなくても良い。これにより、ＳＳ接続機構２００は、ＳＴメモリ４１０から圧縮データをシーケンシャルに読み出すことができる。
【００８４】
図２５は、ＳＴコントローラ４００が圧縮記憶デバイス６００ａから圧縮データを取得する動作を示す。
【００８５】
圧縮記憶デバイス６００ａは、ＳＴコントローラ４００から受信したデータを圧縮して格納した場合、通常のリードリクエストに応じて、圧縮データを伸張して非圧縮データを生成し、非圧縮データをＳＴコントローラ４００へ送信することができる。
【００８６】
ここでは、ＳＴコントローラ４００は、圧縮記憶デバイス６００ａに格納されている対象データを圧縮データのままで取得するための、圧縮データリードリクエストを圧縮記憶デバイス６００ａへ発行する場合について説明する。圧縮記憶デバイス６００ａは、圧縮データリードリクエストに応じて圧縮データを読み出し、対象データの圧縮データを送信し、その読み出しの結果を示す圧縮データリードレスポンスをＳＴコントローラ４００へ発行する。圧縮データリードリクエストは、圧縮データの圧縮したままのリードを指示するコマンドコードと、当該リクエストの識別子と、圧縮記憶デバイス６００ａ内での対象データの論理アドレスであるアドレスと、対象データのサイズであるリクエストサイズとを含む。なお、対象データのサイズは前述の圧縮情報リードで取得した値を利用する。圧縮データリードレスポンスは、対応する圧縮データリードリクエストの識別子と、リードの処理に関するステータスと、ＳＴコントローラ４００へ転送される対象データのサイズを示す転送サイズとを含む。
【００８７】
この動作によれば、ＳＴコントローラ４００は、対象データの圧縮データを、圧縮記憶デバイス６００ａで伸張させずに取得することができる。これにより、圧縮記憶デバイス６００ａ及びＳＴコントローラ４００の間のバスの帯域と、ＳＴコントローラ４００内の帯域の使用量を削減することができる。
【００８８】
圧縮情報の取得は、前述の圧縮情報リクエストを利用する方法以外に、１回のリクエストで圧縮情報と圧縮データをＳＴコントローラ４００が取得する方法として、図２６に示された第二の動作のように、圧縮データリード時に圧縮データの先頭または末尾に圧縮情報を付与して送る方法、または、図２７に示された第三の動作のように、圧縮データリードのレスポンスに圧縮情報を付加する方法としても良い。この場合は、圧縮情報リードを実施せずに、圧縮データリードのみを実施し、圧縮データリードリクエストの対象データサイズには、圧縮前のデータサイズを設定する。このリクエストに応じた圧縮リードレスポンスの対象データのサイズは、圧縮後のデータサイズを設定する。ＳＴコントローラ４００は、圧縮リードレスポンスを受けたとき、圧縮データと一緒に読み出された圧縮情報から、圧縮後データサイズを取得し、圧縮リードレスポンスの転送済みサイズと比較することで、ＳＴコントローラ４００に転送サイズのアンダーフローエラーが発生した場合も、転送済みのデータが圧縮後データサイズ分転送されていることを判定し、正常転送と判定する。なお、この後、伸張ＤＭＡ転送を実施するが、その中の保障コードチェックにより、最終的な転送データの整合性を判断する。圧縮データと圧縮情報を同時に読み出して、圧縮リードレスポンスに圧縮情報を設定しないことで、圧縮リードレスポンスはオートレスポンスで実施できる。また、圧縮情報取得と圧縮データ取得のリクエストを1回にまとめることで、リクエスト数増加による性能オーバーヘッドを低減する。
【００８９】
図２８は、伸張ＤＭＡ処理におけるＳＴコントローラ４００とＳＳ接続機構２００の間の動作を示す。
【００９０】
ＳＴコントローラ４００は、ＳＳ接続機構２００に対し、伸張ＤＭＡ処理を指示する伸張ＤＭＡリクエストを発行することができる。伸張ＤＭＡ処理は、指定されたメモリから対象データの圧縮データを読み出し、当該圧縮データを伸張して非圧縮データを生成し、指定されたメモリへ当該非圧縮データを書き込む処理である。例えば、伸張ＤＭＡ処理は、ＳＴコントローラ４００内のＳＴメモリ４１０から対象データの圧縮データを読み出し、当該圧縮データを伸張して非圧縮データを生成し、サーバ１００内のＳＶメモリ１１０へ当該非圧縮データを書き込む。ＳＳ接続機構２００は、伸張ＤＭＡリクエストに基づいて、ＳＴメモリ４１０内の、圧縮データに関する情報を示すＳＧＬ（Scatter／Gather  List）である圧縮情報ＳＧＬを読み出す。更にＳＳ接続機構２００は、ＳＴメモリ４１０内の圧縮情報ＳＧＬで示された記憶領域から圧縮データを読み出す。更にＳＳ接続機構２００は、圧縮データを伸張し、非圧縮データをＳＶメモリ１１０へ書き込んだ後、伸張ＤＭＡレスポンスをＳＴコントローラ４００へ発行する。圧縮情報ＳＧＬは、ストレージシステム３００内に分散して格納されている複数の圧縮データがＳＴメモリ４１０に読み出された場合に、ＳＴメモリ４１０内の複数の圧縮データのアドレスやサイズを順に示すリストである。例えば、圧縮データがＲＡＩＤグループに格納されている場合、圧縮データは、ＳＴメモリ４１０内に分散して格納される。ＳＳ接続機構２００は、圧縮情報ＳＧＬを辿ることにより、圧縮データをシーケンシャルに読み出し、順に伸張してＳＶメモリ１１０へシーケンシャルに書き込むことができる。これにより、分散して格納された各部を伸張して転送する場合に比べて、性能を向上させることができる。
【００９１】
伸張ＤＭＡリクエストは、伸張ＤＭＡ処理を示すコマンドコードと、伸張ＤＭＡリクエストの基となるサーバ１００からのリードリクエストを示す識別子と、対象データの圧縮等のパラメータと、対象データの非圧縮データに付加される保障コードを示す非圧縮保障コード情報と、対象データの圧縮データに付加される保障コードを示す圧縮保障コード情報と、対象データの非圧縮データの長さを示す非圧縮転送長と、対象データの非圧縮データの長さを示す非圧縮転送長と、ＳＴメモリ４１０内の圧縮情報ＳＧＬのアドレスであるＳＧＬアドレスとを含む。なお、ＳＧＬアドレスの代わりにデータのアドレスを直接指定しても良いし、データのアドレスとＳＧＬアドレスの両方を設定しても良い。データのアドレスのみ設定されている場合は、圧縮情報ＳＧＬの取得は省略される。
【００９２】
保障コードは、リードされたデータと当該データが格納されているアドレスとからＣＲＣ（Cyclic  Redundancy  Check）等の保障コード演算により算出される値の期待値である。リード時、非圧縮データに付加された保障コードは、圧縮されているため、ＳＴコントローラ４００によりチェックされることができない。そこで、ＳＴコントローラ４００は、保障コードのチェックに必要な保障コード情報を伸張ＤＭＡリクエスト等に含めて、ＳＳ接続機構２００へ送信する。ＳＴコントローラ４００により管理されているアドレスは、サーバ１００により指定されるアドレスと違うことがあるため、保障コード情報に含められ、ＳＴコントローラ４００からＳＳ接続機構２００へ送信される。例えば、ＳＴコントローラ４００がシンプロビジョニングを行っている場合、ストレージプール内のアドレスが保障コード情報に含まれる。これにより、ＳＳ接続機構２００は、圧縮データ及び非圧縮データに誤りがあるか否かと、圧縮データが指定されたアドレスから読み出されているか否かとをチェックすることができる。また、圧縮データに保障コードが付加されている場合、処理をハードウェアにオフロードし、ＳＴプロセッサ４２０の負荷を低減することを考え、ＳＴプロセッサ４２０は、ＳＳ接続機構２００へ期待値を伸張ＤＭＡリクエストで渡す。
【００９３】
圧縮データが記憶デバイス専用コードを含む場合、ＳＳ接続機構２００は、記憶デバイス専用コードの位置を示す情報に基づいて、圧縮データから記憶デバイス専用コードを除去する。記憶デバイス専用コードの位置を示す情報は、伸張ＤＭＡリクエスト内のパラメータに含まれても良いし、ＳＳ接続機構２００内のレジスタに予め格納されていても良い。これにより、圧縮記憶デバイス６００ａがデータを圧縮して記憶デバイス専用コードを付加した場合でも、ＳＳ接続機構２００は、圧縮記憶デバイス６００ａから読み出された圧縮データから記憶デバイス専用コードを除去して伸張することができる。なお、記憶デバイス専用コードは、圧縮データと伸張後データ両方についている可能性があり、両方に付加されている場合は、ＳＳ接続機構２００が夫々両方の除去を行う。
【００９４】
伸張ＤＭＡレスポンスは、伸張ＤＭＡレスポンスであることを示すコマンドコードと、対応する伸張ＤＭＡリクエストの識別子と、伸張ＤＭＡ処理に関するステータスと、サーバ１００へ転送された非圧縮データのサイズを示す非圧縮転送サイズと、伸張ＤＭＡ処理におけるエラーを示すエラーレポートとを含む。この伸張ＤＭＡレスポンスによれば、ＳＴコントローラ４００は、対象データの非圧縮データを知ることができる。
【００９５】
更に、ＳＴコントローラ４００は、ＳＳ接続機構２００に対し、圧縮ＤＭＡ処理を指示する圧縮ＤＭＡリクエストを発行することができる。圧縮ＤＭＡ処理は、指定されたメモリから対象データの非圧縮データを読み出し、当該非圧縮データを圧縮して圧縮データを生成し、指定されたメモリへ当該圧縮データを書き込む処理である。例えば、圧縮ＤＭＡ処理は、サーバ１００内のＳＶメモリ１１０から対象データの非圧縮データを読み出し、当該非圧縮データを圧縮して圧縮データを生成し、ＳＴコントローラ４００内のＳＴメモリ４１０へ当該圧縮データを書き込む。
【００９６】
図２９は、圧縮情報ＳＧＬを示す。
【００９７】
ＳＴプロセッサ４２０は、ＳＴメモリ４１０内に対象データを格納する記憶領域を確保した場合、その記憶領域を示す圧縮情報ＳＧＬを生成し、ＳＴメモリ４１０内に保存する。ＳＴメモリ４１０内のデータを格納する領域は複数個所に分割されている場合もあり、圧縮情報ＳＧＬはそれら複数のアドレス毎に夫々情報を持っても良い。圧縮情報ＳＧＬは、当該圧縮情報ＳＧＬの識別子と、当該圧縮情報ＳＧＬに関する情報として、当該圧縮情報ＳＧＬ内に何個の有効なアドレスがあるか、次のＳＧＬがなく終端のＳＧＬであるか、次のＳＧＬがある場合は、次ＳＧＬアドレスが有効であることなどを示すＳＧＬ情報とを含む。圧縮情報ＳＧＬは更に、対象データ内の転送データ（ｉ）毎の転送データ情報（ｉ）を含む（ｉは０、１、…）。転送データ情報（ｉ）は、ＳＴメモリ４１０内での当該圧縮情報（ｉ）のアドレス（ｉ）と、そのアドレス（ｉ）に対応する転送データ（ｉ）の圧縮データサイズを示す転送サイズ（ｉ）と、当該アドレス（ｉ）に対応する転送データ（ｉ）を構成する圧縮単位毎の圧縮有無を示す圧縮有無フラグ（ｉ）と、転送データ（ｉ）内の圧縮単位毎に圧縮により何ブロックになっているかを示す圧縮後ブロック数（ｉ）とを含む。更に当該圧縮情報ＳＧＬは、前述のＳＧＬ情報で次の圧縮情報ＳＧＬが連続していると設定されている場合には、次の圧縮情報ＳＧＬのアドレスである次ＳＧＬアドレスを含む。また、圧縮情報ＳＧＬは、圧縮情報ＳＧＬ内の各フィールドをチェックするためのＳＧＬフィールドチェックコードを含む。なお、圧縮単位毎に圧縮の有無があり、圧縮できなかった場合は、圧縮単位と同じブロック数を格納し、圧縮できた場合は、圧縮単位より少ないブロック数を格納するとして、圧縮有無フラグを省略することとしても良い。また、転送サイズは圧縮後ブロック数から計算するとして、省略しても良い。さらに、ここに示した圧縮情報ＳＧＬは一例であり、前述の圧縮情報の取得により取得される先頭オフセット位置など他の圧縮に関する情報を搭載しても良い。
【００９８】
これにより、リード処理において、ＳＴプロセッサ４２０が、圧縮記憶デバイス６００ａからの対象データを格納するために、ＳＴメモリ４１０内に連続する記憶領域を確保できない場合であっても、ＳＳ接続機構２００が圧縮情報ＳＧＬを辿ることにより、ＳＴメモリ４１０から対象データをシーケンシャルに読み出すことができる。
【００９９】
なお、伸張ＤＭＡリクエストが、ＳＧＬアドレスの代わりに圧縮情報ＳＧＬの内容を含んでも良い。また、伸張ＤＭＡリクエストのサイズを拡大、または連結させ、多くの情報を載せるようにし、ＳＧＬを使わずに圧縮情報ＳＧＬの内容を伸張ＤＭＡリクエストに載せても良い。また、伸張ＤＭＡリクエストとＳＧＬの双方に分けて圧縮情報を搭載しても良い。
【０１００】
また、ＳＶプロセッサ１２０は、ＳＶメモリ１１０内に対象データを格納する記憶領域を確保した場合、その記憶領域を示すＳＧＬであるサーバＳＧＬを生成し、ＳＶメモリ１１０内に保存する。サーバＳＧＬは、当該サーバＳＧＬの識別子と、当該ＳＧＬ内の有効なアドレス数、次ＳＧＬがあるかどうかのフラグ、及び当該ＳＧＬが終端であるかのフラグなどで構成されるＳＧＬ情報と、サーバ１００側の格納先アドレスと、転送サイズとで構成される。格納先アドレスと転送サイズは、圧縮情報ＳＧＬと同様に複数格納されていても良い。また、次ＳＧＬアドレスやＳＧＬフィールドのチェックコードを含んでも良い。さらに、他の転送先に関する情報を含んでも良い。
【０１０１】
ライト処理において、ＳＶプロセッサ１２０が、対象データを格納するために、ＳＶメモリ１１０内に連続する記憶領域を確保できない場合であっても、ＳＳ接続機構２００がサーバＳＧＬを辿ることにより、ＳＶメモリ１１０から対象データをシーケンシャルに読み出すことができる。
【０１０２】
図３０は、データフォーマットを示す。
【０１０３】
この図は、圧縮データフォーマットと非圧縮データフォーマットとの関係を示す。圧縮データは、この形式で圧縮記憶デバイス６００ａに格納されている。例えば、圧縮データは、この形式のまま、圧縮記憶デバイス６００ａからＳＴコントローラ４００へ読み出され、ＳＴコントローラ４００からＳＳ接続機構２００へ読み出される。ＳＳ接続機構２００は、圧縮データを伸張することにより、非圧縮データを生成する。圧縮データフォーマットとして、第一圧縮データフォーマット、第二圧縮データフォーマット、第三圧縮データフォーマットがあり、非圧縮データフォーマットとして、第一非圧縮データフォーマットや、第二非圧縮データフォーマット等がある。なお、圧縮データフォーマットと非圧縮データフォーマットの組み合わせは、表記の対応関係意外の組み合わせとしても良い。また、ここに示しているフォーマットは一例で、圧縮データフォーマットと非圧縮データフォーマットとの対応関係が定められていれば、他のフォーマットとしても良い。
【０１０４】
第一非圧縮データフォーマットにおいて、圧縮データは、複数の圧縮データブロックを含む。圧縮データブロックは、圧縮単位である。各圧縮データブロックの後には、その圧縮データブロックの保障コードが付加されている。圧縮データブロックが伸張されると、複数のデータブロックになる。データブロックは、ブロックである。各データブロックの後には、そのデータブロックの保障コードが付加されている。
【０１０５】
圧縮記憶デバイス６００ａが、ＳＴコントローラ４００からのデータを圧縮して格納する場合、圧縮データを複数のＦＭ６２０に分散して書き込むため、圧縮記憶デバイス６００ａに固有のＣＲＣやＦＭ６２０内のアドレスを示す記憶デバイス専用コードを付加する場合がある。この場合、第二の非圧縮データフォーマットが用いられる。第二の非圧縮データフォーマットにおいて、各データブロックの後には、そのデータブロックの保障コードが付加されており、その保障コードの後には、記憶デバイス専用コード（専用コード）が付加されている。なお、ここで示す専用コードとは、記憶デバイス６００自身が専用に利用するために付加した独自のコードであり、例えば、記憶デバイス６００が生成付加した保障コードなどが該当する。ＳＳ接続機構２００が圧縮データを伸張する場合、非圧縮データから記憶デバイス専用コードを除去してサーバ１００へ転送する。また、第三の非圧縮データフォーマット及び第三の非圧縮データフォーマットのように、圧縮データに関しても、記憶デバイス専用コードが付加される場合があり、この場合も同様にＳＳ接続機構２００が圧縮データを伸張する前に、記憶デバイス専用コードを除去してから伸張処理を実施する。
【０１０６】
以下、サーバ１００が圧縮記憶デバイス６００ａ内の圧縮データを対象データとして、対象データを読み出すリード処理について説明する。本実施例では、ＤＭＡ処理の中で、ＳＳ接続機構が伸張処理を担うことで、サーバストレージ間のメモリ間での直接データ転送処理の一貫でのデータの伸張処理を可能にする。
【０１０７】
本実施例においては、サーバ１００とストレージシステム３００の間にＳＳ接続機構２００を設けることで、サーバ１００側とストレージシステム３００側の処理の増加を低減し、圧縮データの伸張処理を実現する。この構成により、メモリ間でデータを直接やり取りする中で処理データ量を低減できる。よって、サーバストレージ間の帯域の有効利用を図ることが可能となる。
【０１０８】
図３１は、ＳＳシステムのリード処理の中の第一処理を示し、図３２は、ＳＳシステムのリード処理の中の第一処理に続く第二処理を示す。これらの図は、サーバ１００内のＳＶプロセッサ１２０と、ＳＳ接続機構２００内のＩＦプロセッサ２１０と、ＳＴコントローラ４００内のＳＴプロセッサ４２０と、圧縮記憶デバイス６００ａ内のＳＤプロセッサ６１２との動作を示す。ここでは、対象データの伸張処理がＳＳ接続機構２００により行われる場合のリード処理について説明する。
【０１０９】
Ｓ１１１０においてサーバ１００内のＳＶプロセッサ１２０は、ＳＶメモリ１１０内に、リードしたデータを格納する記憶領域として、リードサイズ分のＳＶメモリ１１０領域を準備する。ここでＳＶプロセッサ１２０は、ＳＶ領域を示すＳＧＬであるサーバＳＧＬを生成してＳＶメモリ１１０へ保存する。Ｓ１１２０においてＳＶプロセッサ１２０は、リードリクエストを生成してＳＳ接続機構２００へ発行する。リードリクエストは、対象データを格納する記憶領域を示す、仮想ボリュームと、その仮想ボリューム内の仮想ページとを示す。
【０１１０】
Ｓ１１３０においてＳＳ接続機構２００内のＩＦプロセッサ２１０は、ＳＶプロセッサ１２０からキューイングされたリードリクエストを解析するリードリクエスト処理を行う。Ｓ１１４０においてＩＦプロセッサ２１０は、解析結果に基づくリードリクエストを生成してＳＴコントローラ４００へ発行する。なお、ＩＦプロセッサ２１０からＳＴコントローラ４００へのリードリクエストを、ＳＶプロセッサ１２０からＩＦプロセッサ２１０へリードリクエストと区別するために、リードコマンドと呼ぶことがある。発行先は、特定された対象データを格納する記憶領域のオーナ権を有するＳＴコントローラ４００及びＳＴプロセッサである。Ｓ１１５０においてＩＦプロセッサ２１０は、サーバＳＧＬを取得するためのサーバＳＧＬ処理を行う。Ｓ１１６０においてＩＦプロセッサ２１０は、サーバ１００からサーバＳＧＬを受信する。Ｓ１１７０においてＩＦプロセッサ２１０は、受信されたサーバＳＧＬを内部メモリに格納する。なお、リードリクエストにＳＧＬに搭載するアドレス情報や長さ情報を載せてもよく、リードリクエストにのりきらない場合に、残りの情報をＳＧＬの形としても良い。
【０１１１】
Ｓ１２１０においてＳＴコントローラ４００内のＳＴプロセッサ４２０は、ＩＦプロセッサ２１０からキューイングされたリードリクエストを解析するリードリクエスト処理を行う。ここでＳＴプロセッサ４２０は、仮想ボリューム管理テーブル８１０とストレージプール管理テーブル８２０とＲＡＩＤグループ管理テーブル８３０と物理デバイス管理テーブル８４０と仮想ページ管理テーブル８５０と実ページ管理テーブル８６０とに基づいて、リードリクエストから、対象データを格納している圧縮記憶デバイス６００ａと、その圧縮記憶デバイス６００ａ内の記憶領域の論理アドレスとを特定する。Ｓ１２２０においてＳＴプロセッサ４２０は、伸張ＤＭＡ処理を行うか否かを判定する（圧縮判定）。対象データが予め定められた判定基準を満たすと判定された場合、Ｓ１２３０においてＳＴプロセッサ４２０は、対象データの圧縮情報を要求する圧縮情報リクエストを圧縮記憶デバイス６００ａへ発行する。圧縮判定には、ＳＴコントローラ４００内のキャッシュに対象データが記憶されているかの判定も含んでいる。キャッシュ判定については後述する。なお、圧縮判定（Ｓ１２２０）の後に処理をＳ１４２０へ移行させ（図中の点線の矢印）、非圧縮データのサイズでデータ格納領域確保を行い、圧縮データリードリクエストのみで圧縮情報と圧縮データの両方を取得しても良い。この場合、圧縮記憶デバイス６００ａのＳＤプロセッサ６１２は、圧縮情報取得などの処理（Ｓ１３２０〜Ｓ１３６０、図中の点線の枠内）は、圧縮リードリクエストを受けてから（Ｓ１４３０の後に）実施する。なお、圧縮データリードリクエストの要求を想定して、圧縮記憶デバイス６００ａが先読み処理を実施していても良い。
【０１１２】
Ｓ１３１０において圧縮記憶デバイス６００ａ内のＳＤプロセッサ６１２は、ＳＴプロセッサ４２０からキューイングされた圧縮情報リクエストを解析する圧縮情報リクエスト処理を行う。Ｓ１３２０においてＳＤプロセッサ６１２は、ＲＡＭ内の圧縮管理テーブル９２０から対象データの圧縮情報を取得する。Ｓ１３３０においてＳＤプロセッサ６１２は、対象データの圧縮データのサイズである圧縮後全体サイズを計算する。Ｓ１３４０においてＳＤプロセッサ６１２は、対象データの圧縮情報を含む圧縮情報レスポンスをＳＴプロセッサ４２０へ発行する。Ｓ１３５０においてＳＤプロセッサ６１２は、ＦＭ６２０から対象データの圧縮データを読み出し、圧縮データをＲＡＭ内の記憶領域であるＳＤ領域へ保存する。Ｓ１３６０においてＳＤプロセッサ６１２は、圧縮情報に基づいてＲＡＭ内の圧縮データを並び替える。
【０１１３】
Ｓ１４１０においてＳＴプロセッサ４２０は、ＳＤプロセッサ６１２からキューイングされた圧縮情報レスポンスを解析する圧縮情報レスポンス処理を行う。Ｓ１４２０においてＳＴプロセッサ４２０は、ＳＴメモリ４１０内に、圧縮情報レスポンスに基づいて圧縮データを格納するためのＳＴメモリ４１０内の記憶領域であるＳＴ領域を確保する（データ格納領域確保）。Ｓ１４３０においてＳＴプロセッサ４２０は、圧縮データリードリクエストをＳＤプロセッサ６１２へ発行する。Ｓ１４４０においてＳＴプロセッサ４２０は、ＳＴ領域を示す圧縮情報ＳＧＬを生成しＳＴメモリ４１０へ保存する。
【０１１４】
Ｓ１５１０においてＳＤプロセッサ６１２は、ＳＴプロセッサ４２０からキューイングされた圧縮データリードリクエストに基づいてＲＡＭから圧縮データを読み出し、処理をＳ１５２０（図中のＡ）へ移行させる。Ｓ１５２０においてＳＤプロセッサ６１２は、読み出された圧縮データを圧縮データのままＳＴコントローラ４００のＳＴ領域へ転送する。Ｓ１５３０においてＳＤプロセッサ６１２は、圧縮データリードリクエストの結果を示す圧縮データリードレスポンスをＳＴプロセッサ４２０へ発行する。Ｓ１５４０においてＳＤプロセッサ６１２は、ＲＡＭ内のＳＤ領域を解放し、リード処理を完了する。なお、ＲＡＭ内のＳＤ領域の開放は、再送を考慮し、伸張ＤＭＡレスポンスが戻ってきてから、ＳＴプロセッサ４２０の指示で開放する。または、タイマをはって、所定時間経過後に開放してもよい。
【０１１５】
もし、ＳＴプロセッサ４２０は、圧縮判定Ｓ１２２０で伸張ＤＭＡを実施しないと判断した場合は、通常のリード転送を実施することとし、Ｓ１４２０で非圧縮のデータサイズでデータ格納領域を確保し、Ｓ１４３０で通常リードリクエストを発行する。その後、ＳＴプロセッサ４２０は、ＳＴメモリ４１０に読み出されたデータに対して、Ｓ１６２０で通常リード転送のＤＭＡリクエストを実施する。この場合、圧縮情報リクエストＳ１２３０、圧縮情報リクエスト処理Ｓ１３１０、圧縮後全体サイズ計算Ｓ１３３０、圧縮情報レスポンスＳ１３４０、圧縮情報レスポンス処理Ｓ１４１０は行われない。もし、伸張ＤＭＡ転送しないと判断したデータが、記憶デバイス６００中で圧縮されたデータであった場合は、圧縮データリードリクエストＳ１４３０が圧縮したまま読み出す旨の指示を含まない通常のリードリクエストとなり、それを受けた記憶デバイス６００が、圧縮情報取得Ｓ１３２０、ＦＭから圧縮データの読み出しとＤＲＡＭ格納Ｓ１３５０、圧縮データ並び替えＳ１３６０を記憶デバイス６００内で実施し、記憶デバイス６００の伸張機能（圧縮・伸張デバイス６１４）で伸張したデータを圧縮リード処理Ｓ１５１０の代わりに通常リード処理を実施し、圧縮データ格納Ｓ１５２０の代わりに通常データ格納し、圧縮リードレスポンスＳ１５３０の代わりに通常リードレスポンスをＳＴプロセッサ４２０に返す。
【０１１６】
なお、記憶デバイス６００が圧縮機能を持たずに、記憶デバイス６００外で圧縮されたデータが記憶デバイス６００に格納されている場合について説明する。例としては、圧縮機能を持たない記憶デバイス６００であるＨＤＤに圧縮データが格納されている場合などがこれに該当する。なお、ストレージシステム３００は、予め接続される記憶デバイス毎に圧縮伸張機能の有無を把握している。また、把握できていない場合は、ストレージシステム３００の管理装置から設定、または、ＳＴプロセッサ４２０が記憶デバイスへアクセスし、圧縮伸張機能の有無を確認できるものとする。ＳＴプロセッサ４２０は、記憶デバイス６００に圧縮情報リクエスト（Ｓ１３２０）などを行わずに、ＳＴプロセッサ４２０が圧縮判定（Ｓ１２２０）の後に圧縮情報を格納している記憶領域から圧縮情報を読み出して、データ格納領域確保（Ｓ１４２０）に処理を進める（図中の点線の矢印）。圧縮情報の格納場所としてはＳＴメモリ４１０または、ＳＴコントローラ４００に搭載したフラッシュメモリまたは、記憶デバイス６００等が考えられる。ＳＴプロセッサ４２０は、圧縮情報を取得した後、圧縮情報ＳＧＬの生成を行い（Ｓ１４４０）、圧縮データをＳＴコントローラ４００側に読み出した（Ｓ１４３０〜Ｓ１６１０）後に、ＳＳ接続機構２００に伸張ＤＭＡ転送リクエスト（Ｓ１６２０）を発行する。なお、伸張ＤＭＡを行わない場合、ＳＴプロセッサ４２０は、記憶デバイス６００から読み出した（Ｓ１４３０〜Ｓ１６１０）後に、読み出したデータが圧縮データである場合は、ＳＴプロセッサ４２０、または、ＳＴコントローラ４００に搭載した伸張ハードウェアを利用して、圧縮データを伸張してから、Ｓ１６２０の伸張ＤＭＡリクエストの代わりに、通常の非圧縮データのＤＭＡ転送でデータを転送する。もし、読み出したデータが非圧縮データである場合は、そのままＳ１６２０の伸張ＤＭＡリクエストの代わりに、通常の非圧縮データのＤＭＡ転送でデータを転送する。なお、読み出したデータが非圧縮データである場合は、記憶デバイス６００よりＳＴコントローラ４００へ読み出すときに、記憶デバイス６００内で圧縮データを伸張している場合と、記憶デバイス６００内でデータが圧縮されていない場合がある。
【０１１７】
なお、ＳＴプロセッサ４２０は、伸張ハードウェアとして、ＳＳ接続機構２００内の伸張ＤＭＡを使って、一旦圧縮データをＳＴコントローラ４００からＳＳ接続機構２００に読み出して、伸張し、ＳＴコントローラ４００に書き戻した後に、Ｓ１６２０の伸張ＤＭＡリクエストの代わりに通常ＤＭＡリクエストを発行して転送しても良い。ＳＴプロセッサ４２０は、通常ＤＭＡリクエストの前には、ＳＴメモリ４１０領域からＳＧＬの生成を行い、非圧縮データをＳＴコントローラ４００側に読み出した後に、ＳＳ接続機構２００にＤＭＡ転送リクエストを発行する。
【０１１８】
Ｓ１６１０においてＳＴプロセッサ４２０は、ＳＤプロセッサ６１２からキューイングされた圧縮データリードレスポンスを解析する圧縮データリードレスポンス処理を行う。Ｓ１６２０においてＳＴプロセッサ４２０は、伸張ＤＭＡリクエストをＩＦプロセッサ２１０へ発行する。このとき、ＤＭＡリクエストまたは、圧縮情報ＳＧＬに圧縮前のデータ長と圧縮後のデータサイズを含めることで、ＳＳ接続機構２００がＳＴコントローラ４００から圧縮後のデータサイズ分データを読み出し、サーバ１００からの要求サイズ分、伸張ＤＭＡ転送を完了できたかを判断できる。
【０１１９】
Ｓ１７１０においてＩＦプロセッサ２１０は、ＳＴプロセッサ４２０からキューイングされた伸張ＤＭＡリクエストを解析する伸張ＤＭＡリクエスト処理を行う。Ｓ１７２０においてＩＦプロセッサ２１０は、必要に応じてＳＴメモリ４１０内の圧縮情報ＳＧＬを取得する。Ｓ１７３０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０の伸張ＤＭＡ処理を起動する。Ｓ１７４０においてＤＭＡコントローラ２２０は、ＩＦプロセッサ２１０からの指示に基づいて伸張ＤＭＡ処理を行うことにより、ＳＴコントローラ４００内のＳＴ領域に格納されている圧縮データを読み出して伸張し、得られる非圧縮データをサーバ１００内のＳＶ領域へ書き込む。Ｓ１７５０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０から伸張ＤＭＡ処理完了の通知を受ける。Ｓ１７６０においてＩＦプロセッサ２１０は、正常転送終了の場合はオートレスポンスを用いてリードレスポンスをＳＶプロセッサ１２０へ発行する。
【０１２０】
Ｓ１８１０においてＳＶプロセッサ１２０は、ＩＦプロセッサ２１０からキューイングされたリードレスポンスに応じてリード処理を完了する。
【０１２１】
Ｓ１７７０においてＩＦプロセッサ２１０は、伸張ＤＭＡリクエストに対する伸張ＤＭＡレスポンスをＳＴプロセッサ４２０へ発行する。Ｓ１９１０においてＳＴプロセッサ４２０は、ＩＦプロセッサ２１０からキューイングされた伸張ＤＭＡレスポンスを解析する伸張ＤＭＡレスポンス処理を行う。Ｓ１９２０においてＳＴプロセッサ４２０は、ＳＴ領域を解放する。Ｓ１９３０においてＳＴプロセッサ４２０は、リード処理を完了する。
【０１２２】
以上のリード処理によれば、ＳＴコントローラ４００がＳＳ接続機構２００に圧縮データの伸張を行わせることにより、圧縮記憶デバイス６００ａからＳＳ接続機構２００までの経路の帯域の使用量を削減でき、ＳＳシステムのＩＯ性能を向上させることができる。
【０１２３】
前述したように、リード処理においてＳＴプロセッサ４２０は、ＩＦプロセッサ２１０からリードリクエストを受信した時点（Ｓ１２２０）で伸張ＤＭＡ処理を行うか否かを判定する。ストレージシステム３００側で伸張ＤＭＡ判定することで、サーバ１００側の圧縮情報管理、伸張処理が不要となる。さらに、ストレージシステム３００側で圧縮情報を管理することで、複数のサーバ１００間で圧縮情報の転送を行わなくても、共有ストレージとしてサーバ１００間で圧縮データを共有できる。なお、伸張ＤＭＡ判定をストレージ側でＩ／Ｏに連動して行うことで、Ｉ／ＯサイズやＳＴメモリ４１０のヒットミス判定情報等Ｉ／Ｏの特性に関する情報をふまえて伸張ＤＭＡ転送を実施するか否かをＩ／Ｏ毎に判定することができる。また、更に、伸張ＤＭＡ転送を判定した後に、ＳＴプロセッサ４２０は、ＳＤプロセッサ６１２から圧縮データリードレスポンスを受信した時点（Ｓ１６１０）で、再度、記憶デバイス６００の応答に応じて伸張ＤＭＡ処理を行うか否かを判定しても良い。伸張ＤＭＡ処理を行うと判定された場合、ＳＳ接続機構２００は、前述のリード処理に示したように伸張ＤＭＡ処理を行う。伸張ＤＭＡ処理を行わないと判定された場合、ＳＳ接続機構２００は、ＳＴコントローラ４００内の非圧縮データをサーバ１００へ転送する通常ＤＭＡ処理を行う。通常ＤＭＡ処理を行う場合、圧縮記憶デバイス６００ａが対象データの圧縮データを伸張してＳＴコントローラ４００へ転送し、ＳＴコントローラ４００が非圧縮データを格納しても良いし、圧縮記憶デバイス６００ａが対象データの圧縮データをＳＴコントローラ４００へ転送し、ＳＴコントローラ４００が非圧縮データを伸張して格納しても良い。以下、ＳＴプロセッサ４２０が伸張ＤＭＡ処理を行うと判定する圧縮判定（Ｓ１２２０）の条件の例であるＲ０〜Ｒ１３について説明する。なお、Ｒ０〜Ｒ１３の条件複数を圧縮判定に同時に用いても良い。
【０１２４】
（Ｒ０）対象データがＳＴコントローラ４００においてキャッシュヒットしたときで、対象のキャッシュヒットしたデータが圧縮データの場合、ＳＴプロセッサ４２０はそのデータに対し伸張ＤＭＡ処理を実施する。対象のキャッシュヒットしたデータが非圧縮データの場合は通常ＤＭＡ処理を実施する。対象データがキャッシュミスした場合、ＳＴプロセッサ４２０は、リードリクエストが下記の他の条件を満たすときに伸張ＤＭＡ処理を実施する。このように、ＳＴプロセッサ４２０が、ヒットミス判定をすることで、リードリクエストによる転送中の圧縮データに対してライトリクエストがあった場合に、排他制御を行うことができる。例えば、リード転送後、ＳＴプロセッサ４２０は、キャッシュ領域上の圧縮データを削除し、物理デバイスに格納されている圧縮データを伸張して、そのデータに対してライトを実施する。これにより、ライトとリードの衝突を防ぎ、かつ伸張ＤＭＡ処理時のライト処理に対応することができる。
【０１２５】
（Ｒ１）対象データがＳＴコントローラ４００においてキャッシュミスしたときで、且つ対象データの仮想ページもしくはプール属性もしくは仮想ボリュームが圧縮属性を有するときで、且つ伸張機能を持ったサーバ１００もしくは伸張機能を持った外接ストレージへ圧縮された対象データを転送するとき、ＳＴプロセッサ４２０は伸張ＤＭＡ処理を行うと判定する。外接ストレージは、ＳＴコントローラ４００に接続されＳＴコントローラ４００により制御されるストレージシステム３００である。記憶デバイス６００内に格納されている圧縮データをＳＳ接続機構２００で伸張してサーバ１００に転送することで、ストレージシステム３００内のバスと、ストレージシステム３００及びＳＳ接続機構２００の間のバスとにおける帯域を広く見せることができ、それらのバスにおける転送時間とを短くすることができる。
【０１２６】
（Ｒ２）データの圧縮・伸張は予め定められた大きさを有する圧縮単位毎に行われる。よって、圧縮単位以下のデータサイズのリード要求に対しては、圧縮単位にするために余分なデータを含んでいる場合があり、非圧縮データで見ると読み出す量が多くなることがある。よって、この不要なデータの読み出し分、負荷が上がりシステムの性能が上がらない要因となりうる。このため、ＳＴプロセッサ４２０は、リードリクエストで指定される非圧縮時のデータサイズが規定値以下のときは伸張転送を実施しない判断をしてもよい。非圧縮時のデータサイズが規定値以上のときは、不要なデータの読み出しが読み出しデータに対して相対的に小さくなるため、伸張ＤＭＡ転送の効果が十分に出るため、ＳＴプロセッサ４２０は、伸張ＤＭＡ転送を実施する判定を行う。なお、規定値は、圧縮後のサイズが不要なデータを含んでいたとしても、圧縮単位よりも十分に小さければ、伸張ＤＭＡ転送の効果が出るが、圧縮率を取得して、判定するといったオーバヘッド削減のために、特にこの規定値を圧縮単位サイズに設定することで、記憶デバイス６００またはＳＴメモリ４１０にある圧縮情報の読み出しを待たずに転送処理できるため、転送処理を高速化できる。
【０１２７】
（Ｒ３）ＳＴプロセッサ４２０がリードリクエストのコマンド履歴をＳＴメモリ４１０に保存し、コマンド履歴に基づいてリードリクエストのシーケンシャル性を判定する。リードリクエストがシーケンシャルリードと判定され、且つ対象データの記憶領域が条件Ｒ１の圧縮属性を有する場合、伸張ＤＭＡ処理を判断する。シーケンシャルリードに対して伸張ＤＭＡ処理を実施することで、記憶デバイス６００とＳＴコントローラ４００の間のバス、ＳＴコントローラ４００内のバス、ＳＴコントローラ４００とＳＳ接続機構２００の間のバス、及びＳＳ接続機構２００とサーバ１００の間のバスの処理遅延を隠蔽し、各伝送路の帯域を使い切ることができる。
【０１２８】
（Ｒ４）対象データの圧縮データがＳＴコントローラ４００にキャッシュされていて、且つＳＴプロセッサ４２０がそのデータを、リードリクエストの後のライトデータであると判断した場合に、シーケンシャル性ありと判断し、更に対象データの記憶領域が条件Ｒ１の圧縮属性を有する場合、ＳＴプロセッサ４２０は伸張ＤＭＡ処理を実施する。これにより、次のデータがある程度キャッシュ領域又はバッファ領域にデステージされていれば、ＳＴプロセッサ４２０は、次にそのデータを利用する可能性を考慮し、シーケンシャルリードアクセスと判断し、条件Ｒ３と同様の理由で伸張ＤＭＡ処理を実施する。
【０１２９】
（Ｒ５）リードリクエストが条件Ｒ１の圧縮属性を有する記憶領域へのアクセスであり、且つ対象データのアクセス頻度が低い場合、キャッシュの必要性が低いため、ＳＴプロセッサ４２０は、伸張したデータを保持しておかなくても良いと判断し、伸張ＤＭＡ処理を実施する。これにより、ＳＴプロセッサ４２０は、アクセス頻度の低いデータを、ＳＴコントローラ４００のキャッシュ領域にデステージしておかずに、すぐに消してよいと判断し、伸張ＤＭＡ処理を実施する。伸張ＤＭＡ処理の対象データは圧縮されており、ＳＴコントローラ４００のキャッシュ領域でキャッシュヒットした際に、上書きコストが高いため、ＳＴプロセッサ４２０は、なるべくアクセス頻度が低く且つシーケンシャル性のあるものを伸張ＤＭＡ処理し、アクセス頻度が高いデータは、伸張されてＳＴコントローラ４００のキャッシュ領域に格納されているほうが望ましい場合が多いため、ＳＴプロセッサ４２０は通常ＤＭＡ処理を実施する。
【０１３０】
（Ｒ６）ＳＴコントローラ４００が圧縮伸張機能付きキャッシュを有し、且つ対象データがそのキャッシュ経由でリードされる場合、ＳＴプロセッサ４２０は、伸張ＤＭＡ処理を実施することにより、圧縮したままＳＳ接続機構２００へ転送する。この場合、圧縮データをキャッシュに保存しても、圧縮データへのライトなどがあった場合にキャッシュが圧縮データを伸張することができるので、圧縮データのまま転送を実施する。
【０１３１】
（Ｒ７）対象データの非圧縮データがＳＴコントローラ４００においてキャッシュヒットし、且つそのキャッシュが圧縮伸張機能付きキャッシュである場合、ＳＴプロセッサ４２０は、伸張ＤＭＡ転送を行うと判断し、キャッシュが対象データを圧縮してから、ＳＳ接続機構２００の伸張ＤＭＡ処理で圧縮データの転送を実施することで帯域を広帯域化できる。
【０１３２】
（Ｒ８）サーバ１００が圧縮伸張機能付きメモリを有し、且つＳＴコントローラ４００からの転送先が圧縮伸張機能付きメモリである場合、ＳＴプロセッサ４２０は通常ＤＭＡ処理を実施する。伸張は圧縮伸張機能付きメモリで実施したほうが、ＳＳ接続機構２００と圧縮伸張機能付きメモリの間のバスを広帯域化できる。
【０１３３】
（Ｒ９）対象データがＳＴコントローラ４００から別のＳＴコントローラ４００へ転送される場合で、且つ転送先のＳＴコントローラ４００が圧縮伸張機能を有していない場合、ＳＴプロセッサ４２０は、伸張ＤＭＡ処理を実施する。転送先のＳＴコントローラ４００が圧縮伸張機能を有する場合、圧縮データのまま転送する。転送先のＳＴコントローラ４００が圧縮伸張機能を有していない場合、転送された圧縮データを伸張できない。
【０１３４】
（Ｒ１０）対象データの圧縮データを格納する圧縮記憶デバイス６００ａの負荷が高いとき、ＳＴプロセッサ４２０は、転送時の伸張を伸張ＤＭＡ処理へオフロードする。ＳＳ接続機構２００が複数ある場合、ＳＴプロセッサ４２０はＳＳ接続機構２００のＩＯのバランスに基づいて、伸張ＤＭＡ処理の負荷分散を行う。
【０１３５】
（Ｒ１１）ＳＴコントローラ４００が圧縮伸張機能を有しており、且つそのＳＴコントローラ４００の負荷が高いとき、ＳＴプロセッサ４２０は、転送時の伸張を伸張ＤＭＡへオフロードする。その他の動作は、条件Ｒ１０と同じである。
【０１３６】
（Ｒ１２）ＳＴプロセッサ４２０がサーバ１００からのヒント情報に基づいて、対象データへのアクセスのシーケンシャル性を判断した場合、ＳＴプロセッサ４２０は伸張ＤＭＡ処理を実施する。ヒント情報は、サーバ１００が圧縮及び伸張を行う場合の、サーバ１００による圧縮及び伸張に関する情報である。この方法は、条件Ｒ１と同様の効果を得るために、シーケンシャル性を判断する方法の一つである。
【０１３７】
（Ｒ１３）ＳＴコントローラ４００内のキャッシュにダーティデータがない場合、ライトが衝突しないため、ＳＴプロセッサ４２０は伸張ＤＭＡ処理を行うと判断する。伸張ＤＭＡ処理中また伸張ＤＭＡ処理後に、キャッシュ領域又はバッファ領域に格納されているデータは一度伸張されないと上書きなどができないため、ＳＴプロセッサ４２０は、このようなデータを伸張ＤＭＡ処理の対象からはずす。
【０１３８】
ここでは、リード処理中にＤＭＡコントローラ２２０により行われる伸張ＤＭＡ処理（Ｓ１７４０）について説明する。
【０１３９】
図３３は、ＳＳ接続機構２００による伸張ＤＭＡ処理の中の第一処理を示し、図３４は、ＳＳ接続機構２００による伸張ＤＭＡ処理の中の第一処理に続く第二処理を示す。
【０１４０】
ＳＳ接続機構２００のＤＭＡコントローラ２２０は、ＳＴコントローラ４００から伸張ＤＭＡリクエストを受信すると、伸張ＤＭＡ処理を実行する。
【０１４１】
Ｓ２１１０においてＤＭＡコントローラ２２０は、伸張ＤＭＡリクエストを解析し、転送元と転送先のアドレスを特定する。なお、転送元のアドレスは、伸張ＤＭＡリクエストに設定されたアドレス（データアドレス）または圧縮情報ＳＧＬから取得する。転送先のアドレスについて、ＳＳ接続機構２００は、サーバ１００からのリードリクエストを受けた際に、リードリクエスト内の転送先のアドレスをリードリクエストの識別子と対応させて保持し、管理していたリードリクエストに含まれていたアドレス情報またはサーバＳＧＬに含まれているアドレス情報を利用する。Ｓ２１２０においてＤＭＡコントローラ２２０は、必要に応じて圧縮情報ＳＧＬを取得し、圧縮情報ＳＧＬより圧縮情報を取得する。
【０１４２】
Ｓ２１３０においてＤＭＡコントローラ２２０は、対象データを含む圧縮単位群に対して伸張しながら転送を行い、伸張後のデータサイズから先頭オフセット位置を減じたサイズが伸張ＤＭＡリクエストで指定された転送サイズとなり、ＤＭＡ転送を全て完了するまで、伸張ＤＭＡ処理の対象データの中から順に対象圧縮単位を選択し、Ｓ２１３０〜Ｓ２２４０を繰り返す。
【０１４３】
Ｓ２１４０においてＤＭＡコントローラ２２０は、対象圧縮単位の圧縮データの保障コードがあるか否かを判定する。圧縮データの保障コードがないと判定された場合（Ｓ２１４０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ２１６０へ移行させる。圧縮データの保障コードがあると判定された場合（Ｓ２１４０：Ｙ）、Ｓ２１５０においてＤＭＡコントローラ２２０は、圧縮データの保障コードをチェックする圧縮データチェック処理を行い、保障コードを削除し、処理をＳ２１６０へ移行させる。
【０１４４】
Ｓ２１６０においてＤＭＡコントローラ２２０は、対象圧縮単位が圧縮されているか否かを判定する。対象圧縮単位が圧縮されていないと判定された場合（Ｓ２１６０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ２１８０へ移行させる。対象圧縮単位が圧縮されていないと判定された場合（Ｓ２１６０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ２１８０へ移行させる。対象圧縮単位が圧縮されていると判定された場合（Ｓ２１６０：Ｙ）、圧縮データに記憶デバイス専用コードが付加されており、伸張時に除去してから伸張する必要がある場合、専用コードを除去する。Ｓ２１７０においてＤＭＡコントローラ２２０は、対象圧縮単位の伸張処理を行うことにより、対象圧縮単位の圧縮データから非圧縮データを生成し、処理をＳ２１８０へ移行させる。
【０１４５】
Ｓ２１８０においてＤＭＡコントローラ２２０は、伸張処理により生成された伸張後の非圧縮データの保障コードがあるか否かを判定する。非圧縮データの保障コードがないと判定された場合（Ｓ２１８０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ２２１０（図中のＡ）へ移行させる。非圧縮データの保障コードがあると判定された場合（Ｓ２１８０：Ｙ）、Ｓ２１９０においてＤＭＡコントローラ２２０は、非圧縮データの保障コードをチェックする非圧縮データチェック処理を行い、保障コードを削除し、処理をＳ２２１０（図中のＡ）へ移行させる。
【０１４６】
Ｓ２２１０においてＤＭＡコントローラ２２０は、当該対象圧縮単位に先頭オフセット位置が設定されているか否か、即ち転送しないデータを含むか否かを判定する。対象圧縮単位がデータ選択条件を満たさないと判定された場合（Ｓ２２１０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ２２３０へ移行させる。ここでデータ選択条件は、対象圧縮単位に先頭オフセット位置が設定されており、転送しないデータを含むことである。対象ブロックがデータ選択条件を満たすと判定された場合（Ｓ２２１０：Ｙ）、つまり、対象圧縮単位に先頭オフセット位置が設定され、転送しないデータを含む場合、Ｓ２２２０においてＤＭＡコントローラ２２０は、対象圧縮単位を伸張したデータの先頭から先頭オフセット位置だけ転送開始位置を移動させ、先頭オフセット位置分のデータは転送せずに、先頭オフセット位置から後ろのデータを転送し、処理をＳ２２３０へ移行させる。これにより、伸張された非圧縮データの一部が対象データである場合であっても、ＤＭＡコントローラ２２０は対象データだけを転送することができる。
【０１４７】
Ｓ２２３０においてＤＭＡコントローラ２２０は、転送先に対象圧縮単位のデータを格納する。Ｓ２２４０においてＤＭＡコントローラ２２０は、転送されたサイズだけ、対象圧縮単位の転送開始位置のアドレスを増加させ、転送サイズ分の転送が完了したか否かを判定する。転送が完了していないと判定された場合（Ｓ２２４０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ２１３０（図中のＢ）へ移行させる。転送が完了したと判定された場合（Ｓ２２４０：Ｙ）、Ｓ２２５０においてＤＭＡコントローラ２２０は、伸張ＤＭＡ処理が正常に完了した旨の通知をＳＴコントローラ４００へ通知し、このフローを終了する。
【０１４８】
圧縮データに保障コードが付いておらず、圧縮前の非圧縮データにだけ保障コードが付いている場合であっても、且つ保障コードが不一致である場合、ＤＭＡコントローラ２２０は、エラー発生箇所の特定のために、伸張されたデータを同パスで転送しエラーの発生箇所を特定する。
【０１４９】
なお、Ｓ２２２０においては、伸張された非圧縮データの一部が対象データである場合に、ＳＳ接続機構２００が非圧縮データから対象データを抽出したが、ＳＴコントローラ４００が非圧縮データから対象データを抽出しても良い。ここで、圧縮記憶デバイス６００ａ内の対象データの圧縮データは、圧縮伸張機能付ＦＭのキャッシュ領域又はＳＴメモリ４１０のキャッシュ領域へ転送される。その後、ＳＴプロセッサ４２０は、圧縮伸張機能付きフラッシュのハードウェア又はＳＴプロセッサ４２０のソフトウェアを用いて、圧縮データを伸張して非圧縮データを生成、非圧縮データから対象データを抽出する。その後、ＳＴプロセッサ４２０は、圧縮伸張機能付きフラッシュのハードウェア又はＳＴプロセッサ４２０のソフトウェアを用いて、抽出された対象データを圧縮して圧縮データに変換してキャッシュ領域へ保存する。これにより、ＳＴコントローラ４００のキャッシュ領域と、ＳＶメモリ１１０との間のバスの帯域の使用率を低減し、リード性能を向上させることができる。
【０１５０】
以上の伸張ＤＭＡ処理によれば、Ｉ／Ｏ特性を把握するストレージシステム３００側の判断で、状況に応じてＳＴコントローラ４００からサーバ１００への圧縮データを転送できる。かつデータの伸張はＤＭＡコントローラ２２０で実現され、サーバ１００側のＳＶプロセッサ１２０の負荷を増大させることにはならない。特にＤＭＡコントローラ２２０がサーバ１００側に設置されている場合には、ＳＴコントローラ・サーバ間の帯域以上のデータを読み出すことが可能となり、帯域の有効利用を実現することが可能となる。例えば、大規模データ分析システムでは、分析のためにデータをストレージから読み出す際に、ＳＴコントローラ・サーバ間のリード帯域が狭いと、分析サーバの分析処理用のプロセッサの利用効率が落ち分析処理時間が増加してしまう。本システムによれば、読み出しのデータ量を削減されるために、リード帯域を広帯域化でき、読み出し時間が短縮により分析処理を時間短縮を実現することができる。
【０１５１】
また、本実施例の構成によれば、圧縮データ及び非圧縮データが正常である（伸張が成功である）か否かをチェックすることができる。また、ＳＴメモリ４１０内の対象データが圧縮単位であるブロックの途中から格納されている場合でも、対象データだけをＳＶメモリ１１０へ転送することができる。
【０１５２】
ここでは、伸張ＤＭＡ処理中に、圧縮データチェック処理（Ｓ２１５０）及び非圧縮データチェック処理（Ｓ２１９０）の結果に基づいて行われる保障コードチェック処理について説明する。
【０１５３】
図３５は、伸張ＤＭＡ処理中の保障コードチェック処理の中の第一処理を示し、図３６は、伸張ＤＭＡ処理中の保障コードチェック処理の中の第一処理に続く第二処理を示し、図３７は、伸張ＤＭＡ処理中の保障コードチェック処理の中の第二処理に続く第三処理を示す。
【０１５４】
伸張ＤＭＡ処理中、Ｓ２３１０においてＳＳ接続機構２００のＩＦプロセッサ２１０は、圧縮データチェック処理に応じて、圧縮データの保障コードにエラーがあるか否かを判定する。圧縮データの保障コードにエラーがないと判定された場合（Ｓ２３１０：Ｎ）、ＩＦプロセッサ２１０は、処理をＳ２５１０へ移行させる。なお、圧縮データに保障コードが付加されていない場合も、圧縮データの保障コードにエラーがない場合と同じフローとする。
【０１５５】
圧縮データの保障コードにエラーがあると判定された場合（Ｓ２３１０：Ｙ）、Ｓ２３２０においてＩＦプロセッサ２１０は、圧縮データの保障コードでエラーが発生したことを示す情報を伸張ＤＭＡレスポンスに設定する。Ｓ２３３０においてＩＦプロセッサ２１０は、伸張ＤＭＡレスポンスをＳＴプロセッサ４２０へ発行する。
【０１５６】
Ｓ２３４０においてＳＴプロセッサ４２０は、ＤＭＡコントローラ２２０の故障か否かを判定する。故障の判定は、ＤＭＡコントローラ２２０からＤＭＡコントローラ２２０内部エラー発生の通知があるか否かで判定する。ＤＭＡコントローラ２２０の故障の通知がある場合（Ｓ２３４０：Ｙ）、Ｓ２３５０においてＳＴプロセッサ４２０は、ＤＭＡコントローラ故障を判定し、このフローを終了する。なお、ＤＭＡコントローラ２２０の故障でも内部エラー発生の通知が発行されない場合は、ＳＴプロセッサ４２０はＤＭＡコントローラ故障の有無を判定できないため、本判定では故障通知なしのフローに進む。また、故障通知は伸張ＤＭＡレスポンスにエラーとしてＤＭＡコントローラ２２０の内部エラーとして含まれていても良い。
【０１５７】
ＤＭＡコントローラ２２０の故障の通知がないと判定された場合（Ｓ２３５０：Ｎ）、ストレージコントローラの制御ソフトウェアのエラーを疑い、Ｓ２３６０においてＳＴプロセッサ４２０は、予め設定されたエラーの要因と当該要因に対して定義される処理にのっとり、閉塞など、今後の動作を決定し、このフローを終了する。なお、再送などを行い、エラー回数が閾値を超えた場合に閉塞としても良い。
【０１５８】
Ｓ２５１０においてＩＦプロセッサ２１０は、伸張後の非圧縮データの保障コードにエラーがあるか否かを判定する。非圧縮データの保障コードにエラーがないと判定された場合（Ｓ２５１０：Ｎ）、ＩＦプロセッサ２１０は、このフローを終了する。
【０１５９】
非圧縮データの保障コードにエラーがあると判定された場合（Ｓ２５１０：Ｙ）、Ｓ２５２０においてＩＦプロセッサ２１０は、非圧縮データの保障コードでエラーが発生したことを示す情報を伸張ＤＭＡレスポンスに設定する。Ｓ２５３０においてＩＦプロセッサ２１０は、伸張ＤＭＡレスポンスをＳＴプロセッサ４２０へ発行する。
【０１６０】
Ｓ２５４０においてＳＴプロセッサ４２０は、ＤＭＡコントローラ２２０の故障か否かを判定する。判断は前述の圧縮データの保障コードと同様の方法で判断する。ＤＭＡコントローラ２２０の故障の通知がある場合（Ｓ２５５０：Ｙ）、Ｓ２５５０においてＳＴプロセッサ４２０は、ＤＭＡコントローラ故障を判定し、このフローを終了する。
【０１６１】
ＤＭＡコントローラ２２０の故障の通知がない場合（Ｓ２５５０：Ｎ）、Ｓ２５６０においてＳＴプロセッサ４２０は、圧縮データの保障コードがあるか否かを判断する。圧縮データの保障コードがある場合（Ｓ２５６０：Ｙ）、Ｓ２５７０においてＳＴプロセッサ４２０は、例えば記憶デバイス６００とＳＴコントローラ４００間の保障コードチェック結果と、ＳＴコントローラ４００とＳＳ接続機構２００間の保障コードチェックよりエラー発生箇所の絞込みができるため、絞込み結果に従い、予め設定されたエラーの要因と当該要因に対して定義される処理にのっとり、閉塞など、今後の動作を決定し、このフローを終了する。圧縮データの保障コードがない場合（Ｓ２５６０：Ｎ）、記憶デバイス６００とＳＴコントローラ４００間の保障コードチェックがないため、記憶デバイス６００とＳＴコントローラ４００間かＳＴコントローラ４００とＳＳ接続機構２００間のどこでエラーが発生したかの特定が難しいため、Ｓ２６１０においてＳＴプロセッサ４２０は、エラーチェック強化モードに移行する（図中のＢ）。なお、ここでＳＴプロセッサ４２０は、エラーチェック強化モードに移行せずに、予め設定されたエラーの要因と当該要因に対して定義される処理にのっとり、閉塞など、今後の動作を決定し、このフローを終了してもよい。Ｓ２６２０においてＳＴプロセッサ４２０は、記憶デバイス６００でのエラーの可能性を判定する。Ｓ２６３０においてＳＴプロセッサ４２０は、対象データの非圧縮データのサイズのうち、ＳＴ領域に収まらないサイズの領域を確保してＳＴ領域に追加し、ＳＴ領域を示すＳＧＬを作成する。Ｓ２６４０においてＳＴプロセッサ４２０は、圧縮記憶デバイス６００ａに格納されている対象データの圧縮データの伸張と転送を、圧縮記憶デバイス６００ａに依頼し、転送経路でエラーチェックする。伸張したデータを転送することによって、伸張後のデータの保障コードで、圧縮データに保障コードをつけた際と同様のチェックが可能となり、エラー発生箇所の切り分けが可能となる。Ｓ２６５０においてＳＴプロセッサ４２０は、エラー発生箇所を特定する。ここでＳＴプロセッサ４２０は、エラー発生箇所を特定できない場合も、処理を次へ移行させる。Ｓ２６６０においてＳＴプロセッサ４２０は、エラーの要因によって、閉塞など、今後の動作を決定し、このフローを終了する。
【０１６２】
なお、エラーチェック強化モードでエラーが再現しなかった場合、ＳＴプロセッサ４２０は、予め設定されたエラーの要因と当該要因に対して定義される処理にのっとり、閉塞など、今後の動作を決定し、このフローを終了するか、閾値管理を行い閾値に達するまで、エラーチェック強化モードを解除し、伸張ＤＭＡ転送で再送、または、エラーチェック強化モードで転送を実施してもよい。
【０１６３】
以上の保障コードチェック処理によれば、ＳＴプロセッサ４２０は、圧縮データ又は非圧縮データの保障コードのエラーに基づいて、エラー発生箇所を特定し、エラー発生箇所の閉塞などの処理を行うことができる。また、ＳＴプロセッサ４２０は、保障コードがない場合も、ある程度エラー発生箇所の絞込みを実施できる。
【０１６４】
ＳＴプロセッサ４２０が、ＳＴメモリ４１０のキャッシュ領域にヒット無効フラグを設定しても良い。この場合、ＳＴプロセッサ４２０が、シーケンシャルリードにおいて、次の圧縮データを予測して先読みすることで、圧縮記憶デバイス６００ａとＳＴメモリ４１０のキャッシュ領域との間のレイテンシを隠蔽することができる。
【０１６５】
以下、サーバ１００からの対象データを圧縮して圧縮記憶デバイス６００ａへ書き込むライト処理について説明する。
【０１６６】
図３８は、ＳＳシステムのライト処理の中の第一処理を示し、図３９は、ＳＳシステムのライト処理の中の第一処理に続く第二処理を示し、図４０は、ＳＳシステムのライト処理の中の第二処理に続く第三処理を示す。これらの図は、ＳＶプロセッサ１２０と、ＩＦプロセッサ２１０と、ＳＴプロセッサ４２０と、ＳＤプロセッサ６１２との動作を示す。ここでは、対象データの圧縮処理がＳＳ接続機構２００により行われる場合のライト処理について説明する。
【０１６７】
Ｓ３１１０においてサーバ１００内のＳＶプロセッサ１２０は、ＳＶメモリ１１０内のＳＶ領域に、ライト処理の対象データを保存する。ここでＳＶプロセッサ１２０は、ＳＶ領域を示すＳＧＬであるサーバＳＧＬを生成してＳＶメモリ１１０へ保存する。Ｓ３１２０においてＳＶプロセッサ１２０は、対象データのライトリクエストをＳＳ接続機構２００へ発行する。
【０１６８】
Ｓ３１３０においてＳＳ接続機構２００内のＩＦプロセッサ２１０は、ＳＶプロセッサ１２０からキューイングされたライトリクエストを解析するライトリクエスト処理を行う。Ｓ３１４０においてＩＦプロセッサ２１０は、解析結果に基づくライトリクエストを生成してＳＴプロセッサ４２０へ発行する。なお、ＩＦプロセッサ２１０からＳＴコントローラ４００へのライトリクエストを、ＳＶプロセッサ１２０からＩＦプロセッサ２１０へライトリクエストと区別するために、ライトコマンドと呼ぶことがある。Ｓ３１５０においてＩＦプロセッサ２１０は、サーバＳＧＬを取得するためのサーバＳＧＬ処理を行う。Ｓ３１６０においてＩＦプロセッサ２１０は、サーバ１００からサーバＳＧＬを受信する。Ｓ３１７０においてＩＦプロセッサ２１０は、受信されたサーバＳＧＬを内部メモリに格納する。なお、サーバＳＧＬの情報をライトリクエストに搭載してもよく、ライトリクエストにのらない分をサーバＳＧＬにのせても良い。
【０１６９】
Ｓ３２１０においてＳＴコントローラ４００内のＳＴプロセッサ４２０は、ＩＦプロセッサ２１０からキューイングされたライトリクエストを解析するライトリクエスト処理を行う。Ｓ３２２０においてＳＴプロセッサ４２０は、圧縮ＤＭＡ処理を行うか否かを判定する（圧縮判定）。対象データを圧縮すると判定された場合、Ｓ３２３０においてＳＴプロセッサ４２０は、解析結果に基づいて対象データの圧縮データを格納するためのＳＴ領域をＳＴメモリ４１０内に確保する。Ｓ３２４０においてＳＴプロセッサ４２０は、ＳＴ領域を示す圧縮情報ＳＧＬを生成してＳＴメモリ４１０へ保存する。Ｓ３２５０においてＳＴプロセッサ４２０は、圧縮ＤＭＡリクエストをＩＦプロセッサ２１０へ発行する。
【０１７０】
Ｓ３３１０においてＩＦプロセッサ２１０は、圧縮ＤＭＡリクエストを解析する圧縮ＤＭＡリクエスト処理を行う。Ｓ３３２０においてＩＦプロセッサ２１０は、ＳＴメモリ４１０内の圧縮情報ＳＧＬを取得する。Ｓ３３３０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０の圧縮ＤＭＡ処理を起動する。Ｓ３３４０においてＤＭＡコントローラ２２０は、ＩＦプロセッサ２１０からの指示に基づいて圧縮ＤＭＡ処理を行うことにより、サーバ１００内のＳＶ領域に格納されている非圧縮データを読み出して圧縮し、得られる圧縮データをＳＴコントローラ４００内のＳＴ領域へ書き込む。Ｓ３３５０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０から圧縮ＤＭＡ処理完了の通知を受ける（図中のＡへ移行）。Ｓ３３６０においてＩＦプロセッサ２１０は、圧縮ＤＭＡリクエストに対する圧縮ＤＭＡレスポンスをＳＴプロセッサ４２０へ発行する。圧縮ＤＭＡレスポンスでは、圧縮前のデータサイズ、圧縮後のデータサイズ、圧縮単位毎の圧縮データサイズおよび、圧縮の有無を示すフラグをＳＴプロセッサ４２０に通知し、ＳＴコントローラ４００側で圧縮情報として管理される。
【０１７１】
Ｓ３４１０においてＳＴプロセッサ４２０は、ＩＦプロセッサ２１０からキューイングされた圧縮ＤＭＡレスポンスを解析する圧縮ＤＭＡレスポンス処理を行う。Ｓ３４２０においてＳＴプロセッサ４２０は、ＳＴ領域内の圧縮データを冗長化するデータ冗長化を行う。
【０１７２】
例えば、ＳＴプロセッサ４２０は、パリティ計算を必要としないＲＡＩＤ１相当のデータ冗長化として、ＳＴメモリ４１０内の圧縮データを、ＳＴコントローラ間バスを介して他のＳＴコントローラ４００内のＳＴメモリ４１０へ転送することにより、二つのＳＴコントローラ４００のＳＴメモリ４１０に圧縮データを保存する。
【０１７３】
また、例えば、ＳＴプロセッサ４２０は、ＲＡＩＤ５等、パリティ計算を必要とするデータ冗長化を行っても良い。ここで、対象データの圧縮データは、ＳＴコントローラ４００内のキャッシュ領域へ転送される。ここで圧縮伸張機能付ＦＭのキャッシュ領域、又はＳＴメモリ４１０のキャッシュ領域である。その後、ＳＴプロセッサ４２０は、ＳＴコントローラ４００内の圧縮伸張機能を用いることにより、圧縮情報に基づいて圧縮データを伸張して非圧縮データを生成する。ここでＳＴコントローラ４００の圧縮伸張機能は、圧縮伸張機能付ＦＭのハードウェア、又はＳＴプロセッサ４２０のソフトウェアである。その後、ＳＴプロセッサ４２０は、ＲＡＩＤパリティ計算を行い、生成されたパリティをキャッシュ領域へ保存する。その後、ＳＴプロセッサ４２０は、ＳＴコントローラ４００の圧縮伸張機能を用いることにより、圧縮情報に基づいてパリティを圧縮してキャッシュ領域へ保存する。これにより、ＳＶメモリ１１０と、ＳＴコントローラ４００のキャッシュ領域との間のバスの帯域の使用率を低減し、ライト性能を向上させることができる。
【０１７４】
Ｓ３４３０においてＳＴプロセッサ４２０は、ライトレスポンスをＩＦプロセッサ２１０へ発行し、処理をＳ３５１０（図中のＢ）へ移行させる。
【０１７５】
Ｓ３４４０においてＩＦプロセッサ２１０は、ＳＴプロセッサ４２０からキューイングされたライトレスポンスを解析するライトレスポンス処理を行う。Ｓ３４５０においてＩＦプロセッサ２１０は、解析結果に基づくライトレスポンスをＳＶプロセッサ１２０へ発行する。Ｓ３４６０においてＳＶプロセッサ１２０は、ライト処理を完了する。
【０１７６】
Ｓ３５１０においてＳＴプロセッサ４２０は、ＳＴ領域内の圧縮データを圧縮記憶デバイス６００ａへ書き込むデステージ処理を開始する。
【０１７７】
Ｓ３５２０においてＳＴプロセッサ４２０は、圧縮データに関する圧縮情報を含む圧縮情報ライトリクエストを圧縮記憶デバイス６００ａ内のＳＤプロセッサ６１２へ発行する。Ｓ３５３０においてＳＤプロセッサ６１２は、ＳＴプロセッサ４２０からの圧縮情報をＲＡＭへ書き込む。Ｓ３５４０においてＳＤプロセッサ６１２は、圧縮情報ライトリクエストに対する圧縮情報ライトレスポンスをＳＴプロセッサ４２０へ発行する。
【０１７８】
Ｓ３６１０においてＳＴプロセッサ４２０は、圧縮データを書き込むための圧縮データライトリクエストをＳＤプロセッサ６１２へ発行する。Ｓ３６２０においてＳＤプロセッサ６１２は、圧縮データリクエストに基づいて圧縮データを格納するＳＤ領域を、ＲＡＭ内に準備する。Ｓ３６３０においてＳＤプロセッサ６１２は、圧縮データのライトの準備の完了を示す圧縮データライトレディをＳＴプロセッサ４２０へ発行する。
【０１７９】
Ｓ３６４０においてＳＴプロセッサ４２０は、ＳＤプロセッサ６１２からキューイングされた圧縮データライトレディに応じて、圧縮データをＳＤプロセッサ６１２へ送信する。Ｓ３６５０においてＳＤプロセッサ６１２は、圧縮データをＳＤ領域へ書き込む。Ｓ３６６０においてＳＤプロセッサ６１２は、書き込みの完了に応じて、圧縮データライトリクエストに対する圧縮データライトレスポンスをＳＴプロセッサ４２０へ発行する。
【０１８０】
以上のライト処理によれば、ＳＴコントローラ４００がＳＳ接続機構２００に非圧縮データの圧縮を行わせることにより、ＳＳ接続機構２００から圧縮記憶デバイス６００ａまでの経路の帯域の使用量を削減でき、ＳＳシステムのＩＯ性能を向上させることができる。
【０１８１】
ライト処理においてＳＴプロセッサ４２０は、ＩＦプロセッサ２１０から対象データのライトリクエストを受信した時点（Ｓ３２２０）で、圧縮ＤＭＡ処理を行うか否かを判定する。また、ＳＴプロセッサ４２０は、圧縮情報ＳＧＬを生成した時点（Ｓ３２４０）で、圧縮ＤＭＡ処理を行うか否かを判定しても良い。圧縮ＤＭＡ処理を行うと判定された場合、ＳＳ接続機構２００は、前述のライト処理に示したように圧縮ＤＭＡ処理を行う。圧縮ＤＭＡ処理を行わないと判定された場合、ＳＳ接続機構２００は、対象データの非圧縮データをサーバ１００からＳＴコントローラ４００へ転送する通常ＤＭＡ処理を行う。通常ＤＭＡ処理を行う場合、ＳＴコントローラ４００が対象データの非圧縮データを圧縮記憶デバイス６００ａへ転送し、圧縮記憶デバイス６００ａが非圧縮データを圧縮して格納しても良いし、ＳＴコントローラ４００が対象データを圧縮して圧縮記憶デバイス６００ａへ転送し、圧縮記憶デバイス６００ａが格納しても良い。以下、ＳＴプロセッサ４２０が圧縮ＤＭＡ処理を行うと判定する条件の例であるＷ１〜Ｗ１３について説明する。
【０１８２】
（Ｗ１）対象データのライト先の仮想ページもしくはプール属性もしくは仮想ボリュームが圧縮属性を示す時、圧縮データをまとめて管理しないと管理負荷が増加するため、ＳＴプロセッサ４２０は、圧縮ＤＭＡ処理を実施する。また、圧縮データはサイズが可変長になるため、圧縮データサイズと記憶装置５００の容量の管理をしなければならないため、ＳＴプロセッサ４２０は、圧縮データを格納しているプール又はボリュームを、圧縮データのための圧縮ボリュームとして扱ったほうが管理しやすい。
【０１８３】
（Ｗ２）ライトリクエストが条件Ｗ１を満たし、且つＲＡＩＤ１０などでディスク格納の際にパリティ演算が必要ないと判断されたとき、ＳＴプロセッサ４２０は、圧縮ＤＭＡ処理を実施する。パリティ演算が必要な場合は、その演算をした後に圧縮したほうが管理しやすい。例えば、圧縮データからパリティグループを作っていると、上書きライトするたびにサイズがかわるため、一旦パリティグループ内の全ての圧縮データを伸張してパリティを計算し直さなければならなくなるためである。
【０１８４】
（Ｗ３）ＳＴプロセッサ４２０がライトリクエストのコマンド履歴をＳＴメモリ４１０に保存し、コマンド履歴に基づいてライトリクエストのシーケンシャル性を判定する。ライトリクエストがシーケンシャルライトと判定され、且つライトリクエストが条件Ｗ１又はＷ２を満たす場合、ＳＴプロセッサ４２０は、圧縮ＤＭＡ処理を実施する。前述の伸張ＤＭＡ処理の条件Ｗ２及びＷ３と同様にシーケンシャルなアクセスに対して圧縮ＤＭＡ処理を実施したほうが各伝送路の帯域を使い切ることができる。
【０１８５】
（Ｗ４）ＳＴコントローラ４００が圧縮伸張機能付きキャッシュを有し、且つ対象データがそのキャッシュへライトされる場合、ＳＴプロセッサ４２０は、伸張ＤＭＡ処理を実施する。これは、条件Ｒ６と同様の理由による。
【０１８６】
（Ｗ５）対象データが圧縮記憶デバイス６００ａへ直接転送される、もしくは、ＳＴメモリ４１０を一時テンポラリとして圧縮記憶デバイス６００ａへ転送されると判断されたとき、ＳＴプロセッサ４２０は、伸張ＤＭＡ処理を実施する。これは、条件Ｒ７と同様の理由による。
【０１８７】
（Ｗ６）対象データが転送元のＳＴコントローラ４００から転送先のＳＴコントローラ４００へ転送される場合で、且つ転送先のＳＴコントローラ４００が圧縮伸張機能を有している場合、転送元のＳＴコントローラ４００は、対象データを圧縮して転送する。これは、条件Ｒ９と同様の理由による。
【０１８８】
（Ｗ７）対象データの圧縮データを格納する圧縮記憶デバイス６００ａの負荷が高いとき、ＳＴプロセッサ４２０は、転送時の圧縮を圧縮ＤＭＡ処理へオフロードする。これは、条件Ｒ１０と同様の理由による。
【０１８９】
（Ｗ８）ＳＴコントローラ４００が圧縮伸張機能を有しており、且つそのＳＴコントローラ４００の負荷が高いとき、ＳＴプロセッサ４２０は、転送時の圧縮を圧縮ＤＭＡ処理へオフロードする。これは、前述の条件Ｒ１０と同様の理由による。
【０１９０】
（Ｗ９）ＳＴプロセッサ４２０がサーバ１００からのヒント情報に基づいて、対象データへのアクセスのシーケンシャル性を判断した場合、ＳＴプロセッサ４２０は圧縮ＤＭＡ処理を実施する。その他の動作は、条件Ｗ３と同じである。
【０１９１】
（Ｗ１０）ライトリクエストが新規ライトで条件Ｗ１又はＷ２を満たすとき、ＳＴプロセッサ４２０は圧縮ＤＭＡ処理を実施する。これは、格納済みのデータを伸張して上書きする必要がないためである。
【０１９２】
（Ｗ１１）ライトリクエストが条件Ｗ１又はＷ２を満たし、且つＳＴコントローラ４００内のキャッシュを経由せずに圧縮記憶デバイス６００ａへ直接転送されると判断されたとき、ＳＴプロセッサ４２０は、圧縮ＤＭＡ処理を実施する。これは、ＳＴプロセッサ４２０が対象データに対し、特化パスでＲＡＩＤパリティを作ったり、上書き処理をしたりしなくて良いためである。
【０１９３】
（Ｗ１２）対象データの書き換え頻度が低い、もしくは対象データがアーカイブ用途のデータと判断されたとき、ＳＴプロセッサ４２０は、圧縮ＤＭＡ処理を実施する。これは、対象データをキャッシュする必要がないため、キャッシュ上にあるデータを伸張して上書きしたりすることがないため、圧縮して送ってしまうことで、バスの帯域を広く使うことができる。
【０１９４】
（Ｗ１３）ＳＴコントローラ４００内のキャッシュにダーティデータがない場合、ライトが衝突しないため、ＳＴプロセッサ４２０は、圧縮ＤＭＡ処理を実施する。これは、条件Ｗ１２と同じ理由による。
【０１９５】
（Ｗ１４）非圧縮データをまとめた圧縮単位で圧縮し管理するため、圧縮単位以下のデータサイズのライト要求に対しては、伸張、マージ、圧縮の余分なデータを読み出し、処理が必要となるため、負荷が上がり性能が上がらない場合がある。このため、データサイズが規定値以下のとき、ＳＴプロセッサ４２０は圧縮転送を実施しない判断をしてもよい。
【０１９６】
ここでは、ライト処理中にＤＭＡコントローラ２２０により行われる圧縮ＤＭＡ処理（Ｓ３３４０）について説明する。
【０１９７】
図４１は、ＳＳ接続機構２００による圧縮ＤＭＡ処理の中の第一処理を示し、図４２は、ＳＳ接続機構２００による圧縮ＤＭＡ処理の中の第一処理に続く第二の処理を示す。
【０１９８】
ＳＳ接続機構２００のＤＭＡコントローラ２２０は、ＳＴコントローラ４００から圧縮ＤＭＡリクエストを受信すると、圧縮ＤＭＡ処理を実行する。
【０１９９】
Ｓ４１１０においてＤＭＡコントローラ２２０は、圧縮ＤＭＡリクエストを解析し、転送元と転送先のアドレスを特定する。Ｓ４１２０においてＤＭＡコントローラ２２０は、転送ブロック群サイズから先頭オフセット位置を減じた転送サイズのＤＭＡ処理を完了するまで、圧縮ＤＭＡ処理の対象データの中から順に対象ブロックを選択し、Ｓ４１２０〜Ｓ４２２０を繰り返す。
【０２００】
Ｓ４１３０においてＤＭＡコントローラ２２０は、対象ブロックに保障コードを付加するか否かを判定する。なお、付加するか否かは圧縮ＤＭＡリクエストでＳＴコントローラ４００から設定する。対象ブロックに保障コードを付加しないと判定された場合（Ｓ４１３０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ４１５０へ移行させる。対象ブロックに保障コードを付加すると判定された場合（Ｓ４１３０：Ｙ）、Ｓ４１４０においてＤＭＡコントローラ２２０は、対象ブロックの圧縮前のデータの保障コードを計算し、データに保障コードを付加し、処理をＳ４１５０へ移行させる。
【０２０１】
Ｓ４１５０においてＤＭＡコントローラ２２０は、対象ブロックの圧縮処理を行うことにより圧縮データを生成する。Ｓ４１６０においてＤＭＡコントローラ２２０は、圧縮データに保障コードを付加するか否かを判定する。圧縮データに保障コードを付加しないと判定された場合（Ｓ４１６０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ４２１０（図中のＡ）へ移行させる。圧縮データに保障コードを付加すると判定された場合（Ｓ４１６０：Ｙ）、Ｓ４１７０においてＤＭＡコントローラ２２０は、圧縮データの保障コードを計算し、圧縮データに保障コードを付加し、処理をＳ４２１０（図中のＡ）へ移行させる。
【０２０２】
Ｓ４２１０においてＤＭＡコントローラ２２０は、対象ブロックの圧縮データを転送先に格納する。Ｓ４２２０においてＤＭＡコントローラ２２０は、転送されたサイズだけ、対象ブロックのアドレスを増加させ、転送サイズ分の転送が完了したか否かを判定する。転送が完了していないと判定された場合（Ｓ４２２０：Ｎ）、ＤＭＡコントローラ２２０は、処理をＳ４１２０（図中のＢ）へ移行させる。転送が完了したと判定された場合（Ｓ４２２０：Ｙ）、Ｓ４２３０においてＤＭＡコントローラ２２０は、圧縮ＤＭＡ処理完了をＳＴコントローラ４００へ通知し、このフローを終了する。
【０２０３】
以上の圧縮ＤＭＡ処理によれば、非圧縮データを圧縮しながら、サーバ１００からＳＴコントローラ４００へ転送することができる。また、圧縮データ及び非圧縮データに保障コードを付加することができる。
【０２０４】
ライト処理において、ＳＳ接続機構２００は、対象データの非圧縮データを圧縮して圧縮データを生成し、圧縮データをＳＴコントローラ４００へ転送する場合に、非圧縮データと圧縮データの何れに保障コードを付加するかを決定する。例えば、ＳＴコントローラ４００は、非圧縮データと圧縮データの両方に保障コードを付加することが予め設定されていても良いし、記憶領域のコストや通信のコストや記憶デバイス６００の信頼性等に基づいて、保障コードを付加する対象を決定しても良いし、圧縮記憶デバイス６００ａが読み出された保障コードを送信しない場合に、非圧縮データだけに保障コードを付加すると判定しても良い。
【０２０５】
ここでは、ライト処理において圧縮記憶デバイス６００ａが圧縮処理を行っている場合で、且つライトリクエストが条件Ｗ７を満たす場合に、ライト処理における圧縮処理を圧縮記憶デバイス６００ａからＳＳ接続機構２００へオフロードする圧縮オフロードライト処理について説明する。
【０２０６】
図４３は、圧縮オフロードライト処理を示す。
【０２０７】
前述のライト処理と同様にして、Ｓ３２１０までの処理が行われる。Ｓ３２２０においてライトリクエストが条件Ｗ７を満たすと判定された場合、Ｓ３２６０においてＳＴプロセッサ４２０は、ライトリクエストの解析結果に基づいて対象データの圧縮データを格納するためのＳＴ領域をＳＴメモリ４１０内に確保する。Ｓ３２７０においてＳＴプロセッサ４２０は、転送元であるＳＶ領域と、転送先であるＳＴ領域とを示す圧縮情報ＳＧＬを生成してＳＴメモリ４１０へ保存する。Ｓ３２８０においてＳＴプロセッサ４２０は、転送元（ライトリクエストの発行元）のサーバ１００に接続されているＳＳ接続機構２００の中から圧縮ＤＭＡ処理を行わせるＤＭＡコントローラ２２０を圧縮ＤＭＡ装置として選択する。ここでＳＴプロセッサ４２０は、各ＤＭＡコントローラ２２０のＩ／Ｏ負荷を測定してＳＴメモリ４１０へ保存し、Ｉ／Ｏ負荷が最も低いＤＭＡコントローラ２２０を圧縮ＤＭＡ装置として選択する。Ｓ３２９０においてＳＴプロセッサ４２０は、圧縮ＤＭＡリクエストを圧縮ＤＭＡ装置へ発行する。なお、圧縮情報ＳＧＬの情報をライトリクエストに搭載してもよく、ライトリクエストにのらない分を圧縮情報ＳＧＬにのせても良い。
【０２０８】
以後の処理は前述のライト処理におけるＳ３３１０〜Ｓ３４１０と同様である。
【０２０９】
圧縮オフロードライト処理と同様、リード処理において圧縮記憶デバイス６００ａが伸張処理を行っている場合で、且つライトリクエストが条件Ｒ１０を満たすと判定された場合に、リード処理における伸張処理を圧縮記憶デバイス６００ａからＳＳ接続機構２００へオフロードする圧縮オフロードリード処理について説明する。圧縮オフロードリード処理においてＳＴプロセッサ４２０は、リード処理のＳ１２２０〜Ｓ１６２０の処理中に、転送先（リードリクエストの発行元）のサーバ１００に接続されているＳＳ接続機構２００の中から伸張ＤＭＡ処理を行わせるＤＭＡコントローラ２２０を伸張ＤＭＡ装置として選択し、伸張ＤＭＡリクエストを伸張ＤＭＡ装置へ発行する。
【０２１０】
このように圧縮及び伸張の負荷を圧縮記憶デバイス６００ａとＳＳ接続機構２００に分散させることにより、ＳＳシステムのＩＯ性能を向上させることができる。
【０２１１】
以下、サーバ１００が圧縮伸張機能付ＦＭを含む場合について説明する。
【０２１２】
サーバ１００に搭載された圧縮伸張機能付ＦＭが、対象データの圧縮及び伸張を行う場合、ＳＶプロセッサ１２０は、ＳＳ接続機構２００へのライトリクエスト及びリードリクエストに、サーバ１００による圧縮及び伸張に関するヒント情報を付加する。ＳＴプロセッサ４２０は、圧縮ＤＭＡ処理及び伸張ＤＭＡ処理の実施可否の判定に、ヒント情報を用いる。
【０２１３】
例えば、ＳＳ接続機構２００が、サーバ１００により用いられている圧縮伸張アルゴリズムと異なる圧縮伸張アルゴリズムを用いる場合、ＳＳ接続機構２００による圧縮の効果があるため、ヒント情報が圧縮伸張アルゴリズムを示すことにより、ＳＴプロセッサ４２０は、ヒント情報に基づいて圧縮ＤＭＡ処理及び伸張ＤＭＡ処理を実施しても良い。ＳＳ接続機構２００が、サーバ１００により用いられている圧縮伸張アルゴリズムと同じ圧縮伸張アルゴリズムを用いる場合、ヒント情報が圧縮伸張アルゴリズムを示すことにより、ＳＴプロセッサ４２０は、ヒント情報に基づいてＳＳ接続機構２００による圧縮の効果を判定し、効果があると判定される場合に圧縮ＤＭＡ処理及び伸張ＤＭＡ処理を実施しても良い。
【０２１４】
また、ＳＴプロセッサ４２０が、ＳＴコントローラ４００に搭載された圧縮伸張機能付ＦＭ、又はＳＴプロセッサ４２０のソフトウェアを用いて、対象データの圧縮及び伸張を行っている場合、ＳＴコントローラ４００により管理されている圧縮情報を、ＳＳ接続機構２００を介して、サーバ１００に搭載された圧縮伸張機能付ＦＭへ通知する。これにより、サーバ１００に搭載された圧縮伸張機能付ＦＭは、圧縮情報に基づいて対象データの圧縮及び伸張を行う。
【０２１５】
以下、ＳＳシステムにおける圧縮と、暗号又は重複排除との併用について説明する。
【０２１６】
基本的には、ライト処理時の圧縮処理と、暗号処理又は重複排除処理とを行った順の逆順に同じ主体が、リード処理時の伸張処理と、暗号処理の逆変換である復号処理、又は重複排除処理の逆変換である復元処理とを行うことで読み出す。
【０２１７】
ライト処理時に、圧縮記憶デバイス６００ａが、ＳＴコントローラ４００から受信したデータの圧縮を行った後、暗号化処理又は重複排除化処理を行う場合、リード処理時に、圧縮記憶デバイス６００ａは、復号処理又は復元処理を行い、圧縮されたデータをＳＴコントローラ４００へ送信する。
【０２１８】
復号処理は、ＳＴプロセッサ４２０により行われても良い。この場合、復号処理がＳＴプロセッサ４２０から、ＳＴコントローラ４００内の復号機能付ＦＭへオフロードされても良い。また、ＳＴコントローラ４００内で伸張され、処理が行われたデータは、圧縮伸張機能付ＦＭにより再圧縮されても良い。
【０２１９】
通信ネットワークを介してＳＳシステムに接続されている管理計算機、又はサーバ１００がＳＴコントローラ４００に対しポリシーを予め設定しても良い。ＳＴプロセッサ４２０は、ポリシーに適合するデータをＳＳ接続機構２００によるＤＭＡ伸張処理の対象とせず、ＳＴコントローラ４００に搭載された圧縮伸張機能付ＦＭ、又はＳＴプロセッサ４２０のソフトウェアを用いて、伸張した後に、通常ＤＭＡ処理を行っても良い。ポリシーは、例えば、暗号化され圧縮されて記憶デバイス６００に格納されているデータや、重複排除され圧縮されて記憶デバイス６００に格納されているデータを指す。
【０２２０】
以下、ＳＳシステムが重複排除と圧縮を行う場合について説明する。
【０２２１】
ＳＶプロセッサ１２０が重複排除を行う場合、ライト処理においてＳＳ接続機構２００が、重複排除されたデータを、前述の圧縮ＤＭＡ処理と同様に、圧縮してＳＴコントローラ４００へ転送しても良い。更にＳＳ接続機構２００は、リード処理において前述の伸張ＤＭＡ処理と同様に、ＳＴコントローラ４００からのデータを伸張しても良い。この場合、ＳＶプロセッサ１２０は、データがＳＳ接続機構２００からＳＶメモリ１１０へ転送された後、重複排除されたデータを元のデータに復元する。
【０２２２】
ＳＴプロセッサ４２０が重複排除を行う場合、ライト処理において圧縮記憶デバイス６００ａが、重複排除されたデータを圧縮しても良い。リード処理において圧縮記憶デバイス６００ａは、圧縮データのままＳＴコントローラ４００へ転送する。ＳＴプロセッサ４２０は、圧縮伸張機能付ＦＭ等を用いて圧縮データを伸張し、重複排除されたデータを復元し、復元されたデータを圧縮伸張機能付ＦＭ等を用いて圧縮し、圧縮されたデータに対して伸張ＤＭＡ処理を行う。
【０２２３】
ＳＴプロセッサ４２０が重複排除を行う場合、ライト処理において、圧縮記憶デバイス６００ａ又はＳＴコントローラ４００が対象データを圧縮し、ＳＴプロセッサ４２０が圧縮されたデータの重複排除を実施しても良い。リード処理においてＳＴプロセッサ４２０は、記憶デバイス６００からデータを読み出し、読み出されたデータの重複排除を解除し、解除されたデータに対して伸張ＤＭＡ処理を行う。
【０２２４】
この動作によれば、圧縮だけを行う場合に比べて、サーバ側バスの帯域の使用量を削減でき、他の通信の帯域の使用量を更に削減できる。
【０２２５】
なお、ＳＳシステムは、前述の圧縮及び伸張に代えて、重複排除及び重複排除の解除を行ってもよい。この場合も、圧縮及び伸張を行う場合と同様、サーバ側バスの帯域の使用量、ストレージシステム内の通信の帯域の使用量、記憶装置の記憶容量の使用量を削減できる。
【０２２６】
以下、ＳＳシステムが暗号化と圧縮を行う場合について説明する。
【０２２７】
圧縮記憶デバイス６００ａが圧縮と暗号化を行っても良い。ライト処理において圧縮記憶デバイス６００ａは、記憶容量削減とデータ保護のために、対象データを圧縮し、圧縮されたデータを暗号化して格納する。リード処理において圧縮記憶デバイス６００ａは、格納されたデータを復号し、復号されたデータをＳＴコントローラ４００へ転送する（Ｓ１５３０）。暗号化されたデータを圧縮すると、圧縮率が悪化するため、圧縮記憶デバイス６００ａが圧縮機能と暗号化機能に対応する場合は、圧縮してから暗号化することが望ましい。圧縮機能と暗号化機能に対応する場合に、ＳＳ接続機構２００との伸張ＤＭＡ転送時は、圧縮記憶デバイス６００ａ内で暗号化されたデータを復号後、圧縮されたままデータをＳＴメモリ４１０へ転送し、ＳＳ接続機構２００が伸張しながらデータをサーバメモリへ転送する。
【０２２８】
記憶デバイス６００本体及び、記憶デバイス６００からＳＴコントローラ４００間のパスのデータ保護の観点から、データが記憶デバイス６００からＳＴコントローラ４００まで暗号化されたまま転送されても良い。リード処理においてＳＴコントローラ４００は、圧縮記憶デバイス６００ａから圧縮され暗号化されたデータを読み出し、読み出されたデータを復号し（Ｓ１６１０）、復号されたデータに対して伸張ＤＭＡ処理を行う。ＳＴコントローラ４００において、ＳＴプロセッサ４２０が復号を行っても良いし、ＳＴコントローラ４００が暗号復号専用ハードウェアを有し、当該ハードウェアが復号を行っても良いし、ＳＴコントローラ４００が暗号復号機能付ＦＭを有し、当該ＦＭが復号を行っても良い。
【０２２９】
ストレージシステム３００内のデータ保護の観点から、データが記憶デバイス６００からサーバ１００まで暗号化されたまま転送されても良い。サーバ１００で復号することで、ストレージシステム３００内のデータの格納場所、ストレージシステム３００内のデータのパスより、データの漏洩を防ぎ、データを保護する。リード処理においてＳＶプロセッサ１２０は、ＳＴコントローラ４００からＳＶメモリ１１０へ暗号化されたまま転送されたデータを復号し、復号の完了をＳＴプロセッサ４２０へ通知する。通知に応じてＳＴプロセッサ４２０が、ＳＳ接続機構２００に対してＳＶメモリ１１０内の記憶領域間での伸張ＤＭＡ処理を指示することにより、ＳＳ接続機構２００はＳＶメモリ１１０内のデータを伸張する。なお、ＳＳ接続機構２００が復号機能を有してもよく、この場合は、ＳＴメモリ４１０に格納された圧縮されて暗号化されたデータを伸張ＤＭＡ転送で読み出し、復号して、伸張処理を行った後にＳＶメモリ１１０へ転送してもよい。
【０２３０】
サーバ１００が圧縮伸張のための圧縮伸張回路を含み、サーバ１００が対象データの圧縮及び伸張の処理を担当する場合、ＳＶプロセッサ１２０は、ＳＳ接続機構２００及びＳＴコントローラ４００による圧縮及び伸張が不要であることを示す識別子を、リードコマンド及びライトコマンドに付与する。この場合、ＳＴプロセッサ４２０は、サーバ１００による圧縮及び伸張に必要な情報をＳＶプロセッサ１２０へ送信する。
【０２３１】
この動作によれば、データに対して圧縮と暗号化を行うことにより、ＳＳシステムのＩＯ性能を向上させると共に、ＳＳシステムのセキュリティを向上させることができる。
【０２３２】
ここでは、サーバ１００が復号回路を含む場合で、復号回路が復号を行い、ＳＳ接続機構２００が伸張を行う場合について説明する。復号回路は、復号機能付ＦＭであっても良いし、復号機能を有する圧縮伸張機能付ＦＭであっても良い。
【０２３３】
図４４は、サーバ１００による復号とＳＳ接続機構２００による伸張を行う場合のリード処理の中の第一処理を示し、図４５は、サーバ１００による復号とＳＳ接続機構２００による伸張を行う場合のリード処理の中の第一処理の後の第二処理を示す。
【０２３４】
前述のリード処理と同様にして、Ｓ１６１０までの処理が行われる。但し、ＳＴメモリ４１０には、圧縮データに代えて、圧縮後に暗号化された圧縮後暗号化データが格納されている。Ｓ５６２０においてＳＴプロセッサ４２０は、サーバ転送後伸張ＤＭＡ処理を要求するサーバ転送後伸張ＤＭＡリクエストをＩＦプロセッサ２１０へ発行する。サーバ転送後伸張ＤＭＡ処理は、通常ＤＭＡ処理と、転送後伸張ＤＭＡ処理とを含む。ここでの通常ＤＭＡ処理は、ＳＴコントローラ４００内のＳＴメモリ４１０から対象データの圧縮後暗号化データを読み出し、サーバ１００内のＳＶメモリ１１０へ当該圧縮後暗号化データを書き込む。転送後伸張ＤＭＡ処理は、サーバ１００内のＳＶメモリ１１０から対象データの圧縮データを読み出し、当該圧縮データを伸張して非圧縮データを生成し、サーバ１００内のＳＶメモリ１１０へ当該非圧縮データを書き込む。
【０２３５】
Ｓ５７１０においてＩＦプロセッサ２１０は、ＳＴプロセッサ４２０からキューイングされた転送後伸張ＤＭＡリクエストを解析するＤＭＡリクエスト処理を行う。Ｓ５７２０においてＩＦプロセッサ２１０は、ＳＴメモリ４１０内の圧縮情報ＳＧＬを取得する。Ｓ５７３０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０の通常ＤＭＡ処理を起動する。Ｓ５７４０においてＤＭＡコントローラ２２０は、ＩＦプロセッサ２１０からの指示に基づいて通常ＤＭＡ処理を行うことにより、ＳＴコントローラ４００内のＳＴ領域に格納されている圧縮後暗号化データを読み出し、サーバ１００内のＳＶ領域へ書き込む。Ｓ５７５０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０から通常ＤＭＡ処理完了の通知を受ける。Ｓ５７６０においてＩＦプロセッサ２１０は、オートレスポンスを用いてリードレスポンスをＳＶプロセッサ１２０へ発行する。
【０２３６】
Ｓ５８１０においてＳＶプロセッサ１２０は、ＩＦプロセッサ２１０からキューイングされたリードレスポンスに応じて、処理をＳ６１１０（図中のＢ）へ移行させる。
【０２３７】
Ｓ６１１０においてＳＶプロセッサ１２０は、復号回路を用いて圧縮後暗号化データを復号する復号処理を行うことにより、圧縮後暗号化データを圧縮データに変換し、圧縮データをＳＶメモリ１１０内のＳＶＲ領域へ保存する。Ｓ６１２０においてＳＶプロセッサ１２０は、転送後ＤＭＡ処理を要求する転送後伸張ＤＭＡリクエストをＩＦプロセッサ２１０へ発行する。
【０２３８】
Ｓ６１３０においてＩＦプロセッサ２１０は、ＳＶプロセッサ１２０からキューイングされた転送後伸張ＤＭＡリクエストを解析する転送後伸張ＤＭＡリクエスト処理を行う。Ｓ６７２０においてＩＦプロセッサ２１０は、ＳＴメモリ４１０内の圧縮情報ＳＧＬを取得する。Ｓ６７３０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０の伸張ＤＭＡ処理を起動する。Ｓ６７４０においてＤＭＡコントローラ２２０は、ＩＦプロセッサ２１０からの指示に基づいて伸張ＤＭＡ処理を行うことにより、サーバ１００内のＳＶＲ領域に格納されている圧縮データを読み出して伸張し、得られる非圧縮データをサーバ１００内のＳＶ領域へ書き込む。Ｓ６７５０においてＩＦプロセッサ２１０は、ＤＭＡコントローラ２２０から伸張ＤＭＡ処理完了の通知を受ける。Ｓ６７６０においてＩＦプロセッサ２１０は、転送後伸張ＤＭＡリクエストに対する転送後伸張ＤＭＡレスポンスをＳＶプロセッサ１２０へ発行する。
【０２３９】
Ｓ６８１０においてＳＶプロセッサ１２０は、ＩＦプロセッサ２１０からキューイングされたリードレスポンスに応じてリード処理を完了する。
【０２４０】
Ｓ６７７０においてＩＦプロセッサ２１０は、サーバ転送後伸張ＤＭＡリクエストに対するサーバ転送後伸張ＤＭＡレスポンスをＳＴプロセッサ４２０へ発行する。Ｓ６９１０においてＳＴプロセッサ４２０は、ＩＦプロセッサ２１０からキューイングされたサーバ転送後伸張ＤＭＡレスポンスを解析するサーバ転送後伸張ＤＭＡレスポンス処理を行う。Ｓ６９２０においてＳＴプロセッサ４２０は、ＳＴ領域を解放する。Ｓ６９３０においてＳＴプロセッサ４２０は、リード処理を完了する。
【０２４１】
以上がサーバ１００による復号とＳＳ接続機構２００による伸張を行う場合のリード処理である。
【０２４２】
この動作によれば、リード処理において圧縮記憶デバイス６００ａからＳＳ接続機構２００までの経路においてデータが暗号化され、セキュリティを向上させることができる。また、サーバ１００が復号処理を行い、ＳＳ接続機構２００が伸張処理を行うことにより、負荷を分散させることができる。なお、復号処理もＳＳ接続機構２００が実施しても良い。
【０２４３】
以上の各実施例によれば、サーバ１００がストレージシステム３００からデータをリードする場合に、サーバ１００及びストレージシステム３００に接続されたインタフェースデバイス（中継デバイス、ＳＳ接続機構２００）がＳＴコントローラ４００から圧縮データを読み出すことにより、ストレージシステム３００が有する物理的な帯域の使用量を低減することができる。また、サーバ１００がストレージシステム３００へデータをライトする場合に、インタフェースデバイスが圧縮データをＳＴコントローラ４００へ書き込むことにより、ストレージシステム３００が有する物理的な帯域の使用量を低減することができる。これにより、サーバ１００からストレージシステム３００へのアクセスにおけるレスポンスタイムを低減することができる。
【０２４４】
以上、サーバ１００とストレージシステム３００間のＳＳ接続機構２００を介するデータ転送について示したが、図４６に示されるように、ＳＳ接続機構２００はサーバ１００とサーバ１００の間を接続し（サーバ・サーバ間接続）、データ転送に用いても良い。この場合、ＳＶメモリ１１０またはサーバ１００に搭載されたフラッシュメモリ１４０に格納されている圧縮データをもう一方のサーバ１００のＳＶメモリ１１０またはフラッシュメモリ１４０に転送する際に、転送先のＳＳ接続機構２００で前述した伸張ＤＭＡ転送と同様の手順で伸張ＤＭＡ転送する。これにより、サーバ・サーバ間の転送を広帯域化でき、クラスタ間転送時など、高速に実施できる。
【０２４５】
また、図４７に示されるように、ストレージシステム３００ａとストレージシステム３００ａの間をＳＳ接続機構２００を介して接続し（ストレージ・ストレージ間接続）、データ転送に用いても良い。この場合ストレージシステム３００ａの記憶デバイスまたはＳＴメモリ４１０またはＳＴコントローラ４００ａに搭載されたストレージ搭載フラッシュメモリ４４０に格納されている圧縮データをもう一方のストレージシステム３００ａの記憶デバイス６００またはＳＴメモリ４１０またはストレージ搭載フラッシュメモリ４４０に転送する際に、転送先のＳＳ接続機構２００で前述した伸張ＤＭＡ転送と同様の手順で伸張ＤＭＡ転送する。これによりストレージシステム４００ａとストレージシステム３００ａの間の転送を広帯域化でき、外接ストレージからのデータ読み出し転送や、アーカイブストレージからのデータ読み出しを高速に実施できる。
【０２４６】
また、前述のサーバ・サーバ間接続、ストレージ・ストレージ間接続にＳＳ接続機構２００を用いる方法において、圧縮ＤＭＡ転送を実施してもよい。
【０２４７】
本発明は、以上の実施例に限定されるものでなく、その趣旨から逸脱しない範囲で、他の様々な形に変更することができる。
【０２４８】
例えば計算機システムにおけるプロセッサとメモリの間のＩ／ＦにＳＳ接続機構２００を搭載し、メモリに格納された圧縮データを同様の方法でＳＳ接続機構２００が読み出しプロセッサに伸張してわたしても良い。
計算機システムは、ＳＳシステム等を含んでも良い。計算機システムは、ストレージモジュールとして、ストレージシステム３００等を含んでも良い。計算機システムは、サーバモジュールとして、サーバ１００等を含んでも良い。計算機システムは、インタフェースデバイスとして、ＳＳ接続機構２００や中継デバイス等を含んでも良い。計算機システムは、記憶デバイスとして、圧縮記憶デバイス６００ａ等を含んでも良い。記憶デバイスは、コントローラとして、ＳＤコントローラ６１０等を含んでも良い。コントローラは、逆変換機能として、圧縮・伸張デバイス６１４等を含んでも良い。記憶デバイスは、メモリとして、ＦＭ６２０等を含んでも良い。計算機システムは、変換機能として、圧縮デバイス２２１等を含んでも良い。計算機システムは、逆変換機能として、伸張デバイス２２２等を含んでも良い。計算機システムは、変換回路として、圧縮・伸張デバイス６１４、圧縮伸張機能付ＦＭ、ＳＴプロセッサ４２０等を含んでも良い。計算機システムは、例えば、変換として圧縮を用い逆変換として伸張を用いても良い。計算機システムは、例えば、変換として重複排除を用いて、逆変換として重複排除の復元を用いても良い。計算機システムは、変換後対象データとして圧縮データ等を用いても良い。計算機システムは、逆変換結果データとして非圧縮データ等を用いても良い。計算機システムは、逆変換指示として伸張ＤＭＡリクエスト等を用いても良い。計算機システムは、転送元アドレスとして、圧縮情報ＳＧＬ等を用いても良い。インタフェースデバイスからストレージコントローラへのリードコマンドに対し、ストレージコントローラからインタフェースデバイスへの返信として、伸張ＤＭＡリクエスト及び圧縮情報ＳＧＬ等が用いられても良い。計算機システムは、変換指示として圧縮ＤＭＡリクエスト等を用いても良い。計算機システムは、読み出し指示として通常ＤＭＡレスポンス等を用いても良い。計算機システムは、逆変換が成功である旨を示す応答として伸張ＤＭＡレスポンス等を用いても良い。計算機システムは、第一保障コードとして、非圧縮データの保証コード等を用い、第一保障コードの期待値として、非圧縮保証コード情報等を用いても良い。計算機システムは、第二保障コードとして、圧縮データの保証コード等を用い、第二保障コードの期待値として、圧縮保証コード情報等を用いても良い。サーバプロセッサとインタフェースデバイスとを接続するバスとして、サーバ側バス等が用いられても良い。インタフェースデバイスとストレージプロセッサとを接続するバスとして、ストレージ側バス等が用いられても良い。
【符号の説明】
【０２４９】
１００…サーバ１００  １１０…ＳＶメモリ  １２０…ＳＶプロセッサ  ２００…ＳＳ接続機構  ２１０…ＩＦプロセッサ  ２２０…ＤＭＡコントローラ  ３００…ストレージシステム  ４００…ＳＴコントローラ  ４１０…ＳＴメモリ  ４２０…ＳＴプロセッサ  ４３０…ディスクＩ／Ｆ  ５００…記憶装置  ６００…記憶デバイス  ６１０…ＳＤコントローラ  ６２０…ＦＭ  ７００…インタフェース拡張装置
【図１】
2015181902.tif 000003
【図２】
2015181902.tif 000004
【図３】
2015181902.tif 000005
【図４】
2015181902.tif 000006
【図５】
2015181902.tif 000007
【図６】
2015181902.tif 000008
【図７】
2015181902.tif 000009
【図８】
2015181902.tif 000010
【図９】
2015181902.tif 000011
【図１０】
2015181902.tif 000012
【図１１】
2015181902.tif 000013
【図１２】
2015181902.tif 000014
【図１３】
2015181902.tif 000015
【図１４】
2015181902.tif 000016
【図１５】
2015181902.tif 000017
【図１６】
2015181902.tif 000018
【図１７】
2015181902.tif 000019
【図１８】
2015181902.tif 000020
【図１９】
2015181902.tif 000021
【図２０】
2015181902.tif 000022
【図２１】
2015181902.tif 000023
【図２２】
2015181902.tif 000024
【図２３】
2015181902.tif 000025
【図２４】
2015181902.tif 000026
【図２５】
2015181902.tif 000027
【図２６】
2015181902.tif 000028
【図２７】
2015181902.tif 000029
【図２８】
2015181902.tif 000030
【図２９】
2015181902.tif 000031
【図３０】
2015181902.tif 000032
【図３１】
2015181902.tif 000033
【図３２】
2015181902.tif 000034
【図３３】
2015181902.tif 000035
【図３４】
2015181902.tif 000036
【図３５】
2015181902.tif 000037
【図３６】
2015181902.tif 000038
【図３７】
2015181902.tif 000039
【図３８】
2015181902.tif 000040
【図３９】
2015181902.tif 000041
【図４０】
2015181902.tif 000042
【図４１】
2015181902.tif 000043
【図４２】
2015181902.tif 000044
【図４３】
2015181902.tif 000045
【図４４】
2015181902.tif 000046
【図４５】
2015181902.tif 000047
【図４６】
2015181902.tif 000048
【図４７】
2015181902.tif 000049
【国際調査報告】
2015181902.tif 000050
2015181902.tif 000051