首先最好确保当前操作系统的版本是 Unbuntu 16.04。
本项目基于 Linux v4.19.49 开发。
pwd # 当前目录为 wpmfs-bench
wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.49.tar.gz
tar -xvzf linux-4.19.49.tar.gz
在开发的过程中,出于两种需求:1)使得 WellPM 能够利用内核中的部分函数;2)使得内核能够处理 WellPM 引入的新型页错误,我们对内核做了一定修改。
pwd # 当前目录为 wpmfs-bench
patch -Np0 < tools/patch/dax.c.patch
patch -Np0 < tools/patch/fault.c.patch
patch -Np0 < tools/patch/vmalloc.c.patch
pwd # 当前目录为 wpmfs-bench
cd linux-4.19.49
sudo apt install build-essential libncurses5-dev bison flex \
openssl libssl-dev libelf-dev -y
make menuconfig # 采用默认配置即可
make vmlinux -j$(cat /proc/cpuinfo | grep "processor" | wc -l) # 约消耗存储 3GB
make modules -j$(cat /proc/cpuinfo | grep "processor" | wc -l) # 约消耗存储 12GB
make bzImage # 同上两个一起相当于 make 或 make all
sudo make modules_install
sudo make install
sudo update-grub
sudo reboot
我们需要预留一定持久内存用于挂载 WellPM。在较新的内核下可直接执行如下操作,而无需额外修改内核配置文件。
-
预留 PM 地址空间;
-
预留多少?
查询可得可用地址空间
0x0000000100000000-0x0000000c3fffffff
,也就是 4G~49G。这里预留 16GB。dmesg | grep BIOS
-
怎么预留?
编辑 GRUB,使启动内核时使用指定内核命令行参数「memmap=16G!4G」从 4G 开始的位置预留 16GB。
# 编辑 GRUB 配置,修改成「GRUB_CMDLINE_LINUX="memmap=16G!4G"」 sudo gedit /etc/default/grub # 更新 GRUB 引导程序,可能不是 grub2 而是 grub sudo grub-mkconfig -o /boot/grub/grub.cfg # 重启,使用最新的引导程序进入系统 sudo reboot # 查看 user-defined physical RAM map dmesg | grep user
-
将 Filebench 安装到 macro_bench/filebench
目录。
pwd # 当前目录为 wpmfs-bench
cd macro_bench
git clone https://github.com/filebench/filebench
cd filebench
sudo apt install libtool automake -y
libtoolize
aclocal
autoheader
automake --add-missing
autoconf
./configure
make
sudo make install
INFO: 在执行后续谈到的 bash run.sh
之后,wpmfs-bench/macro_bench/filebench_selected
目录将放着所有选中 filebench 的配置文件,直接修改其中的文件以修改 bench 配置。
pwd # 当前目录为 wpmfs-bench
bash run.sh
执行的时候终端上会打印 benchmark 的 OPS,且执行完毕后 output 目录会生成:一张反映所有块写入次数的图。
注意时常清理 output 文件夹,体积很快就会膨胀起来。
WellPM 目前提供了一些配置项。目前配置仅能通过直接修改 wpmfs/scripts/config.sh
中的变量进行配置。
对配置项的解释如下:
-
CONFIG_PATH_PMEM_DEV
模拟的持久内存
-
CONFIG_FS_INIT_HARD
硬启动方式挂载
-
CONFIG_FS_DBGMASK
开启调试项
-
CONFIG_FS_TIMING
统计关键功能的执行时间
-
CONFIG_FS_ENABLE_TRACKING
开启写追踪
-
CONFIG_FS_ENABLE_VMAP
将部分内存映射到 vmalloc space
-
CONFIG_FS_ALLOCATOR
选择分配器
-
CONFIG_FS_WL_SWITCH
选择损耗均衡功能(0 关闭)
-
CONFIG_FS_INT_THRES
页迁移阈值(以 2 为底的幂)
-
CONFIG_FS_CELL_ENDUR
单元寿命(以 2 为底的幂)