我目前正在从 cgroups v1 迁移到 cgroups v2。我找不到我在 cgroups v1 中使用的 memory.swappiness 文件。关于swap的文件只有以下几个
memory.swap.current
memory.swap.events
memory.swap.high
memory.swap.max
但它们中的每一个都与 swappiness 参数无关,根据文档。我在cgroups v2中找不到有关文件memory.swappiness的任何信息,只找到有关/proc/sys/vm/swappiness
文件和/etc/sysctl.conf
文件中vm.swappiness参数的信息。这是否意味着无法使用 cgroups v2 设置交换性?
操作系统:Debian 11
答案1
没错,使用 cgroups v2,交换只能在全局范围内进行控制。 Tejun Heo(设计并实现了 cgroups v2)给出了以下理由:
目前还不太清楚 swappiness 编码的是什么。其中很多与文件支持的 IO 相比,匿名内存的 IO 是如何考虑其固有的更高随机性的。因此,它更多的是底层硬件的功能而不是工作负载。此外,实现也不太正确 - iirc,行为会根据回收者的不同而有所不同。
实际上,交换性更多的是关于系统中的 I/O 平衡,这通常是系统存储的属性,而不是单个工作负载行为。
cgroups v2 提供了其他可以使用的设置控制内存使用,通常以比交换性更合适的方式:可以设置阈值来完全防止回收(memory.min
),尝试最小化回收(memory.low
),并限制交换使用(memory.swap.max
在极端情况下memory.swap.high
)。