/proc/stat (Как узнать общую загруженность процессора?)

Модератор: Модераторы разделов

Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

/proc/stat

Сообщение Phobos »

Как узнать текущую загруженность процессора из /proc'а? Заглянул в /proc/stat:

Код: Выделить всё

 /proc$ cat stat
cpu 28608 75 8520 253991 1524 38 100 0
cpu0 28608 75 8520 253991 1524 38 100 0
intr 808853 732377 9136 0 0 0 1 2 0 1 0 0 1 378 0 16155 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 354 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50382 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 1629804
btime 1180613774
processes 49470
procs_running 1
procs_blocked 0

Я так понимаю вычислить можно из первой строки.

Код: Выделить всё

cpu 3357 0 4313 1362393
The amount of time, measured in units of USER_HZ (1/100ths of a second on most architectures), that the system spent in     user mode, user mode with low priority (nice), system mode, and the idle task, respectively. The last value should be USER_HZ times the second entry in the uptime pseudo-file.

Чтот несмотря на описание непойму как вычислить необходимое значение. Подскажите кто знает.
Спасибо сказали:

Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: /proc/stat

Сообщение uptime »

сумму первого, второго и третьего делим на сумму всех четырёх. Если надо в процентах, умножаем на сто.

успехов
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:

Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

Re: /proc/stat

Сообщение Phobos »

uptime писал(а):
01.06.2007 00:12
сумму первого, второго и третьего делим на сумму всех четырёх. Если надо в процентах, умножаем на сто.

успехов


вот спасибо :rolleyes: , насчет суммы я догадывался, но вот с остальным... Робачевского смотрел, там чет ничего об этом не нашел...
Спасибо сказали:

Аватара пользователя
Phobos
Сообщения: 87
ОС: Debian GNU/Linux Lenny

Re: /proc/stat

Сообщение Phobos »

хм, работать то оно работает, но весьма странно...
Вот например запускаешь top/htop, так там индикатор нормально отображает, т. е. если начал архивировать или компилять загрузка мгновенно выросла до 100%, а с помощью способа, описанного Вами, загрузка какая-то инертная что ли(компилишь пять минут ядро, а загрузка процентов 10 и потихоньку возрастает)

ps кстати что показывает load average? я в курсе что загрузку системы, но как интерпретировать эти значения?
Спасибо сказали:

wRAR
Сообщения: 372
ОС: ALT Linux Sisyphus

Re: /proc/stat

Сообщение wRAR »

Phobos писал(а):
07.06.2007 19:56
ps кстати что показывает load average?


Число процессов в состоянии R.
ALT Linux Team
SIM-IM Development Team
Antilamer
Спасибо сказали:

Аватара пользователя
kadavr
Сообщения: 55
ОС: MOPS 5.1

Re: /proc/stat

Сообщение kadavr »

компилишь пять минут ядро, а загрузка процентов 10 и потихоньку возрастает)

вот-вот. только у меня она и не возрастает. тупо 10% и всё. хотя на самом деле ближе к сотне
Спасибо сказали:

Аватара пользователя
indie
Сообщения: 87

Re: /proc/stat

Сообщение indie »

Phobos писал(а):
07.06.2007 19:56
хм, работать то оно работает, но весьма странно...
Вот например запускаешь top/htop, так там индикатор нормально отображает, т. е. если начал архивировать или компилять загрузка мгновенно выросла до 100%, а с помощью способа, описанного Вами, загрузка какая-то инертная что ли(компилишь пять минут ядро, а загрузка процентов 10 и потихоньку возрастает)

ps кстати что показывает load average? я в курсе что загрузку системы, но как интерпретировать эти значения?

Наверное ты вычисляешь среднюю загрузку процессора. Тебе нужно вычислять за какой то период времени.

кусок кода с одного проекта

Код: Выделить всё

/* возвращает число от 0 100 загруженность процессора за
 * период от предыдущего вызова функции до текущего
 * в случае ошибки возвращает -1 */
int CPU_usage(struct memory *mem)
{
    unsigned long long cpu = 0;
    unsigned long long nice = 0;
    unsigned long long system = 0;
    unsigned long long idle = 0;

    FILE *f = fopen("/proc/stat", "r");
    if (fscanf(f, "cpu %llu %llu %llu %llu", &cpu, &nice, &system, &idle) < 4)
    {
        fclose(f);
        return -1;
    }
    fclose(f);

    unsigned long long busy = cpu + nice + system;
    unsigned long long work = busy + idle;

    double usage = 100.0 * (busy - mem->last_busy) / (double) (work - mem->last_work);
    //LOG("usage: %.2f%%\n", usage);

    mem->last_busy = busy;
    mem->last_work = work;

    return (int) usage;
}
Спасибо сказали: