LINUX.ORG.RU

загрузка процессора


0

0

Что можно использовать в Linux, чтобы получить текстовый поток из которого потом можно будет выдрать общую загрузку процессора?

anonymous

Ответ на: комментарий от Vitel

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

(user + nice + system + iowait + irq + softirq)/(user + nice + system + idle + iowait + irq + softirq)

?

anonymous
()
Ответ на: комментарий от anonymous

Для того, чтобы получить загрузку процессора в процентах за интервал времени:
1. В начале интервала считываем первые 4 числа из строки /proc/stat:
а. если конкретного процессора - то соответствующая строка в stat, начинающаяся с cpu\d
б. если среднюю по всем процессорам - то верхняя строка в stat, начинающаяся с cpu
Получаем U0, N0, S0, I0
2. В конце интервала повторяем операцию, получаем U1, N1, S1, I1
3. Вычисляем разности
Ud = U1 - U0
Nd = N1 - N0
Sd = S1 - S0
Id = I1 - I0
4. Вычисляем сумму разностей:
Total = Ud + Nd + Sd + Id
5. Вычисляем среднюю загрузку за интервал времени:
avg_load = 100% * (Ud + Nd + Sd)/Total

Вот пример кода на С:
/* determine average cpu load */

stat = fopen("/proc/stat", "r");
if(!stat) {
syslog(LOG_ERR, "Stat open failed!");
exit(0);
}

fscanf(stat, "cpu %lu %lu %lu %lu",
&cpu_c.u, &cpu_c.n, &cpu_c.s, &cpu_c.i);
fclose(stat);

cpu_d.u = cpu_c.u - cpu_p.u;
cpu_d.n = cpu_c.n - cpu_p.n;
cpu_d.s = cpu_c.s - cpu_p.s;
cpu_d.i = cpu_c.i - cpu_p.i;

total = cpu_d.u + cpu_d.n + cpu_d.s + cpu_d.i;

cpu_u = cpu_d.u/total;
cpu_s = cpu_d.s/total;
cpu_n = cpu_d.n/total;

cpu = cpu_u + cpu_s + cpu_n;

В результате cpu содержит число в интервале [0; 1]

Vitel ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.