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

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: