Como fazer com que o Ubuntu Linux 16.10 System Monitor% de utilização da CPU esteja de acordo com o ps ou o topo para um processo do Firefox na CPU quad core?

3

Eu gostaria de fazer com que a medição da utilização da CPU do Ubuntu Linux 16.10 System Monitor% concorde basicamente com ps "pcpu",% de utilização da CPU para um processo de navegador Firefox individual em execução em um desktop Lenovo Thinkstation com quad cores.

As Preferências do Monitor do Sistema Ubuntu Linux 16.10 estão atualmente definidas em:

Update interval in seconds: 3.00
   Enable smooth refresh: Yes
   Alert before ending or killing processes Yes
   Divide CPU usage by CPU count : Yes

A saída do ps para o processo do Firefox é:

$ ps -eo pid,rss,c,pcpu,cputime,cmd | grep firefox
2848 726024  3 3.5 00:50:23 /usr/lib/firefox/firefox -new-window

Depois de ler Linux: consulte Uso da CPU por um processo no último segundo , aprendi a ver o uso da CPU no último segundo. A saída principal para o processo do Firefox é:

$ top -b -d 1 | grep -in "firefox"
8: 2848 ratio    20   0 1980240 641516 115240 S  18.8 15.9  73:10.86 firefox

Para o aplicativo de navegador Firefox, recebo 3,5% de pcpu de ps -eo pid,rss,c,pcpu,cputime,cmd , enquanto que para o mesmo aplicativo de navegador Firefox, o Monitor de sistema do Ubuntu de aplicativo de GUI mostra 5% de utilização da CPU. Além disso, recebo 15,9% de uso da CPU de top -b -d 1 | grep - em "firefox". Quando isso é dividido por 4 para os 4 núcleos usados pelo nosso processador, recebo 4.0% para a saída do topo.

Como posso obter as ps ou as principais saídas e os valores do Monitor do sistema? Devo ativar a caixa de seleção Dividir uso da CPU por contagem de CPU?

    
por Frank 13.05.2016 / 16:42

1 resposta

6

Resposta rápida: não, isso não é realmente possível.

O problema aqui é primeiro com o conceito de porcentagem de CPU. Estritamente falando, isso na verdade não significa nada. Uma CPU tem apenas dois estados: está trabalhando em algo (100%) ou está aguardando.

Portanto, quando uma porcentagem de uso da CPU de 50% é relatada para um processo, isso não significa que apenas 50% da CPU esteja sendo usada. Isso significa que, durante um período de tempo específico, a CPU gastou 50% de seu tempo trabalhando no processo. Por exemplo, se o intervalo de atualização estiver definido como 1 segundo e a CPU gastar meio segundo trabalhando no processo N, a porcentagem da CPU para o processo N será mostrada como 50%.

Com isso em mente, podemos dar uma olhada nas várias maneiras de verificar% da CPU. Para ps , isso é medido como (de man ps ):

CPU usage is currently expressed as the percentage of time spent
running during the entire lifetime of a process.  This is not ideal,
and it does not conform to the standards that ps otherwise conforms to.
CPU usage is unlikely to add up to exactly 100%.

Assim, a porcentagem conforme relatada por ps é, na verdade, a média durante toda a vida útil do processo. Por contraste, top relatórios:

The task's share of the elapsed CPU time since the last screen
update, expressed as a percentage of total CPU time.

Eu assumo que gnome-system-monitor funciona de maneira semelhante e sua% de CPU é também a porcentagem de tempo que a CPU gastou em um determinado processo desde a última atualização. Meu conhecimento em C ++ é essencialmente inexistente, mas as seguintes linhas de proctable.cpp (parte do código-fonte gnome-system-monitor ) sugere que, de fato, a média está sendo usada desde a última atualização:

/* FIXME: total cpu time elapsed should be calculated on an individual basis here
** should probably have a total_time_last gint in the ProcInfo structure */
glibtop_get_cpu (&cpu);
app->cpu_total_time = MAX(cpu.total - app->cpu_total_time_last, 1);
app->cpu_total_time_last = cpu.total;

Portanto, não é possível concordar com ps e gnome-system-monitor porque ps mostra a porcentagem de tempo que a CPU gastou em um processo desde que o processo foi iniciado e gnome-system-monitor mostra a porcentagem desde a última atualização .

Também não há razão para imaginar por que você precisaria concordar com esses dois valores. Acho que o que temos aqui é uma espécie de problema XY . Você pode querer fazer uma nova pergunta descrevendo qual é o seu objetivo final, qual problema você está tentando resolver fazendo os dois valores concordarem.

    
por 13.05.2016 / 18:38