[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Что такое Load average и почему для одного процесса он может быть >> 1



On Fri, Aug 14, 2009 at 09:32:07AM +0300, Nick wrote:
> 13 августа 2009 г. 23:20 пользователь Ed (spied@yandex.ru) написал:
> > Artem Chuprina wrote:
> >>
> >> Тебе ж сказали: using OR WAITING FOR.  rdiff-backup жрет ресурсы так,
> >> что другим процессам приходится ждать их освобождения достаточно долго,
> >> чтобы их (этих процессов) накопилось немало.
> >>
> >> Я полагаю, что ждать им приходится скорее дискового ввода-вывода, нежели
> >> процессора.
> >
> > немного другой пример - делаю на тормозную usb fash:
> > dd if=/dev/zero of=/dev/sdc
> > la растёт до 4 и выше.
> > почему? больше никто к /dev/sdc не обращается.
> 
> По тому, что процесс хотел получить время для исполнения на
> процессоре, но не получил, так как ожидал I/O.
> Как сказали выше, LA показывает среднее количество процессов, не
> получивших время для исполнения, за несколько циклов. ИМХО если в
> течение четырёх циклов процесс не получил время на исполнение ни разу,
> то LA будет 4.
> В расчёт попадут все, кто не получил время на исполнение, кроме тех
> процессов, которые уснули по собственному желанию.

Коллеги, кончайте бред нести уже. Load average в линукс считается
проще некуда. В сети масса информации на эту тему. Лень искать в гугл
- загляните в собственную копию сырцов ядра (если таковая имеется).
Там related кода на три строчки.

Для ленивых привожу формулу (а-ля TeX):

L_{i+1} = q L_i + (1 - q)(N_r + N_u)

где L_i - load average в момент t_i, N_r - число процессов в состоянии TASK_RUNNING,
N_u - в состоянии TASK_UNINTERRUPTIBLE, и

    { exp(-5/60), для 1 min average
q = { exp(-5/(5*60)), для 5 min average
    { exp(-5/(15*60), для 15 min average

Интервал t_{i+1} - t_i = 5 сек при HZ = 100.    

Желающие проверить могут заглянуть в
linux/kernel/{timer.c,sched.c,shed.h}

-- 
Stanislav


Reply to: