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

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

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

我如何使用 cgroup 来实现这一点?

答案1

内核文档关于内存.交换性:

5.3 swappiness

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

跟随cgroups的swappiness是不能改变的。
- 根 cgroup(使用 /proc/sys/vm/swappiness)。
- 使用层次结构的 cgroup,并且其下方还有其他 cgroup。
- 使用层次结构而不是层次结构根的 cgroup。

来自红帽客户门户:

memory.swappiness

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

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

:: 您无法更改以下组的交换性:
* 根 cgroup,它使用 /proc/sys/vm/swappiness 中设置的交换性。
* 下面有子组的 cgroup。

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

 # cd /mnt/cgroup/<cgroupName>
 # cat memory.swappiness
 60
 # echo "59 " > memory.swappiness
 # cat memory.swappiness
 59

相关内容