Situacija da imas vise NUMA nodova unutar jednog procesorskog paketa (socket-a) je relativno nova situacija na konzumerskim platformamama tj. AMD Threadripper je prvi CPU sa takvom arhitekturom namenjen kucnim korisnicima.
Ocigledno Windows kernel tim i AMD nisu radili dovoljno dugo na peglanju problema. Na dual-socket+ serverskim platformama je ovo matora problematika i u BIOS-ima cak imas gomilu preseta za odredjene aplikacije koji konfigurisu sistem kao NUMA ili UMA, Cluster on Die (Intel) i sl. zato sto nema "one size fits all" resenja. Siguran sam da su Intel i Microsoft radili godinama na tweak-ovanju schedulera u kernelu takodje, ne znam da li je AMD imao takav pristup i resurse, verovatno ne.
Na zalost, ne postoji magicni fix za sve aplikacije - u ovom konkretnom slucaju verovatno postoji bug u Windows kernelu vezan za AMD procesore, ali cak i kad se to resi, pitanje koji je idealan procesor za neki thread na NUMA sistemu je daleko od trivijalnog i u mnogim situacijama OS tu nece umeti sam da se snadje, vec ce sama aplikacija morati da se konfigurise kako treba uzimajuci u obzir topologiju sistema.
Interesantno, bez Hyper-V-a (koji ima performance counter-e koji ti daju hint), Windows recimo nema javni API koji bi prijavio koliko tacno fizicke memorije ima svaki NUMA nod kako bi aplikacija znala kako da balansira workload u slucaju da NUMA nodovi nemaju jednaku kolicinu memorije. Ako si memory-bound, radis neko streaming procesiranje podataka i CPU-ovi nisu "jednaki" (tj. neki imaju manje fizicke memorije ili je nemaju uopste) a ti to ne znas, imas problem, veliki problem zato sto neces moci da raspodelis posao "ravnopravno" zato sto ce neki CPU-ovi pre ili kasnije morati da pristupaju "stranoj" RAM memoriji koja se nalazi na drugom NUMA nodu.
Linux je tu bolji,
libnuma daje vise podataka i prakticno ako je developer aplikacije spreman za optimizacije moze je 100% optimizovati da radi optimalno, pod uslovom da je OS svestan hardvera :-) U slucaju bare-metal masina sa korektno podesenim firmware-om to obicno jeste slucaj, ali u slucaju virtualizacije to nije nuzno tacno zato sto hipervizor moze biti konfigurisan da sakrije pravu sistemsku topologiju.
Sve u svemu, mislim da je mix NUMA-e i konzumerskih aplikacija losa stvar za korisnike zato sto donosi probleme koji se na serverskim platformama resavaju rucnom optimizacijom sistema i aplikacija, sto skoro niko od consumera nece biti spreman da radi.
Verovatno cemo imati razne "patcheve" i tool-ove za specificne procesore/aplikacije ali sve je to jedno veliki s*anje IMHO.
Ako hoces 16/32+ jezgara u kuci... dobrodosao u NUMA hell :-)
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos:
http://www.digicortex.net/node/17 Gallery:
http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! -
https://github.com/psyq321/PowerMonkey