Strata: A Cross Media File System 踩坑实录

Strata: A Cross Media File System

这是17年SOSP上的一篇文章,作为第一篇用NVM做混合存储系统的,它影响力特别大
它的代码也是开源的
有iangneal版本和 原版
本以为这么多年过去,那么多人试过,这strata跑起来应该还挺顺手,结果…
我一脚一个泥坑,之中的辛酸就不提了

坑1:哪个版本?

我一开始用的iangneal版本,因为他拿strata做实验发了21年fast,把strata适配到了真实NVM设备且适配了新版本的内核以及gcc环境
然而,当我满心欢喜的编译完内核,编译完strata,才发现:

这个strata缺少一个头文件!
因为缺少这个.h文件,导致后边编译无法通过,然而github上的确没有该文件
怀疑是作者忘记git add了

因为时间久远,我已经不记得具体的名字,也懒得发邮件问作者了

之后我直接选择的原版

坑2:内核编译

虽然说人家strata的README里面已经说了按它来获得内核.config文件,但是架不住我有一些其它的操作…
Strata: A Cross Media File System 踩坑实录_第1张图片
我用的ubuntu 16.04 内核4.4 ,在进行上图的步骤前,我来了一下make oldconfig 然后一路回车,再编译
嗯,之后strata编译自然是报错,毕竟几个内核选项没开嘛
所以这里大家千万不要像我这样做多余的事,建议先看看kernel/kbuild文件夹下有无.config文件,有的话删了再做这些

这里提醒大家不要用自带内核版本过高的Linux!!!
不然换低版本内核换不了
像我之前用的5.4内核ubuntu换4.8没换上,白白浪费时间

坑3: Strata 指导不全

Running Strata的step 3只有简单的一句话:重新编译LibFS和KernFS
底下有个大大的TODO
所以说,这具体是要干些啥????‍♂️‍♂️‍♂️‍♂️
github上之前也有人吐槽没有详细文档的,貌似没人鸟他
Strata: A Cross Media File System 踩坑实录_第2张图片
迷茫的我直接跳过没管它,往下做实验
接着就遇到了和之前的一位仁兄同样的问题:
Strata: A Cross Media File System 踩坑实录_第3张图片
在step 5跑起来的时候报错:cannot open the storage file
Strata: A Cross Media File System 踩坑实录_第4张图片
所以这是啥意思嘛‍♂️
看着是我第3步没设置好
这第5步就是初始化各个设备的文件系统
其实我还挺疑惑,这mlfs咋知道我设备在哪里?就这么用几个数字能mkfs了?
所以说,应该是在第三步设置好参数

在我不懈努力下,终于还原了这缺失的step 3

完整的第3步

1. 在最初设置存储设备容量时,应该使得所有的设备数字一一对应

Strata: A Cross Media File System 踩坑实录_第5张图片
strata使用两个PM设备,一个是dax0.0作为共享区域,一个dax1.0作为日志区
没有ssd和hdd可以在相应区域填0
这里单位是GB
比如我

./utils/change_dev_size.py 8 128 0 3

就是用128Gssd,无hdd,8G共享区域,3G日志区PM

2. 设置设备对应位置

在Running Strata的 Step 2中,会将pmem映射变成dax映射
Strata: A Cross Media File System 踩坑实录_第6张图片
在Running Strata的 Step 4中,会将nvme映射变成uio映射(因为是用户态操作)
在这里插入图片描述
所以只需要把相应位置代码改成对应设备即可

strata/libfs/src/storage/storage.c文件中,将ssd设备路径改为/dev/uio0 即可
Strata: A Cross Media File System 踩坑实录_第7张图片

3. 然后重新编译LibFS与KernFS

即重复Building Strata的第4、5步

cd libfs
make
cd kernfs
make
cd tests
make

完成第3步,之后第5步就比较顺利了,我这里不进行3,因为没有hdd

sudo ./bin/mkfs.mlfs 1
sudo ./bin/mkfs.mlfs 2
sudo ./bin/mkfs.mlfs 4

跑起来

进行第6步,先启动KernFS
Strata: A Cross Media File System 踩坑实录_第8张图片

然后他会不断运行,再开个终端进行第7步

Strata: A Cross Media File System 踩坑实录_第9张图片
这就成功跑起来了!

其它说明

NVM设备的配置:
共享区域建议>=8G
日志区建议>=3G
我设置小了遇到过mmap invalid argument报错
别忘了一定要与你的真实pmem大小相等!!

你可能感兴趣的:(小技巧,ubuntu,linux,github,开源软件)