繁体   English   中英

在Linux内核中修改Sysfs的/ sys / devices / system / memory /目录

[英]Modifying the /sys/devices/system/memory/ directory of Sysfs in Linux Kernel

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

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

所以这就是我要做的事情:

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

那几乎是我的问题描述。

我的方法:我通读了sysfs文件系统,并试图查找负责组织sysfs的“内存”目录的内核模块。 我想根据我的要求查找模块并对其进行编辑,然后编译该模块。 越来越难以找到有关该主题的特定文档,这使我提出了这个问题。 我所能找到的就是这个C编程文件'/lib/modules/3.8.0-19-generic/source/drivers/base/memory.c',其中包含用于设置内存块“状态”的方法,显示每个内存部分的开始和结束物理地址以及许多其他方法。 但是我无法弄清楚到底在哪里调用这些方法,或者哪个模块正在使用此C文件设置所有属性。

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

提前致谢 :)

我只是回答问题的这一部分:

但是我无法弄清楚到底在哪里调用这些方法,或者哪个模块正在使用此C文件设置所有属性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM