Sostenibilità

Green Software Engineering: cos’è, perché è importante per l’ICT

La sostenibilità è ormai una parola d’ordine per tutte le aziende. Che contributo possono dare gli ingegneri del software? Ognuno di noi può contribuire a contrastare i cambiamenti climatici, anche i professionisti dell’ICT; la sostenibilità è di per sé un buon motivo per sviluppare applicazioni green

Pubblicato il 30 Giu 2022

Roberto Vergallo

Vidyasoft srl

green software engineering

La COP26, la annuale conferenza delle Nazioni Unite sui cambiamenti climatici, è considerata l’ultima grande occasione per cercare di contenere il riscaldamento globale.

Sappiamo che in questa sfida chiunque può e deve dare il proprio contributo, e quindi anche gli sviluppatori software. Ogni riga di codice ha infatti bisogno di corrente elettrica per poter essere eseguita, questo significa emettere CO2 a ogni run.

A tal proposito, da qualche anno si sta facendo strada la filosofia della Green Software Engineering, che enuncia una serie di principi atti a rendere più sostenibile l’esecuzione di codice informatico. Quali sono questi principi e quali sono gli strumenti che abbiamo a disposizione per applicarli?

ICT e sostenibilità

Quante volte abbiamo ricevuto una mail da un nostro collega che in calce consigliava di salvaguardare l’ambiente non stampando quella mail? Premettendo che è per fortuna improbabile trovare qualcuno che stampi tutte le email ricevute (forse in altri tempi…), quello però che questo ravveduto consiglio istillava in noi era una immagine dell’Internet “innocente”, come se i nostri dati fossero innocui quanto virtuali.

Oggi invece sappiamo l’opposto: dato 1,6 l’indicatore della nostra impronta ecologica sulla Terra, la Silicon Valley raggiunge il ragguardevole valore di 6. Cioè se tutto il mondo fosse come la Silicon Valley – patria dell’ICT –, avremmo bisogno di 6 pianeti Terra per compensarne i consumi. Per non andare oltreoceano, chiunque sia mai entrato in una sala server conosce bene il calore sviluppato dalle macchine e l’aria condizionata che è attivata per tenere a bada quel calore.

Qualunque applicazione, per il solo fatto di essere eseguita, ha bisogno di energia, cioè di corrente elettrica. Questo significa che da qualche parte del globo della CO2 è stata emessa nell’atmosfera per poter eseguire la nostra applicazione. E sapendo quanto possano diventare “virali” alcune applicazioni, non si fatica a credere che una scelta non ragionata in un algoritmo o in un’architettura complessa potrebbe avere l’effetto di quel famoso battito d’ali di una farfalla.

Cresce la potenza computazionale, crescono i consumi

Oggigiorno la potenza computazionale richiesta dalle applicazioni sta crescendo più rapidamente che mai, tant’è che il consumo di energia elettrica per dati e applicazioni si avvicina a essere un quinto della richiesta mondiale totale di energia elettrica.

Ciò che fa specie è lo spreco di questa energia: le statistiche dicono che una virtual machine in house opera in genere al 20-25% delle sue reali performance, il che significa che molta energia viene utilizzata solo per tenere una macchina accesa ad aspettare che qualcuno la utilizzi. Per non parlare poi dell’hardware dedicato! Se da un lato è vero che i container migliorano la densità di utilizzo delle VM, rimane assodato che il 75-80% della server capacity mondiale è lì ferma a consumare energia inutilmente.

Per renderci conto della quantità di emissioni che coinvolgono il mondo ICT facciamo un piccolo esercizio nel mondo mobile. Apple ha di recente annunciato di aver toccato quota 1 miliardo di iPhone attivi nel mondo. Ogni iPhone ha in media una batteria da 3500 mAh. Se ogni iPhone viene completamente scaricato e ricaricato ogni giorno, nel corso di un anno questo avrà assorbito circa 5,5 kWh.

Per ottenere 1 kWh vengono mediamente rilasciati 800 g di CO2 nell’atmosfera. Si ha quindi che ogni anno un iPhone emette 4,4 kg di CO2, per un totale di 4,4 milioni di tonnellate… solo per ricaricare gli iPhone!

green software engineering

I principi della Green Software Engineering

Cosa possono fare sviluppatori e ingegneri del software per realizzare applicazioni carbon-aware?

La Green Software Engineering nasce da due filosofie: la prima afferma che ognuno di noi può contribuire a contrastare i cambiamenti climatici, anche i professionisti dell’ICT, includendo in questa categoria tutto lo spettro di competenze che parte dalla progettazione dei processori fino ad arrivare al design delle user experience.

Il secondo principio è che la sostenibilità è di per sé un gran buon motivo per sviluppare applicazioni green, anche se essa si porta dietro tutta una serie di side effect apprezzabili come l’economicità, le elevate performance e la resilienza.

La Green Software Engineering è una disciplina emergente che interseca la software engineering classica con le tematiche della climatologia, del mercato dell’energia e del design di hardware e data center.

Essa elenca una serie di competenze necessarie per definire, costruire ed eseguire applicazioni software sostenibili e green. I principi della Green Software Engineering sono indipendenti dal dominio applicativo, dal settore industriale, dalle dimensioni e dal tipo delle organizzazioni, dai linguaggi/framework di sviluppo e dagli ambienti di deploy (cloud o on premises).

Affidandosi alla Green Software Engineering, sviluppatori e ingegneri del software possono prendere decisioni che abbiano un impatto significativo sulle emissioni inquinanti delle loro applicazioni. Un ingegnere del software green è cosciente dell’impatto ecologico dei propri prodotti.

I principi della Green Software Engineering sono otto e definiscono delle linee guida per la scrittura di codice sostenibile. Li analizziamo singolarmente qui di seguito.

1. Carbon

Tutti i gas serra (es. diossido di carbonio e metano) ricadono sotto questo appellativo. Si può pensare ad essi come alla “coperta” che causa il riscaldamento globale. Per contribuire a limitare le emissioni inquinanti bisogna scrivere codice che sia carbon-efficient. Se da un lato non è possibile evitare che il nostro software rilasci emissioni nell’atmosfera, il nostro obiettivo deve comunque essere quello di ottenere la massima utilità da ogni grammo di inquinanti. Una applicazione carbon-efficient minimizza la quantità di gas serra emessi per unità di lavoro. Un esempio di applicazione carbon-aware è il sistema operativo Onlign.

2. Electricity

L’energia elettrica viene generata spesso a partire da combustibili fossili ed è responsabile del 50% delle emissioni inquinanti. Per questo si dice che l’energia elettrica sia un “proxy” per i gas serra. Tutti i software usano corrente elettrica per funzionare, dagli smartphone in mano agli utenti ai modelli di machine learning in esecuzione nei data center. Gli sviluppatori software (soprattutto quelli backend) in genere non badano alla corrente che il loro software consuma: quello è un problema di qualcun altro. Sviluppare delle applicazioni energy-efficient significa prendersi in carico la gestione energetica delle proprie applicazioni e quindi indirettamente rilasciare meno inquinanti.

3. Carbon intensity

L’intensità di inquinanti dell’energia elettrica è una misura di quanto gas serra è prodotto per ogni kilowattora di elettricità consumata. Non tutta l’energia elettrica è prodotta allo stesso modo: in posti ed orari differenti l’energia è prodotta utilizzando una varietà di sorgenti a diverso impatto ambientale. Ad esempio le componenti di energia rinnovabile sono a zero emissioni. La carbon intensity può cambiare anche a seconda del tempo: ad esempio una nuvola potrebbe oscurare un impianto fotovoltaico, pertanto in tal caso a parità di domanda sarà richiesto un quantitativo maggiore di energia non rinnovabile.

Sono a disposizione alcune utili API che permettono di calcolare la carbon intensity in real-time per alcune regioni: Carbon Intensity API (solo UK), ElectricityMap (non gratuite per applicazioni commerciali), e WattTime (gratuite ma con alcune feature premium).

Una interessante lettura di approfondimento è questo paper dal titolo “A low Carbon Kubernetes Scheduler” in cui viene descritto uno scheduler per il famoso container orchestrator che migra dinamicamente i workload nelle regioni a minor carbon intensity.

4. Embodied carbon

Per fabbricare il dispositivo sul quale state leggendo questo articolo è stata emessa una quantità significativa di gas serra nell’atmosfera. Allo stesso modo, quando questo dispositivo sarà diventato obsoleto, avrà un costo di smaltimento in termini ambientali. Per questo motivo si parla di embodied carbon, o embedded carbon. Per quanto sia normale che i dispositivi evolvano quando le esigenze degli utenti cambiano, quello che possiamo fare noi ingegneri del software è cercare di allontanare quanto più possibile la data di smaltimento, creando delle applicazioni hardware-efficient, cioè che possano funzionare su più dispositivi possibile, anche quelli legacy. Un concetto che forse ci è più familiare per le app mobile, mentre è abbastanza nuovo per il mondo dei data center. Questo si traduce ad esempio nel cercare di utilizzare librerie e framework che garantiscono compatibilità con hardware non allo stato dell’arte.

5. Energy proportionality

Tenere un server in attesa di compiere delle operazioni significa che il suo utilizzo è allo 0%. Nonostante questo, il server – per il solo fatto di essere acceso e reperibile – consuma potenza. Quando il suo utilizzo aumenta, la potenza assorbita sale ma sale anche la quantità di lavoro utile che riesce a erogare. L’efficienza energetica dell’hardware – cioè quanto si riesce a sfruttare della potenza assorbita da un calcolatore – rappresenta la energy proportionality. L’approccio più efficiente e green è quello di eseguire le applicazioni su meno server possibile ma col massimo rate di utilizzo.

6. Networking

Ogni dato che inviamo sulla rete emette inquinanti. Questo perché i dati passano attraverso numerosi router e switch che assorbono corrente e hanno embodied carbon. Le emissioni del networking sono soggette a numerose variabili difficili da controllare perché includono l’utilizzo di hardware che non è sotto la supervisione di chi realizza le applicazioni, come ad esempio l’efficienza di questi dispositivi e la carbon intensity della regione in cui questi hardware sono collocati, nell’istante in cui i dati vengono trasmessi. L’ingegnere del software green dovrebbe usare la rete saggiamente, evitando sprechi di banda e minimizzando la quantità di dati inviata sulla rete. Ove possibile si può anche minimizzare la distanza (in termini di numero di hops) tra i dispositivi che dialogano fra di loro.

7. Demand shaping

Un concetto molto originale perché coinvolge gli utenti rendendoli partecipi e consci delle emissioni dell’applicazione che stanno utilizzando. Nei momenti a carbon intensity più elevata si possono fare due cose: si può proporre temporaneamente agli utenti una versione dell’applicazione a funzionalità ridotte, oppure si può spostare il workload in regioni a minor carbon intensity (in questo caso si parla di demand shifting). Ad esempio in estate un data center posizionato al sud Italia potrebbe essere utilizzato prevalentemente di notte, poiché durante il giorno la rete elettrica è ad elevata carbon intensity per via dei numerosi condizionatori accesi. L’utilizzo di questi espedienti può rendere l’applicazione carbon-efficient, senza che l’utente se ne accorga. Quando non è più possibile ottimizzare “dietro le quinte”, si può intervenire sulla user experience proponendo all’utente una “eco-mode”, cioè una versione dell’app con funzionalità ridotte. A questo punto, oltre ad avere un’applicazione carbon efficient, abbiamo reso carbon-aware l’utente facendo leva sulla sua sensibilità ecologista.

8. Measurement & optimization

Decarbonizzare un’applicazione è un compito che può essere lungo e difficile, fatto di diversi step, misure e ottimizzazioni progressive. Le variabili in gioco sono così tante che è impossibile arrivare alla soluzione ottima in un solo passaggio. Identificare un set di indicatori significativi è un buon inizio per tenere sotto controllo le emissioni inquinanti e capire dove intervenire. Un altro consiglio è quello di pesare i singoli effort di decarbonizzazione con i rispettivi benefici in modo da definire delle priorità. Ad esempio potrebbe essere più conveniente intervenire su delle query su DB molto pesanti piuttosto che lavorare due settimane sulla riduzione della quantità di dati da inviare sulla rete.

Fra gli strumenti che permettono di monitorare il consumo energetico delle CPU e dei processi si segnala PowerAPI.

Il Cloud come alleato per lo sviluppo di applicazioni efficienti

Quando parliamo di ottimizzazione dell’utilizzo delle risorse non può che venirci in mente il Cloud. I Cloud provider sono i primi – per motivi più che altro economici – a massimizzare lo sfruttamento delle risorse hardware e della potenza computazionale.

Amazon AWS ad esempio vende la potenza computazionale inutilizzata attraverso le istanze spot di EC2, con dei prezzi che sono decisamente convenienti rispetto al servizio base, a scapito ovviamente della disponibilità istantanea del servizio. Questa può essere una buona opzione green da considerare nel caso di applicazioni non time-critical.

Tuttavia l’alleato migliore è rappresentato dalle funzioni serverless. Le architetture serverless sono sicuramente l’opzione green da favorire ove possibile in quanto sono gli stessi Cloud provider a prendersi in carico l’onere di “trovare” la macchina che possa eseguire quel codice in quel momento, garantendo quindi che i server siano sempre al 100% del loro utilizzo. Inoltre il demand shifting ben si applica alle funzioni serverless.

Un’altra scelta architetturale green è rappresentata dall’adozione di protocolli publish-subscribe. Ricevere i dati solo quando questi sono aggiornati è un modo migliore di dialogare con dei servizi esterni rispetto al classico polling delle API che spesso può risultare in chiamate inutili ed ovviamente inquinanti.

Un altro alleato utile in questo senso può essere un saggio uso della cache. Potrebbe essere inoltre possibile rilassare i vincoli di latenza per alcune aree delle applicazioni.

Nel caso di architetture a microservizi si possono fare un paio di scelte green, come ad esempio co-locare microservizi molto accoppiati ed eseguire quelli maggiormente resource-intensive in aree a minore carbon intensity.

La sostenibilità riguarda anche i server

Green Software Foundation

A proposito dei Cloud provider si segnala l’impegno intrapreso da Microsoft per supportare la filosofia della Green Software Engineering.

Microsoft è steering member della Green Software Foundation, una organizzazione non profit lanciata nel maggio 2021 e gestita dalla Linux Foundation. La mission della Green Software Foundation è di costruire un ecosistema certificato di standard, strumenti e best practice per la costruzione di software green.

Nata da uno sforzo comune fra Microsoft, Accenture, GitHub e Thoughtworks, vede adesso fra i suoi membri un elenco considerevole di attori della software industry con un impegno condiviso nella sostenibilità e nei principi della Green Software Engineering.

La fondazione è al lavoro e già entro la fine del 2021 verranno rilasciati i primi standard, regole, strumenti e criteri di misura che potranno essere utilizzati dagli sviluppatori. Si consiglia fortemente quindi entrare a far parte della community per rimanere aggiornati su quello che – si può scommettere – diventerà un requisito imprescindibile in ogni settore.

Non ci sarà da sorprendersi infatti se a seguito della conferenza COP26 saranno emesse delle regole concrete che definiranno i criteri che l’industria – includendo l’ICT – dovrà soddisfare per certificarsi green e sostenibile, analogamente a quello che avviene per l’Industria 4.0.

Continuando a citare l’impegno di Microsoft, per approfondimenti si consiglia di visitare questo sito e il blog Sustainable Software.

Il “portavivande” dell’ingegnere del software

Forse qualcuno ha già letto in rete la frase «Lo sviluppatore è un organismo che converte caffè in codice». Nulla togliendo alla caffeina, è pur vero che lo sviluppatore deve alimentarsi per scrivere codice. Sarebbe auspicabile quindi che tutto il processo che porta alla realizzazione di software green – partendo quindi dalla nascita di ogni istruzione – sia alimentato con energia quanto più possibile pulita.

Molte mense aziendali si sono di recente adeguate inserendo nei propri menu dei giorni totalmente plant-based o comunque a basso impatto ambientale. In alternativa alla mensa, si raccomanda che il nostro “carburante” sia quanto più possibile responsabile e sostenibile.

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

V
Roberto Vergallo
Vidyasoft srl

Articoli correlati

Articolo 1 di 4