[SIGCOMM'24] Understanding the Host Network¶
数据中心生产环境中,研究人员注意到节点内互联网络(CPU、内存、PCIe 设备等)的竞争导致应用的端到端性能下降。该篇研究分析节点内各组件的互联行为、产生该现象的原因,以启发设计面向未来的网络栈、操作系统和硬件。
该篇文章的关键思想是基于域划分的信用式流量控制。
引言¶
划分域和通信类型:
- P2M:网络、存储
- C2M:存内数据库、图分析
两种模式:
- 蓝色模式(新发现):P2M 会显著干扰 C2M 性能,自身却不受影响,即使内存带宽未饱和
- 红色模式:内存带宽饱和时,P2M 和 C2M 互相干扰
实验 1¶
实验预备:
- C2M:
- Redis:
- 每个核一个独立服务器,每个服务端对应一个客户端,UNIX Socket 通信
- 服务端:1M KV 对,其中 V 大小为 1KB,工作集远超 LLC,观察到 cache miss > 95%
- Redis:
- P2M:
- FIO:
- 8MB 顺序读
- DDIO 对该大小的请求无用
- 固定给 4 个核,打满 PCIe 带宽
- FIO:
这些内容主要是证明 C2M 和 P2M 设计为不受 Cache 的影响,测试的是真实的内存的带宽。还考虑了其他影响:
- Prefetch:开启/关闭影响 < 5%
实验 2¶
修改 Benchmark,更好地控制访存模式。
- C2M-Read:从 1GB Buffer 顺序读
- C2M-ReadWrite:向 1GB Buffer 顺序写
- CacheLine 需要先读入再写回,因此是一半读一半写
- P2M-Read:纯写入
- P2M-Write:纯读取
关闭 prefetch 和 DDIO
实验 3¶
用内核网络栈或硬件卸载 RDMA 网络栈产生 P2M 流量,效果相同。
分析¶
主机网络结构¶
- Core 和 L1/L2
- CHA
- LLC
- IIO
- MC
数据通路¶
C2M Read:Cache Miss 发生时
- L1 Miss,分配 LFB
- L2 MIss,发送到 CHA
- LLC Miss,发送到 MC,进入 RPQ 排队
- 读取数据,填充 Cache
C2M Write:Cache Eviction 发生时,数据通路类似。不同的是,写是异步的,请求交给 CHA 后 CPU 就无需等待了,CHA 将请求交给 WRQ 后也无需等待了。
P2M ReadWrite:
- 向 IIO 发起 DMA 请求,分配 IIO 缓存
- IIO 以 Cacheline 粒度向 CHA 请求
- CHA 请求 MC,进入 RQ 排队
- 完成数据读写,返回 IIO
流控¶
主机内互联采用 hop-by-hop 的流控,保证无损:
- PCIe 采用 credits 执行请求
- DRAM 采用时序控制
credit-based flow control:
- consume credit: send one request
- replenish credit: request acknowledged by receiver
本文提出的 domain-by-domain 流控泛化了 end-to-end 和 hop-by-hop 流控的概念
吞吐量上界:
- C:
- C2M:LFB
- P2M:IIO Buffer
解释¶
蓝色模式¶
C2M-Read + P2M-Write 时,为什么 C2M 性能受影响而 P2M 不受影响?
- CPU 以 3GHz 频率发送指令,令 LFB 满
- C2M-Read 延迟约 70ns,远高于 CPU 周期 0.3ns,因此 Domain 延迟的任何微小上升都会导致性能下降
- P2M-Write 时 MC 排队,导致 DRAM 部分延迟上升,即使内存带宽未饱和
- DRAM 未饱和排队原因:
- 行缓存 Miss
- Bank 负载不均衡