使用 SPDK 创建高性能虚拟 NVMe(适用于开发测试)

使用 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