So weisen Sie einem CPU-Kern mithilfe des Task-Sets ein Programm zu

Da Multi-Core-Prozessoren auf Servern, Laptops oder Desktop-PCs und sogar auf Mobilgeräten immer häufiger zum Einsatz kommen, werden immer mehr Anwendungen für diesen Systemtyp optimiert. Manchmal kann es jedoch nützlich sein, ein Programm oder einen Prozess mit einem oder mehreren spezifischen Kerneln zu verknüpfen. Mal sehen, wie man es bekommt ...

Task-Set installieren

Das Taskset-Tool ist Teil des Pakets "util-linux". Bei den meisten Linux-Distributionen ist das Paket standardmäßig vorinstalliert. Falls das Task-Set nicht verfügbar ist, können Sie es wie folgt installieren:

En Debian / Ubuntu und Derivate:

sudo apt-get install util-linux

En Fedora und Derivate:

sudo yum installiere util-linux

Zeigen Sie die CPU-Affinität eines laufenden Prozesses an

Verwenden Sie das folgende Format, um Informationen zur CPU-Affinität für einen Prozess abzurufen:

Task-Set -p PID

So überprüfen Sie beispielsweise die Affinität der CPU eines Prozesses mit PID 2915:

Task-Set -p 2915

Gibt das Ergebnis zurück:

aktuelle Affinitätsmaske von pid 2915: ff

Der Task-Satz gibt die aktuelle CPU-Affinität in einem hexadezimalen Bitmaskenformat zurück. Im Beispiel entspricht die Affinität (dargestellt in einer hexadezimalen Bitmaske) "11111111" im Binärformat, was bedeutet, dass der Prozess auf einem von acht verschiedenen CPU-Kernen (0 bis 7) ausgeführt werden kann.

Das niedrigste Bit in einer hexadezimalen Bitmaske entspricht der Kern-ID 0, das zweitniedrigste Bit von rechts zur Kern-ID 1, das drittniedrigste Bit zur Kern-ID 2 usw. So repräsentiert beispielsweise eine CPU-Affinität "0x11" die Kern-IDs 0 und 4.

Das Task-Set kann die CPU-Affinität als Liste von Prozessoren anstelle einer Bitmaske anzeigen, die viel einfacher zu lesen ist. Um dieses Format zu verwenden, müssen Sie das Task-Set mit der Option "-c" ausführen. Zum Beispiel:

Task-Set -cp 2915

Gibt das Ergebnis zurück:

Aktuelle Affinitätsliste von pid 2915: 0-7

Erzwingen Sie, dass ein Prozess auf einem bestimmten Kernel ausgeführt wird

Mit dem Task-Set kann ein laufender Prozess einem bestimmten CPU-Kern zugewiesen werden. Dazu müssen Sie das folgende Format verwenden:

Task-Set -p COREMASK PID Task-Set -cp CORE-LIST PID

Um beispielsweise den Kernen 0 und 4 einen Prozess zuzuweisen, führen Sie Folgendes aus:

Task-Set -p 0x11 9030

Was das Ergebnis zurückgibt:

Aktuelle Affinitätsmaske von pid 9030: ff Neue Affinitätsmaske von pid 9030: 11

Entsprechend können Sie ausführen:

Task-Set -cp 0,4 9030

Mit der Option "-c" können Sie eine Liste von numerischen Kernel-IDs angeben, die durch Kommas getrennt sind, oder Sie können sogar Bereiche einschließen (z. B. 0,2,5,6-10).

Starten Sie ein Programm mit einem bestimmten Kernel

Mit dem Task-Set können Sie auch ein neues Programm mit einer Reihe spezifischer Kernel starten. Dazu muss es im folgenden Format verwendet werden:

EXECUTABLE COREMASK-Taskset

Verwenden Sie beispielsweise den folgenden Befehl, um das VLC-Programm auf der CPU-Kern-ID 0 zu starten:

Task-Set -c 0 vlc

Weisen Sie einen Kern nur einem bestimmten Programm zu

Obwohl das Task-Set das Zuweisen eines Programms zu einem bestimmten Kernel ermöglicht, bedeutet dies nicht, dass es keine anderen Programme oder Prozesse gibt, die davon Gebrauch machen. Um dies zu vermeiden und einen bestimmten Kernel einem bestimmten Programm zuzuweisen, müssen Sie den Kernel-Parameter "isolcpus" verwenden, mit dem Sie beim Start einen Kernel reservieren können.

Dazu müssen Sie den Parameter "isolcpus =" in die Kernelzeile in GRUB einfügen. Um beispielsweise die ID-Kerne 0 und 1 zu reservieren, fügen Sie "isolcpus = 0,1" hinzu.

Sobald dies erledigt ist, weist der Linux-Scheduler dem reservierten Kernel keine regulären Prozesse zu, es sei denn, dies wurde speziell dem Task-Set zugewiesen.

Quelle: xmodulo & Task-Manpages.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Petercheco sagte

    Guter Post :).

  2.   Luis sagte

    Guter Beitrag, aber ohne den Geist des Trolling ...

    Was nützt es, einem bestimmten Kernel ein Programm zuzuweisen?

    Ich meine; Wenn Sie einen Computer mit 12 Kernen haben, ist es logisch, dass ein bestimmtes Programm mit diesen 12 Kernen ausgeführt wird und nicht eingeschränkt wird, da wir auf diese Weise die höchstmögliche Leistung erzielen.

    Was ich sehe, ist nützlich, ist die Option, die es uns ermöglicht, keinem bestimmten Kernel einen Prozess zuzuweisen und seine ausschließliche Verwendung einem bestimmten Programm zu überlassen.

    1.    jvk85321 sagte

      Es ist sinnvoll, was Sie erwähnen, indem Sie den Planer alle Kerne verwenden lassen, die Ressourcen sind besser ausbalanciert, aber manchmal ist ein dedizierter Kern erforderlich, z. B. das Ausführen einer virtuellen Maschine mit einer bestimmten Aufgabe. Die Leistung dieser Maschine verbessert sich erheblich, wenn nein Weitere Prozesse werden im zugewiesenen Kernel ausgeführt.

      Atte
      jvk85321

      1.    Lass uns Linux benutzen sagte

        Genau! Danke, jvk! 🙂

      2.    lf sagte

        Wenn Sie jedoch die virtuelle Maschine erstellen, werden Sie aufgefordert, die zugewiesene CPU-Menge auszuwählen. Was nützt die Auswahl dieses Werts, wenn das Betriebssystem dies letztendlich auslässt und auf allen CPUs ausführt ... Für dort Das Beispiel ist nicht das beste ...

        Damit Flash unter Windows 8.1 x64, AMD und Firefox funktioniert, wurde empfohlen, Flash nur auf einer CPU auszuführen, bei mir jedoch nicht. Es wäre auch praktisch, wenn Sie es (falls es noch nicht vorhanden ist) den Task-Managern der verschiedenen DE oder zumindest der KDE hinzufügen.

      3.    lf sagte

        ah, ich hatte das Ende des Kommentars nicht verstanden ... Aber dafür müssten alle Prozesse auf der CPU, auf der die virtuelle Maschine ausgeführt wird, gesperrt werden. Oder weisen Sie sie anderen CPUs zu. Interessanter und sehr guter Kommentar.

    2.    Fernando sagte

      Wird verwendet, um geniale Supercomputer zu erstellen

  3.   Luis sagte

    Es wird verstanden.

    Danke für die Klarstellung.

  4.   Teck sagte

    Was passiert mit den Ausführungsthreads, wenn Sie einen Kernel für ein bestimmtes Programm reservieren? Wenn Sie dies mit einem Kernel mit HT tun, werden 2 Ausführungsthreads für das Programm reserviert.

  5.   Schalter sagte

    Dieser Befehl mag auf Computern mit mehreren Kernen nicht sehr nützlich erscheinen, aber für diejenigen von uns, die einen Dual Core haben, ist er ziemlich praktisch. Ich habe zum Beispiel ein Spiel, bei dem beim Öffnen alle Prozessorkerne verwendet werden. Wenn ich auch andere Programme habe, die die CPU benötigen (z. B. eine Suche mit grep in großen Dateien), verlangsamt sich das System. Die Lösung ist so einfach wie die Beschränkung des Spiels auf die Verwendung nur eines der Kerne.
    Ich stimme auch lf zu, wenn sie dies wirklich in Task-Manager integrieren sollten (die, die ich bisher auf Gentoo ausprobiert habe, glaube ich, keiner hat es), insbesondere wenn es in Windows seit XP existiert (Rechtsklick auf einen Prozess> "Set affinity ..."), aber vor einiger Zeit habe ich das folgende Skript gefunden, das das Task-Set in etwas Intuitiveres verwandelt (ursprünglich veröffentlicht) hier und es gibt sogar einige Fälle, in denen es notwendig ist, die Verwendung der Kerne zu verwalten):
    #!/bin/bash
    read -p 'Ingrese el ID del proceso en cuestión: ' ID
    read -p 'Ingrese la lista de procesadores separados por comas: ' P
    echo 'Su ID es '$ID' y los procesadores son '$P
    sudo taskset -p -c $P $ID
    read -p 'Listo, presione enter para finalizar' P

    Mit einigen Änderungen könnte der Name des Prozesses anstelle der PID angegeben werden (oder dass er beide akzeptiert und entscheidet, wann dieser Parameter das eine oder andere ist).

  6.   Jörs sagte

    Es gibt keine grafische Oberfläche für das Task-Set für neue Benutzer. Es wäre schön