GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Taskset-Befehls-Tutorial für Anfänger (mit Beispielen)

Schon mal vom Begriff Prozessoraffinität gehört? Es ist eine Funktion, mit der Sie Prozesse an eine bestimmte zentrale Verarbeitungseinheit oder eine Reihe von CPUs binden oder entbinden 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 Prozessoraffinität existiert, finden Sie hier.

Hier, in diesem Tutorial, werden wir ein Dienstprogramm besprechen - genannt taskset - damit können Sie Prozessoraffinität erreichen. Aber bevor wir das tun, ist es erwähnenswert, dass alle Beispiele in diesem Tutorial auf einem Ubuntu 20.04 LTS-Rechner und auf Debian 10 getestet wurden.

Linux-Taskset-Befehl

Mit dem Befehl „taskset“ können Sie die CPU-Affinität eines Prozesses festlegen oder abrufen. Es folgt die Syntax:

taskset [options] mask command [argument...]
taskset [options] -p [mask] pid

So erklärt es die Manpage 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 verwendet man Taskset, 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 abrufen möchten. Zum Beispiel:

taskset -p 9726

Der obige Befehl hat die folgende Ausgabe zurückgegeben:

pid 9726's current affinity mask: f

Der hexadezimale Wert „f“ bedeutet hier also, dass der Prozess auf jedem der 4 Prozessorkerne ausgeführt werden 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

Das Folgende ist die Ausgabe in diesem Fall:

pid 9726's current affinity list: 0-3

Q2. Wie ändere ich die CPU-Affinität mit Taskset?

Um die CPU-Affinität eines bestehenden Prozesses zu optimieren, müssen Sie die Prozess-ID (wie wir es im vorherigen Abschnitt getan haben) zusammen mit einer hexadezimalen Maske angeben, die die neue Affinität definiert.

Beispielsweise ist die aktuelle CPU-Affinität des Gedit-Prozesses (PID:9726) 'f'.

Verwenden Sie den folgenden Befehl, um die Affinität auf 0x11 zu ändern:

taskset -p 0x11 9726

Und dann können Sie die neue Affinität mit dem folgenden Befehl erneut überprüfen:

taskset -p 9726

Die folgenden Screenshots zeigen die Ausgaben für diese Befehle in meinem Fall:

So können Sie sehen, dass sich die Affinität geä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 Befehlszeilenoption -c zu dem Befehl hinzuzufügen, den wir im vorherigen Abschnitt verwendet haben, zusammen mit dem CPU-Kernbereich als Eingabe.

Hier ist ein Beispiel:

taskset -cp 0,3 9726

Folgendes ist die in diesem Fall erzeugte Ausgabe:

pid 9726's current affinity list: 0
pid 9726's new affinity list: 0,3

Q4. Wie starte ich einen Prozess mit vordefinierter CPU-Affinität?

Ja, Sie können einen Prozess auch mit einer festgelegten CPU-Affinität starten.

Zum Beispiel habe ich den Text-Gedit-Editor mit CPU-Affinität 0xa gestartet.

taskset 0xa gedit

Schlussfolgerung

Zugegeben, der Taskset-Befehl ist nichts für einen durchschnittlichen Befehlszeilenbenutzer. Es wird hauptsächlich von serverseitigen Experten zur Prozessoptimierung in einer Multi-Core-Umgebung verwendet. Wir haben hier die Grundlagen des Tools besprochen. Weitere Informationen finden Sie auf der Manpage.


Linux
  1. Linux expand Command Tutorial für Anfänger (mit Beispielen)

  2. Linux yes Command Tutorial für Anfänger (mit Beispielen)

  3. Linux nproc Command Tutorial für Anfänger (mit Beispielen)

  4. Linux-Benutzer Befehls-Tutorial für Anfänger (mit Beispielen)

  5. Linux sum Command Tutorial für Anfänger (mit Beispielen)

Linux sha1sum Command Tutorial für Anfänger (mit Beispielen)

Linux Look Command Tutorial für Anfänger (mit Beispielen)

Linux-Lsattr-Befehls-Tutorial für Anfänger (mit Beispielen)

Linux tload Command Tutorial für Anfänger (mit Beispielen)

Linux znew Command Tutorial für Anfänger (mit Beispielen)

Linux tr Command Tutorial für Anfänger (mit Beispielen)