Archiv Energie-Benchmark für das IOTA-Netzwerk

(Chrysalis Edition)

14. Mai’21

Übersetzung des IOTA Blogartikel von Autor Navin Ramachandran, Mitglied des Board of Directors.


In unseren Tests verbraucht eine Raspberry Pi 4-Node etwas mehr als ein Millionstel einer kWh pro IOTA-Message/Transaktion, einschließlich der Proof-of-Work-Kosten.

Zum Vergleich: Die Zubereitung einer Tasse Kaffee in einer Einzelportionsmaschine verbraucht etwa 0,024 kWh (fast 22.000 Mal so viel Energie).

Zusammenfassung

Die Energiebilanz von Kryptowährungsnetzwerken wird zunehmend und zu Recht unter die Lupe genommen. Bei der IOTA Foundation legen wir Wert auf einen niedrigen Energiebedarf und umweltfreundliche Anwendungsfälle.

Externe Untersuchungen haben bereits den geringen Stromverbrauch des IOTA-Netzwerks vor Chrysalis gezeigt. Das jüngste Chrysalis-Upgrade beseitigt viele ineffiziente Aspekte des Protokolls und sollte die Energieeffizienz weiter verbessern. Allerdings hat die IOTA Foundation traditionell davon abgesehen, irgendwelche Energieeffizienz-Zahlen zu veröffentlichen, da die Messung komplex und nuanciert ist. Die Zahlen können je nach Netzwerktoplogie und Last stark variieren.

Aufgrund des großen Interesses an diesem Thema und als Reaktion auf Anfragen aus der Community haben wir uns entschlossen, unsere internen Messwerte zu veröffentlichen, die während der Entwicklung von Chrysalis gesammelt wurden. Diese Metriken zeigen eine signifikante Reduzierung des Energieverbrauchs als Ergebnis des Upgrades.

IOTA ist darauf ausgelegt, leichtgewichtig zu sein und eine Hornet-Node kann auf stromsparenden Geräten wie Raspberry Pis laufen.

  • Der Betrieb eines Hornet Nodes auf einem Raspberry Pi 3 oder 4, ohne dass Transaktionen ausgegeben werden, verbraucht eine vernachlässigbare Menge an Energie.
  • Wenn eine Raspberry Pi 4-Node keinen Remote-Proof-of-Work durchführt, dann liegt der Energiebedarf bei nur 1,18 Millijoule pro Transaktion/Message bei 100 Messages pro Sekunde (MPS). Dies entspricht einem Wert von 3.28 10-1
    kWh oder, einfacher ausgedrückt, weniger als ein Milliardstel einer kWh.
  • Wenn ein Raspberry Pi 4 ein Remote Proof-of-Work durchführt, dann liegt der Energiebedarf bei nur 4,026 Joule pro Transaktion/Message. Dies ist gleichbedeutend mit 1.1 10-6 kWh oder, einfacher ausgedrückt, etwas mehr als ein Millionstel einer kWh.
  • Die Reduzierung des Energieverbrauchs durch das Chrysalis-Upgrade (in verschiedenen Testszenarien) liegt zwischen 33 % und 95 %.

Hinweis: Diese Zahlen sollten nur als Richtwert und als Vergleich mit dem Vor-Chrysalis-Netz gesehen werden. Sie sind ein Ausgangspunkt für ein Gespräch und keineswegs erschöpfend. Die wichtigsten Einschränkungen sind die folgenden:

  • Wir haben Raspberry Pis für die Nodes (der Einfachheit halber) in einer einfachen Konfiguration verwendet, während die meisten Nodes auf billigen VPSs und mit einer komplexeren Netzwerktopologie betrieben werden.
  • Es ist unwahrscheinlich, dass der Energieverbrauch linear mit der Netzwerklast skaliert.

Einführung

Die zweite Phase des Chrysalis-Upgrades führte viele Änderungen am IOTA-Protokoll ein. Diese Änderungen zielen darauf ab, den Übergang zu Coordicide zu vereinfachen, die Entwicklerfreundlichkeit zu verbessern und die Akzeptanz in der Industrie zu beschleunigen. Ein sehr wichtiges Merkmal sind jedoch die erheblichen Leistungsverbesserungen. Upgrades wie der Übergang zur binären Logik (im Gegensatz zur ternären) sowie die Verwendung von Ed25519-Signaturen anstelle von W-OTS reduzieren einen Großteil der Rechenlast, die HORNET-Nodes tragen müssen, um das Netzwerk am Leben zu erhalten.

Diese Benchmark-Analyse zielt darauf ab, die Auswirkungen dieser Faktoren auf den Energieverbrauch von HORNET-Nodes zu vergleichen, die auf Raspberry Pis laufen.

Methodik

1) Laptop HORNET-Koordinator

Das IOTA-Netzwerk, das in diesem Benchmark verwendet wird, kann als ein Private Tangle angesehen werden. Es darf nicht mit dem Mainnet, Devnet, Chrysalis-Netzwerk oder Pollen-Netzwerk verwechselt werden.

Ein HORNET-Koordinator-Node wurde auf einem Personal Laptop Computer (x86-64 Intel Core I9, 40GB RAM) eingesetzt. Da der Koordinator bei Coordicide entfernt wird, wurde er nicht in den Energie-Benchmark einbezogen.

2) Raspberry Pi HORNET-Node

Der Benchmark wurde mit einem Raspberry Pi 3B+ (4 Cores ARM Cortex-A53 1,4 GHz) und einem Raspberry Pi 4 (4 Cores ARM Cortex-A72 1,5 GHz) durchgeführt, um eine gewisse Variabilität in Bezug auf die gesammelten Daten zu erhalten. Sie wurden zusammen in den gleichen lokalen Netzwerkbereich (LAN – 33.42Mbs Down, 3Mbs Up, Kombination aus cat5e und cat6 Verkabelung) angeschlossen, wo sie auch mit dem Laptop (d.h. dem Koordinator) kommunizieren konnten.

Alle Messungen wurden mit den HORNET-Node wiederholt, die als Pre-Chrysalis (v0.5.6) und Post-Chrysalis (v0.6.0) Nodes eingerichtet waren.

Die Pre-Chrysalis-HORNET-Nodes hatten die folgenden festen Parameter:

  • Merkle-Tree-Depth = 13
  • Security Level = 2
  • Intervall = 10s

Die Post-Chrysalis-HORNET-Nodes hatten die folgenden festen Parameter:

  • Intervall = 10s

(Merkle Tree Depth und Security Level sind bei Chrysalis Pt.2 keine Parameter mehr)

Um die geringen Leistungs- und Zuverlässigkeitsprobleme regulärer SD-Karten zu vermeiden, wurden RasPiKey eMMC-Module (16Gb) als Speichergeräte für die Raspberry Pis verwendet.

Als Betriebssystem wurde eine minimalistische, angepasste Linux-Distribution auf Basis von OpenEmbedded verwendet, die durch das Fehlen unnötiger Software-Komponenten eine effiziente Allokation der CPU-Leistung erlaubt. Der verwendete Kernel war linux-raspberrypi v5.4.72, wobei keine Anpassungen am Build-System vorgenommen wurden. Das Rootfs basierte auf dem BitBake-Rezept honeycomb-image-minimal.bb, das von Pokys Rezept core-image-minimal.bb erbt.

3) Messungen des Stromverbrauchs

Um genaue Messungen des Stromverbrauchs jedes HORNET-Knotens durchführen zu können, wurde eine eigene Breadboard-Schaltung aufgebaut. Der Stromverbrauch jedes Raspberry Pi wurde mit einem Texas Instruments INA219 gemessen, der mit einem Breakout-Board von Adafruit verwendet wurde.

Ein BeagleBone Black wurde verwendet, um die Messungen von den INA219-Sensoren über den i2c-Bus zu sammeln.

Ein XL4016-Modul wurde verwendet, um ein 12V,10A-Schaltnetzteil auf 5V herunterzustufen, während ein hoher Ausgangslaststrom (max. 8A) beibehalten wurde.

Die INA219-Sensoren arbeiten, indem sie den Spannungsabfall eines 0,1-Ohm-Shunt-Widerstands messen, der zwischen der Vcc des Raspberry Pi und der Vcc des XL4016 eingefügt wurde.

Eine Referenzmessung des Stromverbrauchs beider Raspberry Pis wurde gesammelt, ohne dass irgendwelche HORNET-Nodes liefen. Alle Messungen wurden über einen Zeitraum von 10 Minuten gesammelt.

Die Abbildungen 1 und 2 skizzieren den Versuchsaufbau.

Abbildung 1: Visuelles Diagramm des Versuchsaufbaus

Abbildung 2: Schaltplan des Versuchsaufbaus


4) Proof of Work und Spam-Rate

Proof of Work (PoW) ist definiert als die wiederholte Berechnung von Hashes, um die Nonce zu finden, die eine potentielle Transaktion/Message validiert (hier werden Transaktionen im Pre-Chrysalis-Kontext verwendet, während Messages im Post-Chrysalis-Kontext verwendet werden). Als Protokoll erlaubt IOTA (sowohl Pre- als auch Post-Chrysalis), dass die PoW-Berechnung entweder durch die Node oder den Client durchgeführt werden kann.

Wenn PoW vom Node durchgeführt wird, ist zu erwarten, dass die intensive Rechenlast einen signifikanten Anstieg des Energieverbrauchs des Raspberry Pis zur Folge hat. Wenn PoW vom Client ausgeführt wird, ist die Node nur für die Weiterleitung der Transaktionen/Message verantwortlich.

Bei Pre-Chrysalis IOTA bestimmt die Minimum Weight Magnitude (MWM) die für die Berechnung des Proof of Work erforderliche Rechenlast. Für jede Transaktion müssen durchschnittlich 3^MWM-Hashes berechnet werden, um eine gültige Nonce zu finden. Derzeit verwendet das Pre-Chrysalis Mainnet MWM=14 (d.h. 3^14 = über 4 Millionen Hashes).

Auf Post-Chrysalis IOTA haben wir nun Messages mit variabler Länge und der PoW wird an die Länge der Message angepasst. Ein neuer Parameter namens PoWScore ersetzt den MWM. Ein PoWScore von X bedeutet, dass für jedes Byte der Message im Durchschnitt X Hashes berechnet werden müssen, bis eine gültige Nonce gefunden wird. Das aktuelle Alphanet verwendet einen PoWScore von 4000 (d.h. 4000 Hashes / Byte).

Eine der Hauptfunktionen von PoW ist es, die Fähigkeit von schlechten Akteuren zu reduzieren, das Netzwerk mit sinnlosen Transaktionen/Messages zuzuspammen, da eine signifikante Menge an Rechenlast für eine relativ lange Zeitspanne zugewiesen werden muss. Daher ist die Reproduktion der Mainnet/Alphanet-Werte von MWM/PoWScore nützlich, um den Einfluss von PoW auf den Energieverbrauch auf den Raspberry Pis zu messen.

Um den Stromverbrauch der HORNET-Nodes zu messen, während sie PoW ausführen, wurden zwei einfache Spammer-Clients geschrieben:

Beide Clients wurden von demselben Laptop aus ausgeführt, auf dem der Koordinator läuft (Anmerkung: der Spam wurde an die Nodes gerichtet, ohne dass eine direkte Verbindung zwischen den Clients und dem Koordinator bestand).

Die Reproduktion der Mainnet/Alphanet PoW-Parameter (MWM/PoWScore) hat einen signifikanten Einfluss auf die Spam-Rate (Transaktionen/Messages pro Sekunde), unabhängig davon, ob der PoW vom Node oder vom Client berechnet wird. Andererseits ist es auch wünschenswert, den Einfluss zu evaluieren, den die Propagierung neuer Transaktionen/Messages auf den Energieverbrauch der HORNET-Node hat, ohne dabei unbedingt PoW zu berücksichtigen.

Daher wurde auch ein zweites Szenario evaluiert, bei dem das Spammer-Plugin des Koordinators bei einer Spam-Rate von 50 und 100 Transaktionen/Messages pro Sekunde aktiviert war und die Spammer-Clients überhaupt nicht verwendet wurden. Wir nennen dieses Szenario “Easy PoW”, und der Koordinator war für den gesamten PoW verantwortlich. Die Nodes wurden mit den folgenden PoW-Parametern eingestellt:

  • Pre-Chrysalis: MWM = 10
  • Post-Chrysalis: PoWScore = 50


Ergebnisse

1) Referenz

Tabelle 1 unten zeigt die Referenzmessungen, die gesammelt wurden, als die Raspberry Pis eingeschaltet waren, ohne dass irgendwelche HORNET-Nodes liefen, mit der Leistungsaufnahme in MilliWatt.

Tabelle 1: Referenz – kein HORNET-Node


2) Vor-Chrysalis

Abbildung 3 zeigt zwei Graphen, die den Stromverbrauch über die Zeit jedes Raspberry Pi in 4 verschiedenen Szenarien zeigen, alle im Pre-Chrysalis-Modus:

  • Referenz, wo kein HORNET-Node lief.
  • Ruhezustand, in dem die HORNET-Nodes liefen, jedoch ohne eingehende Transaktionen
  • 50 Transaktionen pro Sekunde, mit Easy PoW (MWM = 10), das vom Koordinator ausgeführt wird.
  • 100 Transaktionen pro Sekunde, wobei Easy PoW (MWM = 10) vom Koordinator ausgeführt wird.
  • Mainnet PoW (MWM = 14) wird von den Raspberry Pis ausgeführt.

Abbildung 3: Stromverbrauch vor Chrysalis


In den Tabellen 2, 3, 4 und 5 sind die Daten aus Abbildung 3 tabellarisch dargestellt.

Tabelle 2 enthält die durchschnittliche Leistungsaufnahme der Raspberry Pis, während keine Transaktionen an die HORNET-Knoten ausgegeben wurden.

Tabelle 2: Pre-Chrysalis – Keine Transaktionen


Tabelle 3 bezieht sich auf das Easy-PoW-Szenario, bei dem der Coordinator den gesamten PoW durchführt und die Raspberry Pis nur für die Weitergabe von 50 TPS zuständig sind.

Tabelle 3: Pre-Chrysalis – Easy PoW by Coo (50 TPS)


Tabelle 4 bezieht sich auf das Easy-PoW-Szenario, bei dem der Koordinator den gesamten PoW durchführt und die Raspberry Pis nur für die Weitergabe von 100 TPS verantwortlich sind.

Tabelle 4: Pre-Chrysalis – Easy PoW by Coo (100 TPS)

Tabelle 5 stellt die durchschnittliche Leistung dar, die von den Raspberry Pis während der Durchführung des Mainnet PoW benötigt wurde. Sie zeigt auch die durchschnittliche TPS-Rate, die jeder Raspberry Pi unter diesen Bedingungen erreichen konnte.

Tabelle 5: Pre-Chrysalis – Mainnet PoW durchgeführt von Raspberry Pi


3) Post-Chrysalis

Abbildung 4 zeigt zwei Diagramme mit dem Stromverbrauch über die Zeit jedes Raspberry Pi in 4 verschiedenen Szenarien, alle im Post-Chrysalis-Modus:

  • Referenz, wo kein HORNET-Node lief.
  • Ruhezustand, in dem die HORNET-Nodes liefen, allerdings ohne eingehende Messages
  • 50 Messages pro Sekunde, wobei Easy PoW (PoWScore = 50) vom Koordinator ausgeführt wird.
  • 100 Messages pro Sekunde, wobei Easy PoW (PoWScore = 50) vom Koordinator ausgeführt wird.
  • Mainnet PoW (PoWScore = 4000) wird von den Raspberry Pis ausgeführt.

Abbildung 4: Stromverbrauch nach Chrysalis


In den Tabellen 6, 7, 8 und 9 sind die Daten aus Abbildung 4 tabellarisch dargestellt.

Tabelle 6 enthält die durchschnittliche Leistungsaufnahme der Raspberry Pis, während keine Nachrichten an die HORNET-Knoten ausgegeben wurden.

Tabelle 6: Post-Chrysalis – Keine Transaktionen

Tabelle 7 bezieht sich auf das Easy-PoW-Szenario, bei dem der Koordinator den gesamten PoW durchführt und die Raspberry Pis nur für die Verbreitung von 50 MPS zuständig sind.

Tabelle 7: Post-Chrysalis – Easy PoW by Coo (50 MPS)

Tabelle 8 bezieht sich auf das Easy-PoW-Szenario, bei dem der Koordinator den gesamten PoW durchführt und die Raspberry Pis nur für die Verbreitung von 100 MPS zuständig sind.

Tabelle 8: Post-Chrysalis – Easy PoW by Coo (100 MPS)


Tabelle 9 stellt die durchschnittliche Leistung dar, die von den Raspberry Pis während der Ausführung des Chrysalis Alphanet PoW benötigt wurde. Sie zeigt auch die durchschnittliche MPS-Rate, die jeder Raspberry Pi unter diesen Bedingungen erreichen konnte.

Tabelle 9: Post-Chrysalis – Alphanet PoW durch Raspberry Pi


Diskussion

1) Normalisierung der Daten

Um den relativen Unterschied des Energieverbrauchs während der einzelnen Szenarien zu bewerten, subtrahieren wir den durchschnittlichen Energieverbrauch der Referenz von jeder Messung.

Tabelle 10: Pre-Chrysalis – normalisiert von der Referenz

Tabelle 11: Post-Chrysalis – normiert von Referenz

Hier fällt auf, dass unabhängig vom IOTA-Protokoll (Pre- oder Post-Chrysalis) der Raspberry Pi 4 tendenziell weniger Strom verbraucht als der 3 (mit Ausnahme von 0 TPS/MPS). Das liegt wahrscheinlich an Optimierungen der unterschiedlichen CPU-Architekturen, wobei der RPi4 ARM Cortex-A72 Kerne hat und der RPi3 Cortex-A53.


2) Energie pro Transaktion / Message

Wenn wir berücksichtigen, dass (1):

P o w e r [ W ] = E n e r g y [ J ] / T i m e [ S ]                 

Wir können die tatsächlich verbrauchte Energie jeder Transaktion/Message schätzen. Zunächst normalisieren wir jede Messung wieder, indem wir sie vom Resting-HORNET-Verbrauch (0 TPS/MPS) subtrahieren.

Tabelle 12: Pre-Chrysalis Normalisiert von 0 TPS

Tabelle 13: Post-Chrysalis Normalisiert von 0 MPS


Wir kennen bereits die Spam-Rate bei den Easy PoW-Szenarien (100 TPS/MPS), daher können wir davon ausgehen, dass eine Transaktion 1/100 Sekunde dauert. Die gleiche Logik gilt für 50 TPS/MPS. Wir können uns die Tabellen 5 und 9 ansehen, um die durchschnittliche TPS für die Mainnet/Alphanet-Szenarien herauszufinden, und die Formel (1) anwenden.

Die Tabellen 14 und 15 zeigen den geschätzten Energieverbrauch pro Transaktion im Pre-Chrysalis- und Post-Chrysalis-Kontext.

Tabelle 14: Pre-Chrysalis Energie pro Transaktion

Tabelle 15: Post-Chrysalis-Energie pro Nachricht


3) Relative Analyse

Abschließend können wir die Messungen relativ vergleichen, um die Verringerung der Leistung und des Energieverbrauchs in Prozent zu quantifizieren. Nennen wir zum Beispiel eine Pre-Chrysalis-Messung A, während wir die entsprechende Post-Chrysalis-Messung B nennen. Die relative Differenz C ist gegeben als C=100∗((A-B)/A)%

Tabelle 16: Relative Differenz der Leistungsaufnahme bei 0 TPS/MPS

Tabelle 17: Relative Differenz des Stromverbrauchs der 3 Spamming-Szenarien, alle normiert von 0 TPS/MPS.

Tabelle 18: Relative Differenz des Energieverbrauchs der 3 Spamming-Szenarien.


Fazit

Es wurden keine signifikanten Unterschiede in Bezug auf den Stromverbrauch der ruhenden HORNET-Knoten festgestellt (0 TPS/MPS).

Signifikante Unterschiede wurden sowohl beim Strom- als auch beim Energieverbrauch in den 3 verschiedenen Spamming-Szenarien festgestellt. Die Post-Chrysalis-HORNET-Nodes arbeiteten effizienter und reduzierten den Strom- und Energieverbrauch in den meisten Szenarien um mehr als 50%.

Leistungsunterschiede wurden auch in Bezug auf die Hardware festgestellt, wobei der Raspberry Pi 4 etwas besser abschnitt als der Raspberry Pi 3.

Die deutlichste Optimierung fand bei der Nachbildung der Mainnet/Alphanet PoW Parameter statt. Das geschah nicht nur wegen der Reduzierung des Stromverbrauchs. Sondern auch, weil Post-Chrysalis-Messages viel schneller ausgegeben wurden als Pre-Chrysalis-Transaktionen. Da Energie gleich Leistung x Zeit ist, bedeutet weniger Zeit für die Ausgabe von Messages einen geringeren Energieaufwand.

Eine sehr wichtige Bemerkung ist, dass wir dem Drang widerstehen sollten, irgendwelche Annahmen bezüglich der Linearität dieser Messungen zu machen. Es ist nicht unbedingt wahr, dass 10 TPS/MPS den 10-fachen Energieverbrauch von z. B. 1 TPS/MPS zur Folge haben. Das wird sehr deutlich durch das Verhältnis zwischen dem Energieverbrauch der Messungen mit 50 TPS/MPS und 100 TPS/MPS illustriert.

Insgesamt kommen wir zu dem Schluss, dass Chrysalis zu sehr signifikanten Optimierungen des IOTA-Protokolls führt, sowohl in Bezug auf die Leistung als auch auf den Energieverbrauch.

Quellen

https://blog.iota.org/internal-energy-benchmarks-for-iota/