Auf Sparflamme
Stromsparen extrem mit der LIrPA-Kompression
RAM-Refresh minimieren
Tatsächlich lässt sich dieser Ansatz mit Hilfe des Linux-Kernels verwirklichen. Der Schlüssel dazu liegt in der Datei arch/i386/mm/mmap.c der Kernel-Quellen: Hier befinden sich alle grundlegenden I/<\d>O-Operationen des Speicher-Managements. Um einen Speicherbereich verlustfrei auf möglichst viele Nullen zu konvertieren, bedarf es lediglich einer sehr einfachen Konvertierung, der so genannten Null- oder auch LIrPA-Konvertierung (Logical Inversion Page Addressing). Tabelle 1 enthält einige Beispiele, wie jeweils acht Bit mit Hilfe von zwei Page-Flags in besonders viele Nullen umgewandelt werden können, wobei die beiden Flags zur besseren Darstellung in einer separaten Spalte stehen.
Tabelle 1: Die Null-Konvertierung
| Bitfolge | Page-Flags | Ergebnis |
| 11101101 | 11 | 00010010 |
| 10111010 | 10 | 00010000 |
| 10011101 | 01 | 11001000 |
| 00100010 | 00 | 00100010 |
Der Konvertierungsalgorithmus selbst ist sehr einfach: Bei sechs oder mehr logischen Einsen eines Bytes werden beide Flags auf 1 gesetzt und das Byte selbst bitweise mit XOR verknüpft: Das erste Bit mit dem ersten Flag, das zweite Bit mit dem zweiten Flag, das dritte Bit mit dem ersten und so weiter. Das Ergebnis ist ein Byte, in dem noch maximal zwei logische Einsen übrig bleiben – somit wurden mindestens zwei Drittel der logischen Einsen eingespart.
Bei drei bis fünf Einsen pro Byte kommen die Flags "10" und "01" zum Einsatz, und zwar je nach dem, welches der beiden Flag-Pattern eine besseres Ergebnis verspricht. Die Ersparnis hängt von der Verteilung der logischen Nullen in der Ausgangs-Bitfolge ab. In Zeile 2 von Tabelle 1 ist der fast ideale Fall zu sehen, bei dem an Stelle von fünf Einsen lediglich eine übrig bleibt.
Der letzte Fall, das Flag-Pattern "00", ist trivial: Hier bleibt die ursprüngliche Bitfolge unverändert. Dies ist für zwei oder noch weniger logische Einsen im Byte rationell, noch dazu sparen solche Bytes die XOR-Verknüpfung der einzelnen Bits, was den Prozessor entlastet und somit zusätzlich Strom spart.
Kompression ähnlich CRAMFS
Durch die Einführung der Konvertierungs-Flags wird jedoch etwas mehr Speicher benötigt als ursprünglich. Dies kompensiert eine anschlie§ende abschnittsweise Kompression des Speichers – wie in Tabelle 1 leicht zu erkennen, bestehen die konvertierten Bit-Sequenzen überwiegend aus Nullen. Im Test ergaben sich Einsparungen von fast 20 Prozent gegenüber dem ursprünglichen Speicherinhalt. Somit steht Ihnen insgesamt mehr Speicher zur Verfügung als zuvor, und das, obwohl Sie die Speicherinhalte energiesparend konvertiert haben.
Die Kompression von Speicherinhalten ist unter Linux nichts neues (Abbildung 2), das Dateisystem CRAMFS (Compressed ROM File System), das seit Urzeiten auf PDAs und Embedded-Systemen zum Einsatz kommt, tut nichts anderes: Das Root-Dateisystem wird als Gzip-komprimiertes Dateisystem in RAM des Rechners gehalten und für die Zugriffe durch den Anwender im Hintergrund Stück für Stück entpackt.
Lediglich die Konvertierung der Bitfolgen hat noch keinen Einzug in den Standard-Kernel gefunden. Als besonderen Leser-Service bietet Ihnen die Redaktion diesen LIrPA-Kernel-Patch sowie fertige LIrPA-Kernel-Pakete für die meisten Standard-Distributionen in einem geschützten Download-Bereich der LinuxUser-Homepage [3] an – zum Einloggen müssen Sie die individuelle Nummer unterhalb des Barcodes auf der Titelseite dieser Ausgabe eingeben, ohne Leerzeichen und Trennungen.



