标签:tun set 黄金 nta 作用 real document 改变 wap
原创 宋宝华 Linux阅码场 2018-01-25本文解释swappiness的作用,以及swappiness=0究竟意味着什么。
我们都知道,Linux一个进程使用的内存分为2种:
在Linux的早期版本(2012年以前的版本,kernel 3.5-rc1),哪怕swappiness被设置为0,其实匿名页仍然有被交换出去的机会:
早先的回收权重是这样计算的:
anon_prio = swappiness;
file_prio = 200 - anon_prio;
ap = (anon_prio + 1) * (reclaim_stat->recent_scanned[0] + 1);
fp = (file_prio + 1) * (reclaim_stat->recent_scanned[1] + 1);
由此可看出,哪怕swappiness为0,ap也是不会为0的,只是比较小。所以swappiness=0不意味着匿名页就不交换。
2012年的第一场雪,比以往时候来得更晚一些
这一年,一个小小的提交,引发了蝴蝶效应,并震惊寰宇:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fe35004fbf9eaf67482b074a2e032abb9c89b1dd
它彻底改变了swappiness=0的定义。这个commit,碧血横飞,浩气四塞,草木为之含悲,风云因而变色。
它的意思再明确不过,如果swappiness=0,除非系统的内存过小(nr_free + nr_filebacked < high watermark)这种恶劣情况发生,
都只是考虑交换file-backed的pages,就不会考虑交换匿名页了。
它改动的代码如下:
-ap = (anon_prio + 1) * (reclaim_stat->recent_scanned[0] + 1);
+ap = anon_prio * (reclaim_stat->recent_scanned[0] + 1);
ap /= reclaim_stat->recent_rotated[0] + 1;
-fp = (file_prio + 1) * (reclaim_stat->recent_scanned[1] + 1);
+fp = file_prio * (reclaim_stat->recent_scanned[1] + 1);
anon_prio如果为0的话,ap也为0了。
于是乎,现在的swappiness如果等于0的话,意味着哪怕匿名页占据的内存很大,哪怕swap分区还有很多的剩余空间,除非恶劣情况发生,都不会交换匿名页,因此这可能造成更大的OOM压力。不像以前,平时会一直兼顾着回收page cache和匿名页。
现在swappiness=0的情况下,天平的格局是:
一石激起千层浪,两指弹出万般音。相关社区的网站内容都跟着进行了更新,比如红帽子:
特洛伊之战中,在决定阿基琉斯和赫克托尔的命运的生死一战中,荷马将命运的天平放在宙斯手中:“天父取出他的那杆黄金天秤,把两个悲惨的死亡判决放进秤盘,一个属阿基琉斯,一个属驯马的赫克托尔,他提起秤杆中央,赫克托尔一侧下倾,滑向哈得斯。”
跨过特洛伊***屠城千年的悲凉,我们看到Linux里面两位战神的命运,被一个码农轻松地决定。
这个修改引起了一系列的连锁反应,而相关的文档修改,却是发生在2年之后:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8582cb96b0bfd6891766d8c30d759bf21aad3b4d
在使能Memory CGroup的情况下,每个memory group可以设置自己的swappiness值,如果某个group的swappiness被设置为0,这个group的匿名页交换会被完全禁止,从而诱发该group在无file-backed页面可回收情况下(哪怕swap空间还很大)的OOM,这一点透过Documentation/cgroup-v1/memory.txt文档可以看出:
“
5.3 swappiness
Overrides /proc/sys/vm/swappiness for the particular group. The tunable in the root cgroup corresponds to the global swappiness setting.
Please note that unlike during the global reclaim, limit reclaim enforces that 0 swappiness really prevents from any swapping even if there is a swap storage available. This might lead to memcg OOM killer if there are no file pages to reclaim.
标签:tun set 黄金 nta 作用 real document 改变 wap
原文地址:https://blog.51cto.com/15015138/2556977