使用 Linux 上的 zram 提升交换性能

理想的交换配置取决于您的用例以及主机电脑中的物理 RAM 容量。
4 位读者喜欢这篇文章。
Person using a laptop

Zram 是 Linux 上的压缩 RAM 磁盘。最近,它已在许多发行版中用于交换空间。在我之前的文章中,我介绍了 zram 并演示了如何使用它。在本文中,我将介绍一些自定义系统如何使用 zram 的方法。

增强型交换

Zram 交换可以与标准辅助存储设备一起增强。在 RAM 容量较低的系统上,添加一些传统的交换空间可能特别有用。(这种增强功能在具有非常大 RAM 容量的主机上通常没有用。)

如果您确实选择使用某种类型的存储设备来增强交换,则硬盘仍然可以使用,但比在 SATA 或 m.2 格式中使用 SSD 慢得多。但是,SSD 设备中的闪存的寿命比 HDD 设备更有限,因此具有大量交换活动的系统可能会大大缩短 SSD 的寿命。

调整交换

调整交换空间不仅仅是分配特定的交换空间量。还有其他因素可用于管理系统如何使用和管理交换空间。Swappiness 是可用于管理交换性能的主要内核参数。

我最近写了我如何在 Linux 上排除 swappiness 和启动时间的故障,其中我讨论了 vm.swappiness 内核设置。简而言之,Linux 内核强制交换开始和运行的默认设置是 60。零 (0) 是最不积极的,而 100(或 200,取决于您阅读的内容)是最积极的。在该级别,尽管我的主工作站中具有 64 GB 的 RAM,其中大部分未使用,但在 LibreOffice 中处理非常大的文档时,我仍然遇到延迟。

解决此问题的方法是将 vm.swappiness 内核参数降低到 13。这对于我的用例效果很好,但您可能需要进行实验才能使其适合您的环境。阅读链接的文章以了解详细信息。

您还可以在我的文章如何使用 /proc 文件系统调整 Linux 内核中找到有关调整 Linux 内核的更多常规信息。

交换大小建议

目前,在使用 zram 时,我没有找到任何发行版关于交换大小的建议。根据我的个人经验,我发现至少有一点交换空间可能是有益的。即使您拥有大量的 RAM,仅仅是为您的环境正确调整的交换正在被使用并包含数据这一事实就可以表明需要更多 RAM。

在我之前的文章中列出的默认 zram 交换大小对于该目的来说绰绰有余。到目前为止,它在我的所有 Linux 主机上都运行良好。

我认为,交换空间的最终目的是作为一个小的缓冲区——一个红色警报——让系统管理员知道何时系统需要更多 RAM。当然,一些非常旧的硬件无法支持超过 4 或 8 GB 的 RAM。在这种情况下,需要一个新的主板——一个能够支持足够 RAM 来执行手头任务的主板。

我的建议是像我一样做。我在我的每个主机上都设置了默认大小的 zram 交换。我删除了所有现有的交换分区(我不使用交换文件),并且我的主机在交换设置下都运行完美。

删除传统的交换分区和文件

因为我刚刚建议删除所有旧的交换分区,所以我也应该提到,执行此操作的过程并不像它应该的那样简单。这并不难,但我花了一些研究才弄清楚,因为互联网上有很多过时且不正确的信息。此过程在 Fedora 36 上对我有用。

  1. 关闭现有交换分区和文件的交换。

    可以使用 swapoff /dev/nameofswapdevice 完成此操作,但使用 swapoff -a 命令关闭所有交换可能最容易。此命令还会关闭任何现有的 zram 交换。

  2. 删除 /etc/fstab 文件中传统交换分区或文件的条目。我只是将这些注释掉了,以防出现意外问题。稍后我删除了这些条目。Zram 交换不需要 /etc/fstab 文件中的条目。

  3. 默认的 /etc/default/grub 配置文件很简单,您只需要关注一行

    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="resume=/dev/mapper/vg01-swap \
    rd.lvm.lv=vg01/root rd.lvm.lv=vg01/swap \
    rd.lvm.lv=vg01/usr rhgb quiet"
    GRUB_DISABLE_RECOVERY="true"
    GRUB_ENABLE_BLSCFG=true

    GRUB_CMDLINE_LINUX 行更改为

    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg01/root rd.lvm.lv=vg01/usr"

    删除 resume=/dev/mapper/vg01-swaprd.lvm.lv=vg01/swap 可防止内核查找交换卷。

  4. 您必须使用 grub2-mkconfig 保存这些更改。首先,备份当前的 /boot/grub2/grub.cfg 文件,然后运行以下命令

# grub2-mkconfig > /boot/grub2/grub.cfg

Zram 故障排除

务必遵循所有这些步骤。删除 rhgb quiet 会导致显示所有内核启动消息和 systemd 启动消息。这可以使在启动和启动阶段快速定位问题变得更容易。

当我第一次尝试这样做时,我删除了我指定为交换空间的逻辑卷,然后重新启动进行测试。重新启动失败,并在启动过程的早期挂起。

幸运的是,我已将内核设置为显示启动和启动消息,而不是图形启动。因此,我能够看到指示内核找不到交换卷的错误消息。

如果由于您错过了一个步骤而发生这种情况,请从 Live Fedora USB 驱动器启动,并创建一个新的交换卷。不必做任何其他事情。然后重新启动并删除 /etc/defaults/grub 的内核行中的交换条目。

仅使用 zram 交换

删除交换分区并重新生成 GRUB 配置后,我运行了 swapon -a 并使用 swapon -showlsblk 进行了验证。重新启动系统最终确保了系统确实正确启动,并且唯一的交换是 zram 交换。

Zram 是一种旨在创建压缩虚拟交换空间的工具。理想的交换配置取决于您的用例以及主机电脑中的物理 RAM 容量。无论您使用 zram、交换分区和交换文件的哪种组合进行交换,您都应始终使用自己的系统负载进行实验,并验证您的交换配置是否适合您。但是,使用默认的 zram 交换而不使用任何传统的交换分区或文件对我也同样有效——与我曾经使用过的任何其他交换配置一样好,并且比许多配置更好。

David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。自 1996 年以来,他一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员的 Linux 哲学”的坚定拥护者和传播者。

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.