使用 cgroups 仅关闭一个进程的交换?

iNo*_*ode 17 linux process memory cgroups

我想仅关闭一个进程的交换。对于其他进程,交换应该像往常一样工作。

我如何用 cgroups 实现这个?

Bra*_*ley 10

来自关于 memory.swappiness的内核文档

5.3 swappiness
Run Code Online (Sandbox Code Playgroud)

类似于 /proc/sys/vm/swappiness,但仅​​影响组的层次结构。

无法更改跟随 cgroups 的 swappiness。
- 根 cgroup(使用 /proc/sys/vm/swappiness)。
- 一个使用层次结构的 cgroup,它下面有其他 cgroup。
- 使用层次结构而不是层次结构的根的 cgroup。

来自红帽客户门户:

memory.swappiness
Run Code Online (Sandbox Code Playgroud)

设置内核倾向于换出此 cgroup 中任务使用的进程内存,而不是从页面缓存中回收页面。这是在 /proc/sys/vm/swappiness 中为整个系统设置的相同趋势,以相同方式计算。默认值为 60。低于 60 的值会降低内核换出进程内存的趋势,大于 60 的值会增加内核换出进程内存的趋势,而大于 100 的值允许内核换出属于此 cgroup 中进程的地址空间。

请注意,值为 0 不会阻止进程内存被换出;当系统内存不足时,可能仍会发生换出,因为全局虚拟内存管理逻辑不会读取 cgroup 值。要完全锁定页面,请使用 mlock() 而不是 cgroups。

:: 您不能更改以下组的swappiness:
* 根cgroup,它使用/proc/sys/vm/swappiness 中设置的swappiness。
* 一个下面有子组的 cgroup。

编辑: 如果您有兴趣确切地知道如何设置它,您可以像大多数其他 cgroup 属性一样设置它:

 # cd /mnt/cgroup/<cgroupName>
 # cat memory.swappiness
 60
 # echo "59 " > memory.swappiness
 # cat memory.swappiness
 59
Run Code Online (Sandbox Code Playgroud)