我已经看到很多人发布了对此的主观解释。希望这是一个更完整的答案。
在 2.6.28 之后的拆分 LRU 中,Linux swappiness 是一个乘数,用于任意修改计算确定两个 LRU 中建立的压力的分数。
因此,例如,在没有剩余可用内存的系统上 - 您拥有的现有内存的值是根据被列为“活动”的内存量的速率以及之后页面提升为活动的频率来衡量的落入非活动列表。
在活动和非活动之间具有许多页面提升/降级的 LRU 非常有用。
通常,当您的内存不足时,文件支持的存储更便宜且更安全,并且自动获得 200 的修饰符(这使得文件支持的内存比交换支持的内存(值为 0)的价值低 200 倍)当它相乘时分数。
swappiness 所做的是通过将您给定的swappiness 数(默认为60)减去文件内存并将您作为乘数添加到匿名内存中的swappiness 值来修改此值。因此,默认的 swappiness 使匿名内存比文件内存有价值 80 倍(文件为 200-60,匿名为 0+60)。因此,在一个已经用完所有内存的典型 linux 系统上,页面缓存必须比匿名内存活跃 80 倍,才能将匿名内存换出以支持页面缓存。
如果将 swappiness 设置为 100,这将给 anon 一个 100 的修饰符,给文件内存一个 100 (200 - 100) 的修饰符,使两个 LRU 的权重相等。因此,在需要页面缓存的文件繁重的系统上,如果匿名内存不如页面缓存那么活跃,那么匿名内存将被交换到磁盘以为额外的页面缓存腾出空间。