De Wizard achter het gordijn

de berekening van belastinggemiddelde kan het best worden gezien als een voortschrijdend gemiddelde van processen in de runwachtrij van Linux die is gemarkeerd als running of uninterruptible. De woorden “gedacht” werden gekozen om een reden: dat is hoe de metingen moeten worden geïnterpreteerd, maar niet precies wat er achter de drempel gebeurt. Het is op dit moment in onze reis wanneer de realiteit van itall, zoals de kwantummechanica, niet lijkt te passen op de intuïtieve manier zoals het zich voordoet.,

De belastinggemiddelden die de top-en uptime-commando ‘ s weergeven, rechtstreeks vanuit / proc worden ontvangen. Als je Linux kernel 2.4 of hoger draait, kun je die waarden zelf lezen met het commando cat/proc/loadavg. Het is echter de Linux kernel die deze evaluaties in /proc produceert. Specifiek, timer.c en sched.h werk samen om de berekening te doen. Om te begrijpen welke timer.c doet voor de kost, hetconcept van tijd snijden en de Jiffy teller helpen rond het beeld.

in de Linux kernel krijgt elk dispatchable proces een vaste tijd op de CPU per dispatch., Standaard is dit bedrag 10 milliseconden, of 1/100 seconde. Voor die korte tijdspanne wordt het proces een fysieke CPU toegewezen waarop de instructies moeten worden uitgevoerd en die processor mag worden overgenomen. Vaker wel dan niet, zal het proces de controle opgeven voordat de 10ms omhoog zijn via socket calls, I / O calls of calls terug naar de kernel. (Op een Intel 2.6 GHz processor, 10ms is genoeg tijd voor ongeveer 50 miljoen instructies optreden. Dat is meer dan voldoende verwerkingstijd voor de meeste applicatiecycli.,) Als het proces gebruik maakt van zijn volledig toegewezen CPU tijd van 10ms, een interrupt wordt verhoogd door de hardware,en de kernel krijgt de controle van het proces. De kernel promptlypenaliseert het proces om zo ‘ n varken te zijn. Zoals u kunt zien, dat timeslicing is een belangrijk ontwerpconcept voor het maken van uw systeem lijken Torun soepel aan de buitenkant. Het is ook het voertuig dat de laad-gemiddelde waarden produceert.

De 10ms time slice is een belangrijk genoeg concept om een naam voor zichzelf te garanderen: quantum waarde., Er is niet per se iets speciaal over 10ms, maar er is over de kwantumwaarde in het algemeen, omdat welke waarde het is ingesteld op (het is configureerbaar,maar 10ms is de standaard), het bepaalt hoe vaak op een minimum de kernel neemt controle van het systeem terug van de toepassingen. Een van de manychores die de kernel uitvoert wanneer het de controle terugneemt, is om de jiffies teller te verhogen. De jiffies teller meet het aantal kwantum teken dat is opgetreden sinds het systeem werd opgestart. Als de Quantum timer opduikt, timer.c wordt ingevoerd met een functie in de kernel genaamd timer.,c: do_timer (). Hier zijn alle interrupts uitgeschakeld, zodat de code niet werkt met bewegende doelen. De jiffies teller wordt verhoogd met 1, en de belasting-gemiddelde berekening wordt gecontroleerd om te zien of het moet worden computed.In actualiteit, de belasting-gemiddelde berekening wordt niet echt berekend op elk kwantum teek, maar aangedreven door een variabele waarde die is gebaseerd op de HZ frequentie instelling en getest op elke kwantum teek. (HZ mag niet worden verward met de MHz-rating van de processor. Deze variabele stelt de pulserate van bepaalde Linux kernel activiteit in en 1HZ is standaard gelijk aan één quantum or10ms., Hoewel de HZ-waarde in sommige versies van de kernel kan worden geconfigureerd, wordt deze normaal ingesteld op 100. De berekeningscode gebruikt de HZ-waarde om de berekeningsfrequentie te bepalen. Specifiek, de timer.c: calc_load () functie zal het middelingsalgoritme elke5 * HZ, of ongeveer elke vijf seconden uitvoeren. Het volgende is die functie in itsentirety:

De avenrun array bevat de drie gemiddelden die we besproken hebben. De calc_load () functie wordt aangeroepen door update_times (), ook gevonden in timer.c, en is de code die verantwoordelijk is voor het leveren van de calc_load() functie met de sticks parameter., Helaas onthult deze functie zijn meest interessante aspect niet: de berekening zelf. Dat kan echter gemakkelijk in sched worden gevestigd.h, een header die door een groot deel van de kernel wordt gebruikt code.In daar zijn de CALC_LOAD macro en de bijbehorende waarden beschikbaar:

hier ontmoeten de banden het wegdek. Het moet nu duidelijk zijn dat de werkelijkheid niet lijkt overeen te komen met de illusie. Ten minste, ditis zeker niet het type van het gemiddelde van de meesten van ons worden onderwezen in gradeschool. Maar het is toch een gemiddelde., Technisch gezien is het een exponentialdecay functie en is het voortschrijdend gemiddelde van keuze voor de meeste UNIX systemen evenals Linux. Laten we de details bekijken.

de macro bevat drie parameters: de gemiddelde laadbak (een van de drie elementen in avenrun), een constante exponent en het aantal lopende/uninterruptible processen dat momenteel in de run-wachtrij staat. De mogelijke exponentconstanten staan hierboven vermeld: EXP_1 voor het 1-minutegemiddelde, EXP_5 voor het 5-minutegemiddelde en EXP_15 voor het 15-minutegemiddelde. Het belangrijke punt om op te merken is dat de waarde afneemt met de leeftijd., De constanten zijn magische getallen die worden berekend door de onderstaande wiskundige functie:

wanneer x=1, dan y=1884; wanneer x=5, dan y=2014; en wanneer x=15, Dan y=2037. Het doel van de magische getallen is dat het de CALC_LOAD macro toestaat om precisie vaste punt representatie van breuken te gebruiken. De magicnumbers zijn dan niets meer dan multipliers gebruikt tegen de runningload gemiddelde om het een voortschrijdend gemiddelde te maken. (De wiskunde offixed-point representatie vallen buiten het bereik van dit artikel, dus Ik zal geen uitleg proberen.,) Het doel van de exponentiële vervalfunctie is dat het niet alleen de dips en spikes gladstrijkt door het handhaven van een usefultrend lijn, maar het vermindert nauwkeurig de kwaliteit van wat het meetals activiteit leeftijden. Naarmate de tijd vooruit gaat, verhogen opeenvolgende CPU-gebeurtenissen hun betekenis op de gemiddelde belasting. Dit is wat we willen, omdat meer recente CPU-activiteit waarschijnlijk meer impact heeft op de huidige staat dan oude gebeurtenissen., Uiteindelijk, de belasting gemiddelden geven een smoothtrend van 15 minuten door de huidige minuut en geven ons een venster intonot alleen het CPU-gebruik, maar ook de gemiddelde vraag naar de CPU ‘ s. Als de belastinggemiddelde gaat boven het aantal fysieke CPU ‘ s, hoe meer de CPU wordt gebruikt en hoe meer vraag er naar is. En, naarmate het afneemt, hoe minder vraag er is. Met dit begrip kan het belastinggemiddelde worden gebruikt met het CPU-percentage om een nauwkeuriger beeld van de CPU-activiteit te verkrijgen.,

Het is mijn hoop dat dit niet alleen dient als een praktische interpretatie van Linux ‘ s belastinggemiddelden, maar ook een aantal van de donkere wiskundeschaduwen erachter verlicht. Voor meer informatie zou een studie van de exponentiële Decay-functie en zijn toepassingen meer licht op het onderwerp werpen. Maar voor de meer praktische-minded, het plotten van de last averagevs. een gecontroleerd aantal processen (dat wil zeggen, het modelleren van de effecten van het CALC_LOAD algoritme in een gecontroleerde loop) zou je een gevoel geven voor de daadwerkelijke relatie en hoe het rottende filter van toepassing is.

Articles

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *