Sous Linux, comment savoir combien de cœurs de la machine sont actifs?


13

Sous Linux, comment savoir combien de cœurs de la machine sont actifs? Je suppose qu'un test pour cela fonctionnerait également pour Android. J'ai besoin de savoir si plusieurs cœurs sont actifs. Je me demandais de tester cela en ayant un processus créant de nombreux threads. Est-il possible pour un thread d'interroger le processeur sur lequel il se trouve? de cette façon, on peut dire si plusieurs cœurs seront jamais utilisés sous une charge lourde. Je ne sais pas si je suis sur la bonne voie.


Par "actif", je suppose que vous voulez dire combien de cœurs sont actuellement utilisés? Ou voulez-vous dire combien de cœurs le système possède?
Mikel

oui, je voudrais dire combien sont actuellement utilisés

Réponses:


19

Vous pouvez utiliser toppour répertorier l'utilisation de chaque cœur. Appuyez sur 1 si nécessaire pour diviser la ligne CPU en une ligne distincte pour chaque cœur.

Vous pouvez également ajouter une colonne qui montre le dernier noyau utilisé pour chaque processus. Appuyez sur f pour afficher la liste des champs, puis sur j pour activer la colonne "P". Appuyez ensuite sur espace pour revenir à la vue en direct.


Alors, je devrais peut-être écrire et exécuter un programme qui génère de nombreux threads, puis exécuter la commande «top» dans la console?
likejudo

Je pense que cela devrait fonctionner. Appuyez simplement sur H lorsque vous êtes dans toppour répertorier les discussions séparément. Ou vous pouvez écrire un programme avec une boucle infinie et l'exécuter plusieurs fois.
Brian

Disons que j'écris le programme pour générer 100 threads, chacun effectuant des calculs longs et intensifs. Si je l'écris en Java (Android), y a-t-il une garantie que la JVM / KVM exécutera les threads sur différents cœurs et les exécutera sur tous les cœurs?
likejudo

1
Je ne sais pas - n'est-ce pas ce que votre expérience est censée comprendre?
Brian

J'ai besoin de tester un programme qui dit qu'il limitera le nombre de cœurs de processeur utilisés. Je vais chercher un peu plus. Merci!
likejudo

6

psa un champ appelé psrpour vous indiquer sur quel processeur un travail est exécuté.

Vous pouvez donc utiliser quelque chose comme:

ps -e -o psr= | sort | uniq | wc -l

Notez que la simple exécution de psce type rendra au moins un noyau actif.

Il vaut probablement mieux exécuter ceci:

tmp=/tmp/ps.$$
ps -e -o psr= > /tmp/ps.$$
sort -u "$tmp" | wc -l
rm "$tmp"

de cette façon, le sortet wcn'augmente pas le nombre.


Et si le système a 16 cœurs et que personne n'en utilise certains?

Il affiche ensuite 0 car aucun d'entre eux n'est utilisé. Je pense que c'est ce que demande la question.
Mikel

N'a pas vu de nouveaux commentaires à la question.

1
Bien sûr, en exécutant, psnous rendons actif au moins 1 cœur. ;-)
Mikel

Merci pour votre réponse. L'inconvénient est que je dois savoir si plusieurs cœurs sont actifs. Je me demandais de tester cela en ayant un processus créant de nombreux threads. Est-il possible pour un thread d'interroger le processeur sur lequel il se trouve? de cette façon, on peut dire si plusieurs cœurs seront jamais utilisés sous une charge lourde. Je ne sais pas si je suis sur la bonne voie.

3
htop

Cette commande fonctionne bien dans ubuntu et centos et montre graphiquement combien de CPU et comment sont-ils utilisés.

pour les centos:

yum install htop

pour ubuntu:

apt-get install htop

2

Essayez ce qui suit:

cat /proc/cpuinfo

Voici un lien vers un exemple Java Android.


1
Par "actif", je suppose qu'Anil signifie combien de cœurs sont actuellement utilisés et combien sont inactifs, c'est-à-dire une approximation de l'occupation du système. /proc/cpuinfovous indique simplement le nombre de cœurs du système, et même vous devrez faire plus que de cat /proc/cpuinfoprendre en compte HyperThreading.
Mikel

OK - ce n'était pas clair mais vous avez raison.
Amir Afghani,

0

Vous pouvez utiliser cat / sys / devices / system / cpu / possible ou cat / sys / devices / system / cpu / en ligne. Possible est principalement dans le cas où vous avez isolé un processeur pour exécuter un programme particulier.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.