Di 1252 datacenter della Pubblica Amministrazione, 1190 sono risultati sostanzialmente da chiudere anche a causa dell’inefficienza energetica. Un quadro di spreco energetico che in questo periodo di crisi legato alla guerra in corso non si può sottovalutare.
PNRR e riduzioni dei costi energetici: perché puntare su micro e mini datacenter
Datacenter e aumento dei costi energetici
L’aumento dei costi energetici, anche a causa del conflitto in corso, non può non riflettersi sull’efficienza energetica dei sistemi di calcolo e sui costi operativi di un datacenter.
Un datacenter è un sistema complesso che contiene un numero elevato di server, storage e apparati di rete, che assorbono energia per poter eseguire i programmi.
Il problema dell’efficientamento energetico viene affrontato a tutti i livelli di questo sistema complesso tranne che nella programmazione: qui espressività dei linguaggi e produttività prevalgono sull’efficienza energetica, essenzialmente demandata alla CPU e alla gestione energetica del server e del datacenter.
Efficienza energetica del datacenter: cosa è il PUE
Il PUE – Power Usage Effectiveness è una misura diffusa che cerca di stimare il rapporto tra l’energia impiegata per il calcolo (ovvero l’energia necessaria al funzionamento) e l’energia assorbita complessivamente dal datacenter per alimentare gli apparati di raffreddamento e tutto ciò che non è necessario al calcolo.
Si tratta di una misura “cruda” che cerca di misurare l’overhead energetico necessario per operare: un PUE di 1 è ideale (ma nei fatti irraggiungibile) perché non è necessaria energia se non per effettuare i calcoli necessari.
A livello del datacenter, sempre più software controllano lo stato di funzionamento attraverso numerosi sensori e cercano di attuare il sistema di raffreddamento per ottimizzare il PUE e di conseguenza abbattere i consumi. Sempre più spesso, i software di gestione di questi sistemi complessi interagiscono con quelli utilizzati per la gestione dei server, facendo parlare di Software Defined Data Center.
Come ottimizzare il consumo degli apparati
Per il controllo dell’assorbimento energetico molti server e storage non si limitano ad affidarsi alle capacità di powersaving fornite dalle CPU, ma fanno anche uso di sottosistemi dedicati, che consentono di monitorare un apparato e regolarne il funzionamento per ottimizzare i consumi.
Un server, ad esempio, usa un sistema operativo che opera la base management console per svolgere questo ruolo nella speranza di ridurre gli assorbimenti energetici amministrando oculatamente le risorse disponibili.
Molti server consentono la lettura degli assorbimenti istantanei del server, e lo stesso si può fare utilizzando usando chiamate specifiche alla CPU per ottenere un’informazione analoga e determinare quindi un efficiente uso delle risorse.
Come misurare il comportamento energetico di un software
L’ottimizzazione che sistema operativo, hardware e datacenter possono fare collettivamente è limitata alla riduzione degli sprechi: se un programma è scritto in modo da essere energeticamente inefficiente, nulla potranno queste ottimizzazioni contro un alto costo delle risorse.
Ci si può quindi chiedere se sia possibile stimare il consumo energetico di un software nel modo più indipendente possibile dal suo ambiente di esecuzione.
Numerosi lavori scientifici hanno usato la misurazione energetica per stimare l’efficienza di programmi: tra questi, uno studio del 2010 cofirmato da chi scrive insieme a Paolo Ferragina, docente Università di Pisa, Davide Morelli e Massimo Coppola, ricercatori CNR-ISTI Pisa.
Lo studio evidenzia come sia possibile misurare il comportamento energetico di un programma usando un semplice strumento (un amperometro) letto automaticamente da un sistema che misura l’assorbimento di un altro computer durante l’esecuzione di un programma.
La metodologia sviluppata ha il vantaggio di essere indipendente dal sistema misurato: l’assorbimento del computer oggetto della misura viene misurato leggendo la corrente assorbita alla presa elettrica (vedi figura).
Misurare un programma pone però importanti sfide: quale è il contributo del sistema operativo? Com’è possibile misurare lo stesso programma in esecuzione su due sistemi operativi configurati in modo differente?
Ispirandoci a metodologie usate negli esperimenti di coltivazione cellulare condotti dai biologi, abbiamo trovato che si può definire un metro relativo al particolare sistema che si sta misurando.
Questo metro consente di ottenere misurazioni sull’assorbimento energetico di un programma confrontabili tra sistemi differenti, cioè con diversi configurazione e hardware.
Abbiamo battezzato questo metro “Energon” (era da poco uscito il primo film di “Trasformers”): nella sua prima versione, altro non era che la misurazione dell’energia assorbita da un programma che esegue un miliardo di incrementi nel processore.
Se si vuole misurare la prestazione di un programma P su un computer S, prima si esegue il programma Energon su S misurandone l’assorbimento energetico E. Poi si misura l’energia necessaria EP all’esecuzione di P su S per un dato input e si determina la prestazione del programma come
Questa stima grossolana della performance del programma P ha esibito una certa stabilità e ha consentito di ottenere misure confrontabili su sistemi differenti configurati in modo differente.
In ogni caso, è evidente che più un programma impiega tempo a terminare la propria esecuzione, tanta più energia assorbirà (anche se non strettamente proporzionale al tempo impiegato, soprattutto per programmi che fanno uso di programmazione parallela).
Che sia questo o un altro il metodo usato per misurare l’efficienza energetica di un programma, quello che conta è che è possibile stimare, sebbene indirettamente, il suo contributo separandolo dall’assorbimento dovuto agli altri programmi in esecuzione sullo stesso sistema.
È importante considerare il fattore di assorbimento energetico del software perché si tende a trascurarlo, soprattutto nei programmi per PC e server dove non ci si deve neanche confrontare con la gestione della carica della batteria, e la difficoltà nella misura offre un alibi per non porsi il problema.
Esistono numerosi benchmark che confrontano linguaggi di programmazione differenti come, ad esempio, il Debian Shootout che mostrano come l’implementazione dello stesso programma può avere delle prestazioni molto differenti. Nell’esempio in figura, il linguaggio Python è oltre 100 volte più lento del C su un particolare test e di conseguenza lo sarà il suo assorbimento energetico.
Osservando i dati di questo benchmark, si nota come l’efficienza di un linguaggio di programmazione possa essere, almeno in parte, prevista e di conseguenza possa essere previsto il consumo energetico.
È da sottolineare che linguaggi come Python sono spesso usati per coordinare l’invocazione di funzioni in librerie binarie scritte in C, e quindi l’overhead introdotto dal linguaggio non comporta un significativo allungamento dei tempi di esecuzione.
Conclusioni
L’efficienza di esecuzione di un programma non è una variabile astratta ma dipende dalle modalità di scrittura del programma stesso: se l’ottimizzazione dei consumi energetici non fosse solo demandata alla parte fisica dell’infrastruttura, ci sarebbe ampio spazio di miglioramento.
È altrettanto vero che un sistema che non stia eseguendo alcun programma potrebbe essere spento o messo in standby, per evitare consumi energetici non necessari.
L’ottimizzazione dell’infrastruttura di datacenter può dare un grosso contributo se il PUE è 2 o superiore e, in una prima fase, il guadagno è certamente superiore a quello che è possibile ottenere dall’ottimizzazione di programmi.