2. CPU 架构基础:多核拓扑、缓存一致性与中断控制器
在分析 CPU 绑定场景下的中断处理与调度延迟之前,必须深入理解现代多核 CPU 的物理架构。CPU 的拓扑结构决定了核间通信的代价,缓存层级与一致性协议决定了数据同步的延迟,而中断控制器则决定了硬件事件如何分发到具体的 CPU 核心。这三者共同构成了中断响应与任务调度的底层硬件约束。
2.1 多核 CPU 拓扑结构:UMA 与 NUMA
根据内存访问模型的不同,多核 CPU 主要分为 UMA(Uniform Memory Access,统一内存访问) 和 NUMA(Non-Uniform Memory Access,非统一内存访问) 两种架构。
2.1.1 UMA 架构(对称多处理 SMP)
UMA 是早期多核处理器的典型架构。所有核心通过共享总线(如 FSB)连接到统一的内存控制器,所有内存访问延迟一致。其优点是编程模型简单,缺点是总线带宽成为瓶颈,核心数量扩展受限。
2.1.2 NUMA 架构
NUMA 是现代大型服务器的主流架构。每个 CPU 插槽(Node)拥有独立的内存控制器和本地内存,节点之间通过高速互联链路(如 Intel QPI / AMD Infinity Fabric)通信。操作系统和应用程序必须感知 NUMA 拓扑,才能优化内存访问局部性。
UMA 与 NUMA 架构对比:
| 特性 | UMA(SMP) | NUMA |
|---|---|---|
| 内存访问延迟 | 统一、低延迟 | 非统一,本地快、远端慢 |
| 扩展性 | 差(总线瓶颈) | 好(可扩展至数百核心) |
| 编程模型 | 简单,无需感知拓扑 | 复杂,需考虑亲和性 |
| 典型应用 | 桌面 CPU、低端服务器 | 高端服务器、数据中心 |
| 中断分发策略 | 任意核心处理 | 优先本地核心处理 |
NUMA 架构拓扑示意图:
2.2 Cache 层级与一致性协议(MESI)
CPU 缓存(Cache)是解决内存访问速度与 CPU 计算速度不匹配的关键硬件。现代 CPU 通常采用三级缓存架构(L1/L2/L3),其中 L1 和 L2 为每个核心私有,L3 为同一插槽内的所有核心共享。
2.2.1 缓存层级结构
- L1 Cache(一级缓存): 分为指令缓存(L1i)和数据缓存(L1d),容量通常为 32KB-64KB,延迟约 1ns(4-5 个 CPU 周期)。
- L2 Cache(二级缓存): 每个核心私有,容量通常为 256KB-1MB,延迟约 3-5ns。
- L3 Cache(三级缓存): 同一 NUMA 节点内所有核心共享,容量通常为 8MB-32MB,延迟约 10-20ns。
2.2.2 MESI 缓存一致性协议
MESI 协议是保证多核 CPU 缓存一致性的经典协议,定义了缓存行的四种状态:
| 状态 | 全称 | 描述 | 本地核心是否可写 | 其他核心是否持有副本 |
|---|---|---|---|---|
| M | Modified(已修改) | 缓存行已被修改,与主存不一致,且独占 | 是 | 否 |
| E | Exclusive(独占) | 缓存行与主存一致,且仅本核心持有 | 是(无需通知总线) | 否 |
| S | Shared(共享) | 缓存行与主存一致,且其他核心也可能持有 | 否(需先转为 E 或 M) | 是 |
| I | Invalid(无效) | 缓存行无效,需要从主存或其他核心获取 | 否 | 可能 |
MESI 协议状态转换流程:
2.3 硬件中断控制器:APIC / x2APIC
中断控制器是 CPU 接收外部硬件设备(如网卡、磁盘控制器)中断请求的门户。现代 x86 架构使用 APIC(Advanced Programmable Interrupt Controller,高级可编程中断控制器) 及其扩展版本 x2APIC 来管理中断分发。
2.3.1 APIC 架构组成
- LAPIC(Local APIC,本地 APIC): 每个 CPU 核心内置一个,负责接收来自 I/O APIC 的中断消息,以及处理核间中断(IPI)。
- I/O APIC(I/O 中断控制器): 通常位于芯片组(PCH)中,负责收集外部设备的中断请求,并将其以消息形式发送给指定的 LAPIC。
2.3.2 中断分发模式
| 模式 | 描述 | 适用场景 |
|---|---|---|
| Fixed(固定) | 中断直接发送到指定的 LAPIC ID | CPU 绑定场景,精确控制中断目标 |
| Lowest Priority(最低优先级) | 中断发送到当前优先级最低的核心 | 负载均衡,但可能导致中断漂移 |
| Round Robin(轮询) | 中断在核心间轮流分发 | 简单负载均衡,无亲和性要求 |
| Directed(定向) | 软件显式指定目标核心集合 | 高级中断亲和性控制 |
2.3.3 x2APIC 扩展
x2APIC 是 APIC 架构的 64 位扩展,主要改进包括:
- 更大的地址空间: LAPIC ID 从 8 位扩展到 32 位,支持超过 256 个核心的大型系统。
- 寄存器访问优化: 使用 MSR(Model Specific Register)代替 MMIO 访问,减少访问延迟。
- 中断格式扩展: 支持 32 位中断目标字段,便于在 NUMA 系统中精确路由中断。
# 查看当前中断亲和性
cat /proc/irq/44/smp_affinity
# 将中断绑定到 CPU 2(位掩码 0x04)
echo "04" > /proc/irq/44/smp_affinity
# 使用 irqbalance 服务时需注意,该服务可能覆盖手动设置
systemctl stop irqbalance
APIC 中断分发流程示意图:
2.4 本章小结
- NUMA 架构 是现代多核 CPU 的主流拓扑,理解其内存访问非一致性是优化中断亲和性的前提。
- MESI 协议 保证了多核缓存的一致性,但错误的共享数据布局会导致严重的性能抖动。
- APIC/x2APIC 提供了灵活的中断分发机制,通过配置
smp_affinity可以实现精确的 CPU 绑定,从而控制中断处理延迟。