Skip to main content
Keksit
Käytämme evästeitä analytiikkaan, markkinointiin ja sen kohdentamiseen. Voit lukea selosteen täältä.
16.2.2024 | Teknologia

Johdatus ohjelmien energiatehokkuuteen

Ohjelmien energiatehokkuudesta on alettu puhua yhä enemmän. Tässä lyhyt johdatus aiheeseen.

Lähivuosina on yhä enemmän alettu kiinnittää huomiota ohjelmistojen energiankulutukseen sekä niiden käytöstä ja kehityksestä aiheutuviin päästöihin. Käsitteet, kuten “vihreä koodi” ja “kestävä ohjelmistokehitys”, ovat alkaneet näkyä yhä useamman ohjelmistokehitysyrityksen sivuilla ja materiaaleissa. Ohjelmien ja oikeastaan koko ICT-sektorin energiankulutuksen kasvu on kuitenkin ongelma, jonka olemassaolo on tiedostettu jo kauan. Tästä huolimatta asian eteen ei ole tehty juurikaan mitään laskentatehon ja energian ollessa halpaa ja käytännössä loputonta. Tilanne on kuitenkin muuttumassa nopeasti. Energian ja komponenttien hintojen vaihtelevuus on kasvanut ja uusiutuviin energianlähteisiin siirtyminen on nopeutunut huomattavasti. Ohjelmistokehityksessä on tullut aika lopettaa energian ja laitteiston kapasiteetin tuhlaus huonosti suunnitelluilla ratkaisuilla ja siirtyä rakentamaan aidosti kestävää ohjelmistoa, jotta käytössä oleva laitteisto voidaan hyödyntää tehokkaasti. Samalla voidaan säilyttää hyvä käyttökokemus ja kohtuulliset kulut ohjelmistojen kehittäjille ja käyttäjille.

Mitä on energiatehokas ohjelmointi?

Energiatehokkaalla ohjelmalla viitataan sellaiseen ohjelmaan, jossa on pyritty huomioimaan ohjelman ajosta aiheutuvat vaikutukset, erityisesti sen energiankulutus. Ohjelman kokonaisenergiankulutus muodostuu monista tekijöistä, jotka voidaan jakaa kolmeen kategoriaan: kehityksen aikaiset tekijät, ohjelman käytön aikaiset tekijät sekä ohjelman käytöstä poistumisessa vaikuttavat tekijät [1]. Tässä blogissa keskityn ohjelman käytön aikaisiin tekijöihin, joista yksi merkittävimmistä on ohjelman suorituskyky ja nopeus [2]. Tämän lisäksi esimerkiksi ohjelman tekemä tiedonsiirto ja tallennus vaikuttavat energian kulutukseen.

Ohjelman nopeuteen vaikuttavat merkittävästi teknologiavalinnat, esimerkiksi käytetty ohjelmointikieli tai tietokantaohjelma. Ohjelmointikielien tehokkuudessa on valtavia eroja ja usein matalamman tason kielet ovatkin huomattavasti tehokkaampia erillisen resursseja kuluttavan ajoympäristön puuttuessa [2]. Tämä ei kuitenkaan tarkoita, että kaikki tulee nyt uudelleenkirjoittaa C:llä. Kehitystyön helppous ja siihen kuluva aika tulee myös pitää mielessä. Monet, erityisesti uudemmat ohjelmointikielet tarjoavat hyvän välimaaston tehokkuuden ja käytettävyyden välillä. Tällaisia ovat esimerkiksi Go ja Rust. Järjestelmien kokonainen uudelleenkirjoitus on myös harvoin järkevää, joten olemassa olevissa järjestelmissä kannattaa tehokkuuden optimoinnissa keskittyä muihin tapoihin kuin teknologian vaihtoon.

Suorituskykyyn ja myös tiedonsiirtoon on mahdollista vaikuttaa merkittävästi ohjelmiston arkkitehtuurilla. Hyvin suunniteltu ohjelma ei sisällä turhaa koodia tai turhia riippuvuuksia. Lisäksi arkkitehtuuri minimoi turhat tiedonsiirtoa aiheuttavat kutsut sekä palvelimelle että tietokantaan. Välimuistin tehokas käyttö puolestaan auttaa vähentämään turhaa tiedonsiirtoa ja uudelleenlaskentaa.

Energiatehokkaan ohjelmoinnin yhteydessä saatetaan joskus puhua myös “vihreästä koodista” tai ohjelman “vihreydestä”. Vihreydestä puhuttaessa on mielestäni syytä huomioida koodin lisäksi sen käyttötarkoitus. Älykkäästi asunnon lämmitystä säätävä ohjelma voi olla epätehokkaasti toteutettu, mutta sen käytöllä on positiivinen nettovaikutus ympäristön kannalta, sillä lämmityksen säädöstä koituvat hyödyt ovat suuremmat kuin epätehokkaan ohjelman haitat. Tämä ei kuitenkaan tarkoita, etteikö ohjelman itsessään pitäisi myös olla mahdollisimman tehokas, sillä tehokkuudella on myös suoria vaikutuksia käyttökokemukseen ja ylläpitokustannuksiin.

Miksi ohjelmien energiatehokkuus on tärkeää?

Miksi ohjelmien energiankulutuksesta pitäisi sitten välittää? On kuitenkin varmasti halvempaa ostaa lisää laskentakapasiteettia kuin optimoida koodia. Tälläinen ajattelu on lyhytnäköistä ja johtaa ongelmiin myöhemmin, kun ohjelmistoa halutaan jatkokehittää tai skaalata kasvavalle käyttäjämäärälle. On paljon helpompaa ottaa tehokkuus huomioon alusta lähtien, jolloin myös skaalautumisesta aiheutuvat kustannukset pysyvät maltillisempana ja sovelluksen arkkitehtuuri tukee skaalautumista ja jatkokehitystä, eikä toimi esteenä näille. Tehokkuuden miettimisellä on muitakin hyödyllisiä vaikutuksia, jotka käydään läpi tässä kappaleessa.

Juoksevat kustannukset

Tehokkuusoptimoinnilla on suoria vaikutuksia ohjelman käytöstä aiheutuviin juokseviin kustannuksiin. Hyvin toteutettu ohjelma vaatii vähemmän energiaa tehdäkseen saman työn kuin tehoton ohjelma. Tällöin käyttäjämäärien nousu ei suoraan tarkoita kapasiteetin lisäystä, joka aiheuttaisi lisäkustannuksia, vaan on mahdollista palvella samaa määrää käyttäjiä pienemmällä kapasiteetilla, esimerkiksi halvemmalla virtuaalipalvelininstanssilla. Eräässä esimerkkitapauksessa Rustilla kirjoitettuja AWS-lambdafunktioita verrattiin Pythonilla ja C#:lla kirjoitettuihin ja saavutettiin jopa kolme kertaa pienemmät kustannukset [3]. Toisessa tapauksessa Rustilla kirjoittaminen salli AWS EC2 -instanssin pienentämisen ja mahdollisti teoriassa 87% kustannussäästöt [4]. Nämä tulokset eivät varmastikaan ole suoraan verrattavissa isompiin ja monimutkaisempiin järjestelmiin, mutta teknologiavalinnoilla näyttää kuitenkin olevan merkittäviä vaikutuksia nopeuden ja sitä kautta kustannusten kannalta.

Sulavampi käyttökokemus

Tehokas ohjelma tarkoittaa usein lisäksi sitä, että käyttäjän kokemus ohjelmasta on parempi. Sovellus käynnistyy ja lataa tarvittavan sisällön nopeasti, eikä käyttäjä joudu turhaan odottelemaan. Myös yleinen kokemus optimoidusta ohjelmasta on sulavampi, sillä tehokkuus ei rajoitu vain käynnistyksenaikaisiin toiminnallisuuksiin vaan se vaikuttaa koko ohjelman toimintaan nopeuttamalla esimerkiksi laskentaa ja hakukyselyitä. Käyttäjäkokemus on tärkeää, sillä käyttäjät eivät todennäköisesti vaihda pois tuotteesta, johon ovat tyytyväisiä.

Käytettävyyden huomiointi on tärkeää myös siksi, että helpompikäyttöisessä ohjelmassa käyttäjä joutuu tekemään vähemmän toimintoja sekä käyttämään ohjelmaa lyhyemmän aikaa saavuttaakseen tavoitteensa, mikä näkyy suoraan ohjelman kokonaisenergiankulutuksessa.

Lainsäädäntö

Lainsäädännön näkökulmasta tärkeimpiä uudistuksia ovat Euroopan Unionin kestävyysraportointidirektiivi eli CSRD sekä kansainvälisen tilinpäätösstandardin eli IFRS:n muutokset. Molemmat näistä asettavat yrityksille uusia haasteita sekä päästöjen mittaamisen että raportoinnin muodossa.

EU:n kestävyysraportointidirektiivin mukaan suurten ja julkisten sekä riskialoilla olevien pienempien yritysten tulee mitata ja raportoida omat ympäristövaikutuksensa. Erityisesti IT-järjestelmissä edes päästöjen mittaamiselle ei ole vakiintuneita käytänteitä. CSRD vaikuttaa myös pienempiin yrityksiin, sillä ne saattavat toimia osana isompien yritysten toimitusketjuja, jolloin myös ne kuuluvat direktiivin piiriin [5]. Valmius direktiivin noudattamiseen tulee tulevaisuudessa varmasti vaikuttamaan yritysten päätöksiin, kun mietitään uusia kumppaneita osaksi toimitusketjuja.

IFRS päätti, että kaikkien kyseistä standardia noudattavien yritysten tulee julkaista päästönsä osana tilinpäätöstä kaikista kolmesta laajuusalasta, joista IT-järjestelmät kuuluvat kolmanteen ja ovat näin ollen mukana raportoinnissa. Aikataulu ei ole vielä selvillä tälle muutokselle.

Ympäristövaikutukset

ICT-sektori kuluttaa lähes 10% maailman tuotetusta energiasta tällä hetkellä ja suunta on vain ylöspäin [6]. Osittain tätä kasvua voidaan hillitä energiatehokkaammalla laitteistolla, mutta jatkuvilla laitepäivityksillä on myös suuria ympäristöä kuormittavia vaikutuksia, sillä elektroniikan kierrätys ei ole ongelmatonta [7]. On siis järkevää lähestyä ongelmaa molemmilta puolilta ja sekä kehittää parempaa laitteistoa että optimoida ohjelmia tehokkaammiksi.

Mistä saan lisää tietoa ohjelmien energiatehokkuudesta?

Vihreä koodi ja energiatehokas ohjelmointi ovat verrattain uusia asioita tai ainakin niihin on vasta hiljattain herätty. Opetusmateriaalia ja osaajia on kuitenkin jo tarjolla. Tässä kappaleessa käydään muutama lähde, joista voit löytää lisää tietoa.

Vihreä koodi -kirja

Janne Kalliola Exovelta on kirjoittanut erinomaisen kirjan aiheesta. Se toimii hyvänä johdantona energiatehokkaaseen koodiin ja siitä saavutettaviin hyötyihin. Lisäksi se antaa ohjelmistokehittäjille hyvät lähtökohdat tehokkuuden huomiointiin omassa koodissaan. Kirja on saatavilla sekä suomeksi että englanniksi.

Mitvidi

Mitvidi-hankkeessa on kehitetty mittareita julkisten ICT-hankkeiden energiatehokkuuden arviointiin. Hankkeessa on luotu kriteeristö, jolla hankkeen vaatimustaso voidaan määrittää yhteen kolmesta kategoriasta. Kategoriat sisältävät eri toiminnallisuuskriteerejä, joiden tuntemisesta on varmasti hyötyä, mikäli haluaa pyrkiä energiatehokkaampaan koodiin.

Green ICT

Green ICT on toinen energiatehokkaita ohjelmistoja tukeva hanke. Heidän sivuiltaan löytyy materiaaleja, työkaluja ja uutisia liittyen energiatehokkaisiin ohjelmistoihin sekä tietoa ohjelmistojen kehittäjille ja hankkijoille.

Lähteet

[1] S. Naumann, M. Dick, E. Kern, and T. Johann, “The greensoft model: A reference model for green and sustainable software and its engineering”, Sustainable Computing: Informatics and Systems, vol. 1, no. 4, pp. 294–304, 2011, issn: 2210-5379. doi: https://doi.org/10.1016/j.suscom.2011.06.004. [Online]. Available: https://www.sciencedirect.com/science/article/pii/S2210537911000473.

[2] R. Pereira et al., ‘Energy efficiency across programming languages: how do energy, time, and memory relate?’, in Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering, Vancouver BC Canada: ACM, Oct. 2017, pp. 256–267. doi: 10.1145/3136014.3136031.

[3] N. Amerasinghe, “How Using AWS Lambda with Rust Saved 3x the Cost Compared to Using Python or .NET —HackerNoon — hackernoon.com.” https://hackernoon.com/how-using-aws-lambda-with-rust-saved-3x-the-cost-compared-to-using-python-or-net

[4] “I saved 87% on compute costs by switching languages — worldwithouteng.com.” https://worldwithouteng.com/articles/i-saved-87-percent-on-compute-costs-by-switching-languages/

[5] P. Komssi, “Kestävyysraportointidirektiivi astuu voimaan 1.1.2024, miten se koskee pienyritystä?” — yrittajat.fi. https://www.yrittajat.fi/uutiset/kestavyysraportointidirektiivi-astuu-voimaan-1-1-2024-miten-se-koskee-pienyritysta/

[6] E. Gelenbe, “Electricity consumption by ICT: Facts, trends, and Measurements,” Ubiquity, vol. 2023, no. August, pp. 1–15, Aug. 2023. doi:10.1145/3613207

[7] WHO, “Electronic waste (e-waste)”. https://www.who.int/news-room/fact-sheets/detail/electronic-waste-(e-waste)

Tuomas Rinne
Kirjoittanut Tuomas Rinne

Piditkö tästä artikkelista? Anna sille taputus!