Entwurf und Implementierung eines Interprozess-Kommunikationsschemas über nichtflüchtigen Speicher in Linux

Nichtflüchtiger Speicher (NVM) ist eine neue Speichertechnologie, die in Geschwindigkeit und Latenz in Größenordnungen von DRAM liegt, allerdings ihre Werte über Powerzyklen behält. Es wird prognostiziert, dass NVM größer und billiger als DRAM werden wird, während es in Latenz und Energieverbrauch vergleichbar mit DRAM wird. Auf Werte im NVM kann auf Byte-Granularität zugegriffen werden (anders als SSDs), d.h. ähnlich wie beim DRAM können Werte über einfache mov-Instruktionen zugegriffen werden.

Während Prozesse bereits über geteilte Speicherseiten in DRAM kommunizieren können, passiert dies in vielen Fällen dennoch über Dateien. Das bringt inherent Serialisierungs-Overhead mit sich, also bspw. muss eine XML-Struktur aus der DOM-Repräsentation in die menschenlesbare String-Darstellung übersetzt werden. Auch wenn die Daten über Dateien persistiert werden sollen, ist eine Serialisierung notwendig.

Eine Kommunikation über NVM könnte diese Probleme aber lösen, da Prozesse ihre Daten nicht mehr in Dateien schreiben müssten, damit der nachfolgende Prozess (bspw. in einer Pipeline) sie einlesen kann. Auch bleiben die Werte erhalten, wenn das System heruntergefahren wird, d.h. Zwischenergebnisse (solange Sie von den Nutzerprozessen konsistent gehalten werden) bleiben erhalten.

Die Aufgabe in dieser Arbeit ist, ein System zu entwickeln, damit mehrere Anwendungen über geteilten nichtflüchtigen Speicher persistent kommunizieren können. Die Performance des Systems soll gegenüber eines normalen Socket-/Pipe- und Datei-basierten Verfahrens evaluiert werden und Konsistenz über Power Cycles hinweg soll gezeigt werden.

Voraussetzungen

  • Erfahrungen in C/C++
  • Erfahrung mit Linux, wenigstens als Anwendungsentwickler
  • Kenntnisse aus der Vorlesung Grundlagen der Betriebssysteme oder äquivalenter Veranstaltung

Empfohlene Fähigkeiten

  • Erfahrungen als Linux-Kernel Hacker