📒 访存优化¶
基础知识:延迟和带宽¶
做 System 的同学需要对各类存储器的大小和访问时延有一定的敏感度。复习一下存储器山:
存储器 | 容量 | 时钟周期数 | 时延 | 备注 |
---|---|---|---|---|
寄存器 | 1KB | 1 | 0.3ns | |
L1 Cache | 32KB | 3 | 1ns | |
L2 Cache | 256KB | 14 | 4ns | |
L3 Cache | 96MB(AMD Zen6) | 40 | 12ns | 所有核心共享 |
DRAM | 100 | 30ns | ||
SSD | 1000 | 300ns |
几个要点:
- CPU 以 CacheLine 为单位进行数据传输。在 x86-64 架构下,CacheLine 大小为 64B。
测量 L1 ~ DRAM 的延迟,可以使用 Pointer Chasing 测试,分析见 Smarter CPU Testing – How to Benchmark Kaby Lake & Haswell Memory Latency | Nexthink。要点如下:
- 节点间添加 4KB padding,避免相邻节点命中同一个 CacheLine。
- 节点数为希望测试的块大小/CacheLine 大小。如果节点数比该值小,则该层次 Cache 能够存下所有节点,第一次循环遍历后均命中该层次 Cache。