因此,我试图学习计算机各种组件的性能指标,例如L1缓存,L2缓存,主内存,以太网,磁盘等,如下所示:
Latency Comparison Numbers
--------------------------
L1 cache **reference** 0.5 ns
Branch mispredict 5 ns
L2 cache **reference** 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 10,000 ns 10 us
Send 1 KB bytes over 1 Gbps network 10,000 ns 10 us
Read 4 KB 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 from 1 Gbps 10,000,000 ns 10,000 us 10 ms 40x memory, 10X SSD
Read 1 MB sequentially from disk 30,000,000 ns 30,000 us 30 ms 120x memory, 30X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms
我不认为上面提到的参考是关于读取多少数据的位或字节。但是实际上是关于访问缓存或内存中的一个地址。有人可以更好地解释一下此参考在0.5 n / s中发生了什么吗?
该表列出了某些代表性系统的典型数字,因为实际示例系统的实际值很难达到“平滑的数字”,而是在CPU和/或总线时钟周期的某些非偶数倍上进行复杂的求和。我们可以在教科书中找到用于教育用途的表格。显然,这是对系统设计进行一般介绍的方法[1]。从一些会议演讲中,Google AI的负责人,Jeff Dean在2009年举行的3,4。
3,4
reference
上层源(RAM,磁盘)只是一个粗略的草图,因为在这里您会发现很多子层和变体(大容量设备的类型,磁盘芯片组上的内部缓存,总线/桥等)。等)。目前的数字似乎是Google数据中心经验的总结。因此,假设它们基于2009年(或更早)推出的一些高性能类硬件。在今天(2020年),这些数字不应该从字面上理解,而应在其他级别的数据传输的相应值的背景下证明数量级。
1
["Latency numbers every programmer should know" in:“系统设计入门”中的]
引用以下来源:
2Jeff Dean:"Latency Numbers Every Programmer Should Know",2012年5月31日。
“最初由Peter Norvig("Teach Yourself Programming in Ten Years")撰写,并从Brendan进行了一些更新”,2012年6月1日。3
Jeff Dean: "Designs, Lessons and Advice from Building Large Distributed Systems", 13 Oct 2009,第24页。4
Jeff Dean: "Software Engineering Advice from Building Large-Scale Distributed Systems", 17 Mar 2009,第13页。