|
Linux页替换的设计
赵珂, cn.zhaoke.com
http://blog.zhaoke.com/70.html
2007年1月26日
http://blog.zhaoke.com/data/2007/0126/andrea_arcangeli.gif
图: Andrea Arcangeli
Andrea Arcangeli[专访]设计的虚拟内存子系统已经合并到2.4.10内核. 一位主修操作系统课程的学生在邮件列表上问道为什么Linux内核中的LRU(最近最少使用)页替换算法使用两个串联链表? Andrea回答: 当时之所以设计成两个链表, 因为这样可以把活动和非活动缓存分开, 从而在交换出工作集(进程当前正使用的页的集合)之前能够检测出缓存的污染状况. 他继续说, 我们可以更快地收集非活动列表中的页(比活动列表中的页). 然后虚拟内存通过释放缓存来保持两个列表的大小平衡, 显然某些时候活动列表也需要被释放.
关于LRU算法: Linux使用LRU算法从系统中公平地交换出页面.
http://blog.zhaoke.com/data/2007/0126/rik.gif
图: Rik van Riel
Rik van Riel[专访], 反向映射[相关]虚拟内存(已经合并到2.5内核[文章])的作者. 他说, 过去十年内存大小的增长速度远远超过了磁盘的增长速度(接下来10年可能也一样), 因此页替换算法的质量可能会变得越来越重要. 关于建议LRU分成两部分, 一部分为页缓存, 另一部分用于映射页缓存, Nick Piggin[专访]的回应是: 实际上我有一个可以”分开活动列表’大补丁. 它可以在回收时根据页面是否被映射来移动页面. 这个办法没有现在的好. Rik提供了一些改进想法. 对于每一个列表, 我们跟踪: 1) 列表的大小 2)我们扫描列表的频率 3)页(非新)片断的引用数. 这种方式我们能够确定哪一个列表有最大的空闲页片断, 因此该列表将会进行强制的扫描.
关于反向映射: 反向映射提供了一个发现哪些进程正在使用给定的内存物理页的机制.
这里是邮件列表上的讨论信息.
http://blog.zhaoke.com/data/2007/0126/page_replacement.txt
参考
Linux: Page Replacement Design
http://kerneltrap.org/node/7608
内核比较: 2.6 内核中改进了内存管理
http://www.ibm.com/developerworks/cn/linux/l-mem26/
相关文章
Linux: 自动内核调整程序
http://blog.zhaoke.com/60.html
IBM Linux技术中心: Linux内核相关的出版物
http://blog.zhaoke.com/36.html
进程实际内存占用: 私有驻留内存数(Private RSS)介绍
http://blog.zhaoke.com/31.html
备注
转载请保持文章完整性, 欢迎到blog.zhaoke.com网站与赵珂交流. |
|