Linux: Почему существует разница в выходе CPU% между «top -h -p <pid>» и «MpStat» для приложения с многопоточным приложеLinux

Ответить
Anonymous
 Linux: Почему существует разница в выходе CPU% между «top -h -p <pid>» и «MpStat» для приложения с многопоточным приложе

Сообщение Anonymous »

Я исследую разницу в поведении использования «top -h -p » и «mpstat -p All 2». Приложение моей компании представляет собой многопоточный процесс, в котором мы связываем каждый поток с определенными ядрами машины. Некоторые потоки выполняют чтения TCP/UDP, другие выполняют обработку сообщений и т. Д. Поэтому мы знаем, какие ядра процессора соответствуют потокам приложения. Обычно мы используем его как «mpstat -p All 2», чтобы давать статистику каждые 2 секунды. Первый набор результатов отбрасывается, поскольку это дает статистику с момента запуска компьютера. < /P>
У нас есть внутренняя программа для записи различных системных метрик, включая использование процессора. Эта программа собирает информацию от /proc /stat. Таким образом, мы знаем, что наш процесс сбора внутренней статистики и «MPStat» в основном дают те же результаты, с некоторым количеством дисперсии, как и когда /Proc /STAT читается. Пример ниже - через несколько секунд после начала процесса «mpstat»: < /p>
14:25:02 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
14:25:04 PM all 1.12 0.00 0.51 0.00 0.00 0.03 0.00 0.00 0.00 98.34
14:25:04 PM 0 3.83 0.00 0.55 0.00 0.00 0.00 0.00 0.00 0.00 95.63
14:25:04 PM 1 0.52 0.00 1.55 0.00 0.00 0.00 0.00 0.00 0.00 97.94
14:25:04 PM 2 0.57 0.00 0.57 0.00 0.00 0.00 0.00 0.00 0.00 98.86
14:25:04 PM 3 0.57 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.43
14:25:04 PM 4 1.14 0.00 0.57 0.00 0.00 0.00 0.00 0.00 0.00 98.30
14:25:04 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
14:25:04 PM 6 0.52 0.00 0.52 0.00 0.00 0.00 0.00 0.00 0.00 98.95
14:25:04 PM 7 0.53 0.00 1.05 0.00 0.00 0.00 0.00 0.00 0.00 98.42
14:25:04 PM 8 1.08 0.00 0.00 0.00 0.00 0.54 0.00 0.00 0.00 98.38
14:25:04 PM 9 1.07 0.00 0.53 0.00 0.00 0.00 0.00 0.00 0.00 98.40
14:25:04 PM 10 3.72 0.00 0.53 0.00 0.00 0.00 0.00 0.00 0.00 95.74
14:25:04 PM 11 3.76 0.00 0.54 0.00 0.00 0.00 0.00 0.00 0.00 95.70
14:25:04 PM 12 0.00 0.00 0.53 0.00 0.00 0.00 0.00 0.00 0.00 99.47
14:25:04 PM 13 0.53 0.00 0.53 0.00 0.00 0.00 0.00 0.00 0.00 98.93
14:25:04 PM 14 0.54 0.00 0.54 0.00 0.00 0.00 0.00 0.00 0.00 98.92
14:25:04 PM 15 0.00 0.00 0.54 0.00 0.00 0.00 0.00 0.00 0.00 99.46
< /code>
вне привычки мы обычно используем «top -h -p », чтобы посмотреть на CPU%. Вот пример для той же временной метки выше: < /p>
top - 14:25:04 up 156 days, 17:46, 2 users, load average: 0.37, 0.24, 0.28
Threads: 27 total, 0 running, 27 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.2 us, 0.6 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65801192 total, 50580288 free, 10531340 used, 4689564 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 52792560 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
51768 root -61 0 8500104 6.6g 8244 S 12.3 10.5 1300:13 app.udp.2
51765 root -61 0 8500104 6.6g 8244 S 12.0 10.5 1346:30 app.udp.1
51770 root -61 0 8500104 6.6g 8244 S 12.0 10.5 1281:05 app.udp.4
51769 root -61 0 8500104 6.6g 8244 S 11.6 10.5 1336:50 app.udp.3
51727 root -61 0 8500104 6.6g 8244 S 7.0 10.5 1134:38 app.IT.1
51728 root -61 0 8500104 6.6g 8244 S 7.0 10.5 1026:32 app.IT.2
51756 root -61 0 8500104 6.6g 8244 S 7.0 10.5 1156:19 app.IT.7
51737 root -61 0 8500104 6.6g 8244 S 6.6 10.5 1070:51 app.IT.3
51740 root -61 0 8500104 6.6g 8244 S 6.6 10.5 1052:50 app.IT.5
51747 root -61 0 8500104 6.6g 8244 S 6.6 10.5 1112:28 app.IT.6
51739 root -61 0 8500104 6.6g 8244 S 6.3 10.5 986:49.64 app.IT.4
51763 root -61 0 8500104 6.6g 8244 S 6.3 10.5 1075:28 app.IT.8
51721 root -61 0 8500104 6.6g 8244 S 4.3 10.5 661:24.82 app.sr.1
51725 root -61 0 8500104 6.6g 8244 S 4.3 10.5 672:52.52 app.sr.2
51660 root -61 0 8500104 6.6g 8244 S 2.3 10.5 629:07.48 app
51709 root -61 0 8500104 6.6g 8244 S 1.7 10.5 241:38.15 app.sr.0
51764 root -61 0 8500104 6.6g 8244 S 0.7 10.5 165:54.88 app.Stats
51720 root -61 0 8500104 6.6g 8244 S 0.3 10.5 15:07.43 app.sr.3
51710 root -61 0 8500104 6.6g 8244 S 0.0 10.5 8:35.44 app.sn.0
51711 root -61 0 8500104 6.6g 8244 S 0.0 10.5 5:53.78 app.sn.0
51712 root -61 0 8500104 6.6g 8244 S 0.0 10.5 19:39.35 app.sr.0
51713 root -61 0 8500104 6.6g 8244 S 0.0 10.5 0:26.52 app.D
51718 root -61 0 8500104 6.6g 8244 S 0.0 10.5 15:19.29 app.sr.1
51719 root -61 0 8500104 6.6g 8244 S 0.0 10.5 15:11.80 app.sr.2
51722 root -61 0 8500104 6.6g 8244 S 0.0 10.5 15:17.29 app.sr.4
51723 root -61 0 8500104 6.6g 8244 S 0.0 10.5 14:51.77 app.sr.5
51724 root -61 0 8500104 6.6g 8244 S 0.0 10.5 15:24.45 app.sr.6
< /code>
Топ-4 потока выделяются на ядра 2-5 (извините, я не включил последний использованный процессор для выхода «верхнего»). Я должен увидеть ядра процессора 2-5 при простоя 88-89% на выходе MPSTAT. Тем не менее, я не вижу этого в результатах MPSTAT выше. Почему существует разница ? Мое понимание этого заключается в том, что он берет процессор%, а затем делится на количество процессоров. При использовании «верхнего» результата «UDP.2»: 12,3% / 16 ядер = 0,77, что не соответствует результатам «mpStat». Я не думаю, что я хочу, чтобы взять «Top» CPU% и деление на CPUS-это то, что я хочу. Измерьте отдельное использование ядра процессора для процесса?


Подробнее здесь: https://stackoverflow.com/questions/797 ... d-and-mpst
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»