(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024054306
(43)【公開日】2024-04-16
(54)【発明の名称】ハードウェアベースのメモリ圧縮
(51)【国際特許分類】
G06F 12/04 20060101AFI20240409BHJP
G06F 12/00 20060101ALI20240409BHJP
【FI】
G06F12/04 530
G06F12/00 560A
【審査請求】有
【請求項の数】1
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024019288
(22)【出願日】2024-02-13
(62)【分割の表示】P 2021576807の分割
【原出願日】2019-07-02
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【弁理士】
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【弁理士】
【氏名又は名称】松尾 淳一
(74)【代理人】
【識別番号】100119781
【弁理士】
【氏名又は名称】中村 彰吾
(72)【発明者】
【氏名】ジャーン,リンタオ
(72)【発明者】
【氏名】ベネット,ジョン・ジー
(72)【発明者】
【氏名】リー,ボジエ
(57)【要約】 (修正有)
【課題】複数のセグメントに分割された圧縮メモリにおいて、サブセグメントに対応するセグメント内のエントリのサイズを低減させ、低メタデータオーバヘッドを実現するメモり圧縮方法及びメモリを提供する。
【解決手段】方法は、圧縮メモリを複数のセグメントに分割し、各セグメントを複数のサブセグメントに分割し、非圧縮データ空間内の各サブセグメントを、圧縮データ空間内のブロックに圧縮し、圧縮メモリ内のセグメント内のサブセグメントへの読取りリクエストを受け取ると、対応するエントリを、サブセグメントとエントリとの間の第1レベルアドレスマッピングに基づいて最初に判定し、次に、対応するブロックを、エントリとブロックとの間の第2レベルアドレスマッピングに基づいて判定する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
メモリ圧縮のための方法であって、
メモリへの読取りリクエストを受け取るステップであって、前記メモリが、複数のセグメントに分割され、前記複数のセグメントのうちの1つが、複数のサブセグメントに分割され、前記複数のサブセグメントの1つが、1つまたは複数のブロックに圧縮され、前記読取りリクエストが、前記メモリ内のセグメントのサブセグメントに関するものである、ステップと、
前記セグメント内で、前記サブセグメントに対応するエントリを判定するステップであって、前記エントリが、指標(indicator)を含む、ステップと、
前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定するステップと
を含む、方法。
【請求項2】
前記セグメント内で、前記サブセグメントに対応するエントリを判定する前記ステップが、
マッピングルールに基づいて、前記サブセグメントに対応する前記エントリを判定するステップであって、前記マッピングルールが、サブセグメントとエントリとの間の前記セグメント内の静的マッピングを含む、ステップ
を含む、請求項1に記載の方法。
【請求項3】
1つのサブセグメントのサイズが、1つのブロックのサイズの少なくとも8倍になるようにプリセットされる、請求項1に記載の方法。
【請求項4】
前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定する前記ステップが、
前記エントリ内の2つ以上のポインターに基づいて、前記読取りリクエストに関連付けられた2つ以上のブロックを判定するステップであって、前記エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、前記エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、ステップを含む、請求項1に記載の方法。
【請求項5】
前記読取りリクエストに関連付けられた2つ以上のブロックを判定するステップに応答して、前記2つ以上のブロックから前記圧縮データを並行して読み取るステップと、
圧縮解除データを生成するために前記圧縮データを圧縮解除するステップと
をさらに含む、請求項4に記載の方法。
【請求項6】
前記メモリへの書込みリクエストを受け取るステップと、
前記書込みリクエストを受け取るステップに応答して、セグメント内のビットマップをチェックするステップであって、前記セグメントが、複数のエントリ、複数のブロック、および前記ビットマップを含み、前記ビットマップ内の各ビットが、前記セグメント内の各ブロックがアロケートされている(allocated)かどうかを示す、ステップと、
前記セグメント内で十分なブロックが前記書込みリクエストのために利用可能であることを前記ビットマップが示すことに応答して、前記ビットマップに基づいて、前記書込みリクエストに関連付けられた圧縮データを前記セグメント内の1つまたは複数のブロックに書き込むステップと、
前記セグメント内の前記ビットマップおよび1つまたは複数のエントリを更新するステップと
をさらに含む、請求項1に記載の方法。
【請求項7】
前記セグメント内で十分なブロックが前記書込みリクエストのために利用可能でないことを前記ビットマップが示すことに応答して、十分な利用可能ブロックを有する前記メモリ内のさらなるセグメントを判定するステップと、
前記書込みリクエストに関連付けられた圧縮データの少なくとも一部を前記さらなるセグメント内の1つまたは複数のブロックに書き込むステップと
をさらに含む、請求項6に記載の方法。
【請求項8】
頻繁にアクセスされないデータが圧縮メモリに移行される一方で、頻繁にアクセスされるデータが非圧縮メモリに移行され、前記非圧縮メモリと前記圧縮メモリが、プロセッサからアクセス可能な同じアドレス空間を共有する、請求項6に記載の方法。
【請求項9】
前記方法が、前記メモリ内に実装され、前記メモリ内の前記セグメントの前記サブセグメントへの前記読取りリクエストが、メモリコントローラーを介して受け取られる、請求項1に記載の方法。
【請求項10】
メモリであって、
メモリチップと、
コントローラーであって、
前記メモリチップへの読取りリクエストを受け取ることであって、前記メモリチップが、複数のセグメントに分割され、前記複数のセグメントのうちの1つが、複数のサブセグメントに分割され、前記複数のサブセグメントのうちの1つが、1つまたは複数のブロックに圧縮され、前記読取りリクエストが、前記メモリ内のセグメントのサブセグメントに関するものである、受け取ること、
前記セグメント内で、前記サブセグメントに対応するエントリを判定することであって、前記エントリが、指標を含む、判定すること、および
前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定すること
を含む行為を実行するように構成された、コントローラーと
を備える、メモリ。
【請求項11】
前記セグメント内で、前記サブセグメントに対応するエントリを前記判定することが、
マッピングルールに基づいて、前記サブセグメントに対応する前記エントリを判定することであって、前記マッピングルールが、サブセグメントとエントリとの間の前記セグメント内の静的マッピングを含む、判定すること
を含む、請求項10に記載のメモリ。
【請求項12】
1つのサブセグメントのサイズが、1つのブロックのサイズの少なくとも8倍になるようにプリセットされる、請求項10に記載のメモリ。
【請求項13】
前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを前記判定することが、
前記エントリ内の2つ以上のポインターに基づいて、前記読取りリクエストに関連付けられた2つ以上のブロックを判定することであって、前記エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、前記エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、判定することを含む、請求項10に記載のメモリ。
【請求項14】
前記行為が、
前記読取りリクエストに関連付けられた2つ以上のブロックを判定することに応答して、前記2つ以上のブロックから前記圧縮データを並行して読み取ることと、
圧縮解除データを生成するために前記圧縮データを圧縮解除することと
をさらに含む、請求項13に記載のメモリ。
【請求項15】
プログラム製品であって、実行可能命令を含み、前記実行可能命令が、デバイス上で実行されると、
メモリへの読取りリクエストを受け取ることであって、前記メモリが、複数のセグメントに分割され、前記複数のセグメントのうちの1つが、複数のサブセグメントに分割され、前記複数のサブセグメントのうちの1つが、1つまたは複数のブロックに圧縮され、前記読取りリクエストが、前記メモリ内のセグメントのサブセグメントに関するものである、受け取ることと、
前記サブセグメントに対応する前記セグメント内のエントリを判定することであって、前記エントリが、指標を含む、判定することと、
前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することと
を含む行為を、前記デバイスに実行させる、プログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本願発明の一実施例は、例えば、ハードウェアベースのメモリ圧縮に関する。
【背景技術】
【0002】
[0001]メモリとは、コンピューティングシステムで即時使用するための情報を格納するコンピューティングデバイスのコンポーネントのことを言い、メモリはプライマリストレージとも呼ばれる。ランダムアクセスメモリ(RAM)などのメモリは、読み出しに時間を要する(slow-to-access)情報を提供するが、より高い容量を提供するストレージとは対照的に、高速で動作する。一般に、揮発性メモリおよび不揮発性メモリなど、メモリには2つの主な種類があり、揮発性メモリの例は、ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)、スタティックランダムアクセスメモリ(SRAM)などを含む。
【0003】
[0002]メモリ圧縮は、メモリに格納されたデータのサイズを低減させるためにデータ圧縮を利用するメモリ管理技術であり、メモリ圧縮は、ソフトウェアベースのメモリ圧縮およびハードウェアベースのメモリ圧縮を含むことができる。ソフトウェアベースのメモリ圧縮は、オペレーティングシステムで既に使用されており、オペレーティングシステムでは、圧縮処理および圧縮解除処理がプロセッサまたは処理ユニットによって一般に実装される。その代わりに、ハードウェアベースのメモリ圧縮は、ハードウェアを通じて実装され、圧縮処理および圧縮解除処理は、ハードウェアコンポーネントによって処理され得る。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本願発明の一実施例は、例えば、ハードウェアベースのメモリ圧縮に関する。
【課題を解決するための手段】
【0005】
[0003]本開示の実施形態では、ハードウェアベースのメモリ圧縮のためのアプローチが提供される。本開示の実施形態による圧縮メモリは複数のセグメントに分割され、各セグメントは複数のサブセグメントに分割され、非圧縮(uncompressed)データ空間内の各サブセグメントは、圧縮データ空間内の1つまたは複数のブロックに圧縮される。圧縮メモリ内のセグメント内のサブセグメントへの読取りリクエストが受け取られると、対応するエントリが、サブセグメントとエントリとの間の第1レベルアドレスマッピングに基づいて最初に判定され、次に、対応するブロックが、エントリとブロックとの間の第2レベルアドレスマッピングに基づいて判定される。本開示の実施形態によれば、2レベルアドレスマッピングの使用によってエントリのサイズを低減させ、これにより、低メタデータオーバヘッドを実現することができる。その上、圧縮メモリのための提案されたデータレイアウトは、圧縮メモリ内の安定的に速いブロックアロケーションを実現することができる。
【0006】
[0004]本概要は、詳細な説明において下記でさらに説明される選択された概念を単純な形で紹介するために提供される。本概要は、特許請求される主題の主要な特徴または不可欠な特徴を識別することを意図するものでなければ、特許請求される主題の範囲を限定するために用いられることを意図するものでもない。
【0007】
[0005]本開示の実施形態の上記および他の特徴、長所、および態様は、図面を参照しながら本開示をより詳細に説明することによって、より明らかになるであろう。図面におい
て、同じまたは同様の参照符号は、同じまたは同様の要素を表す。
【図面の簡単な説明】
【0008】
【
図1】[0006]本開示の1つまたは複数の実施形態が実装され得るコンピューティングデバイス/サーバーのブロック図である。
【
図2】[0007]本開示の実施形態による、タイルベースの圧縮メモリを用いる例示的なのアーキテクチャを示す図である。
【
図3】[0008]本開示の実施形態による、ハードウェアベースのメモリ圧縮のための方法のフローチャートである。
【
図4】[0009]本開示の実施形態による、タイルの2レベルアドレスマッピングについての概略図である。
【
図5】[0010]本開示の実施形態による、パラグラフから1つまたは複数のブロックへの実例のデータ圧縮についての概略図である。
【
図6】[0011]本開示の実施形態による、タイル内の実例のデータレイアウトを示す図である。
【
図7】[0012]本開示の実施形態による、圧縮データをタイルに書き込むための方法のフローチャートである。
【
図8】[0013]本開示の実施形態による、メモリ圧縮を実装するための実例のハードウェアアーキテクチャを示す図である。
【発明を実施するための形態】
【0009】
[0014]本開示の実施形態が、図を参照しながら、より詳細に下記で説明される。図面は本開示のいくつかの実施形態を示すが、本開示は多くの形で実装されてよく、本開示は、本明細書で示される実施形態に限定されるものと理解されるべきでないことを理解されたい。反対に、これらの実施形態は、本開示をより完全かつ完璧に理解できるように本明細書で提供される。本開示の図面および実施形態は例示のためにしか使用されず、本開示の保護範囲を限定するために使用されないことを理解されたい。
【0010】
[0015]本明細書で使用されるように、用語「含む(includes)」およびその変形は、「含むが限定されない(includes, but is not limited to)」を意味するオープンタームとして読まれるべきである。用語「に基づいて(based on)」は、「に少なくとも部分的に基づいて(based at least in part on)」と読まれるべきである。用語「1つの実施形態(an
embodiment)」は、「少なくとも1つの実施形態(at least one embodiment)」と読まれるべきである。用語「別の実施形態(another embodiment)」は、「少なくとも1つの他の実施形態(at least one other embodiment)」と読まれるべきである。用語「いくつかの実施形態(some embodiments)」は、「少なくともいくつかの実施形態(at least some embodiments)」と読まれるべきである。他の用語の定義は、下記の文中で示される。
【0011】
[0016]一般に、メモリは、コンピューターまたはサーバーなどのコンピューティングデバイスのハードウェアコストの大部分を消費する。例えば、DRAMはクラウドサーバーの40%までまたはさらに高いハードウェアコストを消費することがあり、したがってメモリ圧縮は、メモリコストを低減させるか、サーバーをさらにスケールアップするために使用されることがある。メモリ圧縮技術は、ソフトウェアベースのメモリ圧縮およびハードウェアベースのメモリ圧縮を主に含む。ソフトウェアベースのメモリ圧縮はソフトウェアを通じて実装され、多くのプロセッサリソースを消費して過度のレイテンシにつながり、このことが、オペレーティングシステムおよび/またはアプリケーションの重大なスローダウンを引き起こす。従来のハードウェアベースのメモリ圧縮は、高メタデータオーバ
ヘッドおよび内部断片化を引き起こす不十分なデータレイアウトおよび不十分なブロックアロケーションメカニズムを有し、圧縮メモリの低利用率につながる。したがってメモリ圧縮の従来の方式は、システムスローダウンまたは高メタデータオーバヘッドを引き起こすことがある。
【0012】
[0017]このために、ハードウェアベースのメモリ圧縮のための新しいアプローチが提案された。本開示の実施形態では、圧縮メモリは複数のセグメントに分割され、各セグメントは複数のサブセグメントに分割され、非圧縮データ空間内の各サブセグメントは、圧縮データ空間内のブロックに圧縮される。圧縮メモリ内のセグメント内のサブセグメントへの読取りリクエストが受け取られると、対応するエントリが、サブセグメントとエントリとの間の第1レベルアドレスマッピングに基づいて最初に判定され、次に、対応するブロックが、エントリとブロックとの間の第2レベルアドレスマッピングに基づいて判定される。
【0013】
[0018]本開示の実施形態によれば、2レベルアドレスマッピングの使用によってエントリのサイズを低減させ、これにより、低メタデータオーバヘッドを実現することができる。その上、本開示の実施形態による圧縮メモリのための提案されたデータレイアウトは、圧縮メモリ内の安定的に速いブロックアロケーションを可能にすることができる。さらに、本開示の実施形態はハードウェアベースのメモリ圧縮を使用するので、ソフトウェアベースのメモリ圧縮に比べてシステムおよびアプリケーションスローダウンを回避することができる。
【0014】
[0019]さらに、本開示のいくつかの実施形態では、(圧縮メモリの圧縮単位である)各サブセグメントのサイズを拡大することによって、メモリ圧縮の圧縮比を増加させることができ、これにより、メモリの利用率をさらに向上させる。本開示の実施形態は、各エントリ内に複数のポインターを構成することができ、(ブロックサイズである)メモリの記憶単位を小さくすることができ、したがって、内部断片化を低減させることができる。本開示の実施形態の他の長所が、下記のように例示的な実装形態を参照しながら説明される。本明細書における本開示の基本原理およびいくつかの例示的な実施形態を示すために、
図1から
図8への参照が下記で行われる。
【0015】
[0020]
図1は、本開示の1つまたは複数の実施形態が実装され得るコンピューティングデバイス/サーバー100のブロック図を示している。
図1に描写されたコンピューティングデバイス/サーバー100は例証にすぎず、本開示の実施形態の機能および範囲をどのような手法でも限定しないことが理解されよう。コンピューティングデバイス/サーバー100は、コンピューターまたはサーバーでよい。
【0016】
[0021]
図1に示されているように、コンピューティングデバイス/サーバー100は、汎用コンピューティングデバイスの形である。コンピューティングデバイス/サーバー100のコンポーネントは、1つまたは複数のプロセッサすなわち処理ユニット110、メモリ120、ストレージデバイス130、1つまたは複数の通信ユニット140、1つまたは複数の入力デバイス150、および1つまたは複数の出力デバイス160を含むことができるがこれらに限定されない。処理ユニット110は物理プロセッサまたは仮想プロセッサでよく、メモリ120に格納されたプログラムに基づく様々な処理を実行することができる。マルチプロセッサシステムでは、複数の処理ユニットは、コンピューティングデバイス/サーバー100の同時処理能力を改善するために、コンピューター実行可能命令を並行して実行することができる。
【0017】
[0022]コンピューティングデバイス/サーバー100は典型的には、様々なコンピューターストレージメディアを含む。コンピューターストレージメディアは、揮発性および不
揮発性メディア、または取外し可能および取外し不能メディアを含むがこれらに限定されないコンピューティングデバイス/サーバー100によってアクセス可能な任意のメディアでよい。メモリ120は、揮発性メモリ(例えばレジスタ、キャッシュ、ランダムアクセスメモリ(RAM))、不揮発性メモリ(例えばリードオンリメモリ(ROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、フラッシュメモリ)、またはこれらの任意の組合せであってよい。
【0018】
[0023]
図1に示されているように、メモリ120は、本開示の実施形態によるメモリ圧縮およびブロックアロケーションを実装するためのプログラム125を含むことができ、プログラム125は、本明細書で説明される様々な実施形態の方法および機能を実行するように構成されたプログラムモジュールの1つまたは複数のセットを有することができる。いくつかの実施形態では、メモリ120は、従来の通常のメモリ(非圧縮メモリなど)、および本開示の実施形態による提案された圧縮メモリを含むことができ、圧縮メモリは、新しいデータレイアウトおよびブロックアロケーションメカニズムを有することができ、圧縮メモリは、めったにまたはあまり頻繁にアクセスされることのないことがある圧縮データを格納するために使用されてよい。
【0019】
[0024]ストレージデバイス130は任意の取外し可能または取外し不能メディアであることが可能であり、フラッシュドライブ、ディスク、および他の任意のメディアなどの機械可読メディアを含むことができ、ストレージデバイス130は、情報および/またはデータを格納するために使用され、コンピューティングデバイス/サーバー100内でアクセスされることが可能である。例えば、ストレージデバイス130は、ハードディスクドライブ(HDD)またはソリッドステートドライブ(SSD)でよい。
【0020】
[0025]コンピューティングデバイス/サーバー100は、追加の取外し可能/取外し不能または揮発性/不揮発性ストレージメディアをさらに含むことができる。
図1に示されていないが、磁気ディスクドライブが、取外し可能かつ不揮発性ディスク(例えば「フロッピーディスク」)に対する読出しおよび書込みをするために提供され、光ディスクドライブが、取外し可能不揮発性光ディスクに対する読出しおよび書込みをするために提供されてよい。このようなケースでは、各ドライブは、1つまたは複数のデータメディアインターフェースを介してバス(図示せず)に接続される。
【0021】
[0026]通信ユニット140は、通信メディアを介して別のコンピューティングデバイスと通信する。さらに、コンピューティングデバイス/サーバー100のコンポーネントの機能は、単一のコンピューティングクラスタ、または、通信接続を介して互いに通信される複数のコンピューティングマシンで実装されてよい。したがって、コンピューティングデバイス/サーバー100は、1つまたは複数の他のサーバー、ネットワークパーソナルコンピューター(PC)、または別のネットワークノードへの論理接続を使用したネットワーキング環境で動作することができる。
【0022】
[0027]入力デバイス150は、マウス、キーボード、トラックボールなどの1つまたは複数の入力デバイスを含むことができる。出力デバイス160は、ディスプレイ、ラウドスピーカー、プリンターなどの1つまたは複数の出力デバイスを含むことができる。コンピューティングデバイス/サーバー100は、通信ユニット140を介して、ストレージデバイスもしくはディスプレイデバイスなどの1つもしくは複数の外部デバイス(図示せず)、コンピューティングデバイス/サーバー100とユーザーが対話することを可能にする1つもしくは複数のデバイス、または、1つもしくは複数の他のコンピューティングデバイス(例えばネットワークカード、モデムなど)とコンピューティングデバイス/サーバー100が通信することを可能にする任意のデバイスとさらに通信することができる。このような通信は、入出力(I/O)インターフェース(図示せず)を介して実行する
ことができる。次に、本開示の実例の実施形態を具体的に示すために
図2~
図8への参照が下記で行われる。
【0023】
[0028]
図2は、本開示の実施形態によるタイルベースの圧縮メモリを用いる例示的なアーキテクチャ200を示している。
図2に示されているように、アーキテクチャ200は、CPU210、メモリコントローラー220、非圧縮メモリ231、圧縮メモリ232、およびソフトウェアアプリケーション240を備える。CPU210は、
図1に示されているような処理ユニット110などの、プログラム命令を実行するための処理ユニットでよい。メモリコントローラー220は、非圧縮メモリ231および圧縮メモリ232の間で行き来するデータのフローを管理するデジタル回路である。メモリコントローラーは、別個のチップでもよく、(同じダイ上に置かれているか、CPU210の統合部分として)別のチップに統合されてもよい。メモリコントローラーは、メモリに電流を供給することによってメモリをアクティブに保つと同時に、メモリでの読書き動作を管理することができる。
【0024】
[0029]非圧縮メモリ231は、従来のDRAMなどの通常のメモリであり、頻繁にアクセスされるデータは頻繁にアクセスされ、圧縮に適していないので、非圧縮メモリ231は、頻繁にアクセスされるデータを格納するために使用されてよい。圧縮メモリ232は、本開示の実施形態による新しく提案されたメモリであり、メモリに格納され得るデータの量を増加させるように、あまり頻繁にアクセスされないデータを格納するために使用されてよい。ソフトウェアアプリケーション240は、アプリケーション、ライブラリ、ドライバ、オペレーティングシステム、ハイパーバイザー、および/または他のコンポーネントを含み得る1つまたは複数のプログラムを含む。ソフトウェアアプリケーション240内の1つまたは複数のプログラムは、頻繁にアクセスされるデータと、頻繁にアクセスされないデータとを区別することができ、どのデータが非圧縮メモリ231に格納されるべきか、およびどのデータが圧縮メモリ232に格納されるべきかを制御することができる。本開示の実施形態では、非圧縮メモリ231と圧縮メモリ232は、CPU210からアクセス可能な同じアドレス空間を共有することができる。
【0025】
[0030]いくつかの実施形態では、データの圧縮動作および圧縮解除動作は圧縮メモリ232において実装されてよく、このケースでは、本開示の実施形態は、メモリモジュール内のデータレイアウトおよびブロックアロケーションのための新しいデザインとして実装されてよい。代替として、圧縮メモリ232のための圧縮動作および圧縮解除動作は、メモリコントローラー220において実装されてよい。
【0026】
[0031]実例のアーキテクチャ200によれば、CPU210は、ソフトウェアアプリケーション240の判定に基づいて、メモリコントローラー220を介して非圧縮メモリ231または圧縮メモリ232にデータを送ることができる。本開示の実施形態は、圧縮メモリ232のための新しいデータレイアウトおよびブロックアロケーションアルゴリズムを提案し、これらは、圧縮メモリのメタデータオーバヘッドを低減させ、圧縮メモリにおける高速ブロックアロケーションを実現することができる。
【0027】
[0032]
図3は、本開示の実施形態による、ハードウェアベースのメモリ圧縮のための方法300のフローチャートを示している。方法300は、
図1を参照しながら説明されたようなコンピューティングデバイス/サーバー100のメモリ120、または、
図2を参照しながら説明されたような圧縮メモリ232またはメモリコントローラー220によって実行され得ることを理解されたい。
【0028】
[0033]302において、メモリへの読取りリクエストを受け取り、読取りリクエストは、メモリ内のセグメントのサブセグメントに関するものである。本明細書における本開示
の実施形態では、圧縮メモリは複数のセグメントに分割され、各セグメントは第1の所定のサイズ(32KiBなど)を有することができ、「タイル」と呼ばれてもよく、例えば、メモリは4GiBの容量を有することができる。圧縮メモリの圧縮比が2:1であり、4GiBの圧縮メモリが、8GiBの非圧縮データを格納できると仮定する。
【0029】
[0034]本明細書における本開示の実施形態では、各セグメントは複数のサブセグメントに分割され、各サブセグメントは第2の所定のサイズ(512バイトなど)を有することができ、「パラグラフ」と呼ばれてもよい。非圧縮データ空間内の各サブセグメントは、圧縮データ空間内のブロックに圧縮され、各ブロックは第3の所定のサイズ(64バイトなど)を有することができる。メモリ、タイル、パラグラフ、およびブロックの実例のサイズがいくつかの実施形態で記述されているが、開発者および/またはアドミニストレータの手動構成に応じて、他のサイズが同様に可能でよいことを理解されたい。タイルは、ルートエントリ、ブロック、およびビットマップから成る固定サイズの自己完結型データ構造である。本開示の実施形態は、概念「セグメント」および「サブセグメント」を表すために用語「タイル」および「パラグラフ」を使用するが、概念「セグメント」および「サブセグメント」を表現するために他の用語または単語が同様に可能でよいことを理解されたい。
【0030】
[0035]304において、サブセグメントに対応するセグメント内のエントリを判定し、エントリは、指標(1つまたは複数のポインターなど)を含む。本開示のいくつかの実施形態では、エントリは、タイルの自己完結型データ構造の一部として、タイルのルート内にあってよく、エントリは、「ルートエントリ」と呼ばれてもよい。例えば、対応するルートエントリは、パラグラフとエントリとの間の第1レベルアドレスマッピングに基づいて最初に判定される。いくつかの実施形態では、第1レベルアドレスマッピングは固定マッピングルールでよく、マッピングルールは、タイル内のパラグラフとルートエントリとの間の静的マッピングを含むことができる。対応するルートエントリは、パラグラフが既知になるとアクセスされることになる特定のタイル内にあってよい。このようにして、ルートエントリのストレージオーバヘッドを、動的マッピングとは対照的に低減させることができる。いくつかの実施形態では、固定マッピングルールは、インターリーブ方式で構成されてよい。例えば、パラグラフアドレスの最後のビットは、連続するパラグラフが広く分布されるように、ルートエントリのインデックスとして使用される。このようにして、タイル内のオーバーフローイベントは低減されるか、より良くハンドリングされ得る。代替として、固定マッピングルールは、線形マッピング(例えば連続するパラグラフが同様の圧縮割当量を有する)、またはランダムマッピング(CRC32アルゴリズムなど)でよい。
【0031】
[0036]306において、読取りリクエストに関連付けられた圧縮データを格納する1つまたは複数のブロックをエントリ内の指標に基づいて判定する。例えば、対応するブロックは、ルートエントリとブロックとの間の第2レベルアドレスマッピングに基づいて判定される。第2レベルアドレスマッピングは、ルートエントリとブロックとの間の動的マッピングを備える動的マッピングルールでよい。このようにして、高速ブロックアロケーションを実現することができる。本開示の方法300によれば、2レベルアドレスマッピングの使用によってエントリのサイズを低減させ、これにより、低メタデータオーバヘッドを実現し、メモリ空間を節約することができる。さらに、圧縮メモリは、圧縮により、非圧縮メモリより多くのデータを格納することができるので、本開示の実施形態は、メモリコストの低減、および/またはメモリ容量のスケールアップを行うことができる。
【0032】
[0037]いくつかの実施形態では、判定されたルートエントリが2つ以上のポインターを含む場合、2つ以上の対応するブロックが判定され、圧縮データは、2つ以上のブロックから並行して読み取られてよい。このようにして、データブロックを並行してフェッチす
ることができ、これにより、圧縮メモリの読取りスピードを増加させる。すなわち、ルートエントリを読み取った後、第2レベルのブロックを判定することができ、レイテンシを低減させるために複数のブロックの読取りが並行して発行され得る。
【0033】
[0038]その上、1つのルートエントリが複数のポインターを含み得るので、複数のブロックを1つのエントリから判定することができる。すなわち、1つのパラグラフは、多くの数のブロック(例えば、1つのブロック、2つのブロック、4つのブロック、8つのブロックなど)に圧縮され得る。このようにして、ブロックサイズより大きいパラグラフサイズを可能にすることによって、複数のブロックが、1つのパラグラフから圧縮された圧縮データを格納するように構成されてよく、したがって、内部断片化を低減させることができる。
【0034】
[0039]
図4は、本開示の実施形態による、タイルの2レベルアドレスマッピングの概略
図400を示している。
図4に示されているように、圧縮メモリは、タイル410、420などの複数のタイルを含み、タイル内のパラグラフからブロックへのアドレスマッピングは2レベルアドレスマッピングを通じて実装され、2レベルアドレスマッピングでは、ルートエントリが2レベルアドレスマッピングのための間接指示(indirection)として使用される。
【0035】
[0040]
図4を参照すると、タイル410は、複数のルートエントリ(ルートエントリ411など)、複数のブロック(ブロック412、413など)、およびビットマップ(ビットマップ414など)を含むことができ、ルートエントリは、対応するブロックを探索するために使用され、ブロックは圧縮データを格納するために使用され、ビットマップは、タイル410内のブロックのアロケーション状態を示すために使用される。例えば、ビットマップ414内の各ビットは、タイル410内の各ブロックがアロケートされているかどうかを示すことができる。
図4の例では、第1に、タイル内の1つのパラグラフが、矢印416で示されるように、固定マッピングに基づいてルートエントリ(ルートエントリ411など)にマッピングされ、ここで、各パラグラフは1つのルートエントリに対応し、ルートエントリ411は、対応するブロックを見つけるための1つまたは複数のポインターを含む。第2に、ルートエントリ411は、矢印417および418で示されるように、動的マッピングに基づいてブロック412および413にマッピングされる。動的マッピングをタイルに限定することによって、圧縮メモリ内のブロックのアロケーションを安定的に速くすることができる。
【0036】
[0041]いくつかの実施形態では、ルートエントリ411のポインターの最大数は、パラグラフサイズとブロックサイズとの間の第1の比率に基づいて判定されてよく、一方で、ルートエントリ411内の各ポインターのサイズは、タイルサイズとブロックサイズとの間の第2の比率に基づいて判定されてよい。例えば、各タイルが32KiBのサイズを有し、各パラグラフが512バイトのサイズを有し、各ブロックが64バイトのサイズを有する上記の例では、各ルートエントリのサイズは8×9ビット、つまり9バイトであり、ここで、8は、1つのルートエントリ内のポインターの最大数を表し、9ビットは各ポインターのサイズを表す。このようにして、本開示の実施形態によるルートエントリ、つまりメタデータは、メモリ空間のごく一部を占めるだけであり、これにより、圧縮メモリ内のメタデータオーバヘッドを節約する。
【0037】
[0042]
図5は、本開示の実施形態による、パラグラフから1つまたは複数のブロックへの実例のデータ圧縮についての概略
図500を示す。本開示の実施形態では、メモリアロケーションの単位は、例えば32KiBなどのサイズのタイルであり、非圧縮データ空間内の圧縮の単位は、例えば512バイトなどのサイズのパラグラフであり、圧縮データ空間内のメモリアクセスの単位は、例えば64バイトなどのサイズのブロックである。この
例では、1つのパラグラフのサイズは、例えば1つのブロックのサイズの8倍になるようにプリセットされる。このようにして、より大きい圧縮単位が一般により小さい圧縮単位より大きい圧縮比を有するので、各パラグラフのサイズを拡大することによって、メモリ圧縮の圧縮比を増加させることができる。
【0038】
[0043]
図5を参照すると、各タイルは、パラグラフ510および520などの複数のパラグラフに分割されてよく、パラグラフは、プロセッサおよびアプリケーションによって見られるデータオブジェクトでよい。
図5に示されているように、非圧縮データ空間内のパラグラフ510は、ブロック511、512、513、および514などの、圧縮データ空間内の4つのブロックに圧縮されてよく、一方で、非圧縮データ空間内のパラグラフ520は、ブロック521、522、および523などの、圧縮データ空間内の3つのブロックに圧縮されてよい。
図5に示されているように、データのタイプおよびデータの実際の内容に応じて、種々のデータが種々の圧縮比を有することができる。言い換えれば、ブロックの実際の量は個々のパラグラフの圧縮比に依存する。
【0039】
[0044]
図6は、本開示の実施形態による、タイル610内の実例のデータレイアウト600を示す。図示のように、タイル610は、複数のルートエントリ620(ルートエントリ621および622など)、複数のデータブロック630、ならびにビットマップ640を含む。実例のデータレイアウト600では、タイル610は、例えば32KiBのサイズを有することができ、各パラグラフは512バイトのサイズを有し、各ブロックは64バイトのサイズを有する。
【0040】
[0045]上記の例では、タイル610は全体で512個のブロックを有する。圧縮比が2:1にプリセットされ、タイル610が、128個のパラグラフおよび128個のルートエントリを有することができると仮定する。各ルートエントリは8個までのポインターを含むことができ、各ポインターは9ビットのサイズを有する。このように、各パラグラフは、9バイトまでのサイズを有する1つのルートエントリに対応させることができ、128個のパラグラフが、メモリ空間の128×9バイト(18ブロックに対応する)を占めることになり、各パラグラフは8ブロックまで圧縮され得る。ビットマップ640は、圧縮メモリ内のブロックのアロケーションを制御するために使用され、タイル610内の512個のブロックは、1ブロックに相当する512ビットを必要とすることになる。したがって、タイル610は、ルートエントリを格納するための18ブロック、および、ビットマップを格納するための1ブロックを有し、タイル610は全体として、メタデータを格納するために19ブロックを占め、したがって、
図6のID「18」~「510」を有するブロックなど、493個のブロックが圧縮データを格納するために残っていることになる。このようにして、メモリの利用率を向上させることができる。
【0041】
[0046]
図6を参照すると、ビットマップ640は、いくつかのブロックがアロケートされている一方で、他のブロックがアロケートされていないことを示し、ビット「1」は、対応するブロックがアロケートされていることを表す。タイル610への書込みリクエストが受け取られると、ビットマップ640は、圧縮データを格納するための1つまたは複数のブロックをアロケートするために最初にチェックされることになり、次に、対応するルートエントリは、アロケートされるブロックのIDを書き込まれることになり、ビットマップ640も修正されることになる。タイル610内のパラグラフへの読取りリクエストが受け取られると、対応するルートエントリ(ルートエントリ621など)は、第1のレベルの固定マッピングに基づいて最初に判定されることになり、次に、関連ブロック(ID「18」、「19」、「20」、および「21」を有するブロックなど)は、第2のレベルの動的マッピングに基づいて判定されることになる。このようにして、速い方式でブロックをアロケートして識別することができ、これにより、圧縮メモリのストレージ効率を改善する。
【0042】
[0047]
図7は、本開示の実施形態による、圧縮データを書き込むための方法700のフローチャートを示す。
図3の方法300のようなタイルへの読取りリクエストの処理と比べると、方法700は、メモリへの書込みリクエストの処理方法を表現する。方法700は、
図1を参照しながら説明されたようなコンピューティングデバイス/サーバー100のメモリ120、または、
図2を参照しながら説明されたような圧縮メモリ232もしくはメモリコントローラー220によって実行され得ることを理解されたい。
【0043】
[0048]702において、圧縮メモリ内のメモリへの書込みリクエストが受け取られると、タイルからルートエントリへのアドレス変換を実行する。例えば、アドレス変換器は、非圧縮メモリ空間内の物理アドレスから圧縮メモリ空間内のルートエントリアドレスを計算することができる。
【0044】
[0049]704において、タイルのビットマップをチェックし、ビットマップ内の各ビットは、タイル内の各ブロックがアロケートされているかどうかを示す。706において、ビットマップに従って、タイル内で十分なブロックが書込みリクエストのために利用可能かどうかが判定される。タイル内で十分なブロックが書込みリクエストのために利用可能であることをビットマップが示す場合、708において、書込みリクエストに関連付けられた圧縮データを、ビットマップに基づいてタイル内の1つまたは複数のブロックに書き込む。次に710において、ビットマップおよびルートエントリを同様に書き込むか、更新し、圧縮データは圧縮メモリに正常に格納される。
【0045】
[0050]タイル内で十分なブロックが書込みリクエストのために利用可能でないことをビットマップが示す場合、708において、書込みリクエストのための十分な利用可能ブロックを有するメモリ内の別のタイルを見つける必要がある。このケースでは、これは、このタイル内のブロックが利用されたこと、およびオーバーフローイベントが発生したことを意味する。次に714において、書込みリクエストに関連付けられた圧縮データの少なくとも一部を別のタイル内のブロックに書き込む。このようにして、オーバーフローイベントを正しくハンドリングして、圧縮メモリ内のデータ喪失を回避することができる。いくつかの実施形態では、通常のルートエントリ内の特別値(例えば511)がオーバーフロールートエントリを表すために使用されてよく、特別値の後には、オーバーフロータイル内の別のブロックを参照するポインターが続く。オーバーフロータイル内のブロックは、オーバーフロータイル内の圧縮データブロックを参照するためのルートエントリとして使用されてよい。いくつかの実施形態では、別の特別値(例えば0)が、空のルートエントリを示すために使用されてよく、空のルートエントリは、パラグラフがアロケートされていないこと、またはメモリ内容の全てのビットがゼロであることを意味する。
【0046】
[0051]
図8は、本開示の実施形態によるメモリ圧縮を実装するための実例のハードウェアアーキテクチャ800を示している。
図8は、メモリコントローラーに実装され得る本開示の例を示すが、本開示の実施形態は、圧縮メモリに実装されてもよい。実例のハードウェアアーキテクチャ800は、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)バスを介してホストに取り付けるフィールドプログラマブルゲートアレイ(FPGA)基板でよい。ハイパーバイザーは、FPGAのPCIeメモリマップドI/O(MMIO)空間をソフトウェアにマッピングし、したがってCPUは、圧縮メモリに直接アクセスすることができる。さらに、CPUは、非圧縮メモリに同様に直接アクセスすることができる。
【0047】
[0052]
図8に示されているように、実例のハードウェアアーキテクチャ800は、プラットフォームラッパー810、PCIe/UPI820、(キャッシュ/バッファ831、書込みコントローラー832、および読取りコントローラー833を含む)メモリコン
トローラー830、ならびにDRAM840を備える。メモリコントローラー830は、DRAM840との間を行き来するデータを制御することができ、PCIe/UPI820を介してプラットフォームラッパー810と通信することができる。ラッパー810は、読取りリクエスト中にブロック内のルートエントリおよび圧縮データを読み取るために使用されてよく、ラッパー810は、書込みリクエスト中にビットマップを読み取るために使用されてよい。
【0048】
[0053]キャッシュ/バッファ831は、読み取られている/書き込まれているか、最近アクセスされたパラグラフを格納し、2つの目的を有することができる。第1に、キャッシュ/バッファ831は、同じパラグラフ上の競合する読取り/書込み動作を見つけ、これらを、パラグラフごとの(per-paragraph)FIFOで待ち行列に入れ、その結果、動作を順番に実行することができる。キャッシュ/バッファ831は、メモリコントローラー830の残りの部分に、独立した読取り/書込み動作を発することしかせず、したがって、同時動作によって引き起こされる不整合を回避することができる。第2に、キャッシュ/バッファ831は、アクセス増大問題を軽減するために、最近アクセスされたパラグラフをキャッシュする。CPUアクセス粒度(キャッシュラインサイズまたは命令ワードサイズ)は通常、パラグラフサイズより小さいので、CPUは、パラグラフを順次スキャンするとき、複数の読取り/書込み動作を発することになる。キャッシュの使用によって、パラグラフの圧縮ブロックは、何度もDRAMからロードされて圧縮解除される必要はなく、これによりオーバヘッドを低減させる。
【0049】
[0054]読取りコントローラー833はキャッシュ/バッファ831から読取りリクエストを受け取り、読取りリクエスト内のアドレスから圧縮メモリ空間内のルートエントリアドレスを計算する。次に、読取りコントローラー833はルートエントリにアクセスし、タイル内のブロックオフセットを判定し、圧縮メモリ空間内のブロックアドレスを計算する。次に、読取りコントローラー833はブロックにアクセスし、データを圧縮解除エンジンに送り込み、圧縮解除データはキャッシュ/バッファ831に格納され、CPUに送られる。
【0050】
[0055]書込みコントローラー832はキャッシュ/バッファ831から書込みリクエストを受け取り、書込みリクエスト内のアドレスから圧縮メモリ空間内のルートエントリアドレスを計算する。次に、書込みコントローラー832はルートエントリおよびビットマップにアクセスし、タイル内のブロックオフセットを判定し、圧縮メモリ空間内のブロックアドレスを計算する。書込みコントローラー832は書込みリクエストに従ってデータを修正し、次に、データを圧縮エンジンに送り込む。圧縮後、圧縮データサイズの変化に応じて、1つまたは複数のブロックがブロックアロケータからアロケートされるか、アロケートを取り消される。最後に、圧縮データは、タイル内のブロックに書き込まれる。
【0051】
[0056]圧縮エンジンは、データの圧縮および圧縮解除を実行することができる。同時リクエストをスピードアップするために、書込みコントローラー832は、並行して実行される複数の圧縮エンジンを内部に有することができる。本開示の実施形態によれば、キャッシュ/バッファ831によって競合動作がフィルタリングされるので、同時リクエストの順序は重要ではない。
【0052】
[0057]ブロックアロケータは、各タイル内のビットマップを管理することができる。アロケーションをスピードアップするために、ブロックアロケータは、最近アクセスされたタイル、および多くの利用可能ブロックを有するいくつかのタイルのビットマップをキャッシュするためのビットマップキャッシュを内部に維持する。アロケートの取消しのために、対応するビットはゼロにセットされてよい。アロケーションのために、ブロックアロケータは、対応するタイルのビットマップを最初にロードする。十分な利用可能ブロック
がある場合、対応するビットがセットされる。ない場合、ブロックアロケータは、十分な利用可能ブロックを有するオーバーフロータイルを見つけるためにビットマップキャッシュをチェックする。このようなタイルを見つけることができなかった場合、ブロックアロケータは、いくつかのタイル内のビットマップをスキャンし、オーバーフロータイルを見つけることができなかった場合、アロケーション失敗をレポートする。
【0053】
[0058]本明細書で機能的に説明されるものは、1つまたは複数のハードウェアロジックコンポーネントによって少なくとも部分的に実行することができる。例えば、また限定することなく、使用可能なハードウェアロジックコンポーネントの例証的タイプは、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップシステム(SOC)、コンプレックスプログラマブルロジックデバイス(CPLD)等を含む。
【0054】
[0059]本開示の方法を実行するためのプログラムコードは、1つまたは複数のプログラミング言語の任意の組合せで書き込まれてよい。これらのプログラムコードは、プログラムコードがプロセッサまたはコントローラーによって実行されると、フローチャートおよび/またはブロック図に指定された機能/動作を実装させるように、汎用コンピューター、専用コンピューター、または他のプログラム可能データ処理装置のプロセッサまたはコントローラーに提供されてよい。プログラムコードは、スタンドアロンソフトウェアパッケージとして全面的に機械で、または部分的に機械で、あるいは、部分的に機械かつ部分的にリモート機械で、または全面的にリモート機械もしくはサーバーで、実行することができる。
【0055】
[0060]本開示の文脈では、機械可読メディアは、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連して使用するためのプログラムを収めるか、格納することができる任意の有形メディアでよい。機械可読メディアは、機械可読信号メディアまたは機械可読ストレージメディアでよい。機械可読メディアは、電子、磁気、光学、電磁気、赤外線、もしくは半導体のシステム、装置、もしくはデバイス、または前述の任意の適切な組合せを含むことができるがこれらに限定されない。機械可読ストレージメディアのより具体的な例は、1つもしくは複数のワイヤを含む電気接続、ポータブルコンピューターディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROMもしくはフラッシュメモリ)、光ファイバ、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、光ストレージデバイス、磁気ストレージデバイス、または前述の任意の適切な組合せを含む。
【0056】
[0061]さらに、特定の順序で動作が描写されるが、これは、望ましい結果を実現するために、示された特定の順序で、もしくは順番に、このような動作が実施されること、または全ての示された動作が実施されることを要求するものとみなされるべきではない。いくつかの状況では、マルチタスク処理および同時処理が有利なこともある。同様に、いくつかの特定の実装形態の詳細が上記の議論に収められているが、これらは、本開示の範囲を限定するものと解釈されるべきではなく、特定の実施形態に固有であり得る特徴の説明と解釈されるべきである。別個の実施形態の文脈で記述されるいくつかの特徴は、単一の実装形態と組み合わせて実装されてもよい。逆に、単一の実装形態の文脈で記述される様々な特徴は、別々にまたは任意の適切なサブ組合せで、複数の実施形態で実装されてもよい。
【0057】
[0062]いくつかの本開示の実例の実施形態が下記にリストアップされる。
[0063]1つの態様では、メモリ圧縮のための方法が提供される。方法は、メモリへの読取りリクエストを受け取ることであって、メモリが、複数のセグメントに分割され、複数
のセグメントのうちの1つが、複数のサブセグメントに分割され、複数のサブセグメントのうちの1つが、1つまたは複数のブロックに圧縮され、読取りリクエストが、メモリ内のセグメントのサブセグメントに関するものである、受け取ることと、セグメント内でサブセグメントに対応するエントリを判定することであって、エントリが、指標を含む、判定することと、エントリ内の指標に基づいて、読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することと、を含む。
【0058】
[0064]いくつかの実施形態では、セグメント内でサブセグメントに対応するエントリを判定することが、マッピングルールに基づいて、サブセグメントに対応するエントリを判定することであって、マッピングルールが、サブセグメントとエントリとの間のセグメント内の静的マッピングを含む、判定することを含む。
【0059】
[0065]いくつかの実施形態では、1つのサブセグメントのサイズが、1つのブロックのサイズの少なくとも8倍になるようにプリセットされる。
[0066]いくつかの実施形態では、エントリ内の指標に基づいて、読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することが、エントリ内の2つ以上のポインターに基づいて、読取りリクエストに関連付けられた2つ以上のブロックを判定することであって、エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、判定することを含む。
【0060】
[0067]いくつかの実施形態では、方法は、読取りリクエストに関連付けられた2つ以上のブロックを判定することに応答して、2つ以上のブロックから圧縮データを並行して読み取ることと、圧縮解除データを生成するために圧縮データを圧縮解除することとをさらに含むことができる。
【0061】
[0068]いくつかの実施形態では、方法は、メモリへの書込みリクエストを受け取ることと、書込みリクエストを受け取ることに応答して、セグメント内のビットマップをチェックすることであって、セグメントが、複数のエントリ、複数のブロック、およびビットマップを含み、ビットマップ内の各ビットが、セグメント内の各ブロックがアロケートされているかどうかを示す、チェックすることと、セグメント内で十分なブロックが書込みリクエストのために利用可能であることをビットマップが示すことに応答して、ビットマップに基づいて、書込みリクエストに関連付けられた圧縮データをセグメント内の1つまたは複数のブロックに書き込むことと、セグメント内のビットマップおよび1つまたは複数のエントリを更新することとをさらに含むことができる。
【0062】
[0069]いくつかの実施形態では、方法は、セグメント内で十分なブロックが書込みリクエストのために利用可能でないことをビットマップが示すことに応答して、十分な利用可能ブロックを有するメモリ内のさらなるセグメントを判定することと、書込みリクエストに関連付けられた圧縮データの少なくとも一部をさらなるセグメント内のブロックに書き込むこととをさらに含むことができる。
【0063】
[0070]いくつかの実施形態では、頻繁にアクセスされないデータが圧縮メモリに移行される一方で、頻繁にアクセスされるデータが非圧縮メモリに移行され、非圧縮メモリと圧縮メモリが、プロセッサからアクセス可能な同じアドレス空間を共有する。
【0064】
[0071]いくつかの実施形態では、方法が、メモリ内に実装され、メモリ内のセグメントのサブセグメントへの読取りリクエストが、メモリコントローラーを介して受け取られる。
【0065】
[0072]別の態様では、メモリが提供される。メモリは、メモリチップと、行為を実行するように構成されたコントローラーとを備える。行為は、メモリへの読取りリクエストを受け取ることであって、メモリが、複数のセグメントに分割され、複数のセグメントのうちの1つが、複数のサブセグメントに分割され、複数のサブセグメントのうちの1つが、1つまたは複数のブロックに圧縮され、読取りリクエストが、メモリ内のセグメントのサブセグメントに関するものである、受け取ることと、セグメント内でサブセグメントに対応するエントリを判定することであって、エントリが、指標を含む、判定することと、エントリ内の指標に基づいて、読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することとを含む。
【0066】
[0073]いくつかの実施形態では、サブセグメントに対応するセグメント内のエントリを判定することが、マッピングルールに基づいて、サブセグメントに対応するエントリを判定することであって、マッピングルールが、サブセグメントとエントリとの間のセグメント内の静的マッピングを含む、判定することを含む。
【0067】
[0074]いくつかの実施形態では、1つのサブセグメントのサイズが、1つのブロックのサイズの少なくとも8倍になるようにプリセットされる。
[0075]いくつかの実施形態では、エントリ内の指標に基づいて、読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することが、エントリ内の2つ以上のポインターに基づいて、読取りリクエストに関連付けられた2つ以上のブロックを判定することであって、エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、判定することを含む。
【0068】
[0076]いくつかの実施形態では、行為は、読取りリクエストに関連付けられた2つ以上のブロックを判定することに応答して、2つ以上のブロックから圧縮データを並行して読み取ることと、圧縮解除データを生成するために圧縮データを圧縮解除することとをさらに含むことができる。
【0069】
[0077]いくつかの実施形態では、行為は、メモリへの書込みリクエストを受け取ることと、書込みリクエストを受け取ることに応答して、セグメント内のビットマップをチェックすることであって、セグメントが、複数のエントリ、複数のブロック、およびビットマップを含み、ビットマップ内の各ビットが、セグメント内の各ブロックがアロケートされているかどうかを示す、チェックすることと、セグメント内で十分なブロックが書込みリクエストのために利用可能であることをビットマップが示すことに応答して、ビットマップに基づいて、書込みリクエストに関連付けられた圧縮データをセグメント内の1つまたは複数のブロックに書き込むことと、セグメント内のビットマップおよび1つまたは複数のエントリを更新することとをさらに含むことができる。
【0070】
[0078]いくつかの実施形態では、行為は、セグメント内で十分なブロックが書込みリクエストのために利用可能でないことをビットマップが示すことに応答して、十分な利用可能ブロックを有するメモリ内のさらなるセグメントを判定することと、書込みリクエストに関連付けられた圧縮データの少なくとも一部をさらなるセグメント内のブロックに書き込むこととをさらに含むことができる。
【0071】
[0079]いくつかの実施形態では、頻繁にアクセスされないデータが圧縮メモリに移行される一方で、頻繁にアクセスされるデータが非圧縮メモリに移行され、非圧縮メモリと圧縮メモリが、プロセッサからアクセス可能な同じアドレス空間を共有する。
【0072】
[0080]さらなる態様では、プログラム製品が提供される。プログラム製品は、実行可能命令を含み、実行可能命令が、デバイス上で実行されると、行為をデバイスに実行させる。行為は、メモリへの読取りリクエストを受け取ることであって、メモリが、複数のセグメントに分割され、複数のセグメントのうちの1つが、複数のサブセグメントに分割され、複数のサブセグメントのうちの1つが、1つまたは複数のブロックに圧縮され、読取りリクエストが、メモリ内のセグメントのサブセグメントに関するものである、受け取ることと、セグメント内でサブセグメントに対応するエントリを判定することであって、エントリが、指標を含む、判定することと、エントリ内の指標に基づいて、読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することとを含む。
【0073】
[0081]いくつかの実施形態では、セグメント内でサブセグメントに対応するエントリを判定することが、マッピングルールに基づいて、サブセグメントに対応するエントリを判定することであって、マッピングルールが、サブセグメントとエントリとの間のセグメント内の静的マッピングを含む、判定することを含む。
【0074】
[0082]いくつかの実施形態では、1つのサブセグメントのサイズが、1つのブロックのサイズの少なくとも8倍になるようにプリセットされる。
[0083]いくつかの実施形態では、エントリ内の指標に基づいて、読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することが、エントリ内の2つ以上のポインターに基づいて、読取りリクエストに関連付けられた2つ以上のブロックを判定することであって、エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、判定することを含む。
【0075】
[0084]いくつかの実施形態では、行為は、読取りリクエストに関連付けられた2つ以上のブロックを判定することに応答して、2つ以上のブロックから圧縮データを並行して読み取ることと、圧縮解除データを生成するために圧縮データを圧縮解除することとをさらに含むことができる。
【0076】
[0085]いくつかの実施形態では、行為は、メモリへの書込みリクエストを受け取ることと、書込みリクエストを受け取ることに応答して、セグメント内のビットマップをチェックすることであって、セグメントが、複数のエントリ、複数のブロック、およびビットマップを含み、ビットマップ内の各ビットが、セグメント内の各ブロックがアロケートされているかどうかを示す、チェックすることと、セグメント内で十分なブロックが書込みリクエストのために利用可能であることをビットマップが示すことに応答して、ビットマップに基づいて、書込みリクエストに関連付けられた圧縮データをセグメント内の1つまたは複数のブロックに書き込むことと、セグメント内のビットマップおよび1つまたは複数のエントリを更新することとをさらに含むことができる。
【0077】
[0086]いくつかの実施形態では、行為は、セグメント内で十分なブロックが書込みリクエストのために利用可能でないことをビットマップが示すことに応答して、十分な利用可能ブロックを有するメモリ内のさらなるセグメントを判定することと、書込みリクエストに関連付けられた圧縮データの少なくとも一部をさらなるセグメント内のブロックに書き込むこととをさらに含むことができる。
【0078】
[0087]いくつかの実施形態では、頻繁にアクセスされないデータが圧縮メモリに移行される一方で、頻繁にアクセスされるデータが非圧縮メモリに移行され、非圧縮メモリと圧縮メモリが、プロセッサからアクセス可能な同じアドレス空間を共有する。
【0079】
[0088]本開示は、構造上の特徴および/または方法の行為に固有の言葉で説明されてきたが、添付の特許請求の範囲で指定される主題は、上記で説明された特定の特徴または行為に必ずしも限定されないことが理解されよう。むしろ、上記で説明された特定の特徴および行為は、特許請求の範囲を実装する実例の形として開示される。
【0080】
[0089]本開示の様々な実施形態の説明は例証のために提示されてきたが、網羅的であること、または開示の実施形態に限定されることを意図するものではない。説明された実施形態の範囲および思想から逸脱することなく、多くの変更形態および変形形態が当業者には明らかであろう。
【手続補正書】
【提出日】2024-03-12
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
メモリ圧縮のための方法であって、
メモリへの読取りリクエストを受け取るステップであって、前記メモリが、複数のセグメントに分割され、前記複数のセグメントのうちの1つが、複数のサブセグメントに分割され、前記複数のサブセグメントの1つが、1つまたは複数のブロックに圧縮され、前記読取りリクエストが、前記メモリ内のセグメントのサブセグメントに関するものである、ステップと、
前記セグメント内で、前記サブセグメントに対応するエントリを判定するステップであって、前記エントリが、指標(indicator)を含む、ステップと、
前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定するステップと
を含む、方法。
【外国語明細書】