如何在linux内核中使用连续内存?

Raj*_*ani 6 memory-management linux-kernel

我发现物理内存分为如下排列(内存交错):

   rank0: [0-512KB] [2048KB-2560KB] [4096KB-4608KB] ...
   rank1: [512KB-1024KB] [2560KB-3072KB] [4608KB-5120KB] ... 
   rank2: [1024KB-1536KB] [3072KB-3584KB] [5120KB-...
   rank3: [1536KB-2048KB] [3584KB-4096KB] ...
Run Code Online (Sandbox Code Playgroud)

Linux内核正在获得这些交叉存储器.因此,linux内核看到的物理内存不是连续的.如果我错了,请纠正我.

我一直在为我的课程工作看linux内核源代码.

在创建sysfs(/ sys/devices/system/memory)时,linux内核会创建这些可用物理内存的特定大小(我的系统上为128 MB)的部分(memory0,memory1,...).使用这些目录中的状态文件,我可以使部分脱机/在线.(Memory Hotplug)

因此,这些部分所代表的物理内存是分散的.因此,如果我使任何部分脱机,将使该分散的内存,它指向不可用.

我想让这些部分引用连续的内存.这样的事情:

   memory0 : 0-128 MB
   memory1 : 128-256 MB
   ....
Run Code Online (Sandbox Code Playgroud)

因此,当我使某个部分脱机时,与该部分相关的连续物理内存将变得不可用.那么,我可以让linux内核看到物理内存是连续的而不是交错的吗?

如果我错了,请纠正我.

谢谢.

vPr*_*tor 1

我认为您所看到的是由于 NUMA 下内存分配的交错选项。有一篇非常好的论文讨论了 Linux 下的 NUMA。

如果没有您所使用的硬件的详细信息,就很难猜测如何禁用内存交错选项。您还应该深入研究numactl实用程序,看看它是否有一些可以在正在运行的系统上使用的设置。还有一些博客文章提到更改 BIOS 设置以控制内存交错选项,您可能也必须这样做。(现在没有资格提供 2 个链接:\ 但在 BIOS 中禁用内存交错的简单 Google 搜索应该会找到对您有用的东西)