/wpmfs-bench

The platform that evaluates WellPM.

Primary LanguageC++

Readme

1. 配置环境

首先最好确保当前操作系统的版本是 Unbuntu 16.04

1.1. 下载内核

本项目基于 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.2. 修改内核

在开发的过程中,出于两种需求: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

1.3. 安装内核

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

1.4. 模拟持久内存

我们需要预留一定持久内存用于挂载 WellPM。在较新的内核下可直接执行如下操作,而无需额外修改内核配置文件。

  • 预留 PM 地址空间;

    1. 预留多少?

      查询可得可用地址空间 0x0000000100000000-0x0000000c3fffffff,也就是 4G~49G。这里预留 16GB。

      dmesg | grep BIOS
    2. 怎么预留?

      编辑 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

2. 安装 WellPM-bench

2.1. 安装 Filebench

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 配置。

2.2. 下载 Whisper

Whisper 安装到 macro_bench/whisper 目录。

pwd # 当前目录为 wpmfs-bench
cd macro_bench
git clone --recursive https://github.com/swapnilh/whisper.git
Tip
运行脚本将自动安装。解决安装问题的方法参考了 魏博的笔记

2.3. 配置依赖项

sudo apt install python-numpy python-matplotlib -y

3. 运行 WellPM-bench

pwd # 当前目录为 wpmfs-bench
bash run.sh

执行的时候终端上会打印 benchmark 的 OPS,且执行完毕后 output 目录会生成:一张反映所有块写入次数的图。

注意时常清理 output 文件夹,体积很快就会膨胀起来。

4. 配置 WellPM

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 为底的幂)