暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

为swap分区正名

术道经纬 2021-04-17
189

说明:本文来自阅读https://chrisdown.name/2018/01/02/in-defence-of-swap.html一文的一点领悟,笔者把它译作标题所示的:「为swap分区正名」。


正文:

如果设置了swap分区,那么当内存紧张时,一部分anonymous page会转移到位于外部磁盘的swap分区上,当这部分内存之后再被使用时,又从swap分区换入。这个过程确实会触发相对慢速的磁盘I/O操作,但如果禁止了swap分区,当内存紧张时,系统就只能回收file page,这实际是将制造磁盘I/O的压力,从anon page转嫁到了file page头上,治标不治本,掩耳盗铃。


或许很多人认为swap分区只是快要撑满了的内存的一个紧急避难所,把它看做是内存不够「阔气」时一个不得已的选择。而且关于swap分区究竟应该设置多大,一直广为流传着这么一个说法:应该设为系统内存的两倍(很多书上都是这么教的吧),可是其背后的依据是什么?


事实上,一个更严谨的做法是先划分一定大小的swap分区,然后测量你的系统在各种场景下的swap分区使用情况(包括一些会突然出现内存使用峰值的场景),并在此基础上增加一定的缓冲裕量,以得到最适合你的系统的swap分区的取值。


研究过anon page的同学大多应该知道,有着"vm.swappiness"这样一个可以调节的sysctl参数,其值越小,则越不倾向于回收anon page。透过这层字面意思,其更本质的含义其实是:回收anon page对当前系统来说代价到底有多大。


传统的机械硬盘,I/O偏慢自不用多说,此外它还有一个由其物理构成决定的特点:随机读写的性能较差。file page的读写可能还表现出一定的连续性(要不然要prefetch干嘛),而anon page,则表现出更强的随机性。所以在spinning disk的环境下,anon page换入换出的代价是真的高,是真的不适合对其进行太多的swap。


但现在SSD的使用越来越广泛,除了I/O的速度提升,作为基于flash单元的设备,其随机读写的性能也不再成为掣肘。面对SSD的环境,回收anon page的代价可以说与回收file page的代价相差无几,就算把"swappiness"上调到100(意味着两者被一视同仁,平起平坐),也是很合理的。


合理设置swap分区的大小和"vm.swappiness"的值,不仅可以降低系统在走投无路时祭出OOM killer的概率,还可以提高系统性能的综合表现。


文章转载自术道经纬,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论