Расчет пользователя, nice, sys, idle, iowait, irq и sirq из / proc / stat - PullRequest
8 голосов
/ 04 сентября 2011

/ proc / stat показывает тики для пользователя, nice, sys, idle, iowait, irq и sirq следующим образом:

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

Как рассчитать индивидуальные использования (в%) для пользователя, приятно и т. д. с этими значениями?Как и значения, которые отображаются в «top» или «vmstat».

Ответы [ 2 ]

11 голосов
/ 04 сентября 2011

Этот код вычисляет распределение пользователей по всем ядрам.

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()
4 голосов
/ 04 сентября 2011

С Documentation/filesystems/proc.txt:

(...) Эти числа указывают количество времени, которое ЦП потратил на выполнение разные виды работ. Единицы времени в USER_HZ (обычно сотые доли секунды).

Итак, чтобы рассчитать коэффициент использования в процентах, вам необходимо:

  • Узнайте, что USER_HZ на машине
  • Узнайте, сколько времени прошло с момента загрузки системы.

Второй прост: в этом же файле есть строка btime, которую вы можете использовать для этого. Для USER_HZ, посмотрите Как получить количество миллисекунд за секунду .

...