1 安装 FIO
为了便于对 SPDK 进行测试,需要集成 FIO。根据文档,需要先手动编译安装 FIO
1.1 下载 FIO 源码
1
| git clone https://github.com/axboe/fio
|
1.2 编译安装
1 2 3
| ./configure make make install
|
2 配置 SPDK
2.1 下载 SPDK 源码
1 2 3
| git clone https://github.com/spdk/spdk cd spdk git submodule update --init
|
2.2 编译 SPDK
安装依赖
编译
1 2
| ./configure --with-fio=/path/to/fio make
|
2.3 修改 FEMU(Optional)
如果使用 FEMU 模拟固态盘,由于 FEMU 中对 NVMe 协议的部分 Admin 命令没有进行实现,需要自行完善。以下方法仅用于暂时屏蔽问题。
1 2 3 4 5 6 7 8 9 10 11
| --- a/hw/femu/nvme-admin.c +++ b/hw/femu/nvme-admin.c @@ -999,6 +999,8 @@ static uint16_t nvme_admin_cmd(FemuCtrl *n, NvmeCmd *cmd, NvmeCqe *cqe) case NVME_ADM_CMD_SET_DB_MEMORY: femu_debug("admin cmd,set_db_memory\n"); return nvme_set_db_memory(n, cmd); + case NVME_ADM_CMD_ASYNC_EV_REQ: + return NVME_SUCCESS; case NVME_ADM_CMD_ACTIVATE_FW: case NVME_ADM_CMD_DOWNLOAD_FW: case NVME_ADM_CMD_SECURITY_SEND:
|
2.4 运行
2.4.1 设备初始化
1 2
| cd /path/to/spdk sudo scripts/setup.sh
|
2.4.2 生成配置文件
1
| sudo scripts/gen_nvme.sh --json-with-subsystems > nvme.json
|
以具有两个 NVMe 设备的系统为例,生成结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| { "subsystems": [ { "subsystem": "bdev", "config": [ { "method": "bdev_nvme_attach_controller", "params": { "trtype": "PCIe", "name": "Nvme0", "traddr": "0000:00:06.0" } }, { "method": "bdev_nvme_attach_controller", "params": { "trtype": "PCIe", "name": "Nvme1", "traddr": "0000:00:07.0" } } ] } ] }
|
2.4.3 启动 spdk
方法一(指定配置文件启动)
1 2 3
| cd /path/to/spdk sudo scripts/setup.sh sudo build/bin/spdk_tgt --json nvme.json
|
方法二(RPC 命令创建设备)
1 2 3 4
| cd /path/to/spdk sudo scripts/setup.sh sudo build/bin/spdk_tgt
|
1 2 3
|
sudo scripts/rpc.py bdev_nvme_attach_controller -b nvme1 -a 00:06.0 -t pcie
|
如果需要帮助信息,可以通过-h
参数来查看
sudo scripts/rpc.py -h
sudo scripts/rpc.py bdev_nvme_attach_controller -h
检查设备是否创建成功,可使用 SPDK 提供的 client 程序进行查看:
1
| sudo scripts/spdkcli.py ls
|
更多工具,可查看 SPDK 项目中的 scripts 子目录