Computer
系统性能
计算机系统性能指标与延迟数字,帮助程序员理解各层级操作的时间量级差异
程序员应该知道的延迟数字
理解计算机系统中各种操作的延迟数量级,是做出正确架构决策的基础。 Jeff Dean(Google 资深研究员)和 Peter Norvig 整理的这些数字展示了从 CPU 缓存到跨洋网络请求的惊人差异。
核心延迟参考(按数量级分层):
| 量级 | 操作 | 延迟 |
|---|---|---|
| 纳秒级 | L1 缓存引用 | ~1 ns |
| 分支预测失败 | ~3-10 ns | |
| L2 缓存引用 | ~4-13 ns | |
| 互斥锁 lock/unlock | ~25-50 ns | |
| 百纳秒级 | 主内存引用 | ~100 ns |
| Zippy 压缩 1KB | ~6,000 ns | |
| 十微秒级 | 网络传输 2KB | ~10,000 ns |
| SSD 随机读取 | ~16,000 ns | |
| 内存顺序读取 1MB | ~250,000 ns (0.25 ms) | |
| 同数据中心往返 | ~500,000 ns (0.5 ms) | |
| 毫秒级 | SSD 顺序读取 1MB | ~1,000,000 ns (1 ms) |
| 机械磁盘寻道 | ~10,000,000 ns (10 ms) | |
| 磁盘顺序读取 1MB | ~20,000,000 ns (20 ms) | |
| 加州↔荷兰网络往返 | ~150,000,000 ns (150 ms) |
关键洞见: 不同操作之间存在数个数量级的差异。 L1 缓存访问比主内存快约 100 倍,而内存又比磁盘随机访问快约 10 万倍。 这种数量级思维帮助工程师在存储介质选择、缓存策略、网络架构等方面做出合理权衡—— 精确数值会随硬件演进变化,但数量级关系保持相对稳定。
见:Numbers Every Programmer Should Know By Year
餐巾纸数学:数量级估算驱动架构决策
延迟数字的实战形态是 Jeff Dean 的「餐巾纸数学」(Napkin Math)——在脑海中用一个数量级估算, 发现被所有人忽视的巨大机会。两个经典案例:
- 2001 年搜索全量载入内存:当时 Google 搜索运行在硬盘上,Dean 与 Sanjay Ghemawat 估算发现整个搜索索引 恰好能装进所有服务器内存的总和,于是花几天重写系统让其在内存中运行——这是 Google 搜索质变加速的来源。
- 2013 年 TPU 立项:深度学习语音识别刚突破,他估算如果每个用户每天说 3 分钟语音,Google 需要把服务器 集群规模翻倍——太贵了,必须造专用芯片。第一代 TPU 比同期 CPU/GPU 节能 30-80 倍、延迟降低 20-30 倍。
TPU 的设计哲学体现了估算的边界意识:专用芯片跑不了 Chrome 或 Word,但如果目标就是低精度稠密线性代数 (几乎所有现代 ML 算法的核心),专用化就能换来数量级优势。因此 TPU 被做成通用线性代数系统, 而非某种算法的固化——不过度专用化,但足够专用化以吃掉性能收益。