2016-12-14 10 views
1

У меня есть Embedded Linux(Kernel 2.6.37), работающий на ARM. По умолчанию top от busybox 1.13.2. И я построю procps-ng 3.3.11 через кросс-компиляцию для запуска на этом Linux. Я обнаружил, что процесс %cpu через top, полученный от busybox и procps-ng, отличается.% process% cpu output from top from busybox и procps-ng

Например, %cpu одного процесса, procps-ng top дисплей около 30%, но busybox top дисплей только около 10%. Итого %cpu от procps-ng top и busybox top - то же самое.
Затем я прочитал исходный код расчета busybox и procps-ng. Я обнаружил, что у них действительно есть другая формула расчета для одного процесса %cpu.


- busybox top: 
    CPU% = s->pcpu/sum(s->pcpu) * busy_cpu_ticks/total_cpu_ticks 
    (pcpu is delta of sys+user time between samples) 

- procps-ng top: 
    CPU% = s->pcpu/total_cpu_ticks 

Почему два проекта выбирают другую формулу расчета? Они предназначены для разных случаев применения? Спасибо!

ответ

0

обсудили этот вопрос с Procps-нг команды, а вот ключевой момент:

На 12/28/2016 03:12 PM, Craig Small писал:
Существует, вероятно, различные способы чтобы посмотреть на это. Первое, что я бы сказал, - это то, что busybox должен подражать или подражать тем, что должны делать основные программы, поэтому, если есть разница между busybox и реальной программой, я бы сказал, что busybox ошибочен. Это было бы похоже на файлы файлов busybox ls по-разному с реальными ls.

Давайте снова посмотрим на эту формулу:

  • BusyBox верх:
    CPU% = s->pcpu/sum(s->pcpu) * busy_cpu_ticks/total_cpu_ticks
    (PCPU является дельта SYS + время пользователя между образцами)

  • Procps-нг сверху:
    CPU% = s->pcpu/total_cpu_ticks

Теперь давайте переставить его:

  • BusyBox верх:
    CPU% = s->pcpu/total_cpu_ticks * busy_cpu_ticks/sum(s->pcpu)
    CPU% = top_CPU% * busy_cpu_ticks/sum(s->pcpu)
    (PCPU является дельта SYS + пользовательское время между отсчетами)

Это разница. busybox добавляет соотношение busy_cpu_ticks/sum(s->pcpu) к тому, что было разработано. Это соотношение может быть записано как:

RATIO = Sum(Usr + Nice + System + Irq + sirq + steal)/Sum(Usr + System)

Вы можете сортировать увидеть это в read_cpu_jiffy в источнике BusyBox. Я не понимаю, что это отношение пытается сделать или почему это необходимо. Особенно, когда программа, которую вы пытаетесь подражать, ее не имеет.

procps top говорит об общем количестве доступных jiffies в этом цикле, X% были использованы этой программой. busybox ставит там нечетное масштабирование. Поэтому, если процесс использует 10% процессора в его системе и пользовательских частях, верхние показывают 10%. Если для этого цикла Процесс выполняется в User и System в течение 50% времени, busybox будет показывать 20% (10% x 100/50).

Я не знаю, почему они это сделали.

Пожалуйста, обратитесь по ссылке дискуссионную для более подробной информации:
discussion: different process's %cpu output via top from busybox and procps-ng