linux - 在具有多个 Controller 的服务器中分配内存时,操作系统是否会选择内存 Controller ?如何?

标签 linux memory-management x86 cpu-architecture ram

许多来自 Intel 和 AMD 的新型多核服务器在每个插槽上都配备了多个 DRAM 内存 Controller 。 (与配备一个双 channel Controller 的台式机/笔记本电脑相比。)

当操作系统(例如 Linux)需要内存来满足应用程序的请求时,如何选择一个 DRAM Controller 来满足请求?我看到三种可能性:

  1. Linux 使用某种算法选择它。
  2. 硬件的连接方式使得特定核心将使用特定内存 Controller 。
  3. 做出此决定的还有第三个组成部分。

我还没有找到任何确定的答案。

最佳答案

可以肯定的是,连续的物理内存在套接字/包内的 Controller 之间交错,因此单个顺序读取流将分布在所有 Controller 上。

(L3 未命中是指决定向内存 Controller 发送请求,因此 L3 切片中的逻辑可能知道如何通过环形总线或网状网络(英特尔)或其他任何方式将流量定向到适当的内存 Controller AMD最近使用的互连。可能基于缓存行地址的某些功能,尽管 Controller 数量不是2的幂,缓存行到 Controller 的循环分配可能需要一个分隔符?那会令人惊讶.)

BIOS/固件可以进行配置,也许可以通过菜单选项来控制。

只有在每个物理插槽都有一些内存 Controller 的多插槽服务器中,操作系统才会参与/知道它在哪个插槽上分配内存。 (NUMA 本地与远程,因此本地插槽上的内核的内存速度更快。)

关于linux - 在具有多个 Controller 的服务器中分配内存时,操作系统是否会选择内存 Controller ?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70162254/

相关文章:

linux - 使用重命名命令批量重命名文件

c - 分配内存中的空白空间会发生什么?

我们可以重用分配的内存吗

memory-management - 为什么段从段落边界开始?

linux - 在 Red hat 中编译时出现段错误,但在 ubuntu 中运行正常

未找到 JAVA_HOME 作为 Sudo

linux - 使用 lsof 的脚本在 shell 上运行良好,而不是在 cron 上运行良好

multithreading - CPU 什么时候可以忽略 LOCK 前缀并使用缓存一致性?

复制文件后MySQL表不存在

c - 模拟 printf 堆栈弹出