Linux 2.5中有什么新鲜玩意?
下面就来讨论一下在Linux 2.5中可能要添加的一些性能。本文将按内核主题分别进行阐述:虚拟内存管理器(VM)、输入/输出、网络、文件系统以及新功能。值得注意的是,内核的某些核心部件,如调度程序,在有关2.5版本的讨论中一点没有涉及到。这表明,这些部件已经确实达到了比较成熟的地步,在大部分类型的应用中都已经能运行得非常好了。
新的虚拟内存管理器(VM)
Linux的虚拟内存管理器还尚未完善,通过对FreeBSD 4.1.和Linux 2.4.0的比较发现,尤其在内存不足的情况下,FreeBSD的性能要强得多。关于如何有效地管理虚拟内存,目前有好几种观点。一些人认为系统应该适应工作负载变化的要求。而另外一些人认为,系统管理员应该最清楚计算机需要做什么,他们应该在内存不足时提示内核如何运行。
对每个VM都会提出的一个问题是"当内存不足时,如何决定选择取消其所占内存的页?"目前Linux 2.4.3采取的方法是扫描进程页,然后决定删除哪个页。这种方法的问题在于,有时候扫描了许多进程表,而结果只释放了一个或很少的几个页。而且有时候被取消的页又马上需要再次启用。
Unix的一些版本中引入了工作页面组的概念,例如使进程有效工作所需要的最小内存。但这种解决方案只限于单进程页面,无需考虑文件系统缓冲等其他类型的页。在某些情况下,从这些页夺取内存甚至会事与愿违。在VM的理论中会发现,对某个问题有效的解决方案也许对其他问题就根本不适用,这也就是内核编制困难的原因。
Linux两大著名的VM内核黑客是Rik van Riel和Andrea Arcangeli。他们提出了"反向映射"的方案,在页和进程表之间进行反向的查找。改变了映射页的顺序后,VM可以很容易地扫描到可以释放内存的页。当然,这需要在适当的控制表中添加一些额外的域来实现反向映射。例如Rik采用的方案中需要8个字节的系统开销。
有人会说,现在Intel系统上的页面大小为4K已经是很小了,而这些页很多都是在几个G的计算机系统上,每页都必须在内核中占控制表的空间。事实上,在具有几个G内存的计算机上,表将占几十兆内存。
此外,对于新推出的1.x GHz 计算机,完成单一4KB页上所有指令的时间是很短的,这使在页面边界间跳跃引起的系统开销变得非常关键。Alpha 体系中已能实现对更大页面的操作,当前的Intel CPU只能对4-KB或4-MB页面,合起来可能太大一点。一般来说,这两者之间可能会比较好,但CPU的结构大概就需要改动改动了。
另一个可能被增加到内核的是页面表的共享,这对那些具有大量共享内存区的大型数据库系统是非常实用的。现在所有这些共享内存区都有两个页面表条目。节省这方面的开销就意味着整体效率的提高。读者可能会很快指出,共享页面表条目需要某种加锁机制。现在确实有一些关于如何更有效地执行数学上正确的加锁机制的讨论,但目前为止还没有找到合适的解决方案。
后来,Rik提出OOM killer补丁的建议,OOM即"out of memory",内存溢出。当内存工作缓慢,甚至释放某些页面都不能恢复,而内核又锁定的时候(这种情况在2.4.3中都有可能发生),这个补丁就开始删除所选定的进程。OOM补丁通过检查CPU时间和所执行的输入/输出,确定哪个进程已完成的工作最少。然后将这个进程删除以保证系统运行。如果你不想按reset键重启机器,这种方法就很合适。
发布人:crazy 来自:Chinabyte