仮想メモリ圧縮( RAM圧縮、メモリ圧縮とも呼ばれる)は、データ圧縮を利用して補助記憶装置との間のページング要求のサイズや回数を削減するメモリ管理技術である。[ 1 ]仮想メモリ圧縮システムでは、仮想メモリからページアウトされるページは圧縮され、物理メモリ(通常はランダムアクセスメモリ(RAM))に格納されるか、ハードディスクドライブ(HDD)やソリッドステートドライブ(SSD)などの補助記憶装置に圧縮された状態で送信される。どちらの場合も、内容が圧縮された仮想メモリ範囲はアクセス不可とマークされるため、圧縮されたページにアクセスしようとするとページフォールトが発生し、処理の逆転(補助記憶装置からの取得と解凍)が発生する。ページングされるデータのフットプリントは圧縮プロセスによって削減される。まず、解放されたRAMは利用可能な物理メモリプールに戻され、圧縮された部分はRAMに保持される。次に、圧縮されたデータは補助記憶装置に送信されるが、結果として生じるI/O操作は小さくなるため、処理時間は短縮される。[ 2 ] [ 3 ]
zswap、zram、Helix Software CompanyのHurricaneなど、一部の実装では、プロセス全体がソフトウェアで実装されています。IBMのMXTなどのシステムでは、圧縮プロセスはローカルキャッシュとRAM間の転送を処理する専用プロセッサで実行されます。
仮想メモリ圧縮は、未使用のメモリブロックを削除し、場合によっては使用済みメモリ領域を統合することで断片化を軽減し、効率を向上させるガベージコレクション(GC)システムとは異なります。また、仮想メモリ圧縮は、 ConnectixのRAM Doubler (オンライン圧縮も可能)やApple OS 7.1などのコンテキストスイッチングシステムとも異なります。これらのシステムでは、非アクティブなプロセスが一時停止され、その後プロセス全体が圧縮されます。[ 4 ]
種類
仮想記憶の圧縮には、一般的に2つのタイプがあります。(1)圧縮されたページを主記憶上のスワップファイルに送信し、補助記憶装置にバックアップストアを置く方法[ 1 ] [ 5 ] [ 6 ]と、(2)圧縮されたページを圧縮されていないページと並べて保存する方法[ 1 ]です。
最初のタイプ (1) では、通常、LZO や LZ4 などのエントロピー符号化と組み合わせた LZ クラス辞書圧縮アルゴリズム [ 6 ] [ 5 ]を使用して、スワップアウトされるページを圧縮します。圧縮されたページは、主記憶上のスワップファイルに保存されるか、ハードディスクなどの補助記憶装置に書き込まれます。[ 6 ] [ 5 ]代わりに、補助記憶装置にバックアップストア、主記憶にスワップファイルの両方が存在する 2 段階のプロセスを使用することもできます。このプロセスでは、メモリ内スワップファイルから追い出されたページは、書き込み帯域幅 (ページ/秒など) を大幅に向上させてバックアップストアに書き込まれるため、バックアップストアへの書き込み時間が短縮されます。この最後の方式は、前述の 2 つの方法の利点、すなわち、スワップアウト可能なデータの総量が大幅に増加した高速なメモリ内データアクセスと、補助記憶装置へのページ書き込み帯域幅 (ページ/秒) の向上を活用します。[ 6 ] [ 5 ] [ 1 ]
タイプ (2) の仮想メモリ圧縮のアルゴリズムの一例としては、WK (Wilson-Kaplan ら) クラスの圧縮アルゴリズムがある。このアルゴリズムは、ポインタや整数に存在するメモリ内データの規則性を利用する。[ 1 ] [ 7 ]具体的には、ほとんどの高水準プログラミング言語で生成されるターゲット コード (データ セグメント -- WK アルゴリズムは命令圧縮には適していない[ 1 ] ) では、要素がワード境界に揃えられたレコードに整数とポインタの両方が存在することが多い。さらに、整数に格納される値は通常は小さい。また、メモリ内で互いに近い位置にあるポインタは、メモリ内に近い位置を指す傾向がある。さらに、すべて 0 のワードなどの共通データ パターンは、圧縮された出力では非常に小さなコード (WKdm の場合は 2 ビット) でエンコードできる。これらのデータの規則性を利用して、WKクラスのアルゴリズムは非常に小さな辞書( WKdmの場合は16エントリ)を使用して最大2:1の圧縮率を達成しながら、LZクラスの辞書圧縮方式よりもはるかに高速でオーバーヘッドが少ない。[ 1 ] [ 7 ]
利点
仮想メモリの圧縮は、ページング要求によるI/Oアクティビティを削減することで、全体的なパフォーマンスの向上をもたらします。パフォーマンス向上の度合いは、圧縮コプロセッサの有無、CPUの空き帯域幅、I/Oチャネルの速度、物理メモリの速度、物理メモリ内容の圧縮率など、さまざまな要因に依存します。
マルチコア、マルチスレッドCPUでは、いくつかのベンチマークで50%以上のパフォーマンス向上が示されています。[ 8 ] [ 9 ]
組み込み機器など、状況によっては補助記憶装置が限られているか、あるいは全く存在しない場合があります。このような場合、仮想メモリ圧縮によって、通常は仮想メモリを無効化しなければならないような状況でも仮想メモリシステムを動作させることができます。これにより、仮想メモリのない環境では動作できない特定のソフトウェアをシステムで実行できるようになります。[ 10 ]
欠点
低い圧縮比
主要な問題の一つは、現実世界の負荷下で物理メモリの内容をどの程度圧縮できるかという点です。プログラムコードや物理メモリに保持されるデータの多くは、効率的なプログラミング技術やデータアーキテクチャがデータセット内の冗長性を自動的に排除するように設計されているため、圧縮率が高くないことがしばしばあります。様々な研究によると、プログラムデータの典型的なデータ圧縮率は2:1から2.5:1の範囲であり、[ 7 ] [ 11 ]これはディスク圧縮で一般的に達成可能な圧縮率と同程度です。[ 10 ]
バックグラウンドI/O
仮想メモリ圧縮によって目に見えるパフォーマンス向上を実現するには、仮想メモリシステムのスループットが非圧縮時と比較して向上している必要があります。したがって、圧縮によって発生する追加の処理量によって全体的なレイテンシが増加してはなりません。しかし、I/Oバウンドのシステムや、圧縮率の高いデータセットを扱うアプリケーションでは、その効果は顕著になる可能性があります。[ 10 ]
スラッシングの増加
圧縮システムによって使用される物理メモリは、システムで実行されるプロセスが利用できる物理メモリの量を減らします。その結果、ページングアクティビティが増加し、仮想メモリ圧縮の全体的な効果が低下する可能性があります。ページングアクティビティと利用可能な物理メモリの関係はほぼ指数関数的であり、システムプロセスが利用できる物理メモリの量を減らすと、ページングアクティビティが指数関数的に増加することを意味します。[ 12 ] [ 13 ]
空き物理メモリ量が少なく、ページングがかなり頻繁に発生する状況では、圧縮システムによって得られるパフォーマンスの向上(補助記憶装置との間で直接ページングする場合と比較)は、ページフォールト率の増加によって相殺され、スラッシングやシステムパフォーマンスの低下につながる可能性があります。逆に、十分な物理メモリが利用可能でページングアクティビティが少ない状況では、圧縮によるパフォーマンスへの影響は目立たない可能性があります。これらの2つの状況の中間、つまりRAM容量が少なくページングアクティビティが多い状況と、RAM容量は十分でページングアクティビティが少ない状況では、仮想メモリの圧縮が最も効果的である可能性があります。ただし、プログラムデータの圧縮性が高いほど、圧縮データを保持するために必要な物理メモリが少なくなるため、パフォーマンスの向上はより顕著になります。
例えば、圧縮ページキャッシュを最大限に活用するために、Helix Software CompanyのHurricane 2.0は、ユーザーが設定可能な圧縮拒否しきい値を提供しています。この仮想メモリ圧縮システムは、4KiBページの最初の256バイトを512バイトに圧縮することで、特定のページに対して設定された圧縮レベルしきい値を達成できるかどうかを判断します。達成可能な場合は、ページの残りの部分を圧縮して圧縮キャッシュに保持し、達成できない場合は通常のページングシステムを介して補助記憶装置に送ります。このしきい値のデフォルト設定は、8:1の圧縮率です。[ 14 ] [ 4 ]
CPU使用率のオーバーヘッド
ハードウェア実装においては、この技術はシステムの様々なコンポーネント間の価格差にも依存します。例えば、RAMの価格と圧縮専用プロセッサの価格差などが挙げられます。様々なコンポーネント間の相対的な価格対性能比は、時間の経過とともに変化する傾向があります。例えば、圧縮コプロセッサを追加しても、CPUのコストへの影響は最小限にとどまる可能性があります。
優先順位付け
一般的な仮想メモリ実装では、ページングは最も最近使われていない順に行われるため、圧縮アルゴリズムがCPUサイクルを最も優先度の低いデータの処理に費やす可能性があります。さらに、プログラムコードは通常読み取り専用であるため、ページアウトされることはありません。代わりに、コードは単に破棄され、必要に応じてプログラムの補助記憶ファイルから再ロードされます。この場合、特にフラッシュメモリデバイスでは、削減しようとするI/Oサイクルがはるかに短いため、圧縮のハードルは高くなります。
歴史
仮想メモリ圧縮技術は、その人気と衰退を繰り返してきました。ムーアの法則とDDR3などのRAMインターフェースの進化により、RAMと外部ストレージの価格と速度は大幅に低下し、仮想メモリ圧縮の必要性は低下しました。一方、マルチコアプロセッサ、サーバーファーム、モバイルテクノロジー、そしてフラッシュベースシステムの登場により、仮想メモリ圧縮はより魅力的なものとなっています。
起源
エイコーン・コンピュータ社のUnix系OSであるRISC iXは、1989年に発売されたR140ワークステーションの主要オペレーティングシステムとして提供されました。 [ 15 ] RISC iXは圧縮された実行ファイルのデマンドページングをサポートしていました。しかし、圧縮された実行ファイルを提供する主な目的は、比較的小規模なハードディスクに完全なUnixシステムを収容することでした。この方式では、圧縮データはディスクにページアウトされませんでした。[ 16 ] [ 17 ]
ポール・R・ウィルソンは1990年にACM OOPSLA/ECOOP '90ガベージコレクションワークショップ(「ヒープ管理とメモリ階層におけるいくつかの問題と戦略」)で配布された論文の中で仮想メモリページの圧縮キャッシュを提案し、1991年1月にACM SIGPLAN Noticesに掲載されました。[ 18 ]
Helix Software Companyは1992年に仮想メモリ圧縮の先駆者となり、同年10月にそのプロセスの特許を申請した。[ 2 ] 1994年と1995年には、テスト圧縮とビデオカードなどのデバイスの二次メモリキャッシュを使用してプロセスを改良した。[ 3 ]しかし、Helixが仮想メモリ圧縮を組み込んだ製品をリリースしたのは1996年7月、Hurricane 2.0がリリースされてからであった。Hurricane 2.0は、Stac Electronics Lempel–Ziv–Stac圧縮アルゴリズムを使用し、オフスクリーンビデオRAMを圧縮バッファとして使用してパフォーマンス上の利点を得た。[ 14 ]
1995年、RAMのコストは1メガバイトあたり約50ドルで、MicrosoftのWindows 95では最低4MBのRAMが必要とされていました。[ 19 ] RAMの要件が高かったため、圧縮技術を使用して「メモリ」を獲得すると主張するプログラムがいくつかリリースされました。最も悪名高かったのはSyncronys SoftcorpのSoftRAMプログラムです。SoftRAMは圧縮をまったく行わないため、偽物であると暴露されました。[ 20 ] [ 10 ] HurricaneやMagnaRAMなどの他の製品には仮想メモリ圧縮が含まれていましたが、ランレングス符号化のみが実装されており、結果が悪く、この技術の評判が悪かったです。[ 21 ]
PC Magazine誌は1997年4月8日号で、複数のソフトウェア仮想メモリ圧縮ツールのパフォーマンス向上に関する包括的なテストを掲載しました。PC Magazineのテストでは、Hurricaneの使用によってパフォーマンスがわずかに(全体で5%)向上したのに対し、他のパッケージでは全く向上しなかったことが判明しました。[ 21 ]しかし、このテストはシングルコア・シングルスレッドのIntel Pentiumシステム上で実行されたため、圧縮はシステム全体のアクティビティに直接影響を与えました。
1996年、IBMは圧縮技術の実験を開始し、2000年にはMemory eXpansion Technology(MXT)を発表しました。[ 22 ] [ 23 ] MXTはCPUとメモリコントローラ間のCPUキャッシュとして機能するスタンドアロンチップでした。MXTには、物理メモリとの間で送受信されるすべてのデータを圧縮する統合圧縮エンジンが搭載されていました。その後、Intelによるこの技術のテストでは、システム全体のパフォーマンスが5~20%向上することが示され、これはPC MagazineがHurricaneで得た結果とほぼ同等でした。[ 24 ]
最近の動向
- 2008年初頭に、zram (当初はcompcacheと呼ばれていた)というLinuxプロジェクトがリリースされ、2013年のアップデートでChromeOS [ 25 ]とAndroid 4.4に組み込まれました。
- 2010年にIBMは仮想メモリ圧縮を実装したAIX 6.1用のActive Memory Expansion(AME)をリリースした。[ 26 ]
- 2012年には、POWER7 +チップの一部のバージョンに、AIXで仮想メモリ圧縮に使用されるデータ圧縮サポート用の842圧縮アルゴリズムを使用したAMEハードウェアアクセラレータが搭載されました。 [ 27 ]最近のPOWERプロセッサは引き続きこの機能をサポートしています。
- 2012 年 12 月にzswapプロジェクトが発表され、 2013 年 9 月にLinux カーネル メインラインに統合されました。
- 2013年6月、AppleはOS X Mavericksにウィルソン・カプランWKdmアルゴリズムを使用した仮想メモリ圧縮を組み込むと発表した。 [ 28 ] [ 29 ]
- 2015年8月10日のWindows 10 (ビルド10525)の「 Windows Insider Preview」アップデートで、RAM圧縮のサポートが追加されました。[ 30 ]
参照
参考文献
- ^ a b c d e f g Wilson, Paul R.; Kaplan, Scott F.; Smaragdakis, Yannis (1999-06-06).仮想記憶システムにおける圧縮キャッシュの事例(PDF) . USENIX Annual Technical Conference. カリフォルニア州モントレー, 米国. pp. 101– 116.
- ^ a b US 5559978、Spilo、Michael L.、「RAMメモリコンテンツの選択的圧縮によって仮想メモリシステムの効率を高める方法」、1996年9月24日公開、Helix Software Co., Inc.に譲渡。
- ^ a b US 5875474、Fabrizio, Daniel & Spilo, Michael L.、「オフスクリーンビデオメモリを使用して仮想メモリページングおよびディスク入出力要求をキャッシュする方法」、1999年2月23日公開、Helix Software Co., Inc.に譲渡。
- ^ a b「Mac Memory Boosterがアップグレード」 Computerworld . 30 ( 37). IDG Enterprise: 56. 1996年9月9日. ISSN 0010-4841 . 2015年1月12日閲覧。
- ^ a b c dグプタ、ニティン。「zram: 圧縮された RAM ベースのブロックデバイス」" . docs.kernel.org . カーネル開発コミュニティ. 2023年12月29日閲覧.
- ^ a b c d "「zswap」「 . www.kernel.org . カーネル開発コミュニティ. 2023年12月29日閲覧。
- ^ a b c Simpson, Matthew (2014). 「プログラムデータの圧縮アルゴリズムの分析」(PDF) . pp. 4– 14. 2015年1月9日閲覧。
- ^ Jennings, Seth. 「Linuxにおける透過的なメモリ圧縮」(PDF) . linuxfoundation.org . 2015年1月4日時点のオリジナル(PDF)からアーカイブ。 2015年1月1日閲覧。
- ^ 「compcacheのパフォーマンス数値」 。 2015年1月1日閲覧。
- ^ a b c dポール、マティアス R. (1997-07-30) [1996-04-14]. 「Kapitel II.18. Mit STACKER Hauptspeicher 'virtuell' verdoppeln…」 [STACKER を利用してメイン メモリを「実質的に」 2 倍に…]。NWDOS-TIPs — Novell DOS 7 に関するヒントとテクニック、詳細、バグ、回避策を含む[ NWDOS-TIPs — Novell DOS 7 のヒントとテクニック、文書化されていない詳細、バグ、回避策に重点を置いています]。リリース 157 (ドイツ語) (第 3 版)。2016-11-05 のオリジナルからアーカイブ。2012 年 1 月 11 日に取得。
- ^ Rizzo, Luigi (1996). 「RAM圧縮のための非常に高速なアルゴリズム」 . ACM SIGOPS Operating Systems Review . 31 (2): 8. doi : 10.1145/250007.250012 . S2CID 18563587. 2015年1月9日閲覧。
- ^ Denning, Peter J. (1968). 「スラッシング:その原因と予防」(PDF) . Proceedings AFIPS, Fall Joint Computer Conference . 33 : 918. 2015年1月5日閲覧。
- ^ Freedman, Michael J. (2000-03-16). 「圧縮キャッシュ:ハンドヘルドコンピュータの仮想メモリ圧縮」(PDF) . 2015年1月9日閲覧。
- ^ a b「Hurricane 2.0はシステムメモリを最大限に活用」 PC Magazine 1996年10月8日2015年1月1日閲覧。
- ^コックス、ジェームズ(1989年12月)「人民への力」 Acorn User 66-67 , 69, 71頁 。 2020年9月6日閲覧。
- ^ Taunton, Mark (1991). 「圧縮実行ファイル:小規模思考の実践」 . 1991年夏 USENIX カンファレンス議事録、米国テネシー州ナッシュビル、1991年6月. USENIX 協会. pp. 385– 404.
- ^ Taunton, Mark (1991-01-22). 「圧縮実行ファイル」 .ニュースグループ: comp.unix.internals . Usenet: [email protected] . 2020年10月10日閲覧。
- ^ Wilson, Paul R. (1991). 「ヒープ管理とメモリ階層におけるいくつかの問題と戦略」. ACM SIGPLAN Notices . 26 (3): 45– 52. doi : 10.1145/122167.122173 . S2CID 15404854 .
- ^ 「Windows 95 インストール要件」 . Microsoft . 2015年1月1日閲覧。
- ^ 「SoftRAM Under Scruitny」 . PC Magazine . 1996年1月23日. 2015年1月1日閲覧。
- ^ a b「パフォーマンスエンハンサー」 . PC Magazine . 1997年4月8日. 2015年1月1日閲覧。
- ^ 「IBM Researchの画期的な成果、コンピュータのメモリ容量を2倍に」 IBM 2000年6月26日。2013年6月22日時点のオリジナルよりアーカイブ。 2015年1月1日閲覧。
- ^ 「Memory eXpansion Technologies」 . IBM . 2015年1月1日閲覧。
- ^ Kant, Krishna (2003-02-01). 「メモリ圧縮代替手段の評価」 Intel Corporation . 2015年1月1日閲覧。
- ^ "CompCache" . Googleコード. 2015年1月1日閲覧。
- ^ 「AIX 6.1 Active Memory Expansion」 IBM 。 2015年1月4日時点のオリジナルよりアーカイブ。2015年1月1日閲覧。
- ^ 「IBM Power Systems ハードウェアの詳細」(PDF) . IBM . 2015年1月4日時点のオリジナル(PDF)からアーカイブ。2015年1月1日閲覧。
- ^ 「OS X 10.9 Mavericks: Ars Technicaレビュー」 2013年10月22日。
- ^ 「仮想メモリ システムにおける圧縮キャッシュの事例」。
- ^ Aul, Gabe (2015年8月18日). 「Windows 10 Insider Preview Build 10525 を発表」 . Windows Insider Blog . Microsoft . 2024年8月3日閲覧。