静态分配的大页面背后的内存如何跨 NUMA 节点分布?

How does the memory behind statically allocated huge pages get distributed across NUMA nodes?

在我的 /etc/default/grub 文件中,我明确地用 "hugepages=N" 预留了 N 个大页面。如果我 运行 在一个有 2 个 NUMA 节点的盒子上,N/2 大页面是否为每个节点预留,或者它们都转到节点 0,还是......?还有在命令行上查询它们如何跨节点拆分的方法吗?

来自 kernel.org post about hugepages HERE

在NUMA平台上,内核会尝试分配大页面池 在所有由 NUMA 内存策略指定的允许节点集合上 修改 nr_hugepages 的任务。允许节点的默认值——当 任务有默认的内存策略——所有在线节点都有内存。允许 大页面的可用连续内存不足的节点将 分配持久性大页面时静默跳过。查看讨论 以下是任务内存策略、cpuset 和每个节点属性的交互 分配和释放持久性大页面。

huge page分配的成败取决于 发生时系统中存在的物理上连续的内存 分配尝试。如果内核无法从 NUMA 系统中的某些节点,它将尝试通过以下方式弥补差异 在具有足够可用连续性的其他节点上分配额外页面 内存,如果有的话。

系统管理员可能希望将此命令放在本地 rc 之一 初始化文件。这将使内核能够尽早分配大页面 获得物理连续页面的可能性时的引导过程 还是很高的。管理员可以验证大页面的数量 实际上是通过检查 sysctl 或 meminfo 来分配的。检查每个节点 在 NUMA 系统中分配大页面,使用:

cat /sys/devices/system/node/node*/meminfo | fgrep Huge