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.


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.


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.


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

2

Tente o seguinte:

cat /proc/cpuinfo

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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.