Получить статистику использования процессора из программы на C

8

Я хочу прочитать статистику использования ЦП из программы на Си, меня интересует процент использования ЦП, время кражи и т. Д. Эта статистика отображается в 3-й строке topкоманды.

Я попытался проанализировать topвывод с помощью awk( top -n 1 -b | awk '{print $0}'), но кажется, что он topдает всегда одни и те же «вымышленные» значения, прежде чем он начнет показывать правильную статистику.

Есть ли способ из кода или путем анализа вывода какой-либо команды, чтобы получить статистику использования ЦП?

Редактировать:

Платформа Linux

Спасибо.

0xFF
источник
Конечно, но стандартного способа не существует. Точные целевые ОС (ы).
Jlliagre

Ответы:

5

Вы хотите прочитать первые несколько строк /proc/stat. Вам нужно будет прочитать его дважды, с разницей в измеренном времени, и вычесть первый набор чисел из второго. Линии выглядят так:

cpu  1526724 408013 600675 541100340 2861417 528 14531 0 0 0
cpu0 344507 77818 251244 134816146 1119991 324 13283 0 0 0
cpu1 502614 324065 179301 133991407 1631824 136 906 0 0 0
cpu2 299080 3527 79456 136144067 103208 59 255 0 0 0
cpu3 380521 2602 90672 136148719 6393 7 86 0 0 0
intr 2111239193 344878476 16943 ...

Первая строка является агрегированной для всех ядер. Следующие строки показывают каждое ядро. Когда вы видите строку, которая начинается с intr, вы знаете, чтобы прекратить анализ.

Каждое число - это количество времени, которое процессор провел в определенном состоянии. Единицы обычно составляют сотые доли секунды. Поля user, nice, system, idle, iowait, irq, softirq, steal, guest, и guest_nice.

Официальная документация - это, конечно, исходный код. Если у вас есть копия исходного кода ядра Linux, обратите внимание fs/proc/stat.c, в частности, на show_statфункцию.

Дэвид Шварц
источник
Знаете ли вы, с какой частотой обновляется proc / stat? как раз в 1 мс или что-то, спасибо.
0xFF
Они не настоящие файлы. Их содержимое рассчитывается при их открытии.
Дэвид Шварц
3

В Интернете есть пример , показывающий, как читать /proc/pid/statна C.

Вы можете прочитать utimeили stimeзначения в два разных момента и вычислить желаемую статистику использования процессора. (Я думаю, что topиспользует эти необработанные данные тоже.)

(Я забыл: это специфично для Linux.)

Стефан Хименес
источник