No Linux, como saber quantos núcleos da máquina estão ativos?

13

No Linux, como saber quantos núcleos da máquina estão ativos? Presumo que um teste para isso funcionaria também para o Android. Preciso saber se mais de um núcleo está ativo. Estava pensando em testar isso fazendo com que um processo crie muitos threads. É possível que um thread consulte em qual processador está? Dessa forma, é possível saber se vários núcleos serão usados ​​sob carga pesada. Não tenho certeza se estou no caminho certo.

likejudo
fonte
Por "ativo", suponho que você quer dizer quantos núcleos estão atualmente em uso? Ou você quer dizer quantos núcleos o sistema possui?
Mikel
Sim, eu gostaria de dizer quantos estão em uso atualmente.

Respostas:

19

Você pode usar toppara listar a utilização de cada núcleo. Pressione 1, se necessário, para dividir a linha da CPU em uma linha separada para cada núcleo.

Você também pode adicionar uma coluna que mostra o último núcleo usado para cada processo. Pressione f para exibir a lista de campos e, em seguida, j para ativar a coluna "P". Em seguida, pressione espaço para retornar à exibição ao vivo.

Brian
fonte
Então, talvez eu deva escrever e executar um programa que gera muitos threads e, em seguida, execute o comando 'top' no console?
jan
Acho que deve funcionar. Basta pressionar H quando estiver toppara listar os tópicos separadamente. Ou você pode escrever um programa com um loop infinito e executá-lo várias vezes.
Brian
Digamos, eu escrevo o programa para gerar 100 threads, cada um executando uma computação longa e intensiva. Se eu escrever em Java (Android), há uma garantia de que a JVM / KVM executará os encadeamentos em núcleos diferentes e executará em todos os núcleos?
jan
1
Não sei - não é isso que seu experimento deve descobrir?
Brian
Preciso testar um programa que diz que restringirá o número de núcleos de processador sendo usados. Vou procurar um pouco mais. obrigado!
likejudo
6

pspossui um campo chamado psrpara informar em qual processador um trabalho está sendo executado.

Então você pode usar algo como:

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

Observe que apenas rodar psdessa maneira naturalmente tornará ativo pelo menos um núcleo.

Provavelmente melhor é executar isso:

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

Dessa forma, sorte wcnão aumentam a contagem.

Mikel
fonte
E se o sistema tiver 16 núcleos e ninguém estiver usando alguns deles?
Em seguida, ele imprime 0 porque nenhum deles está em uso. Eu acho que é isso que a pergunta está pedindo.
Mikel
Não viu novos comentários para a pergunta.
1
Obviamente, ao executar ps, estamos ativando pelo menos 1 núcleo. ;-)
Mikel
Obrigado pela sua resposta. A desvantagem é que preciso saber se mais de um núcleo está ativo. Estava pensando em testar isso fazendo com que um processo crie muitos threads. É possível que um thread consulte em qual processador está? Dessa forma, é possível saber se vários núcleos serão usados ​​sob carga pesada. Não tenho certeza se estou no caminho certo.
3
htop

Este comando funciona bem no ubuntu e no centos e mostra graficamente quantas CPUs e como elas estão sendo usadas.

para centos:

yum install htop

para o ubuntu:

apt-get install htop
Srihari Karanth
fonte
2

Tente o seguinte:

cat /proc/cpuinfo

Aqui está um link para um exemplo de Java Android.

Amir Afghani
fonte
1
Por "ativo", suponho que Anil significa quantos núcleos estão em uso no momento e quantos estão ociosos, ou seja, uma aproximação de quão ocupado o sistema está. /proc/cpuinfoapenas informa quantos núcleos o sistema possui e você precisaria fazer mais do cat /proc/cpuinfoque responder pelo HyperThreading.
Mikel
OK - isso não estava claro, mas você está certo.
Amir Afghani
0

Você pode usar cat / sys / devices / system / cpu / possible ou cat / sys / devices / system / cpu / online. Possível é principalmente no caso de você ter isolado um processador para executar algum programa específico.

Sabster
fonte