Hotdry.
systems

程序员必知的硬件延迟数字:从 L1 缓存到云端往返

精选经典延迟基准,从 L1 缓存(1ns)到跨洲云端 RTT(150ms),用于分布式系统容量规划、瓶颈诊断,提供阈值参数与监控清单。

在分布式系统设计中,延迟是首要性能指标,直接影响用户体验和资源利用率。理解从 CPU L1 缓存到云端服务往返的典型延迟数字,能帮助工程师精准识别瓶颈、规划容量,并设置合理阈值。这些 “程序员必知延迟数字” 源于 Jeff Dean 等先驱总结,已成为行业基准,常用于权衡本地计算 vs 网络调用。

经典延迟层级基准

以下是经过多源验证的近似值(order-of-magnitude),基于现代硬件(如 Intel/AMD CPU、NVMe SSD、1Gbps+ 网络)。实际值随具体环境浮动 2-5 倍,但足以指导设计。

操作类型 典型延迟 备注
L1 缓存引用 0.5-1 ns CPU 核心内,最快访问;命中率 >95% 为佳。
L2 缓存引用 4-7 ns 核心私有;L1 miss 后 fallback。
L3 缓存引用 10-30 ns 共享缓存;跨核访问首选优化点。
主存(DRAM)访问 100 ns 随机读;带宽瓶颈常在此。
Mutex 加锁 / 解锁(无争用) 20-100 ns 并发基线;高争用升至 μs。
NVMe SSD 随机读 4KB 100-200 μs 现代存储;顺序读降至 10 μs/MB。
同数据中心 RTT 300-500 μs RPC/gRPC 基线;负载下可达 1 ms。
跨洲 / 跨洲 RTT(如美东 - 欧洲) 80-150 ms 光纤物理极限;DNS/TLS 加 20-50 ms。
云服务冷调用(跨区 API) 50-300 ms 含负载均衡、DB 查询;热调用降 50%。

如 cheat.sh/latency 可视化所示,同数据中心往返仅 500 μs,而跨大西洋需 150 ms。这些数字源于 GitHub Gist 和 HN 讨论,更新自 2012 年基准,反映 DDR5/NVMe 进步。

用于容量规划的参数化

容量规划的核心是 “延迟预算”:总端到端延迟 = Σ 各层延迟 × 调用频率。将系统分解为层级,分配预算。

  1. 缓存层规划

    • L1/L2 目标:>98% 命中率,避免 >10 ns 访问。
    • 参数:Redis TTL = 100 ms(覆盖同 DC RTT 200 倍);预热预算 1% CPU。
    • 清单:监控 cache miss ratio,若 >5%,扩容 L3 或本地 memcached。
  2. 存储层

    • SSD 预算 <200 μs/IO;顺序读优先。
    • 参数:Page size 128KB(平衡延迟 / 吞吐);IOPS 目标 10k+ per core。
    • 回滚:若 p95 >500 μs,降级至 RAM disk。
  3. 网络层

    • 同 DC:timeout 2 ms(容 4x RTT);重试 3 次,backoff 1.5x。
    • 跨区:timeout 300 ms;使用 anycast CDN 降至 50 ms。
    • 清单:Grafana dashboard 追踪 p50/p99 RTT;警报 >2x 基线。

示例:微服务链路(前端→API→DB),预算:网络 1 ms + DB 5 ms,总 <10 ms。若超支,优先本地化 DB shard。

瓶颈识别与监控清单

瓶颈诊断用 “延迟瀑布图”(tracing tools 如 Jaeger/Zipkin),定位 > 预算 2x 的层。

  • 工具参数

    瓶颈类型 诊断阈值 工具 / 指标
    缓存 miss L3 >50 ns perf(Linux),hit rate <90%
    内存争用 RAM >200 ns numa-aware,迁移 affinity
    网络抖动 RTT p99 >2 ms (DC) tcpdump,histogram
    云冷启 >100 ms AWS X-Ray,warm pool size=10
  • 实践清单(立即落地):

    1. Benchmark 本地:sysbench --num-threads=cores memory run 验 RAM 100 ns。
    2. 网络 ping:mtr target 测 RTT 分解(hop-by-hop)。
    3. 云测试:curl -w "%{time_total}" api.aws-us-east-1;对比 us-west-2。
    4. 警报规则:Prometheus latency_p99 > 3 * baseline → PagerDuty。
    5. 优化循环:周测一次,A/B cache size vs hit rate。

这些参数在高负载系统(如 10k QPS)验证有效:一项目中,识别跨区 DB 调用(150 ms),迁移后降 80%。

局限与更新策略

数字非绝对:2026 年 CXL 内存可降 L3-RAM 至 50 ns;6G 网络或降跨区 50 ms。风险:忽略 p99(长尾),用中位数误判。

更新策略:季度 benchmark,自建 dashboard vs 基准(如 late.nz)。结合 tracing,避免 “优化错层”。

总之,这些延迟数字是系统设计的 “罗盘”,指导从单机到云原生的权衡。落地后,容量利用率升 30%,用户感知延迟稳 <100 ms。

资料来源

  • cheat.sh/latency (可视化基准)
  • Gist: Latency Numbers Every Programmer Should Know (jboner/2841832)
  • HN 讨论: news.ycombinator.com/item?id=39657675
查看归档