Como o tempo e o uso da CPU são iguais?

23

Na página da Wikipedia para o tempo de CPU , diz

O tempo da CPU é medido em tempos ou segundos. Freqüentemente, é útil medir o tempo da CPU como uma porcentagem da capacidade da CPU, chamada de uso da CPU.

Não entendo como uma duração de tempo pode ser substituída por uma porcentagem. Quando olho top, não %CPUme diz que MATLABestá usando 2,17 dos meus núcleos?

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

Questão

Para entender melhor o que é o uso da CPU, como eu próprio calculo o uso da CPU?

Jasmine Lognnes
fonte
Pressione '1' enquanto o 'top' estiver aberto para obter mais granularidade por núcleo.
Pedro
Esse é o número um ( 1).
Michael Hampton
Deixe o Linux mostrar o quão ocupado cada processador está com essa solicitação de linha de comando. mpstat -P ALL 5 3 entra para o status do multiprocessador 5 segundos 3 intervalos. Divida a% de CPU relatada pelo número de núcleos para obter a% de Ocupação média da CPU. O iostat -xm 5 3 enter informa quantos núcleos / CPU você tem disponível.
Wilson Hauck

Respostas:

32

O tempo da CPU é alocado em intervalos de tempo discretos (ticks). Por um certo número de intervalos de tempo, a CPU está ocupada, outras vezes não (o que é representado pelo processo inativo). Na figura abaixo, a CPU está ocupada por 6 das 10 fatias da CPU. 6/10 = 0,60 = 60% do tempo ocupado (e, portanto, haveria 40% do tempo ocioso).

insira a descrição da imagem aqui

Uma porcentagem é definida como "um número ou taxa que é expressa como um certo número de partes de algo dividido em 100 partes". Portanto, nesse caso, essas partes são fatias de tempo discretas e o algo é fatias de tempo ocupado versus fatias de tempo ocioso - a taxa de fatias de tempo ocupado para ocioso.

Como as CPUs operam em GHz (bilhões de ciclos por segundo). O sistema operacional divide esse tempo em unidades menores chamadas ticks. Eles não são realmente 1/10 de segundo. A taxa de ticks no Windows é de 10 milhões de ticks em um segundo e no Linux é sysconf(_SC_CLK_TCK)(geralmente 100 ticks por segundo).

Em algo como top, os ciclos ocupados da CPU são divididos em porcentagens de coisas como tempo do usuário e tempo do sistema. No topLinux e perfmon no Windows, você geralmente obtém uma exibição que ultrapassa 100%, porque o total é 100% * o número_de_cores_cpu.

Em um sistema operacional, é tarefa do agendador alocar essas fatias preciosas aos processos; portanto, o agendador é o que informa isso.

Kyle Brandt
fonte
1
As fatias de tempo não são medidas em bilionésimos de segundo. Eles não são tão curtos. É mais provável que estejam entre 0,1 e 10 ms. A resolução dos valores de tempo nas APIs não é a mesma que a taxa de interrupções do timer. Algumas chamadas de API no Linux têm horários especificados em nanossegundos, mas você não deseja que o cronômetro seja interrompido com frequência. Se você tivesse um milhão de interrupções por segundo, gastaria todo o tempo da CPU em alternâncias de contexto.
kasperd
2
Você quer dizer 1000 carrapatos? Todos os meus sistemas Linux são 1000 ticks (EL5 e EL6) ou 1000 ticks + tickless (EL7). Ou você quer dizer outra coisa?
Michael Hampton
1
A página do manual diz: "A variável correspondente está obsoleta." Não acho que se possa confiar nisso. Eu verifiquei a configuração do kernel em /boot/config-2.6.32-, seja qual for este mês ...
Michael Hampton
1
Ah, não, eles não são relatados da mesma forma. CLK_TCK é um valor escalado explicitamente para o espaço do usuário e, aparentemente, sempre é 100, independentemente de quantos ticks o kernel realmente usa. Encontrei boas explicações sobre SO ( 1 , 2 )
Michael Hampton
2
Também acho que o Windows "marca" a que a chamada da API se refere não é o mesmo que a frequência de interrupção do timer do Windows e, portanto, não é realmente comparável.
Michael Hampton
15

O tempo da CPU é o tempo em que o processo está usando a CPU - a conversão para uma porcentagem é feita pela divisão pela quantidade de tempo real que é passado.

Portanto, se eu tiver um processo que use 1 segundo do tempo da CPU por um período de 2 segundos, ele estará usando 50% da CPU.

No caso do seu processo MATLAB, 217% indica que ele usou 2,17 segundos de tempo de CPU por segundo no último intervalo de amostra - efetivamente, monopolizando 2 núcleos de CPU e ocupando um terço.

Shane Madden
fonte
5
Ou poderia estar usando 25% de 8 CPUs e parte de um nono.
Bob Jarvis - Restabelece Monica