使用 SPDK 创建高性能虚拟 NVMe(适用于开发测试)
1. 编译 SPDK
参考Ubuntu 20.04 上安装 SPDK-CSDN博客
2. 启动 SPDK NVMe-oF Target
sudo ./build/bin/nvmf_tgt &
3. 创建虚拟 NVMe 设备
# 配置RPC接口
sudo ./scripts/rpc.py nvmf_create_transport -t TCP
# 创建内存后端(1GB RAM磁盘)
sudo ./scripts/rpc.py bdev_malloc_create -b Malloc0 1024 512
# 创建命名空间
sudo ./scripts/rpc.py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001
# 添加命名空间到子系统
sudo ./scripts/rpc.py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 Malloc0
# 添加监听器
sudo ./scripts/rpc.py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t tcp -a 127.0.0.1 -s 4420
4. 客户端连接设备
# 安装 nvme-cli
sudo apt install nvme-cli
# 发现设备
sudo nvme discover -t tcp -a 127.0.0.1 -s 4420
# 连接设备
sudo nvme connect -t tcp -n nqn.2016-06.io.spdk:cnode1 -a 127.0.0.1 -s 4420
5. 验证设备
sudo nvme list
# 输出应显示 SPDK 控制器和命名空间
问题记录:
1.遇到 "Failed to open /dev/nvme-fabrics: No such file or directory" 错误时,通常是由于系统缺少必要的内核模块或配置。以下是分步解决方案:
检查并加载内核模块
-
确保
nvme-fabrics
模块已加载:sudo modprobe nvme-fabrics
-
检查模块是否加载成功:
lsmod | grep nvme_fabrics
若有输出(如
nvme_fabrics
),表示已加载。
验证内核支持
-
检查内核是否支持 NVMe over Fabrics:
grep CONFIG_NVME_FABRICS /boot/config-$(uname -r)
-
若输出
CONFIG_NVME_FABRICS=y
或=m
,表示支持。 -
若未设置或显示
=n
,需升级内核(至少 4.8+)。
-
检查设备文件
-
/dev/nvme-fabrics
通常由内核自动创建。如果缺失:-
尝试重新加载模块:
sudo rmmod nvme_fabrics && sudo modprobe nvme_fabrics
-
检查设备文件是否存在:
ls /dev/nvme-fabrics
-