Zswap
zswap とは、仮想メモリ圧縮(英語版)を実現する Linux カーネルの機能で、スワップされたページを圧縮されたライトバ…
この記事は英語版の対応するページを翻訳することにより充実させることができます。(2025年12月) 翻訳前に重要な指示を読むには右にある[表示]をクリックしてください。
|
|
| |
| 開発元 | Seth Jennings ほか |
|---|---|
| プログラミング 言語 | C |
| 対応OS | Linux |
| 種別 | Linuxカーネルの機能 |
| ライセンス | GNU GPL |
| 公式サイト |
kernel |
zswap とは、仮想メモリ圧縮を実現する Linux カーネルの機能で、スワップされたページを圧縮されたライトバックキャッシュ上に保持する。メモリページがスワップアウトされる際にスワップデバイス上に移動させるのではなく、システム RAM 上に動的に確保されるメモリプール内に圧縮して保存する。実スワップデバイスへのライトバックは延期されるか完全に回避されるので、スワップが必要とされる Linux システム上の I/O を大きく低減させることができる。トレードオフとして、圧縮を実行するために CPU サイクルの消費は増加する[1][2][3]。
組み込みデバイスやネットブックその他のローエンドハードウェアデバイスなどに加え、SSD をストレージに利用するデバイスなど、様々なフラッシュベースストレージを用いるデバイスにおいて、zswap の I/O が低減される利点を活かすことができる。なぜなら、フラッシュメモリは原理上書き込み回数が限られておりスワップ領域として利用されると急速に消耗してしまうためである[4]。
内部機構
zswap は、Linux カーネルの仮想メモリサブシステムに、frontswap が提供する API を利用して組込まれている。frontswap とは、Linux カーネル内で様々な種類のストレージを抽象化してスワップ領域として利用するための機構である[5]。結果として、zswap は 内部的には疑似 RAM デバイスを提供する frontswap のバックエンドドライバーとして動作する。言い換えると、 zswap は frontswap API により、スワップアウトされるメモリページをインターセプトすることで、ページフォールトの際にスワップ済のページをインターセプトすることが可能となる。 これら二つのパスにアクセスできることにより、 zswap はスワップされたページの圧縮されたライトバックキャッシュとして振る舞うことができる[6]。
内部的には、zswap は Linux カーネルの crypto API が提供する圧縮モジュールを利用する。このモジュールにより、たとえば圧縮による負荷をメイン CPU ではなく Linux カーネルがサポートするハードウェア圧縮アクセラレータに負担させることができる。望ましい圧縮モジュールの選択は、カーネルブートパラメータ zswap.compressor の値を通じて 起動時に動的に行うことができる。指定のない場合、デフォルトで Lempel–Ziv–Oberhumer (LZO) 圧縮アルゴリズムが利用される。Linux カーネルバージョン 3.13 時点で、zswap を利用するには明示的にカーネルブートパラメータ zswap.enabled に 1 を指定する必要がある。
zswap が利用できるメモリプールの最大サイズは sysfs パラメータ max_pool_percent により設定可能である。このパラメータには、総システム RAM の何パーセントをメモリプールが占有できるかを指定する。指定された最大サイズのメモリープールが事前に確保されるわけではなく、必要に応じてサイズは増減する。スワップが実行された結果設定された最大プールサイズに到達した場合、もしくは out-of-memory 状態のためプールを拡大することができなかった場合、スワップされたページは Least Recently Used アルゴリズムに基いてメモリプールからスワップデバイスへと退避させられる。このアプローチにより、キャッシュが満杯になった際に最古のキャッシュページがスワップデバイスに退避させられ、新しいスワップページを圧縮してキャッシュするための余地が確保されるという意味で、zswap は真のスワップキャッシュといえる[7]。
zbud は、圧縮されたページの格納用に zswap 内部で利用されている特定用途向けメモリアロケータである。Oracle による、別の仮想メモリ圧縮実装である zcache で利用されている zbud アロケータの書き直しとして実装された[8]。内部的には、zbud は物理メモリページごとに二つまでの圧縮済ページ("buddies" と呼ばれ、これがアロケータ名の由来となっている)を格納できるよう動作するため、開放された領域の結合と再利用が容易である利点を持つ一方で、メモリ利用率が低い(圧縮率が2を超えない)という欠点もある。zbud のもう一つの設計上のメリットとして、zbud は非圧縮時のページが元々占有していた領域よりも大きなメモリ領域をアロケートすることはない、すなわち本来使用するはずだったメモリ領域以上の領域を使用することが無い[9]。
歴史
zswap と zbud は、どちらも Seth Jennings により作成された。最初のアナウンスは2012年になされ、2013年5月までの開発の結果コードベースは成熟段階に達しているが、未だに実験的カーネル機能の状態である[10][11]。
zswap は(zbud と共に) Linux カーネルのメインラインに2013年9月2日にリリースされたバージョン 3.11 においてマージされた[12]。
2014年6月8日リリースのバージョン 3.15 からは、複数のスワップデバイスを適切にサポートするようになった[13][14]。
代替
zswap の代替となりうるものの一つに zram が挙げられる。この手法は似ているもののまた別の「RAM 上に圧縮されたスワップページを置く」機構を Linux カーネルに提供する。
主な違いは、zram はデータの格納用に RAM を利用した圧縮ブロックデバイスを提供し、これを通常のスワップデバイスとして追加で利用するという点である。zram を利用するには、mkswap コマンドラインユーティリティによる初期化と swapon による利用設定をユーザースペース側から行う必要がある。その設計上、zram はスワップが他に存在しない場合にもスワップ領域を提供することができるため、組み込みシステムなどスワップ領域がもともと存在しないシステムにより適している[15]。
比較すると、zswap は透過的に動作しユーザースペースでの設定が必要なく、通常のスワップデバイスの RAM ベース圧縮キャッシュとして動作する。これにより zswap は zram にはない、より使われていないスワップページを退避させる機構を持っている。しかし、zswap を利用するには設計上少くとも一つのスワップデバイスが存在する必要がある。
関連項目
出典
- ^ Seth Jennings (2013年2月12日). “The zswap compressed swap cache”. LWN.net. 2014年1月22日閲覧。
- ^ Jenifer Hopper (2012年12月11日). “New Linux zswap compression functionality”. IBM. 2014年1月31日閲覧。
- ^ Michael Larabel (2013年7月11日). “Zswap Merged Into The Linux 3.11 Kernel”. Phoronix. 2014年2月5日閲覧。
- ^ “Linux kernel documentation: Documentation/vm/zswap.txt”. kernel.org (2013年11月22日). 2014年1月22日閲覧。
- ^ Dan Magenheimer (2010年4月22日). “Frontswap [PATCH 0/4] (was Transcendent Memory): Overview”. 2014年12月23日閲覧。
- ^ Jonathan Corbet (2010年5月4日). “Cleancache and Frontswap”. LWN.net. 2014年3月26日閲覧。
- ^ “Linux kernel source tree: kernel/git/torvalds/linux.git: zswap: add to mm/”. kernel.org (2013年7月11日). 2014年2月5日閲覧。
- ^ Dan Magenheimer (2012年3月29日). “Zcache and RAMster (oh, and frontswap too): Overview and some benchmarking” (PDF). p. 12. 2015年8月19日閲覧。
- ^ “Linux kernel source tree: kernel/git/torvalds/linux.git: zbud: add to mm/”. kernel.org (2013年7月11日). 2014年2月5日閲覧。
- ^ “[PATCH 0/8] zswap: compressed swap caching” (2012年12月11日). 2014年1月5日閲覧。
- ^ “[PATCHv10 0/4] zswap: compressed swap caching” (2013年5月8日). 2014年1月5日閲覧。
- ^ “Linux kernel 3.11, Section 9. Zswap: A compressed swap cache” (2013年9月2日). 2014年1月22日閲覧。
- ^ “Linux kernel 3.15, Section 4. Memory management” (2014年6月8日). 2014年6月15日閲覧。
- ^ “Linux kernel source tree: kernel/git/torvalds/linux.git: mm/zswap: support multiple swap devices”. kernel.org (2014年4月7日). 2014年6月15日閲覧。
- ^ Dan Magenheimer (2013年4月3日). “In-kernel memory compression”. LWN.net. 2014年3月8日閲覧。
外部リンク
- Linux Transparent Memory Compression - YouTube, September 30, 2013, by Seth Jennings
- Zswap – a compressed page add-on for the Linux kswapd at the Wayback Machine (archived 2014-02-02), University of Liege, March 15, 2013, by Sylvain Martin
- The Compression Cache: Virtual Memory Compression for Handheld Computers, March 16, 2000, by Michael J. Freedman
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.