从内核版本2.6.28开始,Linux使用最近最少分裂(LRU)页面替换策略。具有文件系统源(例如程序文本或共享库)的页面属于文件缓存。没有文件系统支持的页面称为匿名页面,由运行时数据(例如为应用程序保留的堆栈空间等)组成。通常,属于文件高速缓存的页面从内存中逐出的成本较低(因为可以在需要时从磁盘简单地读取这些页面) 。由于匿名页面没有文件系统的支持,因此程序必须将它们保留在内存中,直到有交换空间来存储它们为止。
该vm.swappiness
选项在中get_scan_count()
定义的中起作用mm/vmscan.c
。get_scan_count()
确定在寻找要逐出的页面时应如何积极地扫描匿名和文件LRU列表。每种情况的值由最近轮换的比率和最近扫描的比率的浮动平均值确定,在这种情况下,考虑到系统不断变化的工作量,较新的引用比旧的引用具有更大的权重。
该vm.swappiness
是改变有利于匿名页面的换出的文件缓存页之间的平衡调节剂。vm.swappiness
是赋予匿名页面的优先级值,默认设置为60。文件高速缓存的优先级值为200,从中vm.swappiness
减去修饰符(file_prio=200-anon_prio
)。这意味着,在默认情况下,优先级权重架适度赞成匿名页面(的anon_prio=60
,file_prio=200-60=140
)。但是,当系统接近内存不足的情况时,除非vm.swappiness
将其设置为零,否则匿名和文件LRU列表都会被平等地扫描。
当vm.swappiness
设置为100时,优先级将等于(anon_prio=100
,file_prio=200-100=100
)。设置vm.swappiness
为零将防止内核从文件高速缓存中逐出匿名页面,而改用匿名页面。