2013-10-26 41 views
6

我發現,物理內存被分爲等級如下(內存交錯):如何在linux內核中使用連續內存?

rank0: [0-512KB] [2048KB-2560KB] [4096KB-4608KB] ... 
    rank1: [512KB-1024KB] [2560KB-3072KB] [4608KB-5120KB] ... 
    rank2: [1024KB-1536KB] [3072KB-3584KB] [5120KB-... 
    rank3: [1536KB-2048KB] [3584KB-4096KB] ... 

Linux內核得到這些交叉存取內存。所以,linux內核看到的物理內存不是連續的。如果我對此有錯,請糾正我。

我一直在尋找的Linux內核源代碼,我的課程。

在創建sysfs(/ sys/devices/system/memory)時,linux內核會創建這些可用物理內存的特定大小(我的系統上爲128 MB)的部分(memory0,memory1,...)。在這些目錄中使用狀態文件可以使部分脫機/聯機。 (Memory Hotplug

因此,通過這些部分來表示物理存儲器被散射。所以,如果我使任何部分脫機,將使分散的內存它指向不可用。

我要讓這些部分是指連續的內存。是這樣的:

memory0 : 0-128 MB 
    memory1 : 128-256 MB 
    .... 

所以,當我做一些部分下線,然後與該部分連續物理內存變得不可用。那麼,我可以讓linux內核將物理內存看成是連續的而不是交錯的嗎?

糾正我,如果我錯了,任何關於這一點。

謝謝。

+0

任何人都可以幫助我嗎? –

+0

你的處理器架構是什麼?你說記憶被分解成行列。實際上,這很大程度上取決於處理器內存管理硬件的工作方式。 – user2284570

+0

對不起,已經很晚了。我忙於中期工作。我指的是一般架構,並非特定於我的機器。對困惑感到抱歉。但是對於這個討論,假設系統支持這種交錯,那麼有什麼辦法可以禁用它嗎? –

回答

1

我想你看到的是,由於在NUMA交錯內存分配選項。 有一個很好的paper在Linux下討論NUMA。

沒有你正在使用它的硬件的細節是非常困難的猜測內存交叉存取選項是如何被禁用。您還應該深入研究numactl實用程序,以查看它是否具有可用於正在運行的系統的某些設置。還有一些博客文章提到更改BIOS設置以控制內存交錯選項,您可能也必須這樣做。 (不適合現在給出2個鏈接:\但一個簡單的谷歌搜索禁用BIOS中的內存交錯應該會變成對你有用的東西)

+0

嗨。謝謝回覆。在發佈這個問題之前,我搜索了這個問題。我還發現在BIOS中有更改內存交錯的選項,但我無法在我的系統上找到這些信息。那麼,這是否意味着我的系統不支持內存交錯?我認爲NUMA與內存交錯不同。 NUMA在多個處理器之間傳播內存塊。在我的問題中,我不關心多個處理器。我感興趣的是在各個DIMM列中發生的內存交錯。 –

+0

跨DIMM的內存交錯需要通過系統上的內存控制器進行控制。 AFAIK禁用它的唯一方法是尋找BIOS中的設置或通過現代系統上的EFI shell進行設置。你在用什麼系統? – vPraetor