Memory 多核体系结构中的CPU和内存访问

Memory 多核体系结构中的CPU和内存访问,memory,concurrency,io,cpu,dma,Memory,Concurrency,Io,Cpu,Dma,我想知道,如果两个CPU内核试图同时(通过内存控制器)访问内存,那么“一般”如何处理内存访问?实际上,当内核和支持DMA的IO设备尝试以相同的方式访问时,情况也是如此 ,内存控制器足够智能,可以利用地址总线并同时处理这些请求,但是我不确定当它们尝试访问同一位置时,或者当IO操作垄断了地址总线并且CPU没有空间移动时会发生什么 Thx有很多事情需要考虑。例如,在最低级别上有总线仲裁机制,允许多个参与者访问共享地址和数据总线 在更高的层次上,还需要考虑CPU缓存之类的事情:如果CPU从内存中读取,它

我想知道,如果两个CPU内核试图同时(通过内存控制器)访问内存,那么“一般”如何处理内存访问?实际上,当内核和支持DMA的IO设备尝试以相同的方式访问时,情况也是如此

,内存控制器足够智能,可以利用地址总线并同时处理这些请求,但是我不确定当它们尝试访问同一位置时,或者当IO操作垄断了地址总线并且CPU没有空间移动时会发生什么


Thx

有很多事情需要考虑。例如,在最低级别上有总线仲裁机制,允许多个参与者访问共享地址和数据总线

在更高的层次上,还需要考虑CPU缓存之类的事情:如果CPU从内存中读取,它可能只从其本地缓存中读取,这可能不会反映另一个CPU本地缓存中存在的状态。为了在多核系统中的缓存实例之间同步内存,存在在CPU中实现的缓存一致性协议。这些必须保证,如果一个CPU写入共享内存,那么所有其他CPU的缓存(可能也包含内存位置内容的副本)都会得到更新。

简单的回答是“这很复杂,但在某些情况下,访问肯定会并行进行”

我觉得你的问题有点太白纸黑字了:你可能在寻找一个答案,比如“是的,多个设备可以同时访问内存”或“不,它们不能”,但事实是,首先你需要描述一些特定的硬件配置,包括一些底层实现细节和优化功能,以获得准确答案。最后,您需要准确定义“同一时间”的含义

一般来说,一个好的一阶近似值是,硬件会使所有硬件都可以几乎同时访问内存,可能会由于争用而增加延迟和降低带宽。在非常细粒度的时序级别上,一个设备可能确实延迟另一个设备的访问,也可能不延迟,这取决于许多因素。您不太可能需要这些信息来正确地实现软件,也不太可能需要知道细节,甚至不需要最大限度地提高性能

也就是说,如果你真的需要了解细节,请继续阅读,我可以对某种理想化的latpop/桌面/服务器级硬件给出一些一般性的观察

正如马蒂亚斯所提到的,首先必须考虑缓存。缓存意味着任何受缓存约束的读写操作(包括几乎所有的CPU请求和许多其他类型的请求)可能根本不会触及内存,因此从这个意义上讲,许多内核可以同时“访问”内存(至少是它的缓存映像)

如果您考虑所有缓存级别中丢失的请求,则需要了解内存子系统的配置。一般来说,RAM芯片一次只能做“一件事”(即,读写命令1适用于整个模块),通常扩展到由多个芯片组成的DRAM模块,以及通过总线连接到单个内存控制器的一系列DRAM

所以你可以说,从电子角度来说,一个内存控制器和它所连接的RAM的组合很可能是一次只做一件事。现在,这件事通常类似于从物理上连续的字节跨度中读取字节,但该操作实际上可以帮助同时处理来自不同设备的多个请求:即使每个设备向控制器发送单独的请求,好的实现也会将请求发送到相同或接近2的内存区域

此外,即使是CPU也可能具有这样的能力:当出现新请求时,它可以/必须注意到一个重叠区域的现有请求正在进行中,并将新请求与旧请求绑定在一起

不过,您可以说,对于单个内存控制器,您通常一次只处理一个设备的请求,而不存在合并请求的异常机会。现在请求本身通常在纳秒量级上,因此许多单独的请求可以在一个小的时间单位内得到服务,因此这种“排他性”是细粒度的,通常不会引起注意3

现在,我小心地将讨论限制在单个内存控制器上——当您有多个内存控制器4时,您肯定可以让多个设备同时访问内存,即使是在RAM级别。这里每个控制器本质上是独立的,因此如果来自两个设备的请求映射到不同的控制器(不同的NUMA区域),它们可以并行处理

答案很长


1事实上,命令流比“读”或“写”更低级、更复杂,涉及到打开内存页、从内存页中传输字节等概念。这是对本主题的极好介绍

2例如,想象两个对内存中相邻字节的请求:如果它们符合总线宽度,控制器可以将它们组合成一个请求

3当然,如果您在多个设备上竞争内存,总体影响可能非常明显:每个设备的带宽减少,延迟增加,但我的意思是,共享的粒度足够细,以至于你通常无法区分精细切片的独占访问和在每个时段对每个请求同时进行的假设设备之间的区别

4现代硬件上最常见的配置是每个插槽一个内存控制器,因此在2P系统上,通常会有两个控制器,当然也可能有其他比例(高和低)。

这种“总线仲裁”与swit相关吗