什么是 L1 Cache Reference 或 Main Memory Reference

Anj*_*wal 3 performance latency system-design cpu-cache

所以我试图学习计算机的各种组件的性能指标,如 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
Run Code Online (Sandbox Code Playgroud)

我不认为上面提到的参考是以位或字节为单位读取的数据量。但实际上是关于可能访问缓存或内存中的一个地址。有人可以更好地解释一下在 0.5 n/s 中发生的这个参考是什么吗?

Hel*_*and 5

  • 该表列出了一些代表性系统的典型数字,因为真实示例系统的实际值几乎不会是“平滑数字”,而是在 CPU 和/或总线时钟周期的一些非偶数倍数上的复杂总和。我们可以在教科书中找到这样的表格以供教育使用。这显然是 从 Google AI 的负责人Jeff Dean 于 2009 年3,4举行的一些会议演讲中 找到的系统设计的一般介绍1

  • 两个演示文稿 PDF 3,4 没有明确定义这些表格中“参考”的确切含义。相反,提供这些表格是为了指出“粗略计算”的能力对于成功的系统设计至关重要。

  • 术语“引用”可能意味着从相应级别的内存中检索一条信息,如果请求的值保留在那里,则不必从较慢的源重新加载:

    L1 缓存 <- L2 缓存 <- 主内存 (RAM) <- 磁盘(例如,交换)

    上层资源(RAM、磁盘)可以被看作是一个非常粗略的草图,因为在这里您会发现许多子层和变体(海量设备的类型、磁盘芯片组上的内部缓存、总线/桥接等) .) 目前的数字似乎是谷歌数据中心经验的总结。因此,让我们假设它们基于某些在 2009 年(或更早)相关的高性能类硬件。今天(2020 年),这些数字不应该是字面上的,而是要在其他数据传输级别的相应值的上下文中展示数量级。

  • 标签“分支错误预测”代表需要从下一级进行提取操作的所有情况,因为错误预测的分支决策是此类提取操作对延迟至关重要的情况的最重要原因。在其他情况下,分支预测基础设施应该及时触发数据获取操作,因此所有超出低“参考”值的延迟都隐藏在管道操作之后。


1 您在评论讨论中给我们的网址

“每个程序员都应该知道的延迟数字”在:“系统设计入门”

参考以下来源:

2 Jeff Dean“每个程序员都应该知道的延迟数字”,2012 年 5 月 31 日。

“最初由Peter Norvig“十年自学编程”)和 Brendan 的一些更新撰写,2012 年 6 月 1 日。

3 Jeff Dean:“构建大型分布式系统的设计、教训和建议”,2009 年 10 月 13 日,第 24 页。

4 Jeff Dean:“来自构建大规模分布式系统的软件工程建议”,2009 年 3 月 17 日,第 13 页。