![]() |
The ADvanced Systems Laboratory (ADSL)
|
||||||||||||||||||
|
Abstract:Modern applications, capable of running on a range of devices from servers to smartphones, require persistent data storage to maintain state across restarts, power loss, or crashes. Applications rely on system calls provided by the operating system, particularly the file system, to achieve this. However, with devices running various operating systems and file systems, developers aim for portability, writing code that can run across multiple platforms without modification. While compilers do a great deal for user-space code, translating it efficiently for different processors, they offer little when it comes to system calls, typically performing a basic one-to-one translation. Subtle differences in internal system behavior, especially during failures, can affect the system's state and lead to incorrect outcomes, potentially causing data loss or other critical issues. These inconsistencies also introduce variations in performance across platforms. As a result, applications may experience critical failures or data loss when assumptions about system behavior are incorrect, and may also run inefficiently due to performance variations. In this dissertation, we aim to bring the benefits that compilers provide to user-space applications—such as ensuring that optimizations preserve semantic correctness while selecting the most efficient instructions for different processors—to interactions between applications and the file system. We begin by challenging the assumption that system calls behave consistently across platforms. Through a detailed study of fsync failures, we demonstrate that incorrect assumptions can result in data loss and show the necessity for file-system-specific error handling. Next, we examine application interactions with file systems, discovering common patterns, which we refer to as intentions. Finally, leveraging these insights, we develop HSL (The High-Level System Language), a declarative language that allows developers to express these intentions. HSL handles failures at a per-file-system level to prevent data loss and ensure correctness. Additionally, it selects the most appropriate system calls based on runtime information, such as the target file system, to achieve optimal performance across diverse platforms.
Full Paper:
PDF
BibTeX
|
||||||||||||||||||