Genau genommen besteht die Möglichkeit, die Verteilung zu erzwingen, darin, die Thread-Affinität für den Prozess festzulegen. Ich sage nicht, dass dies das optimale Szenario ist, oder dass es besser als das vorherige Setup ist, aber zumindest habe ich es geschafft, dass der Prozess seine Threads in allen verfügbaren Kernen ausführt. Dies wird wahrscheinlich einen Nachteil haben, wenn Threads auf Knoten ausgeführt werden, die Zugriff auf verschiedene Speicherorte haben, aber ich habe das Gefühl, dass es kleiner sein wird, als wenn 16 Kerne gerade im Leerlauf sind. Ich werde das messen müssen, aber zumindest habe ich es geschafft, einen Schritt vorwärts zu machen, was ich erreichen wollte.
Verwendung von NUMA-Knoten nach Prozessaffinität Einstellung alle Kerne aller Knoten zu verwenden:
Verwendung von logischen Kern nach gleicher Einstellung zu ändern:
Es ist wahrscheinlich beabsichtigt. Das Herumspringen von Knoten ist aufgrund der Speicherlatenz schlecht für die Leistung. – Mysticial
Sie haben 16 Kerne auf der Maschine. Es scheint mir, dass das Betriebssystem aus irgendeinem Grund keinen Core verwenden kann, um 2 Threads parallel auszuführen, um Hyper-Threading zu aktivieren. Was machen die Threads? – dcernahoschi
Jeder Thread repräsentiert ein verbundenes TCP/IP-Gerät. Die meiste Zeit sitzen sie da und tun nichts: sie schlafen 5 ms, prüfen, ob es irgendwelche Aktivitäten auf ihrem Sockel gibt (0 ms) und wenn sie für die nächsten 5 ms schlafen gehen, wenn nicht. Das ist die grundlegende Verarbeitungsschleife für alle 200 Threads. Im besten Fall (leistungsbezogen) würde auf keinem Gerät Aktivität stattfinden. Worst Case, alle 200 Threads, die einen Befehl verarbeiten. – Eduardo