 |
处理器互连 另一种可选的互连(系统结构总线)是 AMD 的 HyperTransport。Intel® 也在规划称作 Common System Interface 的新互连,预计于 2008 年发布。 | | 图 4. 紧密耦合多处理架构
在 CMP 中,多个 CPU 通过共享总线连接到共享内存(2 级缓存)。每个处理器也拥有自身的快速内存(1 级缓存)。CMP 紧密耦合的本质使处理器与内存之间的物理距离很短,因此可提供最小的内存访问延迟和更高的性能。此类架构在多线程应用程序中运行良好,该类应用程序中线程可能被分配给多个处理器以实现并行操作。这种方法被称作线程级并行(TLP)。
由于这种多处理器架构的流行,很多供应商都生产了 CMP 设备。表 1 列出了一些 Linux 支持的流行变种。
表 1. CMP 设备样例
| 供应商 |
设备 |
说明 |
| IBM |
POWER4 |
SMP,双 CPU |
| IBM |
POWER5 |
SMP,双 CPU,四个并发线程 |
| AMD |
AMD X2 |
SMP,双 CPU |
| Intel® |
Xeon |
SMP,双 CPU 或四 CPU |
| Intel |
Core2 Duo |
SMP,双 CPU |
| ARM |
MPCore |
SMP,最多四 CPU |
| IBM |
Xenon |
SMP,三个 Power PC CPU |
| IBM |
Cell Processor |
不对称多处理(Asymmetric multiprocessing,ASMP),九 CPU |
内核配置
为了在支持 SMP 的硬件上通过 Linux 使用 SMP,必须适当地配置内核。内核配置期间必须启用 CONFIG_SMP 选项,以使内核感知 SMP。通过在多 CPU 主机上运行感知 SMP 的内核,可使用 proc 文件系统了解处理器的数目及类型。
首先,使用 grep 在 /proc 下的 cpuinfo 文件中检索处理器的数目。如清单 1 所示,使用计数选项(-c)来统计以单词 processor 开头的行。然后显示 cpuinfo 文件的内容。显示的示例来自一个二芯片的 Xeon 主板。
清单 1. 使用 proc 文件系统检索 CPU 信息
mtj@camus:~$ grep -c ^processor /proc/cpuinfo
8
mtj@camus:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 6
model name : Intel(R) Xeon(TM) CPU 3.73GHz
stepping : 4
cpu MHz : 3724.219
cache size : 2048 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 6
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
pbe nx lm pni monitor ds_cpl est cid xtpr
bogomips : 7389.18
...
processor : 7
vendor_id : GenuineIntel
cpu family : 15
model : 6
model name : Intel(R) Xeon(TM) CPU 3.73GHz
stepping : 4
cpu MHz : 3724.219
cache size : 2048 KB
physical id : 1
siblings : 4
core id : 3
cpu cores : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 6
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
pbe nx lm pni monitor ds_cpl est cid xtpr
bogomips : 7438.33
mtj@camus:~$
|
SMP 和 Linux 内核
在 Linux 2.0 的早期,SMP 支持由一个 “大锁” 组成,这个 “大锁” 对跨系统的访问进行串行化。对于 SMP 支持的改进缓慢地进行着,但是直到 2.6 内核才显示出 SMP 的威力。
2.6 内核引入了新的 O(1) 调度程序,它包含更好的 SMP 系统支持。关键在于能在可用 CPU 之间进行负载平衡,同时维持亲合性以提高缓存效率。回顾图 4,当任务与单个 CPU 相关联时,如果将其移到另一个 CPU,就需要为该任务清空缓存。这就增加了任务的内存访问延迟,这些时间用来将其数据移入新 CPU 的内存中。
|