2016-10-07 1 views
0

Ich führe einen einzelnen Server-Prozess mit 200 Threads, die automatisch auf die CPUs auf folgende Weise verteilt werden. Gibt es etwas, was ich tun kann, eine bessere Auslastung der CPU-Kerne zu haben?

CPU Utilization

enter image description hereenter image description here

Gibt es etwas, was ich tun kann das Betriebssystem andeuten sie über die CPUs des anderen Knotens zu verbreiten? Die 16 CPUs von Node 1 scheinen irgendwie vernachlässigt zu sein.

+1

Es ist wahrscheinlich beabsichtigt. Das Herumspringen von Knoten ist aufgrund der Speicherlatenz schlecht für die Leistung. – Mysticial

+0

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

+0

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

Antwort

0

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:

Usage by NUMA nodes

Verwendung von logischen Kern nach gleicher Einstellung zu ändern:

Usage by logical cores

Verwandte Themen