2013-10-17 94 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在內核樹中搜索,但沒有運氣。無法縮小使用此文件的模塊。 –