![2 处理器服务器和 RAM](https://linux22.com/image/1392562/2%20%E5%A4%84%E7%90%86%E5%99%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%92%8C%20RAM.png)
我正在购买一台配备两个 E5-2660v2 处理器和 128GB RAM 的 Dell T620 服务器。Dell 告诉我,如果我订购 128GB RAM,则每个处理器必须有 64GB。这是为什么?
假设我在所有 20 个核心上运行一个进程,将 40GB 的数据加载到内存中并进行处理。我是否需要加载数据两次(每个处理器一次)?如果需要,我该怎么做?如果不是,内存分离会以何种方式影响计算机?
答案1
人们希望将内存在两个处理器之间分配的原因可能有三个。
首先,每个处理器的内存接口都有给定的最大带宽。通过增加处理器数量,这个峰值内存带宽也会增加一倍。
其次,在某些系统中,内存接口的速度可能受到连接到内存通道的模块数量的限制,因此每个通道使用一个模块(处理器数量增加一倍,因此通道数量也增加一倍)可能会允许更高的带宽。此外,一个处理器支持的内存模块数量可能会迫使使用更昂贵的模块来提供相同的总系统容量。
第三,如果将工作负载从将处理分散到其他处理器(例如,线程数大或线程数少,每个线程的 L3 容量更大)中获益大于将某些内存访问转移到其他处理器导致延迟增加(可能带宽更低)所造成的损失,那么即使操作系统没有对内存分配进行重大优化(NUMA [非统一内存访问] 优化,分配内存和调度线程,以便更频繁地使用连接到线程处理器的内存),性能也可能更好。通过进行大量的 NUMA 优化(这可能对工作负载来说并不实用),大多数内存访问都会访问更快的本地内存。
在只有两个节点的情况下,由于 NUMA 因素(远程内存相对于本地内存的速度有多慢)很小,因此不太可能进行内存复制。如果用于特定访问的内存连接到远程处理器,则请求将通过处理器间互连(英特尔的 QPI)传输到远程处理器的内存控制器(尽管该处理器的 L3 中可能存在缓存命中),并且内存控制器(或 L3 缓存)将满足请求,并通过处理器间互连将数据发送给请求者。
(具有大量节点/处理器的系统可能会受益于操作系统复制内存内容——这些内容是不可写入的。一些操作系统甚至使用迁移(将内存内容移动到不同的节点)作为 NUMA 优化。)
答案2
这与英特尔架构有关。内存必须在所有处理器之间平均分配,因此,在您的情况下,您在每个处理器总线上安装 64GB 内存。操作系统仍然可以看到所有 128GB 内存,但内存分布在两个 CPU 上。
CPU1 上的内存与 CPU2 上的内存在物理上匹配也很重要。例如,如果插槽 A1、A2 和 A3(A 连接到 CPU1)中有内存,则插槽 B1、B2 和 B3(B 连接到 CPU 2)中的内存类型/规格必须完全相同。如果不这样做,则 CPU2 将无法联机。
这就是为什么现在双 CPU 系统上采用 2 个 CPU 而不是 1 个 CPU 的原因。如果您只有 1 个 CPU,则无法使用连接到“B”插槽的任何内存