(57)【要約】  本願で開示する代表的な発明は以下の通りである。サーバと圧縮機能を有するストレージとを有するストレージシステムであって、サーバは制御部とキャッシュとを有し、ストレージは複数の記憶装置によって提供される記憶領域を有する。サーバの制御部は、受信したリード要求の指定データがキャッシュに格納されている場合には当該格納データを上記リード要求への応答として返し、指定データがキャッシュに格納されていない場合には、圧縮機能によって圧縮されて上記記憶領域に格納される指定データを圧縮されたままストレージから取得し、当該取得した圧縮データを伸張してリード要求の返信として返すストレージシステム。
2013186828.tif 000002
【特許請求の範囲】
【請求項１】
サーバと圧縮機能を有するストレージとを有する計算機システムであって、
上記サーバは制御部とキャッシュとを有し、
上記ストレージは複数の記憶装置によって提供される記憶領域を有し、
上記サーバの制御部は、受信したリード要求の指定データが上記キャッシュに格納されている場合には当該格納データを上記リード要求への応答として返し、
上記指定データが上記キャッシュに格納されていない場合には、上記圧縮機能によって圧縮されて上記記憶領域に格納される上記指定データを圧縮されたまま上記ストレージから取得し、当該取得した圧縮データを伸張して上記リード要求の返信として返すことを特徴とする計算機システム。
【請求項２】
請求項１記載の計算機システムであって、
上記サーバの制御部は、上記受信したリード要求の指定データが上記キャッシュに圧縮されて格納されている場合には当該格納データを伸張して上記リード要求への応答として返すことを特徴とする計算機システム。
【請求項３】
請求項１記載の計算機システムであって、
上記指定データが上記キャッシュに格納されていない場合には、上記指定データを圧縮されたまま上記ストレージから取得した上記指定データを上記キャッシュに格納することを特徴とする計算機システム。
【請求項４】
請求項１記載の計算機システムであって、
上記指定データが予め圧縮要とされるオブジェクトである場合には上記指定データを圧縮されたまま上記ストレージから取得した上記指定データを上記キャッシュに格納し、
上記指定データが予め圧縮要とされていないオブジェクトである場合には伸張した上記指定データを上記キャッシュに格納することを特徴とする計算機システム。
【請求項５】
請求項１記載の計算機システムであって、
上記キャッシュに圧縮された状態で格納されているデータへのアクセス回数が所定値を超えた場合には当該データを伸張して上記キャッシュに格納し直すことを特徴とする計算機システム。
【請求項６】
請求項１記載の計算機システムであって、
上記サーバの制御部は、受信したライト要求の指定データは上記キャッシュに格納することなく、上記ライト要求終了の通知を返すことを特徴とする計算機システム。
【請求項７】
請求項６記載の計算機システムであって、
上記サーバの制御部は、上記ライト要求の指定データが予め圧縮不要と規定されているオブジェクトであれば上記指定データを上記キャッシュに格納することを特徴とする計算機システム。
【請求項８】
請求項１記載の計算機システムであって、上記ストレージの有する複数の記憶装置はフラッシュメモリデバイスを有し、
上記ストレージの圧縮機能は上記フラッシュメモリデバイスの制御部が実現することを特徴とする請求項１記載の計算機システム。
【請求項９】
請求項１記載の計算機システムであって、
上記サーバの制御部は、上記リード要求に圧縮したままのデータ読み出しを要求するフラグを挿入し、
上記ストレージは、上記フラグが含まれているリード要求を受け付けると、圧縮したデータを上記サーバに送信することを特徴とする計算機システム。
【請求項１０】
請求項１記載の計算機システムであって、
上記ストレージは、上記記憶領域の一部である第１の記憶領域にともに対応づけられる第１の仮想ボリュームと第２の仮想ボリュームを提供し、
上記第１の仮想ボリュームへのライト要求の指定データは上記圧縮機能によって圧縮されて上記第１の仮想ボリュームに対応づけられる上記記憶領域に格納され、
上記サーバの制御部は、
上記リード要求が上記第２の仮想ボリュームを指定している場合には、圧縮されて格納される上記指定データを圧縮したまま取得し、
上記リード要求が上記第１の仮想ボリュームを指定している場合には、圧縮されて格納される上記指定データを伸張して形で取得することを特徴とする計算機システム。
【請求項１１】
請求項１０記載の計算機システムであって、
上記サーバの制御部は、上記リード要求の処理前に、上記第１の仮想ボリュームの上記第２の仮想ボリュームの対応関係を取得することを特徴とする計算機システム。
【請求項１２】
サーバとストレージとを有する計算機システムであって、
上記サーバは制御部とキャッシュを有し、さらに、複数の仮想マシンを提供し、
上記ストレージは上記複数の仮想マシン各々に１つずつ対応づけられた複数の仮想ボリュームと、上記複数の仮想ボリュームに対応づけられた１のベースボリュームと差分ボリュームとを提供し、
上記差分ボリュームは、上記複数の仮想ボリュームに対応づけられた上記仮想マシンによる上記ベースボリュームに格納されるデータへの変更データを格納し、
１の上記仮想マシンからのリード要求の指定領域に格納されているデータが上記キャッシュに格納されていない場合には、上記ストレージから上記仮想ボリュームと上記ベースボリュームと上記差分ボリュームとの対応関係情報を取得し、
上記リード要求の指定する上記データが既に上記キャッシュに格納されていると上記対応関係情報に基づいて判定した場合には、上記データを上記キャッシュ格納しないことを特徴とする計算機システム。
【請求項１３】
サーバと圧縮機能を有するストレージとを有する計算機システムの制御方法であって、
上記サーバは制御部とキャッシュとを有し、
上記ストレージは複数の記憶装置によって提供される記憶領域を有し、
上記サーバの制御部は、受信したリード要求の指定データが上記キャッシュに格納されている場合には当該格納データを上記リード要求への応答として返し、
上記指定データが上記キャッシュに格納されていない場合には、上記圧縮機能によって圧縮されて上記記憶領域に格納される上記指定データを圧縮されたまま上記ストレージから取得し、当該取得した圧縮データを伸張して上記リード要求の返信として返すことを特徴とする計算機システムの制御方法。
【請求項１４】
請求項１３記載の計算機システムの制御方法であって、
記指定データが上記キャッシュに格納されていない場合には、上記指定データを圧縮されたまま上記ストレージから取得した上記指定データを上記キャッシュに格納することを特徴とする計算機システムの制御方法。
【請求項１５】
請求項１３記載の計算機システムの制御方法であって、
上記指定データが予め圧縮要とされるオブジェクトである場合には上記指定データを圧縮されたまま上記ストレージから取得した上記指定データを上記キャッシュに格納し、
上記指定データが予め圧縮要とされていないオブジェクトである場合には伸張した上記指定データを上記キャッシュに格納することを特徴とする計算機システムの制御方法。
【請求項１６】
請求項１３記載の計算機システムの制御方法であって、
上記キャッシュに圧縮された状態で格納されているデータへのアクセス回数が所定値を超えた場合には当該データを伸張して上記キャッシュに格納し直すことを特徴とする計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はキャッシュ制御に関するものであり、特に限られたキャッシュ空間を効率的に活用する技術に関する。
【背景技術】
【０００２】
サーバに搭載するフラッシュメモリドライブが普及してきている。フラッシュメモリドライブはHDD（Hard Disk Drive）よりも高性能である。HDDを搭載する共有ストレージを使用する場合において、フラッシュメモリドライブをリードキャッシュとしてサーバに搭載することによりリード性能を大幅に向上することが可能となる。より、リード性能を向上するためにはキャッシュヒット率を向上させる必要がある。そのためにはより多くのフラッシュメモリドライブをサーバに搭載すればよい。【０００３】
しかしながら、フラッシュメモリドライブを搭載するためのスロット数には限りがある。共有ストレージは数百テラバイトから数ペタバイトの容量をサーバに提供するのに対し、1台のフラッシュメモリドライブが提供する容量は数百ギガバイトから数テラバイトである。共有ストレージが提供するボリュームの容量よりもフラッシュメモリドライブの容量は小さいことから、リード性能を向上するためには限られたフラッシュメモリドライブの容量を効率的に活用しなければならない。【０００４】
フラッシュメモリドライブの容量を効率的に活用する方式の1つとしてキャッシュデータを圧縮することが挙げられる。データを圧縮してからキャッシュすることにより、より多くのデータをフラッシュメモリドライブに格納することが可能となる。しかしながら、データの圧縮処理をサーバ上で実行し、圧縮処理はCPU（Central  Processing  Unit）やメモリを多く消費するため、サーバ上で動作しているアプリケーションの性能に悪影響を与えることがある（特許文献１）。【０００５】
また、仮想マシンを配備するためにOSやアプリケーションが格納されたボリュームのスナップショットを取得し、仮想マシンに割り当てることができる。このときに仮想マシンに割り当てられたボリュームはベースとなる同じボリュームを参照している（特許文献２）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第US2005/0015374号明細書
【特許文献２】米国特許出願公開第US2011/0088029号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、サーバに搭載するフラッシュメモリドライブをキャッシュとして使用する場合において、サーバ上で動作しているアプリケーションの性能に悪影響を与えることなく、より多くのデータをキャッシュすることである。【０００８】
具体的には、キャッシュするデータの圧縮処理をサーバ負荷をかけずに行う。更には、上記複数の仮想ボリュームが同じベースボリュームに対応づけられているようなシステムにおいて、同じデータをキャッシュに重複格納することを防止する。
【課題を解決するための手段】
【０００９】
本願で開示する代表的な発明は以下の通りである。サーバと圧縮機能を有するストレージとを有するストレージシステムであって、サーバは制御部とキャッシュとを有し、ストレージは複数の記憶装置によって提供される記憶領域を有する。サーバの制御部は、受信したリード要求の指定データがキャッシュに格納されている場合には当該格納データを上記リード要求への応答として返し、指定データがキャッシュに格納されていない場合には、圧縮機能によって圧縮されて上記記憶領域に格納される指定データを圧縮されたままストレージから取得し、当該取得した圧縮データを伸張してリード要求の返信として返すストレージシステム、及びその制御方法。【００１０】
又は、サーバが制御部とキャッシュを有して、複数の仮想マシンを提供する計算機システムであって、ストレージは複数の仮想マシン各々に1つずつ対応づけられた複数の仮想ボリュームと、複数の仮想ボリュームに対応づけられた１のベースボリュームと差分ボリュームとを提供する。差分ボリュームは、複数の仮想ボリュームに対応づけられた仮想マシンによる上記ベースボリュームに格納されるデータへの変更データを格納する。１の仮想マシンからのリード要求の指定領域に格納されているデータが上記キャッシュに格納されていない場合には、ストレージから仮想ボリュームとベースボリュームと差分ボリュームとの対応関係情報を取得して、データが既に上記キャッシュに格納されていると判定した場合には、データをキャッシュに格納しない。
【発明の効果】
【００１１】
本発明によれば、圧縮処理のような大きな負荷をサーバにかけることなくサーバのキャッシュ容量を効率的に活用することができる。さらに、ストレージからサーバにデータを送信するときに圧縮されたまま送信するため、SANにかかる負荷を削減できる。
【図面の簡単な説明】
【００１２】
【図１】図１は実施例1の概要を示す。
【図２】図２は実施例１における計算機システム構成の一例を示す。
【図３】図３はアプリケーションサーバ300上のメモリ302に格納されたデータの一例を示す。
【図４】図４はストレージシステム360上のメモリ365に格納されたデータの一例を示す。
【図５】図５はストレージシステム360上の圧縮機能付きフラッシュメモリデバイス367の構成の一例を示す。
【図６】図６はオブジェクト位置情報403の一例を示す。
【図７】図７はキャッシュ制御情報405の一例を示す。
【図８】図８はRAIDグループ情報502の一例を示す。
【図９】図９は論理ボリューム情報503の一例を示す。
【図１０】図１０はプール情報504の一例を示す。
【図１１】図１１は仮想ボリューム情報505の一例を示す。
【図１２】図１２は階層定義情報506の一例を示す。
【図１３】図１３はオブジェクト圧縮ポリシ情報406の一例を示す。
【図１４】図１４はオブジェクト圧縮ポリシ入力画面407の一例を示す。
【図１５】図１５はフラッシュメモリ制御情報606の一例を示す。
【図１６】図１６はリード命令1700の一例を示す。
【図１７】図１７はリード応答1800の一例を示す。
【図１８】図１８はリード応答データ1900の一例を示す。
【図１９】図１９はライト命令2000の一例を示す。
【図２０】図２０は仮想ボリューム、論理ボリューム、RAIDグループ、圧縮機能付きフラッシュメモリデバイス367内の論理領域、圧縮機能付き367内の物理領域の対応関係の一例を示す。
【図２１】図２１は、データベースプログラム402がリードするときの処理の流れの一例を示す
【図２２】図２２は、データベースプログラム402がリードするときの処理の流れの一例を示す。
【図２３】図２３はデータベースプログラム402がライトするときの処理の流れの一例を示す。
【図２４】図２４はアプリケーションサーバ300がストレージシステム360からデータを読み込む、またはデータを書き込むときのストレージシステム360内の処理の流れの一例を示す。
【図２５】図２５はストレージコントローラ363がアクセス量が多いページを高階層に移動し、アクセス量が少ないページを低階層に移動する処理の流れの一例を示す。
【図２６】図２６はストレージコントローラ363がリード命令1700を圧縮機能付きフラッシュメモリデバイス367に送信するときの圧縮機能付きフラッシュメモリデバイス367内の処理の流れの一例を示す。
【図２７】図２７はストレージコントローラ363がライト命令2000を圧縮機能付きフラッシュメモリデバイス367に送信するときの圧縮機能付きフラッシュメモリデバイス367内の処理の流れの一例を示す。
【図２８】図２８は実施例２の概要を示す図である。
【図２９】図２９はGET LBA STATUS命令3000の一例を示す。
【図３０】図３０はGET LBA STATUS応答3100の一例を示す。
【図３１】図３１はGET LBA STATUS応答データ3200の一例を示す。
【図３２】図３２はキャッシュ制御プログラム404がストレージシステム360からリードするときの処理の流れの一例を示す。
【図３３】図３３はストレージコントローラ363が圧縮機能付きフラッシュメモリデバイス367からリードするときの処理の流れの一例を示す。
【図３４】図３４は実施例3における計算機システムの構成の一例を示す。
【図３５】図３５はキャッシュ制御情報3506の一例を示す。
【図３６】図３６はスナップショットボリューム制御情報3512の一例を示す。
【図３７】図３７はVM 3502がリードするときの処理の流れの一例を示す。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面に基づいて説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【００１４】
本願の概要（図１）は以下の通りである。本システムは、データベースプログラム402とキャッシュ制御プログラム404が動作するアプリケーションサーバ300と、圧縮機能607を備えたストレージシステム360が通信ネットワークを介して接続された計算機システムである。データベースプログラム402からのリード命令をキャッシュ制御プログラム404が受信し、リード対象データがキャッシュされているか判断する。
【００１５】
キャッシュされていない場合はストレージシステム360が圧縮したデータをキャッシュ制御プログラム404が読み込み、キャッシュ制御プログラム404が読み込んだデータを伸張し、データベースプログラム402に送信する。キャッシュ制御プログラム404は圧縮されたデータをフラッシュメモリドライブ306にキャッシュし、リード対象データがキャッシュされている場合は、フラッシュメモリドライブ306から圧縮されたキャッシュデータを読み込み、伸張し、データベースプログラム402に送信する。
【実施例１】
【００１６】
図２は実施例1における計算機システムの構成を示す。本計算機システムは、アプリケーションサーバ300、SAN（Storage Area Network）320、LAN（Local Area Network）340、ストレージシステム360を備える。CPU 301は、アプリケーションサーバ300が起動するときにHDD 303に格納されたプログラムおよびデータをメモリ302にロードし、プログラムを実行する。【００１７】
メモリ302はCPU 301が実行するプログラムおよびそのプログラムが読み書きするデータを格納する。HDD 303は、アプリケーションサーバ300が起動するときにCPU 301が読み込むプログラムとデータを格納する。SANインタフェース304は、アプリケーションサーバ300とSAN 320を接続するインタフェースである。LANインタフェース305は、アプリケーションサーバ300とLAN 340を接続するインタフェースである。フラッシュメモリドライブ306は、ストレージシステム360から読み込んだデータおよび書き込んだデータをキャッシュするために使用される。【００１８】
SAN 320は、アプリケーションサーバ300とストレージシステム360を接続するネットワークである。アプリケーションサーバ300上のアプリケーションは、リード命令およびライト命令をSAN 320を介してストレージシステム360に送信し、応答を受信する。LAN 340は、アプリケーションサーバ300とストレージシステム360を接続する管理用ネットワークである。【００１９】
LAN 340は、管理のためのデータ通信に使用される。ストレージシステム360は、SANインタフェース361、LANインタフェース362、ストレージコントローラ363、デバイスインタフェース366、圧縮機能付きフラッシュメモリデバイス367、HDD 368を備える。SANインタフェース361は、ストレージシステム360とSAN 320を接続するインタフェースである。【００２０】
LANインタフェース362は、ストレージシステム360とLAN 340を接続するインタフェースである。ストレージコントローラ363は、CPU 364とメモリ365を備える。ストレージコントローラ363は、アプリケーション300からリード命令およびライト命令を受信し、圧縮機能付きフラッシュメモリデバイス367およびHDD 368にリード命令およびライト命令を送信し、制御する機能を備える。CPU 364は、メモリ365に格納されたプログラムを実行する。【００２１】
メモリ365は、CPU 364が実行するプログラム及びデータを格納する。デバイスインタフェース366は、ストレージコントローラ363と、圧縮機能付きフラッシュメモリデバイス367およびHDD 368を接続するインタフェースである。圧縮機能付きフラッシュメモリデバイス367は、データを圧縮及び伸張する機能を備えるフラッシュメモリデバイスである。【００２２】
圧縮機能付きフラッシュメモリデバイス367にデータを書き込むと、圧縮機能付きフラッシュメモリデバイス367は書き込まれたデータを圧縮する機能を備える。データを読み込むときに圧縮機能付きフラッシュメモリデバイス367が圧縮されたデータを伸張する。圧縮機能付きフラッシュメモリデバイス367に記録された圧縮されたデータを伸張せずに読み出す機能も備える。HDD 368は、データを保持するデバイスである。ストレージコントローラ363は、圧縮機能付きフラッシュメモリデバイス367およびHDD 368に対してデータの読み書きをする。【００２３】
図３は、アプリケーションサーバ300上のメモリ302に格納されたデータを示す。OSプログラム401は、データベースプログラム402を実行するプログラムである。データベースプログラム402は、ストレージシステム360からデータを読み込み、計算し、ストレージシステム360に計算結果を書き込むアプリケーションの一例である。【００２４】
オブジェクト位置情報403は、データベースプログラム402が記録する情報の位置を管理するための情報である。キャッシュ制御プログラム404は、アプリケーションサーバ300がストレージシステム360から読み込んだデータおよび書き込んだデータをフラッシュメモリドライブ306にキャッシュし、アプリケーションサーバ300が再度同じ領域から読み込む場合にストレージシステム360から読み込まずにフラッシュメモリドライブ306から読み込むプログラムである。【００２５】
キャッシュ制御情報405は、フラッシュメモリドライブ306にキャッシュされているデータの情報である。キャッシュ制御プログラム404がキャッシュ制御情報405を管理する。オブジェクト圧縮ポリシ情報406は、フラッシュメモリドライブ306にキャッシュするときに圧縮したままキャッシュするかオブジェクト種別ごとに設定するための情報である。オブジェクト圧縮ポリシ入力画面407は、管理者がオブジェクト圧縮ポリシ情報406を入力するために使用する画面である。伸張プログラム408は圧縮されたデータを伸張するプログラムである。【００２６】
図４は、ストレージシステム360上のメモリ365に格納されたデータを示す。デバイス制御プログラム501は、アプリケーションサーバ300からのリード命令およびライト命令に従い圧縮機能付きフラッシュメモリデバイス367およびHDD 368にリード命令およびライト命令を送信し、制御するプログラムである。RAID（Redundant  Arrays  of Inexpensive  Disks または Redundant  Arrays  of  Independent  Disks）グループ情報502は、圧縮機能付きフラッシュメモリデバイス367およびHDD 368から構成されるRAIDグループの構成を管理するための情報である。【００２７】
論理ボリューム情報503は、論理ボリュームとRAIDグループを対応付ける情報である。プール情報504は、プールと論理ボリュームを対応付ける情報である。仮想ボリューム情報505は、仮想ボリュームと論理ボリュームを対応付ける情報である。階層定義情報506は、階層とメディアを対応付ける情報である。ページ移動プログラム507は、圧縮機能付きフラッシュメモリデバイス367に格納されたデータをHDD368に移動し、HDD 368に格納されたデータを圧縮機能付きフラッシュメモリデバイス367に移動する。【００２８】
図５は、ストレージシステム360上の圧縮機能付きフラッシュメモリデバイス367の構成を示す。デバイスインタフェース601は、圧縮機能付きフラッシュメモリデバイス367とストレージコントローラ363を接続するためのインタフェースである。フラッシュメモリコントローラ602は、ストレージコントローラ363からリード命令およびライト命令を受信し、フラッシュメモリ609に対してデータの読み書きを行う。フラッシュメモリコントローラ602は、CPU 603、メモリ604を備える。【００２９】
CPU 603は、メモリ604に格納されたプログラムを実行する。メモリ604は、CPU 603が実行するプログラム及びデータを格納する。メモリ604は、フラッシュメモリ制御プログラム605、フラッシュメモリ制御情報606、圧縮・伸張プログラム607を備える。フラッシュメモリ制御プログラム605は、ストレージコントローラ363からのリード命令およびライト命令に従い、フラッシュメモリ609に対してデータの読み書きを行い、フラッシュメモリ制御情報606を管理する。【００３０】
フラッシュメモリ制御情報606は、圧縮機能付きフラッシュメモリデバイス367外に見せる論理アドレスとフラッシュメモリ609上の物理アドレスを対応付ける情報である。フラッシュメモリインタフェース608は、フラッシュメモリコントローラ602とフラッシュメモリ609を接続するインタフェースである。フラッシュメモリ609は、データを保持する不揮発メモリである。【００３１】
図６は、アプリケーションサーバ300上のメモリ302に格納されたオブジェクト位置情報403を示す。オブジェクト位置情報403は、オブジェクト名701、オブジェクト種別702、LBA（Logical Block Address）703、長さ704、ボリューム名705、LBA 706、長さ707を備える。データベースプログラム402が、オブジェクト名701、LBA 703、長さ704により特定されるオブジェクトのデータを、ボリューム名705、LBA 706、長さ707により特定されるストレージシステム360上の領域に格納したことを示す。データベースプログラム402が処理するオブジェクトを新たに作成するとき、削除するとき、およびオブジェクトのデータ容量が大きくなる時にデータベースプログラム402がオブジェクト位置情報403を更新する。【００３２】
図７は、アプリケーションサーバ300上のメモリ302に格納されたキャッシュ制御情報405を示す。キャッシュ制御情報405は、ボリューム名801、LBA 802、長さ803、圧縮済み804、圧縮アルゴリズム805、キャッシュデータボリューム名806、LBA 807、長さ808、アクセス数809、時間810を備える。【００３３】
キャッシュ制御プログラム404は、ボリューム名801、LBA 802、長さ803により特定されるストレージシステム360上の領域を、キャッシュデータボリューム名806、LBA 807、長さ808により特定されるフラッシュメモリドライブ306にキャッシュし、キャッシュしたデータが有効であることを示す。圧縮済み804が「Yes」の場合は、キャッシュされたデータは圧縮アルゴリズム805で指定されたアルゴリズムにより圧縮されていることを示す。圧縮済み804が「No」の場合はキャッシュされたデータは圧縮されていないことを示す。アクセス数809は、キャッシュされたデータにアクセスした回数を示す。時間810は最後にキャッシュされたデータにアクセスされた時刻を示す。【００３４】
図８は、ストレージシステム360上のメモリ365に格納されたRAIDグループ情報502を示す。RAIDグループ情報502は、RAIDグループ名901、メディア名902、RAIDレベル903、メディア種別904、容量905を備える。RAIDグループ名901はRAIDグループの名称を示す。メディア名902はRAIDグループを構成するメディアを示す。RAIDレベル903はRAIDレベルを示す。メディア種別904はRAIDグループを構成するメディアの種別を示す。容量905はRAIDグループの容量を示す。【００３５】
図９は、ストレージシステム360上のメモリ365に格納された論理ボリューム情報503を示す。論理ボリューム情報503は、論理ボリューム名1001、論理ボリュームアドレス1002、RAIDグループ名1003、RAIDグループアドレス1004を備える。論理ボリューム名1001および論理ボリュームアドレス1002により特定される領域は、RAIDグループ名1003およびRAIDグループアドレス1004により特定される領域に対応することを示す。【００３６】
図１０は、ストレージシステム360上のメモリ365に格納されたプール情報504を示す。プール情報504は、プール名1101、論理ボリューム名1102、仮想ボリューム名1103、プール容量1104、割当済み容量1105を備える。プール名1101はプール名を示す。論理ボリューム名1102はプールに属する論理ボリューム名を示す。仮想ボリューム名1103はプールに属する仮想ボリューム名を示す。プール容量1104はプールの容量を示す。割当済み容量1105は、プール容量のうち既に仮想ボリュームに割り当てた容量を示す。【００３７】
図１１は、ストレージシステム360上のメモリ365に格納された仮想ボリューム情報505を示す。仮想ボリューム情報505は、仮想ボリュームページ番号1201、仮想ボリューム名1202、仮想ボリュームアドレス1203、論理ボリュームページ番号1204、論理ボリューム名1205、論理ボリュームアドレス1206、アクセス数1207を備える。【００３８】
仮想ボリュームページ番号1201は、仮想ボリューム名1202および仮想ボリュームアドレス1203により特定される領域のページ番号を示す。論理ボリュームページ番号1204は、論理ボリューム名1205および論理ボリュームアドレス1206により特定される領域のページ番号を示す。仮想ボリュームページ番号1201により特定される領域が論理ボリュームページ番号1204により特定される領域と対応づいていることを示す。アクセス数1207は、仮想ボリュームページ番号1201により特定される領域へのアクセス数を示す。【００３９】
図１２は、ストレージシステム360上のメモリ365に格納された階層定義情報506を示す。階層定義情報506は、階層1301、メディア種別1302、圧縮機能1303、デフォルト階層1304を備える。階層1301は階層を示す。階層は数値で示され、数値が少ないほどメディアが高性能であることを示す。本実施例では階層1と階層2の2階層であるが、3階層以上あってもよい。メディア種別1302は階層を構成するメディアの種別を示す。【００４０】
圧縮機能1303は、メディアが圧縮機能を備えている場合は「Yes」、備えていない場合は「No」となる。デフォルト階層1304は未割当領域に書き込みがあった場合に割り当てるページであるかを示す。未割割当の領域に割り当てるページは「Yes」、未割割当の領域に割り当てないページは「No」となる。ただし、デフォルト階層1304が「Yes」となっているページが全て割り当てられている場合に未割当領域に書き込みがあった場合にはデフォルト階層1304が「No」となっているページを割り当てる。【００４１】
図１３は、アプリケーションサーバ300上のメモリ302に格納されたオブジェクト圧縮ポリシ情報406を示す。オブジェクト圧縮ポリシ情報406は、オブジェクト種別1401、圧縮1402を備える。圧縮1402は、アプリケーションサーバ300上のフラッシュメモリドライブ306にキャッシュされるときに、オブジェクト種別1401に示されるオブジェクトが圧縮されたままキャッシュされるかを示す。圧縮1402が「Yes」の場合はオブジェクト種別1401に示されるオブジェクトが圧縮されたままキャッシュされ、圧縮1402が「No」の場合はオブジェクト種別1401に示されるオブジェクトが伸張されてからキャッシュされる。【００４２】
図１４は、アプリケーションサーバ300上のメモリ302に格納されたオブジェクト圧縮ポリシ入力画面407を示す。オブジェクト圧縮ポリシ入力画面407は、オブジェクト種別1501、圧縮1502、OKボタン1503、キャンセルボタン1504を備える。このデータがアプリケーションサーバ300に備えられたディスプレイ上に表示される。【００４３】
管理者は、オブジェクト種別1501に示されたオブジェクトが、アプリケーションサーバ300上のフラッシュメモリドライブ306にキャッシュされるときに、圧縮されたままキャッシュされるように設定したい場合は圧縮1502に「Yes」と入力し、伸張されてからキャッシュされるように設定したい場合は圧縮1502に「No」と入力し、OKボタン1503を押す。これにより、管理者がブジェクト圧縮ポリシ入力画面407に入力した情報がオブジェクト圧縮ポリシ情報406に反映される。設定を変更しない場合はキャンセルボタン1504を押す。【００４４】
図１５は、圧縮機能付きフラッシュメモリデバイス367上のメモリ604に格納されたフラッシュメモリ制御情報606を示す。フラッシュメモリ制御情報606は、LBA 1601、長さ1602、圧縮済み1603、圧縮アルゴリズム1604、PBA（Physical  Block  Address）1605、長さ1606を備える。【００４５】
LBA 1601は圧縮機能付きフラッシュメモリデバイス367の外に見せるアドレスを示す。PBA 1605はフラッシュメモリ609に格納される物理アドレスを示す。フラッシュメモリコントローラ602は、LBA 1601と長さ1602により特定される領域を、PBA 1605と長さ1606により特定される領域に格納し、有効であることを示す。圧縮済み1603が「Yes」の場合はデータが圧縮アルゴリズム1604により指定されたアルゴリズムにより圧縮されていることを示す。圧縮済み1603が「No」の場合はデータが圧縮されていないことを示す。【００４６】
図１６は、リード命令1700を示す。リード命令1700は、オペレーションコード1701、圧縮フラグ1702、LBA 1703、長さ1704を備える。オペレーションコード1701は本命令がリード命令であることを示す。圧縮フラグ1702は、圧縮されたデータを圧縮したままリードするかを指定するフラグである。【００４７】
圧縮フラグ1702が「1」の場合は、可能であれば圧縮されたデータを読み込むことを示し、リード命令1700を受信したデバイスはリード応答1800を返す。圧縮フラグ1702が「0」の場合は通常のリード命令となり、圧縮されていないデータを読み込むことを示し、リード命令1700を送信したデバイスは長さ1704により指定したサイズの領域を確保し、リード命令1700を受信したデバイスは読み込んだデータを送信する。【００４８】
LBA 1703は読み込むデータの先頭アドレスを示す。長さ1704は読み込むデータの長さを示す。リード命令1700を送信するデバイスがLBA 1703および長さ1704により指定した領域を圧縮されていない状態でリードしたい場合は圧縮フラグ1702に「0」を設定し、圧縮されている状態でリードしたい場合は圧縮フラグ1702に「1」を設定する。ただし、圧縮フラグ1702に「1」を設定した場合においても、LBA 1703および長さ1704により指定した領域がリード対象デバイス内で圧縮されていない場合は、圧縮されていない状態でリードされる。【００４９】
図１７は、リード応答1800を示す。リード応答1800はリード命令1700に対する応答を示す。リード応答1800は、パラメータデータ長1801および任意の数のデータ1802および1803を備える。パラメータデータ長1801はリード応答ヘッダおよびリード応答データの和を示す。LBA 1703および長さ1704において指定したストレージシステム360上の領域のデータは分割されて圧縮されることがあるため、図18において示したように読み込みデータはリスト形式となる。【００５０】
図１８は、リード応答データ1900を示す。リード応答データ1900はリード応答1800の一部であり、データ1802、1803である。リード応答データ1900は、LBA 1901、長さ1902、圧縮アルゴリズム1903、圧縮状態1904、データ長1905、データ1906を備える。LBA 1901は読み込み先の先頭アドレスを示す。長さ1902は読み込むデータの長さを示す。圧縮アルゴリズム1903はデータが圧縮されている場合の圧縮アルゴリズムを示す。圧縮状態1904はデータ1906が圧縮されているかを示す。【００５１】
圧縮状態1904が「1」の場合はデータ1906が圧縮されていることを示す。圧縮状態1904が「0」の場合はデータ1906が圧縮されていないことを示す。データ長1905はデータ1906の長さを示す。データ1906はLBA 1901および長さ1902により指定されたストレージシステム360上の領域のデータである。【００５２】
図１９は、ライト命令2000を示す。ライト命令2000は、オペレーションコード2001、LBA 2002、長さ2003を備える。オペレーションコード2001は本命令がライト命令であることを示す。LBA 2002はデータを書き込む先頭アドレスを示す。長さ2003は書き込むデータの長さを示す。ライト命令2000を受信したデバイスは、長さ2003により指定されたサイズの領域を確保し、ライト命令2000を送信したデバイスはその領域にデータを送信する。【００５３】
図２０は、仮想ボリューム、論理ボリューム、RAIDグループ、圧縮機能付きフラッシュメモリデバイス367内の論理領域、圧縮機能付き367内の物理領域の対応関係を示す。データベースプログラム402がリード命令およびライト命令を送信するときに、図20に示す関係に基づいてデータはリードおよびライトされる。VOL A 2101とL-VOL A 2102のアドレスの対応を仮想ボリューム情報505が示す。L-VOL A 2102とRG A 2103の対応を論理ボリューム情報503が示す。RG A 2103と圧縮機能付きフラッシュメモリデバイス367のLBA 2104の対応をRAIDグループ情報502が示す。圧縮機能付きフラッシュメモリデバイス367内のLBA 2104とPBA2108の対応をフラッシュメモリ制御情報606が示す。【００５４】
図２１および図２２は、データベースプログラム402がリードするときの処理の流れを示す。処理2201において、データベースプログラム402はキャッシュ制御プログラム404にリード命令1700を送信する。OSプログラム401およびデータベースプログラム402はメモリ302上にリードしたデータをキャッシュするための領域を持っており、本処理はそこにキャッシュされていない場合の処理である。読込先領域をLBA 1703と長さ1704に指定する。データベースプログラム402は圧縮されたデータを伸張する機能を有しておらず、伸張されたデータを読み込む必要があるため、圧縮フラグ1702を「0」と指定する。【００５５】
判断2202において、キャッシュ制御プログラム404は、処理2201において受信したリード命令1700において指定された読み込み先領域がフラッシュメモリドライブ306にキャッシュされているかキャッシュ制御情報405を参照して確認し、キャッシュされている場合は処理2203に進み、キャッシュされていない場合は処理2206に進む。【００５６】
処理2203において、キャッシュ制御プログラム404は、キャッシュ制御情報405のキャッシュデータボリューム名806、LBA 807、長さ808を参照してキャッシュ先領域を特定し、その領域をLBA 1703、長さ1704に指定し、圧縮フラグ1702を「1」と指定してフラッシュメモリドライブ306にリード命令1700を送信する。今後の処理において、圧縮したままの状態でデータをストレージ装置側から読みだすためである。【００５７】
処理2204において、フラッシュメモリドライブ306はリード命令1700により指定された領域のデータを読み込む。処理2205において、キャッシュ制御プログラム404は、読込先領域をLBA 1703、長さ1704に指定し、圧縮フラグ1702を「1」と指定してストレージシステム360にリード命令1700を送信する。処理2206において伸張せずにデータを読み込む。【００５８】
判断2207は、処理2203または処理2205においてキャッシュ制御プログラム404がリードしたデータが圧縮されている場合は処理2208に進む。そうでない場合は処理2209に進む。【００５９】
処理2208において、キャッシュ制御プログラム404はキャッシュ制御情報405を参照してキャッシュされているデータの圧縮済み804が「Yes」の場合は、圧縮アルゴリズム805により指定された圧縮アルゴリズムに対応する伸張アルゴリズムに基づいてリードしたデータを伸張する。キャッシュ制御情報405を参照してキャッシュされているか確認し、キャッシュされていない場合において、ストレージシステム360から受信したリード応答データの圧縮状態1904が「1」である場合は、圧縮アルゴリズム1903により指定されたアルゴリズムに対応する伸張アルゴリズムに基づいてリードしたデータを伸張する。【００６０】
処理2209において、キャッシュ制御プログラム404はリードしたデータをデータベースプログラム402に送信し、処理2210および処理2301に進む。処理2210において、データベースプログラム402はリード結果を受信する。【００６１】
判断2301において、判断2202においてリード対象がキャッシュされていた場合は処理を終え、キャッシュされていなかった場合は処理2308に進む。処理2308において、キャッシュ制御プログラム404は圧縮されたデータをフラッシュメモリドライブ306にキャッシュする。処理2307と同様に空き領域を探索し、空き領域にデータを書き込む。処理2309において、フラッシュメモリドライブ306はデータを書き込む。【００６２】
処理2310において、キャッシュ制御プログラム404はキャッシュ制御情報405を更新する。データベースプログラム402がリードするときの処理の流れは以上であるが、より性能を向上させたい場合は破線2311で囲まれた処理および判断を実行してもよい。【００６３】
以下に、破線2311で囲まれた処理および判断を実行する場合を説明する。判断2301において、判断2202においてリード対象がキャッシュされていた場合は処理2302に進み、キャッシュされていなかった場合は処理2304に進む。【００６４】
処理2302において、キャッシュ制御プログラム404はキャッシュされていたデータのアクセス数809を1増やす。判断2303において、キャッシュ制御プログラム404はアクセス数809があらかじめ定めた閾値を超過したか判断する。超過した場合は圧縮してキャッシュしたデータを伸張してキャッシュするために処理2307に進む。そうでない場合は処理を終了する。【００６５】
処理2304において、キャッシュ制御プログラム404はデータベースプログラム402から取得したオブジェクト位置情報403からリードしたデータのオブジェクト種別702を取得する。なお、キャッシュ制御プログラム404は定期的にデータベースプログラム402からオブジェクト位置情報403を取得する。判断2305において、キャッシュ制御プログラム404はオブジェクト圧縮ポリシ情報406を参照し、リードしたデータを圧縮したままキャッシュするか判断する。処理2304において取得したオブジェクト種別702の圧縮1402が「ON」の場合は判断2306に進み、圧縮1402が「OFF」の場合は処理2307に進む。【００６６】
判断2306において、判断2207においてキャッシュ制御プログラム404がストレージシステム360からリードしたデータが圧縮されていたか判断する。リードしたデータが圧縮されていた場合は、圧縮されたデータをキャッシュするために処理2308に進む。リードしたデータが圧縮されていなかった場合は、キャッシュ制御プログラム404は圧縮されたデータを保持しておらず圧縮されたデータをキャッシュできないため、圧縮されていないデータをキャッシュするために処理2307に進む。【００６７】
処理2307において、キャッシュ制御プログラム404は圧縮されていないデータをフラッシュメモリドライブ306にキャッシュする。キャッシュ制御情報405を参照し、空き領域を探索する。空き領域がない場合はキャッシュ制御情報405の時間810が最も古い行を検索し、その行を削除する。キャッシュ制御プログラム404は空き領域にデータを書き込む。【００６８】
以上が破線2311で囲まれた処理および判断を実行する場合の処理の流れである。2303の判断ステップを設けることで、アクセス頻度の高いデータについては伸張処理を不要としてアプリケーションサーバ300にかける負荷を削減できる。また、管理者が設定したオブジェクト圧縮ポリシ406に従いオブジェクト単位でデータを圧縮してキャッシュするか伸張してキャッシュするか制御できる。【００６９】
図２３は、データベースプログラム402がライトするときの処理の流れを示す。処理2401において、データベースプログラム402はキャッシュ制御プログラム404にライト命令2000を送信する。判断2402において、キャッシュ制御プログラム404は、処理2401において受信したライト命令2000において指定された書き込み先領域がフラッシュメモリドライブ306にキャッシュされているか判断する。キャッシュ制御プログラム404はキャッシュ制御情報405を参照して確認し、キャッシュされている場合処理2403に進み、そうでない場合は2404に進む。【００７０】
処理2403においてキャッシュ制御プログラム404はキャッシュ制御情報405から書き込み先領域を削除する。処理2404において、キャッシュ制御プログラムはライト命令2000をストレージシステム360に送信する。処理2405においてストレージシステム360はデータを書き込む。処理2406において、キャッシュ制御プログラム404はデータベースプログラム402に応答し、処理2407に進む。処理2407において、データベースプログラム402は書き込み結果を受信する。以上が、データベースプログラム402がライトするときの処理の流れである。【００７１】
図２２において、オブジェクト単位でデータを圧縮してキャッシュするか伸張してキャッシュするか制御する場合には、破線2311を実行し、破線2413で囲まれた処理および判断を実行する。以下にこの場合の処理を説明する。処理2406において、キャッシュ制御プログラム404はデータベースプログラム402にライト結果を応答した後に処理2408に進む。【００７２】
処理2408において、キャッシュ制御プログラム404はデータベースプログラム402から取得したオブジェクト位置情報403からライトしたデータのオブジェクト種別702を取得する。判断2409において、キャッシュ制御プログラム404はオブジェクト圧縮ポリシ情報406を参照し、ライトしたデータを圧縮せずにキャッシュするか判断する。データベースプログラム402はデータ圧縮機能を有していないため、データベースプログラム402からのライトデータは圧縮されておらず、キャッシュ制御プログラム404もデータ圧縮機能を有しておらず、ライトデータを圧縮してキャッシュすることができないため、処理2408において取得したオブジェクト種別702の圧縮1402が「ON」の場合は処理を終了する。圧縮1402が「OFF」の場合は処理2410に進む。【００７３】
処理2410において、キャッシュ制御プログラム404は圧縮されていないデータをフラッシュメモリドライブ306にキャッシュする。キャッシュ制御情報405を参照し、空き領域を探索する。空き領域がない場合はキャッシュ制御情報405の時間810が最も古い行を検索し、その行を削除する。キャッシュ制御プログラム404はフラッシュメモリドライブ306の空き領域にデータを書き込む。【００７４】
処理2411においてフラッシュメモリドライブ306はデータを書き込む。処理2412において、キャッシュ制御プログラム404はキャッシュ制御情報405を更新する。以上が、破線2413で囲まれた処理および判断を実行する場合の処理の流れである。この処理により、データベースプログラム402がライトするときにライトするデータがオブジェクト圧縮ポリシ406において圧縮しないでキャッシュすると指定されたオブジェクトの場合にキャッシュすることが可能となり、ライトしたデータと同じ領域をリードする場合にフラッシュメモリドライブ306にキャッシュされたデータをリードすればよく、ストレージシステム360からリードする必要がなくなる。【００７５】
図２４は、アプリケーションサーバ300がストレージシステム360からデータを読み込む、またはデータを書き込むときのストレージシステム360内の処理の流れを示す。判断2401において、アプリケーションサーバ300がリード命令1700を送信した場合は処理2505に進み、アプリケーションサーバ300がライト命令2000を送信した場合は判断2502に進む。判断2502において、ストレージコントローラ363は仮想ボリューム情報505を参照し、ライト命令2000により指定された書き込み先領域が割り当てられていない場合は、処理2503に進み、そうでない場合は処理2504に進む。【００７６】
処理2503において、ストレージコントローラ363は、プール情報504を参照し同じプールに属す論理ボリュームのうち、階層定義情報506においてデフォルト階層1304が「Yes」となっている階層からページを割り当て、仮想ボリューム情報505を更新する。処理2504において、ストレージコントローラ363は、仮想ボリューム情報505を参照してライト命令2000のLBA 2002と長さ2003により特定される仮想ボリューム上の領域に対応する論理ボリューム上の領域を特定する。【００７７】
次に、論理ボリューム情報503を参照して論理ボリューム上の書き込み対象領域に対応するRAIDグループ上の領域を特定する。更にRAIDグループ情報502を参照してRAIDグループ上の書き込み対象領域に対応するデバイス上の領域を特定し、圧縮機能付きフラッシュメモリデバイス367またはHDD 368にライト命令2000を送信する。判断2505において、アプリケーションサーバ300が送信したリード命令1700の対象領域が未割当の場合は処理2506に進み、そうでない場合は処理2507に進む。【００７８】
処理2506において、ストレージコントローラ363は読込先領域が未割当であるためデータは書き込まれていないと判断し、アプリケーションサーバ300に0を返す。処理2507において、ストレージコントローラ363は、仮想ボリューム情報505を参照してリード命令1700のLBA 1703と長さ1704により特定される仮想ボリューム上の領域に対応する論理ボリューム上の領域を特定する。【００７９】
次に、論理ボリューム情報503を参照して論理ボリューム上の読み込み対象領域に対応するRAIDグループ上の領域を特定する。更に、RAIDグループ情報502を参照してRAIDグループ上の読み込み対象領域に対応するデバイス上の領域を特定し、圧縮機能付きフラッシュメモリデバイス367またはHDD 368にリード命令1700を送信する。アプリケーションサーバ300からのリード命令1700の圧縮フラグ1702が「1」であり、読込対象が圧縮機能付きフラッシュメモリデバイス367の場合は、圧縮フラグ1702を「1」とする。処理2508においてアクセスがあったページのアクセス数1207を1増やす。【００８０】
図２５は、ストレージコントローラ363がアクセス量が多いページを高階層に移動し、アクセス量が少ないページを低階層に移動する処理の流れを示す。本処理は例えば1時間に1度や24時間に1度など管理者があらかじめ定めた間隔で定期的に行われるようにしても良い。処理2601において、ストレージコントローラ363はアクセス量1207を参照し、処理2602において、高階層に移動するページと低階層に移動するページを決定する。処理2602において決定した移動すべきページを処理2603において移動する。【００８１】
図２６は、図２１の処理2206のストレージシステム360内での処理を詳細に示したものであり、ストレージコントローラ363がリード命令1700を圧縮機能付きフラッシュメモリデバイス367に送信するときの圧縮機能付きフラッシュメモリデバイス367内の処理の流れを示す。【００８２】
処理2701において、ストレージコントローラ363はリード命令1700を圧縮機能付きフラッシュメモリデバイス367に送信する。処理2702において、フラッシュメモリコントローラ602はフラッシュメモリ制御情報606を参照し、リード対象領域をフラッシュメモリ609から読み込む。【００８３】
処理2703において、フラッシュメモリ609はデータを読み込み、フラッシュメモリコントローラ602にデータを送信する。処理2707はリードしたデータをストレージコントローラ363に送信する。処理2708において、ストレージコントローラ363はリードしたデータを受信する。【００８４】
更に、追加の実施例として2704から2706までの処理を加えても良い。判断2704において、フラッシュメモリ制御情報606を参照し、リードしたデータが圧縮されているか判断する。圧縮されている場合は判断2705に進み、そうでない場合は処理2707に進む。判断2705において、伸張してからストレージコントローラ363に読み込んだデータを返す必要があるか判断する。【００８５】
例えばバックアップするときに伸長機能を有していないバックアップサーバがデータを読み込むなど、リード命令送信元に伸張してからデータを送信しなければならないことがある。このため、処理2701においてストレージコントローラ363が送信したリード命令1700の圧縮フラグ1702が「1」の場合は処理2707に進み、そうでない場合は処理2706に進む。処理2706においてフラッシュメモリコントローラ602はリードしたデータを圧縮アルゴリズム1604に対応した伸張アルゴリズムを用いて伸張する。【００８６】
また、追加した実施例の判断2704、判断2705、処理2706をフラッシュメモリコントローラ602の代わりにストレージコントローラ363が処理2708の後に実行してもよい。【００８７】
図２７は、ストレージコントローラ363がライト命令2000を圧縮機能付きフラッシュメモリデバイス367に送信するときの圧縮機能付きフラッシュメモリデバイス367内の処理の流れを示す。処理2801において、ストレージコントローラ363はライト命令2000を圧縮機能付きフラッシュメモリデバイス367に送信する。判断2802において、フラッシュメモリコントローラ602はライトするデータを圧縮することによりデータ長を短くできるか判断する。短くできると判断した場合は処理2803に進み、そうでない場合は処理2804に進む。処理2803において、フラッシュメモリコントローラ602はデータを圧縮する。【００８８】
処理2804において、データ書き込み先となるフラッシュメモリ609のアドレスを割り当てるために、フラッシュメモリ制御情報606を参照し、空き領域を探索する。ストレージコントローラ363から見える領域であるLBA 1601および長さ1602と書き込み先のフラッシュメモリ609の領域であるPBA 1605および長さ1606を対応付け、判断2802において圧縮すると判断された場合は圧縮済み1603を「Yes」とし、圧縮アルゴリズム1604に処理2803において使用した圧縮アルゴリズムを指定し、フラッシュメモリ制御情報606を更新する。【００８９】
処理2805において、フラッシュメモリコントローラ602はデータをフラッシュメモリ609に書き込む。処理2806においてフラッシュメモリ609はデータを書き込む。処理2807においてフラッシュメモリコントローラ602はライト結果をストレージコントローラ363に送信する。処理2808において、ストレージコントローラ363はライト結果を受信する。【００９０】
なお、実施例1では、圧縮機能付きフラッシュメモリデバイス367がデータを圧縮したが、ストレージコントローラ363が圧縮してもよい。この場合は、ストレージコントローラ363の処理2801の前に、判断2802および2803をストレージコントローラ363が実施する。【００９１】
実施例1によれば、圧縮機能付きフラッシュメモリデバイス367が圧縮したデータを伸張せずにキャッシュ制御プログラム404が読み込みキャッシュするため、サーバに圧縮処理負荷をかけることなくより多くのデータをフラッシュメモリドライブ306にキャッシュすることができる。【００９２】
さらに、管理者がアクセス頻度が高いと判断したオブジェクトおよびアクセス頻度が高い領域は伸張してからキャッシュすることにより、アクセスごとに発生する伸張処理を省くことが可能となり、容量効率向上と性能向上を両立することが可能となる。さらに、ストレージシステム360からアプリケーションサーバ300にデータを送信するときに圧縮されたまま送信するため、SAN 320にかかる負荷を削減できる。
【実施例２】
【００９３】
以下、実施例２について説明する。実施例1において、キャッシュ制御プログラム404がストレージシステム360からリードするときに、圧縮フラグ1702を設定することにより圧縮したままリードするか伸張してからリードするか選択できた。実施例２において、圧縮済みデータと伸張済みデータをリードする他の方式を説明する。リード以外の処理は実施例1と同様であるため、リード処理のみ説明する。【００９４】
図２８は、実施例２の概要を示す図である。圧縮機能付きフラッシュメモリデバイスは通常ボリューム2901と圧縮ボリューム2902の2つのボリュームを提供する。通常ボリューム2901および圧縮ボリューム2902はどちらも仮想ボリュームである。通常のデータの読み書きは通常ボリューム2901を介して行う。通常ボリューム2901にデータを書き込むと圧縮・伸長機能2903が書き込んだデータを圧縮し、フラッシュメモリ2904に格納する。通常ボリューム2901からデータを読み込むと圧縮・伸張機能が圧縮されたデータをフラッシュメモリ2904から読み込み、伸張し、通常ボリューム2901を介して読み込み元デバイスに伸長したデータを送信する。【００９５】
一方、圧縮されたデータを読むときに圧縮ボリューム2902を利用する。圧縮ボリューム2902は読み込み専用であり書き込むことはできないように設定される。圧縮ボリューム2902は、通常ボリューム2901から書き込み圧縮されたデータを圧縮されたまま提供するように設定されたボリュームである。【００９６】
つまり通常ボリューム2901と圧縮ボリューム2902は同じ論理領域を共有し、図１１の仮想ボリューム情報を共有する。図２９に示すGET LBA STATUS命令3000を利用することにより、通常ボリューム2901と圧縮ボリューム2902関係を取得できる。これにより、通常ボリューム2901から書き込んだデータを、圧縮された状態で圧縮ボリューム2902から読み込むことができる。【００９７】
図２９は、GET LBA STATUS命令3000を示す。GET LBA STATUS命令3000は、オペレーションコード3001、圧縮ボリューム情報取得3002、LBA 3003、長さ3004を備える。GET LBA STATUS命令3000はLBA 3003および長さ3004により指定された領域の状態を取得するための命令である。状態種別3002を「1」とすることにより指定した領域の圧縮状態と通常ボリュームに対応する圧縮ボリュームの領域を取得することを意味する。【００９８】
状態種別3002を変更することにより例えば、指定された領域にどの階層が割り当てられているかなどの階層の状態などを取得することもできる。キャッシュ制御プログラム404は、圧縮されたデータを取得したい領域をLBA 3003と長さ3004に指定し、圧縮状態を取得するために状態種別3002を「1」と指定し、GET LBA STATUS命令3000をストレージコントローラ363に送信することにより、圧縮データのアドレスを取得できる。ストレージコントローラ363も同様の命令を圧縮機能付きフラッシュメモリデバイス367に送信することにより、圧縮データのアドレスを取得できる。【００９９】
図３０は、GET LBA STATUS応答3100を示す。GET LBA STATUS応答3100は、パラメータデータ長3101、複数のデータ3102、3103を備える。GET LBA STATUS応答3100はGET LBA STATUS命令3000の応答である。データ3102、3103は各々図３１に示すGET  LBA  STATUS応答データ3200である。【０１００】
図３１は、GET LBA STATUS応答データ3200を示す。GET LBA STATUS応答データ3200は、LBA 3201、長さ3202、圧縮アルゴリズム3203、圧縮状態3204、圧縮データボリューム名3205、圧縮データLBA 3206、圧縮データ長3207を備える。圧縮状態3204が「1」のとき、LBA 3201と長さ3202で特定される領域は圧縮アルゴリズム3202で指定されるアルゴリズムで圧縮され、その圧縮されたデータは圧縮データボリューム名3205、圧縮データLBA 3206、圧縮データ長3207で特定される領域に格納されている。【０１０１】
図３２は、キャッシュ制御プログラム404がストレージシステム360からリードするときの処理の流れを示す。処理3301において、GET  LBA  STATUS応答3100およびGET  LBA  STATUS応答データ3200を取得してリード先領域の圧縮状態およびリード先領域と圧縮ボリューム2902における領域の関係を取得するために、キャッシュ制御プログラム404はGET LBA STATUS 命令3000をストレージシステム360に送信する。リード対象領域をLBA  3003および長さ3004に指定する。【０１０２】
処理3302において、ストレージシステム360は、GET LBA STATUS 応答3100およびGET  LBA  STATUS応答データ3200をキャッシュ制御プログラム404に送信する。処理3303においてキャッシュ制御プログラム404は圧縮ボリュームから圧縮されたデータをリードする。圧縮済みデータボリューム3205、圧縮済みデータLBA 3206、圧縮済みデータ長3207により特定される領域に圧縮されたデータが格納されているため、この領域をリード対象としてリード命令1700をストレージステム360に送信する。【０１０３】
処理3304において、ストレージシステム360は対象データをリードする。処理3305においてキャッシュ制御プログラム404はデータを受信する。通常ボリューム2901に対して書き込みを行わない限り通常ボリューム2901と圧縮ボリューム2902の対応関係は変わらない。このため、取得した通常ボリューム2901と圧縮ボリューム2902の関係をキャッシュ制御プログラム404が保持すれば、キャッシュ制御プログラム404がストレージシステム360からリードするたびに処理3301および処理3302を省略することができる。キャッシュ制御プログラム404がストレージシステム360からリードするたびに処理3301および処理3302を行ってもよい。【０１０４】
図３３は、ストレージコントローラ363が圧縮機能付きフラッシュメモリデバイス367からリードするときの処理の流れを示す。処理3401において、GET LBA STATUS 応答3100およびGET LBA STATUS 応答データ3200を取得してリード先領域の圧縮状態およびリード先領域と圧縮ボリューム2902における領域の関係を取得するために、ストレージコントローラ363はGET LBA STATUS 命令3000を圧縮機能付きフラッシュメモリデバイス367に送信する。リード対象領域をLBA  3003および長さ3004に指定する。【０１０５】
処理3402において、圧縮機能付きフラッシュメモリデバイス367は、GET LBA STATUS応答3100およびGET  LBA  STATUS応答データ3200をストレージコントローラ363に送信する。処理3403においてストレージコントローラ363に送信は圧縮ボリュームから圧縮されたデータをリードする。圧縮済みデータボリューム3205、圧縮済みデータLBA 3206、圧縮済みデータ長3207により特定される領域に圧縮されたデータが格納されているため、この領域をリード対象としてリード命令1700をストレージステム360に送信する。【０１０６】
処理3304において、圧縮機能付きフラッシュメモリデバイス367は対象データをリードする。処理3305においてストレージコントローラ363はデータを受信する。上記のとおり取得した通常ボリューム2901と圧縮ボリューム2902の関係をストレージコントローラ363が保持すれば、処理3401および処理3402を省略することができる。ストレージコントローラ363が圧縮機能付きフラッシュメモリデバイス367からリードするたびに処理3401および処理3402を行ってもよい。【０１０７】
実施例２において、圧縮機能付きフラッシュメモリデバイス367がデータを圧縮・伸張したが、ストレージコントローラ363が圧縮してもよい。この場合、実施例1と同様に、ストレージコントローラ363がデータ書き込み時に圧縮処理である判断2802および処理2803を実行する。【０１０８】
実施例２の構成によればリード命令を変更することなく圧縮機能付きフラッシュメモリデバイス367が圧縮したデータを伸張することなくアプリケーションサーバ300が読み込むことができる。
【実施例３】
【０１０９】
以下、実施例３について説明する。本実施例では、同じデータをキャッシュに重複して格納することを防止することでキャッシュの利用効率向上を図る。【０１１０】
図３４は、実施例３における計算機システムの構成を示す。本計算機システムはサーバ3501、ストレージ3508を備える。VM（Virtual Machine）3502は、ハイパバイザ3504上で動作する仮想マシンである。VM 3502はボリューム3503に格納されたOSやプログラムを動作する。ハイパバイザ3504はVM 3502を動作させる。【０１１１】
キャッシュ制御プログラム3505はVM 3502がストレージ3508に対して読み書きしたデータをフラッシュメモリドライブ3507にキャッシュし、VM 3502がキャッシュしたデータにアクセスする場合にフラッシュメモリドライブ3507から読み込む。キャッシュ制御情報3506はキャッシュ制御プログラムがキャッシュ制御のために使用する情報である。【０１１２】
ストレージコントローラ3513はサーバ3501からのリード命令およびライト命令に従いボリュームを制御する。仮想ボリューム3509は各VM 3502のために配備したスナップショットボリュームである。ベースボリューム3510は複数の仮想ボリューム3509に対応づけられ、OSイメージやアプリケーションのテンプレートが格納さている。仮想ボリューム3509への書き込みはベースボリューム3510には行われず、ベースボリューム3510との差分データを差分データボリューム3514に格納する。仮想ボリューム3509からの読み込みは、仮想ボリューム3509への書き込みがあった領域からの読み込む場合は差分データを差分ボリューム3514から読み込み、そうでない場合は対応づけられるベースボリューム3510の領域から読み込む。【０１１３】
スナップショット制御プログラム3511は、仮想ボリューム3509へのアクセスを制御する。スナップショットボリューム制御情報3512はスナップショット制御プログラム3511がスナップショットボリュームの制御に使用する情報であり、仮想ボリューム3509の領域とベースボリューム3510および差分データボリューム3514の関係を示す。【０１１４】
図３５は、サーバ3501上のキャッシュ制御情報3506を示す。キャッシュボリューム名3607はサーバ3501上のフラッシュメモリドライブ3507を示す。ボリューム名3601、LBA 3602、長さ3603により特定される領域の元となる領域をベースボリューム名3604、LBA 3605、長さ3606で示す。ボリューム名3601、LBA 3602、長さ3603により特定されている領域がキャッシュされている場合は、キャッシュ先領域をキャッシュボリューム名3607、LBA 3608、長さ3609で示す。【０１１５】
図３６は、スナップショットボリューム制御情報3512を示す。スナップショットボリューム制御情報3512は、スナップショットボリューム名3701、LBA 3702、長さ3703、修正済みフラグ3704、ボリューム名3705、LBA 3706、長さ3707を備える。スナップショットボリューム制御情報3512は、スナップショットボリューム3509の領域とベースボリューム3510の領域、差分データボリューム3514の領域の関係を示す。【０１１６】
ボリューム名3601、LBA 3602、長さ3603により特定される領域はボリューム3509上の領域であり、ボリューム名3705、LBA 3706、長さ3707により特定される領域に対応付けられていることを示す。修正済みフラグ3704は、ボリューム名3601、LBA 3602、長さ3603により特定される領域に書き込みがあったかを示す。修正済みフラグ3704が「NO」の場合は書き込みがなく、ベースボリューム3510に対応付けられていることを示す。修正済みフラグ3704が「YES」の場合は書き込みがあり、差分データボリューム3514に対応付けられていることを示す。【０１１７】
図３７は、VM 3502がリードするときの処理の流れを示す。処理3801において、VM 3502はリード命令をキャッシュ制御プログラム3505に送信する。判断3802において、キャッシュ制御プログラム3505は、キャッシュ制御情報3506を参照し、リード先領域がキャッシュされているか判断する。キャッシュされている場合は処理3803に進み、そうでない場合は処理3805に進む。処理3803においてキャッシュ制御プログラム3505は、フラッシュメモリドライブ3507にリード命令を送る。【０１１８】
処理3804においてフラッシュメモリドライブ3507はデータを読み込み、キャッシュ制御プログラム3505に送信する。処理3805において、キャッシュ制御プログラム3505は、リード命令をストレージシステム3508に送信する。処理3508においてストレージシステム3508はデータを読み込む。処理3807において、キャッシュ制御プログラム3505はデータをVM 3502に送信する。処理3808において、VM 3502はデータを受信する。【０１１９】
処理3809において、キャッシュ制御プログラム3505はスナップショットボリューム制御情報3512を取得する。取得方法は例えば、GET LBA STATUS命令3000の状態種別3002を「2」として本命令をストレージ3508に送信する。処理3810において、ストレージはスナップショットボリューム制御情報3512をキャッシュ制御プログラム3505に送信する。送信方法は例えば、GET LBA STATUS応答データの圧縮データボリューム名、圧縮データLBA 3206、圧縮データ長3207に、スナップショットボリュームの領域に対応するベースボリュームの領域を指定する。【０１２０】
判断3811において、処理3810において取得したスナップショットボリューム制御情報3512からベースボリュームの領域を求め、処理3805においてリードした領域がキャッシュされているかキャッシュ制御情報3506を参照して確認する。【０１２１】
処理3805においてリードした領域の修正済みフラグ3704が「NO」であり、ボリューム名3705、LBA 3706、長さ3707により特定される領域が他の行にある場合は既に同じデータがキャッシュされていることになるため、処理3814に進む。処理3805においてリードした領域の修正済みフラグ3704が「NO」であるがボリューム名3705、LBA 3706、長さ3707により特定される領域が他の行にない場合、または修正済みフラグ3704が「YES」の場合は対象データはキャッシュされていないため、キャッシュするために処理3812に進む。【０１２２】
処理3812において、キャッシュ制御プログラム3505は、キャッシュするためにデータをフラッシュメモリドライブ3507に書き込む。処理3813においてフラッシュメモリドライブ3507はデータを書き込む。処理3814においてキャッシュ制御情報3506を更新し、キャッシュしたデータの位置を記録する。【０１２３】
なお、実施例３ではリード時にスナップショットボリューム制御情報3512を参照してリードしたデータをキャッシュするか判断したが、リードしたすべてのデータをキャッシュし、所定のタイミングでスナップショットボリューム制御情報3512取得時に重複してキャッシュしているデータを削除してもよい。【０１２４】
実施例３によれば、ボリューム3509はベースボリューム3510のスナップショットであり、データを書き込んだ領域を除いてボリューム3509のデータは同一である。この情報を用いて、仮想ボリューム上は異なっても、対応づけられる領域が同じ領域のデータをキャッシュしないことにより、限られたフラッシュメモリドライブ3507の容量を効率的に活用することが可能となる。
【符号の説明】
【０１２５】
３００：  アプリケーションサーバ
３０６：  フラッシュメモリドライブ
３６０：  ストレージシステム
４０２：  データベースプログラム
４０４：  キャッシュ制御プログラム
４０８：  伸張プログラム
６０７：  圧縮プログラム
【図１】
2013186828.tif 000003
【図２】
2013186828.tif 000004
【図３】
2013186828.tif 000005
【図４】
2013186828.tif 000006
【図５】
2013186828.tif 000007
【図６】
2013186828.tif 000008
【図７】
2013186828.tif 000009
【図８】
2013186828.tif 000010
【図９】
2013186828.tif 000011
【図１０】
2013186828.tif 000012
【図１１】
2013186828.tif 000013
【図１２】
2013186828.tif 000014
【図１３】
2013186828.tif 000015
【図１４】
2013186828.tif 000016
【図１５】
2013186828.tif 000017
【図１６】
2013186828.tif 000018
【図１７】
2013186828.tif 000019
【図１８】
2013186828.tif 000020
【図１９】
2013186828.tif 000021
【図２０】
2013186828.tif 000022
【図２１】
2013186828.tif 000023
【図２２】
2013186828.tif 000024
【図２３】
2013186828.tif 000025
【図２４】
2013186828.tif 000026
【図２５】
2013186828.tif 000027
【図２６】
2013186828.tif 000028
【図２７】
2013186828.tif 000029
【図２８】
2013186828.tif 000030
【図２９】
2013186828.tif 000031
【図３０】
2013186828.tif 000032
【図３１】
2013186828.tif 000033
【図３２】
2013186828.tif 000034
【図３３】
2013186828.tif 000035
【図３４】
2013186828.tif 000036
【図３５】
2013186828.tif 000037
【図３６】
2013186828.tif 000038
【図３７】
2013186828.tif 000039
【国際調査報告】
2013186828.tif 000040
2013186828.tif 000041
2013186828.tif 000042
2013186828.tif 000043