关于使用 ZRAM 进行交换的另一个问题

关于使用 ZRAM 进行交换的另一个问题

我在一台配备 1 GB SSD 和 20 GB RAM 的笔记本电脑上运行 16.04。文件系统是 btrfs,我没有创建交换。一年多来它没有给我带来任何问题。但是,我想尝试使用 ZRAM 进行交换,并在此处阅读以下内容:https://seravo.fi/2016/perfect-btrfs-setup-for-a-server

“要安装 zram,只需运行:apt install zram-config。下次重启后,系统将自动使用 zram 设备进行交换。系统有多少 RAM 并不重要,因为在某个时候,内核无论如何都会将某些内容从活动内存交换到交换区,以更有效地使用活动内存。”

所以我这样做了,当我重启后执行 cat /proc/swaps 时,我得到:

  Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       2553148 0       5
/dev/zram1                              partition       2553148 0       5
/dev/zram2                              partition       2553148 0       5
/dev/zram3                              partition       2553148 0       5

所以我现在似乎在 ZRAM 中有了交换。我想知道这是否就是我需要做的全部。我不需要在 ZRAM 中创建和启用交换文件?我之所以问这个问题,是因为我在 Ask Ubuntu 上读到过:ZRAM 与常规交换分区

引用:“然后您可以使用 mkswap /dev/zram0 对其进行格式化以进行交换,并使用 swapon /dev/zram0 启用交换。”

这有点令人困惑,因为根据我引用的第一个站点,我需要做的就是启用 ZRAM,系统就会使用它,而在 AskUbuntu 上,似乎我必须在 ZRAM 中创建并启用交换。

有人可以澄清一下吗?

答案1

您需要做的就是安装该zram-config软件包,顾名思义,它会为您配置 zram。cat /proc/swaps准确的说:zram 已经作为 swap 处于活动状态。

另一个问题是关于 zram,而不是zram-config包。

答案2

ZRAM 简单来说就是一个压缩的 ramdisk 驱动,当你启用它的时候,你会得到一个块设备,/dev/zram[0-9]+并且这个块设备中存储的所有数据都会被压缩并存储在内存中。

因为它只是一个块设备,所以你可以用它来存储任何东西,比如文件系统或交换空间——它对于存储分区并不是特别有用,因为分区后它不会像你的/dev/hd[a-z]/dev/sd[a-z] ETC将要。

因此,要使用它进行交换,您必须先用 对其进行格式化mkswap,然后使用 在其上进行 Linux 交换swaponzram-config只是官方的 Ubuntu 软件包,它会在启动时自动为您执行此操作(因为它是一个 ramdisk,因此当您重新启动时,存储在其中的所有数据都会消失)。 还有其他脚本可以执行相同的操作。 我特别喜欢systemd-swap,⁽¹⁾,我在 ArchLinux 机箱和 Raspberry Pi(运行类似 Debian 的发行版)中都使用它,它可以处理基于磁盘的交换、ZRAM 和 Zswap 的自动交换。 我很确定它也适用于 Ubuntu。

令人好奇的是,zram 在内存使用方面的行为如下:虽然您可以在此设备中存储的最大数据量是固定的,但它使用的内存量会根据数据的可压缩程度而变化。例如:

% sudo swapoff /dev/zram0
% sudo dd if=/dev/zero of=/dev/zram0 bs=1M
dd: writing to '/dev/zram0': No space left on device
243+0 records in
242+0 records out
254492672 bytes (254 MB, 243 MiB) copied, 6.10473 s, 41.7 MB/s
% free -h
              total        used        free      shared  buff/cache   available
Mem:           970M         47M        793M         25M        128M        848M
Swap:            0B          0B          0B
% sudo dd if=/dev/urandom of=/dev/zram0 bs=1M
dd: error writing '/dev/zram0': No space left on device
243+0 records in
242+0 records out
254492672 bytes (254 MB, 243 MiB) copied, 13.2982 s, 19.1 MB/s
% free -h
              total        used        free      shared  buff/cache   available
Mem:           970M        292M        549M         25M        128M        603M
Swap:            0B          0B          0B

因此,虽然我的 zram 设备有 254 MB 的空间,但当用零填充时,它几乎不占用任何内存,而当用高度不可压缩的随机数据填充时,它会占用 254M 内存。


⁽¹⁾https://github.com/Nefelim4ag/systemd-swap

相关内容