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‘.

Wie man die CPU-Affinität mit Hilfe von Taskset ändert

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:

Verwendung von Taskset

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.

Das könnte dich auch interessieren …