- zram 在 RAM 中創建壓縮塊設備,這些設備充當交換空間或超高速磁碟,從而減少磁碟存取並提高效能。
- 在 Debian、Ubuntu 及其衍生版本中,使用 zram-tools 可以輕鬆啟用 zram,並根據已安裝的 RAM 調整壓縮演算法和大小。
- zram-config 或 zram-generator 等工具可自動建立多個 zram 裝置並將其與 systemd 整合。
- 透過選擇百分比大小或固定大小,並優先使用 ZRAM 而不是磁碟交換,可以實現平衡高效的配置。

如果您每天都使用 GNU/Linux 系統,並且關心如何最大限度地發揮電腦的效能,那麼本文將對您有所幫助。你遲早會遇到 zRAM 的概念。許多記憶體有限的用戶在同時運行多個資源密集型應用程式時會遇到卡頓、偶爾死機或運行緩慢的問題。傳統的解決方案是在硬碟上使用交換分區,但如今已經有了更快、更有效率的替代方案。
zram 是 Linux 核心提供的眾多精巧功能之一。它允許您直接在 RAM 中建立壓縮塊設備,用作超高速交換區,甚至可以用作臨時磁碟。正確配置後,無論是在配置較低的系統(4-8 GB RAM)還是配置較高的機器(16 或 32 GB RAM)上,它都能顯著提升效能,減少磁碟存取次數,防止系統崩潰,並提高整體系統效能。
什麼是 ZRAM?為什麼它比傳統的交換記憶體能提高效能?
zram 是一個 Linux 核心模組,用於在 RAM 中建立壓縮區塊裝置。換句話說,它會在記憶體中創建一個“虛擬磁碟”,可以在其上創建交換空間甚至檔案系統。寫入該裝置的資料會使用 CPU 進行即時壓縮並儲存在記憶體中,因此比未壓縮的資料佔用更少的空間。
關鍵在於利用記憶體比任何硬碟或固態硬碟快得多這一特性。當系統物理記憶體不足時,它不會將記憶體頁直接寫入速度較慢的磁碟,而是將其壓縮到 zRAM 中。雖然壓縮和解壓縮會損失一些 CPU 資源,但存取速度的提升足以彌補這一損失,並且還能減少磁碟磨損,這對於固態硬碟 (SSD) 而言尤其重要。
這種機制最初被稱為計算快取(compcache)。隨著時間的推移,它不斷發展演變,最終以現在的名稱 zram 整合到核心中。如今,它被認為是一種非常可靠的替代方案(在許多發行版中,甚至是首選方案),可以取代 Linux 中沿用數十年的傳統交換分區。
一個非常明顯的實際優勢是提高了在「極端」情況下的表現。例如,在運行 Fedora 系統的筆記型電腦上進行測試發現,透過將交換空間從磁碟切換到基於 zRAM 的交換空間,某些使用 Proton 運行的高要求遊戲(例如 Doom 2016)在相同的硬體配置下,幀率從區區 6-7 fps 提升到了 20 fps 左右,而這僅僅是改變了交換策略。這並非什麼魔法;只是交換空間不再位於速度相對較慢的磁碟上,而是位於壓縮的 RAM 中。
這種方法對於記憶體充足的現代電腦也有好處。雖然你可能認為擁有 16 或 32 GB 的記憶體就不需要交換空間,但事實是,在 zram 中擁有一個壓縮緩衝區可以幫助在打開數十個標籤頁的瀏覽器、虛擬機、大型編輯器或遊戲時保持流暢性,防止系統開始終止進程或出現卡頓。
zram 目前在哪些領域使用?哪些發行版已經包含它或使其易於使用?
許多發行版都大力推廣 zram,將其作為傳統交換機制的替代品或補充。最著名的例子之一是 Fedora,它預設優先使用交換空間而非 zRAM,而不是完全依賴磁碟上的交換分割區。這項改變顯著提升了記憶體有限的筆記型電腦和桌上型電腦的使用者體驗。
在 Debian 和 Ubuntu 的世界裡,這種方法多年來一直在改變。Debian 10 (Buster) 和 Debian 11 (Bullseye),以及 Ubuntu 20.04 LTS 及更高版本,都允許您使用特定軟體包(例如 zram-tools 或 zram-generator)輕鬆配置 zram。此外,Ubuntu 通常會使用磁碟上的交換檔案而不是專用分割區,這大大簡化瞭如果您決定切換到 zram 時停用交換空間的操作。
其他發行版甚至已將 zram 整合到其安裝程式中。例如,Arch Linux 提供了直接透過其引導式安裝程式 archinstall 啟用 zram 的選項。只需選擇相應的選項,即可使用相當合理的預設參數配置系統,使其透過 zram 進行交換。一些用戶甚至將其作為參考,用於微調自己的系統。
除了桌上型系統之外,zram 還用於行動裝置和嵌入式系統。Android 和 Ubuntu Touch 利用這項特性,為記憶體有限的智慧型手機釋放更多空間:RAM 是一種非常寶貴的資源,壓縮部分 RAM 內容的功能,使得運行比原始實體記憶體所能支援的應用程式更加高效。一些輕量級桌面發行版也預設支援此功能。
在記憶體充足的系統上,例如配備 16-32 GB 記憶體的桌上型電腦或迷你電腦。現在越來越常見的做法是安裝過程中不建立交換分割區,而只使用 ZRAM 作為壓縮交換機制。這樣可以確保系統流暢運行,無需為交換分區預留磁碟空間,而交換分區在許多情況下很少使用。
基本概念:RAM 中的交換空間、區塊裝置和虛擬磁碟
要充分理解 zram 的作用,回顧兩個概念會很有幫助:交換設備和區塊設備。在 GNU/Linux 系統中,“幾乎一切皆檔案”,硬體設備也不例外:它們在 /dev 目錄下以特殊檔案的形式存在。硬碟、固態硬碟、SD 卡或 USB 隨身碟都以區塊裝置的形式出現,系統使用相同的介面存取它們,即使它們使用的底層技術各不相同。
區塊設備可以包含傳統的檔案系統例如 ext4、XFS、btrfs 等檔案系統,可以掛載到指定掛載點供一般使用者存取。然而,這種抽像也允許創建不與任何實體硬體關聯的區塊設備,例如 RAM 磁碟。這些是系統公開的 RAM 記憶體區域,就像它們是「磁碟」一樣,可以像其他任何磁碟機一樣進行格式化和掛載。
另一方面,交換空間是指當 RAM 不足時,系統虛擬記憶體所使用的區域。傳統上,交換空間位於磁碟上(以分割區或檔案的形式)。當核心需要釋放記憶體時,它會將不常用的記憶體頁移到交換區域。問題在於,磁碟存取速度比記憶體存取速度慢幾個數量級,因此,當系統開始頻繁地將資料頁移到交換空間時,速度下降會非常明顯。
zram的設計理念是將兩者的優點結合起來。這涉及在記憶體中創建一個「虛擬」區塊設備,並對寫入其中的資料進行壓縮。由於壓縮後的資料佔用空間較小,這種方法能夠以幾乎相同的速度實現與增加可用記憶體類似的效果,因為瓶頸從磁碟變成了CPU。這在配備效能不錯的CPU的系統中尤其有用,因為壓縮和解壓縮的成本非常低。
此外,另一個明顯的優勢是記憶體不會損耗。在固態硬碟 (SSD) 上使用交換分割區意味著需要不斷地向壽命有限的儲存媒體寫入資料;而使用 ZRAM,所有交換作業都在記憶體中進行,不會損壞磁碟,也不需要佔用專用磁碟空間。因此,越來越多的筆記型電腦使用者選擇將交換分割區配置在 ZRAM 上,並且在許多情況下,也會完全停用磁碟交換。
zram 中的壓縮演算法:lz4、zstd、lzo 等
一般而言,以下表演順序通常被接受。就純粹的壓縮和解壓縮速度而言,lz4 通常最快,其次是 zstd,最後是 lzo。而就壓縮比(即資料大小的減少量)而言,zstd 通常勝出,其次是 lzo,最後是 lz4。這意味著 zstd 的壓縮率更高,但速度略慢於 lz4,而 lz4 則犧牲了壓縮比以換取極快的效能。
在許多桌面應用場景中,zstd 提供了極佳的平衡性。它比 lz4 壓縮效果更好(因此能更好地「擴展」記憶體),而且在現代機器上通常速度足夠快。因此,一些管理員和進階使用者建議將 zram 配置為使用 zstd 作為主要演算法,除非硬體的 CPU 效能非常有限,每個週期都至關重要。
系統內即可查看可用和選定的演算法。 當 zram 模組載入後,只需檢查 `/sys/block/zram0/comp_algorithm` 檔案的內容,即可查看核心目前支援哪些演算法以及哪個演算法處於活動狀態。某些工具(例如 zram-tools)的設定檔中也註解掉了這些資訊。
總之,演算法的選擇通常不需要頻繁更改。通常的做法是選擇記憶體壓縮演算法(例如 zstd 或 lz4),將其保留為設定中的預設值,如果您特別注重細節,可以在您的特定係統上執行一些效能測試。大多數用戶只需啟用 zram 就能明顯感受到效能提升,而無需考慮演算法之間的細微差別。
使用 zram-tools 在 Debian、Ubuntu 及其衍生發行版上啟用 zram
在 Debian、Ubuntu 和許多基於 APT 的衍生版本中,啟用 zram 的最簡單方法是使用 zram-tools 軟體包。此軟體包提供一項服務和一個中央配置文件,方便您輕鬆定義如何將 zram 用作交換空間。這是一種經過實踐檢驗的、相當標準的方法,在 Debian 10、Debian 11、Ubuntu 20.04、Ubuntu 22.04 及類似版本上都能良好運作。
第一步是從終端安裝對應的軟體包。使用 sudo 或 root 帳戶。在這些發行版中,典型的命令是:
sudo apt install zram-tools
zram-tools 安裝完成後,關鍵檔案是 /etc/default/zramswap。這裡定義了諸如壓縮演算法、zram 總大小及其相對於其他交換空間的優先權等參數。如果您在不更改任何設定的情況下重新啟動系統,系統通常會預設會建立少量 zram(例如 250 MiB),這在如今的實際桌面使用中往往是不夠的。
要根據您的需求調整設置,您需要使用您喜歡的編輯器編輯該文件。喜歡圖形介面的使用者可以使用像 Geany 這樣帶有 sudo 權限的編輯器,而喜歡命令列介面的使用者通常使用 nano 或類似的編輯器。例如:
sudo nano /etc/default/zramswap
此文件中包含若干帶註釋的章節。 這些設定解釋了可用的選項。通常包括一個關於壓縮演算法的部分,一個關於分配給 ZRAM 的 RAM 百分比的部分,一個用於設定以 MiB 為單位的固定大小的部分,以及一個交換空間優先權選項。不同版本的格式可能略有不同,但基本概念保持不變。
根據電腦的記憶體容量調整 zram 上交換空間的演算法和大小。
最重要的調整之一是選擇合適的壓縮演算法。在 zram-tools 中,通常會有一行類似 ALGO= 的設定被註解掉或使用預設值(通常是 lz4)。如果您想更好地利用 RAM,並且您的 CPU 效能並非極其有限,您可以將其更改為使用 zstd,結果類似於:
某事=zstd
第二個主要參數是分配給 ZRAM 的空間大小。有兩種常見的策略:配置總記憶體的百分比或設定以 MiB 為單位的特定大小。有些範例使用 PERCENT 或 PERCENTAGE 等變數來定義百分比(例如,50 表示一半的記憶體),而其他版本的設定檔則提供 SIZE 或 ALLOCATION 等變數來指示固定大小。
如果選擇按百分比分配內存,在配備 4-8 GB 內存的系統中,非常常見的配置是分配大約 50-70% 的內存。 一個 zram。例如:
百分比=50
或在某些配置變體中: 百分比=50。這樣,在一台擁有 8 GB 記憶體的電腦上,大約會創建 4 GB 的交換空間,這些空間壓縮在 zram 中,這通常足以滿足大多數桌上型電腦的需求,並避免過於接近物理極限。
對於記憶體充足的機器,通常定義一個固定大小更為明智。與其允許過高的百分比產生不成比例的 ZRAM,不如使用諸如 SIZE 或 ALLOCATION 之類的 MiB 值。例如,一些管理員建議,對於記憶體超過 8 GB 的系統,ZRAM 設定為 4096 MiB(4 GiB);對於記憶體超過 16 GB 的系統,ZRAM 設定為 8192 MiB(8 GiB),剩餘記憶體則不進行壓縮。
在一台配備 32 GB 記憶體的電腦上,一個實際的例子可能是: ALGO=zstd 和 SIZE=4096,這將使用 zstd 在 zram 中預留 4 GB 的交換空間。有些使用者以 Arch Linux 中適用於 32 GB 記憶體機器的 archinstall 安裝程式作為參考,該程式通常會分配約 4 GB 的 zram;而有些使用者如果執行大量虛擬機器或大型容器,則會選擇分配高達 8 GB 的 zram。
此設定檔通常包含相當詳細的註解。 關於可用選項和官方內核文件的參考資料,最好仔細閱讀其中的註釋,以了解每個變數的作用。如果您不確定應該設定什麼值,請謹慎行事:最好從 4 GB 開始,之後再逐漸增加,而不是一開始就設定過大的值,以免壓縮後資料量不足導致記憶體不足。
管理現有磁碟交換和交換優先權
啟用 zram 時,請務必檢查已定義的磁碟交換分割區。許多 Debian 和 Ubuntu 系統在安裝過程中都會建立交換分割區,或者在較新版本的 Ubuntu 中,會在根檔案系統中建立一個交換檔案。如果不停用這些交換分割區,最終會在記憶體中同時存在壓縮交換空間,也會在磁碟上存在交換空間,核心會根據優先權決定使用哪一個。
在記憶體較大的電腦(例如 16 或 32 GB)上,許多使用者選擇完全停用交換分割區或磁碟檔案。在這種情況下,它們完全依賴 zram 進行交換,從而避免了緩慢的磁碟存取並減少了 SSD 的損耗。如果您的 Debian 或 Ubuntu 系統沒有在磁碟上建立交換分割區(例如,因為您在安裝過程中省略了它),則無需修改 /etc/fstab 檔案中的任何內容。
如果你有交換分區,可以透過編輯 /etc/fstab 檔案來停用它。 並對與該交換的組裝點對應的行進行註解。典型的操作步驟如下:
須藤納米/ etc / fstab中
找到引用交換分割區的那行程式碼 (通常帶有交換類型)並在開頭加上 # 將其註解掉。儲存變更並重新啟動後,系統將不再掛載該磁碟交換分割區,而是專注於使用 zram。一般來說,對於只有 4 GB 內存的系統,保留磁碟交換分區作為額外的備份是一個好主意;而對於 6-8 GB 及以上的內存,僅使用 zram 就足夠了。
在 zram 設定檔中,您也可以調整裝置優先權。這是透過類似 PRIORITY 的選項來實現的。 swapon 允許您為每個交換區域分配數值優先權;數值越高,核心使用該交換空間的速度就越快。將 zram 的優先權設定為高於 HDD 或 SSD 上的任何交換空間是合理的,這樣可以確保首先耗盡 RAM 中的快速交換空間,然後僅在必要時才使用磁碟上的交換空間。
如果您想隨時查看哪個交換分區處於活動狀態以及它的使用順序,可以這樣做。您可以使用 `swapon --show` 指令。該命令將顯示一個表格,其中包含交換設備、其大小、目前使用情況和優先順序。這是一種快速確認您的 zram 配置是否按預期工作以及系統是否真正利用了它的方法。
使用 systemd zram-generator 將 zram 用作壓縮 RAM 磁碟
除了 zram-tools 之外,在現代使用 systemd 的系統中,還有另一個非常強大的選擇:zram-generator。該軟體包可讓您使用 /etc/systemd 中的設定檔定義 zram 設備,並具有足夠的靈活性,可將其用作交換磁碟和通用磁碟,並可使用 ext4 等檔案系統進行格式化。
主設定檔通常是 /etc/systemd/zram-generator.conf在許多安裝環境中,它預設並不存在,因此您需要手動建立它。或者,您可以在 `/etc/systemd/zram-generator.conf.d/` 目錄下建立一個結構,其中包含一個或多個 `.conf` 文件,這些文件充當配置“片段”,並在主文件存在時覆蓋其部分內容。
語法基於諸如、、等名稱的章節。 編號從 0 開始,分別代表第一個設備、第二個設備,依此類推。在每個部分中,可以設定類似於 zram-tools 中的參數,但還有一些特定於 systemd 和磁碟使用情況的額外選項。
其中最有趣的選項之一是壓縮演算法這允許您選擇壓縮演算法(例如 zstd、lz4、lzo-rle 等)。如果未指定,系統將使用內核預設值,在許多情況下是 lzo-rle。此外,還有一個 `options` 指令用於傳遞掛載或交換參數,例如 `discard`,它會導致在執行期間丟棄未使用的壓縮頁面,從而優化記憶體管理。
另一個相關的指令是 writeback-device。此選項專為進階應用場景而設計,可讓您指定一個裝置來儲存無法有效壓縮的頁面,從而將它們從 ZRAM 中卸載。這種配置在桌上型電腦上不太常見,但在需要結合壓縮記憶體和備份儲存的資源非常緊張的環境中非常有用。
如果你想將 zram 用作壓縮 RAM 磁碟,則需要設定 fs-type 和掛載點。使用 `fs-type` 參數定義檔案系統(例如 ext4),使用 `mount-point` 參數指定 zram 設備掛載的目錄。這樣,例如,可以將一個超高速的壓縮臨時目錄掛載到 RAM 中,這對於大型編譯、處理臨時資料或應用程式快取非常有用。
透過建立多個 ZRAM 設備,可以在同一設備中混合使用不同的用途。zram0 用作交換空間,zram1 用作掛載為 ext4 檔案系統的磁碟。在一些實際範例中,例如,可以配置為僅當系統擁有超過一定容量的 RAM(例如 9 GB)時才創建 zram0,並且每個設備最多可以使用 2 GB 的物理內存,從而調整 zram 的最大使用量,並防止在壓縮效果不如預期時佔用過多 RAM。
zram-config 的實際檢查與自動行為
有些工具,例如 zram-config(某些 Ubuntu 衍生版本中使用),可以自動完成大部分設定工作。安裝完成後,軟體包預設會建立並配置 zram,幾乎無需使用者乾預。重新啟動後,系統啟動時 zram 設備即可用作高優先交換分區。
這些自動配置的常見策略之一是為每個 CPU 核心建立一個 ZRAM 裝置。這樣一來,壓縮和解壓縮的負載就可以分配到多個執行緒上,以便更好地利用多核心處理器。例如,在四核心系統中,你會看到四個類似大小的 ZRAM 裝置(zram0、zram1、zram2、zram3),核心可以並行使用它們。
ZRAM 的總容量通常設定為實體 RAM 容量的一半左右。因此,在一台配備 8 GB 記憶體的機器上,預設配置可以產生大約 4 GB 的 zRAM,並分配給各個裝置。這個容量通常能在充分利用壓縮優勢和確保系統有足夠的空間運作那些壓縮效果不佳的進程之間取得良好的平衡。
這些 ZRAM 裝置的優先權通常高於磁碟交換。這樣可以確保系統優先使用壓縮後的 RAM 交換空間,只有在萬不得已的情況下才會使用磁碟。您可以使用 `swapon --show` 指令驗證此優先權,該指令會顯示數值優先權,您可以確認 zram 的優先權高於傳統的交換檔案或交換分割區。
要檢查 zram 的確切配置和實際使用情況,有幾個有用的命令。例如,`cat /proc/swaps` 指令會顯示所有活動的交換區域,包括 ZRAM,以及它們的大小和使用量。您也可以查看 `/sys/block/zram*/` 目錄以取得詳細的統計資料和進階參數,例如目前的壓縮演算法或已消耗的實體記憶體與已指派的邏輯記憶體的比例。
實際上,一旦 zram 配置正確,使用者通常不需要幹預。作業系統決定哪些頁面被移到 zRAM,何時壓縮它們,以及何時釋放它們。如果您使用資源密集型程序或打開大量應用程序,您會注意到,在因記憶體不足而導致機器運行緩慢或關閉進程之前,機器的效能會更好。
在 Linux 系統中,透過設定 zram 交換空間,可以更好地利用可用記憶體。無論您使用的是配備 4-8 GB 記憶體的筆記型電腦還是配備 32 GB 記憶體的桌上型電腦,透過了解大小、演算法和優先選項,您可以根據自己的喜好調整此功能,並在不增加系統複雜性的情況下最大限度地發揮其作用,從而減少磁碟存取並提高整體系統流暢度。
對字節世界和一般技術充滿熱情的作家。我喜歡透過寫作分享我的知識,這就是我在這個部落格中要做的,向您展示有關小工具、軟體、硬體、技術趨勢等的所有最有趣的事情。我的目標是幫助您以簡單有趣的方式暢遊數位世界。
