Existe alguma maneira de medir o uso de CPU de um processo específico por núcleos?
Eu sei que o top é bom para medir o uso da CPU de todo o sistema por núcleos e o conjunto de tarefas pode fornecer informações sobre qual núcleo da CPU tem permissão para a execução do processo.
Mas como posso medir o uso de CPU de um processo específico por núcleos de CPU?
I
para alternar o modo Irix (em oposição ao modo Solaris ). Quandoon
, a porcentagem exibida na lista de processos é relativa a um thread da CPU . Quandooff
, a referida porcentagem é exibida em relação à capacidade geral da CPU (ou seja, TODOS os threads - também conhecidos como todos os núcleos).top
, aman
página diz,top -1
mas ela reclama! Seria bomtop -1 -n 1
obter uma única iteração do,top
mas com o uso de CPU separado exibido.Você pode usar:
Mostra o quanto cada núcleo está ocupado e atualiza automaticamente a cada segundo. A saída seria algo assim (em um processador quad-core):
Este comando não responde à pergunta original, ou seja, não mostra o uso do núcleo da CPU para um processo específico.
fonte
você pode usar
ps
.por exemplo, tendo o processo Python com dois threads ocupados na CPU dual core:
(PSR é a ID da CPU à qual o thread está atualmente atribuído)
você vê que os threads estão rodando no mesmo núcleo da CPU (por causa do GIL)
executando o mesmo script python em jython, vemos que o script está utilizando os dois núcleos (e há muitos outros serviços ou threads, que estão quase inativos):
você pode processar a saída e calcular a CPU total para cada núcleo da CPU.
Infelizmente, essa abordagem não parece ser 100% confiável, às vezes vejo que, no primeiro caso, os dois threads de trabalho estão separados para cada núcleo da CPU ou, no último caso, os dois threads estão ligados o mesmo núcleo ..
fonte
htop
oferece uma boa visão geral do uso individual do núcleofonte
A
ps
solução foi quase o que eu precisava e com alguma bash lançada faz exatamente o que a pergunta original pediu: para ver o uso por núcleo de processos específicosIsso mostra o uso por núcleo de processos multithread também.
Use como: cpustat `pgrep processname`` pgrep otherprocessname` ...
Observação: essas estatísticas são baseadas na vida útil do processo , não nos últimos X segundos, portanto, você precisará reiniciar o processo para zerar o contador.
fonte
Também fornecerá o uso da CPU dos primeiros 4 núcleos. Claro, se você tiver 32 núcleos, este comando ficará um pouco mais longo, mas será útil se você estiver interessado apenas em alguns núcleos.
Por exemplo, se você está interessado apenas no núcleo 3 e 7, então você pode fazer
fonte
Eu tive apenas esse problema e encontrei uma resposta semelhante aqui .
O método é definir
top
da maneira que você deseja e, em seguida, pressioneW
(W maiúsculo). Isso salvatop
o layout atual em um arquivo de configuração em $ HOME / .toprcEmbora isso possa não funcionar se você deseja executar vários
top
com configurações diferentes.Então, por meio do que considero uma solução alternativa, você pode gravar em diferentes arquivos de configuração / usar diferentes arquivos de configuração seguindo um destes procedimentos ...
1) Renomear o binário
Agora
.top2rc
será escrito em $ HOME2) Defina $ HOME como algum caminho alternativo, pois ele gravará seu arquivo de configuração no arquivo $ HOME / .binary-name.rc
Agora
.toprc
será gravado na pasta atual.Por meio do uso de comentários de outras pessoas para adicionar as várias contas de uso no topo, você pode criar uma saída em lote para essas informações e, posteriormente, unir as informações por meio de um script. Talvez não seja tão simples quanto seu script, mas descobri que o top fornece TODOS os processos para que mais tarde eu possa recapitular e capturar um estado durante uma longa execução que eu poderia ter perdido de outra forma (uso repentino inexplicável da CPU devido a processos perdidos)
fonte
Eu pensei
perf stat
que é o que você precisa.Mostra um uso específico de um processo quando você especifica uma
--cpu=list
opção. Aqui está um exemplo de monitoramento do uso da CPU ao construir um projeto usando operf stat --cpu=0-7 --no-aggr -- make all -j
comando. O resultado é:A coluna à esquerda é o índice específico da CPU e a coluna mais à direita é o uso da CPU. Se você não especificar a
--no-aggr
opção, o resultado será agregado. A--pid=pid
opção o ajudará se você deseja monitorar um processo em execução.Experimente
-a --per-core
ou-a perf-socket
também, que apresentará mais informações classificadas.Mais sobre o uso de
perf stat
pode ser visto neste tutorial: estatística perf cpu , tambémperf help stat
ajudará no significado das opções.fonte