Lune

OSDI2021顶会

GoJournal: a verified, concurrent, crash-safe journaling system

Tej Chajed, Joseph Tassarotti, Mark Theng, Ralf Jung, M. Frans Kaashoek, Nickolai Zeldovich

出版方
2021年份
31被引次数
18顶会引用

摘要

The main contribution of this paper is GoJournal, 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.

GoJournal is implemented in Go, and Perennial is implemented in the Coq proof assistant. While verifying GoJournal, we found one serious concurrency bug, even though GoJournal has many unit tests. We built a functional NFSv3 server, called GoNFS, to use GoJournal. Performance experiments show that GoNFS provides similar performance (e.g., at least 90% throughput across several benchmarks on an NVMe disk) to Linux's NFS server exporting an ext4 file system, suggesting that GoJournal is a competitive journaling system. We also verified a simple NFS server using GoJournal's specs, which confirms that they are helpful for application verification: a significant part of the proof doesn't have to consider concurrency and crashes. Method Description Spec func Begin() *Op Start operation §5.2 func (*Op) ReadBuf(addr Addr, sz uint64) *Buf Read a buffer §5.3 func (*Buf) SetDirty() Mark a buffer as modified §5.3 func (*Op) OverWrite(a Addr, sz uint64, data []byte) Write without reading §5.3 func (*Op) Commit(wait bool) bool Commit by appending to in-memory log. §5.6 If wait=true, also wait until changes are on disk. func Flush() bool Flush in-memory log func (*Lockmap) Acquire(i uint64) Acquire ith lock §5.4 func (*Lockmap) Release(i uint64) Release ith lock §5.4

问问这篇 Paper

智能体会读完全文。

Lune 把这篇 Paper 索引到了每一个公式,引用它的顶会 Paper 也一样。你提问,回答直接引用原文。

可以从这些问题问起

智能体调用

Luneget_paper_fulltext

在 Lune 里问

免费开始,无需绑卡

引用它的顶会 Paper18

问问它们各自怎么用它

它引用的顶会 Paper2

相关 Paper

黄昏的海面,两侧是细线勾勒的悬崖