我正在尝试查找有关要配置多少交换空间或 zram 交换空间的摘要建议。这让我回到交换空间设置,以及我之前的文章《现代 Linux 系统的正确交换空间是多少?》。据我从 RHEL 和 Fedora 的最新文档来看,建议的交换空间量没有改变。但是,文档忽略了 zram 的使用。
但是,上一篇文章中的表仍然为不使用 zram 或禁用 zram 的旧版本 Linux 中的交换空间分配提供了一个很好的起点。
我发现的有关 zram 功能的文档在 zram 如何根据内存大小分配空间以及分配给 zram 的交换空间量方面不一致。
由于缺乏权威文档,我进行了一些实验来凭经验确定用于分配zram交换空间的算法。为此,我使用自己的物理和虚拟系统。结果很有趣,并且与我迄今为止找到的任何文档不一致。
在所有足够大的系统上,zram 的默认大小为 8GB,但在内存较少的主机上通常要小得多。在我用于测试的虚拟机 (VM) 之一上,我可以访问 4GB内存,zram虚拟交换空间分配为3.8GB。我有一台旧的戴尔计算机,内存为 8GB,zram 设置为 7.6GB。当内存减少到2GB时,zram减少到1.9GB。
我拥有超过 8GB RAM 的所有物理和虚拟主机均显示 8GB zram。这包括我的具有 64GB RAM 的主工作站和具有 16GB 或 32GB RAM 的其他主机。
根据这几个数据点,我可以得出结论,当前默认的 zram 最多为 8GB,在 8GB 或更少的主机上,zram 占用了 95% 的内存。
我读过一些文章,提到了其他大小的 zram 交换空间,甚至高达 100% 的内存,但这些似乎更理论化而不是现实。
您的发行版可能有所不同,但以下是 Fedora 和类似发行版的实际 zram 交换空间分配:
请注意,zram 交换空间大小调整算法不基于任何给定的实际系统或应用程序。“最佳”交换尺寸建议。这种zram 交换空间的分配是一种相当概率的方法,应该适用于各种 Linux 主机。但是,最大 zram 交换空间大小配置为 8GB,我一直推荐8GB作为传统交换空间的最大大小,我想我可以说它反映了zram交换空间的最佳大小。
zram 的默认值保存在/usr/lib/systemd/zram-generator.conf
配置文件中。下面是我的测试虚拟机之一,分配了 5097GB 内存。
You您可以在zram-generator.conf
配置文件的最后一行更改默认的 zram 交换空间大小。但我建议不要这样做,除非您能清楚地说明这样做的原因并在进行任何更改后测试您的结果。与 Linux 中的许多其他默认配置一样,zram 的默认配置经过了充分测试,适合大多数用例。
您可以使用zramctl
工具查看zram当前状态。
传统swapon the Swapon command也可以使用视图。交易所,包括用作交易所的zram:
需要注意的是zramctl
在不包含数据时不会报告zram ,因此结果将包含空输出。就像lsblk
、交换、顶部
、免费 、
htop
等工具即使不包含数据也会显示zram。
swapoff -a
该命令关闭 zram 交换空间以及用作交换的传统 HDD 或 SSD 存储。 swapon -a
命令在zram为空时不显示zram,可以使用zramctl /dev/zram0
代替。
请注意,/dev/zram0
不包含在这些命令中显示为交换空间,直到用于该目的为止。这给我带来了一些困惑,直到我的实验证明这是真的。
zram 本身已经存在了大约 20 年,但在过去一两年才在某些发行版上作为交换空间提供。您当前的部分或全部主机上的 Linux 环境可能没有使用 zram 创建交换空间。如果是这种情况,很容易补救。
对于Fedora 32,默认使用zram交换空间之前的最后一个版本,它只需要三个简单的命令。
首先,验证zram-swap.service
文件是否存在,该文件作为zram
RPM 包的一部分安装:
接下来,安装zram-generator-defaults
和zram-generator
包:
启用并启动zram-swap
服务:
然后验证zram0
是否存在并用作交换空间:
就这样了。这在 Fedora 上很容易。不同的发行版可能同样简单,只是包名和命令的细节可能不同。尝试计算机上的 zram 交换空间。在我的下一篇文章中,我将进一步演示一些 zram 选项。