【发布时间】:2011-07-27 13:38:25
【问题描述】:
如果我可以从一个例子开始。
假设我们有一个 4 个插槽的系统,其中每个插槽有 4 个内核,每个插槽有 2GB 内存 ccNUMA(缓存一致的非统一内存访问)类型的内存。
假设每个套接字上运行的 4 个进程都在 P2 的 RAM 中分配了一些共享内存区域,表示为 SHM。这意味着对该区域的任何加载/存储都会导致查找 P2 的目录,对吗?如果是这样,那么......当查找发生时,就延迟而言,这是否等同于访问 RAM?这个目录在物理上驻留在哪里? (见下文)
举个更具体的例子: 假设 P2 在 SHM 上进行了 LOAD,并且数据被带入 P2 的 L3 缓存,并带有标签“(O)wner”。此外,假设 P4 在同一个 SHM 上执行 LOAD。这将导致 P4 查找 P2 的目录,并且由于数据被标记为由 P2 拥有,我的问题是:
P4 是从 P2 的 RAM 中获取 SHM,还是总是从 P2 的 L3 缓存中获取数据?
如果它总是从 L3 缓存中获取数据,那么直接从 P2 的 RAM 中获取数据不是更快吗?既然它已经必须在 P2 的目录中进行查找?我的理解是该目录实际上位于 RAM 之上。
对不起,如果我严重误解了这里发生的事情,但我希望有人能帮助澄清这一点。
另外,是否有任何关于此类目录查找速度的数据?在数据检索方面,是否有关于此类查找的平均延迟的文档? L3 读命中、读未命中、目录查找有多少个周期?等等
【问题讨论】:
-
当您说 P1 的 RAM、P2 的 RAM 和只是 RAM 时,您到底是什么意思? RAM 通常与处理器分离。看看this image of an ASUS P4V800 architecture(你可能需要放大一点)。 CPU 通过北桥与 RAM 连接。我只是指出这张图片来澄清你所说的 RAM 到底是什么意思。
-
现在内存控制器已集成到 CPU 中。因此,在多套接字示例的上下文中。 P1 的 Ram 是直接连接到 P1 插座的 ram 模块。其中 P2 的 Ram 是通过内存总线直接连接到 P2 插槽的 ram 模块。 Ram 只是两个套接字可用的全部内存量。但是访问 P1 模块中的内存肯定比从 P2 模块中访问它需要更长的时间。这说明清楚了吗?
标签: memory directory cpu cpu-cache