Autoren: Bernd Rauch, Dr. Joachim Weber
Informationstechnologie verursacht einen stetig steigenden Energieverbrauch, dennoch fehlen in der Branche objektive Qualitätsstandards für nachhaltige Softwareentwicklung.
In diesem Artikel erfahren Sie mehr über die wichtigsten Einflüsse auf den softwarebedingten Stromverbrauch und lernen Möglichkeiten zur Verbesserung der Energiebilanz kennen.
Die Nachhaltigkeitsdiskussion um den Einsatz von Informations- und Kommunikations-technik (IKT) wird von vielen ähnlich lautenden ähnlichen und vage umrissenen Schlagwörtern bevölkert. Green Computing ist ein Sammelbegriff für alle Bemühungen, IKT entweder nachhaltig zu betreiben (Green IT) oder sie zum Zwecke der Ressourcenschonung in Prozessen der Gesellschaft, Technologie oder Wirtschaft einzusetzen (Green by IT). Green IT umschreibt für sich bereits ein weites Feld:
Wie nachhaltig ist die Produktion von IT-Equipment? Wie werden die Wertstoffe ausgemusterter Geräte wieder in den Rohstoffkreislauf zurückgeführt? Wie häufig muss IT-Ausrüstung ausgetauscht werden? Wohin mit der Abwärme von Rechenzentren? Wie kann der „funktionale“ Energieverbrauch von Computern und Netzwerken auf ein Minimum reduziert werden?
Nicht zuletzt aufgrund gesellschaftlicher und klimatischer Entwicklungen geraten diese und ähnliche Fragen immer stärker in den Fokus von Politik, Wirtschaft und Forschung. Im Bereich der Forschung beschäftigen sich Einrichtungen wie das Fraunhofer Institut für experimentelles Software Engineering IESE in Kaiserslautern unter anderem damit, Einflüsse von Softwarearchitekturen und IT-Technologien auf den nachhaltigen Betrieb zu erforschen und Konzepte wie Lösungen für die Steigerung der Nachhaltigkeit zu entwickeln. In diesem Artikel stellen wir beispielhafte Maßnahmen vor, die
Softwareentwickler:innen direkt beeinflussen können.
Hintergrund
Den prinzipiellen Zusammenhang zwischen dem Nutzungsgrad eines Rechners und seiner Leistungsaufnahme zeigt Abbildung 1. Die Nutzung wird als die Summe der Aktivierung
von Rechnerkomponenten wie Prozessor, Grafikeinheit, Speicher, Festplatte etc. definiert. Der Nutzungsgrad eines Rechners ist in erster Linie abhängig von der eingesetzten Software inklusive Betriebssystem und der Intensität des Betriebs. Selbst im Leerlauf nimmt ein Rechner oder Server eine nicht unerhebliche Leistung Pon auf, die abhängig vom Nutzungsgrad nichtlinear bis zur maximalen Leistungsaufnahme Pmax ansteigt [1].
Abbildung 1: Zusammenhang zwischen Nutzungsgrad und Leistungsaufnahme eines Rechners
Kann der Nutzungsgrad eines Rechners durch den Einsatz von hoch-performanter, optimierter Software niedrig gehalten werden, so wird Energie gegenüber dem Einsatz
einer weniger performanten Software eingespart. In Rechenzentren gewinnt dies an Bedeutung: Kann man die Effizienz von Software um 100 % steigern, werden in der Theorie nur die Hälfte der Server benötigt. Damit wird nicht nur die elektrische Versorgungsleistung um die Hälfte reduziert, auch entfallen die gesamten Umweltkosten der Produktion und Beschaffung nicht benötigter Rechnerhardware. Die Umwelt profitiert also doppelt von einer Effizienzsteigerung der Software. Aber wie realistisch ist eine solche Erhöhung?
Einfluss verschiedener Programmiersprachen
Die Programmiersprache als grundlegendes Werkzeug hat erheblichen Einfluss auf die Energieeffizienz einer Software. In einer Studie haben Forscher:innen drei Benchmarks in 27 verschiedenen Programmiersprachen auf ihren Energieverbrauch untersucht [2]. Dabei kamen sowohl klassische Compilersprachen auf den Prüftisch (z. B. C und C++), wie
auch interpretierte (z. B. Python) und auf virtuellen Maschinen basierende Sprachen (z. B. Java). Erwartungsgemäß schnitten viele Compilersprachen gut ab, da sie den Programmcode in maschinenlesbare Anweisungen übersetzen und dabei optimieren.
Interpreter- und VM-Sprachen abstrahieren hingegen von der konkreten Prozessorhardware und erfordern deshalb energieaufwendige Zwischenschritte. Die resultierenden Unterschiede im Energieverbrauch sind teils gewaltig. Abbildung 2 zeigt auszugsweise den Vergleich von vier verbreiteten Programmiersprachen für die drei Benchmarks binary trees, fannkuch-redux und fasta (siehe auch “Computer Language Benchmarks Game”). Der Unterschied von der energieeffizientesten Sprache (C) zu der am wenigsten effizienten (Python) beträgt im Durchschnitt mehr als 4000 % bei der Lösung derselben Rechenprobleme.
Abbildung 2: Auszug an Benchmarks zum Energieverbrauch verschiedener Programmiersprachen
Dies entspräche im Straßenverkehr dem Vergleich zwischen einem Fahrzeug mit 5 l Kraftstoffverbrauch pro 100 km mit einem anderen Modell, das über 200 l pro 100 km benötigt. Gäbe es ein EU-Energielabel für Programmiersprachen, könnte es wie am rechten Rand der Tabelle aussehen. Fairerweise muss aber erwähnt werden, dass diese Programmiersprachen in der Regel in verschiedenen Domänen und Anwendungsfällen, d. h. nicht konkurrierend, eingesetzt werden. Insofern ist der direkte Vergleich mit dem Straßenverkehr nicht zutreffend – so wie der Vergleich zwischen einem Bulldozer und einem Rasentraktor.
Eine Web-UI benötigt derzeit allein aus Sicherheitsgründen eine gekapselte Ablaufumgebung – sie kann nicht mit einer Compilersprache entwickelt werden. Der Umstand, dass mittlerweile auch JavaScript oder Python ihren Weg in Server-anwendungen gefunden haben, offenbart signifikantes Einsparpotenzial. Softwareentwickler:innen sollten daher sorgfältig planen, in welcher Programmiersprache Softwaremodule entwickelt werden – die Portierung substanzieller CodeTeile zu einem späteren Zeitpunkt aus Effizienzgründen kann sehr kostenintensiv werden. Jedoch: eine effiziente Programmiersprache nützt wenig, wenn die verwendeten Algorithmen ineffizient sind. Eine einzige falsche Entscheidung an zentraler Stelle kann den Energieverbrauch der gesamten Applikation um Größenordnungen verschlechtern.
Code Reviews oder Tests zur Qualitätssicherung sollten deswegen nicht nur Korrektheit und Wartbarkeit, sondern auch die Effizienz der Software im Auge behalten.
Einfluss von Mobile und Cloud-Computing
Ein weiteres Betrachtungsfeld für Green IT ist die zunehmende Nutzung von Mobile und Cloud Computing, was insgesamt zu einem steigenden Energieverbrauch des IKT-Sektors
führt. Umgekehrt kann der Trend, existierende Datenverarbeitung von lokalen Rechenzentren in die Cloud zu verlagern und gleichzeitig mobile Geräte zu unterstützen, große Chancen für die Nachhaltigkeit eröffnen.
Im Mobile Computing gibt es bereits einen direkten Anreiz, die Energieeffizienz von Applikationen zu steigern: die Verlängerung der Akkulaufzeiten. Aber auch bei der Nutzung von Cloud-Diensten für das Backend der Datenverarbeitung gibt es einen starken, wenn auch nur indirekten Anreiz zur Effizienzsteigerung. Die beiden Cloud-Angebote Infrastructure as a Service (IaaS) und Platform as a Service (PaaS) zum Betrieb von Server-Backends werden von CloudHostern nutzungsabhängig abgerech net. Desto weniger Server beim IaaS oder je weniger Dienste beim PaaS gebucht werden, desto geringer sind die Betriebskosten der Kunden. Natürlich ist die Miete nicht analog zu den direkten Umweltkosten, aber es existiert eine starke Korrelation, die als Treiber von Effizienzbemühungen wirkt.
Im Gegensatz zu IaaS mit dedizierter Hardware je Kunde bietet der Trend hin zu PaaS große Chancen für die Ressourcenschonung, da sich in diesem Modell mehrere Nutzer
und Firmen dieselbe Hardware teilen können. Ressourcen werden effizienter genutzt und Hardware in großem Maße gespart. Betrachtet man die jeweilige Selbstverpflichtung
zum umweltschonenden Betrieb von Rechenzentren, bestehen zwischen den Hyperscalern wie Amazon AWS, Microsoft oder Google sowie kleineren Mitbewerbern jedoch noch
erhebliche Unterschiede. Leider erscheint gerade das Verhalten des größten Hyperscalers, Amazon, als das am wenigsten nachhaltige [3].
Angetrieben von der öffentlichen Meinung und staatlichen Vorgaben bewegen sich jedoch alle Anbieter in Richtung CO2-Vermeidung. So hat sich die Ampelkoalition den klimaneutralen Betrieb neuer Rechenzentren in Deutschland bis 2027 in den Koalitionsvertrag geschrieben.
Energieeffizientes Softwaredesign
Nur einige Maßnahmen zum energieeffizienten Softwaredesign erfordern aufwendiges Engineering. Viele sind lediglich das Äquivalent zu Best Practices im häuslichen Energiesparen wie “Tür zu!” und “Licht aus”, die zusätzliche Sorgfalt erfordern:
Effiziente Algorithmen
Durchführung einer Komplexitätsanalyse und Auswahl geeigneter Techniken, wie z. B.
dem Arbeiten mit sortierten statt unsortierten Daten, sowie Justierung
der angebrachten Rechengenauigkeit.
Regelmäßiges Polling
Vermeidung von wiederholtem und hochfrequentem Polling durch Einsatz asynchroner Kommunikation, bzw. im Web-Kontext durch Techniken wie HTTP Long Polling oder Web Sockets.
Programmiersprache
Ausführung häufig genutzter Funktionsmodule in einer energieeffizienten Sprache.
Networking: Sinnvoller Einsatz von Datenkompression und Reduzierung von Kommunikation auf die notwendigen Daten, z. B. durch Einführung von GraphQL für REST APIs.
Datenumfang
Übergabe und Verarbeitung nur benötigter Daten, zum Beispiel durch Limitierung des Scopes: Verlagerung lokaler Datenverarbeitung in die Cloud, basierend auf PaaS (Platform as a Service) von Datenbankabfragen oder durch Einsatz von Caching. Verschieben
von nicht mehr relevanten Daten in ein Archiv (optimiertes Lebenszyklus-Management von Daten).
Datenbankoptimierung
Runtime-Optimierungen nach Nutzung von Analyse-Tools.
Cloud-Push
Umzug der Datenverarbeitung aus nicht nachhaltigen, lokalen Rechenzentren zu klimaneutralen Cloud-Hostern, vorzugsweise mittels PaaS.
Lean Web-UI
Energie-Optimierung von Web-Frontends, z. B. durch Verzicht auf Animation oder rechenzeitaufwendige Frameworks.
Dynamische Code-Analyse
Identifikation und Optimierung von Modulen mit hohem Energieverbrauch.
Künstliche Intelligenz (KI)
Einsatz energieintensiver KI-Modelle nur nach konkretem Bedarf, alternativ Nutzung
energieeffizienterer Lösungen (z. B. Entscheidungsbäume).
Zusammenfassung
Green IT wird das Softwareengineering immer stärker beeinflussen. Komplementär zur Schaffung nachhaltiger Applikationen muss aber dringend geklärt werden, wie sich
nachhaltige IT überhaupt messen und bewerten lässt – aktuelle Lösungen sind, sofern verfügbar, nicht ausreichend. Bis wirksame Tools, Methoden oder Normen zur Verfügung stehen, kann man sich mit indirekten Gradmessern helfen: Laufzeiten von Unit- oder Integrationstests können als Indikatoren dafür dienen, wohin Entwickler:innen zur Optimierung ihrer Software schauen
müssen.
Literatur
[1] Fan, Weber, Barroso, 2007. Power Provisioning for Warehousesized Computer, Proceedings of the ACM International Symposium on Computer Architecture, S. 13-23
[2] Pereira et. al., 2017. Energy Efficiency across Programming Languages, Proceedings of the 10th ACM SIGPLAN International Conference on Software Engineering, S. 256-267
[3] Kamiya, September 2022, Report Data Centres and Data Transmission Networks, International Energy Agency (IEA)