全部博文(35)
分类:
2010-06-20 11:14:33
这篇文章是FAST
2010上的Best
Paper,作者是威斯康星大学麦迪逊分校计算机系的博士三年级学生——Swaminathan Sundararaman, 是个印度阿三,他曾经在2009年的FAST上以第二作者的身份中过一篇Best Paper.
文章向读者介绍了Membrane, 一个可以“重新启动的”文件系统。我们知道了操作系统可以重新启动,很少会想到文件系统也可以重启。其实,这里指的文件系统的重新启动,是指定期给文件系统的元数据和数据做Checkpoint,然后再用一个进程操作回放机制,来回放某个检测点之后的进程的操作记录。从这个小细节可以看出,作者起的文章标题很巧妙,很吸引读者。
图1. Membrane 总体示意图
我们以图1为参考来说明Membrane的工作流程。
首先看到图1的中间部分,文件系统创造一个检测点之后,进程通过W0系统调用写文件“file”;W0成功写入文件,另外一个系统调用W1继续写“file”; 此时,W1的内容尚未写入文件,之上的文件系统忽然发生了崩溃。
为了让进程能够保持正确的读写语义,Membrane通过以下步骤来“重启”该文件系统:
1.
让W1系统调用回滚,并且暂停当前内核态正在运行的线程;
2.
清除文件系统内存当中的对象,并且从最近的一个检测点开始恢复;
3.
重放当前的程序已经发出,但是尚未作用于文件的操作(W1)。如此之后,一切照常进行。
这些功能都是作者在文件系统的异常处理里加了些少量代码而实现的。虽然在文件系统上建立检测点会给进程的读写操作带来开销,但是通过庞大的作者群的若干优化之后(例如基于COW的Checkpoint),性能的损失是处于一个可以接受的范围之内。
最后总结下Membrane的亮点:
1.
能够从文件系统的崩溃当中恢复;
2.
性能略微损失;
3.
对应用程序透明;
4.
对不同的文件系统(包括FAT32),此方法都适用,具有普遍性;
5.
文件系统的一致性不会收到破坏。