Est-il possible de limiter un processus Linux pour qu'il ne puisse s'exécuter que sur un noyau particulier sur une machine particulière?

10

Disons que j'ai une boîte quad-core et quatre processus identiques, chacun avec dix threads. Est-il possible, sous Linux, de dire que le processus A ne peut s'exécuter que sur le CPU 0, que le processus B ne peut s'exécuter que sur le CPU 1, etc.?

Mike
la source

Réponses:

16
taskset <affinity mask> -p <process>

c'est à dire

taskset 1 -p 12345

définir le processus 12345 pour utiliser uniquement le processeur / core 1

Le masque binaire peut être une liste (c.-à-d. 1,3,4 pour utiliser les cœurs 1 3 et 4 d'un système à 4 cœurs) ou un masque binaire en hexadécimal (0x0000000D le 1,3,4, 0x00000001 pour le noyau 1 uniquement)

tasksetest généralement dans un package appelé shedutils.

Edit: presque oublié ... Si vous souhaitez définir l'affinité d'une nouvelle commande au lieu de la modifier pour un processus existant, utilisez:

taskset <mask> <program> [<arg1>]...[<argN>]
David Spillett
la source
1

ensemble de tâches (util-linux 2.13-pre7) utilisation: ensemble de tâches [options] [masque | cpu-list] [pid | cmd [args ...]] définit ou obtient l'affinité d'un processus

-p, --pid opèrent sur l'affichage pid -c, --cpu-list existant et spécifient les processeurs au format liste -h, --help affichent cette aide -v, --version informations sur la version de sortie

Le comportement par défaut est d'exécuter une nouvelle commande: taskset 03 sshd -b 1024 Vous pouvez récupérer le masque d'une tâche existante: taskset -p 700 Ou le définir: taskset -p 03 700 Le format de liste utilise une liste séparée par des virgules au lieu d'un mask: taskset -pc 0,3,7-11 700 Les plages au format liste peuvent prendre un argument de foulée: par exemple 0-31: 2 est équivalent au masque 0x55555555

vous pouvez toujours optimiser votre serveur selon vos besoins

Rajat
la source