2. Intel Xeon平台架构速览

在讨论网络与存储协同优化之前,必须先看清 Intel Xeon 平台把“算力、互联、I/O、内存”这四类资源放在什么位置。因为网络收包、存储落盘、数据搬运并不是孤立事件,它们共享同一套片上与片间通路。若不了解这些通路的带宽、延迟与拓扑约束,调优往往只能停留在“换网卡、加 SSD”的层面,无法解释为什么某些场景下 CPU 利用率不高、吞吐却上不去。

一、从“核心—UPI—PCIe—内存”四条主线理解平台

现代双路 Intel Xeon 可扩展处理器平台可以抽象为四条主线:

  • CPU 核心与 LLC:每个核心拥有私有 L1/L2,多个核心共享末级缓存(LLC)。网络中断处理、协议栈、存储 I/O 提交都消耗核心与 LLC 资源。
  • UPI(Ultra Path Interconnect):连接两颗 CPU 的片间高速链路,通常为 2~3 条 UPI,每条每方向约 10.4~16 GT/s。跨路访问内存或跨路 PCIe 设备必须经过 UPI。
  • PCIe 通道:由 CPU 的 IIO 提供,常见 PCIe 4.0/5.0,每路 64~128 lane。网卡、NVMe SSD、RAID 卡都挂在这里,是网络与存储真正的“出入口”。
  • 内存子系统:每路 6~8 通道 DDR4/DDR5,本地内存访问延迟约 80~100 ns,跨路访问会显著升高。

这四条主线共同决定了:数据从网卡进入内存、被 CPU 处理、再写入 NVMe,整条路径上任何一段拥塞或跨路,都会放大延迟、压低有效带宽。

CPU 0(Socket 0) Core Core Core … LLC(共享末级缓存) IIO / PCIe Root iMC 内存控制器 CPU 1(Socket 1) Core Core Core … LLC(共享末级缓存) IIO / PCIe Root iMC 内存控制器 UPI ×2~3 跨路访问必经 本地内存(DDR4/DDR5) 6~8 通道 · 延迟约 80~100 ns 本地访问:低延迟、高带宽 本地内存(DDR4/DDR5) 6~8 通道 · 延迟约 80~100 ns 跨路访问:延迟明显升高 网卡 NIC PCIe 4.0/5.0 x16 挂 CPU0 IIO NVMe SSD PCIe 4.0 x4/x8 挂 CPU0 IIO NVMe SSD PCIe 4.0 x4/x8 挂 CPU1 IIO RAID 卡 PCIe x8 挂 CPU1 跨路 I/O 路径 经 UPI,延迟与带宽受限

二、UPI 与 NUMA:跨路访问的代价

双路平台本质上是 NUMA 架构。CPU0 直连的内存和 PCIe 设备属于 Node 0,CPU1 直连的属于 Node 1。当 CPU0 上的进程访问 Node 1 的内存,或访问挂在 CPU1 下的 NVMe,数据必须穿过 UPI。这会带来两个后果:一是延迟增加,二是 UPI 带宽成为共享瓶颈。

以典型双路平台为例,假设每条 UPI 每方向有效带宽约 10~12 GB/s,两条 UPI 合计约 20~24 GB/s。如果网络流量全部由 CPU0 的网卡接收,而存储写入落在 CPU1 的 NVMe 上,那么“收包—落盘”路径会持续占用 UPI。此时即使网卡和 SSD 各自都有余量,端到端吞吐仍可能被 UPI 卡住。

判断是否跨路,最直接的方法是查看设备与进程的 NUMA 归属:lspci -vv 可看设备所在 NUMA 节点,numactl --hardware 可看内存节点分布,cat /sys/class/net/eth0/device/numa_node 可直接读取网卡 NUMA 节点。

三、PCIe 通道分配:网络与存储的“出入口”

PCIe 通道由 CPU 的 IIO 提供,常见配置为每路 64 或 128 lane。这些 lane 要在网卡、NVMe、RAID 卡、GPU 之间分配。关键点在于:

  • PCIe 4.0 x16 单向理论带宽约 32 GB/s,PCIe 5.0 x16 约 64 GB/s;
  • 一块 25 GbE 网卡实际只需约 3.1 GB/s,100 GbE 约 12.5 GB/s;
  • 一块 PCIe 4.0 NVMe SSD 顺序读可达 6~7 GB/s,多块并发时容易吃满 x16 上行。

因此,若把高带宽网卡和多块 NVMe 全部挂在同一颗 CPU 的同一组 PCIe 通道下,即使 NUMA 本地,也可能在 IIO 上行处出现拥塞。合理的做法是:把网络与存储按 NUMA 节点成对部署,让“收包”和“落盘”尽量在同一路内完成,减少 UPI 穿越。

四、内存子系统:带宽与延迟的双重约束

内存子系统对网络与存储协同的影响常被低估。网络收包需要 DMA 写入内存,协议栈需要读取包头和 payload,存储写入需要从内存取数据再 DMA 到 NVMe。每一步都消耗内存带宽。

以双路 8 通道 DDR4-3200 为例,单路理论带宽约 204.8 GB/s,双路合计约 409.6 GB/s。看似充裕,但实际有效带宽通常只有理论值的 60%~75%。当网络吞吐达到 100 GbE(约 12.5 GB/s)且存储写入达到多块 NVMe 并发(约 20~30 GB/s)时,内存带宽占用会明显上升,若再叠加跨路访问,延迟抖动会放大。

不要只看“内存容量够不够”,更要看“内存带宽和 NUMA 分布是否匹配业务路径”。容量充足但跨路访问频繁,同样会导致网络与存储协同效率下降。

五、把平台约束落到协同优化上

综合以上四条主线,可以形成几条可操作的判断原则:

  1. 先看 NUMA 归属:网卡、NVMe、业务进程尽量在同一 NUMA 节点,减少 UPI 穿越。
  2. 再看 PCIe 上行:同一路下高带宽设备不要过度集中,必要时把部分 NVMe 移到另一路,让两路 IIO 分担。
  3. 然后看内存带宽:用 pcm-memory 或 perf stat 观察内存带宽利用率,避免网络与存储同时抢内存。
  4. 最后看 UPI 流量:若跨路流量持续偏高,优先调整设备与进程的亲和性,而不是盲目增加网卡或 SSD。

例如,一台双路服务器上,若 100 GbE 网卡挂在 CPU0,而业务进程和 NVMe 都在 CPU1,则每个数据包都要经历“CPU0 收包 → UPI → CPU1 处理 → CPU1 落盘”。此时把网卡移到 CPU1,或把业务进程绑定到 CPU0 并让 NVMe 也走 CPU0,往往比升级硬件更有效。判断依据可以看 numastat 中的 numa_foreign 和 numa_hit 比例,以及 perf 中跨路访问的计数变化。

理解这四条主线之后,后续讨论 RSS、多队列、NVMe 轮询、SPDK、DPDK 等具体优化手段时,就能清楚每一项到底在缓解哪一段瓶颈,而不是盲目堆叠参数。