Restartable Microkernels Using Persistent RAM, Resilient Heaps, and Rust
- Type:Master Thesis
- Date:06.09.2019
- Supervisor:
Prof. Dr. Frank Bellosa
- Graduand:Philipp Oppermann
- Links:PDF
-
Non-volatile random access memory (NVRAM) is a promising memory technology that combines the performance and byte-addressability of DRAM with the non-volatility of hard disks and SSDs. With the increasing availability of NVRAM in both server and consumer systems, different approaches to utilize NVRAM in applications emerge.
In this work, we explore the use of NVRAM to make operating systems restartable after power outages and hardware failures. By keeping operating system state across reboots, the reliability of the system can be improved. For example, data loss can be prevented by continuing interrupted file operations after a power outage. The result of our work is a NVRAM framework that allows to safely add restartability to both the kernel and userspace programs.
Our framework uses a persistent heap to keep selected state across reboots. Since partial write operations to NVRAM might lead to soft errors, we make the heap resilient by using error correcting codes that ensure value consistency. To ensure a correct usage of our framework and rule out programmer errors at compile time, we utilize the type system of the Rust programming language. Notably, we ensure that restored values cannot contain pointers to non-restored values because they would become dangling after a restart.
Using our framework, we were able to make parts of the state of the Redox operating system restorable. To provide a foundation for restartable file systems and I/O staging, we implemented support for persistent file descriptors. We were also able to use the error correcting codes of our framework to considerably improve the bit-flip resilience of the kernel-internal list of processes and threads.BibTex:
@masterthesis{oppermann19restartablemicrokernels,
author = {Philipp Oppermann},
title = {Restartable Microkernels Using Persistent RAM, Resilient Heaps, and Rust},
type = {Master Thesis},
year = 2019,
month = sept # "06",
school = {Operating Systems Group, Karlsruhe Institute of Technology (KIT), Germany}
}