Award Abstract # 1563763
CSR: Medium: A High-Performance Certified File System and Applications

NSF Org: CNS
Division Of Computer and Network Systems
Awardee: MASSACHUSETTS INSTITUTE OF TECHNOLOGY
Initial Amendment Date: April 22, 2016
Latest Amendment Date: May 31, 2019
Award Number: 1563763
Award Instrument: Continuing Grant
Program Manager: Marilyn McClure
mmcclure@nsf.gov
 (703)292-5197
CNS
 Division Of Computer and Network Systems
CSE
 Direct For Computer & Info Scie & Enginr
Start Date: June 1, 2016
End Date: May 31, 2021 (Estimated)
Total Intended Award Amount: $900,000.00
Total Awarded Amount to Date: $900,000.00
Funds Obligated to Date: FY 2016 = $462,543.00
FY 2018 = $242,232.00

FY 2019 = $195,225.00
History of Investigator:
  • M. Frans  Kaashoek (Principal Investigator)
    kaashoek@lcs.mit.edu
  • Robert  Morris (Co-Principal Investigator)
  • Nickolai  Zeldovich (Co-Principal Investigator)
  • Adam  Chlipala (Co-Principal Investigator)
Awardee Sponsored Research Office: Massachusetts Institute of Technology
77 MASSACHUSETTS AVE
Cambridge
MA  US  02139-4301
(617)253-1000
Sponsor Congressional District: 07
Primary Place of Performance: Massachusetts Institute of Technology
MA  US  02139-4301
Primary Place of Performance
Congressional District:
07
Unique Entity Identifier (UEI):
Parent UEI:
NSF Program(s): CSR-Computer Systems Research
Primary Program Source: 040100 NSF RESEARCH & RELATED ACTIVIT
040100 NSF RESEARCH & RELATED ACTIVIT

040100 NSF RESEARCH & RELATED ACTIVIT
Program Reference Code(s): 7924
Program Element Code(s): 7354
Award Agency Code: 4900
Fund Agency Code: 4900
Assistance Listing Number(s): 47.070

ABSTRACT

Applications rely on file systems to store their data, but even carefully written applications and file systems may have bugs that cause data loss, especially in the face of system crashes (e.g., due to power failure). Even in mature file systems such as ext4, bugs that can lead to data loss are not uncommon. Application developers also misuse file-system APIs in ways that lead to user data being lost after a crash.

Formal verification is a good way to prove the absence of bugs in a file system. By considering all possible operations and crashes, verification can ensure that the file system is bug-free. The goal of this proposal is to develop a certified high-performance file system, VCFS (Verified Concurrent File System). The investigators aim to make VCFS's performance good enough to support demanding applications while guaranteeing crash safety. VCFS and its applications will come with mathematical proofs that their implementations meet their specifications under any sequences of crashes.

The main outcomes of this research will be as follows: (1) A logic system, CFSL (Concurrent File System Logic), that allows reasoning about parallelism and crashes. (2) A precise specification of the POSIX API under concurrency and crashes. (3) The VCFS file system, for which we will prove that its implementation meets our POSIX specification under crashes and concurrency. VCFS will include sophisticated performance optimizations. (4) A certified high-performance mail server, as a test case of using VCFS and its formally specified APIs to prove application-level properties (in this case, that the server will not lose acknowledged messages).

CFSL will enable developers to reason about concurrency and crashes in the context of file systems. The POSIX specification, along with VCFS, will help programmers develop applications that are both high-performance and safe under computer crashes. The investigators will use their understanding of writing certified software to create a new class on certified software.

PUBLICATIONS PRODUCED AS A RESULT OF THIS RESEARCH

Note:  When clicking on a Digital Object Identifier (DOI) number, you will be taken to an external site maintained by the publisher. Some full text articles may not yet be available without a charge during the embargo (administrative interval).

Some links on this page may take you to non-federal websites. Their policies may differ from this site.

Haogang Chen, Alex Konradi, Stephanie Wang, Tej Chajed, Atalay Ileri, Adam Chlipala, M. Frans Kaashoek, Nickolai Zeldovich "Using the metadata-prefix specification to verify a high-performance crash-safe file system" SOSP 2017 , 2017
Atalay Ileri, Tej Chajed, Adam Chlipala, M. Frans Kaashoek, and Nickolai Zeldovich. "Proving confidentiality in a file system using DiskSec" OSDI 2018 , 2018
Tej Chajed and M. Frans Kaashoek and Butler Lampson and Nickolai Zeldovich "Verifying concurrent software using movers in CSPEC" OSDI 2018 , 2018
Tej Chajed and Joseph Tassarotti and M. Frans Kaashoek and Nickolai Zeldovich "Verifying Concurrent, Crash-safe Systems with Perennial" Proceedings of the 27th ACM Symposium on Operating Systems Principles (SOSP 2019) , 2019
Tej Chajed and Joseph Tassarotti and M. Frans Kaashoek and Nickolai Zeldovich "Argosy: Verifying Layered Storage Systems with Recovery Refinement" PLDI 2019 , 2019
Chajed, Tej and Tassarotti, Joseph and Kaashoek, Frans and Zeldovich, Nickolai "Verifying concurrent, crash-safe systems with Perennial" Proceedings of the 27th ACM Symposium on Operating Systems Principles (SOSP) , 2019 10.1145/3341301.3359632 Citation Details
Chajed, Tej and Tassarotti, Joseph and Kaashoek, M. Frans and Zeldovich, Nickolai "Argosy: verifying layered storage systems with recovery refinement" Proceedings of the 40th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ?19) , 2019 10.1145/3314221.3314585 Citation Details
Ileri, Atalay and Chajed, Tej and Chlipala, Adam and Kaashoek, Frans and Zeldovich, Nickolai "Proving confidentiality in a file system using DISKSEC" Proceedings of the 13th USENIX Symposium on Operating Systems Design and Implementation (OSDI) , 2018 Citation Details
Chajed, Tej and Tassarotti, Joseph and Theng, Mark and Jung, Ralf and Kaashoek, M. Frans and Zeldovich, Nickolai "GoJournal: a verified, concurrent, crash-safe journaling system" Proceedings of the 15th USENIX Symposium on Operating Systems Design and Implementation , 2021 Citation Details

PROJECT OUTCOMES REPORT

Disclaimer

This Project Outcomes Report for the General Public is displayed verbatim as submitted by the Principal Investigator (PI) for this award. Any opinions, findings, and conclusions or recommendations expressed in this Report are those of the PI and do not necessarily reflect the views of the National Science Foundation; NSF has not approved or endorsed its content.

Applications rely on file systems to store their data, but even carefully written applications and file systems may have bugs that cause data loss, especially in the face of system crashes (e.g., due to power failure).  Even in mature file systems such as Linux ext4, bugs that can lead to data loss are not uncommon.  Application developers also misuse file-system APIs in ways that lead to user data being lost after a crash.


Many of these bugs are subtle: the system works in most cases, but an inopportune combination of system calls and crashes can trigger a bug.  A common approach for dealing with these bugs is to use bug-finding tools, model checking, testing, and so on to find bugs and then fix them.  While these approaches are effective at finding some bugs, they cannot prove the absence of bugs in the resulting systems.


Formal verification is a good way to prove the absence of bugs in a file system.  By considering all possible operations and crashes, verification can ensure that the file system is bug-free.  Our earlier work on FSCQ [Chen et al. 2015] shows that it is possible to build a certified system (i.e., one with a machine-checkable proof that its implementation meets its specification).  However, there is large gap between FSCQ and a practical certified file system, owing to FSCQ's poor performance.


This project explored several techniques to improve performance of storage systems, often requiring a new verification approach:


- Performance: Delayed writes. DFSCQ extends FSCQ with delayed writes. DFSCQ provides a precise specification for fsync and fdatasync, which allow applications to achieve high performance and crash safety.  DFSCQ's specification captures the behavior of sophisticated optimizations, including log-bypass writes, and DFSCQ's proof rules out some of the common bugs in file-system implementations despite the complex optimizations.  An evaluation shows that DFSCQ achieves 103 MB/s on large file writes to an SSD and durably creates small files at a rate of 1,618 files per second.  This is slower than Linux ext4 (which achieves 295 MB/s for large file writes and 4,977 files/s for small file creation) but much faster than two previous verified file systems, Yggdrasil and FSCQ.


- Verification: layered recovery.  Argosy is a framework for machine-checked proofs of storage systems that supports layered recovery implementations with modular proofs.  Reasoning about layered recovery procedures is especially challenging because the system can crash in the middle of a more abstract layer's recovery procedure and must start over with the lowest-level recovery procedure.  Argosy introduces recovery refinement, a set of conditions that ensure proper implementation of an interface with a recovery procedure. Argosy includes a proof that recovery refinements compose, using Kleene algebra for concise definitions and metatheory.  We implemented Crash Hoare Logic, the program logic used by DFSCQ, to prove recovery refinement, and demonstrated the whole system by verifying an example of layered recovery featuring a write-ahead log running on top of a disk replication system.


- Performance: From Haskell to Go. Due to the rigidity of Coq's extraction and the overhead of Haskell, the resulting code’s CPU performance can suffer, with limited opportunity for optimization. To address this challenge, we built Goose, a subset of Go and a translator from that subset to a model in Perennial (see below) with supports for reasoning about Go threads, data structures, and file-system primitives.


- Performance and verification: Concurrency with Perennial.  Perennial is a framework for verifying concurrent, crash-safe systems.  Perennial extends the Iris concurrency framework with three techniques to enable crash-safety reasoning: recovery leases, recovery helping, and versioned memory.  We implemented and verified a crash-safe, concurrent mail server, Mailboat, using Perennial and Goose that achieves speedup on multiple cores.


- Performance and verification: Concurrency with GoJournal and Perennial2.  GoJournal is a verified, concurrent journaling system that provides atomicity for storage applications, together with Perennial 2.0, a framework for formally specifying and verifying concurrent crash-safe systems. GoJournal’s goal is to bring the advantages of journaling for code to specs and proofs.  Perennial 2.0 makes this possible by introducing several techniques to formalize GoJournal’s specification and to manage the complexity in the proof of GoJournal’s implementation. Lifting predicates and crash framing make the specification easy to use for developers, and logically atomic crash specifications allow for modular reasoning in GoJournal, making the proof tractable despite complex concurrency and crash interleavings.  Performance experiments with an unverified NFS file system using GoJournal show similar performance (e.g., 90–95% throughput creating small files on an in-memory disk) to Linux’s NFSserver exporting an ext4 file system, suggesting that GoJournal is a competitive journaling system.


We incorporated ideas from this research in a new class on Principles of Computer Systems (https://6826.csail.mit.edu/2020/), which we taught several times during the lifetime of the project.


Last Modified: 07/01/2021
Modified by: M. Frans Kaashoek

Please report errors in award information by writing to: awardsearch@nsf.gov.

Print this page

Back to Top of page