GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel de commande Linux pour les débutants (avec exemples)

Avez-vous déjà entendu parler du terme affinité de processeur ? C'est une fonctionnalité qui vous permet de lier ou de dissocier des processus à une unité centrale de traitement particulière ou à une gamme de processeurs. Oui, vous pouvez indiquer au système quel(s) cœur(s) de processeur doit(vent) être utilisé(s) pour exécuter un processus particulier. Pour des détails théoriques sur l'existence de l'affinité de processeur, rendez-vous ici.

Ici, dans ce tutoriel, nous allons discuter d'un utilitaire - appelé taskset - qui vous permet d'atteindre l'affinité du processeur. Mais avant cela, il convient de mentionner que tous les exemples de ce didacticiel ont été testés sur une machine Ubuntu 20.04 LTS et sur Debian 10.

Commande d'ensemble de tâches Linux

La commande taskset vous permet de définir ou de récupérer l'affinité CPU d'un processus. Voici sa syntaxe :

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

Voici comment la page de manuel de l'outil l'explique :

       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.

Voici quelques exemples de style questions-réponses qui devraient vous donner une meilleure idée du fonctionnement de la commande taskset.

Q1. Comment utiliser le jeu de tâches pour récupérer l'affinité CPU d'un processus ?

Si vous souhaitez que l'ensemble de tâches affiche l'affinité CPU d'un processus déjà en cours d'exécution, utilisez la commande de la manière suivante :

taskset -p [PID]

Remplacez simplement PID par l'ID du processus dont vous souhaitez récupérer l'affinité CPU. Par exemple :

taskset -p 9726

La commande ci-dessus a renvoyé le résultat suivant :

Masque d'affinité actuel du
pid 9726's current affinity mask: f

Ainsi, la valeur hexadécimale 'f' signifie ici que le processus peut s'exécuter sur n'importe lequel des 4 cœurs de processeur :0,1,2,3.

Si vous souhaitez que la sortie soit en termes de plage de CPU, vous pouvez ajouter l'option de ligne de commande -c.

taskset -cp 9726

Voici la sortie dans ce cas :

pid 9726's current affinity list: 0-3

Q2. Comment modifier l'affinité du processeur à l'aide de l'ensemble de tâches ?

Pour modifier l'affinité CPU d'un processus existant, vous devez spécifier l'ID de processus (comme nous l'avons fait dans la section précédente) avec un masque hexadécimal qui définit la nouvelle affinité.

Par exemple, l'affinité CPU actuelle du processus Gedit (PID :9726) est 'f'.

Pour changer l'affinité en 0x11, utilisez la commande suivante :

taskset -p 0x11 9726

Et ensuite, vous pouvez à nouveau vérifier la nouvelle affinité à l'aide de la commande suivante :

taskset -p 9726

Les captures d'écran suivantes montrent les sorties de ces commandes dans mon cas :

Vous pouvez donc voir que l'affinité a été modifiée.

Q3. Comment attribuer une plage de CPU tout en changeant d'affinité ?

Ce n'est pas grave. Tout ce que vous avez à faire est d'ajouter l'option de ligne de commande -c à la commande que nous avons utilisée dans la section précédente avec la plage de cœurs du processeur en entrée.

Voici un exemple :

ensemble de tâches -cp 0,3 9726

Ce qui suit est la sortie produite dans ce cas :

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

Q4. Comment lancer un processus avec une affinité CPU prédéfinie ?

Oui, vous pouvez également lancer un processus avec une affinité CPU définie.

Par exemple, j'ai lancé l'éditeur de texte gedit avec l'affinité CPU 0xa.

ensemble de tâches 0xa gedit

Conclusion

D'accord, la commande taskset n'est pas destinée à un utilisateur de ligne de commande moyen. Il est principalement utilisé par les experts côté serveur pour l'optimisation des processus dans un environnement multicœur. Nous avons discuté des bases de l'outil ici. Pour plus d'informations, rendez-vous sur sa page de manuel.


Linux
  1. Linux expand Tutoriel de commande pour les débutants (avec exemples)

  2. Tutoriel de commande de facteur Linux pour les débutants (avec exemples)

  3. Linux oui Tutoriel de commande pour les débutants (avec exemples)

  4. Tutoriel de commande pour les utilisateurs Linux pour les débutants (avec exemples)

  5. Tutoriel de commande Linux sum pour les débutants (avec exemples)

Tutoriel de commande Linux sha1sum pour les débutants (avec exemples)

Tutoriel de commande Linux look pour les débutants (avec exemples)

Tutoriel de commande Linux lsattr pour les débutants (avec exemples)

Tutoriel de commande Linux tload pour les débutants (avec exemples)

Tutoriel de commande Linux znew pour les débutants (avec exemples)

Tutoriel de commande Linux tr pour les débutants (avec exemples)