Memory Reliability as an Allocatable Resource
- Typ der Arbeit: Masterarbeit
- Status der Arbeit: reserviert
- Projekte: ParPerOS
- Betreuer: Kenny Albes, Daniel Lohmann
Context
For a long time, 3–5-year hardware upgrade cycles were the norm in data centers. However, this might be changing due to several factors: As recent geopolitical developments increase the likelihood of supply chain attacks, the latest and greatest hardware might not always be available. In an extreme scenario Europe's data centers might need to extend the lifetime of existing hardware or rely on third-rate purchases from a restricted set of suppliers. Additionally, from an ecological standpoint, phasing out working hardware for small efficiency gains might not be sensible due to the large amounts of embodied carbon involved. Finally, diminishing incremental improvements make upgrading generally less appealing. Therefore, it might be desirable to use hardware for longer, even in a partially degraded state e.g, due to aging or low quality. For this, strategies for managing aging hardware need to be developed and systems must be re-designed to take advantage of partially degraded resources.
Problem
Operating systems treat memory resources uniformly with respect to reliability and resilience ignoring defects, degradation, and capability differences. While statistical models for memory degradation and techniques for error detection exist, operating systems fail to take full advantage of this information. Linux for example does try to offline bad page frames, but simply adds them to a blocklist and forgets them after reboot. Furthermore, current attempts of online error detection, such as memory scrubbing, rely on hardware ECC support, which might not be available in a resource constrained scenario. Finally, applications might not need perfectly reliable memory for all allocations, but have no way to communicate that fact to the system.
Goal
The goal of this thesis is to turn memory reliability into an allocatable resource and prototype this concept inside the Linux kernel. Most importantly, infrastructure needs to be created to separate chunks of physical memory into reliability classes, with support for promotion and demotion based on live reclassification. To expose this functionality to applications, an interface is needed to allocate memory of different classes. Additionally, mechanisms (e.g., event channels) for communicating changes, such as reclassification or detected poisoning of previously allocated memory, to applications need to be designed. Finally, the system must be evaluated using error injection (e.g., simulating ECC faults while injecting errors manually according to known failure classes). For this, suitable applications that allow for mixed reliability need to be identified and extended (e.g., video encoding, cache memory).
Challenges for this thesis include:
- Data structures to separate physical memory into chunks sorted by reliability.
- Kernel infrastructure to handle (re)classification of memory independently of the actual classfication mechanism.
- Allocation API that allows programs to (optionally) specify reliability requirements when requesting memory.
- Event channels to communicate memory errors or reclassification to relevant applications.
- Evaluation on real world applications using error injection to simulate known memory failure modes (e.g., single-cell, row, column).
- (Optional) methods for (re)classification such as online memory testing (e.g., test patterns, heuristics, intervals).
- (Optional) exploring different reliability granularities e.g., on process or application level instead of per allocation.
- (Optional) force actual memory failures via forcing DRAM to operate on unstable timings.
Topics: Linux Kernel, DDR, C, Fault Injection
References
- Revisiting Memory Errors in Large-Scale Production Data Centers: Analysis and Modeling at Facebook
-
IEEE/IFIP International Conference on Dependable Systems and Networks2015.
[]
