【问题标题】:Ram real time latencyRam 实时延迟
【发布时间】:2018-03-22 19:02:16
【问题描述】:

我在某处读到,要找到内存的实际延迟,您可以使用以下规则:

1/((RAMspeed/2)/1000) x CL = True Latency in nanoseconds

即对于具有 400Mhz 时钟速度的 DDR1,除以 2 以获得 FSB 速度或在这种情况下为 200Mhz 的实际总线速度对我来说是否合乎逻辑。所以上面的规则似乎对 DDR1 是正确的。

另一方面,根据文章“每个程序员应该了解的内存”,DDR2 的总线频率也比上一代 DDR1 增加了一倍(即每个时钟周期 4 位) .

因此,对于具有 800Mhz 时钟速度的 DDR2,要找到“真实延迟”,上述规则应相应更改为

1/((RAMspeed/4)/1000) x CL = True Latency in nanoseconds

正确吗?因为在所有情况下,我读到正确的方法是使用<strong>RAMspeed/2</strong>,无论是 DDR、DDR2、DDR3 还是 DDR4。

获取真实延迟的正确方法是什么?

【问题讨论】:

  • 最好发给Quora
  • 这个问题的灵感来自文章“每个程序员应该知道的关于内存的知识”,它肯定与程序员有关
  • 没有通用公式。记忆远比一篇简单的文章所能处理的要复杂得多。有 L1、L2、L3 缓存,NUMA 对某些类型的多核系统有影响,还有多通道内存等。在过去,我们只有一个 CPU,它直接连接到核心的系统内存时钟速度,1:1,但那些日子早已一去不复返了。
  • 我不是在开玩笑。没有简单的公式。单核机器实际上已经不存在了,而在多核机器中,尤其是那些有四个或更多的机器,内存架构非常复杂。从英特尔到 AMD 到 ARM,它也有很大不同。延迟和时钟速度只是松散相关。比 DDR4 内存“慢”的 DDR3 内存实际上具有更快的首字节响应时间,但带宽更低。
  • DDR SDRAM 延迟比您的公式表明的变化更大。您在已经打开的 DRAM 页面中获得更低的延迟(与 4k 虚拟内存页面不同或大小不同),因此即使在 16kiB 左右的范围内,访问的局部性也很重要,而不仅仅是在相同的高速缓存行或相同的 4k 页(TLB 条目)。 (正如我在答案中评论的那样,这只是谈论内存控制器和 DRAM 之间的延迟,忽略 CPU 内部的执行核心和内存控制器之间的延迟,尤其是套接字之间的延迟。这是不可忽略的。

标签: performance benchmarking frequency ram latency


【解决方案1】:

CAS 延迟以内存总线时钟周期计。这始终是每秒传输数的一半。例如DDR3-1600 的内存时钟为 800MHz,每秒进行 1600M 传输(在突发传输期间)。

DDR2、DDR3 和 DDR4 仍然使用双泵 64 位内存总线(在时钟信号的上升沿和下降沿传输数据),而不是四泵。这就是为什么它们仍然被称为Double Data-Rate (DDR) SDRAM


与FSB速度无关

在没有集成内存控制器的旧 CPU 上,即实际上具有 FSB 的系统,其频率通常可与内存速度分开配置(在 BIOS 中)。见Front Side Bus and RAM speed;在更旧的系统上,FSB 和内存时钟是同步的。

通常系统设计有足够快的 FSB 以跟上内存控制器的速度。以与内存相同的时钟速度运行 FSB 可以通过避免时钟域之间的缓冲来减少延迟。


是的,以秒为单位的 CAS 延迟是 cycle_count / frequency,或者更像您的公式
1000ns/us * CL / RAMspeed * 2 transfers/clock,其中 RAMspeed 以每秒兆传输数为单位。

较高内存频率下的较高 CL 数字通常会产生类似的绝对延迟(以秒为单位)。换句话说,现代 RAM 具有更高的 CAS 延迟计时数,因为在相同的时间内发生了更多的时钟周期。

带宽已大大提高,而延迟几乎保持不变,according to these graphs from Crucial 解释了 CL 与频率的关系。


当然这不是“内存延迟”,也不是“真正的”内存延迟

这是DRAM本身的CAS延迟,是内存控制器和DRAM之间延迟的最重要因素,但只是CPU核心和内存之间延迟的一部分。 CPU 内部的核心和非核心(L3 和内存控制器)之间存在不可忽略的延迟。 Uncore 是英特尔的术语; IDK AMD 将其各种微架构中的内存层次结构部分称为。

由于连接所有内核的大型环形总线,特别是多核 Xeon CPU 对 L3/内存控制器有很大的延迟。与具有相同内存和 CPU 时钟频率的类似双核或四核相比,多核 Xeon 的 L3 和内存延迟更差。

这种额外的延迟实际上将大型 Xeon 上的单线程/单核带宽限制为比笔记本电脑 CPU 更差,因为单核无法保持足够多的传输请求来填充具有这么长延迟的内存管道。 Why is Skylake so much better than Broadwell-E for single-threaded memory throughput?.

【讨论】:

  • 我想在购买新内存后更新我的知识并找到这个答案。这很有帮助。谢谢
  • @DennisKassel:请参阅What Every Programmer Should Know About Memory? 了解更多信息,从 DRAM 的基础知识和 (DDR) SDRAM 使用的总线开始,然后介绍缓存的细节及其对性能的影响。
  • 我已经下载了文档,但是原始文档对我来说太大了。但我也找到了对这本书的理解,并会在不久的将来阅读它。
【解决方案2】:

好的,我找到了答案。

每次制造商提高内存时钟速度时,他们都会以恒定速率这样做,始终是 FSB 时钟速度的两倍 (2x)。即

MEM CLK      FSB
-------------------
DDR200      100 MHz    
DDR266      133 MHz    
DDR333      166 MHz
DDR400      200 MHz
DDR2-400    200 MHz
DDR2-533    266 MHz
DDR2-667    333 MHz
DDR2-800    400 MHz
DDR2-1066   533 MHz
DDR3-800    400 MHz
DDR3-1066   533 MHz
DDR3-1333   666 MHz
DDR3-1600   800 MHz

因此,内存模块始终具有 FSB 的双倍速度。

【讨论】:

  • 再说一次,这不是编程问题,这里是题外话。
  • 带有集成内存控制器的 CPU 没有前端总线(将 CPU 连接到北桥)。没有北桥了;它集成在 CPU 中。无论如何,这个答案似乎只是说明内存时钟速度与 FSB 相匹配,因此每秒内存传输是频率的两倍,在时钟信号的上升沿和下降沿传输数据。 这就是Double Data Rate (DDR) 的字面意思
  • 这充其量只能告诉你内存控制器和 DRAM 之间的延迟,但是执行核心和内存控制器之间的延迟仍然未知,尤其是在多线程中。核心 CPU,每个核心外部的逻辑必须仲裁对 L3 / 内存的访问。例如,与具有相同微架构的四核 CPU 相比,即使使用相同的 RAM 芯片,多核 Xeon CPU 对 DRAM 甚至 L3 的延迟更差。 stackoverflow.com/questions/39260020/…
  • @Peter 我已经知道 ram 和 cpu 之间的连接(当然还有其他快速设备)不再简单了,一些设计在 cpu 内部实现了 ram 控制器(或并行设计原来的 FSB 正在变成一个串行)。但为了简单起见,我举了一个学术例子,只是为了用实践来验证原文章《每个程序员应该知道的关于内存的知识》中的理论。而且为了简单起见,上面的公式似乎完全没有错。
  • 我重读了这个问题,看看您实际上问了什么,而不是在看到诸如“真正的延迟”之类的废话之后就停下来。重要的不是 FSB,而是内存时钟,是的,它总是传输速率的一半,就像我说的那样。没有人必须选择同时增加两个独立的东西。所以这个答案没有解释为什么这个公式是正确的,甚至对于支持异步内存时钟的系统也不正确。
猜你喜欢
  • 2022-08-18
  • 2013-06-12
  • 1970-01-01
  • 2015-12-31
  • 2021-06-06
  • 2019-01-04
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多