Man muss mal endlich aufhören den 8C/16T mit 2 CCX als NUMA sehen zu wollen. Dem ist nicht so und das klappt so auch nicht, wenn man dem OS sagen will es soll den als 2 Socket System handhaben. Die DDR4-Speichertopologie beim Ryzen ist flach (jede Adresse von jedem Core aus gleich schnell lesbar) und der L3 ist ein victim-cache. Der Aufbau mit 2 CCX ist nicht gleich 2 Socket. Cache snooping hat halt eine Latenz von 100 ns zwischen den CCX, das ist alles.
Eben, es ist kein NUMA, NUMA ist bei mehreren CPUs pro Rechner, nur ist es mit der CCX Architektur auch kein klassischer Multikern Prozessor bei dem die Verbindungen zwischen allen Kernen etwa gleichschnell sind, wie
PCPER ermittelt hat (auch
planet3dnow hat darüber berichtet) und wie es auch zu erwarten war, hat die Kommunikation zwischen Kernen eines CXX und denen eines anderen CCX eben sehr viel höhere Latenzen als die Kommunikation zwischen den Kernen eines CCX, was eben bisher nur bei NUMA Architekturen so war.
Laut PCPer scheint auch nur ein NUMA Node vorhanden zu sein:
Trotzdem könnte es aber sein, dass der Scheduler von Windows noch leichte Verbesserungen kriegen wird (aber nichts weltbewegendes, wie AMD selbst mehrfach bestätigt hat).
Nein, da ist eine Fake News, AMD sagt klar das es nicht am Scheduler liegt, da haben sie Recht und das steht auch bei PCPER:
Was man machen könnte wäre entweder die beiden CCX als je einen NUMA Node zu definieren, dann würde der Scheduler sofort aufhören Threads zwischen ihnen hin- und her zu schieben, aber wie es auch bei PCPER steht, wären dann viele Programme nur noch in der Lage 4 der 8 Kerne zu nutzen, was auch erklären dürfte, warum man diesen Weg nicht gewählt hat, denn die Erklärung wie viele NUMA Nodes es gibt, kommt vom BIOS.
Der andere Weg am Scheduler etwas zu verändern würde bedeuten, dass man noch eine Ebene mehr einzieht, also NUMA Light, extra für die AMD CCX Architektur. Nur wie sollte sich diese nun praktisch von dem bestehenden NUMA unterscheiden? Diese Nodes Light sind dann die CCX auf dem gleichen Die, sie haben den gleichen RAM Controller etc. aber die Latenz zwischen ihnen ist eben höher. Wie sollte der Task Scheduler nun anderes reagieren, wenn er nun wüsste das die 8 Kerne zwar nicht in zwei NUMA Nodes aber auf 2 CCX (NUMA light Nodes) sitzen? Er soll Threads nicht zwischen diesen CCX verschieben ok, aber das macht er bei echten NUMA Nodes heute auch nicht. Nur wie sollen Programme damit umgehen? Die müssten aktiv alle Threads so verteilen, dass möglichst nur Threads auf Kernen eines CCX miteinander kommunizieren, nur was machen sie wenn das gar nicht geht, weil alle Threads untereinander gleich viel kommunizieren, was ja nicht untypisch ist? Sollen sie sich dann doch nur einen CCX nutzen? Das wäre auch heute so, wenn man die beiden CCX als je einen NUMA Node definiert, was sollte also eine weitere Schicht rein praktisch bewirken?
Nichts, denn es macht für das Problem keinen Unterschied ob die NUMA Nodes auf einen gemeinsamen RAM Controller zugreifen oder nicht und wie der Cache organisiert ist! Die Architektur mit den CCX hat eben den Nachteil eigentlich mehr NUMA als klassischer Mehrkerner zu sein und damit kann man nur wählen ob man sie von Seiten der SW so oder so behandeln möchte, beides hat Vor- und Nachteile. Das Problem kann nur AMD lösen indem man die Latenzen zwischen den CCX reduziert oder eben jeden CCX als eigenen NUMA Node beim System anmeldet. Hoffnungen auf Wunderlösungen sind irreal, die werden für den Task Scheduler nicht kommen, wohl aber für Probleme mit den Energiesparzuständen die es ja auch gibt, das Aufwachen von Kernen dauert recht lange und daher wird unter Windows der Energiesparplan "Höchstleistung" empfohlen und die Einstellung im Ausbalanziert eben entsprechend angepasst um die Kerne nicht mehr zu parken.