1拿诸、背景
- spdk :是一個(gè)基于dpdk的存儲(chǔ)開發(fā)kit入录,這里主要利用了它提供的用戶態(tài)nvme driver —— spdk鏈接
- fio: io測試工具,提供豐富的參數(shù)佳镜,可以構(gòu)造復(fù)雜的io pattern
fio的測試對(duì)象可以是塊設(shè)備僚稿、文件等,在spdk的使用過程中會(huì)unbind默認(rèn)的nvme driver蟀伸,所以在系統(tǒng)中是看不到nvme塊設(shè)備的蚀同,在spdk中可以通過fio_plugin的方式缅刽,將spdk的用戶態(tài)driver部分的io功能打包成一個(gè)ioengine提供給fio使用,可以綜合spdk的高性能和fio提供的復(fù)雜場景蠢络。
2衰猛、使用步驟
2.1下載dpdk、spdk刹孔、fio并解壓
用最新的版本即可
2.2編譯fio
cd fio_dir
./configure
make&&make install
2.3編譯dpdk
vim <dpdk_dir>/config/defconfig_x86_64-native-linuxapp-gcc
#增加一行
EXTRA_CFLAGS=-fPIC
#回到<dpdk_dir>編譯dpdk
make install T=x86_64-native-linuxapp-gcc DESTDIR=.
2.4編譯spdk
cd <spdk_dir>
./configure --with-fio=/root/Downloads/fio-fio-3.3/ --with-dpdk=/root/Downloads/dpdk-17.11/x86_64-native-linuxapp-gcc
#修改<spdk_dir>/CONFIG文件
CONFIG_FIO_PLUGIN=y
FIO_SOURCE_DIR=fio的目錄
#編譯spdk
make DPDK_DIR=/root/Downloads/dpdk-17.11/x86_64-native-linuxapp-gcc
2.5unbind nvme driver替換為vfio
cd <spdk_dir>/scripts
sh setup.sh
2.6使用fio執(zhí)行測試
LD_PRELOAD=/root/Downloads/spdk-18.01/examples/nvme/fio_plugin/fio_plugin /root/Downloads/fio-fio-3.3/fio example_config.fio
2.7 jobfile的例子
這個(gè)jobfile是spdk中提供的例子
[global]
ioengine=spdk
thread=1
group_reporting=1
direct=1
verify=0
time_based=1
ramp_time=0
norandommap=1
runtime=60
iodepth=32
rw=randwrite
bs=3000b
[test]
numjobs=1
filename=trtype=PCIe traddr=0000.01.00.0 ns=1
3啡省、注意
- 由于spdk已經(jīng)提前從系統(tǒng)中unbind了nvme設(shè)備,所以/dev/下是沒有nvme設(shè)備的髓霞,必須指定到具體的pcie的接口上卦睹,fio的jobfile中的filename需要使用key=val的模式(這個(gè)地方有點(diǎn)怪異)
- trttype:有pcie和rdma兩種
- traddr:pcie的“domain:bus:device:function”格式,可以用lspci命令查看對(duì)應(yīng)的nvme設(shè)備在那個(gè)總線上方库,一般單臺(tái)機(jī)器的domain都是0000
- ns:namespace的id
- spdk做性能測試時(shí)结序,對(duì)每個(gè)namespace會(huì)綁定一個(gè)lcore,所以fio的thread只能等于1
- fio測試random的io時(shí)纵潦,需要設(shè)置norandommap=1 徐鹤,防止fio的random map影響性能