(57)【特許請求の範囲】
【請求項１】
圧縮キャッシュを管理するためのコンピューティング装置であって、
前記圧縮キャッシュに格納予定のデータのサイズの受信を受けて、前記データを格納するのに十分な第一の数の仮想メモリ・ページを割り当て、
前記第一の数の仮想メモリ・ページを満たすため、第一の数の物理メモリ・ページを割り当てる、
よう構成された第一ハードウェア・エンジンと、
前記データを圧縮し、圧縮されたデータを第二の数の物理メモリ・ページ中に格納するよう構成された第二ハードウェア・エンジンと、
を含み、
前記第一ハードウェア・エンジンが、前記圧縮されたデータを格納するのに使われていない、前記第一の数の物理メモリ・ページの一つ以上の物理メモリ・ページを割り当て解除するようさらに構成され、
前記仮想メモリ・ページおよび物理メモリ・ページの各々が、メモリ・キャッシュ中に格納されたそれぞれのインデックスに対応し、各インデックスは、当該ページのサイズと、当該ページが仮想メモリおよび物理メモリのいずれであるかと、のうちの少なくとも一つを示す所定数の先導ビットを含む、
コンピューティング装置。
【請求項２】
前記コンピューティング装置が、コントローラおよびストレージ・アダプタのうちの一つである、請求項１に記載のコンピューティング装置。
【請求項３】
前記第一の数の仮想メモリ・ページが、利用可能な仮想メモリ・ページのプールから割り当てられ、前記第一ハードウェア・エンジンが、利用可能な仮想メモリ・ページの前記プールを維持するようさらに構成される、請求項１に記載のコンピューティング装置。
【請求項４】
前記第一の数の物理メモリ・ページが、利用可能な物理メモリ・ページのプールから割り当てられ、前記第一ハードウェア・エンジンが、利用可能な物理メモリ・ページの前記プールを維持するようさらに構成される、請求項３に記載のコンピューティング装置。
【請求項５】
利用可能な仮想メモリ・ページの前記プールを維持すること、および利用可能な物理メモリ・ページの前記プールを維持することが、各々のプールに対するヘッド・ポインタおよびテール・ポインタを維持することを含む、請求項４に記載のコンピューティング装置。
【請求項６】
前記割り当てられた物理メモリ・ページの各々がヘッダを含み、前記第二ハードウェア・エンジンは、それぞれの物理メモリ・ページ中に格納されたデータが圧縮されているかどうかを示すため、各ヘッダ中の所定の位置に所定の値を書き込むようさらに構成される、請求項１に記載のコンピューティング装置。
【請求項７】
前記第一ハードウェア・エンジンが、一つ以上の仮想メモリ・ページを割り当て解除するようさらに構成される、請求項１に記載のコンピューティング装置。
【請求項８】
前記第二ハードウェア・エンジンが、前記圧縮キャッシュ中に格納された一つ以上の仮想メモリ・ページからのデータに対する要求の受信を受けて、
前記一つ以上の仮想メモリ・ページの各々に対し、前記ヘッダの前記所定の位置の前記所定の値を読み取ることによって、前記仮想メモリ・ページ中に格納されたデータが圧縮されているかどうかを判定し、
前記一つ以上の仮想メモリ・ページ中に格納された圧縮データを解凍し、
前記一つ以上仮想のメモリ・ページからの未圧縮のデータおよび解凍データを提供することによって、要求されたデータを返す、
ようさらに構成される、請求項６に記載のコンピューティング装置。
【請求項９】
ホスト・システムと、
一つ以上のストレージ・デバイスと、
圧縮キャッシュを含み、前記ホスト・システムおよび前記一つ以上のストレージ・デバイスに連結されたストレージ・アダプタと、
を含むデータ・ストレージ・システムであって、
前記圧縮キャッシュに格納対象のデータの受信を受けて、受信データを格納するのに十分な第一の数の仮想メモリ・ページを割り当て、
前記第一の数の仮想メモリ・ページを満たすため、第一の数の物理メモリ・ページを割り当てる、
よう構成された第一ハードウェア・エンジンと、
前記受信データを圧縮し、圧縮されたデータを第二の数の物理メモリ・ページ中に格納するよう構成された第二ハードウェア・エンジンと、
を含み、
前記第一ハードウェア・エンジンが、前記圧縮されたデータを格納するのに使われていない、前記第一の数の物理メモリ・ページの一つ以上の物理メモリ・ページを割り当て解除するようさらに構成され、
前記仮想メモリ・ページおよび物理メモリ・ページの各々が、メモリ・キャッシュ中に格納されたそれぞれのインデックスに対応し、各インデックスは、当該ページのサイズと、当該ページが仮想メモリおよび物理メモリのいずれであるかと、のうちの少なくとも一つを示す所定数の先導ビットを含む、
システム。
【請求項１０】
前記第一の数の仮想メモリ・ページが、利用可能な仮想メモリ・ページのプールから割り当てられ、前記第一ハードウェア・エンジンが、利用可能な仮想メモリ・ページの前記プールを維持するようさらに構成される、請求項９に記載のシステム。
【請求項１１】
前記第一の数の物理メモリ・ページが、利用可能な物理メモリ・ページのプールから割り当てられ、前記第一ハードウェア・エンジンが、利用可能な物理メモリ・ページの前記プールを維持するようさらに構成される、請求項１０に記載のシステム。
【請求項１２】
利用可能な仮想メモリ・ページの前記プールを維持すること、および利用可能な物理メモリ・ページの前記プールを維持することが、各々のプールに対するヘッド・ポインタおよびテール・ポインタを維持することを含む、請求項１１に記載のシステム。
【請求項１３】
前記割り当てられた物理メモリ・ページの各々がヘッダを含み、前記第二ハードウェア・エンジンは、前記物理メモリ・ページ中に格納されたデータが圧縮されているかどうかを示すため、各ヘッダ中の所定の位置に所定の値を書き込むようさらに構成される、請求項９に記載のシステム。
【請求項１４】
前記第一ハードウェア・エンジンが、一つ以上の仮想メモリ・ページを割り当て解除するようさらに構成される、請求項９に記載のシステム。
【請求項１５】
前記第二ハードウェア・エンジンが、前記圧縮キャッシュ中に格納された一つ以上の仮想メモリ・ページからのデータに対する要求の受信を受けて、
前記一つ以上の仮想メモリ・ページの各々に対し、前記ヘッダの前記所定の位置の前記所定の値を読み取ることによって、前記仮想メモリ・ページ中に格納されたデータが圧縮されているかどうかを判定し、
前記一つ以上仮想メモリ・ページ中に格納された圧縮データを解凍し、
前記一つ以上仮想メモリ・ページからの未圧縮のデータ、および解凍データを提供することによって、要求されたデータを返す、
ようさらに構成される、請求項１３に記載のシステム。
【請求項１６】
圧縮キャッシュを管理する方法であって、
前記圧縮キャッシュに格納対象のデータのサイズの受信を受けて、第一ハードウェア・エンジンを用いて、前記データを格納するのに十分な第一の数の仮想メモリ・ページを割り当てるステップと、
前記第一の数の仮想メモリ・ページを満たすため、前記第一ハードウェア・エンジンを用いて、第一の数の物理メモリ・ページを割り当てるステップと、
第二ハードウェア・エンジンを用いて、前記データを圧縮するステップと、
圧縮されたデータを第二の数の物理メモリ・ページの中に格納するステップと、
前記第一ハードウェア・エンジンを用いて、前記圧縮されたデータを格納するのに使われていない、前記第一の数の物理メモリ・ページの一つ以上の物理メモリ・ページを割り当て解除するステップと、
を含み、
前記仮想メモリ・ページおよび物理メモリ・ページの各々が、メモリ・キャッシュ中に格納されたそれぞれのインデックスに対応し、各インデックスは、当該ページのサイズと、当該ページが仮想メモリおよび物理メモリのいずれであるかと、のうちの少なくとも一つを示す所定数の先導ビットを含む、
方法。
【請求項１７】
前記第一の数の仮想メモリ・ページが割り当てられるもととなる、利用可能な仮想メモリ・ページのプールを、前記第一ハードウェア・エンジンを用いて維持するステップ、
をさらに含む、請求項１６に記載の方法。
【請求項１８】
前記第一の数の物理メモリ・ページが割り当てられるもととなり、前記圧縮されたデータを格納するのに使われていない前記一つ以上の物理メモリ・ページを割り当て解除する先である、利用可能な物理メモリ・ページのプールを、前記第一ハードウェア・エンジンを用いて維持するステップ、
をさらに含む、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ・ストレージ・アダプタに関し、さらに具体的には、データ・ストレージ・アダプタへの書き込みキャッシュのハードウェア実装に関する。
【背景技術】
【０００２】
ストレージ・アダプタおよびストレージ・サブシステムは、多くの場合、パフォーマンスを向上させるための書き込みキャッシュを含む。書き込みキャッシュは、一般に、比較的に高速な不揮発性メモリを用いて（例えば、フラッシュバック式ＤＲＡＭを用いて）実装することが可能である。ＲＡＩＤ（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙｓ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ）の特定の構成、例えば、ＲＡＩＤ５およびＲＡＩＤ６等で必要な、集中的なパリティ計算などの書き込みオペレーションのパフォーマンス上の不利条件を緩和するために書き込みキャッシュを用いることができる。また、書き込みキャッシュは、書き込みキャッシュ中に置かれた複数のホスト・オペレーションを単一のデステージ・オペレーション中に統合することによってストレージのパフォーマンスを向上させることができ、これは、ＲＡＩＤレイヤおよびディスク・デバイスによって、より経済的に処理することが可能である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
メモリ・チップのサイズ増大と、書き込みキャッシュのデータ・コンテンツを圧縮するための圧縮技法の使用との両方によって、書き込みキャッシュの効果的なサイズは、年々大幅に増大してきた。同時に、ソリッドステート・ドライブ（ＳＳＤ）など、より高速のストレージ・デバイスがますます普及してきて、ストレージ・アダプタに要求される全体的なスループットも増大し、接続ドライブとの通信に必要な処理量も増加している。
【課題を解決するための手段】
【０００４】
本発明の諸実施形態は、一般に、圧縮キャッシュに対する制御機構をハードウェアで実装し、これにより、ストレージ・システムのパフォーマンスを向上させるためのコントローラおよびシステムに関する。
【０００５】
諸実施形態は、圧縮キャッシュを管理するためのコンピューティング装置を提供し、該装置は、受信データを圧縮キャッシュに格納するために第一の数の仮想メモリ・ページおよび第一の数の物理メモリ・ページを割り当てるよう構成された、第一ハードウェア・エンジンと、受信データを圧縮し、圧縮されたデータを格納するよう構成された、第二ハードウェア・エンジンとを含み、第一ハードウェア・エンジンは、圧縮データを格納するのに使用されない一つ以上の物理メモリ・ページを割り当て解除するようにさらに構成される。
【０００６】
諸実施形態は、ホスト・システムと、一つ以上のストレージ・デバイスと、該ホスト・システムおよび一つ以上のストレージ・デバイスに連結されたストレージ・アダプタとを含むデータ・ストレージ・システムを提供し、該ストレージ・アダプタは、受信データを圧縮キャッシュに格納するために、第一の数の仮想メモリ・ページおよび第一の数の物理メモリ・ページを割り当てるよう構成された第一ハードウェア・エンジンと、受信データを圧縮し、圧縮されたデータを格納するよう構成された、第二ハードウェア・エンジンとを含み、第一ハードウェア・エンジンは、圧縮データを格納するのに使用されない一つ以上の物理メモリ・ページを割り当て解除するようにさらに構成される。
【０００７】
諸実施形態は圧縮キャッシュを管理する方法を提供し、本方法において、第一ハードウェア・エンジンが、圧縮キャッシュに格納するデータのサイズを受信して、仮想メモリ・ページおよび物理メモリ・ページを割り当て、受信データは圧縮され物理メモリ・ページに格納され、第一ハードウェア・エンジンは、圧縮データを格納するのに使用されない物理メモリ・ページを割り当て解除する。
【０００８】
前述の態様を詳細に理解できるよう、上で簡潔にまとめた本発明の諸実施形態のさらに具体的な説明を、諸実施形態を参照しながら行うこととする。それらの一部は添付の図面に示されている。但し、これら添付の図面は本発明の典型的な実施形態だけを示したものであり、本発明は他にも同様に効果的な実施形態を実現可能であり、したがってこれらは本発明の範囲を限定すると見なすべきではないことに留意する。
【図面の簡単な説明】
【０００９】
【図１】本明細書に記載の実施形態による、例示的なストレージ・システムを示すブロック図である。
【図２】本明細書に記載の実施形態による、ストレージ・システム内の例示的な書き込みキャッシュの論理構造を示すブロック図である。
【図３】本明細書に記載の実施形態による、ストレージ・システム内の例示的な書き込みキャッシュの論理構造を示すブロック図である。
【図４】本明細書に記載の実施形態による、圧縮書き込みキャッシュを用いたストレージ・オペレーションを示すブロック図である。
【図５】本明細書に記載の実施形態による、圧縮書き込みキャッシュを用いた例示のオペレーションを示す。
【図６】本明細書に記載の実施形態による、圧縮書き込みキャッシュを用いた解凍オペレーションを示すブロック図である。
【図７】本明細書に記載の実施形態による、圧縮書き込みキャッシュを用いた割り当て解除オペレーションを示すブロック図である。
【発明を実施するための形態】
【００１０】
ストレージ・アダプタおよびストレージ・システムのパフォーマンスを向上させるために、圧縮キャッシュに対する制御機構をハードウェアで直接実装することによって、ストレージ・アダプタに（またはその構成要素に）機能性を付加することができる。これには、例えば、圧縮および解凍機能を含めることが可能で、また、圧縮キャッシュを維持するために必要なメモリ・リソース（仮想および物理）の割り当ておよび割り当て解除の管理を含めてもよい。
【００１１】
図１は、本明細書に記載の実施形態による、例示的なストレージ・システム１００を示す。ストレージ・システム１００は、ホスト・システム１１０と、ストレージ・アダプタ１２０と、ストレージ１８０とを含む。ホスト・システム１１０は、ストレージ・アダプタ１２０のスループット要件を満たすのに適した任意の接続を介して、ストレージ・アダプタ１２０のコントローラ１４０に接続すればよく、図示の例では、ホスト・システム１１０は、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）インターフェース１５０を介してストレージ・アダプタ１２０に接続されている。
【００１２】
ストレージ・アダプタ１２０は、一般にホスト・システム１１０とストレージ１８０との間でデータを転送するよう構成され、これを行うための任意の実施可能な技術を用いてよい。ストレージ・アダプタ１２０は、制御ストア（ＣＳ）１２２、およびデータ・ストア（ＤＳ）１２４のためのメモリを含むことができ、これらストアは、書き込みキャッシュ１２３に対する制御ストレージおよびデータ・ストレージを提供する。ＣＳ１２２およびＤＳ１２４のために用いられるメモリが、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）として示されているが、これは、任意の他の実装可能な種類のメモリであってもよい。また、ストレージ・アダプタ１２０は、フラッシュ・メモリ１２６、および不揮発性ランダム・アクセス・メモリ（ＮＶＲＡＭ）１２８など、いくつかのさらなる種類のメモリを含むことができる。
【００１３】
ストレージ・アダプタ１２０は、コントローラ１４０を含み、該コントローラはプロセッサ１４５を含む。プロセッサ１４５は、単一のプロセッサ、複数のプロセッサ、複数の処理コアを有する単一のＣＰＵ、および類似のものを表すものとして意図されている。プロセッサ１４５は、コントローラ１４０に組み込まれて示されているが、別の実施形態では、該プロセッサは、ストレージ・アダプタ１２０内の他の場所に配置し、ＰＣＩｅ接続など適切な高速相互接続を介して、コントローラ１４０に通信可能に連結することも可能である。
【００１４】
コントローラ１４０には、本明細書に記載の実施形態による、データ・ストレージおよび書き込みキャッシュ・オペレーションの実行に使用されるいくつかのハードウェア・エンジンをさらに含めてもよい。図示のように、コントローラ１４０は、少なくとも、ホスト直接メモリ・アクセス（ＨＤＭＡ）エンジン１５５と、割り当て／割り当て解除エンジン１６０と、一つ以上の圧縮／解凍エンジン１６５と、ＸＯＲエンジン１７０（これは、ストレージ・オペレーションのためのパリティ計算を提供することができる）とを含む。コントローラ１４０には、コントローラ１４０とストレージ１８０との間に一つ以上のデータ接続を提供する一つ以上のシリアル接続ＳＣＳＩ（ＳＡＳ）１７５１〜Ｎを含めることができる。
【００１５】
これらのエンジンは、別々のコンピューティング装置として実装することができ、あるいは別の実施形態では、２つ以上のエンジンの機能を一つのコンピューティング装置に組み合わせることができる。他の実施形態において、前述のエンジンの一つ以上を、ストレージ・アダプタ内の他の場所に配置することができ、あるいは、これらエンジンの全てをストレージ・アダプタの外部に配置することも可能である。
【００１６】
ストレージ１８０は、一つ以上のストレージ・デバイス１８２１〜Ｎを含む。ストレージ・デバイス１８２１〜Ｎは、ハード・ディスク・ドライブ、ソリッドステート・ドライブ、または任意の他の適切なストレージ・デバイスを含んでよく、相異なる種類のストレージ・デバイスの組み合わせ（例えば、一つ以上のハード・ディスク・ドライブ、および一つ以上ソリッドステート・ドライブ）を含んでよい。ストレージ１８０は、ホスト・システム１１０の周辺デバイスであってよく、これに換えてまたは加えて、一つ以上の他のコンピュータ・システムに連結されてもよい。
【００１７】
図２は書き込みキャッシュ１２３の構造をさらに示し、これは少なくともＣＳ１２２およびＤＳ１２４を含む。ＣＳ１２２は、制御構造のためのストレージと、ＤＳ１２４中に格納されたデータに関連付けられた追加の情報とを提供する。ＣＳ１２２は、各ページ・テーブル（１２２Ａ１、２として図示）が一つ以上のページ・インデックスを有するページ・テーブル機構１２２Ａ、および一つ以上のキャッシュ・ライン（１２２Ｂ１〜３として図示）を有するキャッシュ・ライン機構１２２Ｂ含むことができる。ＤＳ１２４は、一般に、所定サイズの一つ以上のストレージ・ブロック（１２４１、２として図示）に分割することができ、その各サイズを変えることも可能である。一実施形態において、ＤＳ１２４は、均一の所定サイズのストレージ・ブロックに分割される。
【００１８】
一実施形態において、ページ・テーブル機構１２２Ａは、複数のページ・インデックスを含み、各ページ・インデックスは一つ以上のキャッシュ・ラインに対応し、該一つ以上のキャッシュ・ラインをポイントする一つ以上のインデックスを含む。ページ・テーブルに含まれるページ・インデックスは、直接メモリ・アクセス（ＤＭＡ）オペレーションのためのスキャッタギャザー・リストで使用が可能である。一例として、ページ・テーブル１２２Ａ１は、２つのページ・インデックスを有するものとして図示されており、ページ・インデックス１２２Ａ１１はキャッシュ・ライン１２２Ｂ１に対応し、ページ・インデックス１２２Ａ１２はキャッシュ・ライン１２２Ｂ３に対応している。
【００１９】
次に、図３は、個々のキャッシュ・ライン１２２ＢとＤＳ１２４のストレージ・ブロックとの間の論理的関係を示す。図示のように、キャッシュ・ライン１２２Ｂ１は一つ以上のインデックス１２２Ｄを含み、さらなるデータ１２２Ｃを含むことが可能である。各インデックス１２２Ｄは、ＤＳ１２４中のそれぞれのストレージ・ブロックをポイントすることができる。図示のように、一つのインデックスがストレージ・ブロック１２４１に対応し、別のインデックスが１２４２に対応する。
【００２０】
判読および理解を容易にするため、本出願全体を通して、仮想および物理メモリ・ページの特定のサイズを一貫して使うものとする。しかしながら、これら例示のページ・サイズは、本発明の範囲を限定することを意図されたものでなく、別の実施形態は、本明細書に記載されたページ・サイズ以外のサイズを用いることが可能である。物理メモリ・ページは、一般に、５２８バイト（５２８Ｂ）のサイズとして説明するものとする。この５２８Ｂサイズは、近年のデータ・ストレージ・アダプタおよびシステムで広く使われている一つのサイズである。一実施形態において、５２８Ｂのページには、８バイトのヘッダ、５１２バイトのデータ、および８バイトのトレーラを含めることができる。さらに、仮想メモリ・ページは、一般に４２２４バイト（４Ｋ）として説明するものとし、これは、物理メモリ・ページの数に対し一定の割合で（すなわち、８つの５２８Ｂの物理メモリ・ページが一つの４Ｋ仮想ページに）対応するよう選ばれている。
【００２１】
ページ・テーブル１２２Ａおよびキャッシュ・ライン１２２Ｂ中に含まれるインデックスなどのインデックスは、仮想および物理メモリの４Ｋおよび５２８Ｂページの各々を区分し一意的に識別するために使われる。一例において、キャッシュ・ライン構造中に格納されたインデックス１２２Ｄは、当該データが物理メモリ中のどこに置かれているかを記述することができる。さらに、以下でさらに詳しく説明するように、インデックス値は、仮想および物理メモリ・プール内で用いることが可能である。複数の実施形態において、各インデックス１２２Ｄは固定サイズ（例えば、４バイト）であり、インデックスの所定数の先導ビットが、記述されるページのサイズおよび種類を示すことができるように配列される。一実施形態において、「０ｘＣｎｎｎ＿ｎｎｎｎ」（ｎはプレースホルダを表し、各ｎに対する値は変わり得る）のインデックス値は、４Ｋの仮想メモリ・ページを示し、一方、「０ｘＥｎｎｎ＿ｎｎｎｎ」のインデックス値は、５２８Ｂの物理メモリ・ページを示す。
【００２２】
一実施形態において、書き込みキャッシュ１２３内の各キャッシュ・ライン１２２Ｂは、８つのインデックス１２２Ｄを格納することができ、各インデックス１２２Ｄは、ＤＳ１２４中に格納された５２８Ｂの物理メモリ・ページをポイントし、従って、各キャッシュ・ライン１２２Ｂは、ＤＳ１２４中の４Ｋの格納データに対応する。この例における各キャッシュ・ライン１２２Ｂは、各仮想メモリ・ページと同じサイズ（すなわち４Ｋ）に対応して定義されるので、各キャッシュ・ライン１２２Ｂは、割り当てられた仮想メモリ・ページと１：１の比率で直接に対応させることが可能である。書き込みキャッシュ１２３中で圧縮が有効化されていない場合は、一つのキャッシュ・ライン１２２Ｂ中で仮想的に表された格納データの４Ｋは、ＤＳ１２４中の物理メモリの４Ｋ（すなわち８つの５２８Ｂ物理メモリ・ページ）に対応する。しかしながら、圧縮が有効化されている場合は、キャッシュ・ライン１２２Ｂ中のインデックス１２２Ｄは、ＤＳ１２４中に格納された、８つの５２８Ｂ物理メモリ・ページよりも少ないページをポイントすればよい。このように、任意の所与のキャッシュ・ライン１２２Ｂによってインデックスされる物理ページの数は、データの圧縮のレベルに基づいて変化することになる。
【００２３】
物理メモリ・ページ内に格納されたデータが圧縮されているかどうかを示すために、当該ページ中にデータ値を含めることが可能である。複数の実施形態において、５２８Ｂの物理メモリ・ページ内の８バイトのヘッダの各々が、所定の位置に所定のデータ値またはパターンを含むことができる。この所定のデータ値またはパターンは、明確に区分可能なまたは一意的なものとすることが可能で、理想的には、このデータ値またはパターンがホスト・システムによって決して使用されたり書き込まれたりしないようにし、かくして、ヘッダ中で該データ値またはパターンが参照された場合は何時においても、該データ値またはパターンがデータの圧縮状態を信頼可能に示すことを確実にする。
【００２４】
理解を容易にするために、圧縮書き込みキャッシュを用いるオペレーション２００を表す図４と、オペレーション２００の一例を示す図５とを同時に説明することにする。
【００２５】
オペレーション２００は、ブロック２１０で開始し、このブロックで、コントローラは、ホスト・システムからキャッシュに書き込まれるデータのサイズの指示を受信する。図５の例の目的のため、そして前述のように、仮想メモリ・ページは４Ｋのサイズであり、物理メモリ・ページは５２８Ｂである。この例では、ホスト・システム１１０は、それが８Ｋのデータをキャッシュに書き込む予定であることを示している。
【００２６】
ブロック２２０で、割り当て／割り当て解除エンジンは、示されたサイズに基づいて、キャッシュに書き込み予定のデータを格納するために十分な数の仮想メモリ・ページを割り当てることができる。これは簡単な計算でよく、データのサイズが仮想メモリ・ページのサイズ（例えば４Ｋ）で除算される。
【００２７】
複数の実施形態において、割り当て／割り当て解除エンジンは、利用可能な仮想メモリ・ページおよび利用可能な物理メモリ・ページのためのプール３３０および３４０を維持することが可能である。各プール３３０、３４０には、メモリ・ページのそれぞれの種類に対する利用可能なインデックスのリストを含めるとよい。各プールは、ヘッド・ポインタ３３１、３４１およびテール・ポインタ３３２、３４２を含み、ストレージ・アダプタのオペレーションの過程でプールからインデックスが割り当てられまたはプール中に割り当て解除されたときは何時においても、割り当て／割り当て解除エンジンがこれらのポインタを更新する。
【００２８】
図５の例では、割り当て／割り当て解除エンジンは、ページ・テーブル３０５中に２つの４Ｋ仮想メモリ・ページを割り当て、これは８Ｋの着信データを格納するのに十分なものである。各割り当て仮想メモリ・ページは、４バイトのインデックスを有し、その値は、当該ページが仮想メモリであり（前述のごとく）４Ｋサイズであることを示す「０ｘＣｎｎｎ＿ｎｎｎｎ」である。割り当て／割り当て解除エンジンは、仮想メモリ・プール３３０から最初の２つの利用可能な仮想メモリ・ページ３３０１、２を割り当て、次に利用可能な仮想メモリ・ページ３３０３をポイントするようにヘッド・ポインタ３３１を更新する。
【００２９】
ブロック２３０で、割り当て／割り当て解除エンジンは、割り当てられた仮想メモリ・ページの各々を満たす数の物理メモリ・ページを割り当てることができる。前述のように、これは一定の比率（例えば、８つの５２８Ｂ物理メモリ・ページに対し一つの４Ｋ仮想ページ）に定義することが可能である。この物理および仮想メモリ・ページの割り当てに基づいて、割り当てられた仮想メモリ・ページは、最悪の場合の状況（データが圧縮できず未圧縮で格納しなければならない場合）にあっても、全ての指示された着信データを格納することができる。図５に示されるように、次いで割り当て／割り当て解除エンジンは、２つの割り当てられた仮想メモリ・ページの各々に対し８つの５２８Ｂ物理メモリ・ページ、合計１６の５２８Ｂ物理メモリ・ページをキャッシュ・ラインＣＬ１  ３１０およびＣＬ２  ３２０中に割り当てる。各割り当てられた物理メモリ・ページは、４バイトのインデックスを有し、その値「０ｘＥｎｎｎ＿ｎｎｎｎ」は、当該ページが物理メモリであり、５２８Ｂのサイズであることを示す。割り当て／割り当て解除エンジンは、物理メモリ・プール３４０からの最初の１６の利用可能な物理メモリ・ページ（すなわちページ３４０１〜１６）を割り当て、ヘッド・ポインタ３４１を、次の利用可能な物理メモリ・ページ（すなわちページ３４０１７）をポイントするように更新する。この時点で、２つのキャッシュ・ラインＣＬ１およびＣＬ２の組み合わせが、全８Ｋの着信データを未圧縮で物理メモリ中に格納することが可能となる。
【００３０】
ブロック２４０で、一つ以上の圧縮／解凍エンジンが、ホスト・システムからのデータを受信し、任意の技法によって該受信データを圧縮する。受信データを圧縮するために、該データは、一連のデータ・チャンク（この例では、各チャンクのサイズは４Ｋに設定される）として圧縮／解凍エンジンに送信することができる。データ・チャンクに対する標準化されたまたはよく知られた（４Ｋのような）サイズが用いられてよく、他の場合は、圧縮の前に、受信データを個別の区分に分割する追加のステップが必要となり得る。図５に示されるように、圧縮／解凍エンジンは、ホスト・システムからの８Ｋのデータを受信し、そのデータを圧縮する。例えば、この８Ｋのデータは、一つの圧縮／解凍エンジンに、２つの別個の４Ｋのチャンクで送信して該エンジンが２つのチャンクを個別に圧縮することができ、あるいは、８Ｋのデータを４Ｋのチャンクに分割し、同時に圧縮するために複数のエンジンに送信することも可能である。図示のように、第一キャッシュ・ライン（ＣＬ１）によってインデックスされた第一の４Ｋチャンクのデータは、圧縮／解凍エンジンによって８つの物理メモリ・ページから３つに圧縮されており、第二キャッシュ・ライン（ＣＬ２）によって参照された第二の４Ｋチャンクのデータは一つの物理メモリ・ページに圧縮されている。
【００３１】
ブロック２５０で、受信データに対する圧縮の結果が、圧縮されたデータを格納することが可能な物理メモリ・ページの第二の数を算定することによって分析される。具体的には、物理メモリ・ページの第二の数は、圧縮されたデータを格納するために必要な物理メモリ・ページの数に相当する。従って、図５において、第一チャンクに対し８つのページが割り当てられたが、圧縮データがＤＳ３５０中に格納される場合、３つのページ（すなわち、物理メモリ・ページの第二の数）が必要なだけである。例えば、圧縮されたチャンクを参照するために、ＣＬ１中の３つのインデックス（これらはキャッシュ・ライン３１０１〜３に格納されている）が必要なだけである。従って、最初の８つの割り当てられたメモリ・ページの代わりに、ＤＳ３５０中の物理メモリ・ページ３５９では、キャッシュ・ライン３つが必要なだけである。さらに、第二チャンクが８つの物理メモリ・ページから１つに圧縮されたので、圧縮チャンクを格納するために、ＣＬ２中に必要なインデックス（これはキャッシュ・ライン３２０１に格納されている）は１つだけとなる。
【００３２】
ブロック２６０で、コントローラは、割り当てられた仮想メモリ・ページのどれかが、受信データの各個の部分をまだ格納しないで残っているかどうかを判定する。このような割り当て仮想メモリ・ページの一つ以上が残っている場合、オペレーションは、ブロック２７０に進み、コントローラは、データの圧縮された各個の部分を格納するのに必要な物理メモリ・ページの第二の数が、最初に割り当てられた物理メモリ・ページの数（すなわち８つ）以上かどうかを判定する。データの該圧縮部分が必要とする物理メモリ・ページが、当初割り当てより少ない場合（すなわち１〜７）、このオペレーションは、ブロック２８５に分岐し、圧縮されたデータが仮想メモリ・ページに格納される。それ以外の場合は、オペレーションはブロック２８０に分岐し、未圧縮のデータが仮想メモリ・ページに格納される。図５に示されるように、２つの例示のキャッシュ・ラインの各々に対し、データが、最初に割り当てられた８ページよりも少ない物理メモリ・ページに圧縮されたので、圧縮／解凍エンジンは、圧縮済みのデータを選択し、ＤＳ３５０のメモリ位置３５０１〜４として示された書き込みキャッシュ中に格納することになり、各メモリ位置３５０は、キャッシュ・ライン３１０および３２０中に格納されたそれぞれのインデックスによって参照される。
【００３３】
ブロック２８０および２８５の両方は、判定ブロック２６０にループ・バックし、そして、この処理は、一般に、データを格納する必要のある割り当て仮想メモリ・ページがもうなくなるまで繰り返され、なくなった時点でオペレーション２００は終了する。
【００３４】
データ圧縮の結果に基づいて圧縮されたまたは未圧縮のデータを格納するという選択の他に、特定の条件下では、未圧縮のままデータを格納することとしてもよい。条件の例には、着信したデータが、圧縮／解凍エンジンが圧縮を実施するのに必要なサイズより小さい（例えば、４Ｋチャンクより小さい）場合が含まれよう。
【００３５】
圧縮されたデータを格納するために、初期に割り当てられた物理メモリ・ページのすべては必要としなかったので、割り当て／割り当て解除エンジンは、使用されなかった物理メモリ・ページ（３１０４〜８および３２０２〜８）を割り当て解除し、それらを物理メモリ・プール３４０の最後の利用可能物理メモリ・ページ３４０Ｎの直後に返却すればよい。また、割り当て／割り当て解除エンジンは、テール・ポインタ３４２を、プールに返却された物理メモリ・ページの最後のページの後をポイントするように更新し、ページが解除可能な次の位置を示すことができる。続いて、仮想ページ（すなわちキャッシュ・ライン）中に格納された、返却済みの物理メモリ・ページに対応するインデックスがゼロにされる。
【００３６】
図６は、本明細書に記載の実施形態による、圧縮書き込みキャッシュを用いる解凍オペレーションを示すブロック図である。オペレーション４００は、ブロック４１０で開始し、該ブロックでコントローラ１４０は、圧縮キャッシュ中に格納された一つ以上の仮想メモリ・ページからのデータに対する要求を受信する。データに対するかかる要求は、書き込みキャッシュ１２３からホスト・システム１１０へのデータ転送（例えば、高速読み取りオペレーション）に対する要求を含むことができ、または、書き込みキャッシュ１２３から一つ以上のストレージ・デバイス１８２（例えば、ハード・ディスク・ドライブまたはＳＳＤ）へのデステージ・オペレーションを含み得る。
【００３７】
ブロック４２０で、圧縮／解凍エンジン１６５は、一つ以上の仮想メモリ・ページの各々に対し、物理メモリ・ページのヘッダが、所定の位置中に所定の値を含み、それによりその物理メモリ・ページが圧縮データを含むことを示しているかどうかを判定する。ブロック４３０で、一つ以上の物理メモリ・ページが圧縮データを含むと判定された場合、オペレーションはブロック４４０に分岐し、該ブロックで、圧縮／解凍エンジン１６５は、該一つ以上の物理メモリ・ページ中に含まれる圧縮データを解凍する。別の実施形態では、この解凍は、ストレージ・デバイス１８２１〜Ｎの一つ以上に解凍データを書き込む直前に、ＳＡＳコントローラ１７５１〜Ｎの一つ以上を使って達成することができる。
【００３８】
また一方、物理メモリ・ページが圧縮データを含まない場合、オペレーションは、ブロック４３５に分岐し、該ブロックで未圧縮のデータが物理メモリ・ページから返される。ブロック４３５および４４０の両方は、ブロック４５０にリンクし、ブロック４５０で、データ要求を満たすため、一つ以上の仮想メモリ・ページのいずれかの読み取りがまだ残っているかどうかを判定する。いずれかの仮想メモリ・ページの読み取りが残っている場合、ブロック４５０は、ブロック４３０にループ・バックし、残っていない場合、本オペレーション４００は終了する。
【００３９】
図７は、本明細書に記載の実施形態による、圧縮書き込みキャッシュを用いる割り当て解除オペレーションを示すブロック図である。例えば、デステージ・オペレーションの後、オペレーション５００を用いてキャッシュ・ラインを割り当て解除することができ、このときにはデータは書き込みキャッシュから一つ以上のストレージ・デバイス１８２にコピーされており、データを書き込みキャッシュに維持しておく必要はもはやない。
【００４０】
オペレーション５００は、ブロック５１０で開始され、該ブロックで、コントローラ１４０の割り当て／割り当て解除エンジン１６０は割り当て解除対象の一つ以上のキャッシュ・ラインを受信する。ブロック５２０で、割り当て／割り当て解除エンジンは、該一つ以上のキャッシュ・ラインの一つに対応する物理メモリ・ページを解放する。これは、これら物理メモリ・ページの各々を、物理メモリ・プール３４０の終端に返却し、それに応じて、テール・ポインタ３４２を、プールに返却された物理メモリ・ページ群の後をポイントする（ページが割り当て解除可能な次の位置を示す）ように更新することによって実施すればよい。また、割り当て／割り当て解除エンジン１６０は、これらの物理メモリ・ページをポイントしていた、キャッシュ・ライン中の４バイトのインデックスの各々をゼロにする。ブロック５３０で、割り当て／割り当て解除エンジン１６０は、これらキャッシュ・ラインに対応する仮想メモリ・ページを解放し、それらの仮想メモリ・ページを仮想メモリ・プール３３０の終端に返却し、それに応じて、テール・ポインタ３３２を、プールに返却された仮想メモリ・ページ群の後をポイントするように更新する。ブロック５４０で、割り当て／割り当て解除エンジン１６０は、割り当て解除するさらなるキャッシュ・ラインがあるかどうかを判定する。さらなるキャッシュ・ラインが残っている場合、オペレーションはブロック５２０に戻り、このプロセスは割り当て解除対象のさらなるキャッシュ・ラインがなくなるまで繰り返される。
【００４１】
本発明の様々な実施形態の記述が説明目的のため提示されているが、これらは包括的なものでなく、開示された実施形態に限定することは意図されていない。当業者には、記述された実施形態の範囲および趣旨から逸脱しない、多くの変更および別形が明らかであろう。本明細書で用いられた用語は、上記諸実施形態の原理、実際的な応用、または市販されている技術を凌駕する技術的改良を最善に説明し、あるいは他の当業者が本明細書に開示された実施形態を理解できるように選択されたものである。
【００４２】
当業者なら周知のように、本発明は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。従って、本発明の態様は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、一般に本明細書では全て「回路」、「モジュール」、または「システム」といわれることもある、ソフトウェアおよびハードウェア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、媒体に具体化されたコンピュータ可読プログラム・コードを有する一つ以上のコンピュータ可読媒体に具現化されたコンピュータ・プログラム製品の形を取ることもできる。
【００４３】
一つ以上のコンピュータ可読媒体の任意の組み合わせを用いることが可能である。コンピュータ可読媒体は、コンピュータ可読信号媒体であっても、コンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的、または半導体の、システム、装置、またはデバイス、あるいは前述の任意の適切な組み合わせであってよい。コンピュータ可読ストレージ媒体のさらに具体的な例（非包括的リスト）には、一つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去およびプログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、または前述の任意の適切な組み合わせが含まれよう。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体であってよい。
【００４４】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現化されたコンピュータ可読プログラム・コードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることが可能である。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではないが、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連させて使用するためのプログラムの通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であってよい。
【００４５】
コンピュータ可読媒体上に具現化されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、または前述の任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００４６】
本発明の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合わせで記述することができる。このプログラム・コードは、スタンドアロン・ソフトウェア・パッケージとしてユーザのコンピュータで専ら実行することも、ユーザのコンピュータで部分的に実行することもでき、一部をユーザのコンピュータで、一部を遠隔コンピュータで実行することもでき、あるいは遠隔のコンピュータまたはサーバで専ら実行することもできる。後者の場合は、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することもでき、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことも可能である。
【００４７】
本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照しながら、本発明の態様を上記で説明している。当然のことながら、フローチャート図もしくはブロック図またはその両方の各ブロック、および、フローチャート図もしくはブロック図またはその両方中のブロックの組み合わせは、コンピュータ・プログラム命令によって実装することが可能である。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに提供し、そのコンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実装するための手段を生成するようにすることができる。
【００４８】
また、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令することが可能なこれらのコンピュータ・プログラム命令を、コンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に特定されている機能／動作を実装する命令群を含む製造品を作り出すようにすることができる。
【００４９】
さらに、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードし、そのコンピュータ上、他のプログラム可能装置上、または他のデバイス上で一連のオペレーション・ステップを実行させて、コンピュータ実装のプロセスを作り出し、当該コンピュータ上もしくは他のプログラム可能装置上で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実装するためのプロセスを提供するようにすることも可能である。
【００５０】
図面のフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品から可能となる実装のアーキテクチャ、機能性、およびオペレーションを示している。この点に関し、フローチャートまたはブロック図中の各ブロックは、特定の論理機能を実装するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図面に記載された順序から外れて行われ得ることに留意すべきである。例えば、連続して示された２つのブロックが、関与する機能性に応じ、実際にはほぼ同時に実行されることがあり、時にはこれらのブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方中のブロック群の組み合わせは、特定の機能または動作を実施する特殊用途ハードウェア・ベースのシステム、または特殊用途ハードウェアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。
【００５１】
前述の説明は本発明の諸実施形態を対象としているが、本発明の基本的範囲から逸脱することなく他のさらなる本発明の実施形態を考案することができ、その範囲は添付の特許請求の範囲によって決定される。
【図１】
0006403775.tif 000002
【図２】
0006403775.tif 000003
【図３】
0006403775.tif 000004
【図４】
0006403775.tif 000005
【図５】
0006403775.tif 000006
【図６】
0006403775.tif 000007
【図７】
0006403775.tif 000008