A terhelés-átlagos számítás legjobb úgy, mint egy mozgó átlag ofprocesses a Linux fut sorban megjelölt futás, vagy szünetmentes. Nem véletlenül választották a “gondolatot”: így kell értelmezni a méréseket, de nem pontosan az, ami a háttérben történik. Utazásunk ezen szakaszában van, amikor az itall valósága, mint példáulequantum mechanika, úgy tűnik, hogy nem illeszkedik az intuitív módon, ahogy bemutatja magát.,
a felső és uptime parancsok által megjelenített terhelési átlagok közvetlenül a /proc-ból származnak. Ha Linux kernel 2.4 vagy újabb verziót futtat,ezeket az értékeket a cat/proc/loadavg paranccsal olvashatja el. Azonban ez a Linux kernel, amely ezeket gyártjaértékek a / proc-ban. Pontosabban, időzítő.c és sched.h együtt dolgoznaka számításhoz. Ahhoz, hogy megértsük, mi időzítő.a C a megélhetésért, az időszeletelésért és a jiffy számlálóért teszi a dolgát.
a Linux kernelben minden diszpécser folyamat rögzített mennyiségű időt kap a CPU-n feladásonként., Alapértelmezés szerint ez az összeg 10 milliszekundum,vagy 1/100 másodperc. Erre a rövid időre a folyamatot fizikai CPU-nak nevezik, amelyen futtathatja utasításait, és lehetővé teszi a processzor átvételét. Gyakrabban, mint nem, a folyamat feladja a vezérléstmielőtt a 10ms fel a socket hívások, I/O hívások vagy hívások vissza a kernel. (Egy Intel 2,6 GHz-es processzoron 10ms elegendő időkörülbelül 50 millió utasítás fordul elő. Ez több, mint elégfeldolgozási idő a legtöbb alkalmazási ciklushoz.,) Ha a folyamat a megadott 10ms-es CPU-időt használja, akkor a hardver egy megszakítást emel, a rendszermag pedig visszanyeri az irányítást a folyamatból. A kernel ezután promptlypenalizes a folyamat, hogy egy ilyen disznó. Mint látható, hogy az időszeletelés fontos tervezési koncepció annak érdekében, hogy a rendszer kívülről zökkenőmentesnek tűnjön. Ez az a jármű is, amely aterhelési átlagértékek.
a 10ms-es időszelet elég fontos fogalom ahhoz, hogy az aname-t önmagában is garantálja: kvantumérték., Nem feltétlenül van valami különlegesáltalában a kvantumértékről van szó, mert bármilyen értékre van beállítva (konfigurálható, de 10ms az alapértelmezett), szabályozza, hogy a rendszermag milyen gyakran veszi vissza a rendszer irányítását az alkalmazásokból. Az egyik manychores a kernel végez, amikor átveszi az irányítást, hogy incrementits jiffies számláló. A jiffies counter a rendszer indítása óta bekövetkezett kullancsok számát méri. Amikor aquantum időzítő durran, időzítő.a C a kernel nevű függvényen van beírvatimer.,c: do_timer (). Itt minden megszakítás le van tiltva, így a kód nem működik mozgó célokkal. A jiffies számlálót 1-gyel növeljük, a terhelés-átlag számítást pedig ellenőrizzük, hogy meg kell-e computed.In a terhelés-átlag számítást valójában nem egy kvantum kullancs számítja ki, hanem egy változó érték hajtja, amely a Hz frekvencia beállításán alapul,és minden kvantum kullancson tesztelve. (A Hz-et nem szabad összekeverni a processzor MHz-es besorolásával. Ez a változó az adott Linux kernel aktivitásának pulzálódását határozza meg, az 1Hz pedig alapértelmezés szerint egy kvantum-vagy10ms-nek felel meg.,) Bár a HZ érték bizonyos verziókban konfigurálhatóa kernel, általában 100-ra van állítva. A számítási kód használjaa Hz érték a számítási frekvencia meghatározásához. Pontosabban, az időzítő.c: calc_load () függvény fut az átlagoló algoritmus minden5 * HZ, vagy nagyjából öt másodpercenként. Az alábbiakban ezt a függvényt mutatjuk be:
az avenrun tömb tartalmazza azt a három átlagot, amelyekről beszéltünk. Thecalc_load () függvény neve update_times (), is megtalálható időzítő.c, és az a kód, amely a calc_load() függvényt a ticks paraméterrel látja el., Sajnos ez a funkció nem tárja fela legérdekesebb szempont: maga a számítás. Ez azonban könnyen megtalálható a sched-ben.h, a fejléc által használt sok a kernel code.In itt a CALC_LOAD makró és a hozzá tartozó értékek állnak rendelkezésre:
itt találkoznak a gumiabroncsok a járdával. Most bizonyítania kellhogy a valóság nem tűnik úgy, hogy megfeleljen az illúziónak. Legalábbis ez minden bizonnyal nem az a fajta átlagolás legtöbben tanítják gradeschool. De ez egy átlagos mégis., Technikailag ez egy exponencialdecay függvény, amely a legtöbb UNIX rendszer, valamint a Linux mozgó átlaga. Vizsgáljuk meg annak részleteit.
A makró kerül a három paraméter: a terhelés-átlagos vödör (a három elem avenrun), egy állandó érték, valamint a több futás/szünetmentes folyamatok jelenleg szökésben sor. A lehetséges exponens konstansok felsorolása a fenti: EXP_1 az 1-minuteaverage, EXP_5 az 5 perces átlaghoz, EXP_15 pedig a 15-minuteaverage. Fontos megjegyezni, hogy az érték csökkenaz életkorral., Az állandók olyan mágikus számok, amelyeket az alább látható matematikai függvény számít:
amikor x=1, akkor y=1884; amikor x=5, majd y=2014; és amikor x=15, akkor y=2037. A mágikus számok célja, hogy lehetővé teszi a CALC_LOAD makró számára a frakciók precíziós fix pont ábrázolását. A magicnumbers ezután nem más, mint a runningload átlagával szemben használt szorzók, hogy mozgó átlag legyen. (A matematikatörténet ezen a cikken túlmutat, ezért nem fogok magyarázatot adni.,) Az exponenciális bomlási funkció célja, hogy ne csak egy hasznos vonal fenntartásával simítsa meg a dip-eket és a tüskéket, hanem pontosan csökkenti annak minőségét is, amit az aktivitási korokban mér. Ahogy az idő halad előre, az egymást követő CPU események növekednekjelentőségük a terhelési átlagban. Ez az, amit szeretnénk, mertaz utóbbi CPU-aktivitás valószínűleg nagyobb hatással van a jelenlegi állapotra, mint az ősi események., Végül a terhelési átlagok 15 perctől az aktuális percig adnak sima trendet, és nemcsak a CPU használatát, hanem a CPU-k átlagos keresletét is megadják. Mivel a terhelésátlag meghaladja a fizikai CPU-k számát, minél több CPU-t használnak, annál nagyobb a kereslet rá. És ahogy visszahúzódik, annál kevesebba kereslet van. Ezzel a megértéssel a terhelési átlag leheta CPU százalékával használva pontosabb képet kaphat a CPU tevékenységéről.,
remélem, hogy ez nem csak a Linux terhelési átlagainak gyakorlati értelmezéseként szolgál, hanem megvilágítja a mögöttük lévő sötét mathematicalshadows némelyikét is. További információért az exponencialdecay funkció és alkalmazásai tanulmányozása több fényt derítene a projektre. De a gyakorlatiasabb gondolkodásúak számára a terhelési átlag ábrázolása. a kontrollált folyamatok száma (vagyis a CALC_LOAD algoritmus hatásainak modellezése egy kontrollált hurokban) ad egy érzést a tényleges kapcsolatról, valamint arról, hogy a bomló szűrő hogyan működik.