JP7438246B2 - ハードウェアベースのメモリ圧縮 - Google Patents

ハードウェアベースのメモリ圧縮 Download PDF

Info

Publication number
JP7438246B2
JP7438246B2 JP2021576807A JP2021576807A JP7438246B2 JP 7438246 B2 JP7438246 B2 JP 7438246B2 JP 2021576807 A JP2021576807 A JP 2021576807A JP 2021576807 A JP2021576807 A JP 2021576807A JP 7438246 B2 JP7438246 B2 JP 7438246B2
Authority
JP
Japan
Prior art keywords
memory
segment
entry
blocks
size
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021576807A
Other languages
English (en)
Other versions
JP2022545997A (ja
Inventor
ジャーン,リンタオ
ベネット,ジョン・ジー
リー,ボジエ
Original Assignee
マイクロソフト テクノロジー ライセンシング,エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by マイクロソフト テクノロジー ライセンシング,エルエルシー filed Critical マイクロソフト テクノロジー ライセンシング,エルエルシー
Publication of JP2022545997A publication Critical patent/JP2022545997A/ja
Priority to JP2024019288A priority Critical patent/JP2024054306A/ja
Application granted granted Critical
Publication of JP7438246B2 publication Critical patent/JP7438246B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3066Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction by means of a mask or a bit-map
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization

Description

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

Claims (13)

  1. メモリ圧縮のための方法であって、
    メモリへの読取りリクエストを受け取るステップであって、前記メモリが、複数のセグメントに分割され、前記複数のセグメントのうちの1つが、複数のサブセグメントに分割され、前記複数のサブセグメントの1つが、1つまたは複数のブロックに圧縮され、前記読取りリクエストが、前記メモリ内のセグメントのサブセグメントに関するものである、ステップと、
    前記セグメント内で、前記サブセグメントに対応するエントリを識別するステップであって、前記エントリが、指標(indicator)を含み、前記指標がポインターを含む、ステップと、
    前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定するステップと
    を含む、方法であって、
    前記方法が、前記メモリ内に実装され、前記メモリ内の前記セグメントの前記サブセグメントへの前記読取りリクエストが、メモリコントローラーを介して受け取られ、
    前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定する前記ステップが、
    前記エントリ内の2つ以上のポインターに基づいて、前記読取りリクエストに関連付けられた2つ以上のブロックを判定するステップであって、前記エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、且つ、前記エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、ことによって実行されるステップを含む、方法。
  2. 前記セグメント内で、前記サブセグメントに対応するエントリを識別する前記ステップが、
    マッピングルールに基づいて、前記サブセグメントに対応する前記エントリを識別するステップであって、前記マッピングルールが、サブセグメントとエントリとの間の前記セグメント内の静的マッピングを含む、ステップ
    を含み、
    前記静的マッピングが、固定マッピングを含む、
    請求項1に記載の方法。
  3. 1つのサブセグメントのサイズが、1つのブロックのサイズの少なくとも8倍になるようにプリセットされる、請求項1または2のいずれかに記載の方法。
  4. 前記読取りリクエストに関連付けられた2つ以上のブロックを判定するステップに応答して、前記2つ以上のブロックから前記圧縮データを並行して読み取るステップと、
    圧縮解除データを生成するために前記圧縮データを圧縮解除するステップと
    をさらに含む、請求項1から3のいずれかに記載の方法。
  5. 前記メモリへの書込みリクエストを受け取るステップと、
    前記書込みリクエストを受け取るステップに応答して、セグメント内のビットマップをチェックするステップであって、前記セグメントが、複数のエントリ、複数のブロック、および前記ビットマップを含み、前記ビットマップ内の各ビットが、前記セグメント内の各ブロックがアロケートされている(allocated)かどうかを示す、ステップと、
    前記セグメント内で十分なブロックが前記書込みリクエストのために利用可能であることを前記ビットマップが示すことに応答して、前記ビットマップに基づいて、前記書込みリクエストに関連付けられた圧縮データを前記セグメント内の1つまたは複数のブロックに書き込むステップと、
    前記セグメント内の前記ビットマップおよび1つまたは複数のエントリを更新するステップと
    をさらに含む、請求項1から4のいずれかに記載の方法。
  6. 前記セグメント内で十分なブロックが前記書込みリクエストのために利用可能でないことを前記ビットマップが示すことに応答して、十分な利用可能ブロックを有する前記メモリ内のさらなるセグメントを判定するステップと、
    前記書込みリクエストに関連付けられた圧縮データの少なくとも一部を前記さらなるセグメント内の1つまたは複数のブロックに書き込むステップと
    をさらに含む、請求項5に記載の方法。
  7. 頻繁にアクセスされないデータが圧縮メモリに移行される一方で、頻繁にアクセスされるデータが非圧縮メモリに移行され、前記非圧縮メモリと前記圧縮メモリが、プロセッサからアクセス可能な同じアドレス空間を共有する、請求項5に記載の方法。
  8. メモリであって、
    メモリチップと、
    コントローラーであって、
    前記メモリチップへの読取りリクエストを受け取ることであって、前記メモリチップが、複数のセグメントに分割され、前記複数のセグメントのうちの1つが、複数のサブセグメントに分割され、前記複数のサブセグメントのうちの1つが、1つまたは複数のブロックに圧縮され、前記読取りリクエストが、前記メモリ内のセグメントのサブセグメントに関するものである、受け取ること、
    前記セグメント内で、前記サブセグメントに対応するエントリを識別することであって、前記エントリが、指標を含み、前記指標がポインターを含む、識別すること、および
    前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定すること
    を含む行為を実行するように構成された、コントローラーと
    を備え、
    前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを前記判定することが、
    前記エントリ内の2つ以上のポインターに基づいて、前記読取りリクエストに関連付けられた2つ以上のブロックを判定することであって、前記エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、且つ、前記エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、判定することを含む、メモリ。
  9. 前記セグメント内で、前記サブセグメントに対応するエントリを前記識別することが、
    マッピングルールに基づいて、前記サブセグメントに対応する前記エントリを識別することであって、前記マッピングルールが、サブセグメントとエントリとの間の前記セグメント内の静的マッピングを含む、識別すること
    を含み、
    前記静的マッピングが、固定マッピングを含む、
    請求項8に記載のメモリ。
  10. 1つのサブセグメントのサイズが、1つのブロックのサイズの少なくとも8倍になるようにプリセットされる、請求項8または9に記載のメモリ。
  11. 前記行為が、
    前記読取りリクエストに関連付けられた2つ以上のブロックを判定することに応答して、前記2つ以上のブロックから前記圧縮データを並行して読み取ることと、
    圧縮解除データを生成するために前記圧縮データを圧縮解除することと
    をさらに含む、請求項8から10のいずれかに記載のメモリ。
  12. プログラム製品であって、実行可能命令を含み、前記実行可能命令が、デバイス上で実行されると、
    メモリへの読取りリクエストを受け取ることであって、前記メモリが、複数のセグメントに分割され、前記複数のセグメントのうちの1つが、複数のサブセグメントに分割され、前記複数のサブセグメントのうちの1つが、1つまたは複数のブロックに圧縮され、前記読取りリクエストが、前記メモリ内のセグメントのサブセグメントに関するものである、受け取ることと、
    前記サブセグメントに対応する前記セグメント内のエントリを識別することであって、前記エントリが、指標を含み、前記指標がポインターを含む、識別することと、
    前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを判定することと
    を含む行為を、前記デバイスに実行させる、プログラム製品であって、
    前記エントリ内の前記指標に基づいて、前記読取りリクエストに関連付けられた圧縮データを格納するブロックを前記判定することが、
    前記エントリ内の2つ以上のポインターに基づいて、前記読取りリクエストに関連付けられた2つ以上のブロックを判定することであって、前記エントリ内のポインターの最大数が、1つのサブセグメントのサイズと1つのブロックのサイズとの間の第1の比率に基づいて判定され、且つ、前記エントリ内の1つのポインターのサイズが、1つのセグメントのサイズと1つのブロックのサイズとの間の第2の比率に基づいて判定される、判定することを含む、
    プログラム製品。
  13. 前記行為が、
    前記読取りリクエストに関連付けられた2つ以上のブロックを判定することに応答して、前記2つ以上のブロックから前記圧縮データを並行して読み取ることと、
    圧縮解除データを生成するために前記圧縮データを圧縮解除することと
    をさらに含む、請求項12に記載のプログラム製品
JP2021576807A 2019-07-02 2019-07-02 ハードウェアベースのメモリ圧縮 Active JP7438246B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2024019288A JP2024054306A (ja) 2019-07-02 2024-02-13 ハードウェアベースのメモリ圧縮

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/094419 WO2021000263A1 (en) 2019-07-02 2019-07-02 Hardware-based memory compression

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2024019288A Division JP2024054306A (ja) 2019-07-02 2024-02-13 ハードウェアベースのメモリ圧縮

Publications (2)

Publication Number Publication Date
JP2022545997A JP2022545997A (ja) 2022-11-02
JP7438246B2 true JP7438246B2 (ja) 2024-02-26

Family

ID=74100482

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2021576807A Active JP7438246B2 (ja) 2019-07-02 2019-07-02 ハードウェアベースのメモリ圧縮
JP2024019288A Pending JP2024054306A (ja) 2019-07-02 2024-02-13 ハードウェアベースのメモリ圧縮

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2024019288A Pending JP2024054306A (ja) 2019-07-02 2024-02-13 ハードウェアベースのメモリ圧縮

Country Status (9)

Country Link
US (1) US20220253236A1 (ja)
EP (1) EP3994582A4 (ja)
JP (2) JP7438246B2 (ja)
KR (1) KR20220024206A (ja)
CN (1) CN114072777A (ja)
AU (1) AU2019452898A1 (ja)
BR (1) BR112021024426A2 (ja)
CA (1) CA3142618A1 (ja)
WO (1) WO2021000263A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116758175B (zh) * 2023-08-22 2024-01-26 摩尔线程智能科技(北京)有限责任公司 图元块压缩装置、方法、图形处理器及电子设备
CN117331512B (zh) * 2023-12-01 2024-04-12 芯动微电子科技(武汉)有限公司 对gpu核内存储器执行写操作的数据压缩及处理方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000227874A (ja) 1999-01-12 2000-08-15 Internatl Business Mach Corp <Ibm> コンピュ―タ・システムにおいてディレクトリ構造を含むメイン・メモリの内容にアドレスするための方法および装置
JP2007264692A (ja) 2006-03-27 2007-10-11 Nec Corp メモリ管理方法、装置、およびプログラム
JP2011128792A (ja) 2009-12-16 2011-06-30 Toshiba Corp メモリ管理装置
JP2015036981A (ja) 2013-08-16 2015-02-23 エルエスアイ コーポレーション 順次読み出し最適化可変サイズフラッシュトランスレーションレイヤ
US20170285955A1 (en) 2016-03-30 2017-10-05 Arm Limited Data processing systems
JP2017537384A (ja) 2014-10-29 2017-12-14 クアルコム,インコーポレイテッド デマンドページングのための効率的な解凍ローカリティシステム
JP2018156137A (ja) 2017-03-15 2018-10-04 株式会社東芝 読出制御装置、ストレージコントローラ、およびプログラム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6374336B1 (en) * 1997-12-24 2002-04-16 Avid Technology, Inc. Computer system and process for transferring multiple high bandwidth streams of data between multiple storage units and multiple applications in a scalable and reliable manner
CN1200354C (zh) * 2003-01-17 2005-05-04 清华大学 自动压缩/解压缩文件系统
US7424482B2 (en) * 2004-04-26 2008-09-09 Storwize Inc. Method and system for compression of data for block mode access storage
US8296337B2 (en) * 2006-12-06 2012-10-23 Fusion-Io, Inc. Apparatus, system, and method for managing data from a requesting device with an empty data token directive
CN101923511B (zh) * 2009-06-11 2012-08-08 华为技术有限公司 一种内存管理方法和内存管理系统
US8171253B2 (en) * 2009-10-30 2012-05-01 Brocade Communications Systems, Inc. Virtual disk mapping
US8364886B2 (en) * 2010-01-26 2013-01-29 Seagate Technology Llc Verifying whether metadata identifies a most current version of stored data in a memory space
US8478731B1 (en) 2010-03-31 2013-07-02 Emc Corporation Managing compression in data storage systems
US8533166B1 (en) * 2010-08-20 2013-09-10 Brevity Ventures LLC Methods and systems for encoding/decoding files and transmission thereof
CN103902467B (zh) * 2012-12-26 2017-02-22 华为技术有限公司 压缩内存访问控制方法、装置及系统
US10565099B2 (en) * 2012-12-28 2020-02-18 Apple Inc. Methods and apparatus for compressed and compacted virtual memory
TWI609263B (zh) * 2013-08-16 2017-12-21 司固科技公司 可變大小快閃轉變層
US9588978B2 (en) * 2013-09-30 2017-03-07 International Business Machines Corporation Merging metadata for database storage regions based on overlapping range values
US20160077744A1 (en) * 2014-09-11 2016-03-17 Netapp, Inc. Deferred reference count update technique for low overhead volume metadata
US9965394B2 (en) * 2014-12-23 2018-05-08 EMC IP Holding Company LLC Selective compression in data storage systems
CN107436848B (zh) * 2017-08-03 2021-02-02 苏州浪潮智能科技有限公司 一种实现用户数据和压缩数据间转换的方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000227874A (ja) 1999-01-12 2000-08-15 Internatl Business Mach Corp <Ibm> コンピュ―タ・システムにおいてディレクトリ構造を含むメイン・メモリの内容にアドレスするための方法および装置
JP2007264692A (ja) 2006-03-27 2007-10-11 Nec Corp メモリ管理方法、装置、およびプログラム
JP2011128792A (ja) 2009-12-16 2011-06-30 Toshiba Corp メモリ管理装置
JP2015036981A (ja) 2013-08-16 2015-02-23 エルエスアイ コーポレーション 順次読み出し最適化可変サイズフラッシュトランスレーションレイヤ
JP2017537384A (ja) 2014-10-29 2017-12-14 クアルコム,インコーポレイテッド デマンドページングのための効率的な解凍ローカリティシステム
US20170285955A1 (en) 2016-03-30 2017-10-05 Arm Limited Data processing systems
JP2018156137A (ja) 2017-03-15 2018-10-04 株式会社東芝 読出制御装置、ストレージコントローラ、およびプログラム

Also Published As

Publication number Publication date
JP2022545997A (ja) 2022-11-02
EP3994582A4 (en) 2023-01-18
AU2019452898A1 (en) 2022-01-06
US20220253236A1 (en) 2022-08-11
CN114072777A (zh) 2022-02-18
BR112021024426A2 (pt) 2022-01-18
WO2021000263A1 (en) 2021-01-07
KR20220024206A (ko) 2022-03-03
CA3142618A1 (en) 2021-01-07
JP2024054306A (ja) 2024-04-16
EP3994582A1 (en) 2022-05-11

Similar Documents

Publication Publication Date Title
CN105373344B (zh) 虚拟化超大规模环境中的数据管理的装置和方法
US9760281B2 (en) Sequential write stream management
US10572378B2 (en) Dynamic memory expansion by data compression
US20130212319A1 (en) Memory system and method of controlling memory system
EP3382557B1 (en) Method and apparatus for persistently caching storage data in a page cache
KR20190111406A (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
JP2024054306A (ja) ハードウェアベースのメモリ圧縮
US11907129B2 (en) Information processing device, access controller, information processing method, and computer program for issuing access requests from a processor to a sub-processor
TW201941197A (zh) 混合式記憶體系統
CN112445423A (zh) 存储器系统、计算机系统及其数据管理方法
CN117743205A (zh) 用dram作为可按字节寻址存储器的缓存的方法和装置
US20110191529A1 (en) Semiconductor storage device and method of controlling semiconductor storage device
KR20130076973A (ko) 응용 프로세서 및 이를 포함하는 시스템
US10459662B1 (en) Write failure handling for a memory controller to non-volatile memory
KR102326280B1 (ko) 데이터 처리 방법, 장치, 기기 및 매체
US10642727B1 (en) Managing migration events performed by a memory controller
US10235054B1 (en) System and method utilizing a cache free list and first and second page caches managed as a single cache in an exclusive manner
US20210294528A1 (en) Data processing device
EP3916567B1 (en) Method for processing page fault by processor
CN116340203A (zh) 数据预读取方法、装置、处理器及预取器
US11567865B2 (en) Methods and apparatus for persistent data structures
WO2018165957A1 (en) Log-appended-structured storage management with byte-level accessibility
TWI835027B (zh) 更新主機與閃存位址對照表的方法及電腦程式產品及裝置
KR20220169894A (ko) 메모리 기반 통합 스토리지 관리 장치 및 방법
CN117120990A (zh) 用于转移分层存储器管理的方法和装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220701

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230501

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230718

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231011

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231227

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240116

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240213

R150 Certificate of patent or registration of utility model

Ref document number: 7438246

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150