Календар

September 2005
M T W T F S S
« Aug   Oct »
 1234
567891011
12131415161718
19202122232425
2627282930  

“Load average” тайни

Няколко минути се чудих, как и защо да напиша този пост. Дали да почна с това, че софтуерът с отворен код е нещ΀¾то, което може да преобрази един начинаещ(ламер) в (почти)истински специалист? Или да поразсъждавам на темата, защо да се мъча да разбера нещо, коеπ‚о така или иначе си работи и използвам ежедневно? Или пък да си задам фундаменталният въпрос “Абе, аз толкова ли съм тъп…. ?!” Всъщност, мога да продължа с увода и въпросите, които прехвърчаха из главата ми, докато наистина започнах да пиша следната история:

Основният ми сървър за наблюдение на мрежата е един двупроцесорен IBM x342, малко дъртичик, но с големи и бързи дискове. Общо взето – безотказен. На него съм натоварил JFFNMS (което тика 188 хоста и 2493 интерфейса), Smokeping, RANCID, блог-а на отдела, TACACS+ сървър и какво ли още не. Просто, не за това е историята :).
Средното натоварване на тази машина беше около 12 до 15 единици. В крайна сметка ги “свалих” до почти поносимите 8 до 10 единици. Ама и за това не е въпросната история :).
Истинското ровене и четене беше заради въпроса “какво всъщност се мери с load average”. Простият отговор е “Някакво натоварване на процесора през 1, 5 и 15 минути”. Лично аз бях доста изненадан да разбера, че зад тези три цифри стои доста акъл и от тях може да разберем доста за това как работи машината.
Обясненията за тях варират от обезкуражаващото “The load average tries to measure the number of active processes at any time. As a measure of CPU utilization, the load average is simplistic, poorly defined, but far from useless”, до съвсем подробното “The load average is the sum of the run queue length and the number of jobs currently running on the CPUs”. Ако погледнем в кода на ядрото, ще видим доста интересни работи, а именно:
– функцията за изчисление се извиква на всеки 5секунди;
– изчисленията се правят с числя с фиксиран знак, а не с плаваща запетая за да се постигне по-голямо бързодействие и да не се товари допълнително процесора (сметките са в адресното пространство на ядрото);
– сметките са “приблизителни”, но с достатъчна точност;
– информацията може да се използва за да се разбере, каква работа е свършила машината за последните 1, 5 и 15 минути;
– нещата не са никак прости 🙂

Наред с това, при подобен подход стоят и следните проблеми:
– показаното натоварване по-скоро е свързано не пряко с производителността на процесора, а по-скоро с дължината на опашката от операции, които чакат изчисления;
– стойностите се вземат по експоненциална, а не линейна зависимост, което затруднява анализа;
– трудно може да се планира капацитет и прогнозирано натоварване по такива стойности с цел разширение и подобрение на производителността;

За мое голямо удоволствие, като се зарових в проблематиката, в крайна сметка открих и доста полезни материали, свързани предимно с анализ и оптимизация на натоварването на Unix машините. Ако сте ограничени в рамките на определен хардуер, единствената възможност е да направите всичко “като по учебник”. Всъщност, въпросните статии са едно доста добро начало.
Мисля да започвам – просто нямам избор!

С уважение и респект към Neil Gunther и екипа на TeamQuest.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>