TU BRAUNSCHWEIG
| Carl-Friedrich-Gauß-Fakultät | Informatik
Informatikzentrum

Implementierung von robusten, atomaren Datenstrukturen in einem Linux-Kernel-Modul

Bearbeiter(anonym, Login erforderlich)
BetreuerArthur Martens
ProfessorProf. Dr. Rüdiger Kapitza
Projektdanceos
IBR GruppeDS (Prof. Kapitza)
ArtBachelorarbeit
Statusabgeschlossen
Beginn19.05.2017

Motivation

Persistenter Speicher fasst eine Gruppe von Technologien zusammen mit denen ein Hauptspeicher realisiert werden kann der ohne konstante Stromzufuhr seinen Zustand beibehält. Prominente Beispiele sind hier Intels 3D XPoint bzw. Optane Produkte sowie batteriegestützte NVDIMM-Module der Firma Viking. Um die Leistungsfähigkeit des persistenten Speichers voll auszuschöpfen, ist ein direkter Datenzugriff von der CPU erstrebenswert. Das Betriebssystem muss hierfür den persistenten Speicher verwalten und über den Systemaufruf „mmap“ dem Benutzerprozess seitenweise zur Verfügung stellen. Hierfür muss die Speicherverwaltung ihren Zustand selbst im persistenten Speicher ablegen.

Eine Herausforderung bei der Verwendung des persistenten Speichers sind Stromausfälle. Dabei wird die Ausführung des Programms unkontrolliert beendet, wodurch persistente Daten in einem irreparabel inkonsistenten Zustand hinterlassen werden. Darüber hinaus sind auch Bitfehler, die z. B. durch Umweltstrahlung und Alterungsprozesse entstehen können, im persistenten Speicher zu erwarten. Dadurch kann die Integrität der Daten beschädigt werden. Dies ist besonders schwerwiegend, da die Daten im persistenten Speicher üblicherweise nicht redundant gespeichert werden und Fehler nicht durch einen Neustart des Systems behoben werden können.

Aufgabenstellung

Ziel dieser Arbeit ist die Implementierung eines Linux Kernel-Moduls für die seitenweise Speicherverwaltung des persistenten Speichers, das sowohl robust gegenüber Stromausfällen als auch gegenüber Bitfehlern ist. Um die Toleranz gegenüber Stromausfällen zu erreichen, sollen alle persistenten Daten des Kernel-Moduls redundant in zwei Versionen abgelegt sein. Eine dieser Versionen übernimmt eine aktive Rolle und stellt den gültigen Zustand dar, von dem Daten nur gelesen werden dürfen. Analog ist die Rolle der anderen Version inaktiv. Sie beinhaltet eine modifizierbare Kopie der aktiven Version. Alle Zustandsänderungen sollen auf diese Version angewendet werden. Erreicht die inaktive Version einen neuen, konsistenten Zustand, so sollen die Rollen beider Versionen über eine atomare Änderung eines globalen, 64 Bit großen, Datenwortes getauscht werden.

Für die Implementierung eines Toleranzmechanismus für Bitfehler soll die Zeit ausgenutzt werden, in der beide Versionen identisch sind. Die Validierung der Daten kann bei lesenden Zugriffen erfolgen oder direkt vor der ersten Änderung des inaktiven Zustands. Für den Fall eines Fehlers soll als Entscheidungshilfe ein zusätzliches, globales Fehlererkennungswort hinzugezogen werden. Optional kann die Implementierung generalisiert werden, sodass sie leicht auf andere Programme angewendet werden kann.

Die Qualität der Implementierung soll mit Hilfe von Unit-Tests hinreichend sichergestellt werden. Darüber hinaus soll ermittelt werden, wie stark die Zuverlässigkeitsaspekte die Performance beeinflussen und wann eine Validierung der Daten am besten durchzuführen ist. Optional kann mit Fehlerinjektionsexperimenten die Zuverlässigkeit quantifiziert werden.

Links


aktualisiert am 16.10.2017, 09:11 von Arthur Martens
printemailtop