Wie kann man unter Linux feststellen, wie viele Kerne der Maschine aktiv sind?

13

Wie kann man unter Linux feststellen, wie viele Kerne der Maschine aktiv sind? Ich gehe davon aus, dass ein Test dafür auch für Android funktionieren würde. Ich muss wissen, ob mehr als ein Kern jemals aktiv ist. Ich habe mich gefragt, ob ich dies testen soll, indem ein Prozess viele Threads erstellt. Kann ein Thread abfragen, auf welchem ​​Prozessor er sich befindet? Auf diese Weise kann man feststellen, ob mehrere Kerne jemals unter hoher Last verwendet werden. Ich bin mir nicht sicher, ob ich auf dem richtigen Weg bin.

likejudo
quelle
Mit "aktiv" meine ich, wie viele Kerne werden derzeit verwendet? Oder meinst du, wie viele Kerne das System hat?
Mikel
Ja, ich möchte sagen, wie viele derzeit verwendet werden

Antworten:

19

Mit können Sie topdie Auslastung der einzelnen Kerne auflisten. Drücken Sie bei Bedarf 1, um die CPU-Reihe für jeden Kern in eine separate Reihe aufzuteilen.

Sie können auch eine Spalte hinzufügen, in der der zuletzt verwendete Kern für jeden Prozess angezeigt wird. Drücken Sie f, um die Feldliste aufzurufen, und j, um die Spalte "P" zu aktivieren. Drücken Sie dann die Leertaste, um zur Live-Ansicht zurückzukehren.

Brian
quelle
Vielleicht sollte ich also ein Programm schreiben und ausführen, das viele Threads erzeugt, und dann den Befehl 'top' in der Konsole ausführen?
LikeJudo
Ich denke das sollte funktionieren. Drücken Sie einfach H, wenn Sie topThreads separat auflisten möchten. Oder Sie schreiben ein Programm mit einer Endlosschleife und führen es einige Male aus.
Brian
Angenommen, ich schreibe das Programm, um 100 Threads zu erzeugen, von denen jeder eine lange, intensive Berechnung durchführt. Wenn ich es in Java (Android) schreibe, gibt es eine Garantie, dass die JVM / KVM die Threads auf verschiedenen Kernen und auf allen Kernen ausführt?
LikeJudo
1
Ich weiß nicht - soll Ihr Experiment das nicht herausfinden?
Brian
Ich muss ein Programm testen, das besagt, dass es die Anzahl der verwendeten Prozessorkerne einschränkt. Ich werde noch etwas suchen. Vielen Dank!
LikeJudo
6

psIn einem Feld wird psrangezeigt, auf welchem ​​Prozessor ein Auftrag ausgeführt wird.

Sie könnten also Folgendes verwenden:

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

Beachten Sie, dass durch das bloße Ausführen psmindestens ein Core aktiviert wird.

Wahrscheinlich ist es besser, dies auszuführen:

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

auf diese Weise erhöhen die sortund wcdie Zählung nicht.

Mikel
quelle
Was ist, wenn das System 16 Kerne hat und keiner von ihnen benutzt?
Dann wird 0 ausgegeben, da keine von ihnen verwendet wird. Ich denke, darum geht es in der Frage.
Mikel
Es wurden keine neuen Kommentare zu der Frage angezeigt.
1
Natürlich machen pswir durch das Laufen mindestens 1 Core aktiv. ;-)
Mikel
Danke für deine Antwort. Der Nachteil ist, dass ich wissen muss, ob mehr als ein Kern jemals aktiv ist. Ich habe mich gefragt, ob ich dies testen soll, indem ein Prozess viele Threads erstellt. Kann ein Thread abfragen, auf welchem ​​Prozessor er sich befindet? Auf diese Weise kann man feststellen, ob mehrere Kerne jemals unter hoher Last verwendet werden. Ich bin mir nicht sicher, ob ich auf dem richtigen Weg bin.
3
htop

Dieser Befehl funktioniert sowohl in Ubuntu als auch in Centos und zeigt grafisch an, wie viele CPUs und wie sie verwendet werden.

für centos:

yum install htop

für Ubuntu:

apt-get install htop
Srihari Karanth
quelle
2

Versuche Folgendes:

cat /proc/cpuinfo

Hier ist ein Link zu einem Java-Beispiel für Android.

Amir Afghani
quelle
1
Mit "aktiv" meine ich, dass Anil bedeutet, wie viele Kerne derzeit verwendet werden und wie viele sich im Leerlauf befinden, dh ungefähr, wie beschäftigt das System ist. /proc/cpuinfosagt Ihnen nur, wie viele Kerne das System hat, und selbst Sie müssten mehr tun, als cat /proc/cpuinfoHyperThreading zu berücksichtigen.
Mikel
OK - das war nicht klar, aber du hast recht.
Amir Afghani
0

Sie können cat / sys / devices / system / cpu / possible oder cat / sys / devices / system / cpu / online verwenden. Möglich ist vor allem, wenn Sie eine CPU isoliert haben, um ein bestimmtes Programm auszuführen.

Sabster
quelle