2010-08-03 5 views
3

Sur mon serveur, il existe plusieurs processeurs (0-7). J'ai besoin d'exécuter le code parallèle, et chaque processus affilié avec un processeur, alors comment puis-je connaître les informations de CPU pour chaque processus?Comment obtenir les informations CPU d'un processus sous Linux?

Par exemple, si deux processus (# 0 et # 1) existent, et le processus # 0 utilise CPU 5 et processus # 1 utilise CPU 7.

comment puis-je savoir que par la programmation en C ou Fortran?

Répondre

0

Généralement, vous devez modifier l'affinité de l'unité centrale, car un processus peut migrer entre les processeurs: CPU Affinity (Linux Journal, 2003).

0

Plus généralement, pourquoi voulez-vous savoir? Le noyau Linux est très bon pour planifier les processus/threads afin de tirer le meilleur parti des cœurs disponibles.

+0

puisque je veux changer la vitesse du processeur de façon dynamique et faire des recherches –

1

En général, le système d'exploitation a pour tâche d'abstraire ces éléments des applications. Normalement, je vois mes applications (aussi simples que faire un grep sur un énorme fichier) changer le noyau du processeur de temps en temps.

Maintenant, si vous voulez forcer une application sur un noyau spécifique, vous pouvez définir manuellement l'affinité de la CPU.

J'ai écrit un logiciel assez étrange dans le passé et je n'ai jamais eu le désir de le savoir et/ou de le contrôler. Pourquoi voulez-vous voulez savoir?

2

Utilisez l'appel sched_getcpu(). Gardez à l'esprit qu'un processus/thread peut être programmé librement pour s'exécuter sur n'importe quel cpu/core disponible, donc un de vos processus pourrait tourner sur core 1 seconde, et sur core 2 la prochaine milliseconde. Vous pouvez restreindre les processeurs sur lesquels un processus est autorisé à s'exécuter avec ()

2

Je ne suis pas au courant d'un appel système sur Linux qui vous donnera des informations générales sur le processeur sur lequel tourne un thread. @nos est correct que sched_getcpu() vous dira sur quel processeur un thread est en cours d'exécution, mais seulement pour le contexte appelant.

Vous pouvez le faire en interrogeant le système de fichiers /proc. Cependant, si vous développez votre application autour de cette fonctionnalité, il est probable que vous deviez réexaminer votre conception.

Le fichier /proc/<pid>/stats contient un champ qui fournit le dernier processeur sur lequel le processus s'est exécuté. Vous auriez juste besoin d'analyser la sortie. (utilisez man proc pour voir la liste des champs).