Comment attribuer un programme à un cœur de processeur à l'aide d'un ensemble de tâches

Alors que les processeurs multicœurs deviennent de plus en plus courants dans les serveurs, les ordinateurs portables ou les ordinateurs de bureau, et même les appareils mobiles, de plus en plus d'applications sont optimisées pour ce type de système. Cependant, il peut parfois être utile de lier un programme ou un processus à un ou plusieurs noyaux spécifiques. Voyons comment l'obtenir ...

Installer l'ensemble de tâches

L'outil de tâches fait partie du paquet "util-linux". La plupart des distributions Linux sont livrées avec le package préinstallé par défaut. Dans le cas où le jeu de tâches n'est pas disponible, il est possible de l'installer comme suit:

En Debian / Ubuntu et dérivés:

sudo apt-get install util-linux

En Fedora et dérivés:

sudo yum installer util-linux

Afficher l'affinité CPU d'un processus en cours d'exécution

Pour récupérer les informations d'affinité du processeur pour un processus, utilisez le format suivant:

ensemble de tâches -p PID

Par exemple, pour vérifier l'affinité de la CPU d'un processus avec le PID 2915:

ensemble de tâches -p 2915

Renvoie le résultat:

masque d'affinité actuel du pid 2915: ff

tasket renvoie l'affinité actuelle du processeur dans un format de masque de bits hexadécimal. Dans l'exemple, l'affinité (représentée dans un masque de bits hexadécimal) correspond à "11111111" au format binaire, ce qui signifie que le processus peut s'exécuter sur l'un des huit cœurs de processeur différents (0 à 7).

Le bit le plus bas d'un masque de bits hexadécimal correspond à l'ID de cœur 0, le deuxième bit le plus bas de la droite à l'ID de cœur 1, le troisième bit le plus bas à l'ID de cœur 2, etc. Ainsi, par exemple, une affinité CPU "0x11" représente les ID de cœur 0 et 4.

tasket peut afficher l'affinité du processeur sous la forme d'une liste de processeurs au lieu d'un masque de bits, ce qui est beaucoup plus facile à lire. Pour utiliser ce format, vous devez exécuter l'ensemble de tâches avec l'option «-c». Par exemple:

ensemble de tâches -cp 2915

Renvoie le résultat:

Liste d'affinité actuelle du pid 2915: 0-7

Forcer un processus à s'exécuter sur un noyau spécifique

À l'aide de l'ensemble de tâches, un processus en cours d'exécution peut être affecté à un cœur de processeur spécifique. Pour ce faire, vous devez utiliser le format suivant:

ensemble de tâches -p COREMASK PID ensemble de tâches -cp CORE-LIST PID

Par exemple, pour affecter un processus aux cœurs 0 et 4, vous exécuteriez:

ensemble de tâches -p 0x11 9030

Ce que le résultat renvoie:

Masque d'affinité actuel du pid 9030: nouveau masque d'affinité du pid 9030: 11

De manière équivalente, vous pouvez exécuter:

ensemble de tâches -cp 0,4 9030

Avec l'option "-c", vous pouvez spécifier une liste d'ID de noyau numériques, séparés par des virgules, ou vous pouvez même inclure des plages (par exemple, 0,2,5,6-10).

Lancer un programme en utilisant un noyau spécifique

tasket permet également de lancer un nouveau programme en utilisant un certain nombre de noyaux spécifiques. Pour ce faire, il doit être utilisé dans le format suivant:

Ensemble de tâches COREMASK EXECUTABLE

Par exemple, pour démarrer le programme VLC sur l'ID de cœur du processeur 0, utilisez la commande suivante:

ensemble de tâches -c 0 vlc

Dédier un noyau uniquement à un programme particulier

Bien que le groupe de tâches permette d'attribuer un programme à un noyau particulier, cela ne signifie pas qu'il n'y a pas d'autres programmes ou processus qui l'utilisent. Pour éviter cela et dédier un noyau entier à un programme particulier, vous devez utiliser le paramètre de noyau "isolcpus", qui vous permet de réserver un noyau au démarrage.

Pour ce faire, vous devez ajouter le paramètre "isolcpus =" dans la ligne du noyau dans GRUB. Par exemple, pour réserver les cœurs d'ID 0 et 1, ajoutez "isolcpus = 0,1".

Une fois que cela est fait, le planificateur Linux n'assignera aucun processus régulier au noyau réservé, à moins que cela ne soit spécifiquement affecté à l'ensemble de tâches.

source: xmodule & pages de manuel des tâches.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Petercheco dit

    Bon post :).

  2.   Luis dit

    Bon post mais sans intention de trolling ...

    A quoi sert d'assigner un programme à un noyau spécifique ???

    Je veux dire; Si vous avez un ordinateur avec 12 cœurs, la chose logique serait qu'un certain programme soit exécuté à l'aide de ces 12 cœurs et ne le limite pas car nous obtenons ainsi les performances les plus élevées possible.

    Ce que je vois est utile, c'est l'option qui nous permet de n'attribuer aucun processus à un certain noyau, laissant son utilisation exclusive à un certain programme.

    1.    jvk85321 dit

      Cela a du sens ce que vous mentionnez, en laissant le planificateur utiliser tous les cœurs, les ressources sont mieux équilibrées, mais parfois un noyau dédié est requis, comme exécuter une machine virtuelle avec une tâche spécifique, les performances de cette machine s'améliorent considérablement quand aucune plus de processus en cours d'exécution dans le noyau attribué.

      atte
      jvk85321

      1.    utilisons Linux dit

        Exact! Merci, jvk! 🙂

      2.    lf dit

        Mais lorsque vous créez la machine virtuelle, il vous demande de choisir la quantité de CPU allouée ... à quoi sert de choisir cette valeur si à la fin le système d'exploitation l'omet et l'exécute sur tous les CPU ... Car là l'exemple n'est pas le meilleur ...

        Pour que Flash fonctionne sur Windows 8.1 x64, AMD et Firefox, il a été recommandé de choisir que Flash ne fonctionne que sur un processeur, mais cela n'a pas fonctionné pour moi. Ce serait également pratique si vous l'ajoutiez (si ce n'est déjà fait) aux gestionnaires de tâches des différents DE, ou du moins de KDE.

      3.    lf dit

        ah, je n'avais pas compris la fin du commentaire ... Mais pour cela, tous les processus sur le CPU exécutant la machine virtuelle devraient être interdits. Ou attribuez-les à d'autres processeurs. Commentaire intéressant et très bon.

    2.    Fernando dit

      Utilisé pour créer des supercalculateurs de génie

  3.   Luis dit

    C'est compris.

    Merci pour la clarification.

  4.   Teck dit

    Lors de la réservation d'un noyau pour un programme spécifique, que se passe-t-il avec les threads d'exécution Si vous le faites avec un noyau avec HT, il réserve 2 threads d'exécution pour le programme.

  5.   commutateur dit

    Cette commande peut ne pas sembler très utile sur les ordinateurs avec plusieurs cœurs, mais pour ceux d'entre nous qui ont un Dual Core, c'est assez pratique. Par exemple, j'ai un jeu qui, lorsque je l'ouvre, utilise tous les cœurs du processeur et si j'ai également d'autres programmes qui ont besoin du processeur (comme une recherche avec grep dans de gros fichiers), le système ralentit. La solution est aussi simple que de limiter le jeu à n'utiliser qu'un seul des cœurs.
    Je suis également d'accord avec lf, ils devraient vraiment intégrer cela dans les gestionnaires de tâches (ceux que j'ai essayés jusqu'à présent sur Gentoo, je pense qu'aucun ne l'a), surtout quand dans Windows c'est quelque chose qui existe depuis XP (clic droit sur un processus> "Définir l'affinité ...") mais il y a quelque temps, j'ai trouvé le script suivant qui transforme l'ensemble de tâches en quelque chose d'un peu plus intuitif (publié à l'origine ici ! et il y a même quelques cas dans lesquels il est nécessaire de gérer l'utilisation des cœurs):
    #!/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

    Avec quelques modifications, le nom du processus pourrait être indiqué à la place du PID (ou qu'il accepte les deux et qu'il décide quand ce paramètre est une chose ou une autre).

  6.   jors dit

    il n'y a pas d'interface graphique pour l'ensemble de tâches pour les nouveaux utilisateurs, ce serait bien