L'accesso alla memoria non uniforme o l'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.
Come possiamo identificare se NUMA è abilitato
NUMA deve essere abilitato nel BIOS. Se dmesg non ha record di inizializzazione numa durante l'avvio, è possibile che i messaggi relativi a NUMA nel buffer dell'anello del kernel siano stati sovrascritti.
Sistemi abilitati NUMA
Se NUMA è abilitato sul BIOS, eseguire il comando 'numactl –hardware ' per elencare l'inventario dei nodi disponibili sul sistema. Di seguito è riportato un esempio di output di numactl –hardware su un sistema che dispone di NUMA.
# numactl --hardware available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23 node 0 size: 8157 MB node 0 free: 88 MB node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 node 1 size: 8191 MB node 1 free: 5176 MB node distances: node 0 1 0: 10 20 1: 20 10
Sistemi NUMA disabilitati
1. Se NUMA è disabilitato sul BIOS, il comando 'numactl –show ' non mostra più nodi.
# numactl --show policy: default preferred node: current physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 cpubind: 0 nodebind: 0 membind: 0
2. Il comando "numactl –hardware ' inoltre non elenca più nodi.
available: 1 nodes (0) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 node 0 size: 65525 MB node 0 free: 17419 MB node distances: node 0 0: 10
3. Se il server non dispone del supporto NUMA o se l'opzione BIOS non è abilitata, verranno visualizzati i seguenti messaggi in dmesg
No NUMA configuration found Faking a node at 0000000000000000-0000001027fff000
4. Se ACPI è disabilitato, ciò disabiliterà anche NUMA; verificare che ACPI non sia disabilitato da un parametro del kernel grub.conf e rimuoverlo se trovato:
$ grep acpi=off /proc/cmdline $