Linux taskset Befehl für Anfänger (mit Beispielen)
Schon mal von der Affinität des Begriffs Prozessors gehört? Es ist eine Funktion, mit der Sie Prozesse an eine bestimmte Zentraleinheit oder eine Reihe von CPUs binden oder aufheben können. Ja, Sie können dem System mitteilen, welche CPU-Kerne verwendet werden sollen, um einen bestimmten Prozess auszuführen. Theoretische Details darüber, warum es eine Prozessoraffinität gibt, finden Sie hier.
Hier, in diesem Tutorial, werden wir ein Dienstprogramm – das so genannte Taskset – diskutieren, mit dem Sie die Prozessoraffinität erreichen können. Aber bevor wir das tun, ist es erwähnenswert, dass alle Beispiele in diesem Tutorial auf einem Ubuntu 18.04 LTS-Rechner getestet wurden.
Linux-Task-Set-Befehl
Mit dem Befehl taskset können Sie die CPU-Affinität eines Prozesses festlegen oder abrufen. Folgendes ist seine Syntax:
taskset [options] mask command [argument...] taskset [options] -p [mask] pid
So erklärt es die Man Page des Tools:
taskset is used to set or retrieve the CPU affinity of a running process given its pid, or to launch a new command with a given CPU affinity. CPU affinity is a scheduler property that "bonds" a process to a given set of CPUs on the system. The Linux scheduler will honor the given CPU affinity and the process will not run on any other CPUs. Note that the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keep processes on the same CPU as long as practi? cal for performance reasons. Therefore, forcing a specific CPU affin? ity is useful only in certain applications.
The CPU affinity is represented as a bitmask, with the lowest order bit
corresponding to the first logical CPU and the highest order bit corre?
sponding to the last logical CPU. Not all CPUs may exist on a given
system but a mask may specify more CPUs than are present. A retrieved
mask will reflect only the bits that correspond to CPUs physically on
the system. If an invalid mask is given (i.e., one that corresponds to
no valid CPUs on the current system) an error is returned. The masks
may be specified in hexadecimal (with or without a leading „0x“), or as
a CPU list with the –cpu-list option. For example,
0x00000001 is processor #0,
0x00000003 is processors #0 and #1,
0xFFFFFFFF is processors #0 through #31,
32 is processors #1, #4, and #5,
–cpu-list 0-2,6
is processors #0, #1, #2, and #6.
When taskset returns, it is guaranteed that the given program has been
scheduled to a legal CPU.
Im Folgenden finden Sie einige Beispiele im Q&A-Stil, die Ihnen eine bessere Vorstellung davon vermitteln sollen, wie der taskset-Befehl funktioniert.
Q1. Wie kann man Taskset verwenden, um die CPU-Affinität eines Prozesses abzurufen?
Wenn Sie möchten, dass Taskset die CPU-Affinität eines bereits laufenden Prozesses anzeigt, verwenden Sie den Befehl wie folgt:
taskset -p [PID]
Ersetzen Sie einfach PID durch die ID des Prozesses, dessen CPU-Affinität Sie holen möchten. Zum Beispiel:
taskset -p 9726
Der obige Befehl gab die folgende Ausgabe zurück:
pid 9726's current affinity mask: f
Der hexadezimale Wert’f‘ bedeutet hier also, dass der Prozess auf jedem der 4 Prozessorkerne laufen kann: 0,1,2,3.
Wenn Sie möchten, dass die Ausgabe in Bezug auf den CPU-Bereich erfolgt, können Sie die Befehlszeilenoption -c hinzufügen.
taskset -cp 9726
In diesem Fall folgt die Ausgabe:
pid 9726's current affinity list: 0-3
Q2. Wie kann man die CPU-Affinität mit Hilfe von Taskset ändern?
Um die CPU-Affinität eines bestehenden Prozesses zu optimieren, müssen Sie die Prozess-ID (wie im vorherigen Abschnitt) zusammen mit einer hexadezimalen Maske angeben, die die neue Affinität definiert.
So ist beispielsweise die aktuelle CPU-Affinität des Gedit-Prozesses (PID: 9726) ‚f‘.
Um die Affinität auf 0x11 zu ändern, verwenden Sie den folgenden Befehl:
taskset -p 0x11 9726
Und dann kannst du die neue Affinität mit dem folgenden Befehl noch einmal überprüfen:
taskset -p 9726
Die folgenden Screenshots zeigen die Ausgaben für diese Befehle in meinem Fall:
So kann man sehen, dass sich die Affinität verändert hat.
Q3. Wie kann man eine Reihe von CPUs zuweisen, während man die Affinität ändert?
Das ist keine große Sache. Alles, was Sie tun müssen, ist, die Kommandozeilenoption -c zu dem Befehl hinzuzufügen, den wir im vorherigen Abschnitt zusammen mit dem CPU-Kernbereich als Eingabe verwendet haben.
Hier ist ein Beispiel:
taskset -cp 0,3 9726
Nachfolgend ist die in diesem Fall produzierte Leistung aufgeführt:
pid 9726's current affinity list: 0 pid 9726's new affinity list: 0,3
Q4. Wie kann man einen Prozess mit vordefinierter CPU-Affinität starten?
Ja, Sie können auch einen Prozess mit einer festgelegten CPU-Affinität starten.
Zum Beispiel habe ich den Text-Gedit-Edit-Editor mit CPU-Affinität 0xa gestartet.
taskset 0xa gedit
Fazit
Einverstanden, der taskset-Befehl ist nicht für einen durchschnittlichen Befehlszeilenbenutzer. Es wird hauptsächlich von Experten auf der Serverseite zur Prozessoptimierung in einer Multicore-Umgebung eingesetzt. Wir haben hier die Basics des Werkzeugs besprochen. Weitere Informationen findest du auf der Man Page.