linux - 修改Linux Kernel中Sysfs的/sys/devices/system/memory/目录

标签 linux memory-management linux-kernel kernel-module numa

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

背景:如果我有 4 GB 内存,我的主板上可以有 4 个 1 GB DIMM 或 2 个 2GB DIMM。 Linux 支持 NUMA,将这 4GB 物理内存分成许多 block ,每个 block 具有特定的起始和结束物理地址。 Sysfs 中的“devices”目录包含全局设备层次结构。这包含已在内核中注册的总线类型发现的每个物理设备。因此,有关内存块的详细信息存储在 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 文件来设置所有属性。

能否请您告诉我我需要寻找哪个模块?如果您发现我的方法有误,能否请您指出正确的方向?

提前致谢:)

最佳答案

我只是回答这部分问题:

But I am not able to figure out where exactly these methods are being called or which module is utilizing this C file to set all the attributes.

您可以使用 lxr在内核树中搜索。 这里有一个例子 show_mem_state功能。

关于linux - 修改Linux Kernel中Sysfs的/sys/devices/system/memory/目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19419380/

相关文章:

linux - Beaglebone Black ubuntu 编译驱动

linux - 在 linux 中使文件对 magento 可写

linux - 什么是 linux 命令来获取正在运行的进程的堆栈而不必在调试器中附加它?

linux - 如何从 bash 中的剪贴板获取值

c++ - 在 C++ 构造函数中使用自动变量

c - 将指针从指针数组复制到另一个变量的直接赋值是否有效?

mysql 或 mariadb - 奇怪的服务器行为

c++ - 是否可以在 C++ 中不使用堆来创建类 String?

linux - 更改linux内核定时器

linux-kernel - 如果两个内核模块导出相同的符号会发生什么