Green Coding bezieht sich auf den Energieverbrauch einer Software und hier insbesondere auf die Bereiche Softwarearchitektur, die konkreten Softwarekomponenten sowie die Betriebsplattform. Im Rahmen der Softwarearchitektur ist Green Coding eine weitere nichtfunktionale Anforderung analog zu Security oder Performance. Sie zielt darauf ab, den Energieverbrauch einer Softwarekomponente möglichst gering zu halten.
In der Praxis deckt sich das sehr oft mit Performanceanforderungen. Das heißt, häufig ist der performanteste Code auch der, der am wenigsten Energie verbraucht. Bei der Realisierung der Softwarekomponenten muss die Anforderung des geringen Energieverbrauchs messbar formuliert und während und nach der Entwicklung überprüft werden. Die Programmierer können bei der Optimierung weitgehend auf bekannte Maßnahmen zur Performancesteigerung zurückgreifen. Das Motto lautet hier: „Jede Codezeile hat das Potenzial, den Energieverbrauch zu senken.“
Grüne Betriebsplattform
Die Betriebsplattform ist ein weiterer Bereich, in dem Green Coding eine große Rolle spielt. Der Betrieb in der Cloud ist in der Regel um ein Vielfaches energie- und damit CO2-effizienter als in firmeneigenen Rechenzentren, weil virtuelle Server oder Container nur zum Bedarfszeitpunkt gestartet werden. Wird ein eigener lokaler Server betrieben, so sollte sich die Leistung der Hardware am tatsächlichen Bedarf ausrichten, der Server also nicht überdimensioniert sein.
Ist der Betrieb in der Cloud nicht möglich, dann sollte die Abwärme des Rechenzentrums in der kalten Jahreszeit bestenfalls auch als Heizquelle verwendet werden.
Laut wissenschaftlichem Dienst des Bundestages steigt der Energieverbrauch von Rechenzentren jährlich an. Der Anstieg sei dabei vor allem auf den steigenden Strombedarf der Server zurückzuführen. Obwohl der Anteil der Software im Gegensatz zum Beispiel zur Kühlung der Rechenzentren geringer ist, wird die Nachfrage nach energieeffizienter und ressourcenschonender Software in Zukunft steigen.
Auch die Anwender der Software haben Einfluss darauf, wann bestimmte Berechnungen durchgeführt werden. So können zum Beispiel unkritische Batchläufe um die Mittagszeit ausgeführt werden, wenn eine Nutzung von Solarenergie möglich ist.
Mögliche Entwicklungen
In Zukunft wird es weitere Entwicklungen in Richtung Performanceverbesserung und damit auch in Richtung Nachhaltigkeit geben. Die Vergangenheit zeigt, dass wir immer schneller immer komplexere Systeme entwickeln können und die Programme oft sogar noch performanter und mit weniger Energieverbrauch laufen als früher.
Beschäftigte in Fachabteilungen, IT-Architektur, Entwicklung und Betrieb können somit einen Beitrag zum Umweltschutz leisten. Welche konkreten Maßnahmen und Entwicklungsmuster für grünes Coding umgesetzt werden können, fasst die Checkliste zusammen.
Checkliste: Die wichtigsten Punkte für alle Stakeholder
- Nichtfunktionale Anforderungen zu Grüner IT und Green Coding sind definiert
- IT-Architekten und Entwickler sind geschult
- System skaliert dynamisch und fährt sich bei Leerlauf herunter
- Dynamische Inhalte und Echtzeitverarbeitung werden möglichst vermieden
- Komponenten mit dem höchsten Energieverbrauch sind identifiziert
- Green Coding Prinzipien und Entwicklungsmuster werden in folgenden Punkten berücksichtigt:
- Effizienter Code mit optimalen Algorithmen
- Vermeidung unnötiger Round-Trips
- Caching
- Optimiertes Datenvolumen
- Komprimierte Netzwerkkommunikation
- Datenbankindizes
- Optimierte Ressourcennutzung durch optimierte Konfiguration
- Zero Waste Code
- Prinzip: „Jede Codezeile hat das Potenzial, den Energieverbrauch zu senken“ - Performance Engineering: Es ist klar, was, wann und wie gemessen wird
- Was: Gesamtsystem, Prozess, Komponente, Methode
- Wann: Unittest, Integrationstest, Betrieb
- Wie: Open Hardware Monitor oder Smart Plugs, Frameworks - Ressourcenverbrauch: Optimierung von CPU, RAM, Speicher, Netzwerk
- DevOps und Betrieb
- DevOps Pipeline ist hinsichtlich Energieverbrauch optimiert
- Containerbasierte Plattform mit intelligenter, dynamische Skalierung wird genutzt
Den Energieverbrauch von Software richtig messen
Um herauszufinden, an welchen Stellen im Sourcecode Energie eingespart werden kann, benötigt man Werkzeuge zum Messen des Energieverbrauchs. Tools, die auf Prozessebene den Energieverbrauch von Software messen, sind bereits zum Beispiel in Windows integriert.
In einen Prozess „hineinsehen“ kann man mit diesen Tools nicht. Das bedeutet, dass keinerlei Aussage darüber getroffen werden kann, welche Komponente oder Funktion innerhalb des Prozesses am meisten Energie verbraucht. Exakt diese Information ist für Entwickler jedoch essenziell.
Wie soll gezielt hinsichtlich Energieeffizienz optimiert werden, wenn der genaue Ansatzpunkt unbekannt ist?
Der jPowerMonitor von msg
Das von msg entwickelte Tool jPowerMonitor überwacht innerhalb laufender Applikationen, welche Funktionen gerade aktiv sind und wie viel CPU-Zeit sie in Anspruch nehmen. Die zur Ermittlung des Energieverbrauchs zusätzlich notwendigen Messdaten, wie zum Beispiel den aktuellen Gesamtverbrauch der CPU in Watt, kann jPowerMonitor nicht selbst abgreifen. Zu diesem Zweck ist eine Schnittstelle implementiert, welche Stand heute die beiden Windows-Tools Open Hardware Monitor sowie HWiNFO anbindet. Mittels CSV-Schnittstelle lassen sich durch Konfigurationsanpassungen auch Tools für Linux oder MacOS anbinden.
jPowerMonitor bietet darüber hinaus die Möglichkeit, auf die eigenen Funktionen in Java Programmen zu filtern. Manchmal kann es aber auch interessant sein, wie viel Energie die benutzten Frameworks benötigen. Dies ist gerade bei der Erstellung von Prototypen hilfreich, um die energieeffizienteste Bibliothek auszuwählen.
Außerdem ist eine Erweiterung des Testframeworks JUnit in jPowerMonitor integriert, mit der der Stromverbrauch in Komponenten- und Unittests gemessen werden kann. Damit lassen sich beispielsweise zwei Algorithmen, die das gleiche Problem adressieren, hinsichtlich ihres Energieverbrauchs vergleichen.
jPowerMonitor hilft Entwicklern, herauszufinden, an welchen Stellen des eigenen Programms der meiste Strom verbraucht wird. Dies gibt Entwicklern die Möglichkeit, den Code im Sinne von Green Coding zu optimieren und zur Reduzierung von CO2-Emissionen beizutragen.
Aktuell ist das Tool exklusiv für Java verfügbar. Das Konzept von jPowerMonitor lässt sich jedoch auf weitere Programmiersprachen übertragen, die Introspektion beziehungsweise Reflection unterstützen, wenngleich die Library für die jeweilige Sprache neu zu implementieren ist.
Autor: Jakob Deiner
Jakob Deiner ist M. Sc. Informatik und verfügt über mehr als zehn Jahre Berufserfahrung. Als Lead IT Consultant bei msg GillardonBSM berät er Kunden in seinen Schwerpunktthemen IT-Architektur, objektorientiertes Design und containerbasierte Betriebsplattformen. Er ist außerdem Certified Professional for Software Architecture (iSAQB) – Foundation Level (CPSA-F) und Certified Scrum Master (CSM), Scrum Alliance.
Autor: Hans-Peter Keilhofer
Hans-Peter Keilhofer ist Dipl. Informatiker mit langjähriger Berufserfahrung und unterstützt als Executive IT Consultant Kunden in der Planung und Umsetzung von IT-Architekturen. Darüber hinaus hält er als Dozent an der Universität Passau regelmäßig die Vorlesung „Softwareentwicklung für Fortgeschrittene“ am Lehrstuhl für Wirtschaftsinformatik mit Schwerpunkt Internet- und Telekommunikationswirtschaft.