Почему существует разница между суммой (stime + utime) загрузки процессора всеми процессами и общей загрузкой процессора из / proc / stat в Linux? - PullRequest
1 голос
/ 03 мая 2019

Мне нужно рассчитать общее использование ЦП моего устройства Linux за некоторое время (1-5 секунд) и список процессов с указанием времени их использования ЦП.Программа должна быть разработана и реализована на C ++.Я предполагаю, что сумма времени всех процессорных ЦП будет равна общему значению для всего ЦП.На данный момент процессор, который я использую, является многоядерным (2 ядра).

Согласно Как определить потребление ресурсов процессора и памяти изнутри процесса? можно вычислить все "ошибки""доступно в системе с момента запуска, используя значения для" cpu "в / proc / stat.Если вы теперь производите выборку значений в два момента времени и сравниваете значения user, nice, system и idle в двух временных точках, вы можете рассчитать среднее использование ЦП в этом интервале.Формула будет выглядеть следующим образом:

totalCPUUsage = ((user_aft - user_bef) + (nice_aft - nice_bef) + (system_aft - system_bef)) / 
((user_aft - user_bef) + (nice_aft - nice_bef) + (system_aft - system_bef) + (idle_aft - idle_bef)) * 100 %

Согласно Как рассчитать использование ЦП процессом для PID в Linux из C? используемые jiffies для одного процесса можно рассчитать, добавив utimeи stime из / proc / $ {PID} / stat (столбцы 14 и 15 в этом файле).Когда я теперь вычисляю эту сумму и делю ее на общее количество jiffies в анализируемом интервале, я принимаю формулу для одного процесса равной

processCPUUsage = ((process_utime_aft - process_utime_bef) + (process_stime_aft - process_stime_bef)) / 
((user_aft - user_bef) + (nice_aft - nice_bef) + (system_aft - system_bef) + (idle_aft - idle_bef)) * 100 %

Когда я теперь суммирую значения для всех процессов иЕсли сравнить его с общим расчетным использованием ЦП, большую часть времени я получаю немного более высокое значение для агрегированного значения (хотя значения довольно близки для всех различных нагрузок ЦП).

Может кто-нибудь объяснить мне, чтопричина этого?Существуют ли ресурсы ЦП, которые используются более чем одним процессом и, таким образом, учитываются в моем накоплении дважды или более?Или я просто что-то здесь упускаю?Я не могу найти дополнительную подсказку на странице справки Linux для файловой системы proc (https://linux.die.net/man/5/proc).

Заранее спасибо!

...