Digitalisaation ja tätä aiemmin ATK:n vaikutus toimintojen tehostumiselle on kiistatonta ja nykyistä yhteiskuntaa on vaikea kuvitella ilman kaikkialle ulottuvia ohjelmistoja. Käytämme ohjelmistoja jatkuvasti ja ne ovat myös koko ajan taustalla helpottamassa ja ohjaamassa elämäämme. Ohjelmistojen merkitys on suuri ja nopeasti kasvava myös energiankulutuksessa.

Ilmastonmuutoksen torjumiseksi on syytä kääntää kaikki kivet ja myös ICT-teollisuuden täytyy osallistua talkoisiin. Ohjelmistoja on toteutettu viimeiset parikymmentä vuotta ilman merkittävää huolta tehokkuudesta laitteiden nopeuden kasvaessa riittävästi. Lisäksi pilvestä saa lisätehoa muutamalla napsautuksella tai jopa automaattisesti. Skaalautuminen raudalla on ollut halvempaa kuin koodin optimointi.

Kaikki tiedon käsittely, esittäminen ja siirtäminen kuluttavat energiaa. Tällä hetkellä puhdasta energiaa ei ole riittävästi tarjolla ja uusiutuvien energiamuotojen haasteena on tuotannon suuret vaihtelut. Energian säästäminen on siis järkevää.

Vaikka moni datakeskus toimiikin uusiutuvalla tai jopa hiilineutraalilla energialla, tilanne ei muutu kokonaisuutta katsoen lainkaan. Likaisempaa energiaa, jota edelleen tuotetaan, käytetään muualla. Energian kokonaiskulutuksen vähentäminen ja kulutuksen siirtäminen päiviin, joina uusiutuvaa energiaa on paljon tarjolla, ovat suorastaan välttämättömiä toimia planeettamme kannalta.

Mihin energia kuluu

Ohjelmistojen energiankulutus on periaatteessa varsin yksinkertaista. Tiedon käsittely vaatii kellosyklejä prosessorilta ja tiedon siirtäminen käsiteltäväksi esimerkiksi muistista, verkosta tai massamuistista vaatii sekä prosessori- että IO-tehoa.

Hankalaksi asian tekee kuitenkin ohjelmistojen monimutkaisuus, kerroksellisuus ja mittauspisteiden puute. Yhdessä laitteessa on helposti satoja prosesseja käynnissä kuluttamassa energiaa ja jokainen näistä on arkkitehtuuriltaan, algoritmeiltaan ja dataltaan omanlaisensa. Vaikka laitteen käyttämä energia voidaan mitata siihen syötetyn sähkötehon määrästä, niin sen jakautuminen eri osien kesken on epäselvää ja vaikeasti mitattavissa.

Modernien ohjelmistojen energiankulutusmalli

Leijonanosa nykyisin kehitettävistä ohjelmistoista pohjautuu asiakas– palvelin -malliin, eli verkossa on palvelin, joka tarjoaa erilaisia palveluja päätelaitteessa toimivaan sovellukseen. Esimerkiksi käytännössä kaikki selaimella käytettävät palvelut ovat tällaisia, samoin suurin osa mobiilisovelluksista ja enenevä määrä työpöytäsovelluksista – joissa tyypillisin käyttötapaus on lisenssien tai tilauksen voimassaolon varmistaminen.

Yksityiskohdat voivat vaihdella merkittävästi erilaisten ohjelmistojen välillä, mutta energiankulutuksen kannalta malli voidaan tiivistää kolmeen osaan:

  • Palvelinkeskuksessa toimivien ohjelmistojen energiankulutus. Täällä on varsinainen sovelluspalvelin, jossa on ohjelmiston keskitetty liiketoimintalogiikka ja joka huolehtii yhteydenpidosta päätelaitteessa olevan sovelluksen kanssa. Lisäksi käytössä on tallennus- ja tietokantapalvelimia ja mahdollisesti erilaisia apupalvelimia, kuten varmennus- ja palautusratkaisuja.Pilviympäristössä toimiva ohjelmisto voi olla rajoiltaan häilyvämpi nojautuessaan pilviympäristön valmiisiin palveluihin, jotka ovat samalla olennainen osa ohjelmiston ajoympäristöä.Palvelinkeskuksen sisäinen tiedonsiirto lasketaan tähän samaan momenttiin.
  • Tiedonsiirto palvelinkeskuksen ja päätelaitteen välillä. Tiedonsiirrossa kuluva energia on laskennan kannalta helpointa ajatella lineaariseksi suhteessa datan määrään. Siirrettävän tiedon sisältö voi vaihdella hyvin paljon erilaisten sovellusten välillä, mutta energiankulutus on tavu tavulta sama datan kulkiessa samaa siirtotietä. Siirtoteiden välillä on taas merkittäviä tehoeroja.Tiedon käsittely palvelimessa, esimerkiksi siirtokuntoon laittaminen, pakkaus, salaaminen ja purkaminen kuuluvat palvelinkeskuksen kulutukseen ja vastaavasti samat toimet päätelaitteessa kuuluvat päätelaitteen kulutukseen.
  • Käyttäjän päätelaitteessa käyttämä osa sovelluksesta. Päätelaitteessa toimiva ohjelmisto voi olla hyvin yksinkertainen ja staattinen webbisivu tai monipuolinen ja -mutkainen päätelaitteeseen asennettu sovellus.Energiankulutuksen laskennan kannalta on sinänsä sama, että ajetaanko laitteessa sitä varten kirjoitettua natiivisovellusta vai toimiiko sovellus selaimen sisällä. Jälkimmäisessä tapauksessa selaimen kuluttama energia lasketaan mukaan osaksi sovelluksen energiankulutusta.

Energiankulutuksen optimointi

Kaikkien IT-järjestelmien tehtävänä on käsitellä tietoa ja esittää sitä käyttäjälle ymmärrettävässä muodossa. Tiedonkäsittely voi sijaita sekä palvelinkeskuksessa että päätelaitteessa. Käsittelyn sijainti muuttaa siirrettävän tiedon määrää ja mahdollisesti laskentakertojen määrää merkittävästikin.

Sovelluksen arkkitehtuurin suunnittelussa onkin syytä pyrkiä tasapainoiseen ratkaisuun, joka minimoi sekä käsittelyn että siirron ottamalla huomioon jokaisen osa-alueen toteutuksen erityispiirteet energiankulutuksen kannalta. Tämä kuulostaa yksinkertaiselta, mutta käytännön tasolla ongelma ei ole mitenkään triviaali. Lisäksi suunnittelussa voi käydä kuten entisessä itänaapurissa, Viktor Tshernomyrdinin sanoin: “Kyllä me parhaamme yritimme, mutta kävi taas kuten aina.”

Erityisen vaarallista on keskittyä optimoimaan vain yhtä aluetta kahden muun kustannuksella, ellei tähän ole erittäin painavaa syytä, esimerkiksi tiedonsiirron kaista on hyvin kapea tai kustannukset merkittävät – vaikkapa kommunikointi avaruusluotainten kanssa. Helposti nimittäin käy niin, että tehoa tarvitaankin lisää muualla tai käyttökokemus muuttuu huonoksi ja käyttäjät kaikkoavat palvelusta.

Toisaalta jokainen sovellus on omanlaisensa yksilö omien vahvuuksiensa ja heikkouksiensa kanssa. Jotta asiaa voi lähestyä analyyttisemmin, sitä voidaan jäsentää lean-menetelmistä tutun hukan (waste) avulla.

Hukka

Leanissa “hukalla tarkoitetaan ylimääräisiä, tuottamattomia toimintoja, jotka hidastavat prosessia tai tuottavat tarpeettomia kustannuksia.” Energiatehokkuuden kannalta hukka voidaan määritellä ylimääräisiksi, tuottamattomiksi toiminnoiksi, jotka kuluttavat tarpeettomasti energiaa. Kuten leanissakin, energiahukkia on erilaisia.

Tässä oletetaan, että sovellus on sinänsä toteutettu oikein. Jos sovellus tekee tuhat turhaa tietokantakyselyä väärin kirjoitetussa silmukassa jokaisessa operaatiossaan, lasken sen ensisijaisesti ohjelmointivirheeksi enkä pelkäksi hukaksi – vaikka hukkaahan tuokin operaatio lopulta on. Hukka on enemmän ajattelemisen tai toteutuksen laiskuutta kuin varsinaisia virheitä ja hukan poistaminen on hyvin harvoin suoraviivaista.

Erilaisia hukkia on suuri määrä ja niiden merkitys energiatehokkuuden kannalta vaihtelee merkittävästi ohjelmiston luonteesta, käyttötavasta ja sen ympärillä olevasta kokonaisarkkitehtuurista riippuen.

Olen tunnistanut seuraavia hukkia ja laittanut ne vaikutukseltaan suuruusjärjestykseen, merkittävin ensimmäisenä:

  • Turhat ohjelmistot
  • Ohjelmiston käyttö väärään tarkoitukseen
  • Käyttäjien virheistä aiheutuva hukka
  • Väärä arkkitehtuuri
  • Väärät tietomallit
  • Turha tieto
  • Optimoimaton tieto
  • Tiedonsiirto varmuuden vuoksi
  • Algoritmillinen tehottomuus
  • Käyttäjien harhaanjohtaminen
  • Liikaa koodia
  • Tehoton ohjelmointikieli
  • Hukka ohjelmiston käynnistyessä
  • Silmäkarkit

Näitä hukkia omassa sovelluksessa tunnistamalla ja poistamalla voidaan saavuttaa merkittäviäkin energiansäästöjä.

Olen avannut nämä hukat tarkemmin ja kirjannut erilaisia vinkkejä sovelluskehittäjille kirjoittamaani Vihreä Koodi -kirjaan, jonka voi ladata Exoven sivuilta: exove.com/fi/vihrea-koodi/


Janne Kalliola on Exoven perustaja ja kasvujohtaja. Hän on koodannut yhdeksänvuotiaasta asti ja viimeisen parin vuoden aikana puhunut paljon vihreästä koodaamisesta ja ekotehokkaasta IT:stä.