Accesso alla memoria non uniforme o Architettura di memoria non uniforme (NUMA) è un progetto di memoria fisica utilizzato nell'architettura SMP (multiprocessori), in cui il tempo di accesso alla memoria dipende dalla posizione della memoria relativa a un processore. In NUMA, un processore può accedere alla propria memoria locale più velocemente della memoria non locale, ovvero la memoria locale di un altro processore o la memoria condivisa tra processori.
In un sistema NUMA, processori, memoria e I/O sono raggruppati in celle. Le caratteristiche di latenza e larghezza di banda della comunicazione all'interno di una cella sono "veloci" mentre l'uscita all'esterno di una cella è "lenta". Poiché la memoria nei sistemi NUMA è distribuita fisicamente ma condivisa logicamente, questi sistemi offrono prestazioni migliori alle applicazioni ottimizzate per utilizzare le loro funzionalità. Per le applicazioni non ottimizzate, offrono comunque prestazioni migliori poiché il comportamento predefinito è progettato per essere benigno se non vantaggioso e hanno comunque accesso a risorse condivise molto più grandi di memoria, CPU e spazio su disco.
Disabilitazione NUMA
1. Per disattivare NUMA, aggiungi numa=off alla riga del kernel in grub.conf file, ad esempio:
a. Per RHEL 6
Modifica la riga del kernel in /boot/grub/grub.conf file
# vi /boot/grub/grub.conf kernel /vmlinuz-2.6.39-400.215.10.EL ro root=/dev/VolGroup00/LogVol00 numa=off
Modifica la riga del kernel nel file /etc/default/grub
# vi /etc/default/grub GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_vm-210/root rd.lvm.lv=rhel_vm-210/swap vconsole.font=latarcyrheb-sun16 crashkernel=auto vconsole.keymap=us rhgb quiet numa=off
Assicurati inoltre di ricostruire il file di configurazione di GRUB utilizzando il comando seguente in caso di RHEL/CentOS 7.
# grub2-mkconfig -o /etc/grub2.cfg
2. Riavvia il server per rendere effettive le modifiche.
# shutdown -r now
Verifica
Per verificare dopo il riavvio, controlla il file /proc/cmdline per vedere le opzioni della riga di comando di GRUB utilizzate. (L'esempio di seguito è tratto da RHEL 6).
# cat /proc/cmdline ro root=/dev/VolGroup00/LogVol00 numa=off
# numactl -H available: 1 nodes (0) node 0 size: 4195 MB node 0 free: 3304 MB node distances: node 0 0: 10
Se NUMA fosse attivo, ci sarebbe più di un nodo elencato.