Linux 内核将带有两个虚拟处理器的超线程处理器看成是一对真正的物理处理器。其结果是,处理 SMP 的调度程序也应该能处理超线程。Linux 内核 2.4.x 中的超线程支持始于 2.4.17,它包括了以下增强技术:

128 字节锁对齐

螺旋等待循环优化

基于非执行的延迟循环

检测支持超线程的处理器,并启动逻辑处理器,如同该机器是 SMP

MTRR 和微码更新(Microcode Update)驱动程序中的串行化,因为它们影响共享状态

在逻辑处理器上的调度发生之前,当系统空闲时对物理处理器上的调度进行优先级排序时,对调度程序进行优化

偏移用户堆栈以避免 64K 混叠

内核性能测量

为评定超线程对 Linux 内核性能的影响,我们在包括 Intel Xeon 处理器(具有 HT 功能)的系统上测量了内核基准测试程序的性能。硬件是:支持 SMT 的单 CPU、1.6 GHz Xeon MP 处理器、2.5 GB RAM 和两个 9.2 GB SCSI 硬盘驱动器。测量的内核是配置和构建了支持 SMP 的现有内核 V2.4.19。内核超线程支持通过引导选项 acpismp=force 来指定使用超线程,并通过引导选项 noht 来指定不使用超线程。查看是否支持超线程可以通过使用命令 cat /proc/cpuinfo,来显示处理器 0 和处理器 1 这两个处理器是否存在。请注意清单 1 中用于 CPU 0 和 1 的 ht 标志。在不支持超线程的情况下,将只显示处理器 0 的数据。

清单 1. cat /proc/cpuinfo 的输出,显示超线程支持  processor  : 0引用:
vendor_id  : GenuineIntel
cpu family  : 15
model  : 1
model name  : Intel(R) Genuine CPU 1.60GHz
stepping   : 1
cpu MHz : 1600.382
cache size  : 256 KB
. . .
fpu     : yes
fpu_exception: yes
cpuid level : 2
wp      : yes
flags    : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr
pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht
tm
bogomips   : 3191.60
processor  : 1
vendor_id  : GenuineIntel
cpu family  : 15
model    : 1
model name  : Intel(R) Genuine CPU 1.60GHz
stepping   : 1
cpu MHz   : 1600.382
cache size  : 256 KB
. . .
fpu     : yes
fpu_exception: yes
cpuid level : 2
wp      : yes
flags    : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr
pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht
tm
bogomips   : 3198.15

Linux 内核基准测试程序

为测量 Linux 内核性能,使用了 5 个基准测试程序:LMbench、AIM Benchmark Suite IX(AIM9)、chat、dbench 和 tbench。LMbench 基准测试程序对各种 Linux 应用程序编程接口(API)(例如,基本系统调用、上下文切换延迟和内存带宽)进行计时。AIM9 基准测试程序提供对用户应用程序工作负载的测量。chat 基准测试程序是模仿聊天室的客户机/服务器工作负载。dbench 基准测试程序是文件服务器工作负载,tbench 是 TCP 工作负载。chat、dbench 和 tbench 是多线程基准测试程序,而其它的则是单线程基准测试程序。