我想仅关闭一个进程的交换。对于其他进程来说,交换应该像往常一样工作。
我如何使用 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