ctFS: Replacing File Indexing with HW Memory Translation t/ Contiguous File Allocation @FAST22

文章目录[隐藏]

最近正好也在看CMU的745,又发现了一坨来自SNU的韩语讲解,最近又需要RIIR kernel memory和FS部分的代码,我感觉是个好好重新学习文件系统的好机会。(以及感觉PM的很多工作可以直接Migrate 到CXL上来(似乎MMU和DAX映射可以完全一模一样),看看有没有什么东西可以挖。

Background

indexing在splitFS和ext4-DAX的时间画的很多,尤其是SWE/Append。

ext4-DAX需要先得到index nodes(directory extent tree)再得到leaf nodes,在最后的extent index上才会做virtual address的MMU。这对PM来说是比较慢的过程

Insight

观察1: 我们可以linear mapping file,把file当byte addressable的inode,这样对file的读取只需要 start+offset(这样拿到MMU后的隔离似乎有点问题)
观察2:前半部分的directory extent tree(似乎是个红黑树)可以放在PM的MMU上来执行。

我们发现File 被实际映射到PM物理介质上的过程和在PM上Page Walk的过程类似。而且我们对pagetable的每4k做一次partition,可以完整的完成对文件的抽象。


在一个非flat的文件系统中,文件分为多层,但是每一层放稍微比上一层大的文件会产生极大的浪费,所以我们仍然需要维护partition头,其包含superblock, 和下一层的inode bitmap。


对于migration,我们通过一个系统调用来保证continuous memory和REDO LOG 保证的crash consistency。

可以显见在128MB aligh对齐64个PMD entries的时候会比32k PT entries快。

一个特殊情况是atomic write。其实就是要写的先写在后面再copy on write pswap回来。

Reference

  1. https://www.youtube.com/watch?v=pT46-RYOsmw&t=309s