2

我正在做我的课程作业,以修改 Linux 内核中 Sysfs 的内存目录。在获得教授的许可后,我正在向这里的人寻求帮助。这正是我想要做的。

背景:如果我有 4 GB RAM,我的主板上可以有 4 X 1 GB DIMMS 或 2X 2GB DIMMS。Linux 支持 NUMA,方法是将此 4GB 物理内存分成许多块,每个块具有特定的起始和结束物理地址。Sysfs 中的“设备”目录包含全局设备层次结构。这包含已被内核注册的总线类型发现的每个物理设备。因此,有关内存块的详细信息存储在 Linux 内核的路径“/sys/devices/system/memory/”中。在这个目录中,我们有一个名为“block_size_bytes”的文件,它决定了我的 RAM 可以分成多少部分。例如在我的系统中它是 8000000,因此 RAM 被分成 32 个内存文件夹,从 memory0 到 memory43。每个“memoryX”目录都会有一个名为“ state' 表示内存块的在线/离线状态。如果我想“关闭”特定的内存块,我可以在在线/离线之间切换。

所以这就是我真正想做的事情:

我想将整个目录结构修改为 4 个目录。为什么是4?因为,我的主板上有 4 X 1GB DIMM,所以我想将这 32 个内存块减少到 4 个大块,这样我就可以通过切换它的“状态”在线/离线来控制我想要的任何 DIMM。所以基本上我想改变 DIMM 级别的内存状态。

这几乎就是我的问题描述。

我的方法:我已经阅读了 sysfs 文件系统并尝试查找负责组织 sysfs 的“内存”目录的内核模块。我想找到该模块并根据我的要求对其进行编辑并编译该模块。越来越难找到关于这个主题的具体文档,这导致我提出这个问题。我所能找到的只是这个 C 编程文件“/lib/modules/3.8.0-19-generic/source/drivers/base/memory.c”,它有设置内存块“状态”的方法,显示每个内存部分的起始和结束物理地址以及许多其他方法。但我无法弄清楚这些方法究竟在哪里被调用,或者哪个模块正在利用这个 C 文件来设置所有属性。

你能告诉我我需要寻找哪个确切的模块吗?如果您发现我的方法不对,请您指出正确的方向吗?

提前致谢 :)

4

1 回答 1

0

我只是回答这部分问题:

但我无法弄清楚这些方法究竟在哪里被调用,或者哪个模块正在利用这个 C 文件来设置所有属性。

您可以使用lxr在内核树中进行搜索。这里是一个带有show_mem_state函数的例子。

于 2013-10-17T15:48:09.750 回答