Linux内核的功能,尤其是那些与性能相关的,包含如下。多数功能还标记了第一次引入Linux时的内核版本。
- CPU调度级别:各种先进的CPU调度算法都有开发,包括调度域(2.6.7),对于非
致存储访问架构(NUMA)能做出更好的决策。
- I/O 调度级别:开发了不同的块IO调度算法,包括 deadline(2.5.39)、 anticipatory(2.5.75
和完全公平队列(CFQ)(2.6.6)。
-
TCP拥塞: Linux内核支持更新的TCP拥塞算法,允按需选择。此外,还有许多对TCP的增强。
-
Overcommit:out-of-memory(OOM)killer,该略用较少内存做更多的事情。
-
Futex(2.5.7): fast user-space- mutex的缩写,用于提供高性能的用户级别的同步原语。
-
巨型页(2.5.36):由内核和内存管理单元(MMU)支持大型内存的预分配。
-
Oprofile(2.5.43):研究CPU使用和其他活动的系统剖析工具,内核和应用程序都
适用。
- RCU(2.5.43):内核所提供的只读更新同步机制,支持伴随更新的多个读取的并发,
提升了读取频繁的数据的性能和扩展性。
- epoll(2.5.46):可以高效地对多个打开的文件描述符做IO等待的系统调用,提升了
服务器应用的性能。
-
模块IO调度(2.6.10): Linux对调度块设备O提供可插拔的调度算法,参见第9章。 DebugFS(2.6.11):一个简单的非结构化接口,用该接口内核可以将数据暴露到用户级别,通常为某些性能工具所用。
-
Cpusets(2.6.12):进程独占的CPU分组。
-
自愿内核抢占(2.6.13):这个抢占过程,提供了低延时的调度,并且避免了完全抢占
的复杂性。
-
inotify(2.6.13):文件系统事件的监控框架。
-
blktrace(2.6.17):跟踪块IO事件的框架和工具(后来迁移到了 tracepoints中)。
-
splice(2.6.17):一个系统调用,将数据在文件描述符和管道之间快速移动,而不用经
过用户空间。
-
延时审计(2.6.18):跟踪每个任务的延时状态,参见第4章。IO审计(2.6.20):测量每个进程的各种存储IO统计。
-
DynTicks(2.6.21):动态的tick,当不需要时( tickless),内核定时中断不会触发,这样可以节省CPU的资源和电力;
-
SLUB(2.6.22):新的slab内存分配器的简化版本10·CFS(2.6.23):完全公平调度算法;
-
cgroups(2.6.24):控制组可以测量并限制进程组的资源使用。latencytop(2.6.25):观察操作系统的延时来源的仪器和工具。
-
Tracepoints(2.6.28):静态内核跟踪点(也称静态探针)可以组织内核里的逻辑执行点,用于跟踪工具(之前是内核标记)。
-
perf(2.6.31):perf是一套性能观测工具,包括CPU性能计数器剖析、静态和动态跟踪。关于该内容的介绍;
-
透明巨型页(2.6.38):这是一个简化巨型(大型内存页面使用的框架);
-
Uprobes(3.5):用户级别软件动态跟踪的基础设施,为其他软件所用(perf、 SystemTap,
等等)。
- KVM:基于内核的虚拟机(Kernel-based- Virtual Machine,vm)技术是 Qumranet公 司为 Limux开发的,该公司在2008年被 Red Hat公司收购。KVM使得可以创建虚拟的操作系统实例,并运行虚拟机自己的内核;