首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

超线程加快了 Linux 的速度 单处理器上的多处理器性能-1

超线程加快了 Linux 的速度 单处理器上的多处理器性能-1

当前的 2.4 和 2.5 版本中的 Linux 对称多处理(SMP)内核都支持超线程,并且已经在多线程基准测试程序中观测到了性能的提高(请参阅本文后面的 以获取含有更多详细信息的文章)。      
本文提供了我们研究超线程(HT)对 Linux SMP 内核影响的结果。它比较了支持超线程的 Linux SMP 内核和不支持超线程的 Linux SMP 内核的性能。测试中的系统是支持多线程的、单 CPU Xeon。研究中所使用的基准测试程序涵盖了内核中受超线程影响的那些领域,比如调度程序、低级内核原语、文件服务器、网络和线程支持。
在 Linux 内核 2.4.19 上测试的结果说明了超线程技术可以使多线程应用程序的性能提高 30%。当前该技术使 Linux 内核 2.5.32 的性能提高幅度多达 51%。
简介Intel 的超线程技术通过复制、分区和共享 Intel NetBurst 微体系结构管道中的资源,使得一个物理处理器能包含两个逻辑处理器。
被复制的资源为两个线程创建了资源副本:
  • 每个 CPU 的所有体系结构状态
  • 指令指针,重命名逻辑
  • 一些较小的资源(例如返回堆栈预测器、ITLB 等)
已分区的资源划分执行线程之间的资源:
  • 几个缓冲区(Re-Order 缓冲区、Load/Store 缓冲区、队列等)
共享的资源按需在两个正在执行的线程之间使用资源:
  • 乱序执行引擎
  • 高速缓存
通常,每个物理处理器在一个处理器核心上都有一个体系结构状态,来为线程提供服务。使用了 HT,每个物理处理器在单个核心上就有两个体系结构状态,这使得物理处理器看起来象有两个逻辑处理器在为线程提供服务。系统 BIOS 列举出物理处理器中的每个体系结构状态。由于支持超线程的操作系统利用了逻辑处理器,因此这些操作系统就有两倍的资源可用于为线程提供服务。
Xeon 处理器中的超线程支持在通用处理器中 Xeon 处理器最先实现同步多线程(SMT)(请参阅 以获取有关 Xeon 处理器系列的更多信息)。为达到在单一物理处理器上执行两个线程的目标,该处理器同时维持多个线程的上下文,这允许调度程序并发分派两个可能无关的线程。      
操作系统(OS)将多个线程代码调度和分派给每个逻辑处理器,就如同在 SMP 系统中。没有分派线程时,相关的逻辑处理器保持空闲。
当将一个线程调度和分派给逻辑处理器 LP0 时,超线程技术利用必需的处理器资源来执行该线程。
当将第二个线程调度和分派给第二个逻辑处理器 LP1 时,就要按需为执行该线程而复制、划分或共享资源。每个处理器都在管道各点上进行选择,以控制和处理这些线程。当每个线程完成时,操作系统将未用的处理器置为空闲,释放资源让正在运行的处理器使用。
OS 将线程调度和分派给每个逻辑处理器,就好像是在双处理器或多处理器系统中进行的那样。当系统调度线程并将之引入到管道中时,按需利用资源以处理这两个线程。
Linux 内核 2.4 中的超线程支持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 的输出,显示超线程支持
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 是多线程基准测试程序,而其它的则是单线程基准测试程序。
返回列表