Vi ricordate i problemi prestazionali di Threadripper di cui vi abbiamo parlato qualche giorno fa? Bene, AMD ha finalmente detto la sua e ha fatto sapere che sta lavorando attivamente con Microsoft per rilasciare un fix il prima possibile. Non c'è ancora una data certa, ma l'azienda assicura che oltre al fix saranno incluse anche altre ottimizzazioni per migliorare ulteriormente le prestazioni.
Se avete bisogno di rinfrescarvi la memoria, proviamo a riassumere. Il tutto si origina dalle scoperte di Wendell di LevelOneTechs, che ha svolto un'analisi sul perché i processori Threadripper quad-die subiscano un peggioramento delle prestazioni rispetto a quelli dual-die.
Wendell, con l'aiuto di Jeremy Collake (fondatore di Bitsum Technologies), ha scoperto che rimuovendo il thread CPU 0 da quelli utilizzabili dai programmi i cali prestazionali sparivano. I due hanno quindi sviluppato CorePrio, un'utility che grazie all'opzione "NUMA Dissiociater" automatizza il sistema di eliminazione dei thread e risolve il problema.
La cosa però non finisce qui, anche perché questo fix non può certo dirsi definitivo. Wendell ha svolto ulteriori test e ha scoperto che il problema non si limita al Threadripper 2990WX provato inizialmente, ma si presenta anche su un EPYC 7551. In pratica si estende a tutte le CPU quad-die di AMD e sembrerebbe legato più allo scheduler di Windows che alla memoria.
Si è quindi giunti alla conclusione che in un ambiente NUMA (Non-Uniform Memory Access) lo scheduler di Windows assegna il "nodo NUMA migliore" (best NUMA mode) per ogni bit del software ed è programmato per spostare quei thread sul quel nodo il più spesso possibile. Una volta terminato l'assegnamento, lo scheduler elimina i thread con le stesse impostazioni.
Quando si esegue un programma che genera 32/64 thread, ad ogni thread figlio viene assegnato lo stesso "nodo NUMA migliore", e questi thread vengono continuamente spostati su questo nodo, eliminando thread che in realtà vogliono essere lì. Questo crea una "contesa di core", e può succedere che un programma multi thread perda un sacco di tempo mescolando i vari thread per adeguarsi alle condizioni del "nodo NUMA migliore".
Il problema dovrebbe presentarsi in qualsiasi ambiente NUMA, ma come detto prima le configurazioni dual-die sembrano non soffrirne. Questo perché per questi processori Microsoft ha già sviluppato un fix in grado di disabilitare la condizione del "nodo NUMA migliore" e lo ha rilasciato una volta che sul mercato ci sono state abbastanza workstation equipaggiate con queste CPU. In questo modo il "nodo NUMA migliore" è rimasto implementato solo nelle configurazioni con tre o più die, come il Threadripper 2990WX e l'EPYC 7551 testati da Wendell.
Come detto in apertura, AMD sta lavorando attivamente con il team di Windows per risolvere il problema in tempi brevi. L'azienda ha ringraziato Wendell per il suo lavoro e ha affermato che è andato molto vicino all'identificare il problema reale, ma non ha voluto fornire ulteriori dettagli in merito. A questo punto non resta che aspettare il fix da parte di Microsoft e AMD per poterne saggiare il beneficio prestazionale.