Unterschied zwischen Taskset und Cpuset

8

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.

  1. Welches sollte ich bevorzugen? Sind sie auf einer niedrigeren Ebene gleichwertig?
  2. (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?
John Linberg
quelle
Haben Sie die jeweiligen Manpages gelesen?
Michael Hampton
Haben Sie eine detaillierte Profilerstellung durchgeführt, um sicherzugehen, dass der Linux-Netzwerkteil die Latenz verursacht und nicht die Anwendung?
Tero Kilkanen
Welches Betriebssystem / welche Distribution / Version / welchen Kernel verwenden Sie?
ewwhite
Um welche Art von Hardware handelt es sich? Server
Marke

Antworten:

12

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, numactlwird dies empfohlen taskset.

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.

# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user

Möglicherweise müssen Sie noch andere Dinge prüfen und optimieren, bevor Sie den Weg der Bindungsprozesse an CPUs beschreiten. Interrupts ( irqbalanceteilweise 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 .

Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program
ewwhite
quelle
1
Beachten Sie, dass eine Anwendung bei Verwendung ihre Affinitäten zurücksetzen kann taskset. Wenn Sie cpuset verwenden, ist es nicht möglich, Ihre Affinitäten von denen zu ändern, die Ihnen cpuset gewährt.
Matthew Ife
Und numactl?
ewwhite
1
Gleich, beide Programme rufen den gleichen zugrunde liegenden Systemaufruf auf sched_setaffinity.
Matthew Ife