Linux kernels and user-level data management layers form the backbone of modern storage systems, and have long been deployed across a range of commercial and research environments. This end-to-end storage path is organized as a layered architecture th...
Linux kernels and user-level data management layers form the backbone of modern storage systems, and have long been deployed across a range of commercial and research environments. This end-to-end storage path is organized as a layered architecture that includes the kernel I/O stack, consisting of the file system, memory management, and block layers, as well as user-level key-value stores, collectively ensuring both performance and reliability for diverse applications. However, recent advances in storage and CPU technology have begun to expose new limitations along this established storage path. High-performance devices such as NVMe SSDs and persistent memory (PM) reveal long-standing bottlenecks within the software stack, while many-core processors intensify contention on centralized kernel data structures. Moreover, CXL-based tiered memory introduces non-uniform latency and bandwidth characteristics, and suboptimal placement of hot and cold data across tiers can lead to inefficient utilization of the fast memory tier and substantial throughput degradation. These hardware advancements highlight the importance of end-to-end optimization across the storage path, motivating improvements that address the distinct challenges of user-level software and the kernel alike.
Modern storage systems are constructed on mature standard interfaces and deeply layered software architectures, in which kernel and user-level components are organized along well-defined boundaries. Rather than proposing a unified redesign or replacement of this established structure, this work takes a pragmatic approach that quantitatively analyzes and mitigates bottlenecks within each widely-used layer while preserving the current architecture. Such layer-wise optimizations provide a practical pathway to fully exploit the capabilities of emerging storage devices and memory architectures, without sacrificing the compatibility and stability that existing systems rely upon.
Accordingly, this dissertation focuses on two key components of modern storage systems: the Linux I/O stack and user-level KV stores, and conducts a layer-wise investigation into their performance limitations and enhancements. At the kernel level, we quantitatively analyze bottlenecks in direct access (DAX) file systems, journaling subsystems, and page cache management, and propose practical optimizations. At the user-level layer of the I/O stack, we design StellarDB, a new key-value store that effectively leverages high-performance SSDs and tiered memory systems. StellarDB introduces a novel index structure that simultaneously captures both temporal locality and key-space locality, and translates them into spatial locality on the storage device. This enables maximized cache efficiency while minimizing CPU overhead.
In conclusion, this dissertation systematically identifies the key bottlenecks that emerge across the modern storage path, including both the Linux kernel and user-level KV stores, under emerging hardware environments such as many-core processors, persistent memory, and CXL-based tiered memory. We propose optimization approaches that align with the structural characteristics of each layer, and experimentally demonstrate that these enhancements significantly improve I/O throughput and scalability across diverse subsystems, including DAX file systems, journaling layers, page cache management, and KV store indexing structures. This work highlights the practical value of a layer-wise optimization approach built upon the mature Linux I/O stack, rather than replacing or radically redesigning the established architecture, thereby offering a realistic and impactful direction for the evolution of modern storage systems.