guiden bakom gardinen

den genomsnittliga belastningsberäkningen är bäst tänkt som ett glidande medelvärde avprocesser i Linuxs körkö markerad körning eller avbrottsfri. Orden ”tanke på” valdes av en anledning: det är så mätningarna ska tolkas, men inte exakt vad som händer bakom jurtan. Det är vid denna tidpunkt i vår resa när verkligheten i itall, likequantum mekanik, verkar inte passa det intuitiva sättet som det presenterar sig.,

belastningen är i genomsnitt att topp-och upptidskommandona visas direkt från / proc. Om du kör Linux kernel 2.4 eller senare kan du läsa dessa värden själv med kommandot cat/proc / loadavg. Det är dock Linux-kärnan som producerar demvärden i / proc. Specifikt, timer.c och sched.h arbeta tillsammans för att göra beräkningen. För att förstå vilken timer.c gör för en levande, theconcept av tid skivning och jiffy räknaren hjälpa runda ut bilden.

i Linuxkärnan ges varje sändningsbar process en fast mängdtid på CPU: n per sändning., Som standard är detta belopp 10 millisekunder, eller 1/100th av en sekund. För den korta tidsperioden tilldelas processenenen fysisk CPU som ska köra sina instruktioner och får ta över den processorn. Oftare än inte, kommer processen att ge upp controlbefore the 10ms are up through socket calls, I / O calls or calls backto the kernel. (På en Intel 2.6 GHz-processor är 10ms tillräckligt med tid förungefär 50 miljoner instruktioner att inträffa. Det är mer än tillräckligtbehandlingstid för de flesta applikationscykler.,) Om processen använder itsfully tilldelad CPU-tid på 10ms, höjs ett avbrott av hårdvaran, och kärnan återfår kontrollen från processen. Kärnan promptlypenaliserar sedan processen för att vara en sådan hog. Som ni kan se, att timeslicing är ett viktigt designkoncept för att göra ditt system verkar torun smidigt på utsidan. Det är också fordonet som producerar delladmedelvärden.

10ms time slice är ett tillräckligt viktigt koncept för att motivera aname för sig själv: quantum value., Det finns inte nödvändigtvis någontingoförsiktigt speciellt om 10ms, men det handlar om kvantvärdeti allmänhet, för oavsett värde det är inställt på (det är konfigurerbart,men 10ms är standard), kontrollerar det hur ofta kärnorna kontrollerar systemet tillbaka från applikationerna. En av de manychores kärnan utför när det tar tillbaka kontrollen är att öka jiffies räknare. Jiffies-räknaren mäter antalet Kvantum fästingar som har inträffat sedan systemet startades. När thequantum timer dyker, timer.c matas in vid en funktion i kärnan kalladtimer.,c:do_timer(). Här är alla avbrott inaktiverade så att koden inte fungerar med rörliga mål. Jiffies-räknaren ökas med 1, och belastningsgenomsnittsberäkningen kontrolleras för att se om den ska vara computed.In aktualitet, den belastningsgenomsnittliga beräkningen beräknas inte riktigt påvarje kvantmarkering, men drivs av ett variabelt värde som är baserat på frekvensinställningen Hz och testas på varje kvantmarkering. (HZ ska inte varakonfigurerad med processorns MHz-betyg. Denna variabel ställer in pulseratet för viss Linuxkärnaktivitet och 1HZ är lika med en quantum or10ms som standard.,) Även om HZ-värdet kan konfigureras i vissa versioneroch kärnan är det normalt inställt på 100. Beräkningskoden använder HZ-värdet för att bestämma beräkningsfrekvensen. Specifikt timern.C: calc_load () – funktionen Kör medelvärdesalgoritmen varje 5 * HZ, eller ungefär var femte sekund. Följande är den funktionen i itsentirety:

avenrun array innehåller de tre medelvärden vi har diskuterat. Funktionen Thecalc_load() anropas av update_times (), finns även i timer.C, och är den kod som ansvarar för att leverera calc_load () – funktionen med theticks-parametern., Tyvärr avslöjar denna funktion inte dessmest intressanta aspekt: beräkningen själv. Men det kanligger lätt i sched.h, en rubrik som används av en stor del av kärnan code.In där är CALC_LOAD makro och dess tillhörande värden tillgängliga:

här är där däcken möter trottoaren. Det bör nu framgåatt verkligheten inte verkar matcha illusionen. Åtminstone dettaär verkligen inte den typ av medelvärde de flesta av oss lärs i gradeschool. Men det är en genomsnittlig ändå., Tekniskt är det en exponentialdecay-funktion och är det rörliga genomsnittet av valet för de flesta UNIX-systemså väl som Linux. Låt oss undersöka dess detaljer.

makrot tar in tre parametrar: lastgenomsnittshink (en av de tre elementen i avenrun), en konstant exponent och antalet pågående/avbrottsfria processer som för närvarande finns i körkön. Thepossible exponent konstanter som är listade ovan: EXP_1 för 1-minuteaverage, EXP_5 för 5-minuters medelvärde och EXP_15 för 15-minuteaverage. Den viktiga punkten att märka är att värdet minskarmed ålder., Konstanterna är magiska tal som beräknas avmatematisk funktion som visas nedan:

När x=1, sedan y=1884; när x=5, sedan y=2014; och när x=15, Då y=2037. Syftet med de magiska siffrorna är att det gör det möjligt för CALC_LOAD macroto att använda precision fast punkt representation av fraktioner. Magicnumbers är då inget annat än multiplikatorer som används mot runningload-genomsnittet för att göra det till ett glidande medelvärde. (Matematiken offixed-point representation ligger utanför tillämpningsområdet för denna artikel, Så jag kommer inteatt ange en förklaring.,) Syftet med den exponentiella sönderfallsfunktionenär att det inte bara släpper ut dips och spikar genom att upprätthålla en användbartrendlinje, men det minskar noggrant kvaliteten på vad den mäter som aktivitetsåldrar. När tiden går framåt ökar successiva CPU-händelserderas betydelse på belastningsgenomsnittet. Detta är vad vi vill, eftersommer senaste CPU-aktivitet har förmodligen mer av en inverkan på nuvarandestaten än gamla händelser., I slutändan ger lastens medelvärden en smoothtrend från 15 minuter genom den aktuella minuten och ger oss ett fönster intonot bara CPU-användningen men också den genomsnittliga efterfrågan på processorer. Eftersom lastgenomsnittet går över antalet fysiska processorer, ju mer CPU-enheten ärAnvänd och ju mer efterfrågan det finns för det. Och som det recedes, desto mindreav en efterfrågan finns det. Med denna förståelse kan belastningsgenomsnittet varaanvänds Med CPU-procenten för att få en mer exakt bild av CPU-aktivitet.,

det är min förhoppning att detta inte bara fungerar som en praktisk tolkning av Linuxs belastningsmedelvärden utan också belyser några av de mörka matematiskaskadorna bakom dem. För mer information, en studie av exponentiellbefrielsefunktion och dess tillämpningar skulle kasta mer ljus på ämnet. Men för de mer praktiska sinnade, rita belastningaveragevs. ett kontrollerat antal processer (det vill säga modellering av effekterna AVKALC_LOAD-algoritmen i en kontrollerad slinga) skulle ge dig en känsla för det faktiska förhållandet och hur det förfallna filtret gäller.

Articles

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *