Stefan Naumann, Daniel Lohmann
Leibniz Universität Hannover
Abstract
Non-volatile memory (NVM) ist eine disruptive, neue Speichertechnologie, die byte-granular adressiert wird und ihre Werte über Power-Cycles behält. Um auf den NVM zuzugreifen, wird dieser in den virtuellen Adressraum des jeweiligen Prozesses eingeblendet.
Zeiger zwischen Objekten im DRAM, also der Arbeitsrepräsentation von Datenstrukturen, verlieren ihre Bedeutung, sobald der Prozess beendet, und damit der Adressraum geschlossen wird. Sollen die Daten wieder- bzw. weiterverwendet werden, muss für das Sichern auf Disk die Arbeitsrepräsentation in eine persistente Repräsentation umgewandelt (serialisiert) werden. Die Unterscheidung zwischen Arbeits- und persistenter Repräsentation kann aufgelöst werden, wenn die Datenstrukturen im NVM gesichert werden und Referenzen zwischen Objekten über Programmläufe hinweg gültig bleiben.
In modernen Betriebssystemen kann ein Prozess aber nicht zuverlässig entscheiden, wo ein Stück Speicher eingeblendet werden soll. D.h., bei einem zweiten Start könnte das NVM-Stück an einer anderen Adresse beginnen, was alle Zeiger, und damit quasi alle Datenstrukturen im NVM ungültig macht. Existierende Lösungen erarbeiten sich andere Zeiger, bspw. werden Offsets vom Anfang des Objekt-Pools herangezogen oder global eindeutige IDs verteilt, die in Tabellen nachgeschlagen werden müssen.
Wir schlagen ein Verfahren vor, bei dem die Direct-Access (DAX)-Regionen im NVM immer an die gleiche Stelle im virtuellen Adressraum eingeblendet werden, auch über mehrere Prozesse hinweg. Somit bleiben alle Zeiger im NVM gültig und das Maschinenmodell bleibt identisch, egal ob ein Prozess auf NVM, DRAM oder beidem arbeitet.
Erste Untersuchungen zeigen, dass der Ansatz mit existieren Bibliotheken kompatibel ist. libxml2 bspw. kann durch etwa 200 Zeilen neuen Codes derart modifiziert werden, dass sie ihren DOM-Baum im NVM und damit persistent aufbaut. Weitere Untersuchungen zur Performanz werden folgen.