Вычисление пользователя, nice, sys, idle, iowait, irq и sirq из /proc / stat
/proc / stat показывает тики для пользователя, nice, sys, idle, iowait, irq и sirq следующим образом:
cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0
Как я могу рассчитать индивидуальные использования (в %) для пользователя, nice и т. д. С этими значениями? Как и значения, которые отображаются в " top " или "vmstat".
2 ответов
С Documentation/filesystems/proc.txt
:
(...) Эти цифры определяют количество времени, потраченного процессором на выполнение разные виды работы. Единицы времени находятся в USER_HZ (обычно сотые доли секунды).
поэтому, чтобы выяснить использование с точки зрения процентов, вам нужно:
- узнал, что
USER_HZ
на машине - узнайте, сколько времени прошло с момента загрузки системы.
второй легко: есть btime
строка в том же файле, который вы можете использовать для этого. Для USER_HZ
, проверьте как получить количество mili секунд в секунду.
этот код вычисляет пользовательское использование, распределенное по всем ядрам.
import os
import time
import multiprocessing
def main():
jiffy = os.sysconf(os.sysconf_names['SC_CLK_TCK'])
num_cpu = multiprocessing.cpu_count()
stat_fd = open('/proc/stat')
stat_buf = stat_fd.readlines()[0].split()
user, nice, sys, idle, iowait, irq, sirq = ( float(stat_buf[1]), float(stat_buf[2]),
float(stat_buf[3]), float(stat_buf[4]),
float(stat_buf[5]), float(stat_buf[6]),
float(stat_buf[7]) )
stat_fd.close()
time.sleep(1)
stat_fd = open('/proc/stat')
stat_buf = stat_fd.readlines()[0].split()
user_n, nice_n, sys_n, idle_n, iowait_n, irq_n, sirq_n = ( float(stat_buf[1]), float(stat_buf[2]),.
float(stat_buf[3]), float(stat_buf[4]),
float(stat_buf[5]), float(stat_buf[6]),
float(stat_buf[7]) )
stat_fd.close()
print ((user_n - user) * 100 / jiffy) / num_cpu
if __name__ == '__main__':
main()