预备知识
形式化背景(hoare logic、separation logic等),文件系统(inode,disk block等)
介绍
DFSCQ是在FSCQ基础上进一步的工作,FSCQ是用coq形式化验证后拥有crash-safe属性的串行文件系统,FSCQ对disk进行了建模,用coq规定了disk的行为,同时提出了crash hoare logic(CHL)这个能证明crash-safe的逻辑规则。DFSCQ在FSCQ的基础上,为应用额外提供了fsync和fdatasync两个接口,这两个接口通过batch data flush的方式提高了程序性能。
简而言之就是为了提高性能,需要额外证两个接口fsync和fdatasync,导致建模变复杂了,证明变麻烦了。
当然作者没有去证明ext4的正确性,而是自己写了一个DFSCQ,用coq证明其正确性,用coq生成haskell运行,并且DFSCQ是一个串行的文件系统,不支持并行,这两点成为了这篇论文的limitation。
Why fsync and fdatasync?
为什么我们要这两个接口呢,先介绍一下这两个接口分别是什么。
fsync和fdatasync都是文件系统提供的接口,fdatasync将文件的data部分刷入disk之后返回(保证返回后data部分数据不会因为crash丢失),fsync将文件的data与metadata部分都刷入disk。这两个接口是为了实现文件系统的高性能优化所准备的。
其中最核心的两个优化是:
- batch syscall,用log的方式,打包syscall并执行,减少I/O&#x