2013-10-26 17 views
6

Ho trovato che la memoria fisica è divisa in fila come segue (Intercalaggio della memoria):Come utilizzare la memoria contigua nel kernel di 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] ... 

kernel di Linux è sempre questi memoria interlacciata. Quindi, la memoria fisica vista dal kernel di Linux non è contigua. Correggimi se ho torto su questo.

Ho cercato codice sorgente del kernel Linux per il mio lavoro di corso.

Durante la creazione di sysfs (/ sys/devices/system/memory), il kernel linux crea le sezioni (memory0, memory1, ...) di determinate dimensioni (128 MB sul mio sistema) di queste memorie fisiche disponibili. Usando i file di stato in queste directory posso creare sezioni offline/online. (Memory Hotplug)

Quindi, la memoria fisica rappresentata da queste sezioni è dispersa. Quindi, se faccio parte della sezione offline che renderà quella memoria sparsa sta puntando a non disponibile.

Desidero rendere queste sezioni riferite alla memoria contigua. qualcosa di simile:

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

Così, quando faccio qualche sezione offline, la memoria fisica contigua relativa a quella sezione diventa non disponibile. Quindi, posso fare in modo che il kernel di Linux veda la memoria fisica come contigua anziché interlacciata?

Correggimi se ho torto su tutto ciò.

Grazie.

+0

qualcuno può aiutarmi con questo? –

+0

Qual è l'architettura del processore? Hai detto che la memoria è divisa in ranghi. In realtà questo dipende in gran parte da come funziona l'hardware di gestione della memoria del processore. – user2284570

+0

Ci scusiamo per la risposta in ritardo. Ero impegnato con i termini medi. Mi riferivo all'architettura generale non specifica della mia macchina. Dispiace per la confusione. Ma per questo discuto, supponiamo che il sistema supporti questo interleaving, quindi c'è un modo per disabilitarlo? –

risposta

1

Penso che quello che state vedendo sia dovuto all'opzione interleave per l'allocazione di memoria sotto NUMA. C'è un ottimo paper che parla di NUMA sotto Linux.

Senza i dettagli dell'hardware che si sta utilizzando è molto difficile indovinare come l'opzione di interleaving della memoria può essere disabilitata. Si dovrebbe anche scavare nell'utilità numactl per vedere se ha alcune impostazioni che è possibile utilizzare su un sistema in esecuzione. Ci sono anche alcuni post sul blog che menzionano la modifica delle impostazioni del BIOS per controllare l'opzione di interleaving della memoria e potresti dover fare lo stesso. (non è idoneo a fornire 2 link in questo momento: \ ma una semplice ricerca su Google disabilitando l'interleaving della memoria nel BIOS dovrebbe risultare utile per te)

+0

Ciao. Grazie per la risposta. Prima di pubblicare questa domanda, ho cercato su questo. Ho anche scoperto che ci sono opzioni nel BIOS per cambiare l'interleaving della memoria ma non sono riuscito a trovare queste informazioni sul mio sistema. Quindi, questo significa che il mio sistema non supporta l'interleaving della memoria? Pensavo che la NUMA fosse diversa dall'interlacciatura della memoria. NUMA diffonde blocchi di memoria su più processori. Nella mia domanda, non sono interessato a più processori. Mi interessa l'interleaving della memoria che avviene tra ranghi di DIMM. –

+0

L'interleaving della memoria tra i moduli DIMM deve essere controllato dal controller di memoria sul sistema. AFAIK l'unico modo per disabilitarlo sarebbe cercare le impostazioni nel BIOS o tramite la shell EFI sui sistemi moderni. Che sistema stai usando? – vPraetor

Problemi correlati