2.6的改进
时间:2007-04-13 来源:Elite
巨页
2.6 版本的内核支持两种虚拟页的大小:传统的 4KB 页和 16MB 页。巨页的使用主要是为了改进那些对内存访问敏感的程序的性能。使用巨页支持之后,应用程序就可以将自己的文本段和数据段放在一个巨页(16MB)中运行 了,而不用修改任何代码。性能的改进是由于降低了 TLB(translation lookaside buffer)的缺页率。这是因为 TLB 可以映射一个更大的虚拟内存范围了。巨页还可以改进内存预取的效率:它不用根据 4KB 的边界来反复执行预取操作了。
PCI 热插拔
这种功能允许您在保证操作系统持续运行时将 PCI 热插拔适配器插入一个可用的 PCI 插槽中。这个适配器可以与目前安装的适配器类型相同,也可以是不同类型的 PCI 适配器。不必重新启动系统,操作系统和应用程序就可以直接使用这些新资源。也无需关闭系统,就可以使用一块相同类型的适配器来替换一块有问题的 PCI 热插拔适配器。当您更换适配器时,现有的设备驱动程序可以支持新的适配器,因为它们的类型相同。设备配置和有关适配器底层的设备配置信息在替换设备时都可 以保留下来。
虚存(VM)
2.6 版本的内核为虚存到物理页面的映射提供了一种有效的算法,称为反向映射(reverse mapping)。它可以对内存交换进行更智能的判断。在特殊的负载情况下,这可以极大地改进 VM 操作的性能。
调度程序
2.4 版本的内核中的调度程序在 SMP 系统中当进程完成自己的时间片并等待重新分配时会导致大部分 CPU 都处于空闲状态。另外,当空闲的 CPU 开始执行处于等待状态的进程时,有时会导致将某些进程在多个处理器之间产生乒乓效应。而 2.6 版本的内核解决了这个问题。新的调度程序还可以提高负载均衡能力和交互式应用程序的性能。
内核抢占
在 2.4 版本的内核中,不可能抢占正在内核态下执行的任务,包括使用系统调用进入内核态的用户任务,除非该任务自动放弃 CPU。在 2.6 版本的内核中,内核任务是可以被抢占的。这不但可以提高用户的交互式应用程序的性能,而且可以用于嵌入式设备和实时系统。
线程模型
在 2.6 版本的内核中采用了改进的线程模型 NPTL(Native POSIX Thread Library),其中内核线程与用户线程的相关度为 1:1。NPTL 的性能可以显著地超过 Linux Threads(在 2.4 版本的内核中实现的线程模型)。NPTL 对于多线程的企业级应用程序非常有价值,尤其是 Web 服务器和基于 Java 的应用程序。而且, 2.6 版本的内核还可以处理 10 亿个进程 id (PID),在 2.4 版本的内核中,这个限制是 32,000。
块 I/O 操作
块 I/O 操作在 2.6 版本的内核中进行了重写,这可以提高性能和错误处理能力。新的块 I/O 操作缓冲区可以让每个 I/O 请求的大小大于 PAGE_SIZE。同时对于 SCSI 的支持也有很大的提升。
异步 I/O(AIO)
尽管在用户级的线程基础上已经可以支持异步 I/O 操作,但是直到 2.6 版本的内核开始,这种功能的实现才使用了内核的支持。AIO 操作是在后台运行的,它不会阻塞用户的应用程序,从而可以提高性能,这是因为 I/O 操作可以与用户的应用程序同时运行了。很多应用程序,例如 Web 服务器、数据库和文件服务器,都可以利用这种功能进行重叠的处理和 I/O 操作。
其他改进
2.6 版本的内核中的其他改进包括:
- 所支持的用户和组数目已经从 65,000 增加到了 40 亿。
- PID 的数目已经从 32,000 增加到了 10 亿。
- 最大可以支持 16 TB 的文件系统。
- 打开文件个数的限制不再需要提前设置。