Fedora 14 Energiebeheer gids Beheer energieverbruik in Fedora
Don Domingo Rüdiger Landmann
Energiebeheer gids
Ontwerp
Fedora 14 Energiebeheer gids Beheer energieverbruik in Fedora Uitgave 1 Auteur Auteur
Don Domingo Rüdiger Landmann
[email protected]
Copyright © 2010 Red Hat Inc. and others. The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. The original authors of this document, and Red Hat, designate the Fedora Project as the "Attribution Party" for purposes of CC-BY-SA. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version. Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law. Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries. For guidelines on the permitted uses of the Fedora trademarks, refer to https://fedoraproject.org/wiki/ Legal:Trademark_guidelines. Linux® is the registered trademark of Linus Torvalds in the United States and other countries. Java® is a registered trademark of Oracle and/or its affiliates. XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries. MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries. All other trademarks are the property of their respective owners.
Dit document legt uit hoe je het energieverbruik in Fedora 14 systemen effectief kunt beheren. De volgende paragrafen bespreken verschillende technieken die het energieverbruik verlagen (voor zowel server als laptop), en hoe elke techniek van invloed is op de totale performance van jouw systeem. Let op: Dit document is nog in ontwikkeling, kan nog flink veranderen en wordt hier aangeboden als een voor-uitgave. De inhoud en de instructies hierin mogen niet als volledig beschouwd worden, en moeten daarom met voorzichtigheid gebruikt worden.
Ontwerp
Ontwerp
Voorwoord v 1. Document conventies ...................................................................................................... v 1.1. Typografische conventies ...................................................................................... v 1.2. Pull-quote conventies ........................................................................................... vi 1.3. Opmerkingen en waarschuwingen ........................................................................ vii 2. We hebben terugkoppeling nodig! .................................................................................. viii 1. Overzicht 1 1.1. Belang van energiebeheer ............................................................................................ 1 1.2. Grondbeginselen van energiebeheer ............................................................................. 2 2. Energiebeheer controle en analyse 5 2.1. Controle en analyse overzicht ....................................................................................... 5 2.2. PowerTOP ................................................................................................................... 5 2.3. Diskdevstat en netdevstat ............................................................................................. 7 2.4. Battery Life Tool Kit .................................................................................................... 10 2.5. Tuned en ktune .......................................................................................................... 12 2.5.1. Het tuned.conf bestand ................................................................................ 13 2.5.2. Tuned-adm ...................................................................................................... 14 2.6. UPower ...................................................................................................................... 16 2.7. GNOME Power Manager ............................................................................................ 17 2.8. Andere audit middelen ................................................................................................ 18 3. Kern infrastructuur en mechanismes 3.1. CPU inactieve toestanden ........................................................................................... 3.2. CPUfreq regelaars gebruiken ..................................................................................... 3.2.1. CPUfreq regelaar types .................................................................................... 3.2.2. CPUfreq instelling ............................................................................................ 3.2.3. CPUfreq tactiek en snelheid afstemmen ............................................................ 3.3. Onderbreken en hervatten .......................................................................................... 3.4. Tik-vrije kernel ............................................................................................................ 3.5. Actieve toestand energiebeheer .................................................................................. 3.6. Agressief link energiebeheer ....................................................................................... 3.7. Relatime schijf toegang optimalisatie ........................................................................... 3.8. Energie plafond .......................................................................................................... 3.9. Verbeterd grafische energiebeheer .............................................................................. 3.10. RFKill ....................................................................................................................... 3.11. Optimalisaties in de gebruikersruimte .........................................................................
19 19 19 20 21 22 23 24 24 25 25 26 27 28 29
4. Gebruik voorbeelden 31 4.1. Voorbeeld — Server ................................................................................................... 31 4.2. Voorbeeld — Laptop ................................................................................................... 32 A. Tips voor ontwikkelaars A.1. Het gebruik van threads ............................................................................................. A.2. Wake-ups .................................................................................................................. A.3. Fsync ........................................................................................................................
35 35 36 37
B. Herzieningsgeschiedenis
39
iii
iv
Ontwerp
Ontwerp
Voorwoord 1. Document conventies Dit handboek hanteert verscheidene conventies om bepaalde woorden of zinsdelen te benadrukken en aandacht te vestigen op specifieke delen van informatie. 1
In PDF en papieren edities gebruikt dit handboek Liberation Fonts set lettertypes. Het Liberation lettertype wordt ook gebruikt in HTML edities als dit lettertype op jouw computer geïnstalleerd is. Als dat niet het geval is, worden alternatieve, gelijkwaardige lettertypes gebruikt. Opmerking: bij Red Hat Enterprise Linux 5 en later wordt de Liberation Font set standaard ingesteld.
1.1. Typografische conventies Vier typografische conventies worden gebruikt om aandacht te vestigen op specifieke woorden en zinsdelen. Deze conventies, en de omstandigheden waaronder zij gebruikt worden, luiden als volgt: Mono-spaced Bold Wordt gebruikt om systeem input, waaronder shell commando's, bestandsnamen en paden aan te geven. Wordt ook gebruikt bij toets aanduiding of toetsencombinaties. Bijvoorbeeld: Om de inhoud van het bestand mijn_onwijsgoed_verkopende_boek in jouw huidige map te bekijken, type je het commando cat mijn_onwijsgoed_verkopende_boek in op de shell prompt en druk je op Enter om het commando uit te voeren. Bovenstaande bevat een bestandsnaam, een shell commando en een toets aanduiding, alle getoond in mono-spaced bold en alle te onderscheiden dankzij hun context. Toetsencombinaties kunnen worden onderscheiden van toets aanduidingen door het plusteken dat elk deel van een toetsencombinatie aan elkaar verbind. Bijvoorbeeld: Druk op Enter om het commando uit te voeren. Druk op Ctrl+Alt+F2 om naar de eerste virtuele terminal over te schakelen. Druk op Ctrl+Alt+F1 om terug te keren naar jouw X-Windows sessie. De eerste paragraaf benadrukt de bepaalde toets die moet worden ingedrukt. De tweede benadrukt twee toets combinaties (ieder een reeks van drie toetsen, waarbij de toetsen van elke reeks tegelijk moeten worden ingedrukt). Als broncode wordt besproken, worden klasse namen, methodes, functies, variabele namen en resultaten die in een paragraaf worden genoemd, weergegeven als hier boven afgedrukt, namelijk in mono-spaced bold. Bijvoorbeeld: Onder bestand gerelateerde klassen vallen filesystem voor bestandssystemen, file voor bestanden, en dir voor mappen. Elke klasse heeft zijn eigen set van rechten. Proportional Bold
1
https://fedorahosted.org/liberation-fonts/
v
Voorwoord
Ontwerp
Wordt gebruikt om woorden of zinsdelen op een systeem aan te duiden, waaronder toepassing namen, dialoogtekst boxen, gelabelde knoppen, checkbox en radio-knop labels, menu titels en submenu titels. Bijvoorbeeld: Kies Systeem → Voorkeuren → Muis in de hoofdmenu balk om Muisvoorkeuren te openen. In de Knoppen tab, klik je de Linkshandige muis checkbox aan en klik je Sluiten om de primaire muisknop van links naar rechts te wisselen (waardoor de muis beter geschikt is geworden voor linkshandig gebruik). Om een speciaal teken in een gedit bestand op te nemen, kies je Toepassingen → Hulpmiddelen → Tekens en symbolen in de hoofd menubalk. Vervolgens kies je Zoeken → Zoeken… in de Tekens en symbolen menubalk, typ je de naam van het teken in het Zoek veld en klik je op Volgende. Het teken dat je zoekt zal worden gemarkeerd in de Tekentabel. Dubbel-klik op dit teken om het in het Te kopiëren tekst veld op te nemen en klik dan de Kopiëren knop. Keer nu terug naar jouw document en kies Bewerken → Plakken in de gedit menubalk. De bovenstaande tekst bevat toepassing namen, systeem-brede menu namen en onderdelen, toepassing specifieke menu namen, en knoppen en tekst van een GUI interface, alle getoond in proportional bold en alle te onderscheiden dankzij hun context. Mono-spaced Bold Italic of Proportional Bold Italic Voor mono-spaced bold of proportional bold geeft cursief gedrukt altijd vervangbare of wisselende teksten aan. Cursief wijst op niet letterlijke tekst of toont tekst die wisselt naar omstandigheden. Bijvoorbeeld: Om verbinding te maken met een andere computer met behulp van ssh, typ je ssh
[email protected] in op een shell prompt. Als de machine op afstand example.com is en jouw gebruikersnaam op die machine is jan, dan type je ssh
[email protected]. Het mount -o remount bestandssysteem commando koppelt het genoemde bestandssysteem opnieuw aan. Om bijvoorbeeld het /home bestandsysteem opnieuw aan te koppelen, gebruik je het mount -o remount /home commando. Om de versie van een huidig geïnstalleerd pakket te zien, gebruik je het rpm -q pakket commando. Dit zal het volgende resultaat opleveren: pakket-versievrijgave . Let op de woorden in bold italics in bovenstaande tekst — gebruikersnaam, domein.naam, bestandssysteem, pakket, versie en vrijgave. Elk woord is een plaats reservering, hetzij voor tekst die je invult als je een commando intypt, hetzij voor tekst die door het systeem wordt getoond. Buiten het standaard gebruik bij het presenteren van een titel van een werk, wordt cursief ingezet om het eerste gebruik van een nieuwe en belangrijke term te benadrukken. Bijvoorbeeld: Publican is een DocBook publicatie systeem.
1.2. Pull-quote conventies Terminal output en broncode lijsten worden worden visueel gescheiden van de omringende tekst. Output gestuurd naar een terminal wordt getoond in mono-spaced roman en als volgt gepresenteerd: vi
Ontwerp
Opmerkingen en waarschuwingen
books books_tests
Desktop Desktop1
documentation downloads
drafts images
mss notes
photos scripts
stuff svgs
svn
Opsommingen van broncode worden ook getoond in mono-spaced roman maar worden als volgt gepresenteerd en benadrukt: package org.jboss.book.jca.ex1; import javax.naming.InitialContext; public class ExClient { public static void main(String args[]) throws Exception { InitialContext iniCtx = new InitialContext(); Object ref = iniCtx.lookup("EchoBean"); EchoHome home = (EchoHome) ref; Echo echo = home.create(); System.out.println("Created Echo"); System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); } }
1.3. Opmerkingen en waarschuwingen Tenslotte gebruiken we drie visuele stijlen om aandacht te vestigen op informatie die anders misschien over het hoofd zou worden gezien.
Opmerking Een opmerking is een tip, handigheidje of een alternatieve benadering voor de taak die uitgevoerd moet worden. Het negeren van een opmerking zou geen ernstige gevolgen moeten hebben, maar het leven kan een stuk makkelijker worden als de opmerking gevolgd wordt.
Belangrijk Belangrijk aanduidingen wijzen op zaken die makkelijk over het hoofd kunnen worden gezien: veranderingen van configuratie die alleen voor de huidige sessie gelden, of voorzieningen die herstart moeten worden om een bepaalde verandering in te laten gaan. Het negeren van zaken met deze aanduiding heeft geen data verlies tot gevolg, maar kan leiden tot irritatie en frustratie.
Waarschuwing Een waarschuwing dient niet genegeerd te worden. Waarschuwingen negeren zal ongetwijfeld leiden tot data verlies.
vii
Voorwoord
Ontwerp
2. We hebben terugkoppeling nodig! Als je een typografische fout in deze handleiding vindt, of je weet een manier om deze handleiding te verbeteren, zouden wij dat graag van jou horen! Meldt fouten in de uitgave Fedora Documentation via Bugzilla: http://bugzilla.redhat.com/bugzilla/. Als je fouten meldt, vergeet dan alstublieft niet het kenmerk: power-management-guide te vermelden. Als je suggesties hebt om de documentatie te verbeteren, probeer dan zo duidelijk mogelijk deze suggesties te omschrijven. Als je fouten hebt ontdekt, vermeldt dan het sectie nummer en wat omringende tekst, zodat we de fout gemakkelijker kunnen vinden.
viii
Ontwerp
Ontwerp
Overzicht Het beperking van het energieverbruik van computersystemen is een van de belangrijkste aspecten van de groene IT (milieuvriendelijke informatica), een aantal overwegingen die ook het gebruik van recycleerbaar materiaal, de milieu impact van hardware productie en milieu bewustzijn in het ontwerp en de implementatie van systemen omvat. In dit document, bieden we leidraden en informatie aan over energiebeheer van jouw systemen die Fedora 14 draaien.
1.1. Belang van energiebeheer De kern van energiebeheer is een goed begrip over het efficiënt optimaliseren van energieverbruik van elk systeem onderdeel. Dit leidt tot het bestuderen van de verschillende taken die jouw systeem uitvoert en het configureren van elk component om ervoor te zorgen dat de performance hiervan precies goed voor de taak. De belangrijkste drijfveer voor energiebeheer is: • verminderen van de totale energieconsumptie om kosten te besparen Het juiste gebruik van energiebeheer resulteert in: • warmte vermindering voor servers en computer centra • gereduceerde secundaire kosten, met inbegrip van koeling, ruimte, kabels, generatoren en nood voedingen (UPS) • langere batterij duur voor laptops • lagere CO2 productie • tegemoet komen aan regelgeving of wettelijke voorschriften met betrekking tot Groene IT, bijvoorbeeld Energy Star • tegemoet komen aan bedrijfs richtlijnen voor nieuwe systemen Gewoonlijk zal verlaging van het energieverbruik van een bepaalde component (of van het systeem als geheel) leiden tot lagere warmte en, natuurlijk, performance. Daarom moet je de afname van performance grondig bestuderen en testen voor configuraties die je maakt, met name voor bedrijfskritieke systemen. Door het bestuderen van de verschillende taken die jouw systeem uitvoert, en het configureren van elk component om ervoor te zorgen dat zijn performance net voldoende voor de taak, kun je energie besparen, minder warmte genereren en de batterij duur voor laptops optimaliseren. Veel van de principes voor de analyse en het afstemmen van een systeem met betrekking tot energieverbruik zijn dezelfde als voor het afstemmen van de performance. Tot op zekere hoogte zijn energiebeheer en performance afstemming tegenovergestelde benaderingen van systeem configuratie, omdat systemen meestal geoptimaliseerd voor of performance of energieverbruik. Deze handleiding beschrijft de gereedschappen die het Fedora Project biedt en de technieken die we hebben ontwikkeld om je te helpen bij dit proces. Fedora 14 wordt al geleverd met een groot aantal nieuwe energiebeheer functies die standaard ingeschakeld zijn. Ze werden allemaal selectief gekozen om geen invloed te hebben op de performance van een typisch server of desktop gebruik. Voor zeer specifieke gebruik gevallen echter, waar maximale doorvoer, laagste latentie of hoogste CPU performance absoluut vereist is, zou een herziening van de standaard instellingen noodzakelijk kunnen zijn.
1
Hoofdstuk 1. Overzicht
Ontwerp
Om te bepalen of je jouw machines zou moeten optimaliseren met de technieken die in dit document beschreven worden, moet je jezelf een paar vragen stellen: Vraag: Moet ik optimaliseren? Antwoord: Het belang van energieverbruik optimalisatie hangt af van of jouw bedrijf richtlijnen heeft die opgevolgd moeten worden of dat er verordeningen die je moet vervullen. Vraag: Hoeveel moet ik optimaliseren? Antwoord: Verschillende van de technieken die we presenteren vereisen niet dat je het hele proces van de controle en analyse van jouw machine in detail doorgaat, maar in plaats daarvan bieden ze een aantal algemene optimalisaties die typisch energieverbruik verbeteren. Natuurlijk zullen deze meestal niet zo goed zijn als een handmatig gecontroleerd en geoptimaliseerd systeem, maar zullen een goed compromis bieden. Vraag: Vermindert optimalisatie systeem performance tot een onaanvaardbaar niveau? Antwoord: De meeste van de technieken beschreven in dit document hebben aanzienlijke invloed op de performance van jouw systeem. Als je ervoor kiest om energiebeheer te implementeren beter dan de standaarden al aanwezig in Fedora 14, moet je de performance van het systeem na energieverbruik optimalisatie bekijken en beslissen of het performance verlies acceptabel is. Vraag: Zal de tijd en middelen besteed om het systeem te optimaliseren opwegen tegen de behaalde voordelen? Antwoord: Het handmatig optimaliseren van een enkel systeem volgens gehele proces is meestal niet de gespendeerde tijd en kosten waard omdat deze veel hoger is dan het typische voordeel dat je terugkrijgt gedurende de levensduur van een enkele machine. Als je aan de andere kant bijvoorbeeld een uitrol van 10000 desktop systemen naar jouw kantoor uitvoert, allen met dezelfde configuratie en instelling is het aanmaken van een geoptimaliseerde instelling en die toe te passen op alle 10000 machines zeer waarschijnlijk een goed idee. De volgende hoofdstukken zullen uitleggen hoe optimale hardware performance jouw systeem voordeel oplevert in termen van energieverbruik.
1.2. Grondbeginselen van energiebeheer Effectief energiebeheer wordt opgebouwd met de volgende principes:
Een inactieve CPU moet alleen gewekt worden als dat nodig is De kernel gebruikt in vrijgaven van Fedora voorafgaand aan Fedora 8 gebruikt een periodieke timer voor elke CPU. Deze timer voorkomt dat de CPU echt inactief wordt, omdat deze vereist dat de CPU elke timer gebeurtenis verwerkt (wat elke paar milliseconden gebeurt, afhankelijk van de instelling), ongeacht of een proces wel of niet draait. Een groot deel van efficiënt energiebeheer draait om het verminderen van de frequentie waarmee de CPU gewekt wordt. Daarom elimineert de Linux kernel in Fedora 14 de periodieke timer: daardoor is de inactieve toestand van een CPU nu tik-vrij. Dit voorkomt dat de CPU onnodig energie verbruikt als het inactief is. De voordelen hiervan kunnen echter teniet gedaan worden als jouw systeem toepassingen draait die onnodige timer gebeurtenissen aanmaken. Het ondervragen van gebeurtenissen (zoals controles voor volume veranderingen, muis beweging en dergelijke) zijn voorbeelden van zulke gebeurtenissen. 2
Ontwerp
Grondbeginselen van energiebeheer
Fedora 14 bevat gereedschappen waarmee je toepassingen kunt identificeren en controleren op basis van hun CPU gebruik. Refereer naar Hoofdstuk 2, Energiebeheer controle en analyse voor details.
Niet gebruikte hardware en apparaten moeten volledig uitgeschakeld worden Dit geldt vooral voor apparaten met bewegende delen (bijvoorbeeld harde schijven). Bovendien laten sommige toepassingen een ongebruikt, maar ingeschakeld, apparaat "open"; als dit gebeurt, neemt de kernel aan het apparaat wordt gebruikt, wat voorkomt dat het apparaat naar een energiebesparende stand gaat.
Lage activiteit moet vertalen naar laag vermogen In veel gevallen hangt dit echter af van moderne hardware en de juiste configuratie van de BIOS. Oudere systeem onderdelen vaak hebben geen ondersteuning voor een aantal van de nieuwe functies die we nu kunnen ondersteunen in Fedora 14. Zorg ervoor dat je de meest recente officiële firmware voor uw systemen gebruikt en die in het energiebeheer of apparaat configuratie secties van de BIOS de energiebeheer functies ingeschakeld worden. Een aantal functies om op te letten zijn: • SpeedStep • PowerNow! • Cool'n'Quiet • ACPI (C toestand) • Smart Als jouw hardware ondersteuning voor deze functies heeft en ze zijn ingeschakeld in de BIOS, zal Fedora 14 ze standaard gebruiken.
Verschillende vormen van CPU toestanden en hun effecten Moderne CPU's bieden tezamen met Advanced Configuration and Power Interface (ACPI) verschillende energie toestanden. De drie verschillende toestanden zijn: • Slaapstand (C-toestanden) • Frequentie (P-toestanden) • Warmte output (T-toestanden of "thermische toestanden") Een CPU die draait in de laagst mogelijke slaap toestand verbruit de kleinste hoeveelheid Watt, maar heeft ook aanzienlijk meer tijd nodig om opgewekt te worden uit deze toestand als dat nodig is. In zeer zeldzame gevallen kan dit er toe leiden dat de CPU opgewekt moet worden iedere keer onmiddellijk nadat deze juist in slaap gebracht is. Deze situatie resulteert effectief in een continu bezige CPU en verliest een deel van de potentiële energie bezuiniging vergeleken met een andere toestand.
Een uitgeschakelde machine gebruikt het minste energie Zo vanzelfsprekend als dit klinkt, is een van de beste manieren om daadwerkelijk energie te besparen het uitschakelen van systemen. Bijvoorbeeld, jouw bedrijf een bedrijfscultuur ontwikkelen die gericht is op "groene IT" bewustzijn met een richtlijn om machines uit te zetten tijdens de middag pauze of als je naar huis gaat. Je kunt ook meerdere fysieke servers consolideren in één grotere server en ze virtualiseren met gebruik van de virtualisatie technologie die we verzenden met Fedora 14.
3
4
Ontwerp
Ontwerp
Energiebeheer controle en analyse 2.1. Controle en analyse overzicht De gedetailleerde handmatige controle, analyse, en het afstemmen van een enkel systeem is meestal de uitzondering omdat de tijd en kosten die uitgegeven worden om dit te doen meestal zwaarder wegen dan de voordelen van deze stukjes systeem afstemming. Het eenmaal uitvoeren van deze taken voor een groot aantal bijna identieke systemen waarbij je dezelfde instellingen kunt hergebruiken voor alle systemen kan echter zeer nuttig zijn. Bijvoorbeeld, overweeg het inzetten van duizenden desktop systemen, of een HPC cluster waar de machines vrijwel identiek zijn. Een andere reden om de controle en analyse uit te voeren is het verschaffen van een basis voor de vergelijking waarmee je regressies of wijzigingen in het systeem gedrag in de toekomst herkennen kunt. De resultaten van deze analyse kunnen zeer nuttig zijn in gevallen waarin de hardware, BIOS of software vernieuwingen regelmatig gebeuren en je wilt een verrassingen met betrekking tot energieverbruik voorkomen. In het algemeen, geeft een grondige controle en analyse je een veel beter idee van wat er echt gebeurt op een bepaald systeem. Controle en analyse van een systeem met betrekking tot energieverbruik is relatief moeilijk, zelfs met de meest moderne beschikbare systemen. De meeste systemen bieden niet de nodige middelen voor het meten van de energie die via software te gebruiken zijn. Er bestaan echter uitzonderingen: de ILO beheer console van Hewlett Packard is een energiebeheer module die je via het web kunt openen. IBM biedt een soortgelijke oplossing in hun Blade Center energiebeheer module. Op sommige systemen van Dell biedt de IT Assistant ook energie controle mogelijkheden. Andere leveranciers zullen vergelijkbare mogelijkheden voor hun server platforms bieden, maar zoals je ziet is er geen oplossing beschikbaar die wordt ondersteund door alle leveranciers. Als jouw systeem geen ingebouwd mechanisme voor het meten van energieverbruik, zijn er een paar andere opties. Je kunt een speciale voeding in jouw systeem gebruiken die energieverbruik informatie via USB aanbiedt. De Gigabyte Odin GT 550 W PC voeding is een voorbeeld, en software om de waarden met Linux uit te lezen is extern beschikbaar op http://mgmt.sth.sze.hu/~andras/dev/gopsu/. Als laatste redmiddel hebben sommige externe Watt meter zoals de Watts up? PRO hebben USB aansluiting. Directe metingen van het energieverbruik is vaak alleen nodig om de besparing zo ver mogelijk te maximaliseren. Er zijn gelukkig andere middelen beschikbaar om te meten als wijzigingen van kracht zijn of hoe het systeem zich gedraagt. Dit hoofdstuk beschrijft de nodige gereedschappen.
2.2. PowerTOP De tik-vrije kernel in Fedora laat de CPU vaker naar de inactieve toestand gaan, wat energieverbruik verlaagt en energiebeheer verbetert. Het nieuwe PowerTOP gereedschap identificeert specifieke onderdelen van kernel en gebruikersruimte toepassingen die de CPU vaak wakker maken. PowerTOP werd gebruikt in de ontwikkeling voor het uitvoeren van de audits zoals beschreven in Paragraaf 3.11, “Optimalisaties in de gebruikersruimte”, wat er toe heeft geleid dat vele toepassingen in deze release afgestemd zijn, waardoor het onnodig wakker maken van de CPU met een factor tien gereduceerd is. Installeer PowerTOP met het commando: yum install powertop
Draai PowerTOP met het commando: powertop
Merk op dat je PowerTOP moet draaien met root rechten om de toepassing iets nuttigs te laten doen. 5
Hoofdstuk 2. Energiebeheer controle en analyse
Ontwerp
Als het draait, verzamelt PowerTOP statistische gegevens van het systeem en geeft een overzicht van de onderdelen de CPU het vaakst wakker maken. PowerTOP geeft ook suggesties voor het afstemmen van het systeem voor een lager energieverbruik. Deze suggesties verschijnen aan de onderkant van het scherm en geven je een sleutel waarop je kunt drukken om de suggestie van PowerTOP te accepteren. Omdat PowerTOP periodiek ververst, worden verdere suggesties weergegeven. Merk in Figuur 2.1, “PowerTOP in werking” de suggestie op om de VM dirty writeback tijd te verhogen en op de sleutel (W) te drukken om de suggestie te accepteren. Als het draait, verzamelt PowerTOP statistische gegevens van het systeem en presenteert je diverse belangrijke lijsten met informatie. Bovenaan is een lijst met hoe lang jouw CPU kernen in elk van de beschikbare C en P toestanden zijn. Hoe langer de CPU in de hogere C of P toestanden is des te beter (C4 is hoger dan C3) en dit is een goede indicatie hoe goed het systeem afgestemd is voor CPU gebruik. Jouw doel moet een verblijf in de hoogste C of P toestand van 90% of meer zijn als het systeem inactief is. Het tweede stuk informatie is een samenvatting van de werkelijke wake-ups per seconde van de machine. Het aantal wake-ups per seconde geeft je een goede maatstaf voor hoe goed de services of de apparaten en drivers van de kernel werken met betrekking tot het energieverbruik op het systeem. Des te meer wake-ups per seconde je hebt, des te meer vermogen verbruikt wordt, dus lager is hier beter. Vervolgens geeft PowerTOP een schatting van het werkelijke energieverbruik van het systeem, indien beschikbaar. Je kunt verwachten dat PowerTOP dit meldt voor laptops die in de batterij mode zijn. Any available estimates of power usage are followed by a detailed list of the components that send wakeups to the CPU most frequently. At the top of the list are those components that you should investigate more closely to optimize your system to reduce power usage. If they are kernel components, (indicated by the name of the component being listed in <>) then the wakeups are often associated with a specific driver that causes them. Tuning drivers most usually requires kernel changes which go beyond the scope of this document. However, userland processes that send wakeups are more easily managed. First, identify if this service or application should run at all on this system. If not, simply deactivate it. To turn off a service permanently, run: chkconfig servicenaam off
Als je meer informatie nodig hebt over wat het onderdeel daadwerkelijk doet, voer je uit: ps -awux | grep componentnaam strace -p procesid
Als het spoor zich lijkt te herhalen, dan heb je waarschijnlijk een drukke lus gevonden. Om dit te verhelpen dan zou dat een code wijziging in dat onderdeel vereisen en ook dat gaat buiten het bestek van dit document. PowerTOP maakt ten slotte ook suggesties voor het afstemmen van het systeem voor een lager energieverbruik. Deze suggesties verschijnen onder in het scherm en geeft je een sleutel om op te duwen om de suggestie van PowerTOP te accepteren. Daar PowerTOP periodiek ververst, zullen verdere suggesties weergegeven worden. Let op de suggestie in Figuur 2.1, “PowerTOP in werking” om de VM dirty writeback tijd te verhogen en de sleutel (W) om op te drukken om de suggestie te accepteren. Deze wijzigingen zullen alleen actief zijn tot de volgende keer opnieuw opstarten. Om je te helpen de wijzigingen permanent te maken, laat PowerTOP het exacte commando zien die wordt gedraaid voor het uitvoeren van deze optimalisatie. Voeg het commando toe aan jouw /etc/rc.local bestand met jouw favoriete tekstverwerker zodat het iedere keer als de computer wordt opgestart effect heeft. 6
Ontwerp
Diskdevstat en netdevstat
Figuur 2.1. PowerTOP in werking De Less Watts website publiceert een lijst van toepassingen waarvan PowerTOP ontdekt heeft dat het processoren actief houdt. Refereer naar http://www.lesswatts.org/projects/powertop/known.php.
2.3. Diskdevstat en netdevstat Diskdevstat en netdevstat zijn SystemTap gereedschappen die gedetailleerde informatie over de schijf activiteit en netwerk activiteit verzamelen van alle toepassingen die draaien op een systeem. Deze gereedschappen zijn geïnspireerd door PowerTOP, welke het aantal CPU wakeups per seconde laat zien van alle toepassingen (Refereer naar Paragraaf 2.2, “PowerTOP”). De statistieken die deze gereedschappen verzamelen laten je toepassingen identificeren die energie verkwisten met vele kleine I/O activiteiten in plaats van minder, maar grotere operaties. Andere controle gereedschappen die alleen overdracht snelheden meten helpen niet om dit soort gebruik te identificeren. Installeer deze gereedschappen met SystemTap met het commando: yum install systemtap tuned-utils kernel-debuginfo
Voer de gereedschappen uit met het commando: diskdevstat
7
Hoofdstuk 2. Energiebeheer controle en analyse
Ontwerp
of het commando: netdevstat
Beide commando's hebben drie parameters als volgt: diskdevstat update_interval totale_duur display_histogram netdevstat update_interval totale_duur display_histogram update_interval De tijd in seconden tussen de vernieuwingen van het beeldscherm. Standaard: 5 totale_duur De tijd in seconden voor de gehele taak. Standaard: 86400 (1 dag) display_histogram Markeren om een histogram te maken van de verzamelde gegevens aan het einde van de taak. De uotput is vergelijkbaar met die van PowerTOP. Hier volgt een voorbeeld van de output van een langere diskdevstat taak op een Fedora 10 systeem die KDE 4.2 draait: PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0.000 plasma 15494 0 sda1 0 0.000 0.000 0.000 0.000 0logwatch 15520 0 sda1 0 0.000 0.000 0.000 0.000 perl 15549 0 sda1 0 0.000 0.000 0.000 0.000 perl 15585 0 sda1 0 0.000 0.000 0.000 0.000 perl 2573 0 sda1 63 0.033 3600.015 515.226 0.000 auditd 15429 0 sda1 0 0.000 0.000 0.000 0.000 crond 15379 0 sda1 0 0.000 0.000 0.000 0.000 crond 15473 0 sda1 0 0.000 0.000 0.000 0.000 crond 15415 0 sda1 0 0.000 0.000 0.000 0.000 crond 15433 0 sda1 0 0.000 0.000 0.000 0.000 crond 15425 0 sda1 0 0.000 0.000 0.000 0.000 crond 15375 0 sda1 0 0.000 0.000 0.000 0.000 crond 15477 0 sda1 0 0.000 0.000 0.000 0.000 crond 15469 0 sda1 0 0.000 0.000 0.000 0.000 crond 15419 0 sda1 0 0.000 0.000 0.000 0.000 crond 15481 0 sda1 0 0.000 0.000 0.000 0.000 crond 15355 0 sda1 0 0.000 0.000 0.000 0.001 laptop_mode 2153 0 sda1 26 0.003 3600.029 1290.730 0.000 rsyslogd
8
READ_CNT
READ_MIN
READ_MAX
0
0.000
0.000
758
0.000
0.012
140
0.000
0.009
140
0.000
0.009
108
0.001
0.002
0
0.000
0.000
62
0.009
0.009
62
0.008
0.008
62
0.008
0.008
62
0.008
0.008
62
0.008
0.008
62
0.007
0.007
62
0.008
0.008
62
0.007
0.007
62
0.007
0.007
62
0.008
0.008
61
0.000
0.001
37
0.000
0.014
0
0.000
0.000
Ontwerp 15575 0 sda1 0.000 cat 15581 0 sda1 0.000 perl 15582 0 sda1 0.000 perl 15579 0 sda1 0.000 perl 15580 0 sda1 0.000 perl 15354 0 sda1 0.014 sh 15584 0 sda1 0.000 perl 15548 0 sda1 0.001 perl 15577 0 sda1 0.000 perl 15519 0 sda1 0.000 perl 15578 0 sda1 0.000 perl 15583 0 sda1 0.000 perl 15547 0 sda1 0.000 perl 15576 0 sda1 0.000 perl 15518 0 sda1 0.000 perl 15354 0 sda1 0.005 lm_lid.sh
Diskdevstat en netdevstat 0
0.000
0.000
0.000
16
0.000
0.000
0
0.000
0.000
0.000
12
0.001
0.002
0
0.000
0.000
0.000
12
0.001
0.002
0
0.000
0.000
0.000
12
0.000
0.001
0
0.000
0.000
0.000
12
0.001
0.001
0
0.000
0.000
0.000
12
0.000
0.170
0
0.000
0.000
0.000
12
0.001
0.002
0
0.000
0.000
0.000
12
0.001
0.014
0
0.000
0.000
0.000
12
0.001
0.003
0
0.000
0.000
0.000
12
0.001
0.005
0
0.000
0.000
0.000
12
0.001
0.001
0
0.000
0.000
0.000
12
0.001
0.001
0
0.000
0.000
0.000
11
0.000
0.002
0
0.000
0.000
0.000
11
0.001
0.001
0
0.000
0.000
0.000
11
0.000
0.001
0
0.000
0.000
0.000
10
0.053
0.053
De kolommen zijn: PID de proces ID van de toepassing UID de gebruiker ID waarmee de toepassingen worden uitgevoerd DEV het apparaat waarop de I/O plaatsgevonden heeft WRITE_CNT het totale aantal schrijf bewerkingen WRITE_MIN de kortste tijd tussen twee opeenvolgende keer schrijven (in seconden) WRITE_MAX de langste tijd tussen voor twee opeenvolgende keer schrijven (in seconden) WRITE_AVG de gemiddelde tijd tussen twee opeenvolgende keer schrijven (in seconden) READ_CNT het totale aantal lees bewerkingen READ_MIN de kortste tijd tussen twee opeenvolgende keer lezen (in seconden)
9
Hoofdstuk 2. Energiebeheer controle en analyse
Ontwerp
READ_MAX de langste tijd tussen voor twee opeenvolgende keer lezen (in seconden) READ_AVG de gemiddelde tijd tussen twee opeenvolgende keer lezen (in seconden) COMMAND de naam van het proces In dit voorbeeld vallen drie voor de hand liggende toepassingen op: PID UID DEV READ_AVG COMMAND 2789 2903 sda1 0.000 plasma 2573 0 sda1 0.000 auditd 2153 0 sda1 0.000 rsyslogd
WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG
READ_CNT
READ_MIN
READ_MAX
854
0.000
120.000
39.836
0
0.000
0.000
63
0.033
3600.015
515.226
0
0.000
0.000
26
0.003
3600.029
1290.730
0
0.000
0.000
Deze drie toepassingen hebben een WRITE_CNT groter dan 0, wat betekent dat zij één of andere vorm van schrijven tijdens de meting hebben uitgevoerd. Van deze was plasma de ergste dader: de meeste schrijf bewerkingen uitgevoerd en de gemiddelde tijd tussen schrijven was natuurlijk de laagste. Plasma zou daarom de beste kandidaat om te onderzoeken als je bezorgd bent over energieinefficiënte toepassingen. Gebruik de strace en ltrace commando's om de toepassingen nauwkeuriger te onderzoeken voor het traceren van alle systeem aanroepen van het gegeven proces ID. In het huidige voorbeeld, kun je uitvoeren: strace -p 2789
In dit voorbeeld bevatte de output van strace een herhalend patroon elke 45 seconden die het KDE icoon cache bestand van de gebruiker opent om naar te schrijven, gevolgd door een onmiddellijke afsluiten van het bestand. Dit leidde tot een noodzakelijke fysiek schrijven naar de harde schijf omdat de meta gegevens van het bestand (in het bijzonder de wijzigingstijd) veranderd was. De uiteindelijke oplossing was om te voorkomen dat deze onnodige oproepen plaatsvonden als er geen vernieuwingen naar de iconen hebben plaatsgevonden.
2.4. Battery Life Tool Kit De Battery Life Tool Kit (BLTK) is een test suite die batterij levensduur en performance simuleert en analyseert. BLTK bereikt dit door het uitvoeren van een aantal taken die specifieke gebruiker groepen simuleren en de resultaten rapporteren. Hoewel BLTK specifiek ontwikkeld is voor het testen van notebook performance, kan het ook rapporteren over de performance van desktop systemen als het opgestart wordt met de -a optie. BLTK laat je zeer reproduceerbare werkbelasting genereren die vergelijkbaar zijn met het reële gebruik van een machine. Bijvoorbeeld, de office belasting schrijft een tekst, corrigeert er iets in, en doet hetzelfde voor een spreadsheet. Met het uitvoeren van BLTK in combinatie met PowerTOP of een van de andere audit of analyse gereedschappen kun je testen of de optimalisaties die je hebt uitgevoerd een effect hebben als de computer actief gebruikt wordt in plaats van alleen maar stationair draait. Omdat je exact dezelfde werkbelasting meerdere keren kunt draaien voor verschillende instellingen, kun je de resultaten voor de verschillende instellingen vergelijken. Installeer BLTK met het commando: 10
Ontwerp
Battery Life Tool Kit
yum install bltk
Draai BLTK met het commando: bltk werkbelasing opties
Bijvoorbeeld, om de idle werkbelasting gedurende 120 seconden te draaien bltk -I -T 120
De werkbelasting die standaard beschikbaar zijn: -I, --idle het systeem is inactief, te gebruiken als een basis voor vergelijking met een andere werkbelasting -R, --reader simuleert het lezen van documenten (standaard met Firefox) -P, --player simuleert het kijken naar multimedia bestanden van een CD of DVD station (standaard met mplayer) -O, --office simuleert het bewerken van documenten met de OpenOffice.org suite Andere opties laten je specificeren: -a, --ac-ignore negeer of wisselstroom beschikbaar is (nodig voor desktop gebruik) -T aantal_seconden, --time aantal_seconden de tijd (in seconden) voor het uitvoeren van de test; gebruik deze optie met de idle werkbelasting -F bestandsnaam, --file bestandsnaam specificeert een bestand dat wordt gebruikt door een bepaalde werkbelasting, bijvoorbeeld een bestand voor de player werkbelasting om af te spelen in plaats van het openen van het CD of DVD station -W toepassing, --prog toepassing specificeert een toepassing die gebruikt moet worden voor een bepaalde werkbelasting, bijvoorbeeld een andere browser dan Firefox voor de reader werkbelasting. BLTK ondersteunt een groot aantal speciale opties. Voor details refereer je naar de bltk manual pagina. BLTK slaat de resultaten die het genereert op in een map die gespecificeerd wordt in het /etc/ bltk.conf configuratie bestand — standaard ~/.bltk/werkbelasting.results.nummer/. Bijvoorbeeeld, de map ~/.bltk/reader.results.002/ bevat de resultaten van de derde proef met de reader werkbelasting (de eerste test wordt niet genummerd). De resultaten worden verspreid over verschillende tekstbestanden. Om deze resultaten te condenseren in een formaat dat gemakkelijk te lezen is, voer je uit: bltk_report pad_naar_resultaten_map
11
Hoofdstuk 2. Energiebeheer controle en analyse
Ontwerp
De resultaten worden nu weergegeven in een tekst bestand met de Report naam in de resultaten map. Om in plaats daarvan de resultaten te bekijken in een terminal emulator , gebruik je de -o optie: bltk_report -o pad_naar_resultaten_map
2.5. Tuned en ktune Tuned is een daemon die toezicht houdt op het gebruik van de systeem onderdelen en systeem instellingen dynamisch afstemt op basis van die gegevens. Dynamische afstemmen is verantwoordelijk voor de manier waarop diverse systeem onderdelen verschillend gebruikt worden gedurende de up-time van een bepaald systeem. Bijvoorbeeld, de harde schijf wordt intensief gebruikt tijdens het opstarten en inloggen, maar wordt later nauwelijks gebruikt omdat een gebruiker voornamelijk werkt met toepassingen zoals OpenOffice of email cliënten. Ook worden de processor en netwerk apparaten anders gebruikt op verschillende tijdstippen. Tuned houdt toezicht op de activiteiten van deze onderdelen en reageert op veranderingen in hun gebruik. Als een praktisch voorbeeld beschouw je een typisch kantoor werkstation. Het merendeel van de tijd zal het Ethernet netwerk interface nauwelijks actief zijn. Slechts een paar e-mails te gaan zo nu en dan binnenkomen of naar buiten gaan of sommige webpagina's kunnen geladen worden. Voor dit soort belasting hoeft het netwerk interface niet altijd op volle snelheid te draaien, zoals standaard het geval is. Tuned heeft een controle en afstem plug-in voor netwerk apparaten die lage activiteit kan detecteren en dan automatisch de snelheid van deze interface verlaagt, wat gewoonlijk resulteert in een lager energieverbruik. Als de activiteit op de interface voor een langere tijdsperiode drastisch verhoogt, bijvoorbeeld omdat een DVD image gedownload wordt of een email met een grote bijlage geopend wordt, detecteert tuned dit en stelt de interface snelheid in naar maximaal om de beste performance te bieden zolang het activiteiten niveau zo hoog is. Dit principe ook wordt gebruikt voor de andere plug-ins voor CPU en harde schijven. Netwerk apparaten zijn niet geconfigureerd om zich standaard op deze manier te gedragen omdat bij snelheid veranderingen het enkele seconden kan duren voordat dit effect heeft en zichtbaar van invloed is op de gebruikers ervaring. Dezelfde overwegingen gelden voor de CPU en harde schijf afstem plug-ins. Als de draaisnelheid van een harde schijf omlaag gebracht is, kan het aantal seconden duren voor deze weer op snelheid is, wat resulteert in een waar te nemen gebrek aan respons van het systeem gedurende die periode. Het latentie neveneffect is het kleinst voor de CPU plug-in, maar het is nog steeds tenminste meetbaar, hoewel nauwelijks merkbaar voor een gebruiker. Naast tuned bieden we nu ook ktune aan. Ktune was oorspronkelijk een kader en service voor het optimaliseren van de performance van een machine voor specifieke toepassingen. Sindsdien is ktune zodanig verbeterd dat we het nu gebruiken als het statische gedeelte van onze algemene afstem kader. Het wordt voornamelijk gebruikt in de verschillende vooraf gedefinieerde profielen die wordt beschreven in Paragraaf 2.5.2, “Tuned-adm”. Installeer het tuned pakket en de bijbehorende systemtap scripts met het commando: yum install tuned
Het installeren van het tuned pakket stelt ook een voorbeeld configuratie bestand in op /etc/ tuned.conf en activeert het standaard profiel. Start tuned met: service tuned start
12
Ontwerp
Het tuned.conf bestand
Om tuned op te laten starten als de machine opstart, voer je uit: chkconfig tuned on
Tuned zelf bevat extra opties die je kunt gebruiken als je het handmatig draait. De beschikbare opties zijn: -d, --daemon start tuned als een daemon in plaats van op de voorgrond. -c, --conffile gebruik een configuratie bestand met de opgegeven naam en pad, bijvoorbeeld --conffile=/ etc/tuned2.conf. De standaard waarde is /etc/tuned.conf. -D, --debug gebruik het hoogste niveau van log registratie.
2.5.1. Het tuned.conf bestand Het tuned.conf bestand bevat de configuratie instellingen voor tuned. Standaard bevindt het zich in /etc/tuned.conf, maar je kunt een andere naam en locatie opgeven door tuned te starten met de --conffile optie. Het configuratie bestand moet altijd een [main] sectie bevatten dat de algemene parameters voor tuned definieert. Het bestand bevat een sectie voor elke plug-in. De [main] sectie bevat de volgende opties: interval het interval waarmee tuned het systeem moet controleren en afstemmen, in seconden. De standaard waarde is 10. verbose specificeert of de output breedsprakig moet zijn. De standaard waarde is False. logging specificeert de minimum prioriteit van boodschappen die gelogd moeten worden. In aflopende volg orde zijn de toegestane waarden: critical, error, warning, info, en debug. De standaard waarde is de info. logging_disable specificeert de maximum prioriteit van boodschappen die gelogd moeten worden; alle boodschappen met deze of lagere prioriteit worden niet gelogd. In aflopende volgorde zijn de toegestane waarden: critical, error, warning, info, en debug. De waarde notset zet deze optie uit. Elke plug-in heeft zijn eigen sectie, aangegeven met de naam van de plug-in in vierkante haken, bijvoorbeeld: [CPUTuning]. Elke plug-in kan zijn eigen opties hebben, maar de volgende zijn van toepassing op alle plug-ins: enabled specificeert of de plug-in aan of uit is gezet. De standaard waarde is True. verbose specificeert of de output breedsprakig moet zijn. Als het niet ingesteld is voor deze plug-in, wordt de waarde overgenomen van [main]. 13
Hoofdstuk 2. Energiebeheer controle en analyse
Ontwerp
logging specificeert de minimum prioriteit van boodschappen om te loggen. Als het niet ingesteld is voor deze plug-in, wordt de waarde overgenomen van [main]. Een voorbeeld configuratie bestand is als volgt: [main] interval=10 pidfile=/var/run/tuned.pid logging=info logging_disable=notset # Disk monitoring section [DiskMonitor] enabled=True logging=debug # Disk tuning section [DiskTuning] enabled=True hdparm=False alpm=False logging=debug # Net monitoring section [NetMonitor] enabled=True logging=debug # Net tuning section [NetTuning] enabled=True logging=debug # CPU monitoring section [CPUMonitor] # Enabled or disable the plugin. Default is True. Any other value # disables it. enabled=True # CPU tuning section [CPUTuning] # Enabled or disable the plugin. Default is True. Any other value # disables it. enabled=True
2.5.2. Tuned-adm Vaak kan een gedetailleerde audit en analyse van een systeem zeer tijdrovend zijn en zou het de moeite niet waard zijn om de paar extra Watt die je zou kunnen besparen. Het enige alternatief was gewoon de standaard instellingen gebruiken. Daarom bevat Fedora 14 aparte profielen voor specifieke gebruik voorbeelden als alternatief tussen deze twee uitersten, tezamen met het admtuned gereedschap dat je gemakkelijk laat omschakelen tussen deze profielen op de commandoregel. Fedora 14 bevat een aantal vooraf gedefinieerde profielen voor typische gebruik voorbeelden die je eenvoudig kunt selecteren en activeren met het tuned-adm commando, maar je ook zelf profielen aanmaken, wijzigen of verwijderen.
14
Ontwerp
Tuned-adm
Om alle beschikbare profielen te tonen en het huidig actieve profiel te identificeren, voer je uit: tuned-adm list
Om alleen het huidig actieve profiel te tonen, voer je uit: tuned-adm active
Om overschakelen naar een van de beschikbare profielen, voer je uit: tuned-adm profile profiel_naam
bijvoorbeeld: tuned-adm profile server-powersave
Om alle afstemming uit te zetten: tuned-adm off
Tijdens de installatie van tuned wordt het default profiel geactiveerd. Fedora 14 bevat ook de volgende vooraf gedefinieerde profielen: default het standaard profiel voor energiebesparing. Het heeft het minste effect op de energiebesparing van de beschikbare profielen en alleen CPU en schijf plug-ins voor tuned worden aangezet. desktop-powersave een energiebesparend profiel gericht op desktop systemen. ALPM energiebesparing voor SATA host-adapters wordt aangezet (refereer naar Paragraaf 3.6, “Agressief link energiebeheer”) naast de CPU, Ethernet en schijf plug-ins voor tuned. server-powersave een energiebesparend profiel gericht op server systemen. ALPM energiebesparing voor SATA host-adapters wordt aangezet, CD-ROM bevraging met HAL wordt uitgezet (refereer naar de haldisable-polling manual pagina) en de CPU en schijf plug-ins voor tuned worden geactiveerd. laptop-ac-powersave een energiebesparende profiel met middelmatig effect gericht op laptops die draaien op wisselstroom. Zet ALPM energiebesparing aan voor SATA host-adapters, WiFi, en de CPU, Ethernet en schijf plug-ins voor tuned. laptop-battery-powersave een energiebesparend profiel met hoog effect voor laptops die draaien op een accu. Het activeert alle energiebesparende mechanismes van de vorige profielen en het zet de multikern energiebesparende scheduler aan voor lage wake-up systemen en zorgt ervoor dat de ondemand governor actief is en dat AC97 geluid energiebesparing ingeschakeld is. Met dit profiel kun je de maximale hoeveelheid energie besparen op elk soort systeem, niet alleen laptops die draaien op een accu. Het nadeel van dit profiel is een merkbaar effect op performance, specifiek de latentie van schijf en netwerk I/O. throughput-performance een server profiel voor het afstemmen van de typische doorvoer performance. Het zet tuned en ktune energiebesparing mechanismes uit, zet sysctl instellingen aan die de doorvoer 15
Hoofdstuk 2. Energiebeheer controle en analyse
Ontwerp
performance van jouw schijf en netwerk I/O verbeteren, en schakelt over naar de deadline scheduler. latency-performance een server profiel voor het afstemmen van de typische latentie performance. Het zet tuned en ktune energiebesparing mechanismes uit en zet sysctl instellingen aan die de doorvoer performance van jouw schijf en netwerk I/O verbeteren. Alle profielen worden opgeslagen in afzonderlijke sub-mappen in /etc/tune-profiles. Dus /etc/ tune-profiles/desktop-powersave bevat alle benodigde bestanden en instellingen voor dat profiel. Al deze mappen kunnen maximaal vier bestanden bevatten: tuned.conf de configuratie voor de tuned service die actief is voor dit profiel. sysctl.ktune de sysctl instellingen die gebruikt worden door ktune. Het formaat is identiek aan het /etc/ sysconfig/sysctl bestand (refereer naar de sysctl en sysctl.conf manual pagina's). ktune.sysconfig het configuratiebestand van ktune zelf, meestal /etc/sysconfig/ktune. ktune.sh een init-stijl shell script gebruikt door de ktune service die specifieke commando's kan uitvoeren tijdens het opstarten van het systeem om het systeem af te stemmen. De gemakkelijkste manier om te beginnen met een nieuw profiel is het kopiëren van een bestaande sjabloon. Het laptop-battery-powersave profiel bevat al een zeer groot aantal afstemmingen en is daarom een goed uitgangspunt. Kopieer eenvoudig de hele map naar de nieuwe profiel naam als volgt: cp -a /etc/tune-profiles/laptop-battery-powersave/ /etc/tune-profiles/mijnprofiel
Verander de bestanden in het nieuwe profiel om overeen te komen met jouw persoonlijke behoefte. Bijvoorbeeld, als je de detectie van CD veranderingen vereist, kun je die optimalisatie uitzetten door de betreffende regel in het ktune.sh script uit te commentariëren: # Disable HAL polling of CDROMS # for i in /dev/scd*; do hal-disable-polling --device $i; done > /dev/null 2>&1
2.6. UPower In Fedora 11 nam DeviceKit-power de energiebeheer functies over die onderdeel waren van HAL en een aantal van de functies die onderdeel waren van GNOME Power Manager in vorige versies van Fedora (refereer ook naar Paragraaf 2.7, “GNOME Power Manager”). In Fedora 13 werd DeviceKitpower omgedoopt tot UPower. UPower biedt een daemon, een API en een set van commando-regel gereedschappen. Elke energie bron in het systeem wordt weergegeven als een apparaat, of het nu een fysiek apparaat of niet. Bijvoorbeeld, een laptop batterij en een AC energiebron worden beide weergegeven als apparaten. Je krijgt toegang tot de commando-regel gereedschappen met het upower commando en de volgende opties: --enumerate, -e laat een object pad zien voor alle energie apparaten op het systeem, bijvoorbeeld: 16
Ontwerp
GNOME Power Manager
/org/freedesktop/UPower/devices/line_power_AC /org/freedesktop/UPower/devices/battery_BAT0
--dump, -d laat de parameters zien voor alle energie apparaten op het systeem. --wakeups, -w laat de CPU wake-ups op het systeem zien. --monitor, -m controleert het systeem voor veranderingen in energie apparaten, zoals het aansluiten of loskoppelen van wisselstroom bron, of het leeg raken van een batterij. Druk op Ctrl+C om te stoppen met het controleren van het systeem. --monitor-detail controleert het systeem voor veranderingen in energie apparaten, zoals het aansluiten of loskoppelen van wisselstroom bron, of het leeg raken van een batterij. De --monitor-detail geeft meer details dan de --monitor optie. Druk op Ctrl+C om te stoppen met het controleren van het systeem. --show-info object_pad, -i object_pad laat alle informatie zien die beschikbaar is voor een bepaald object pad. Bijvoorbeeld, om informatie te krijgen over een batterij op jouw systeem vertegenwoordigd door het object pad / org/freedesktop/UPower/devices/battery_BAT0, voer je uit: devkit-power -i /org/freedesktop/UPower/devices/battery_BAT0
2.7. GNOME Power Manager GNOME Power Manager is een daemon die wordt geïnstalleerd als onderdeel van het GNOME bureaublad. Veel van de energiebeheer functionaliteit die GNOME Power Manager bood in eerdere versies van Fedora werd onderdeel van DeviceKit-power in Fedora 11, omgedoopt tot UPower in Fedora 13 (refereer naar Paragraaf 2.6, “UPower”). GNOME Power Manager blijft echter een frontend voor die functionaliteit. Met een applet in het systeem vak, geeft GNOME Power Manager je bericht over wijzigingen in de energie status van jouw systeem; bijvoorbeeld, een verandering van batterij naar netvoeding. Het rapporteert ook de batterij status, en waarschuwt je als de batterij bijna leeg is. GNOME Power Manager laat je ook enkele basis energiebeheer instellingen configureren. Voor toegang tot deze instellingen, klik je op het GNOME Power Manager icoon in het systeem vak en klik dan op Voorkeuren Het Power Management voorkeuren scherm bevat drie tabbladen: • Op netstroom • Op accustroom • Algemeen Gebruik de Op netstroom en Op accustroom tabbladen als je wilt opgeven hoeveel tijd er moet verstrijken voordat het beeldscherm op zwart wordt gezet op een inactieve systeem, hoeveel tijd moet verstrijken voordat een inactieve systeem in slaapstand gebracht wordt, en of het systeem harde schijven moet stil zetten als ze niet gebruikt worden. Op het tabblad Op accustroom kun je ook de helderheid van het beeldscherm instellen en kies je een gedrag voor een systeem met een bijna lege 17
Hoofdstuk 2. Energiebeheer controle en analyse
Ontwerp
batterij. Bijvoorbeeld, standaard brengt GNOME Power Manager een systeem in slaapstand als de batterij bijna leeg is. Gebruik de Algemeen tab voor het instellen van het gedrag van de (fysieke) aan/ uit knop en pauzeer knop op jouw systeem, en specificeer de omstandigheden waaronder de GNOME Power Manager pictogram weergeven moet worden op het systeem dienblad.
2.8. Andere audit middelen Fedora 14 biedt heel wat meer gereedschappen waarmee systeem controle en analyse uit te voeren is. De meeste van hen kan worden gebruikt als aanvullende informatie bronnen voor het controleren van wat je al hebt ontdekt, of als je meer gedetailleerde informatie over bepaalde onderdelen nodig hebt. Veel van deze gereedschappen worden ook gebruikt voor het afstemmen van de performance. Zij omvatten: vmstat vmstat geeft je gedetailleerde informatie over processen, geheugen, wissel bestanden, blok I/O, traps, en CPU activiteit. Gebruik het eens om eens een kijkje nemen naar wat het systeem zoal doet en waar het druk mee is. iostat iostat is vergelijkbaar met vmstat, maar alleen voor I/O van blok apparaten. Het biedt ook een meer uitgebreide output en statistieken. blktrace blktrace is een zeer gedetailleerd blok I/O traceer programma. Het breekt informatie op in enkele blokken die gekoppeld zijn aan toepassingen. Het is zeer nuttig in combinatie met diskdevstat.
18
Ontwerp
Ontwerp
Kern infrastructuur en mechanismes 3.1. CPU inactieve toestanden CPU's met de x86 architectuur ondersteunen verschillende toestanden waarin onderdelen van de CPU gedeactiveerd zijn of draaien met lagere performance instellingen. Deze toestanden, bekend als C-toestanden, laten systemen energie besparen door het gedeeltelijk deactiveren van CPU's die niet gebruikt worden. C-toestanden worden genummerd vanaf C0 naar boven, waarin hogere nummers verminderde CPU functionaliteit en meer energiebesparing vertegenwoordigen. C-toestanden van een bepaald nummer zijn in grote lijnen vergelijkbaar voor alle processoren, hoewel de exacte details van de specifieke functie set van de toestand kan variëren tussen processor families. C-toestanden 0-3 worden als volgt gedefinieerd: C0 de werkende of draaiende toestand. In deze toestand werkt de CPU en in het geheel niet inactief. C1, Halt een toestand waarin de processor geen instructies uitvoert, maar meestal niet in een lagere energieverbruik toestand is. De CPU kan doorgaan met bewerkingen met vrijwel geen vertraging. Alle processoren die C-toestanden aanbieden moeten deze toestand ondersteunen. Pentium 4 processoren ondersteunen een verbeterde C1 toestand met de naam C1E, wat eigenlijk een toestand is voor laag energieverbruik. C2, Stop-klok een toestand waar het de klok voor deze processor bevroren wordt, maar het bewaart de volledige toestand van de registers en caches, zodat na het opnieuw starten van de klok het verwerken onmiddellijk kan verder gaan. Dit is een optionele toestand. C3, Slapen een toestand waarin de processor echt gaat slapen en zijn cache niet up-to-date hoeft te houden. Hierdoor duurt het ontwaken vanuit deze toestand aanzienlijk langer dan van C2. Nogmaals, dit is een optionele toestand. Recente Intel CPU's met de "Nehalem" micro-architectuur hebben een nieuwe C-toestand, C6, welke de spanning van een CPU kan verminderen tot nul, maar meestal het energieverbruik reduceert met tussen 80% en 90%. De kernel in Fedora 14 bevat optimalisaties voor deze nieuwe C-toestand.
3.2. CPUfreq regelaars gebruiken Een van de meest effectieve manieren om energieverbruik en warmteproductie op jouw systeem te reduceren is het gebruik van CPUfreq. CPUfreq — ook wel aangeduid als CPU snelheid schalen — staat toe dat de kloksnelheid van de processor aangepast wordt tijdens het draaien. Hierdoor kan het systeem op een lagere kloksnelheid draaien om energie te besparen. De regels voor het verschuiven van frequenties, naar een snellere of een langzamere kloksnelheid, en wanneer de frequentie verschuiving optreedt, wordt gedefinieerd door de CPUfreq regelaar. De regelaar definieert de energie kenmerken van de systeem CPU, wat op zijn beurt CPU performance beïnvloedt. Elke regelaar heeft zijn eigen unieke gedrag, doel en geschiktheid in termen van de werkbelasting. Deze paragraaf beschrijft hoe je een CPUfreq regelaar kiest en configureert, de kenmerken van elke regelaar, en voor welk soort werkbelasting iedere regelaar geschikt is. De belangrijkste interesses rond energiebeheer zijn: • Warmte vermindering voor servers 19
Hoofdstuk 3. Kern infrastructuur en mechanismes
Ontwerp
• Langere batterij duur voor laptops Gewoonlijk zal verlaging van het energieverbruik van een bepaalde component (of van het systeem als geheel) leiden tot lagere warmte en, natuurlijk, performance. Daarom moet je de afname van performance grondig bestuderen en testen voor configuraties die je maakt, met name voor bedrijfskritieke systemen. De volgende paragrafen leggen uit hoe optimale hardware performance jouw systeem voordeel oplevert in termen van energieverbruik.
3.2.1. CPUfreq regelaar types Deze paragraaf geeft een overzicht en beschrijving van de verschillende types CPUfreq regelaars beschikbaar in Fedora 14.
cpufreq_performance De performance regelaar dwingt de CPU om de hoogst mogelijke klok frequentie gebruiken. Deze frequentie zal statisch ingesteld worden, en zal niet veranderen. Daarom biedt deze bijzondere regelaar geen energiebesparing voordeel. Het is alleen geschikt voor een uren durende zware werklast, en zelfs dan alleen in tijden waarin de CPU zelden (of nooit) inactief is.
cpufreq_powersave De Powersave regelaar, daar in tegen, forceert de CPU om de laagst mogelijke klok frequentie te gebruiken. Deze frequentie wordt statisch ingesteld, en zal niet veranderen. Daarom biedt deze regelaar maximale energiebesparing, maar ten koste van de laagste CPU performance. De term "powersave" kan soms bedrieglijk zijn, omdat (in principe) een trage CPU op een volledige werklast meer energie verbruikt dan een snelle CPU die niet belast wordt. Daarom, hoewel het misschien aan te raden om de CPU in te stellen om de Powersave regelaar te gebruiken in tijden van verwachte lage activiteit, kan een onverwacht hoge belasting in die tijd veroorzaken dat het systeem meer energie verbruikt. In eenvoudige termen is de Poversave regelaar meer een "snelheidsbegrenzer" voor de CPU dan een "energie bespaarder". Het is vooral nuttig op systemen en omgevingen waar oververhitting een probleem kan zijn.
cpufreq_ondemand De Ondemand regelaar is een dynamische regelaar die de CPU toestaat de maximum klok frequentie te gebruiken als de systeem belasting hoog en ook de minimum klok frequentie ook als het systeem inactief is. Hoewel dit het systeem toestaat om het energieverbruik aan te passen overeenkomstig met de belasting van het systeem, doet het dit ten koste van de latentie tussen frequentie omschakelen. Daarom kan latentie alle performance/energiebesparing voordelen die geboden worden door de Ondemand regelaar teniet doen als het systeem te vaak tussen inactiviteit en zware werklast omschakelt. Voor de meeste systemen, kan Ondemand regelaar het beste compromis bieden tussen warmte afgifte, energieverbruik, performance en beheersbaarheid. Als het systeem slechts op bepaalde tijdstippen van de dag druk bezet is, zal de Ondemand regelaar automatisch omschakelen tussen maximale en minimale frequentie afhankelijk van de belasting zonder verdere tussenkomst.
20
Ontwerp
CPUfreq instelling
cpufreq_userspace De Userspace regelaar laat programma's in de gebruikersruimte (of een proces uitgevoerd als root) de frequentie instellen. Deze regelaar wordt normaal gesproken tezamen gebruikt met de cpuspeed daemon. Userspace is de meest aanpasbare; en afhankelijk van de manier waarop het geconfigureerd is, biedt het de beste balans tussen performance en verbruik op jouw systeem.
cpufreq_conservative Net zoals de Ondemand regelaar past de Conservative regelaar de klok frequentie ook aan volgens het gebruik (zoals de Ondemand regelaar). Terwijl de Ondemand regelaar dit echter op een meer agressieve manier doet (van maximum naar minimum en terug), schakelt de Conservative regelaar meer geleidelijk tussen frequenties om. Dit betekent dat de Conservatieve regelaar zal aanpassen naar een klok frequentie die past bij de belasting, in plaats van simpelweg kiezen tussen minimum en maximum. Hoewel dit misschien voor aanzienlijke besparingen in energieverbruik zorgen kan, doet het dit op een manier die voor nog grotere latentie kan zorgen dan de Ondemand regelaar.
Opmerking Je kunt een regelaar gebruiken met cron taken. Dit laat je automatisch specifieke regelaars instellen voor specifieke tijdstippen van de dag. Op die manier kun je een lage-frequentie regelaar specificeren tijdens inactieve tijden (bijvoorbeeld na de werkdag) en terug gaan naar een hoge-frequentie regelaar tijdens de uren van zware werklast. Voor instructie hoe je een specifieke regelaar aanzet, refereer je naar Procedure 3.2, “Een CPUfreq regelaar aanzetten” in Paragraaf 3.2.2, “CPUfreq instelling”.
3.2.2. CPUfreq instelling Voor het selecteren en configureren van een CPUfreq regelaar, moet je eerst de juiste CPUfreq driver toevoegen. Procedure 3.1. Een CPUfreq driver toevoegen 1. Gebruik het volgende commando om te zien welke CPUfreq drivers beschikbaar zijn voor jouw systeem: ls /lib/modules/[kernel versie]/kernel/arch/[architectuur]/kernel/cpu/cpufreq/
2.
Gebruik modprobe om de juiste CPUfreq driver toe te voegen. modprobe [CPUfreq driver]
Als je het bovenstaande commando gebruikt, moet je het .ko bestandsnaam achtervoegsel verwijderen.
21
Hoofdstuk 3. Kern infrastructuur en mechanismes
Ontwerp
Belangrijk Bij het kiezen van een geschikte CPUfreq driver, kies je altijd voor acpi-cpufreq boven p4-clockmod. Terwijl het gebruik van de p4-clockmod driver de klok frequentie van een CPU reduceert, vermindert het niet de spanning. acpi-cpufreq, aan de andere kant, vermindert de spanning tezamen met CPU kloksnelheid, wat minder stroomverbruik en warmte output toestaat voor elke eenheid reductie in de performance.
3.
Zodra de CPUfreq driver ingesteld is, kunt je bekijken welke regelaar het systeem momenteel gebruikt met: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Je kunt ook bekijken welke regelaars beschikbaar zijn voor gebruik met een specifieke CPU door middel van: cat /sys/devices/system/cpu/[cpu ID]/cpufreq/scaling_available_governors
Sommige CPUfreq regelaars zijn mogelijk niet beschikbaar voor jou om te gebruiken. In dit geval gebruik je modprobe om de benodigde kernel modules toe te voegen waarmee de specifieke CPUfreq regwlaar beschikbaar komt die je wilt gebruiken. Deze kernel modules zijn beschikbaar in / lib/modules/[kernel versie]/kernel/drivers/cpufreq/. Procedure 3.2. Een CPUfreq regelaar aanzetten 1. Als een specifieke regelaar niet beschikbaar is voor jouw CPU, gebruik je modprobe om de regelaar die je wilt gebruiken aan te zetten. Bijvoorbeeld, als de ondemand regelaar niet beschikbaar is voor jouw CPU, gebruik je het volgende commando: modprobe cpufreq_ondemand
2.
Zodra een regelaar vermeld wordt als beschikbaar voor jouw CPU, kunt je het aanzetten met behulp van: echo [governor] > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
3.2.3. CPUfreq tactiek en snelheid afstemmen Zodra je een geschikte CPUfreq regelaar gekozen hebt, kun je de snelheid van elke CPU verder afstemmen met behulp van de afstemmers gevonden in /sys/devices/system/cpu/[cpu ID]/ cpufreq/. Deze afstemmers zijn: • cpuinfo_min_freq — Laat de beschikbare minimum bedrijfs frequentie van de CPU zien (in KHz). • cpuinfo_max_freq — Laat de beschikbare maximum bedrijfs frequentie van de CPU zien (in KHz). • scaling_driver — Laat zien welke CPUfreq driver gebruikt wordt in de frequentie van deze CPU in te stellen. 22
Ontwerp
Onderbreken en hervatten
• scaling_available_governors — laat de CPUfreq regelaars zien die beschikbaar zijn deze kernel. Als je een CPUfreq regelaar wilt gebruiken die niet wordt vermeld in dit bestand, refereer dan naar Procedure 3.2, “Een CPUfreq regelaar aanzetten” in Paragraaf 3.2.2, “CPUfreq instelling” voor instructies hoe je dit kunt doen. • scaling_governor — Shows what CPUfreq governor is currently in use. To use a different governor, simply use echo [governor] > /sys/devices/system/cpu/[cpu ID]/ cpufreq/scaling_governor (refer to Procedure 3.2, “Een CPUfreq regelaar aanzetten” in Paragraaf 3.2.2, “CPUfreq instelling” for more information). • cpuinfo_cur_freq — Laat de huidige snelheid van de CPU zien (in KHz). • scaling_available_frequencies — Toon de beschikbare frequenties voor de CPU, in KHz. • scaling_min_freq en scaling_max_freq — Stel de tactiek limieten in van de CPU, in KHz.
Belangrijk Als tactiek limieten ingesteld worden, moet je scaling_max_freq voor scaling_min_freq instellen.
• affected_cpus — Toont de CPU's die frequentie coördinatie software nodig hebben. • scaling_setspeed — Gebruikt om de klok snelheid van de CPU te veranderen, in KHz. Je kunt alleen een snelheid instellen binnen de tactiek limieten van de CPU (als in scaling_min_freq en scaling_max_freq). Om de huidige waarde van elke afstemmer te bekijken, gebruik je cat [afstemmer]. Bijvoorbeeld, om de huidige snelheid van cpu0 te bekijken (in KHz), gebruik je cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq. To change the value of each tunable, use echo [value] > /sys/devices/system/cpu/[cpu ID]/cpufreq/[tunable]. For example, to set the minimum clock speed of cpu0 to 360 KHz, use: echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
3.3. Onderbreken en hervatten Als een systeem wordt onderbroken, vraagt de kernel aan de drivers om hun toestand op te slaan en vervolgens hun toestand te verwijderen. Als het systeem wordt hervat, worden deze drivers opnieuw geladen, welke dan proberen hun apparaten opnieuw te programmeren. De mogelijkheid van de driver om deze taak uit te voeren bepaalt of het systeem met succes kan worden hervat. Video drivers zijn in dit opzicht bijzonder problematisch omdat de Advanced Configuration and Power Interface (ACPI) specificatie niet vereist dat systeem firmware in staat moet zijn om video hardware te kunnen herprogrammeren. Daarom kunnen ze het systeem beletten om te hervatten, tenzij de video drivers in staat om hardware te programmeren vanuit een volledig niet-geïnitialiseerde toestand. Fedora 14 biedt meer ondersteuning voor nieuwe grafische chip-sets, wat ervoor zorgt dat het onderbreken en hervatten op een groter aantal platformen werkt. In het bijzonder is ondersteuning voor NVIDIA chip-sets aanzienlijk verbeterd; in het bijzonder voor de GeForce 8800 serie. 23
Hoofdstuk 3. Kern infrastructuur en mechanismes
Ontwerp
3.4. Tik-vrije kernel Vroeger onderbrak de Linux kernel periodiek elke CPU op een systeem met een vooraf bepaalde frequentie — 100 Hz, 250 Hz, of 1000 Hz, afhankelijk van het platform. De kernel bevroeg de CPU over het proces dat het uitvoerde en gebruikte de resultaten voor proces accounting en taakverdeling. De kernel voerde deze interrupt, bekend als de timer tik, uit ongeacht de energie toestand van de processor. Daarom reageerde zelfs een inactieve CPU reageren op maximaal 1000 van deze aanvragen per seconde. Op systemen die energiebesparende maatregelen voor inactieve CPU's geïmplementeerd hebben, belet de timer tik dat de CPU lang genoeg inactief blijft om het systeem te laten profiteren van deze energiebesparing. De kernel in Fedora 14 draait tik-vrij: dat betekent, het vervangt de oude periodieke timer interrupts met op-aanvraag interrupts. Daarom mogen inactieve CPU's langer inactief blijven totdat er een nieuwe taak in de wachtrij is voor verwerking, en CPU's die naar de lage energie toestanden gegaan zijn blijven langer in toestanden.
3.5. Actieve toestand energiebeheer Actieve toestand energiebeheer (ASPM) bespaart energie in het Peripheral Component Interconnect Express PCI Express (PCIe) subsysteem door het instellen van een lager energieverbruik voor PCIe verbindingen als de apparaten waarmee ze verbonden zijn niet gebruikt worden. ASPM controleert de energie toestand aan beide uiteinden van de verbinding en bespaart energie in de verbinding, zelfs wanneer het apparaat aan het eind van de verbinding zich in een volledig gevoede toestand bevindt. Als ASPM aangezet is, wordt apparaat latentie hoger vanwege de tijd die nodig is om de overgang tussen verschillende energie toestanden van de verbinding uit te voeren. ASPM heeft drie tactieken om de energie toestanden te bepalen: default stelt PCIe verbinding energie toestanden in volgens de standaard instellingen die opgegeven worden door de firmware van het systeem (bijvoorbeeld, de BIOS). Dit is de standaard toestand voor ASPM. powersave stelt ASPM in energie te besparen waar mogelijk, ongeacht het effect op de performance. performance zet ASPM uit om PCIe verbindingen toe te staan om met maximale performance te werken. ASPM tactieken worden ingesteld in /sys/module/pcie_aspm/parameters/policy, maar kunnen ook worden opgegeven tijdens het opstarten van het systeem met de pcie_aspm kernel parameter waarbij pcie_aspm=off ASPM uitzet en pcie_aspm=force ASPM aanzet, zelfs op apparaten die ASPM niet ondersteunen.
Waarschuwing — pcie_aspm=force kan tot gevolg hebben dat het systeem niet meer reageert Als pcie_aspm=force ingesteld is, kan hardware die ASPM niet ondersteunt het systeem laten stoppen met reageren. Voordat je pcie_aspm=force instelt, moet je er zeker van zijn dat alle PCIe hardware op het systeem ASPM ondersteunt.
24
Ontwerp
Agressief link energiebeheer
3.6. Agressief link energiebeheer Agressief link energiebeheer (ALPM) is een energiebesparende techniek die helpt om de schijf energie te laten besparen door het instellen van een SATA link op de schijf naar een lage-energie instelling tijdens inactiviteit (dat betekent als er geen I/O). ALPM zet de SATA link automatisch terug naar een actieve energie toestand zodra I/O aanvragen in de wachtrij staan voor die link. Energiebesparing geïntroduceerd door ALPM komen ten koste van de schijf latentie. Daarom moet je ALPM alleen gebruiken als je verwacht dat het systeem lange periodes van inactieve I/O zullen hebben. ALPM is alleen beschikbaar op SATA controllers die gebruikmaken van de Geavanceerde host controller interface (AHCI). Voor meer informatie over AHCI, refereer je naar http://www.intel.com/ technology/serialata/ahci.htm. Als ALPM beschikbaar is wordt het standaard aangezet. ALPM heeft drie modes:
min_power Deze mode zet de link in de laagste energie toestand (SLUMBER) als een geen I/O op de schijf is. Deze mode is nuttig als er een langere periode van inactiviteit verwacht wordt.
medium_power Deze mode stelt de link in naar de op een na laagste energie toestand (PARTIAL) als er geen I/ O op de schijf is. Deze mode is ontworpen om overgangen in link energie toestanden toe te staan (bijvoorbeeld in tijden van intermitterende zware I/O en inactieve I/O) met een zo klein mogelijke invloed op de performance. De medium_power mode laat de link omschakelen tussen PARTIAL en volledig-gevoede (dat is "ACTIVE") toestanden, afhankelijk van de werklast. Merk op dat het niet mogelijk is om een link direct om te schakelen van PARTIAL naar SLUMBER en omgekeerd; in dat geval kunnen beide energie toestanden niet naar de andere overgaan zonder eerst naar de ACTIVE toestand te gaan.
max_performance ALPM is uitgezet, de link gaat niet naar een lage-energie toestand als er geen I/O op de schijf is. Om te controleren of jouw SATA host adapters ALPM eigenlijk ondersteunen kun je controleren of het bestand /sys/class/scsi_host/host*/link_power_management_policy bestaat. Om de instellingen te veranderen schrijf je de waardes zoals beschreven in deze paragraaf eenvoudig naar deze bestanden of bekijk de bestanden om de huidige instelling te controleren.
Belangrijk — sommige instellingen zetten hot plugging uit Het instellen van ALPM naar min_power of medium_power zal automatisch de "Hot Plug" functie uitzetten.
3.7. Relatime schijf toegang optimalisatie De POSIX standaard vereist dat besturingssystemen bestandssysteem metadata onderhouden dat vastlegt wanneer elk bestand het laatst geopend is. Dit tijd-stempel wordt atime genoemd, en het onderhouden hiervan vereist een voortdurende reeks schrijf bewerkingen naar de opslag. Dit schrijven houdt opslag apparaten en hun links druk bezig en onder spanning. Omdat enkele toepassingen 25
Hoofdstuk 3. Kern infrastructuur en mechanismes
Ontwerp
gebruik maken van de atime data verspilt deze opslag apparaat activiteit energie. Belangrijk is dat het schrijven naar opslag zelfs gebeurt als het bestand niet gelezen wordt van opslag maar uit de cache. Al enige tijd, ondersteunt de Linux kernel een noatime optie voor mount en zal geen atime datat naar bestandssystemen schrijven als deze aangekoppeld zijn met deze optie. Het eenvoudig uitzetten van deze functie is echter problematisch omdat sommige toepassingen steunen op atime data en mislukken als het niet beschikbaar is. De kernel gebruikt in Fedora 14 ondersteunt een ander alternatief — relatime. Relatime onderhoudt atime data, maar niet voor elke keer als een bestand geopend wordt. Als deze optie aangezet is, wordt atime data alleen naar de schijf geschreven als het bestand gewijzigd is sinds de atime data voor het laatst is bijgewerkt (mtime), of als het bestand voor het laatst geopend is sinds meer dan een bepaalde tijdsperiode (standaard, één dag). Standaard worden nu alle bestandssystemen aangekoppeld met relatimeaangezet. Om deze functie te onderdrukken voor een volledig systeem, gebruik je de boot parameter default_relatime = 0. Als relatime standaard aangezet is op een systeem, kun je voor een bepaald bestandssysteem onderdrukken door dat bestandssysteem met de optie norelatime aan te koppelen. Tenslotte, om de standaard tijdsduur te veranderen voordat het systeem atime data van een bestand gaat vernieuwen, kun je de relatime_interval = boot parameter gebruiken, opgeven in seconden. De standaard waarde is 86400.
3.8. Energie plafond Fedora 14 ondersteunt de energie plafond functies die gevonden worden in de recente hardware, zoals HP Dynamic Power Capping (DPC) en Intel Node Manager (NM) technologie. Het gebruiken van energie plafond staat beheerders toe om het energieverbruik van de servers te beperken, maar het staat managers ook toe om data centra efficiënter te plannen, omdat het risico van overbelasting van de bestaande stroomvoorziening sterk verminderd wordt. Managers kunnen meer servers binnen dezelfde fysieke voetafdruk plaatsen en erop vertrouwen dat als het server energieverbruik beperkt wordt, de vraag naar energie tijdens zware belasting de beschikbare energie niet zal overschrijden.
HP Dynamic Power Plafonnering Dynamic Power Capping is een functie die beschikbaar is op bepaalde ProLiant en BladeSystem servers waarmee systeembeheerders het energieverbruik van een server of een groep servers kunnen beperken. Het plafond is een definitieve grens die de server niet zal overschrijden, ongeacht de huidige werklast. Het plafond heeft geen effect totdat de server zijn energie consumptie limiet bereikt. Op dat moment past een beheer processor CPU P-toestanden en de klok beperking aan om het energieverbruik te beperken. Dynamic Power Capping verandert het CPU gedrag onafhankelijk van het besturingssysteem, maar de integrated Lights-Out 2 (iLO2) firmware van HP geeft besturingssystemen toegang tot de beheer processor en daarom kunnen toepassingen in gebruikersruimte de beheer processor bevragen. De kernel gebruikt in Fedora 14 bevat een driver voor HP iLO en iLO2 firmware, wat programma's toestaat om beheer processors op /dev/hpilo/dXccbN te bevragen. De kernel bevat ook een uitbreiding van het hwmon sysfs interface om energie plafond functies te ondersteunen en een hwmon driver voor ACPI 4.0 energie meters die de sysfs interface gebruiken. Tezamen laten deze functies het besturingssysteem en de gebruikersruimte gereedschappen de geconfigureerde waarde van het energie plafond lezen, tezamen met de huidige energieverbruik van het systeem. 1
For further details, refer to the official site: HP Dynamic Power Capping .
1
http://h18013.www1.hp.com/products/servers/management/dynamic-power-capping/index.html
26
Ontwerp
Verbeterd grafische energiebeheer
Intel Node Manager Intel Node Manager legt een energie plafond op systemen met behulp van processor P-toestanden en T-toestanden om CPU performance daarom stroom verbruik te beperken. Door de instelling van een energie tactiek, kunnen beheerders systemen minder vermogen laten gebruiken in tijden wanneer systeem belasting laag is, bijvoorbeeld 's nachts of in het weekend. Intel Node Manager past CPU performance aan met Besturingssysteem-gerichte configuratie en Energiebeheer (OSPM) via de standaard Advanced Configuration and Power Interface. Als Intel Node Manager de OSPM driver bericht geeft van veranderingen in T-toestanden, maakt de driver overeenkomende veranderingen in de processor P-toestanden. Vergelijkbaar, als de Intel Node Manager de OSPM bericht geeft van veranderingen in de P-toestanden, verandert de driver de Ttoestanden overeenkomstig. Deze veranderingen gebeuren automatisch en vereisen geen verdere input van het besturingssysteem. Beheerders configureren en controleren Intel Node Manager met Intel Data Center Manager (DCM) software. For further details, refer to Node Manager — A Dynamic Approach To Managing Power In The Data 2 Center
3.9. Verbeterd grafische energiebeheer Fedora 14 bespaart energie op grafische en display apparaten door het elimineren van verschillende bronnen van onnodig verbruik.
LVDS reclocking Low-voltage differential signaling (LVDS) is een systeem voor overdragen van elektronische signalen via koperdraad. Een belangrijke toepassing van het systeem is het versturen van pixel informatie naar liquid crystal display (LCD) schermen in notebook computers. Alle beeldschermen hebben een ververs frequentie — de snelheid waarmee zij nieuwe data ontvangen van een grafische controller en het beeld op het scherm opnieuw opbouwen. Gewoonlijk ontvangt het scherm 60 keer per seconde nieuwe data (een frequentie van 60 Hz). Als een scherm en grafische controller aan elkaar gekoppeld via LVDS, gebruikt het LVDS systeem in elke ververs cyclus. Als het scherm inactief is, kan de ververs frequentie van vele LCD schermen verlaagd worden naar 30 Hz zonder enig merkbaar effect (in tegenstelling cathode ray tube (CRT) monitors, waar een daling van de ververs frequentie een karakteristieke flikkering produceert. De driver voor Intel grafische adapters ingebouwd in Fedora 14 voeren dit omlaag-klokken automatisch uit en besparen ongeveer 0.5 W als het scherm inactief is.
Geheugen zelf-verversen aanzetten Synchrone dynamic random access memory (SDRAM) — zoals gebruikt voor video geheugen in grafische adapters — wordt duizenden keren per seconde herladen zodat individuele geheugen cellen de data behouden die in hen opgeslagen is. Afgezien van de belangrijkste functie van het beheer van data, die in en uit het geheugen vloeit, is de geheugen controller normaal gesproken verantwoordelijk voor het initiëren van deze ververs cycli. SDRAM heeft echter ook een laag-vermogen zelf-ververs mode. In deze mode gebruikt het geheugen een interne timer voor het genereren van een zijn eigen ververs cyclus, waardoor het systeem geheugen controller kan afsluiten zonder gevaar voor de data die op dat moment in het geheugen is. De kernel gebruikt in Fedora 14 kan geheugen zelf-ververs aanzetten in Intel grafische adapters als ze inactief zijn, wat ongeveer 0.8 W bespaart..
2
http://communities.intel.com/docs/DOC-4766
27
Hoofdstuk 3. Kern infrastructuur en mechanismes
Ontwerp
GPU klok reductie Typische grafische verwerking eenheden (GPU's) bevatten interne klokken voor verschillende delen van hun interne circuits. De kernel gebruikt in Fedora 14 kan de frequentie van een aantal interne klokken in Intel en ATI GPU's verlagen. Vermindering van het aantal cycli die GPU onderdelen in een bepaalde tijd uitvoeren bespaart de energie die zij verbruikt zouden hebben in de cycli die ze niet uit te hoeven voeren. De kernel vermindert automatisch de snelheid van deze klokken als de GPU inactief is, en verhoogt het als GPU activiteit toeneemt. Verminderen van GPU klok cycli kan 5 W besparen.
GPU powerdown De Intel en ATI grafische drivers in Fedora 14 kunnen detecteren als er geen monitor aangesloten is op een adapter en sluiten daarom de GPU helemaal af. Deze functie is met name belangrijk voor servers waar niet continu een monitor op aangesloten is.
3.10. RFKill Veel computersystemen bevatten radiozenders, inclusief Wi-Fi, Bluetooth en 3G apparaten. Deze apparaten verbruiken energie, die verloren als het apparaat niet in gebruik is. RFKill is een sub-systeem in the Linux kernel met een interface via welke radiozenders in een computersysteem kunnen worden bevraagd, geactiveerd en gedeactiveerd. Als de zenders gedeactiveerd worden, kunnen ze in een toestand geplaatst worden waarin software ze weer kan activeren (een zachte blokkering) of waarin software ze niet meer kan activeren (een harde blokkering). De RFKill kern biedt de toepassing programmeer interface (API) voor het sub-systeem. Kernel drivers die zijn ontworpen ter ondersteuning van de RFkill gebruiken deze API gebruiken voor registratie met de kernel, en bevatten methodes voor het aanzetten en uitzetten van het apparaat. Daarnaast biedt de RFKill kern meldingen die gebruiker toepassingen kunnen interpreteren en manieren voor gebruiker toepassingen om de zender toestand te bevragen. De RFKill interface bevindt zich in /dev/rfkill, wat de huidige toestand van alle radiozenders op het systeem bevat. Elk apparaat heeft zijn huidige RFKill toestand geregistreerd in sysfs. Bovendien geeft RFKill uevents uit voor elke verandering van toestand in een apparaat waarvoor RFKill aangezt is. Rfkill is een commando-regel gereedschap waarmee je apparaten op het systeem waarvoor RFKill aangezet is kunt bevragen en veranderen. Om het gereedschap te verkrijgen, installeer je het rfkill pakket. Gebruik het commando rfkill list om een lijst van apparaten te krijgen, die allemaal een index nummer met zich gekoppeld hebben, beginnend bij 0. Je kunt dit index nummer gebruiken om rfkill te zeggen om een apparaat te blokkeren of deblokkeren, bijvoorbeeld: rfkill block 0
blokkeert het eerste apparaat op het systeem waarvoor RFKill aangezet is. Je kunt rfkill ook gebruiken voor het blokkeren van bepaalde soorten apparaten, of alle apparaten waarvoor RFKill aangezet is. Bijvoorbeeld: rfkill block wifi
blokkeert alle Wi-Fi-apparaten op het systeem. Om alle apparaten waarvoor RFKill aangezet is te blokkeren, voer je uit: 28
Ontwerp
Optimalisaties in de gebruikersruimte
rfkill block all
Om apparaten te deblokkeren, voer je rfkill unblock uit in plaats van rfkill block. Voor een volledige lijst van apparaat categorieën die rfkill kan blokkeren, voer je rfkill help uit.
3.11. Optimalisaties in de gebruikersruimte Het verminderen van de hoeveelheid werk dat uitgevoerd wordt door de systeem hardware is fundamenteel voor het besparen van energie. Daarom, hoewel de veranderingen beschreven in Hoofdstuk 3, Kern infrastructuur en mechanismes het systeem toestaan om te werken in diverse toestanden van verminderd energieverbruik, zullen toepassingen in de gebruikersruimte die overbodig werk van de systeem hardware vragen voorkomen dat de hardware naar die toestanden gaat. Tijdens de ontwikkeling van Fedora 14 zijn audits uitgevoerd op de volgende gebieden om onnodige eisen aan de hardware te verminderen:
Verminderde wake-ups Fedora 14 maakt gebruik van een tik-vrijekernel refereer naar Paragraaf 3.4, “Tik-vrije kernel”), waardoor de CPU's langer in diepere inactieve staten blijven. De timer tik is echter niet de enige bron van bovenmatige CPU wake-ups en functie aanroepen vanuit toepassingen kunnen ook voorkomen dat de CPU naar inactieve toestanden gaat of daar blijft. Onnodige functie aanroepen werden gereduceerd in meer dan 50 toepassingen.
Verminderde opslag en netwerk I/O Input of output (IO) van opslag apparaten en netwerk interfaces zorgt ervoor dat apparaten energie verbruiken. In opslag en netwerk apparaten die gereduceerde energie toestanden hebben als ze inactief zijn (bijvoorbeeld ALPM of ASPM), kan dit verkeer voorkomen dat het apparaat naar een inactieve toestand gaat of daarin blijft, en kan voorkomen dat harde schijven langzamer gaan draaien als ze niet in gebruik zijn. Buitensporige en onnodige eisen aan opslag zijn geminimaliseerd in verschillende toepassingen. In het bijzonder, die aanvragen die voorkomen harde schijven langzamer gaan draaien.
Initscript audit Services die automatisch worden gestart of nodig zijn of niet hebben een groot potentieel om systeem hulpbronnen te verspillen. Services moeten daarom standaard waar mogelijk op "off" of "on demand" ingesteld zijn. Bijvoorbeeld, de BlueZ service die ondersteuning levert voor Bluetooth draaide vroeger automatisch als het systeem opgestart werd, of er nu wel of geen Bluetooth hardware aanwezig. Het BlueZ initscript controleert nu of Bluetooth hardware op het systeem aanwezig voordat de service gestart wordt.
29
30
Ontwerp
Ontwerp
Gebruik voorbeelden Dit hoofd stuk beschrijft twee soorten gebruik voorbeelden ter illustratie van de analyse en configuratie methodes die elders in deze handleiding beschreven worden. In het eerste voorbeeld bekijken we typische servers en de tweede een typische laptop.
4.1. Voorbeeld — Server Een typische standaard server komt tegenwoordig met in principe alle noodzakelijke hardware functies ondersteund in Fedora 14. Het eerste om rekening mee te houden is het soort werkbelasting waarvoor de server vooral gebruikt wordt. Op basis van deze informatie kun je bepalen welke componenten geoptimaliseerd kunnen worden voor energiebesparing. Ongeacht het type server is grafische performance in het algemeen niet nodig. Daarom kunnen GPU energiebesparingen aangezet worden.
Webserver Een webserver heeft netwerk en schijf I/O nodig. Afhankelijk van de externe verbindings snelheid kan 100 Mbit/s volstaan. Als de machine voornamelijk statische pagina's bedient, hoeft de CPU performance niet erg belangrijk te zijn. Opties voor energiebeheer kunnen daarom omvatten: • geen schijf of netwerk plug-ins voor tuned. • ALPM aangezet. • De ondemand regelaar aangezet. • netwerk kaart beperkt tot 100 Mbit/s.
Compute server Een compute server heeft vooral CPU performance nodig. Energiebeheer keuzes zijn bijvoorbeeld: • afhankelijk van de taken en waar dataopslag plaats vindt, schijf of netwerk plug-ins voor tuned; of voor batch mode systemen, volledig actieve tuned. • afhankelijk van het gebruik, misschien de performance regelaar.
Mailserver Een mailserver heeft meestal schijf I/O en CPU performance nodig. Energiebeheer keuzes zijn bijvoorbeeld: • ondemand regelaar aangezet, omdat de laatste paar procent CPU performance niet belangrijk zijn. • geen schijf of netwerk plug-ins voor tuned. • netwerk snelheid moet niet beperkt worden, omdat mail vaak intern is en dus kan profiteren van een 1 Gbit/s of 10 Gbit/s verbinding.
Bestand server Bestand server vereisten zijn vergelijkbaar met die van een mailserver, maar afhankelijk van het gebruikte protocol, kan wellicht meer CPU performance vragen. Typisch vereisen Samba-gebaseerde servers meer CPU dan NFS, en NFS vereist doorgaans meer dan iSCSI. Maat toch moet je instaat zijn om de ondemand regelaar te gebruiken. 31
Hoofdstuk 4. Gebruik voorbeelden
Ontwerp
Map server Een map server heeft typische lagere vereisten voor schijf I/O, in het bijzonder als deze voorzien is met voldoende RAM. Netwerk latentie is belangrijk hoewel netwerk I/O minder is. Je kunt netwerk latentie afstemming overwegen met een lagere verbindings snelheid, maar je moet dit zorgvuldig testen voor jouw netwerk.
4.2. Voorbeeld — Laptop Een andere veel voorkomende plaats waar energiebeheer en besparingen echt een verschil kan maken zijn laptops. Omdat laptops door hun ontwerp in de regel al drastisch minder energie gebruiken dan werkstations of servers, is het potentieel voor absolute besparingen dan voor andere machines. In de batterij mode kan echter elke besparing helpen om een paar minuten meer batterij leven uit een laptop te halen. Hoewel deze paragraaf zich richt op laptops in de batterij mode, kun je zeker nog enkele of alle van deze afstemmingen gebruiken ook als een laptop op wisselstroom werkt. Besparingen voor losse componenten maken meestal een groter relatief verschil op laptops dan op werkstations. Bijvoorbeeld, een 1 Gbit/s netwerk interface op 100 Mbit/s bespaart rond 3-4 Watt. Deze besparing is voor een typische server met een totaal energieverbruik van ongeveer 400 Watt, ongeveer 1%. De energiebesparing op enkel dit ene onderdeel op een laptop met een totaal energieverbruik van ongeveer 40 Watt bedraagt 10% van het totaal. Specifieke energiebesparende optimalisaties op een typische laptop zijn: • Configureer de systeem BIOS om alle hardware uit te zetten die je niet gebruikt. Bijvoorbeeld, parallelle of seriële poorten, kaart lezers, webcams, WiFi en Bluetooth om maar een paar mogelijke kandidaten te noemen. • Dim het display in de donkere omgevingen waar je niet de volledige verlichting nodig hebt om het scherm comfortabel te lezen. Gebruik Systeem+Voorkeuren → Energiebeheer op het GNOME bureaublad, Kickoff Application Launcher+Computer+Systeeminstellingen+Geavanceerd → Energiebeheer op het KDE bureaublad, of gnome-power-manager of xbacklight op de commando-regel; of de functie toetsen op jouw laptop. • Use the laptop-battery-powersave profile of tuned-adm to enable a whole set of powersaving mechanisms. Note that performance and latency for the hard drive and network interface are impacted. Bovendien (of als alternatief) kun je kleine aanpassingen aanbrengen in vele verschillende systeem instellingen: • gebruik de ondemand regelaar (standaard aangezet in Fedora 14) • zet laptop mode aan (onderdeel van het laptop-battery-powersave profiel): echo 5 > /proc/sys/vm/laptop_mode
• verhoog flush tijd naar schijf (onderdeel van het laptop-battery-powersave profiel): echo 1500 > /proc/sys/vm/dirty_writeback_centisecs 1
• disable nmi (non-maskable interrupt) watchdog (part of the laptop-battery-powersave profile): echo 0 > /proc/sys/kernel/nmi_watchdog
32
Ontwerp
Voorbeeld — Laptop
• zet AC97 geluid energiebesparing aan ( standaard aangezet in Fedora 14): echo Y > /sys/module/snd_ac97_codec/parameters/power_save
• zet multi-kern energiebesparing aan (onderdeel van het laptop-battery-powersave profiel): echo Y > /sys/module/snd_ac97_codec/parameters/power_save
• zet USB auto-suspend aan: for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done
Note that USB auto-suspend does not work correctly with all USB devices. • zet minmale energie instelling aan voor ALPM (onderdeel van het laptop-battery-powersave profiel): echo min_power > /sys/class/scsi_host/host*/link_power_management_policy
• koppel bestandssysteem aan met relatime (standaard in Fedora 14): mount -o remount,relatime mountpoint
• activeer de beste energiebesparing mode voor harde schijven (onderdeel van het laptopbattery-powersave profiel): hdparm -B 1 -S 200 /dev/sd*
• zet CD-ROM bevragen uit (onderdeel van het laptop-battery-powersave profiel): hal-disable-polling --device /dev/scd*
• verminder de scherm helderheid naar 50 of minder, bijvoorbeeld: xbacklight -set 50
• activeer DPMS voor inactief scherm: xset +dpms; xset dpms 0 0 300
• reduceer Wi-Fi energie niveaus (onderdeel van het laptop-battery-powersave profiel): for i in /sys/bus/pci/devices/*/power_level ; do echo 5 > $i ; done
• zet Wi-Fi uit: echo 1 > /sys/bus/pci/devices/*/rf_kill
• beperk bekabeld netwerk tot 100 Mbit/s (onderdeel van het laptop-battery-powersave profiel):
33
Hoofdstuk 4. Gebruik voorbeelden
ethtool -s eth0 advertise 0x0F
34
Ontwerp
Ontwerp
Ontwerp
Bijlage A. Tips voor ontwikkelaars Elke goed programmering boek behandelt problemen met geheugen toewijzing en de performance van specifieke functies. Als je jouw software ontwikkelt, wees dan bedacht op zaken die het energieverbruik op de systemen waarop de software draait kunnen laten toenemen. Hoewel deze overwegingen geen invloed hebben op elke regel van de code, kun je jouw code optimaliseren in gebieden die vaak knelpunten voor de performance zijn. Sommige technieken die vaak problematisch zijn omvatten: • het gebruik van threads. • onnodige CPU wake-ups en inefficiënt gebruik van wake-ups. Als je moet wekken, doe dan alles in een keer (race naar niet-actief) en zo snel mogelijk. • [f]sync() onnodig gebruiken. • onnodig actief bevragen of korte, regelmatige time-outs gebruiken (Reageer in plaats hiervan op gebeurtenissen). • wake-ups niet efficiënt gebruiken. • inefficiënte schijf toegang. Gebruik grote buffers om frequente schijf toegang te voorkomen. Schrijf een groot blok in een keer. • inefficiënt gebruik van timers. Groepeer timers over de toepassingen (of zelfs over verschillende systemen) als dat mogelijk is. • buitensporige I/O, energieverbruik of geheugengebruik (met inbegrip van geheugen lekken). • uitvoeren van onnodige berekeningen. De volgende paragrafen bekijken deze gebieden in meer detail.
A.1. Het gebruik van threads Het wordt algemeen aangenomen dat gebruik van threads toepassingen sneller en beter laten draaien, maar dat is niet waar in elk geval.
Python
1
Python gebruikt de Global Lock Interpreter , dus threads geven alleen voordeel voor grotere I/O 2 activiteiten. Unladen-swallow is een snellere implementatie van Python waarmee je jouw code zou kunnen optimaliseren.
Perl Perl threads werden oorspronkelijk gemaakt voor toepassingen die draaien op systemen zonder forking (zoals systemen met 32-bits Windows besturingssystemen). In Perl threads wordt de data gekopieerd voor elke enkele thread (Copy On Write). Data wordt standaard niet gedeeld, omdat gebruikers het niveau data deling moeten kunnen bepalen. Voor data deling moet de threads::shared module opgenomen worden. Data wordt dan echter niet alleen gekopieerd (Copy On Write), maar de
1 2
http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock http://code.google.com/p/unladen-swallow/
35
Bijlage A. Tips voor ontwikkelaars
Ontwerp
module maakt ook gebonden variabelen aan voor de data, wat nog meer tijd kost en zelfs langzamer 3 is.
C C threads delen hetzelfde geheugen, elke thread heeft zijn eigen stack, en de kernel hoeft geen nieuwe bestand descriptors aan te maken en nieuwe geheugen ruimte toe te wijzen. C kan de ondersteuning van meer CPU's voor meer threads echt gebruiken. Gebruik daarom voor het maximaliseren van de performance van jouw threads een laag-niveau taal zoals C of C++. Als je een script taal gebruikt, overweeg dan het schrijven van een C binding. Gebruik profilers om slecht 4 presterende delen van jouw code te identificeren.
A.2. Wake-ups Veel toepassingen scannen configuratiebestanden voor veranderingen. In veel gevallen wordt de scan uitgevoerd met een vast interval, bijvoorbeeld elke minuut. Dit kan een probleem zijn, want het dwingt een schijf om opgewekt te worden uit een spin-down. De beste oplossing is het vinden van een goed interval, een goed controle mechanisme, of om te controleren op wijzigingen met inotify en te reageren op gebeurtenissen. Inotify kan verscheidene wijzigingen in een bestand of map controleren. Bijvoorbeeld: int fd; fd = inotify_init(); int wd; /* checking modification of a file - writing into */ wd = inotify_add_watch(fd, "./myConfig", IN_MODIFY); if (wd < 0) { inotify_cant_be_used(); switching_back_to_previous_checking(); } ... fd_set rdfs; struct timeval tv; int retval; FD_ZERO(&rdfs); FD_SET(0, &rdfs); tv.tv_sec = 5; value = select(1, &rdfs, NULL, NULL, &tv); if (value == -1) perror(select); else { do_some_stuff(); } ...
Het voordeel van deze aanpak is de variëteit aan controles die je kunt uitvoeren. De belangrijkste beperking is dat op een systeem slechts een beperkt aantal bewakers beschikbaar zijn. Het aantal kan verkregen worden uit /proc/sys/fs/inotify/max_user_watches en hoewel het gewijzigd kan worden, wordt dat niet aangeraden. Bovendien, in het geval dat inotify mislukt, moet de code terug vallen op een andere check methode, wat meestal veel exemplaren van #if #definein de broncode betekent.
3 4
http://www.perlmonks.org/?node_id=288022 http://people.redhat.com/drepper/lt2009.pdf
36
Ontwerp
Fsync
Voor meer informatie over inotify, refereer je naar de inotify manual pagina.
A.3. Fsync Fsync staat bekend als een I/O dure bewerking, maar dit is niet helemaal waar. Bijvoorbeeld, refereer 5 naar het artikel van Theodore Ts'o Don't fear the fsync! en de bijbehorende discussie. Firefox riep vroeger de sqlite bibliotheek aan telkens als de gebruiker klikte op een link naar een nieuwe pagina. Sqlite riep genaamd fsync aan en vanwege de bestandssysteem instellingen (vooral ext3 met data-ordered mode) was er een lange vertraging als er niets gebeurde. Dit kon lang duren (tot 30 seconden) als een ander proces op hetzelfde moment een groot bestand aan het kopiëren was. In andere gevallen echter, waar fsync helemaal niet werd gebruikt, ontstonden problemen met de overgang naar het ext4 bestandssysteem. Ext3 was ingesteld in de data-ordered mode, welke het geheugen om de paar seconden spoelde en opsloeg naar een schijf. Maar met ext4 en laptop_mode, was het interval tussen opslag acties langer en data zou verloren kunnen gaan als het systeem onverwacht uitgeschakeld werd. Nu ext4 is gerepareerd, maar we moeten het ontwerp van onze toepassingen nog steeds zorgvuldig overwegen en fsync juist gebruiken. Het volgende eenvoudige voorbeeld van lezen en schrijven in een configuratiebestand laat zien hoe een back-up van een bestand gemaakt kan worden of hoe gegevens verloren kunnen gaan: /* open and read configuration file e.g. ~/.kde/myconfig */ fd = open("./kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT); read(myconfig); ... write(fd, bufferOfNewData, sizeof(bufferOfNewData)); close(fd);
Een betere aanpak zou zijn: open("/.kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT); read(myconfig); ... fd = open("/.kde/myconfig.suffix", O_WRONLY|O_TRUNC|O_CREAT); write(fd, bufferOfNewData, sizeof(bufferOfNewData)); fsync; /* paranoia - optional */ ... close(fd); rename("/.kde/myconfig", "/.kde/myconfig~"); /* paranoia - optional */ rename("/.kde/myconfig.suffix", "/.kde/myconfig");
5
http://thunk.org/tytso/blog/2009/03/15/dont-fear-the-fsync/
37
38
Ontwerp
Ontwerp
Bijlage B. Herzieningsgeschiedenis Herziening Thu Jul 29 2010 0.1 Upstream brengen
Rüdiger Landmann
[email protected]
39
40