Strata: A Cross Media File System
Introduction
现代应用对于性能和功能的要求已经远远超过了传统的文件系统的舒适区。
- 大容量应用
- 小的随机I/O访问频繁
- 低延迟的性能
- 内核必须参与元数据的更新
同时,目前存在非常多的存储介质HDD、SSD、PM、DRAM。而综合性能以及容量的考量,在计算机中混用这些介质成为一个好的选择。
Motivation
- 存储介质的多样为混合内存的架构提供了可能,但是现有的文件系统都是针对某种特定的介质设计的,F2FS之于SSD、NOVA之于NVM、EXT4之于HDD。
- 现有的文件系统为了满足应用程序对于崩溃一致性的要求难以满足,程序得牺牲一定的正确性来获得性能。
Design
strata的设计主要分为两部分,一个是用户态拦截系统调用的库LibFS,另一个则是在内核态处理共享数据的KernelFS。
LibFS
Strata拦截系统调用到用户态的库处理,兼容POSIX语义,这样可以降低内核态的开销。在应用程序进行写操作时,转化为对NVM直写的log,然后被kernelFS digest后才正式地写,这样对小数据写、一致性都有好处。但是不利于读请求,为了加快读操作的处理时间,LibFS将SSD和HDD的数据缓存到DRAM上来加快读取。
KernelFS
KernelFS 主要负责多介质的共享数据处理,KernelFS将LibFS中的log digest到内核态,维护两个LRU list,分别对应NVM SSD的log迁移和SSD与HDD的数据迁移,并转化为每个索引节点的extern tree的形式。
evaluation
使用filebench测试吞吐量结果如下
参考文章
https://www.jianshu.com/p/001fade3cc01
https://nan01ab.github.io/2018/08/Strata.html