Implementing and maintaining file systems is painful. OS functionality is notoriously difficult to develop and debug, and file systems are more so than most because of their size and interactions with other OS components.In-kernel file systems must adhere to a large number of internal OS interfaces.Though difficult during initial file system development, these dependencies particularly complicate porting a file system to different OSs or even across OS versions.This dissertation describes an architecture that addresses the file system portability problem. Virtual machines are used to decouple the OS on which a file system runs from the OS on which user applications run. The file system is distributed as a file system virtual appliance (FSVA), a virtual machine running the file system developers' preferred OS (version). Users runs their applications in a separate virtual machine, using their preferred
OS (version).An FSVA design and implementation is described that maintains file system semantics with few, if any, code changes. This is achieved by sending all file system operations from the user OS to the FSVA. A unified buffer cache is maintained by using shared memory between the user OS and FSVA and by letting the user OS control the FSVA's buffer cache size. core is dedicated to an FSVA, a power-efficient polling mechanism reduces the overheads to 0-10%. Alternatively, relaxing the FSVA design goals by handling the frequent access-control file system checks in the user OS leads to similar overhead reductions as polling, but without the need for an additional core.
AcknowledgementsI had a great time in graduate school. This was in large part due to the wonderful people that I was fortunate enough to interact with.
First and foremost, I cannot thank my advisors Greg Ganger and MikeReiter enough. I was lucky to have not one, but two advisors that cared about my development and research interests, always made time for me, and were always supportive. They taught me how to identify interesting problems, develop a solution, evaluate it, and clearly describe it. I enjoyed our interactions tremendously. I also owe all my knowledge of college basketball and football to them.My dissertation grew out of Garth Gibson's idea of running a file system in a virtual machine. I thank him for his guidance during this work. Orran Krieger had many useful insights, encouraging me to view this work as leveraging multicores and motivating virtual machine-based microkernels.I was fortunate to work with many great graduate students. Jay Wylie and Garth Goodson patiently explained distributed systems to me, and were wonderful mentors during my first two years. Jay continued informally mentoring even after finishing graduate school, for which I am very grateful.