Zeleni programski kôd: Energetska održivost u sektoru software inžinjeringa
Zeleni kôd je novi termin, koji u suštini znači da su algoritmi, kao sastavni dijelovi nekog programskog koda koncipirani tako da troše najmanju moguću količinu energije
Održivi hardver za održivi softver
Danas programeri proizvodeći softver raspolažu različitim vrstama alata – programskim jezicima. Kao i alati u stvarnom svijetu, programski jezici imaju svoju primarnu namjenu i najefikasniji način upotrebe. Zbog jake tržišne konkurencije ovakve prakse međutim nisu uvijek u prvom planu.
Tehnološki razvoj u oblasti informacijsko-komunikacijske tehnologije (ICT) učinio je računare dovoljno jeftinim i pristupačnim za masovnu upotrebu. Gotovo uvijek računar će posao uraditi brže od čovjeka, a za većinu svakodnevnih životnih problema sa kojima se možemo susresti i pomisliti da bi se mogli riješiti putem računara, vjerovatno već postoje gotova softverska rješenja. ICT industrija poprimila je globalno velike razmjere, sva računarska oprema, a naročito softver se rijetko posmatra kroz prizmu energetske efikasnosti. Prema procjenama, ICT u kojeg se ubrajaju serveri i osobni računari, telefoni, tableti, TV uređaji, routeri, switchevi i druga komunikacijska oprema kao trošilo energije emituje oko 2% stakleničkih gasova, što je u rangu emisija kompletne avioindustrije. Pored pomenute fizičke opreme ili hardvera, smisleno je reći i da softver, indirektno, troši energiju [1].
Održivost
Održivost je najkreće rečeno, pristup određenoj industrijskog grani koji nastoji spriječiti potpunu eksploataciju prirodnih resursa, kako bi oni ostali dostupni dugoročno. Svijet ICT tehnologije, u potpunosti kao energent pokreće električna energija. Primarni cilj energetske održivosti jeste osigurati napajanje kompletnog sektora el. energijom iz obnovljivih izvora energije. Kako bi se što prije stiglo do stanja održivosti, potrebno je djelovati paralelno. S jedne strane težiti zamjeni neobnovljivih izvora energije obnovljivim, a s druge povećavati energetsku efikasnost industrije. Zbog povećanja energetskih potreba nemoguće je djelovati samo na jedan način. Dostizanje samoodrživosti će za posljedicu imati smanjenje emisije stakleničkih gasova, od kojih najveći udio ima ugljendioksid. Naravno, kao što važi i za druge, ekološki pristup u ovoj industriji dugoročno donosi benefite svim stanovnicima naše planete. Sama kupovina uređaja i prije njegove upotrebe generiše emisiju stakleničkih gasova nastalih u proizvodnom procesu. Okvirni emisioni podaci su [2]: jeftini laptop: 200 kg CO2e, preium iMac: 720 kg CO2e, gejmerski desktop: 800 kg CO2e.
Poređenja radi, prosječan benzinski automobil, kakvog najčešće možemo sresti na ulici, Euro4 standarda star 12 godina emituje oko 1g CO2e po pređenom kilometru. Ovakvo poređenje je uzeto samo zbog ilustracije, naravno da automobili upotrebom i održavanjem emituju i druge štetnije polutante.
Hardver
Glavna filozofija razvoja svakog proizvođača računarske opreme jeste rješavanje problema maksimalnom brzinom, sa minimalnim zauzećem memorije. U proteklih 70 godina energetska efikasnost računara se postepeno povećavala. Broj računarskih operacija po jedinici utrošene količine energije udvostručavao se svakih 1.5 godina, od tehnologije vakuumskih cijevi do integriranih el. kola i mikročipova. Efikasnost je pratila rast performansi i zbog same promjene u tehnologije izrade. Napredak tehnologije izrade mikročipova od 2000. do 2013. omogućio je da se količina tranzistora na čipu istih dimenzija poveća za 50% svake dvije godine. Zbog malih dimenzija mikročipova reda nanometra (10-9) potreba za efikasnosti postala je neizostavan dio tehničkog zahtjeva izrade svake nove generacije. Sve manji i manji tranzistori kao osnovni gradivni elementi mikročipova novijih generacija moraju raditi pri manjim vrijednostima napona i struje, da ne bi pregorili. Uz druge optimizacije i nove arhitekture, nove generacije čipova troše manje količine energije za istu količinu urađenog posla od prethodnih.
Od 2013. do danas tehnologija izrade mikročipova doseže fizička ograničenja. Daljnje smanjivanje dimenzija, koje je činilo okosnicu razvoja postalo je nemoguće zbog nepredvidljivog ponašanja komponenti uslijed dosezanja dimenzija molekularnog nivoa. Procesori pak, postaju brži zbog optimizacija arhitekture, internog seta instrukcija i mogućnosti hardverske paralelizacije izvršavanja određenih zadataka. Također, mikročipovi sastavni su elementi i svih drugih dijelova uređaja - memorijskih sklopova, ekrana, kamera itd., a proizvođači posvećuju sve više pažnje efikasnosti kako bi se njihov hardver mogao koristiti i u mobilnim uređajima, čije je napajanje ograničeno kapacitetom baterija. Ukoliko uporedimo glavne (flagship) uređaje vodećih proizvođača pametnih telefona, možemo vidjeti da se kapacitet baterije u proteklih 10 godina povećao dva i po puta, odnosno sa kapaciteta reda 1800 mAh na kapacitet reda 5000 mAh. Međutim, sa većim mogućnostima, hardvera, javljaju se i veći korisnički zahtjevi, pa prosječan korisnik i dalje uređaj puni jednom dnevno.
To znači da je globalni utrošak energije za punjenje takvih uređaja najmanje udvostručen, samo po osnovu povećanja kapaciteta baterija. Broj korisnika mobilnih uređaja također iz godine u godinu kontinuirano raste, pa je 2016. godine 49% svjetske populacije posjedovalo mobilni uređaj, a taj udio krajem 2021. godine iznosi 78%. Trenutno je u upotrebi oko 6 milijardi, a u protekloj godini prodano je 1,43 milijarde novih mobilnih uređaja.
Odnos hardvera i softvera
Kontinuirani razvoj hardvera stvorio je pretpostavke za novi brži, jači i bolji softver. U momentu pisanja ovog članka u februaru 2023. godine, samo na jednoj platformi - Google Play-u broj dnevnih novoobjavljenih aplikacija iznosi 2485, a broj preuzimanja aplikacija u 2022. godini iznosio je 143 milijarde i porastao je u odnosu na 113 milijardi iz 2021. Softver ulazi u sve pore našeg života, a nemali broj uređaja u opticaju razlog je za analizu energetske efikasnosti ne samo hardvera, već i softvera. Analogno proizvođačima hardvera koji se u proizvodnom procesu bave i njegovom efikasnošću, softver inžinjeri bi trebali činiti isto kada je u pitanju softver. Težnja ka efikasnosti industrijskog softvera uglavnom proizlazi iz finansijskih motiva – porasta troškova energenta, dok je u svijetu osobnih korisnika zbog ekspanzije mobilnih uređaja i laptopa efikasnost prvenstveno motivirana ograničenim kapacitetom baterije.
Odnosno, možemo reći u tehničkom smislu da je prodaja mobilnih uređaja zbog njihove fleksibilnosti ograničena kapacitetom baterije sa jedne i tehnologijom izrade mikročipova sa druge strane glavni razlog za proizvodnju energetski efikasnijeg hardvera.
Softver
Bez obzira o namjeni softvera, prvo pravilo efikasnosti je da softver u svom radu koristi što manje hardvera. Efikasan softver će trošiti manje procesorskih ciklusa, manje memorije, stvarati manje mrežno opterećenje i u konačnici potrošiti manje energije. Prva radnja koja se preduzima u tom smislu, a naročito u industrijskom sektoru je da se softver pokreće samo onda kada je potreban. Situacija u kojoj se pokrenuti softver ne koristi, je češća nego što se na prvu pomisli. Takav softver koji ne radi ništa i zauzima resurse naziva se zombi softver. Studijskom analizom podatkovnih centara u 2017. godini kojom je obuhvaćeno oko 16.000 virtualnih i fizičkih servera, uočeno je 25% fizičkih i 30% virtualnih zombi mašina [3]. U domenu mobilnih uređaja ili osobnih računara količina zombi softvera zavisi od svakog korisnika pojedinačno, svaki se korisnik susreo najmanje jednom sa nekorištenom, a pokrenutom aplikacijom od strane operativnog sistema ili sa aplikacijom koja nije upotrebljiva zbog obustave korisničke podrške. Često za ovu situaciju nije kriv sam korisnik, već proizvođač softvera koji je novu verziju softvera učinio nekompatibilnom sa starim hardverom ili starijim softverskim rješenjem. Do statistike za zombi aplikacije pojedinačnih korisnika teško je doći zbog nemogućnosti utvrđivanja ovog stanja, koje zavisi od svakog korisnika ponaosob, međutim, pretpostavka je da je količina zombi softvera na osobnim uređajima uporediva sa onom na datacentrima.
Drugo pravilo jeste da softver treba da koristi što manje memorije. Računarska memorija za svoj rad troši energiju čak i kada se ne koristi. Jedan gigabajt radne (RAM) memorije, prema podacima različitih proizvođača memorije troši oko 2Wh energije, što se možda i ne čini mnogo, međutim na godišnjem nivou ušteda od 2GB memorije je ušteda ~140 kWh energije [4]. (Ilustracije radi, 12m trolejbus troši približnu količinu energije na 100 pređenih km.)
Treći pristup održivog softvera je relokacija posla. Velike softverske kompanije globalnog tržišta posjeduju servere, koji se nalaze na različitim geografskim lokacijama i napajaju iz različitih izvora [5]. Računarski zadatak putem interneta moguće je proslijediti na drugu geografsku lokaciju, koja se u tom momentu napaja obnovljivim izvorima energije [6].
Proizvodnja solarne energije je parabolična kriva, sa maksimalnom proizvodnjom Sunčeve energije sa pomjeranjem opterećenja (load shifting)
Šta je zeleni kôd?
Danas programeri proizvodeći softver raspolažu različitim vrstama alata – programskim jezicima. Kao i alati u stvarnom svijetu, programski jezici imaju svoju primarnu namjenu i najefikasniji način upotrebe. Zbog velike tržišne utakmice ovakve prakse međutim nisu uvijek u prvom planu.
Kada se govori samom razvoju i implementaciji programskih rješenja zeleni kôd je novi termin, koji u suštini znači da su algoritmi, kao sastavni dijelovi nekog programskog koda koncipirani tako da troše najmanju moguću količinu energije. Zeleni kôd također predstavlja ekološki osviješten pristup programerskim praksama, koji nije opozitan sa dosadašnjim praksama pisanja brzog i efikasnog programskog koda. Zeleni kod integriše pozitivne prakse u jednu cjelinu. Laički rečeno, kôd će biti zelen ukoliko za njegovo stvaranje koristimo ispravan alat na ispravan način, a na kraju da i sami kôd koristimo kako je i zamišljen. Alati programera su programski jezici, a način korištenja tih alata su programerske prakse.
Radi ilustracije, filozofiju zelenog koda možemo predstaviti kao penjanje čovjeka na sprat. Dok se penjemo uz stepenice ne razmišljamo o tome, ali možemo se popeti tako što ćemo svaku stepenicu savladati posebno, stati, razmisliti o slijedećoj, odlučiti kojom nogom se penjati, da li ćemo preskočiti jednu itd. Ponavljanje niza koraka stepenica-po-stepenica lijevom pa desnom nogom naizmjenično, zapravo je algoritam kojim se čovjek penje uz stepenice. Prilagođavanje visine koraka – penjanje po jednu, dvije ili tri stepenice, lijevom pa desnom nogom ili obratno, predstavlja izbor najboljeg algoritma u datoj situaciji. Izbor obuće i odjeće u kojoj se penjemo uz stepenice je alat koji koristimo za penjanje uz stepenice. Sigurno da je lakše u obući koja se ne kliže. Kada bismo ovaj primjer preveli u programiranje, izrada algoritma penjanja uz stepenice tako da penjač provede najmanje vremena na stepenicama, da se najmanje umori u najudobnijoj obući i odjeći, predstavljala bi filozofiju zelenog koda.
Algoritmi predstavljaju sekvence koraka koje se ponavljaju prilikom rješavanja nekog problema. Za različite vrste problema, kao rješenja razvijani su različiti algoritmi. Brzina kojom će korišteni algoritam biti izvršen naziva se vremenska kompleksnost, a količina memorijskog prostora koju će algoritam prilikom izvršavanja zauzeti naziva se prostorna kompleksnost. Obje dimenzije kompleksnosti važne su zato što postoji više načina na koje možemo koncipirati izvršavanje algoritamskog koda. Jednostavan primjer prostorne i vremenske kompleksnosti algoritma bila bi situacija u kojoj nastavnik sortira kontrolne radove učenika po abecedi. Da li će poredati sve radove po stolu i zauzeti više prostora, te potom birati po slovu prezimena ili će jednostavno uzimati jedan po jedan kontrolni rad i stavljati na hrpu koju prilikom svakog novog umetanja sortira po abecedi, ovisi od nastavnika. Takav postupak u razredu do 30 učenika ne doima se naročito velikim, međutim u digitalnom svijetu, sa potrebom sortiranja više hiljada kontrolnih radova, razlika u brzini sortiranja i upotrebi prostora će postati i više nego očigledna.
Kompleksnost algoritma predstavlja broj ponavljanja koraka algoritma u odnosu na broj podataka koje on obrađuje, te on može biti konstantan, logaritamski, linearan ili eksponencijalan. Bolja vremenska kompleksnost znači manje vrijeme izvršenja. Prostorna kompleksnost posmatra se na sličan način, s obzirom da smještanje i premještanje stotina hiljada elemenata nekog niza memoriji također zauzima slobodni prostor. Za zeleni kod možemo reći da je programerska praksa traženja najboljeg omjera vremenske i prostorne kompleksnosti algoritama. Za sada, pronalazak idealnog omjera u smislu potrošnje energije utvrđen je empirijskim simulacijama, provedenim korištenjem različitih programskih jezika.
Simulacije efikasnosti programskih jezika provođene su tako što su testni algoritmi napisani kao programski kôd 27 najkorištenijih programskih jezika današnjice. Potom, taj je kôd izvršavan.
Efikasnosti programskih jezika po kriterijima, normalizirani pregled od najboljeg ka najgorem
U tabeli su poredani programski jezici normalizirani po najboljem u svakoj kategoriji, odnosno najbrže vrijeme izvršenja ima programski jezik C, dok je slijedeći Rust, kojem je potrebno 1.04 puta više vremena da izvrši isti kod. S obzirom da se fizička veličina Energije mjeri u Džulima(J), a da se u elektronici može izraziti kao proizvod snage i vremena E[energija] = P[snaga] t[vrijeme] proizvod mjerenih vrijednosti aproksimira energetsku efikasnost programskog jezika. Analiza dobivenih rezultata pokazala je da energetski najefikasniji jezik nije uvijek i najbrži.
Odgovor na pitanje “Koji je programski jezik najzeleniji?” je nemoguće dati, uzimajući u obzir različite namjene programskih jezika, njihove mogućnosti, kao i ograničenja ovakve vrste simulacije. Testni algoritmi predstavljaju mali uzorak u odnosu na količinu programskog koda u upotrebi, a programski jezici imaju širok spektar osnovne namjene poput upravljanja kućanskim aparatima, za kompleksne matematske operacije ili za obradu slike. Dakle, ponovno programiranje svih aplikacija iz nekog sporijeg u brži programski jezik je teško izvodljivo ili nemoguće zbog količine softvera kojeg bi trebalo ponovno programirati i zbog hardverske podrške. Programski jezici također napreduju s vremenom, pa je njihovo pozicioniranje na tabeli promjenjiva kategorija. Razvoj i drugih komponenti sistema koji omogućavaju izvršavanje kôda poput interpretera ili kompajlera, zbog malih razlika između testiranih programskih jezika imaće uticaj na rezultat. Međutim, ovakav test efikasnosti programskih jezika ima svoj značaj i pokazuje da prilikom odabira jednog od pet najboljih programskih jezika nema značajne razlike, u smislu energetske efikasnosti, a da će u najgorem slučaju odabir “pogrešnog jezika” prilikom pisanja kôda imati višestruko manji utjecaj od odabira pogrešnog algoritma [7].
Zaključak
Nijedan proizvod ne može trajati vječno, međutim neprihvatljivo je da proizvođači softvera zloupotrebljavaju napredak hardvera. To čine tako što nove verzije aplikacija postaju nekompatibilne sa starim uređajima ili što alociraju više resursa, koje u konačnici i ne koriste. Najveći uticaj na okoliš ima upravo proizvodnja uređaja, pa je onda prijevremena zamjena najuticajnija. Zeleni softver je relativno nova i neistražena oblast, koja ima logičkog smisla, a njen okolinski uticaj je još uvijek nepoznatih razmjera. Ovu oblast treba posmatrati kao interdisciplinarnu u kojoj ulogu imaju svi - proizvođači hardvera, softvera i korisnici.
Ali, važno je ostati realan: većinu korisnika, većinu vremena
Autor: Mirza Krajina
Tekst je izvorno objavljen u časopisu ResPublica. Autorski je prilagođen za Prometej.ba
[1] Nijedan programski kod ne troši energiju! Hardverske komponente na kojima radi troše, a rad komponenti podređen je softveru.
[2] How bad are banas? - carbon footprint of everything, by Mike BRENERS-LEE
[3] ZOMBIE/COMATOSE SERVERS REDUX, J. Koomey, J. Taylor, Stanford University, 2017
[4] Enabling More Agile and Sustainable Business Through Carbon-Efficient Digital Transformations, IDC, VMWare 2020
[5] Npr. solarna energija ili energija vjetra, zavisi od vremenskih uvjeta, doba dana i geografske lokacije na kojoj se server nalazi
[6] A Low Carbon Kubernetes Scheduler, Daniel SCHIEN, University of Bristol, UK
[7] Posmatrano na nizu od 10.000 elemenata - najeefikasniji jezik će na izvršenje nekog koda uticati sa relativno malim linearnim faktorom (veličina reda hiljade), a greške odabira pogrešnog algoritma mogu biti eksponencijalne prirode (veličina reda milijarde)