Perché ti stai chiedendo il numero di nodi NUMA? La parte importante è la topologia NUMA, che dice come sono collegati quei "nodi".
Ho controllato alcuni sistemi incluso il sistema a 8 socket (CPU a 10 core) costituito da 4 blade a 2 socket interconnessi (Hitachi Compute Node 2000). Anche qui il numero di nodi NUMA è uguale al numero di socket CPU (8). Ciò dipende dall'architettura della CPU, principalmente dal design del bus di memoria.
L'intero NUMA (accesso alla memoria non uniforme) definisce come ogni CPU logica può accedere a ciascuna parte della memoria. Quando si dispone di un sistema a 2 socket, ogni CPU (socket) ha la propria memoria, a cui può accedere direttamente. Ma deve anche essere in grado di accedere alla memoria nell'altro socket - e questo ovviamente richiede più cicli della CPU rispetto all'accesso alla memoria locale. I nodi NUMA specificano quale parte della memoria di sistema è locale in quale CPU. Puoi avere più livelli di topologia, ad esempio nel caso del sistema HP Superdome (che utilizza CPU Intel Itanium2), hai memoria socket CPU locale, quindi memoria su socket diverso all'interno della stessa cella e quindi memoria in altre celle (che hanno il massima latenza).
È possibile configurare NUMA nel proprio sistema in modo tale da offrire le migliori prestazioni possibili per il proprio carico di lavoro. Ad esempio, è possibile consentire a tutte le CPU di accedere a tutta la memoria o di accedere solo alla memoria locale, che quindi modifica il modo in cui lo scheduler di Linux distribuirà i processi tra le CPU logiche disponibili. Se hai molti processi che richiedono poca memoria, usare solo la memoria locale può essere vantaggioso, ma se hai processi di grandi dimensioni (database Oracle con la sua memoria condivisa), usare tutta la memoria tra tutti i cpus potrebbe essere migliore.
È possibile utilizzare comandi come numastat
o numactl --hardware
per verificare lo stato NUMA sul proprio sistema. Ecco le informazioni da quella macchina a 8 socket:
hana2:~ # lscpu
Architecture: x86_64
CPU(s): 160
Thread(s) per core: 2
Core(s) per socket: 10
CPU socket(s): 8
NUMA node(s): 8
NUMA node0 CPU(s): 0-19
NUMA node1 CPU(s): 20-39
NUMA node2 CPU(s): 40-59
NUMA node3 CPU(s): 60-79
NUMA node4 CPU(s): 80-99
NUMA node5 CPU(s): 100-119
NUMA node6 CPU(s): 120-139
NUMA node7 CPU(s): 140-159
hana2:~ # numactl --hardware
available: 8 nodes (0-7)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
node 0 size: 130961 MB
node 0 free: 66647 MB
node 1 cpus: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
node 1 size: 131072 MB
node 1 free: 38705 MB
node 2 cpus: 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
node 2 size: 131072 MB
node 2 free: 71668 MB
node 3 cpus: 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
node 3 size: 131072 MB
node 3 free: 47432 MB
node 4 cpus: 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
node 4 size: 131072 MB
node 4 free: 68458 MB
node 5 cpus: 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
node 5 size: 131072 MB
node 5 free: 62218 MB
node 6 cpus: 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
node 6 size: 131072 MB
node 6 free: 68071 MB
node 7 cpus: 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
node 7 size: 131008 MB
node 7 free: 47306 MB
node distances:
node 0 1 2 3 4 5 6 7
0: 10 21 21 21 21 21 21 21
1: 21 10 21 21 21 21 21 21
2: 21 21 10 21 21 21 21 21
3: 21 21 21 10 21 21 21 21
4: 21 21 21 21 10 21 21 21
5: 21 21 21 21 21 10 21 21
6: 21 21 21 21 21 21 10 21
7: 21 21 21 21 21 21 21 10
Qui puoi vedere la quantità di memoria presente in ciascun nodo NUMA (socket CPU) e la quantità di memoria utilizzata e libera.
L'ultima sezione mostra la topologia NUMA - mostra le "distanze" tra i singoli nodi in termini di latenze di accesso alla memoria (i numeri sono solo relativi, non rappresentano il tempo in ms o niente). Qui puoi vedere la latenza nella memoria locale (nodo 0 che accede alla memoria in 0, nodo 1 in 1, ...) è 10 mentre la latenza remota (nodo che accede alla memoria su un altro nodo) è 21. Sebbene questo sistema sia composto da 4 singoli lame, la latenza è la stessa per socket diversi sulla stessa lama o altra lama.
Interessante documento su NUMA è anche sul portale RedHat .