Informazioni sull'architettura NUMA (Non-Uniform Memory Access)

Microsoft Microsoft SQL Server supporta l'architettura NUMA (Non-Uniform Memory Access) e può essere utilizzato in modo efficace con hardware NUMA senza alcuna configurazione speciale. Con l'aumentare della velocità del clock e del numero di processori, diventa sempre più difficile ridurre la latenza di memoria necessaria per utilizzare questa ulteriore capacità di elaborazione. Per ovviare a questo problema, i fornitori di hardware offrono cache L3 di grandi dimensioni. Si tratta, tuttavia, di una soluzione soggetta a limiti. L'architettura NUMA offre una soluzione scalabile a questo problema. SQL Server è stato progettato per trarre vantaggio dai computer basati su NUMA senza che sia necessario apportare alcuna modifica alle applicazioni.

Concetti di base sull'architettura NUMA

L'attuale tendenza è includere nei prodotti hardware più di un bus di sistema, ognuno utilizzato da un piccolo gruppo di processori. Ogni gruppo di processori dispone di memoria propria e, talvolta, di canali di I/O specifici. Ogni CPU può comunque accedere alla memoria associata ad altri gruppi in modo coerente. Ogni gruppo viene denominato nodo NUMA. Il numero di CPU all'interno di un nodo NUMA dipende dal fornitore di hardware. L'accesso alla memoria locale è più rapido rispetto all'accesso alla memoria associata ad altri nodi NUMA. È da questa caratteristica che deriva il nome dell'architettura NUMA, Non-Uniform Memory Access, ovvero accesso non uniforme alla memoria.

Nei componenti hardware NUMA alcune aree della memoria sono fisicamente presenti in bus diversi da quelli di altre aree. Poiché l'architettura NUMA utilizza memoria sia locale che esterna, l'accesso ad alcune aree della memoria richiederà più tempo. I termini memoria locale e memoria esterna sono in genere utilizzati in riferimento a un thread attualmente in esecuzione. Per memoria locale si intende la memoria presente nello stesso nodo della CPU in cui è in esecuzione il processo. La memoria che non appartiene al nodo in cui è in esecuzione il processo è definita memoria esterna. La memoria esterna è anche nota come memoria remota. Il rapporto tra il costo di accesso alla memoria esterna e quello di accesso alla memoria locale è definito rapporto NUMA. Se il rapporto NUMA è 1, si è in presenza di un sistema SMP. Maggiore è il rapporto, maggiore sarà il costo per accedere alla memoria degli altri nodi. Le applicazioni Windows non compatibili con l'architettura NUMA (come ad esempio SQL Server 2000 SP3 e versioni precedenti) hanno talvolta prestazioni insoddisfacenti se utilizzate con componenti hardware NUMA.

Il vantaggio principale dell'architettura NUMA consiste nella scalabilità. Questa architettura è stata progettata per superare i limiti di scalabilità dell'architettura SMP. Con SMP, tutti gli accessi alla memoria avvengono attraverso un unico bus di memoria condiviso. Si tratta di un comportamento efficace in presenza di un numero relativamente ridotto di CPU, ma non quando decine e persino centinaia di CPU si contendono l'accesso allo stesso bus di memoria condiviso. L'architettura NUMA consente di ridurre questi colli di bottiglia limitando il numero di CPU in ogni bus di memoria e unendo i diversi nodi per mezzo di un'interconnessione ad alta velocità.

Nodo NUMA con 4 processori

Confronto tra architetture hardware NUMA e soluzioni soft-NUMA

L'architettura NUMA può unire memoria e processori tramite hardware specializzato (hardware NUMA) o mediante la configurazione della memoria di SQL Server (soft-NUMA). All'avvio, SQL Server viene configurato diversamente a seconda del sistema operativo sottostante e della configurazione hardware o delle impostazioni soft-NUMA. Sia in presenza di un'architettura hardware NUMA che di impostazioni soft-NUMA, quando SQL Server viene avviato in una configurazione NUMA, il log di SQL Server registra un messaggio di configurazione a più modalità per ogni nodo, insieme alla maschera della CPU.

Architettura hardware NUMA

I computer con hardware NUMA dispongono di più bus di sistema, ognuno utilizzato da un piccolo gruppo di processori. Ogni gruppo di processori dispone di memoria propria e, talvolta, di canali di I/O specifici, ma ogni CPU può accedere alla memoria associata ad altri gruppi in un modo coerente. Ogni gruppo viene denominato nodo NUMA. Il numero di CPU all'interno di un nodo NUMA dipende dal fornitore di hardware. Per sapere se il proprio computer supporta l'architettura hardware NUMA, rivolgersi al fornitore.

Se si dispone di hardware NUMA, è possibile che questo sia configurato in modo da utilizzare memoria interleaved anziché la modalità NUMA. In tal caso, Windows, e quindi SQL Server, non lo riconosceranno come NUMA. Per conoscere il numero di nodi di memoria a disposizione di SQL Server, eseguire la query seguente:

SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks

Se SQL Server restituisce un solo nodo di memoria (nodo 0), non si dispone di hardware NUMA o l'hardware è configurato in modalità interleaved (non NUMA). Se si ritiene che il proprio hardware NUMA non sia configurato correttamente, contattare il fornitore dell'hardware per abilitare la modalità NUMA. In SQL Server viene ignorata la configurazione NUMA quando l'hardware NUMA dispone di un numero di CPU minore o uguale a quattro e almeno un nodo dispone di una sola CPU.

Soft-NUMA

SQL Server consente di raggruppare le CPU in nodi secondo una modalità definita soft-NUMA. In genere ci si avvale della configurazione soft-NUMA quando si dispone di molte CPU e non si possiede hardware NUMA, ma è anche possibile adottare la configurazione soft-NUMA per suddividere i nodi NUMA hardware in gruppi più piccoli. Solo l'utilità di pianificazione di SQL Server e l'interfaccia di rete SQL Server (SNI) supportano la modalità soft-NUMA. I nodi di memoria vengono creati in base all'hardware NUMA e di conseguenza non sono condizionati dalla modalità soft-NUMA. Pertanto, se ad esempio si dispone di un computer SMP con otto CPU e si creano quattro nodi soft-NUMA con due CPU ciascuno, si avrà un solo nodo di memoria al servizio di tutti e quattro i nodi NUMA. Soft-NUMA non offre memoria all'affinità di CPU.

I vantaggi della modalità soft-NUMA sono la riduzione dell'I/O e dei colli di bottiglia Lazywriter sui computer con molte CPU privi di hardware NUMA. Per ciascun nodo NUMA è disponibile un unico thread di I/O e un unico thread Lazywriter. A seconda dell'utilizzo del database, tali thread singoli possono rappresentare un importante collo di bottiglia per le prestazioni. La configurazione di quattro nodi soft-NUMA produrrebbe quattro thread di I/O e quattro thread Lazywriter, con un possibile incremento delle prestazioni.

Non è possibile creare una configurazione soft-NUMA che includa CPU residenti in nodi diversi di un'architettura hardware NUMA. Se, ad esempio, l'hardware in uso dispone di otto CPU (0..7) divise in due nodi NUMA hardware (0-3 e 4-7), è possibile creare una configurazione soft-NUMA tramite la combinazione di CPU(0,1) e CPU(2,3). Non è possibile creare un nodo soft-NUMA CPU(1,5), ma è possibile avvalersi dell'affinità di CPU per stabilire un'affinità tra un'istanza di SQL Server e le CPU di nodi NUMA diversi. Di conseguenza, se nell'esempio precedente SQL Server utilizza le CPU 0-3, si disporrà di un thread di I/O e di un thread Lazywriter. Se nell'esempio precedente SQL Server utilizza le CPU 1, 2, 5 e 6, sarà possibile accedere a due nodi NUMA e si dispone di due thread di I/O e di due thread Lazywriter.

Nota

Alcune configurazioni hardware condividono ricorse comuni, come una cache L3/L4. È possibile creare nodi soft-NUMA raggruppando i processori in base a tali risorse condivise.

Per ulteriori informazioni, vedere Procedura: Configurazione di SQL Server per l'utilizzo di Soft-NUMA.