W systemie Linux, jak stwierdzić, ile rdzeni komputera jest aktywnych?

14

W systemie Linux, jak stwierdzić, ile rdzeni komputera jest aktywnych? Zakładam, że test na to również działałby na Androidzie. Muszę wiedzieć, czy więcej niż jeden rdzeń jest kiedykolwiek aktywny. Zastanawiałem się, czy to sprawdzić, ponieważ proces tworzy wiele wątków. Czy wątek może zapytać, na którym procesorze się znajduje? w ten sposób można stwierdzić, czy wiele rdzeni będzie kiedykolwiek używanych pod dużym obciążeniem. Nie jestem pewien, czy jestem na dobrej drodze.

likejudo
źródło
1
Przez „aktywne” zakładam, że masz na myśli, ile rdzeni jest aktualnie używanych? Czy masz na myśli, ile rdzeni ma system?
Mikel
tak, chciałbym powiedzieć, ile jest obecnie w użyciu

Odpowiedzi:

19

Możesz użyć, topaby wyświetlić listę wykorzystania każdego rdzenia. Naciśnij 1, jeśli to konieczne, aby podzielić rząd procesora na osobny rząd dla każdego rdzenia.

Możesz także dodać kolumnę, która pokazuje ostatnio używany rdzeń dla każdego procesu. Naciśnij f, aby wyświetlić listę pól, a następnie j, aby aktywować kolumnę „P”. Następnie naciśnij spację, aby powrócić do podglądu na żywo.

Brian
źródło
Więc może powinienem napisać i uruchomić program, który spawnuje wiele wątków, a następnie uruchomić polecenie „top” w konsoli?
likejudo
Myślę, że to powinno działać. Po prostu naciśnij H, gdy jesteś topna liście, aby osobno wyświetlić listę wątków. Możesz też napisać program z nieskończoną pętlą i uruchomić go kilka razy.
Brian
Powiedzmy, że piszę program do odrodzenia 100 wątków, z których każdy wykonuje długie, intensywne obliczenia. Jeśli napiszę to w Javie (Android), czy istnieje gwarancja, że ​​JVM / KVM uruchomi wątki na różnych rdzeniach i uruchomi je na wszystkich rdzeniach?
likejudo
1
Nie wiem - czy to nie powinien być twój eksperyment?
Brian
Muszę przetestować program, który mówi, że ograniczy liczbę używanych rdzeni procesora. Przeszukam jeszcze trochę. dzięki!
likejudo
6

psma pole nazywane psrinformacją, na którym procesorze działa zadanie.

Więc możesz użyć czegoś takiego:

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

Pamiętaj, że samo działanie w psten sposób spowoduje, że przynajmniej jeden rdzeń będzie aktywny.

Prawdopodobnie lepiej jest uruchomić to:

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

w ten sposób sorti wcnie zwiększaj liczby.

Mikel
źródło
Co jeśli system ma 16 rdzeni i nikt z nich nie korzysta?
Następnie wypisuje 0, ponieważ żadne z nich nie jest używane. Myślę, że o to właśnie pyta.
Mikel
Nie widziałem nowych komentarzy do pytania.
1
Oczywiście, uruchamiając ps, aktywujemy co najmniej 1 rdzeń. ;-)
Mikel
Dziękuję za odpowiedź. Wadą jest to, że muszę wiedzieć, czy więcej niż jeden rdzeń jest kiedykolwiek aktywny. Zastanawiałem się, czy to sprawdzić, ponieważ proces tworzy wiele wątków. Czy wątek może zapytać, na którym procesorze się znajduje? w ten sposób można stwierdzić, czy wiele rdzeni będzie kiedykolwiek używanych pod dużym obciążeniem. Nie jestem pewien, czy jestem na dobrej drodze.
3
htop

To polecenie działa dobrze zarówno w Ubuntu, jak i centos i pokazuje graficznie, ile procesorów i jak są one używane.

dla centos:

yum install htop

dla ubuntu:

apt-get install htop
Srihari Karanth
źródło
2

Spróbuj wykonać następujące czynności:

cat /proc/cpuinfo

Oto link do przykładu Java na Androida.

Amir Afghani
źródło
1
Przez „aktywny” zakładam, że Anil oznacza, ile rdzeni jest aktualnie w użyciu, a ile jest w stanie bezczynności, tj. Przybliżone natężenie ruchu w systemie. /proc/cpuinfomówi tylko, ile rdzeni ma system, a nawet ty musiałbyś zrobić więcej niż cat /proc/cpuinfowziąć pod uwagę HyperThreading.
Mikel
OK - to nie było jasne, ale masz rację.
Amir Afghani
0

Możesz użyć cat / sys / devices / system / cpu /ossible lub cat / sys / devices / system / cpu / online. Możliwe jest głównie, jeśli izolujesz procesor, aby uruchomić jakiś konkretny program.

Sabster
źródło