Go-高效编程-五-

124 阅读2分钟

Go 高效编程(五)

原文:zh.annas-archive.org/md5/55d311da1d04b7a03267ba5252fa91c8

译者:飞龙

协议:CC BY-NC-SA 4.0

附录 A. Napkin Math 计算的延迟

为了设计和评估不同层面的优化,了解我们与计算机交互中看到的基本操作的延迟数字是很有用的。

记住其中一些数字是很好的,但如果你不记得,我已经在表 A-1 中准备了一个简单的表格,显示了近似、四舍五入的平均延迟,这个表格深受Simon Eskildsen 的 napkin-math 代码库启发,做了一些修改。

该代码库创建于 2021 年。对于基于 CPU 的操作,这些数字基于来自至强家族的服务器 x86 CPU。请注意,尽管每年都在改善,但由于“硬件变得更快更便宜”中解释的限制,大部分数字自 2005 年以来保持稳定。CPU 相关的延迟也可能因不同的 CPU 架构(如 ARM)而有所不同。

表 A-1. CPU 相关的延迟

操作延迟吞吐量
3 GHz CPU 时钟周期0.3 nsN/A
CPU 寄存器访问0.3 ns(1 个周期)N/A
CPU L1 缓存访问0.9 ns(3 个周期)N/A
CPU L2 缓存访问3 nsN/A
顺序内存读写(64 字节)5 ns10 GBps
CPU L3 缓存访问20 nsN/A
哈希运算,不是加密安全(64 字节)25 ns2 GBps
随机内存读写(64 字节)50 ns1 GBps
互斥锁的加锁/解锁17 nsN/A
系统调用500 nsN/A
哈希运算,加密安全(64 字节)500 ns200 MBps
顺序 SSD 读取(8 KB)1 μs4 GBps
上下文切换10 μsN/A
顺序 SSD 写入,-fsync(8KB)10 μs1 GBps
TCP 回显服务器(32 KiB)10 μs4 GBps
顺序 SSD 写入,+fsync(8KB)1 ms10 MBps
排序(64 位整数)N/A200 MBps
随机 SSD 寻址(8 KiB)100 μs70 MBps
压缩N/A100 MBps
解压缩N/A200 MBps
代理:Envoy/ProxySQL/NGINX/HAProxy50 μs?
同一区域内的网络250 μs100 MBps
MySQL,memcached,Redis 查询500 μs?
随机 HDD 寻址(8 KB)10 ms0.7 MBps
美国东部↔西部的网络60 ms25 MBps
欧洲西部↔美国东部的网络80 ms25 MBps
美国西部↔新加坡的网络180 ms25 MBps
欧洲西部↔新加坡的网络160 ms25 MBps