在 Linux 上用 zram 替代傳統交換空間 | Linux 中國

我在我的電腦上花了很多時間(我是說工作),我發現了很多有趣的東西。其中最近引起我注意的是?zram0?設備。我是在幾個月前寫一篇文章時第一次注意到它,它顯示在?lsblk?命令的輸出中:

# lsblk
NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda             8:0    0 931.5G  0 disk
├─sda1          8:1    0   600M  0 part
[...]
zram0         252:0    0     8G  0 disk [SWAP]

它被識別為交換空間,這就是首先引起我的好奇心的原因,所以我做了一些研究。zram 最初被稱為 “壓縮緩存(compcache)”,即 “壓縮的高速緩存”。事實證明,zram 是一個用于創建內存內壓縮緩存的工具,特別是作為交換空間使用。

但為什么呢?

當我開始研究 zram 時,我只發現了幾篇關于將 zram 用于交換空間的基礎文章。起初,這對我來說似乎有點違反直覺。畢竟,如果你的內存快用完了,你把頁面交換到內存中的虛擬驅動器中,有什么好處呢?

然后我找到了 Fedora 項目的維基頁面,它提議使用?zram 交換空間(swap-on-zram)。該建議說:“交換是有用的,除了它的速度很慢。zram 是一個使用了壓縮的內存驅動器。在啟動時創建一個 zram 交換空間,并且不再使用默認的交換分區。”

該頁面的其余部分是關于它的細節、好處、副作用和反饋。

Linux 上用于交換空間的 zram

使用 zram 作為交換空間,與常規的基于分區或基于文件的交換空間做的事情相同。當內存壓力過大時,一些最近使用最少的數據會被移到交換空間。平均來說,它會被壓縮到其原始大小的 50% 左右,并被放置在內存的 zram 空間中。這比將這些內存頁存儲在硬盤上要快得多,并可以釋放出它所使用的內存用于其他用途。

節省交換空間

我試圖找到關于配置多少交換空間或 zram 交換空間的總結建議。這使我重新回顧了交換空間的設置,以及我之前的文章《現代 Linux 系統的正確交換空間是多少?》。就我所知,從 RHEL 和 Fedora 的最新文檔來看,推薦的交換空間數量并沒有改變。不過,該文檔忽略了 zram 的使用。

然而,在不使用 zram 的舊版 Linux 或 zram 被禁用的情況下,之前文章中的表格仍然為交換空間的分配提供了一個好的起點。

我找到的關于 zram 功能的文檔在 zram 如何根據內存大小分配空間,以及分配給 zram 交換空間的數量方面是不一致的。

由于缺乏權威性的文檔,我進行了一些實驗來憑經驗確定用于分配 zram 交換空間的算法。我為此使用了我自己的物理和虛擬系統。結果很有趣,與我迄今為止發現的任何文檔都不一致。

在所有足夠大的系統上,zram 的默認大小是 8GB,但在內存較小的主機上通常會大大減少。在我用于測試的一臺虛擬機(VM)上,可以訪問 4GB 的內存,zram 的虛擬交換空間被分配為 3.8GB。我的一臺舊戴爾電腦擁有 8GB 的內存,zram 被設置為 7.6GB。當內存減少到 2GB 時,zram 就減少到 1.9GB。

我擁有的所有內存超過 8GB 的物理和虛擬主機都顯示正好是 8GB 的 zram。這包括我擁有 64GB 內存的主工作站和其他擁有 16GB 或 32GB 內存的主機。

基于這幾個數據點,我可以得出這樣的結論:目前的默認設置是最多 8GB 的 zram,而在 8GB 或以下的主機上,zram 占內存的 95%。

我讀過一些文章,其中提到了 zram 交換空間的其他大小,甚至高達 100% 的內存,但這些似乎都是理論上的,而不是現實。

你的發行版可能不同,但這里是 Fedora 和類似發行版的實際 zram 交換空間的分配情況:

  • 內存 ? 8 GB:0.95 × 內存
  • 內存 > 8 GB:8 GB

請注意,zram 交換空間大小的算法并沒有基于對任何給定的現實世界的系統或應用程序的 “最佳” 交換大小的建議。這種 zram 交換空間的分配是一種相當概率性的方法,它應該在廣泛的 Linux 主機上運行良好。然而,最大的 zram 交換空間大小被配置為 8GB,而且我一直推薦 8GB 作為傳統交換空間的最大容量,我想我可以說它反映了 zram 交換空間的最佳大小。

管理 zram 交換空間

zram 的默認值保存在?/usr/lib/systemd/zram-generator.conf?配置文件中。以下是我的一個測試虛擬機,分配了 5097GB 的內存。

# cat /usr/lib/systemd/zram-generator.conf
# This config file enables a /dev/zram0 device with the default settings:
# - size - same as available RAM or 8GB, whichever is less
# - compression - most likely lzo-rle
#
# To disable, uninstall zram-generator-defaults or create empty
# /etc/systemd/zram-generator.conf file.
[zram0]zram-size= min(ram, 8192)

你可以在?zram-generator.conf?配置文件的最后一行改變默認的 zram 交換空間大小。但我建議不要這樣做,除非你能明確說明這樣做的原因,并在你做任何改變后測試你的結果。像 Linux 中的許多其他配置默認值一樣,zram 的默認值已經被很好地測試過了,適合大多數使用情況。

監控 zram

可以使用?zramctl?工具來查看 zram 的當前狀態。

# zramctl
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle       4.8G   4K   80B   12K       4[SWAP]

傳統的?swapon?命令也可以用來查看交換,包括作為交換使用的 zram:

# swapon --show
NAME       TYPE      SIZE USED PRIO
/dev/zram0 partition 4.8G   0B  100

需要注意的是,zramctl?在不包含數據時不報告 zram,所以結果會包含空輸出。而像?lsblkswapon、?topfreehtop?等工具,即使不包含數據,也會顯示 zram。

停用 zram

swapoff -a?命令會關閉 zram 交換空間以及用作交換的傳統 HDD 或 SSD 存儲。swapon -a?命令在 zram 為空時不顯示它,可以使用?zramctl /dev/zram0?代替。

# swapon --show# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:00  120G  0 disk
├─sda1          8:10    1G  0 part /boot/efi
├─sda2          8:20    1G  0 part /boot
└─sda3          8:30  118G  0 part├─vg01-root 253:00   10G  0 lvm  /├─vg01-swap 253:10    3G  0 lvm  [SWAP]├─vg01-usr  253:10   30G  0 lvm  /usr├─vg01-home 253:20   10G  0 lvm  /home├─vg01-var  253:30   30G  0 lvm  /var└─vg01-tmp  253:40   10G  0 lvm  /tmp
sr0            11:01 1024M  0 rom
zram0         252:00    0B  0 disk
# zramctl## zramctl /dev/zram0
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle         0B   0B    0B    0B       4

注意,/dev/zram0?在這些命令中并沒有顯示為交換空間,直到它被用于該目的。這給我造成了一些困惑,直到我的實驗表明這是事實。

創建 zram 交換空間

zram 本身已經存在了大約 20 年,但只是在過去的一兩年里才在一些發行版上作為交換空間使用。你的一些或所有主機上當前的 Linux 環境可能沒有用 zram 創建交換空間。如果是這種情況,它可以很容易地被補救。

對于 Fedora 32,它是默認使用 zram 交換空間之前的最后一個版本,它只需要三個簡單的命令。

首先,驗證是否存在?zram-swap.service?文件,它作為?zram?RPM 包的一部分安裝:

# systemctl status zram-swap
● zram-swap.service - Enable compressed swap in memory using zramLoaded: loaded (/usr/lib/systemd/system/zram-swap.service; disabled; vendor preset: disabled)Active: inactive (dead)

接下來,安裝?zram-generator-defaults?和?zram-generator?軟件包:

# dnf install zram-generator-defaults zram-generator

啟用并啟動?zram-swap?服務:

# systemctl enable zram-swap.service# systemctl start zram-swap.service

然后驗證?zram0?是否存在并被用作交換空間:

# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:00  120G  0 disk
├─sda1          8:10    2G  0 part /boot
└─sda2          8:20  118G  0 part├─vg01-root 253:00   10G  0 lvm  /├─vg01-swap 253:10    3G  0 lvm  [SWAP]├─vg01-usr  253:20   35G  0 lvm  /usr├─vg01-tmp  253:30   15G  0 lvm  /tmp├─vg01-var  253:40   35G  0 lvm  /var└─vg01-home 253:50   20G  0 lvm  /home
sr0            11:01 1024M  0 rom
zram0         252:00  7.5G  0 disk [SWAP]

用 zram 改進交換空間

這就是全部內容了。在 Fedora 上這很容易。不同的發行版可能也一樣簡單,只是軟件包名稱和命令的細節可能不同。在你的電腦上試試 zram 交換空間吧。在我的下一篇文章中,我將進一步演示一些 zram 選項。


via:?https://opensource.com/article/22/11/zram-swap-linux

作者:David Both?選題:lkxed?譯者:wxy?校對:wxy

本文由?LCTT?原創編譯,Linux中國?榮譽推出

編輯于 2023-01-28 11:44?IP 屬地海南

Linux

Swap 分區

zram

?贊同 13??4 條評論

?分享

?喜歡?收藏?申請轉載

?

歡迎參與討論

4 條評論

默認

最新

銀河-蝸牛

銀河-蝸牛

正如標題所說,zram 是*替代*傳統 swap 的,不是一起用的。如果你用了傳統 swap 同時又想要壓縮內存,那可以用 zswap

2023-01-28?·?IP 屬地陜西

?回復?3

觀觀

觀觀

現在內存越來越大,swap基本都關了,而且很多軟件部署安裝時都要求關掉swap,比如ES

2023-01-30?·?IP 屬地上海

?回復?喜歡

胡蘿卜

胡蘿卜

銀河-蝸牛

現在的企業部署應用都是用虛擬機,就虛擬機那磁盤io性能你覺得開swap體驗怎么樣。所以正常部署服務端應用就應該關掉swap。把Linux當桌面用在內存不是特別大的情況下可以開swap。

2023-12-08?·?IP 屬地湖北

?回復?喜歡

銀河-蝸牛

銀河-蝸牛

其實也不至于,對一些運行時不希望被swap的程序,可以放在cgroup里單獨設置讓它不使用swap

2023-01-30?·?IP 屬地陜西

?回復?喜歡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719382.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719382.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719382.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【VPX637】基于XCKU115 FPGA+ZU15EG MPSOC的6U VPX雙FMC接口通用信號處理平臺

VPX637是一款基于6U VPX總線架構的通用實時信號處理平臺,該平臺采用一片Xilinx的高性能Kintex UltraScale系列FPGA(XCKU115-2FLVF1924I)作為預處理單元,外掛2個FMC擴展接口,來完成數據采集、數據回放以及實時信號處理算…

[動態規劃,DFS深度搜索]滑雪

滑雪 題目描述 Michael喜歡滑雪,這并不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道在一個區域中的最長底滑坡。區域…

Java---文件,流???

文章目錄 1.遍歷文件夾2.遍歷子文件夾3.練習流4.以字節流的形式讀取文件內容5.以字節流的形式向文件寫入數據頂折糾問6 .寫入數據到文件 1.遍歷文件夾 一般說來操作系統都會安裝在C盤,所以會有一個 C:\WINDOWS目錄。 遍歷這個目錄下所有的文件(不用遍歷子目錄) 找出…

ssh連接ubantu失敗

新系統Ubuntu20.4 安裝ssh server 1. 安裝 openssh-server2. 開啟22號端口 # 安裝ssh服務 sudo apt-get install openssh-server # 安裝防火墻 sudo apt-get install ufw # 開啟防火墻 sudo ufw enable #放開22端口 sudo ufw allow 22 開啟22號端口 倘若ubuntu沒有開啟22…

HTTP/2、HTTP/3分別解決了什么問題

總的來說就是HTTP/1.1是請求-響應模型導致隊頭阻塞問題,HTTP2是TCP層面導致隊頭阻塞問題 HTTP/2 多路復用,解決了HTTP/1.1隊頭阻塞問題 HTTP/1.1 的實現是基于請求-響應模型的。同一個連接中,HTTP 完成一個事務(請求與響應&…

3.4作業

課上代碼復習&#xff1a; 廣播接收端代碼: #include<myhead.h> int main(int argc, const char *argv[]) {//創建套接字int rfd socket(AF_INET,SOCK_DGRAM,0);if(rfd -1){perror("socket error");return -1;}printf("rfd %d\n",rfd);//填充地…

臺式電腦電源各線的電壓和電流輸出和輸出電流

臺式電腦電源是電腦硬件的重要組成部分。 它為計算機的各個部件提供所需的電壓和電流。 不同的硬件設備和組件有不同的電壓和電流輸出。 下面詳細介紹臺式電腦電源各線的電壓&#xff0c;包括3.3V、5V、12V、-12V、-5V和5VSB&#xff0c;以及它們的輸出電流和用途。 3.3V&#…

【AI+CAD】(一)ezdxf 解析DXF文件

DXF文件格式理解 DXF文件格式是矢量圖形文件格式&#xff0c;其詳細說明了如何表示不同的圖形元素。 DXF是一個矢量圖形文件&#xff0c;它捕獲CAD圖形的所有元素&#xff0c;例如文本&#xff0c;線條和形狀。更重要的是&#xff0c;DXF是用于在CAD應用程序之間傳輸數據的圖形…

STM32自學?I2C

這里只是大體介紹&#xff0c;具體的可參考STM32數據手冊

數據結構與算法-選擇排序

引言 在計算機科學中&#xff0c;數據結構和算法是兩個至關重要的基石。它們共同決定了程序的效率、可讀性和可維護性。本文我們將聚焦于一種基礎而直觀的排序算法——選擇排序&#xff0c;并探討其內在的工作機制以及在實際應用中的優缺點。 一、什么是選擇排序&#xff1f; …

Leetcode 3067. Count Pairs of Connectable Servers in a Weighted Tree Network

Leetcode 3067. Count Pairs of Connectable Servers in a Weighted Tree Network 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3067. Count Pairs of Connectable Servers in a Weighted Tree Network 1. 解題思路 這一題沒想到什么好的方法&#xff0c;走的是暴力求解的路…

xss.haozi.me:0x07

<img src1 onerroralert(1)

Spring MVC ThemeResolver原理解析

在Spring MVC框架中&#xff0c;ThemeResolver&#xff08;主題解析器&#xff09;是一個重要但經常被忽視的組件。它負責解析和管理Web應用程序中的主題設置&#xff0c;允許用戶根據不同的需求和偏好切換界面主題。ThemeResolver為開發者提供了一種靈活的方式來控制應用程序的…

tomcat下載安裝配置教程

tomcat下載安裝配置教程 我是使用tomcat下載安裝及配置教程_tomcat安裝-CSDN博客 此貼來進行安裝配置&#xff0c;原文21年已經有些許不同。 下載tomcat 官網&#xff1a;http://tomcat.apache.org/ 我們老師讓安裝8.5以上&#xff0c;所以我直接選擇版本9 點擊9頁面之后…

DPDK常用API合集三

librte_timer 此庫為 DPDK 執行單元提供定時器服務&#xff0c;提供異步執行函數的能力。它可以是周期性的函數調用&#xff0c;也可以是一次性調用。它使用環境抽象層&#xff08;EAL&#xff09;提供的定時器接口獲取精確的時間參考&#xff0c;并可以根據需要以每個核心為基…

2024.03.03藍橋云課筆記——排序

sort簡介 #include<algorithm> 使用的是快速排序 時間復雜度為O(nlogn) sort使用(默認是從小到大) 1.sort(起始地址&#xff0c;結束地址的下一位&#xff0c;*比較函數&#xff09;&#xff1b; #include<iostream> #include<algorithm> using namesp…

HTTPS的實現原理

圖片來源&#xff1a;HTTPS 詳解一&#xff1a;附帶最精美詳盡的 HTTPS 原理圖 - 個人文章 - SegmentFault 思否 加密流程按圖中的序號分為&#xff1a; 客戶端請求 HTTPS 網址&#xff0c;然后連接到 server 的 443 端口 (HTTPS 默認端口&#xff0c;類似于 HTTP 的80端口)。…

Windows批處理:bat文件學習

目錄 第一章、快速了解Windows批處理1.1&#xff09;Windows批處理相關概念介紹1.1.1&#xff09;批處理的起源1.1.2&#xff09;bat文件介紹 1.2&#xff09;Demo1.2.1&#xff09;創建文件添加命令1.2.2&#xff09;bat腳本中的命令解釋 第二章、實例2.1&#xff09;點擊bat文…

navicat安裝11.3

一、安裝navicat 1、下載navicat 2、解壓壓縮包 3、點擊exe文件 4、輸入密鑰&#xff1a; NAVH-WK6A-DMVK-DKW3 5、點擊打開&#xff1a; 輸入連接參數&#xff1a; 6、查看連接好倉庫 7、 在使用navicat來編寫sql語句 8、編寫語句 連接不上問題&#xff0c;檢查問題&#…

[出錯]-RuntimeError: “slow_conv_transpose2d_out_cpu“ not implemented for ‘Byte‘

一開始我一直一維是torch版本的問題 輸入是用cv2讀出來的&#xff0c;數據類型dtype是默認是unit8&#xff0c;輸入到模型中&#xff0c;除了要將他轉為tenso以外&#xff0c;還要.float將數據類型轉為浮點數。