Comment puis-je voir les CPU core un thread est en cours d'exécution dans?
En Linux, en supposant un thread pid [pid], à partir du répertoire /proc/[pid] nous pouvons obtenir de nombreuses informations utiles. Par exemple, ces fichiers proc, /proc/[pid]/statut/proc/[pid]/stat et /proc/[pid]/schedstat sont tous utiles. Mais comment puis-je obtenir le nombre de noyau CPU qu'un thread est en cours d'exécution dans? Si un thread est en état de veille, comment puis-je savoir qui de base, il sera exécuté après il est prévu de nouveau?
BTW, est-il un moyen de vider le processus(thread) de la liste de course et de dormir à des tâches pour chaque cœur de PROCESSEUR?
- envisager de passer à superuser.com - de meilleures chances d'obtenir une réponse.
- Cela peut être un Linux programmation de questions.
Vous devez vous connecter pour publier un commentaire.
La réponse ci-dessous n'est plus précis que de 2014
Tâches de ne pas dormir dans un noyau. Et le planificateur de ne pas savoir à l'avance quel cœur il va courir un fil, car cela va dépendre de la future utilisation de ces carottes.
Pour obtenir les informations que vous voulez, regardez dans /proc/<pid>/tâche/<tid>/statut. Le troisième champ sera un " R " si le thread est en cours d'exécution. De la sixième à partir de la dernière champ sera le noyau de la thread est actuellement en cours d'exécution, ou la base ce dernier a couru sur le (ou a été migré vers) si ce n'est pas en cours d'exécution.
Pas en cours d'exécution. La dernière exécution sur la base de 3.
Actuellement en cours d'exécution sur le noyau 2.
Pour voir ce que les autres champs de la moyenne, ont un coup d'oeil à la source du noyau Linux, plus précisément le
do_task_stat
fonction dansfs/proc/array.c
ouDocumentation/filesystems/stat.txt
.Noter que toutes ces informations peuvent être obsolètes par le temps que vous l'obtenez. C'était vrai à un certain moment entre le moment où vous avez fait le
open
appel sur le fichier proc et lorsque cet appel renvoyé.status
fichier n'est pas l'utilisation de ce format de plus, voir les autres réponsesLe "top" de la commande peut aider à cela, il n'a pas de PROCESSEUR-liste regroupant des threads, mais plutôt que vous pouvez voir la liste des threads (probablement pour un seul processus) et qui cœurs de PROCESSEUR que les fils sont en cours d'exécution sur par
top -H -p {PROC_ID}
puis en appuyant sur f pour aller dans le champ de sélection, j pour activer le PROCESSEUR de base de la colonne, et Entrée pour afficher.
Les threads ne sont pas nécessaires pour un particulier de Base (si vous n'avez pas l'épingler sur l'écran). Donc de voir l'continue de commutation de la base vous pouvez utiliser (une modification de la réponse de Dmitry):
Par exemple:
Vous pouvez également utiliser
ps
, quelque chose comme ceci:Cela peut être fait avec
top
de commande. La valeur par défauttop
sortie de commande de ne pas montrer ces détails. Pour afficher ce détail, vous devrez appuyer sur f enfoncée tout en haut à l'interface de commande, puis appuyez sur j(appuyez sur Entrée touche après avoir appuyé sur j). Maintenant, la sortie va vous montrer les détails concernant le processus et le processeur de son fonctionnement. Un exemple de résultat est présenté ci-dessous.La
P
colonne dans le résultat indique le nombre de cœurs de processeur où le processus est actuellement en cours d'exécution. Le suivi de cette pour quelques minutes vous permettra de vous faire comprendre qu'un pid est de commutation de cœurs de processeur entre les deux. Vous pouvez également vérifier si votre pid pour lequel vous avez défini affinité est en cours d'exécution sur la base uniquementtop
f écran de navigation ( un système live exemple ) :Accepté la réponse n'est pas exacte. Voici les façons de savoir quel est le PROCESSEUR exécute le thread (ou a été le dernier à exécuter) au moment de l'enquête:
/proc/<pid>/task/<tid>/stat
. Avant de le faire, assurez-vous que le format n'a pas changé avec la dernière version du noyau. La Documentation n'est pas toujours à jour, mais au moins, vous pouvez essayer https://www.kernel.org/doc/Documentation/filesystems/proc.txt. De cette écriture, il sera le 14e valeur à partir de la fin.ps
. Soit donner-F
d'un commutateur ou d'utiliser une sortie de modificateurs et ajoutez le codePSR
.f
vous amène à la sélection de colonne)F2
vous arrive à l'écran de configuration)htop
pointe. Fonctionne bien.