ПредишенСледващото

Изявление на проблема

Наскоро, по време на интервю в голяма компания, аз бях помолен един прост въпрос, какво е натоварването, средно. Аз не знам колко много ми отговори правилно, но за себе си, си дадохме сметка, че точния отговор, аз наистина не знам.
Повечето хора вероятно знаят какво Load Average - средната стойност на товара, за определен период от време системата (1,5 и 15 минути). Можете също да научите някои от детайлите в тази статия. за това, как да го използвате. В повечето случаи, това знание е достатъчно, че ще бъде от полза за оценяването на натоварването на системата LA, но аз съм физик, и когато видя "средно за периода от време," Аз веднага стана интересно честота в определен интервал от време. И когато видя терминът "чака ресурси", става интересно, какво точно и колко време трябва да изчакате, както и колко тривиални процеси трябва да се изпълнява, за да получите кратко време висока LA. И най-важното, защо отговорите на тези въпроси не дава 5 минути работа с от Google? Ако тънкости ви данни като интересна, добре дошли при среза.

Нещо не е наред тук ...

За да започнете да се определи с това, което знаем. Като цяло, средната за зареждане е средният брой на изчакване процеси на процесорни ресурси за един от трите интервали от време. По същия начин, ние знаем, че стойността в нормално състояние е в интервала от 0 до 1, и съответства на единица 100% зареден едно ядро ​​система без претоварване. В бъдеще, аз ще разгледа системата като едноядрен, защото е по-лесно и по-показателно.
Какво не е наред?
На първо място. всички знаем, че средната аритметична от няколко стойности, равни на сбора на тези стойности, разделена на техния брой. От информацията, която имаме абсолютно неразбираемо е една и съща сума. Ако ние считаме, чака процеси през целия минута, средната стойност е равен на броя на процесите в минута, разделен на уреда. Ако приемем, че всеки втори - и броя на процесите във всяка броене намалени до границите и ще разделят по 60. По този начин, толкова по-висока честота на вземане на проби в набора от данни, по-малката средна стойност получаваме.
На второ място, това означава "в очакване на процес ресурси"? Ако се работи с голям брой бързи процеси наведнъж, всички от тях стоят на опашка, и логиката за кратък период от време, LA трябва да пораснат напълно трябва да се наблюдават неприемливи стойности и непрекъснат мониторинг постоянна състезания, които в нормална ситуация, не.
На трето място. едноядрен система 100% натоварване трябва да се даде Load Average, равен на 1. Но няма зависимост от параметрите на това ядро, въпреки че броят на процесите може да варира значително. Този въпрос може да бъде премахнат или правилното определение за "процес на изчакване ресурси", или наличието на някаква нормализиране на параметри на ядрото.

литература

Малко магия ядрената

можете да научите от тези материали, които всеки един от извикващия процес е даден ограничен период от време да се използва процесора, стандартна архитектура Intel за този период е 10 ms. Това е цяло стотна от секундата и в повечето случаи така е необходим процес много време. Все пак, ако някой процес е използвал всички определеното време, той се нарича хардуерно прекъсване и системата възвръща контролира процесор. Освен че се увеличава на всеки 10ms контра кърлежи (тактове контра). Тези кърлежи се разглеждат, тъй като стартиране на системата и на всеки 500 кърлежи (на всеки 5 секунди) се изчислява Load Average.
Код директно към изчислението е във файла с ядро ​​timer.c (кодът се дава за версия 2.4 до версия 2.6, всичко това е малко по-разпръснати, но логиката не се променя, а след това, аз също се надявам,, няма съществена промяна, но трябва да бъда честен, последните версии не са тествани) :

Както се вижда, тя се изчислява, като се превръща същите тези три стойности на LA, но не уточни какво се смята, и как тя се смята. Това не е проблем, count_active_tasks () функция код е в един и същи файл, просто по-горе:

А CALC_LOAD крие в sched.h заедно с няколко интересни константи:

От всички по-горе може да се каже, че всеки ядро ​​5 секунди изглежда много на целия процес е в състояние да работи и непрекъсваемо (между другото и в други UNIX системи, то не е) и за всяка от процеса увеличава брояча от FIXED_1, което е равно на 1<

Малко от ядрения разпад

Не, това не се е разпаднала на базовата система, просто формула CALC_LOAD, за които се счита, Load Average се основава на закона на радиоактивното разпадане. или просто експоненциално разпадане. Този закон е не друг, а решаването на диференциално уравнение, т.е., всяка нова стойност се изчислява от предходната скоростта и намаляване на броя на елементите зависи от броя на елементите.
Решаването на този диференциално уравнение е експоненциален закон:

Всъщност Заредете Среден е средната стойност не е в обичайния смисъл на средната аритметична стойност. Това дискретна функция изчислява периодично след стартиране на системата. Стойността на функцията е броят на работните процеси на системата от гледна точка на експоненциално разпадане.
Този дизайн видяхме, като презапише изчисляването на език CALC_LOAD математическата:

2 ^ 11 за нас в този случай е еквивалентен на този, който сте записали, че първоначално се добавят навсякъде, броят на нови процеси, както е изчислено в тези количества. А, където Т - измерване на интервала (1.5 или 15 минути).
Трябва да се отбележи, че за определен интервал от време и фиксирана интервал от време между измерванията доста експонат стойност може да бъде изчислена предварително и да се използват като константа, а това се прави на кода. Последната операция - отместването на правото от 11 бита ни дава желаната стойност Load Average се изхвърля по-нисък ред.

Сега, да знае как се изчислява LA, можете да се опита да отговори на въпросите, поставени в началото на статията:
1) Средната стойност е средната аритметична стойност, и е средната стойност на която се изчислява на всеки 5 секунди след стартиране на системата.
2) "очаква живот CPU» The предвид всички процеси са в състояние да работи и непрекъсваем. Значителна скокове Load Average ние не виждаме по време на продължителна мониторинг, като разлагаща експоненциална функция изглаждане играе роля (макар че като се има предвид периода на една минута може да се види).
3) И тук е един от най-интересните заключения. Фактът, че функция на товара средното за всяка стойност на п нараства монотонно с тази стойност в посочено по-горе, ако п

Въпреки това, с изключение на разположение от отговорите на въпроси първоначално разбор код и въвеждане на нови такива. Например, ако се прилага разлагащото показател за намаляване на броя на процесите в очакване? Ако ние считаме, радиоактивното разпадане, неговата скорост е ограничена само от броя на ядрата в нашия случай, когато голям брой процеси са всички заседна пропускателна способност на процесора. Също така, ако един сравнява получената формула с експоненциален закон, се вижда, че където Т - продължителност набор от данни интервал (1.5 или 15 минути). Така ядрото на разработчиците смятат, че процентът на намаление е обратно пропорционална Load Average измерване продължителността че няколко някакво влияние поне за мен. Е, не е трудно да се симулира ситуация, в която огромната стойност на LA не наистина ще покаже на натоварването на системата, или обратното.
В крайна сметка, изглежда, че за изчислението на Средна Load бе избрана функция изглаждане бързо намалява стойността му като цяло е логично да се даде окончателните цифри, но не показва реалното текущия процес. И ако някой да ми обясни защо на изложителя и защо в тази форма, ще бъде много оценявам.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!