Kreator za kurtyną

obliczanie średniej obciążenia jest najlepiej postrzegane jako średnia ruchoma procesów w kolejce uruchomieńw Linuksie oznaczonych jako running lub uninterruptible. Słowa „myśl” zostały wybrane z jakiegoś powodu: tak powinny być interpretowane miary, ale nie dokładnie to, co dzieje się za rzeczywistością. To właśnie w tym momencie naszej podróży rzeczywistość itall, podobnie jak mechanika Quantum, wydaje się nie pasować do intuicyjnego sposobu, w jaki się prezentuje.,

średnie obciążenie wyświetlanych poleceń top i uptime jest pobierane bezpośrednio z / proc. Jeśli używasz jądra Linuksa w wersji 2.4 lub nowszej, możesz samodzielnie odczytać te wartości za pomocą polecenia cat/proc / loadavg. Jednak to jądro Linuksa wytwarza te wartości w /proc. Dokładnie, timer.c i sched.h pracujcie razem nad obliczeniami. Aby zrozumieć, co timer.c robi na życie, koncepcja krojenia czasu i licznik jiffy pomagają dopełnić obraz.

w jądrze Linuksa każdy proces dyspozytorski otrzymuje określoną ilość czasu na procesor na wysyłkę., Domyślnie wartość ta wynosi 10 milisekund lub 1/100 sekundy. W tym krótkim czasie Proces jest przypisany fizyczny procesor, na którym można uruchomić jego instrukcje i pozwolić na przejęcie procesora. Najczęściej proces rezygnuje z kontroli przed uruchomieniem 10ms poprzez wywołania gniazd, wywołania We / Wy lub wywołania z powrotem do jądra. (Na procesorze Intel 2,6 GHz 10ms to wystarczająco dużo czasu, aby wystąpić maksymalnie 50 milionów instrukcji. To więcej niż wystarczający czas przetwarzania dla większości cykli aplikacji.,) Jeśli proces wykorzystuje swój czas CPU wynoszący 10 ms, to sprzęt wywołuje przerwanie, a jądro odzyskuje kontrolę nad procesem. Jądro następnie skłania proces do tego, by być takim Wieprzem. Jak widać, timeslicing jest ważną koncepcją projektową, dzięki której Twój system będzie wyglądał płynnie na zewnątrz. Jest to również pojazd, który wytwarza średnie wartości obciążenia.

wycinek czasu 10ms jest wystarczająco ważnym pojęciem, aby uzasadnić samą nazwę: wartość kwantowa., Nie zawsze jest coś specjalnego o 10ms, ale jest o wartości kwantowej w ogóle, ponieważ niezależnie od wartości, na jaką jest ustawiona (jest konfigurowalna, ale 10ms jest domyślne), kontroluje jak często co najmniej Kernel pobiera kontrolę nad systemem z aplikacji. Jednym z wielu rdzeni, które jądro wykonuje, gdy przejmuje kontrolę, jest licznik jiffies incrementits. Licznik jiffies mierzy liczbę kleszczy Quantum, które wystąpiły od czasu uruchomienia systemu. Kiedy zegar Quantum wyskoczy, timer.c jest wprowadzane w funkcji w jądrze o nazwie timer.,c: do_timer (). Tutaj wszystkie przerwania są wyłączone, więc kod nie działa z ruchomymi celami. Licznik jiffies jest zwiększany o 1,A obliczanie średniej obciążenia jest sprawdzane, aby sprawdzić, czy powinno być computed.In w rzeczywistości obliczenie średniej obciążenia nie jest tak naprawdę obliczane na jednym tyknięciu kwantowym, ale kierowane przez wartość zmiennej, która jest oparta na ustawieniu częstotliwości Hz i testowana na każdym tyknięciu kwantowym. (HZ nie musi być skonfigurowane z częstotliwością MHz procesora. Ta zmienna ustawia pulserate konkretnej aktywności jądra Linuksa i 1HZ równa się jeden quantum or10ms domyślnie.,) Chociaż wartość HZ może być skonfigurowana w niektórych wersjach jądra, Zwykle ustawia się ją na 100. Kod obliczeniowy wykorzystuje wartość HZ do określenia częstotliwości obliczeniowej. Dokładnie, timer.c: funkcja calc_load() uruchomi algorytm uśredniania co 5 * HZ, czyli mniej więcej co pięć sekund. Poniżej znajduje się Ta funkcja w itsentirety:

tablica avenrun zawiera trzy średnie, o których mówiliśmy. Funkcja Thecalc_load () jest wywoływana przez update_times (), również znajdującą się w timerze.c, oraz jest kodem odpowiedzialnym za dostarczenie funkcji calc_load () z parametrem, Niestety ta funkcja nie ujawnia jejnajbardziej interesujący aspekt: samo obliczenie. Można to jednak łatwo znaleźć w sched.h, nagłówek używany przez większość jądra code.In tam dostępne jest makro CALC_LOAD i powiązane z nim wartości:

tutaj opony spotykają się z nawierzchnią. Teraz powinno być dowodem na to, że rzeczywistość nie wydaje się pasować do iluzji. Przynajmniej to z pewnością nie jest to rodzaj uśredniania, którego większość z nas uczy się w szkole. Ale mimo to jest to średnia., Technicznie jest to funkcja wykładnicza i jest średnią ruchomą z wyboru dla większości systemów UNIX, jak również Linuksa. Przyjrzyjmy się jego szczegółom.

makro przyjmuje trzy parametry: obciążenie-średnie wiadro (jeden z trzech elementów w avenrun), stały wykładnik oraz liczbę uruchomionych / niezakłóconych procesów znajdujących się obecnie w kolejce uruchamiania. Możliwe stałe wykładnicze są wymienione powyżej: EXP_1 dla 1-minutowej przerwy, EXP_5 dla 5-minutowej przerwy oraz EXP_15 dla 15-minutowej przerwy. Ważnym punktem do zauważenia jest to, że wartość maleje wraz z wiekiem., Stałe są liczbami magicznymi, które są obliczane przez funkcję matematyczną pokazaną poniżej:

gdy x=1, to y=1884; gdy x=5, to y=2014; a gdy x=15, to y=2037. Celem liczb magicznych jest to, że pozwala makro CALC_LOAD używać precyzyjnej reprezentacji stałych punktów ułamków. Liczby magicnumbers są wtedy niczym więcej niż mnożnikami używanymi w stosunku do średniej runningload, aby uczynić ją średnią ruchomą. (Matematyczne odwzorowanie punktowe wykracza poza zakres tego artykułu, więc nie będę się tłumaczył.,) Funkcja rozkładu wykładniczego polega na tym, że nie tylko wygładza spadki i kolce, utrzymując użyteczną linię trendu, ale również dokładnie obniża jakość mierzonej aktywności. Wraz z postępem czasu kolejne zdarzenia procesora zwiększają ich znaczenie dla średniej obciążenia. Tego właśnie chcemy, ponieważ większa aktywność procesora prawdopodobnie ma większy wpływ na obecny stan niż pradawne wydarzenia., W końcu średnie obciążenie daje smoothtrend od 15 minut przez bieżącą minutę i daje nam okno nie tylko wykorzystanie procesora, ale także średnie zapotrzebowanie na procesory. Ponieważ obciążenie przekracza liczbę fizycznych procesorów, im bardziej procesor jest używany i tym większe jest na niego zapotrzebowanie. A im ustępuje, tym mniejsze jest zapotrzebowanie. Dzięki temu można wykorzystać średnią obciążenia z procentem CPU, aby uzyskać dokładniejszy widok aktywności CPU.,

Mam nadzieję, że służy to nie tylko jako praktyczna interpretacja średnich obciążeń Linuksa, ale także oświeci niektóre z mrocznych matematycznych cieni za nimi. Aby uzyskać więcej informacji, badanie funkcji wykładniczej i jej zastosowań rzuciłoby więcej światła na ten obiekt. Ale dla bardziej praktycznych myślących, wykreślając średnią obciążenia. kontrolowana liczba procesów (tj. modelowanie efektów algorytmu CALC_LOAD w kontrolowanej pętli) daje odczucie zależności Aktualnej i tego, jak stosuje się rozkładający się filtr.

Articles

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *