Gerben Blom is technisch manager bij Alten PTS. Hij is verantwoordelijk voor innovatie, kennisdeling en kennisopbouw, onder meer op het gebied van embedded software en mobiele-applicatieontwikkeling.

20 July 2010

Energieverbruik is een steeds belangrijker systeemaspect, al is het maar omdat steeds meer apparaten, en zelfs auto‘s, afhankelijk zijn van batterijen. Dat software een grote invloed heeft op de energieconsumptie is goed te zien in de mobiele markt, waar updates van de Android- en Iphone-besturingssystemen de batterijduur significant hebben verlengd. Dit artikel geeft een aantal technieken en organisatorische maatregelen om optimaal rekening te houden met energieverbruik in het softwareontwikkeltraject.

Energieverbruik speelt een steeds grotere rol bij het systeemontwerp. Aan de ene kant van het spectrum vormen energieconsumptie en koeling bottlenecks voor veel datacentra, die volgens een recent rapport van Gartner alleen maar groter worden. Aan de andere kant is batterijlevensduur, en dus energieverbruik, een essentieel aspect van mobiele systemen.

Bij energiezuinige apparaten denken we meestal niet direct aan de programmatuur die een systeem aanstuurt. Toch heeft die software meer invloed dan op het eerste gezicht lijkt. Updates van de Iphone-firmware hebben bijvoorbeeld belangrijke effecten gehad op de energieconsumptie, zowel positief (van 2.0 naar 2.1) als negatief (van 2.21 naar 3.0).

Powermanagement

Om het energieverbruik te optimaliseren, kunnen we een flink aantal technische maatregelen nemen. Een belangrijke ingreep is reductie van het CPU-gebruik. Dit kan bijvoorbeeld door rekenwerk ’in de cloud‘ te laten uitvoeren. Dit moet dan wel opwegen tegen de energiekosten van de communicatie. Soms kunnen we taken uitbesteden aan randapparatuur. Zo gebruikt de XO-laptop voor onderwijs in ontwikkelingslanden een microcontroller die de CPU weer laat ontwaken als de gebruiker het systeem bedient. Dezelfde strategie passen e-readers toe. Netwerkverkeer kan soms worden afgehandeld zonder tussenkomst van de CPU.

Hierbij is het belangrijk dat taken die niet bijdragen aan de systeemfunctionaliteit, bijvoorbeeld een klokapplicatie die achter een window verscholen gaat, ook geen processorcycli kosten. In smartphones levert dat anders een app op die de batterij leegtrekt. Is er weinig werk voor de CPU, dan zorgen technieken als dynamic voltage en frequency scaling er automatisch voor dat de processor aanzienlijk minder energie verbruikt.

Vaak biedt de hardware ook verschillende mogelijkheden waarmee we eigenhandig het energieverbruik kunnen beperken. De meeste CPU‘s hebben bijvoorbeeld een idle-toestand waarin ze minder energie opslurpen doordat de klok naar de CPU is uitgeschakeld. Polling of busy loops verstoren echter de terugval naar deze stand. Dat soort mechanismen moeten we dus zo veel mogelijk vermijden.

Ongebruikte randapparatuur moeten we ook zo veel mogelijk uitschakelen. Een manier om dit te regelen in een multiprocessysteem is door een systeembrede powermanager te gebruiken waarbij elk proces dat een randapparaat gebruikt zich aan- en afmeldt. De powermanager kan dan besluiten om een device uit te schakelen als alle processen die het gebruikten zich hebben afgemeld.

Cover illustratie 400px

Nadeel is dat sommige randapparaten, bijvoorbeeld voor Wifi, veel tijd nodig hebben om weer actief te worden. Een gebruiksprofiel kan dan dienen om toekomstig gedrag te voorspellen. Wat een gebruiker van een e-reader zal gaan doen, is goed te voorspellen aan de hand van zijn eerdere handelingen (bladeren door een boek of juist pagina voor pagina lezen).

Ook de software biedt vaak energiereductiemogelijkheden die we kunnen benutten. Besturingssystemen als Linux en Windows CE voorzien al in functionaliteit voor powermanagement. Als we niet zelf iets ontwikkelen, moeten we in ieder geval de functies gebruiken die het OS ons geeft. Het komt te vaak voor dat devicedrivers niet zijn ingericht op het gebruik van de energiemanagement-Api. In het geval dat we deze stuurprogramma‘s extern laten ontwikkelen, is het zaak om dit als eis op te geven.

Het beste is om energievretende randapparatuur helemaal te vermijden. Vaak gaat het dan om een display of communicatie. Bij sommige draadloze sensornodes is het bijvoorbeeld beter om duizend operaties uit te voeren op de MCU dan om één bit over de radioverbinding te sturen. Als we communicatie kunnen voorkomen, mag dat best wat rekenkracht kosten.

Een alternatieve strategie is om randapparaten of zelfs softwarefuncties uit te schakelen als hun energieconsumptie onder een bepaalde grens komt. Dit voorkomt uitval van het hele systeem. Dat gaat natuurlijk alleen als de functionaliteit niet essentieel is voor de werking. Een goed voorbeeld hier is de Live-functie (het GPRS-modem) van de Tomtom Go, die uitschakelt als de batterij leegraakt.

Systeemeis

Technische maatregelen als deze zijn geen vanzelfsprekendheid. De praktijk leert dat we vaak pas achteraf op energieverbruik optimaliseren. Voor enkele maatregelen is het echter erg duur of zelfs onmogelijk om ze achteraf nog door te voeren. Daarom dienen we de projectorganisatie in te richten met energieverbruik als essentieel aspect van de software. Alleen dan kunnen we op passende wijze technische maatregelen treffen. Hoe? Door een aantal simpele ingrepen te doen in de organisatie van het ontwikkelproces.

Bij het design van een systeem met een passief scherm kwam aan het licht dat de software niet kon bepalen of het display al was ververst. De grafische chip kon daardoor niet direct na het verversen worden uitgeschakeld; eerst moesten we een veiligheidsmarge inbouwen, wat ten koste ging van de batterijlevensduur. Dit laat zien hoe belangrijk het is om al in een vroeg stadium aandacht te hebben voor energieverbruik. Een uitstekende manier daarvoor is door energieconsumptie als niet-functionele eis mee te nemen in het bestek. Dat is extra belangrijk als we een deel van het systeem uitbesteden, omdat de focus van een subcontractor vaak ligt op functionaliteit.

Daarnaast is het zaak om de eis voor energieverbruik vanaf het begin te monitoren. Een eenvoudige testopstelling volstaat hier vaak al. Door de energieconsumptie te monitoren, kunnen we leren van de ervaringen in het ontwikkeltraject. Alleen al het feit dát we meten, creëert bewustzijn van het energieverbruik bij de dagelijkse ontwerpbeslissingen.

Een hoge meetwaarde geeft bovendien niet mis te verstane feedback op het design. Daarbij is het belangrijk dat we vaak meten, zodat we snel terugkoppeling krijgen op genomen ontwerpbeslissingen. Geautomatiseerde tests zijn hiervoor ideaal. Initieel is het meer werk om ze op te zetten, maar uiteindelijk leveren ze hun geld vaak dubbel en dwars op door de snelle feedback op de ongewilde neveneffecten van de ontwerpkeuzes.

Hoewel technische maatregelen het meest voor de hand liggen, is de meeste winst te halen uit dit soort organisatorische ingrepen. Enerzijds is dat prettig omdat technische maatregelen meestal duur of ingewikkeld zijn. Anderzijds zijn de organisatie en het proces lastiger te veranderen dan de techniek.

Als u één ding wilt doen om de energieconsumptie van een systeem te verminderen, maak dat verbruik dan in een zo vroeg mogelijk stadium tot een harde systeemeis. De technische maatregelen volgen dan vanzelf en zijn ook blijvend van aard.