2013-10-17 83 views
2

我正在修改Linux Kernel中Sysfs的内存目录。在得到我的教授许可后,我正在寻求来自这里的人们的帮助。这是我真正想要做的。背景:如果我有4 GB RAM,则可以在我的主板上安装4个1 GB DIMMS或2个2 GB DIMMS。通过将这个4GB物理内存划分为许多块,为每个块指定开始和结束物理地址,NUMA在Linux中受到支持。 Sysfs中的'devices'目录包含全局设备层次结构。这包含通过在内核中注册的总线类型发现的每个物理设备。因此有关内存块的细节存储在Linux Kernel的路径'/ sys/devices/system/memory /'中。在这个目录中,我们有一个名为'block_size_bytes'的文件,它决定了我的RAM可以拆分成多少部分。例如在我的系统中,它是8000000,因此RAM被分成32个内存文件夹,从memory0到memory43。每个'memoryX'目录都有一个名为'state'的文件,它表示内存块的在线/离线状态。如果我想“关闭”特定块的内存,我可以在线/离线之间切换。修改Linux内核中Sysfs的/ sys/devices/system/memory /目录

所以这里就是我究竟想做的事:

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

这几乎是我的问题描述。

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

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

感谢提前:)

+0

您的系统有多少内存控制器(不是通道)?您知道内存中的数据可能会以交错方式存储,即分布在所有DIMM上? –

+0

我对硬件很陌生,但由于我的笔记本电脑有核心i5,通过手册阅读,我有一个集成的双通道DDR3内存控制器。并且说数据可能以交错方式存储,你的意思是说不可能将存储器分成块?基本上,当我插入我的RAM时,我想知道哪个模块负责在sysfs文件系统中的8个块中进行表示,以便我可以根据需要操纵它。如果我没有正确理解它,你能否详细说明你的评论? –

+0

Core i5没有NUMA。 –

回答

0

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

但我无法找出确切位置在哪里,这些方法被调用或模块利用此C文件来设置所有的属性。

您可以使用lxr在内核树中进行搜索。 这里以show_mem_state函数为例。

+0

嘿,谢谢你的回答,但我一直只使用lxr在内核树中搜索,但没有运气。无法缩小使用此文件的模块。 –