GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je voir dans quel cœur de processeur un thread s'exécute ?

La commande "top" peut aider à cela, elle n'a pas de liste de threads groupés par processeur, mais vous pouvez plutôt voir la liste des threads (probablement pour un seul processus) et sur quels cœurs de processeur les threads s'exécutent

top -H -p {PROC_ID}

puis en appuyant sur f pour accéder à la sélection des champs, j pour activer la colonne du cœur du processeur, et Entrée à afficher.


Vous pouvez également utiliser ps , quelque chose comme ceci :

ps -mo pid,tid,%cpu,psr -p `pgrep BINARY-NAME`

La réponse ci-dessous n'est plus exacte depuis 2014

Les tâches ne dorment dans aucun noyau particulier. Et le planificateur ne saura pas à l'avance sur quel cœur il exécutera un thread, car cela dépendra de l'utilisation future de ces cœurs.

Pour obtenir les informations souhaitées, regardez dans /proc//task//status. Le troisième champ sera un 'R' si le thread est en cours d'exécution. Le sixième à partir du dernier champ sera le noyau sur lequel le thread s'exécute actuellement, ou le noyau sur lequel il a été exécuté en dernier (ou vers lequel il a été migré) s'il n'est pas en cours d'exécution.

31466 (bc) S 31348 31466 31348 34819 31466 4202496 2557 0 0 0 5006 16 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264232056 217976807456 0 0 0 137912326 18446744071581662243 0 0 17 3 0 0 0 0 0

Pas en cours d'exécution actuellement. Dernière exécution sur core 3.

31466 (bc) R 31348 31466 31348 34819 31466 4202496 2557 0 0 0 3818 12 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264231824 4235516 0 0 0 2 0 0 0 17 2 0 0 0 0 0

Fonctionne actuellement sur core 2.

Pour voir ce que signifient les autres champs, jetez un œil à la source du noyau Linux - en particulier le do_task_stat fonction en fs/proc/array.c ou Documentation/filesystems/stat.txt .

Notez que toutes ces informations peuvent être obsolètes au moment où vous les obtenez. C'était vrai à un moment donné entre le moment où vous avez fait le open appel sur le fichier dans proc et quand cet appel est retourné.


Les threads ne sont pas nécessaires pour lier un Core particulier (si vous ne l'avez pas épinglé). Par conséquent, pour voir la commutation continue du noyau, vous pouvez utiliser (une réponse modifiée de Dmitry) :

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep BINARY-NAME\`

Par exemple :

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep firefox\`

Linux
  1. Comment vérifier quelle version de Postgres est en cours d'exécution/installée

  2. Linux - Comment identifier quelle distribution Linux est en cours d'exécution ??

  3. Comment puis-je savoir quel processus utilise swap?

  4. Comment trouver quel processus provoque une utilisation élevée du processeur

  5. Comment puis-je voir la sortie dmesg à mesure qu'elle change?

Comment surveiller la température d'un processeur sur un système Redhat 7 Linux

Comment puis-je profiler du code C++ exécuté sous Linux ?

Comment tester sur quel port MySQL s'exécute et s'il peut être connecté ?

Comment puis-je connaître le chemin absolu d'un processus en cours d'exécution ?

Comment identifier la distribution Linux en cours d'exécution ?

Comment faire fonctionner tous les processus sur chaque cœur de processeur dans Ubuntu ?