Ich versuche, die Latenz meiner Linux-Netzwerkanwendung zu reduzieren. Ich habe gelernt, dass es zwei Tools gibt, um ein Programm an einen bestimmten CPU-Kern zu "binden": Taskset und CPUSET.
- Welches sollte ich bevorzugen? Sind sie auf einer niedrigeren Ebene gleichwertig?
- (die Disposition) Meine Anwendung hat einen einzelnen Thread und soll eine einzelne TCP-Verbindung (keine erneute Verbindung) über ein schnelles LAN-Netzwerk mit der geringstmöglichen Latenz verarbeiten. Bin ich auf dem richtigen Weg?
central-processing-unit
performance-tuning
latency
multi-core
John Linberg
quelle
quelle
Antworten:
Das Taskset dient zum Binden eines Prozesses an eine oder mehrere CPUs. Geben Sie im Wesentlichen an, wo es bei der ersten Ausführung oder während der Ausführung ausgeführt werden kann. Wenn Sie RHEL / CentOS auf modernen Servergeräten verwenden,
numactl
wird dies empfohlentaskset
.Cpuset / cset dient zur CPU-Abschirmung und ist ein Framework, das auf Linux- Gruppen basiert. Cset war bei bestimmten Distributionen (wie RHEL) nie beliebt, da andere Tools für das Prozessmanagement verfügbar sind.
Der erste Befehl unten erstellt eine Abschirmung, die die Aufgaben des Betriebssystems auf die CPU-Kerne 0 und 8 beschränkt. Der zweite Befehl verschiebt Ihre aktuelle Shell-Sitzung auf die angegebene CPU-Abschirmung, was zu einer Isolierung der System- und Benutzerprozesse führt.
Möglicherweise müssen Sie noch andere Dinge prüfen und optimieren, bevor Sie den Weg der Bindungsprozesse an CPUs beschreiten. Interrupts (
irqbalance
teilweise Deaktivierung), Energiespareinstellungen, Systemplaner, E / A-Aufzüge, Echtzeitrichtlinie (chrt
).Siehe: TCP-Einstellungen mit geringer Latenz unter Ubuntu
Hier ist ein ( verschlungenes ) Beispiel eines Anwendungs-Wrappers, der einen Kern auswählt, das Ungleichgewicht stoppt, ihn startet und den ausgewählten Kern auf eine schwarze Liste setzt und dann ./Ihr_Programm mit SCHED_FIFO und Priorität 99 auf dem ausgewählten Kern ausführt .
quelle
taskset
. Wenn Sie cpuset verwenden, ist es nicht möglich, Ihre Affinitäten von denen zu ändern, die Ihnen cpuset gewährt.numactl
?sched_setaffinity
.