Re: Что такое Load average и почему для одного процесса он может быть >> 1
On Fri, Aug 14, 2009 at 05:54:31PM +0400, Ed wrote:
> Stanislav Maslovski wrote:
>>>>>> немного другой пример - делаю на тормозную usb fash:
>>>>>> dd if=/dev/zero of=/dev/sdc
>>>>>> la растёт до 4 и выше.
>>>>>> почему? больше никто к /dev/sdc не обращается.
>>>>>>
>>>> Для ленивых привожу формулу (а-ля TeX):
>>>>
>>>> L_{i+1} = q L_i + (1 - q)(N_r + N_u)
>>>>
>>> так и не понял, как с помощью этой формулы при записи в один поток
>>> получатся LA>4
>>>
>>
>> Когда процессов в runqueue (N_r) больше, чем 1, load average может
>> быть больше, чем один. Чтобы runqueue заполнилась, надо систему
>> порядочно нагрузить. Заполнение runqueue происходит потому, что под
>> нагрузкой процессы не успевают выполнить текущую работу за
>> отведенный квант и заснуть.
>>
>
> теоретически запись на usb flash на остальные процессы (не работающие с
> этим устройством) влиять не должна.
Ввод-вывод порождает массу прерываний, это во-первых. Во-вторых,
процесс, занятый активным вводом-выводом, проводит изрядное количество
времени в kernel mode, что при CONFIG_PREEMPT_NONE=y (дефолт в
дебиане) означает, что ему будет доставаться больше CPU-time, чем
остальным процессам (а их, активируемых по таймеру, например, в
дестопной системе немало, плюс еще kernel threads). В результате имеем
то, что имеем.
>> Не стоит также забывать, что в линуксе куча kernel threads в добавок к
>> процессам в userspace.
>
> угу. вот детали и интересуют :)
Детали тебе покажет atop.
--
Stanislav
Reply to: