Push-Button Verification of File Systems
via Crash Refinement Helgi Sigurbjarnarson, James Bornholt, Emina Torlak, Xi Wang
University of Washington
1 / 24
Push-Button Verification of File Systems via Crash Refinement Helgi - - PowerPoint PPT Presentation
Push-Button Verification of File Systems via Crash Refinement Helgi Sigurbjarnarson , James Bornholt, Emina Torlak, Xi Wang University of Washington 1 / 24 File systems are hard to get right Complex hierarchical on-disk data structures
University of Washington
1 / 24
2 / 24
File System Developers
3 / 24
◮ BilbyFS [ASPLOS 2016] ◮ FSCQ [SOSP 2015]
4 / 24
5 / 24
◮ Needs to capture crash & recovery ◮ Needs to be automatically verifiable
◮ Disks are large ◮ Many execution paths ◮ Non-determinism
◮ eXplode [OSDI ’06], EXE [CCS ’06] ◮ Useful, but incomplete 6 / 24
◮ A new definition of file-system correctness ◮ Enable modularity to scale verification
◮ Similar to ext3 and xv6, but guarantees
7 / 24
specification implementation consistency invariants verifier compiler visualizer C code for file system counterexample fail pass
8 / 24
specification implementation consistency invariants verifier compiler visualizer C code for file system counterexample fail pass
8 / 24
specification implementation consistency invariants verifier compiler visualizer C code for file system counterexample fail pass
8 / 24
specification implementation consistency invariants verifier compiler visualizer C code for file system counterexample fail pass
8 / 24
specification implementation consistency invariants verifier compiler visualizer C code for file system counterexample fail pass
8 / 24
specification implementation consistency invariants verifier compiler visualizer C code for file system counterexample fail pass
8 / 24
specification implementation consistency invariants verifier compiler visualizer C code for file system counterexample fail pass
8 / 24
◮ No concurrency ◮ Unverified Python to C compiler and FUSE 9 / 24
10 / 24
1
2
11 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings 12 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
12 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
12 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
12 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
12 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
12 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
12 / 24
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
◮ A set of boolean variables ◮ Captures crashes and disk reorderings
12 / 24
1 Augment each op in FS with an explicit crash
2 For each op ∈ FS, prove:
13 / 24
1 Augment each op in FS with an explicit crash
2 For each op ∈ FS, prove:
13 / 24
1 Augment each op in FS with an explicit crash
2 For each op ∈ FS, prove:
13 / 24
◮ Verify a simple layout first (ex. one inode per block) ◮ Prove a separate crash-refinement for efficient layout
14 / 24
15 / 24
15 / 24
regular files, symbolic links, and directories Yxv6 files inodes Yxv6 inodes transactional disk write-ahead logging disk specification implementation Crash refinement Crash refinement Crash refinement
16 / 24
◮ Yxv6+sync: similar to xv6, FSCQ and ext4+sync ◮ Yxv6+group_commit: an optimized Yxv6+sync
17 / 24
1 How long does it take to verify? 2 Is the implementation actually correct? 3 What is the development effort for Yxv6? 4 Is the performance of Yxv6 reasonable? 18 / 24
19 / 24
◮ Except for incomplete features (ex. hard links, acl)
20 / 24
21 / 24
◮ 3–150× faster than ext4+sync ◮ Within 10× of ext4+default 0.001 0.01 0.1 1 10 100 1000 Make Bash Mailbench Running time in seconds fscq ext4+sync yxv6+sync 22 / 24
◮ 3–150× faster than ext4+sync ◮ Within 10× of ext4+default 0.001 0.01 0.1 1 10 100 1000 Make Bash Mailbench Running time in seconds fscq ext4+sync yxv6+sync yxv6+group_commit ext4+default 22 / 24
23 / 24
◮ Larger log, longer verification time. ◮ 1.6 hours using 24 cores 23 / 24
◮ No manual proofs on implementation ◮ Generate test-cases for bugs
24 / 24