2.1 了解各类延迟指标
既然目标是“足够快”,首先需要对计算机中“快”的概念有一个基本的认识。
伯克利大学有个动态网页[1],里面汇总了历年计算机中各类操作延迟((也称时延)的变化。笔者整理了 2020 年的数据供读者参考,如表 2-1 所示。这些延迟数据与软件设计和性能调优息息相关。例如,由于物理距离的限制,无论如何优化,也无法将从上海到美国的 HTTPS 请求延迟降到 750ms 以下。
表 2-1 计算机中各类延迟数据参考
操作 | 延迟 |
---|---|
CPU 从一级缓存中读取数据 | 1 ns |
CPU 分支预测错误(Branch mispredict) | 3 ns |
CPU 从二级缓存中读取数据 | 4 ns |
线性间互斥锁/解锁 | 17 ns |
在 1Gbps 的网络上发送 2KB 数据 | 44 ns |
访问一次主存 | 100 ns |
使用 Zippy 压缩 1KB 数据 | 2,000 ns ≈ 2 μs |
从内存顺序读取 1 MB 数据 | 3,000 ns ≈ 3 μs |
一次 SSD 随机读 | 16,000 ns ≈ 16 μs |
从 SSD 顺序读取 1 MB 数据 | 49,000 ns ≈ 49 μs |
一个数据包在同一个数据中心往返 | 500,000 ns ≈ 0.5 ms |
从磁盘顺序读取 1 MB 数据 | 825,000 ns ≈ 0.8 ms |
一次磁盘寻址 | 2,000,000 ns ≈ 2 ms |
一次 DNS 解析查询 | 50,000,000 ns ≈ 50 ms |
把一个数据包从美国发送到欧洲 | 150,000,000 ns ≈ 150 ms |
在宿主机中冷启动一个常规容器 | 5,000 ms ≈ 5 s |
秒(s)、毫秒(ms)、微秒 (μs)、纳秒 (ns)之间关系:1s = 103ms=106μs=109ns
参见 https://colin-scott.github.io/personal_website/research/interactive_latency.html ↩︎
总字数:434字