计算机系统的内部设计、各类应用架构无不是受此影响。
图:《深入理解计算机系统》
时间和空间局部性原理 决定了上一层级做下一层级的缓存;
序号 | 存储英文名称 | 存储中文名称 | 容量 | 时间(纳秒) | 微秒 | 毫秒 | CPU 时钟周期数 |
---|---|---|---|---|---|---|---|
1 | CPU 寄存器 | 几十~几百 KB | 0.5 | 1 | |||
2 | L1 cache reference | 读取 CPU 一级缓存 | 几十~几百 KB | 0.5 | 1 | ||
3 | Branch mispredict | (转移、分支预测) 比如:if | 5 | 10 | |||
4 | L2 cache reference | 读取 CPU 的二级缓存 | 几百 KB~几 MB | 7 | 14 | ||
5 | Mutex lock/unlock | 互斥锁\解锁 | 25 | 50 | |||
6 | Main memory reference | 内存引用(找到内存地址) | 几百 MB~几 GB | 100 | 0.1 | 200 | |
7 | Compress 1K bytes with Zippy | 使用 Zippy 压缩 1K 字节数据 | 3000 | 3 | 6000 | ||
8 | Send 1K bytes over 1 Gbps network | 在 1Gbps 的网络上发送 1k 字节 | 10,000 | 10 | 0.01 | 40000 | |
9 | Read 4K randomly from SSD | SSD 磁盘随机读 4k | 150,000 | 150 | 0.15 | 300,000 | |
10 | Read 1 MB sequentially from memory | 从内存顺序读取 1MB | 250,000 | 250 | 0.25 | 500000 | |
11 | Round trip within same datacenter | 从一个数据中心往返一次,ping 一下 | 500,000 | 500 | 0.5 | 1000,000 | |
12 | Disk seek | 磁盘搜索 | 几百 GB~几 TB | 10,000,000 | 10,000 | 1 | 20,000,000 |
13 | Read 1 MB sequentially from network | 从网络上顺序读取 1 兆的数据 | 10,000,000 | 10,000 | 1 | 20,000,000 | |
14 | Read 1 MB sequentially from SSD | 从 SSD 磁盘顺序读出 1MB | 30,000,000 | 30,000 | 3 | 60,000,000 | |
15 | Send packet CA->Netherlands->CA | 一个包的一次远程访问 | 150,000,000 | 150,000 | 15 | 300,000,000 |
表引自(有修改):https://gist.github.com/jboner/2841832
寄存器速度等于 CPU 时钟周期,表假设 CPU 的 1 次晶振频率 0.5 纳秒,对应 CPU2.0GHz。
原表格:
Name | |||||||
---|---|---|---|---|---|---|---|
L1 cache reference | 0.5 | ns | |||||
Branch mispredict | 5 | ns | |||||
L2 cachereference | 7 | ns | 14x L1 cache | ||||
Mutex lock/unlock | 25 | ns | |||||
Main memory reference | 100 | ns | 20x L2 cache, 200x L1 cache | ||||
Compress 1K bytes with Zippy | 3,000 | ns | 3 | us | |||
Send 1K bytes over 1 Gb ps network | 10,000 | ns | 10 | us | |||
Read 4K randomly from SSD | 150,000 | ns | 150 | us | ~1GB/sec SSD | ||
Read 1 MB sequentially from memory | 250,000 | ns | 250 | us | |||
Round trip within same datacenter | 500,000 | ns | 500 | us | |||
Read 1 MB sequentially from SSD | 1,000,000 | ns | 1,000 | us | 1 | ms | ~1GB/sec SSD, 4X memory |
Disk seek | 10,000,000 | ns | 10,000 | us | 10 | ms | 20x datacenter roundtrip |
Read 1 MB sequentially | 20,000,000 | ns | 20,000 | us | 20 | ms | 80x memory, 20X SSD |
Send pack et CA->Netherlands->CA | 150,000,000 | ns | 150,000 | us | 150 | ms |
制造工艺和成本决定。CPU 内部的寄存器使用的 SRAM 工艺,是 6 个晶体管电路原件组成的,不需要刷电,频率等同 CPU 时钟。而 DRAM 内存就没那么复杂的晶体管了,造价合适,需要定期刷电(刷新)维持存储数据,这里就消耗了大量时间,是性价比的妥协。具体可见DRAM 和 SRAM 的区别