许多来自 Intel 和 AMD 的新型多核服务器在每个插槽上都配备了多个 DRAM 内存 Controller 。 (与配备一个双 channel Controller 的台式机/笔记本电脑相比。)
当操作系统(例如 Linux)需要内存来满足应用程序的请求时,如何选择一个 DRAM Controller 来满足请求?我看到三种可能性:
- Linux 使用某种算法选择它。
- 硬件的连接方式使得特定核心将使用特定内存 Controller 。
- 做出此决定的还有第三个组成部分。
我还没有找到任何确定的答案。
最佳答案
可以肯定的是,连续的物理内存在套接字/包内的 Controller 之间交错,因此单个顺序读取流将分布在所有 Controller 上。
(L3 未命中是指决定向内存 Controller 发送请求,因此 L3 切片中的逻辑可能知道如何通过环形总线或网状网络(英特尔)或其他任何方式将流量定向到适当的内存 Controller AMD最近使用的互连。可能基于缓存行地址的某些功能,尽管 Controller 数量不是2的幂,缓存行到 Controller 的循环分配可能需要一个分隔符?那会令人惊讶.)
BIOS/固件可以进行配置,也许可以通过菜单选项来控制。
只有在每个物理插槽都有一些内存 Controller 的多插槽服务器中,操作系统才会参与/知道它在哪个插槽上分配内存。 (NUMA 本地与远程,因此本地插槽上的内核的内存速度更快。)
关于linux - 在具有多个 Controller 的服务器中分配内存时,操作系统是否会选择内存 Controller ?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70162254/