Durante a execução mencoder
com threads = 4 (em uma CPU quad-core). Percebi que htop
isso não mostra seu verdadeiro uso da CPU, mas top
sim.
Parece que o htop está relatando apenas um núcleo . Isso é um bug / limitação do htop ? O que está acontecendo aqui?
Não há outras entradas para o mencoder exibidas em ps
ou htop
ou top
. Suponho que 100% significa que um núcleo está no máximo, mas até isso parece estranho para mim; e os outros núcleos?
Atualização: saída "Monitor do Sistema" adicionada
PID %CPU COMMAND
"top" 1869 220 mencoder
"htop" 1869 95 mencoder -noodml /media/...
"System Monitor" 1869 220 mencoder
Respostas:
Como você mesmo disse, pode clicar Hpara mostrar os tópicos do usuário.
Apenas para referência futura (e por diversão), vamos calcular a utilização da CPU!
Um pouco de fundo:
Em um sistema operacional moderno, há um agendador. O objetivo é garantir que todos os processos e seus threads tenham uma boa parte do tempo de computação. Não vou agendar muito (é realmente complicado). Mas, no final, há algo chamado fila de execução . É aqui que todas as instruções de todos os processos se alinham para aguardar sua vez de serem executadas.
Qualquer processo coloca suas "tarefas" na fila de execução e, quando o processador está pronto, ele as abre e as executa. Quando um programa entra em suspensão, por exemplo, ele se remove da fila de execução e retorna ao "fim da linha" quando estiver pronto para executar novamente.
Classificando nessa fila tem a ver com os processos Prioridade (também chamado de 'bom valor' - ou seja, um processo é agradável sobre os recursos do sistema).
O comprimento da fila determina a carga do sistema. Uma carga de 2,5, por exemplo, significa que existem instruções de 2,5 para todas as instruções com as quais a CPU pode lidar em tempo real .
A propósito, no Linux, essa carga é calculada em intervalos de 10 ms (por padrão).
Agora, sobre os valores de porcentagem de utilização da CPU:
Imagine que você tem dois relógios, um é chamado
t
e representa em tempo real . Mede um segundo por cada segundo. O outro relógio que chamamosc
. Só é executado se houver processamento a ser feito. Isso significa que somente quando um processo calcula algo o relógio funciona. Isso também é chamado de tempo da CPU. Todo e qualquer processo no sistema 'tem' um desses.A utilização do processador agora pode ser calculada para um único processo:
ou para todos os processos:
Em uma máquina com vários núcleos, isso pode resultar em um valor de 3,9, é claro, porque a CPU pode calcular quatro segundos de computação a cada segundo, se utilizada perfeitamente.
A Wikipedia fornece este exemplo:
Aqui está um pequeno trecho de python que faz isso
Em um mundo perfeito, você pode inferir disso que a carga do sistema é 100 - 66,93 = 33,1%. (Mas, na realidade, isso seria errado devido a coisas complexas como espera de E / S, agendamento de ineficiências e assim por diante)
Ao contrário da carga , esses cálculos sempre resultam em um valor entre 0 e o número de processadores, ou seja, entre 0 e 1 ou 0 a 100%. Agora não há como diferenciar entre uma máquina que está executando três tarefas, utilizando 100% da CPU, e uma máquina executando um milhão de tarefas, realizando quase todo o trabalho em qualquer uma delas, também a 100%. Se você está, por exemplo, tentando equilibrar vários processos em muitos computadores, a utilização da CPU é quase inútil. Carga é o que você quer lá.
Agora, na realidade, há mais de um desses relógios de ponto de processamento. Há um para aguardar E / S, por exemplo. Portanto, você também pode calcular a utilização de recursos de E / S.
Isso pode não ter sido útil em relação à pergunta original, mas espero que seja interessante. :)
fonte