这是17年SOSP上的一篇文章,作为第一篇用NVM做混合存储系统的,它影响力特别大
它的代码也是开源的
有iangneal版本和 原版
本以为这么多年过去,那么多人试过,这strata跑起来应该还挺顺手,结果…
我一脚一个泥坑,之中的辛酸就不提了
我一开始用的iangneal版本,因为他拿strata做实验发了21年fast,把strata适配到了真实NVM设备且适配了新版本的内核以及gcc环境
然而,当我满心欢喜的编译完内核,编译完strata,才发现:
这个strata缺少一个头文件!
因为缺少这个.h文件,导致后边编译无法通过,然而github上的确没有该文件
怀疑是作者忘记git add了
因为时间久远,我已经不记得具体的名字,也懒得发邮件问作者了
之后我直接选择的原版
虽然说人家strata的README里面已经说了按它来获得内核.config
文件,但是架不住我有一些其它的操作…
我用的ubuntu 16.04 内核4.4 ,在进行上图的步骤前,我来了一下make oldconfig
然后一路回车,再编译
嗯,之后strata编译自然是报错,毕竟几个内核选项没开嘛
所以这里大家千万不要像我这样做多余的事,建议先看看kernel/kbuild
文件夹下有无.config
文件,有的话删了再做这些
这里提醒大家不要用自带内核版本过高的Linux!!!
不然换低版本内核换不了
像我之前用的5.4内核ubuntu换4.8没换上,白白浪费时间
Running Strata的step 3只有简单的一句话:重新编译LibFS和KernFS
底下有个大大的TODO
所以说,这具体是要干些啥????♂️♂️♂️♂️
github上之前也有人吐槽没有详细文档的,貌似没人鸟他
迷茫的我直接跳过没管它,往下做实验
接着就遇到了和之前的一位仁兄同样的问题:
在step 5跑起来的时候报错:cannot open the storage file
所以这是啥意思嘛♂️
看着是我第3步没设置好
这第5步就是初始化各个设备的文件系统
其实我还挺疑惑,这mlfs咋知道我设备在哪里?就这么用几个数字能mkfs了?
所以说,应该是在第三步设置好参数
在我不懈努力下,终于还原了这缺失的step 3
strata使用两个PM设备,一个是dax0.0作为共享区域,一个dax1.0作为日志区
没有ssd和hdd可以在相应区域填0
这里单位是GB
比如我
./utils/change_dev_size.py 8 128 0 3
就是用128Gssd,无hdd,8G共享区域,3G日志区PM
在Running Strata的 Step 2中,会将pmem映射变成dax映射
在Running Strata的 Step 4中,会将nvme映射变成uio映射(因为是用户态操作)
所以只需要把相应位置代码改成对应设备即可
在strata/libfs/src/storage/storage.c
文件中,将ssd设备路径改为/dev/uio0
即可
即重复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
然后他会不断运行,再开个终端进行第7步
NVM设备的配置:
共享区域建议>=8G
日志区建议>=3G
我设置小了遇到过mmap invalid argument
报错
别忘了一定要与你的真实pmem大小相等!!