另外一个改进就是新内核认为,文件缓存的页面和匿名页面的地位不再相同,为何呢?因为匿名页面更加容易被更改,匿名页面存在的目的就是进程在运行过程中读写的,而磁盘缓存页面存在的目的是加速磁盘访问,它们一般被更改的几率并不大,因此会优先回收磁盘缓存,因为对于很多没有被修改的页面来说,直接丢弃就可 以了,不需要进行磁盘io,对于匿名页面很多都被写过,换出它们需要进行磁盘io,而磁盘io是一个很耗时的行为。对于cpu消耗型的程序,这是一种福 音,因为它们需要的匿名页面很大的几率都在内存,被回收的都是磁盘缓存页面,但是对于io消耗型的程序,这也许不是什么好消息,因为这个实现使得磁盘io 操作增加了。但是我很有信心,因为linux的可微调性,用户一定可以自行配置页面置换的行为的。
第三个改进就是增加了不可回收链表,以往的内核在回收内存的时候会扫描所有的页面,如果有lock标志的,跳过它,但是还是要一个一个检查,新内核将不可回收的页面移出回收者扫描的视线,这样在扫描的时候就减少了扫描的数量。
总结起来就是:新内核不再仅仅使用inactive和active两个链表,而是增加了磁盘缓存页面的lru链表以和匿名页面区分,增加了不可换出页面的链表以使之移出扫描者的视线。
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274026