多处理器性能与Linux调试技巧
1. 多处理器相关知识
在如今的计算环境中,多核CPU几乎适用于各种架构。为了简化讨论,这里主要以AMD和英特尔基于英特尔架构的实现为例,不过相关问题适用于所有架构。
1.1 多核CPU概述
英特尔和AMD的第一代多核CPU是双核的。从功能上看,双核CPU相当于两个单核CPU(例如在多处理器主板上)。每个核心都有自己的寄存器、缓存、指令流水线、执行单元、MMU等。原则上,双核处理器的性能与具有两个相同时钟频率单核处理器的SMP系统相当。
未来的双核和四核CPU将在一定程度上共享片上缓存,这既有缺点也有优点。一方面,它限制了单个CPU在不与其他CPU竞争的情况下可访问的缓存量;另一方面,共享缓存减少了同步单独缓存所需的周期数。因此,一些应用程序会从多处理器共享缓存中受益,而另一些则会受到影响,很难简单地判断哪种方法更好。
1.2 SMP机器编程
大多数应用程序无需知道它们运行在多CPU机器上,硬件和操作系统会处理大部分细节。操作系统负责在CPU之间分配任务和平衡负载,但有些应用程序需要了解CPU的数量和类型,以充分利用硬件资源。
Linux调度器与SMP:Linux内核2.0版本引入了SMP。SMP调度器试图在CPU之间高效地分配任务和线程,充分利用硬件资源。其启发式算法基于所有CPU平等的假设,这也是对称多处理(SMP)中“对称”的含义。然而,SMT和多核处理器等创新正在挑战这一假设。在高级多处理器架构中,通常需要应用程序了解硬件特性并为调度器提供线索。
SMP调度器倾向于将进程保持在同一