如何使用三星 PM1733/1735 NVMe SSD 设置 SR-IOV

Posted

技术标签:

【中文标题】如何使用三星 PM1733/1735 NVMe SSD 设置 SR-IOV【英文标题】:How to setup SR-IOV with Samsung PM1733/1735 NVMe SSD 【发布时间】:2021-03-28 18:00:47 【问题描述】:

三星 PM1733/1735 NVMe SSD 声明支持 SR-IOV。我希望用 PM1735 SSD 搭建一个 NVMe SR-IOV 环境。我的 SSD 的开发描述是 /dev/nvme1。

但是,我尝试使用类似的命令 echo 4 > /sys/class/nvme/nvme1/device/sriov_numvfs.

dmesg 信息包含该信息

[ 1239.732278] nvme nvme2: pci function 0000:86:00.1
[ 1239.732359] nvme 0000:86:00.1: enabling device (0000 -> 0002)
[ 1239.732365] pci 0000:86:00.2: [144d:a824] type 00 class 0x010802
[ 1239.733053] iommu: Adding device 0000:86:00.2 to group 164
[ 1239.733402] nvme nvme3: pci function 0000:86:00.2
[ 1239.733473] pci 0000:86:00.3: [144d:a824] type 00 class 0x010802
[ 1239.733477] nvme 0000:86:00.2: enabling device (0000 -> 0002)
[ 1239.734117] iommu: Adding device 0000:86:00.3 to group 165
[ 1239.734485] nvme nvme4: pci function 0000:86:00.3
[ 1239.734557] pci 0000:86:00.4: [144d:a824] type 00 class 0x010802
[ 1239.734782] nvme 0000:86:00.3: enabling device (0000 -> 0002)
[ 1239.735066] iommu: Adding device 0000:86:00.4 to group 166
[ 1239.735352] nvme nvme5: pci function 0000:86:00.4
[ 1239.735631] nvme 0000:86:00.4: enabling device (0000 -> 0002)
[ 1270.289730] nvme nvme2: Device not ready; aborting initialisation
[ 1270.289794] nvme nvme2: Removing after probe failure status: -19
[ 1270.293724] nvme nvme4: Device not ready; aborting initialisation
[ 1270.293727] nvme nvme5: Device not ready; aborting initialisation
[ 1270.293732] nvme nvme5: Removing after probe failure status: -19
[ 1270.293783] nvme nvme4: Removing after probe failure status: -19
[ 1270.297647] nvme nvme3: Device not ready; aborting initialisation
[ 1270.297703] nvme nvme3: Removing after probe failure status: -19

lspci | grep Non 可以找到

86:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
86:00.1 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
86:00.2 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
86:00.3 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824
86:00.4 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a824

是否正确创建了 VF?

另一个问题是如何将命名空间与 VF 绑定。我使用nvme-cli/dev/nvme 创建命名空间,但是如何将这些命名空间与 VF 绑定?

【问题讨论】:

【参考方案1】:

使用 nvme cli 命令 nvme virt-mgmt 分配 VQ 和 VI 并启用该控制器并将该 vf 导出到 vm。

示例命令 nvme list-secondary /dev/nvme1n1 --> 所有二级控制器列表的输出

nvme virt-mgmt /dev/nvme1n1 -c 1 -r 0 -n 2 --> 为辅助控制器 1 分配 2 个 VQ

nvme virt-mgmt /dev/nvme1n1 -c 1 -r 1 -n 2 --> 为辅助控制器 1 分配 2 个 VI

nvme virt-mgmt /dev/nvme1n1 -c -a 9 --> 启用辅助控制器 1

nvme list-secondary /dev/nvme1n1 --> 检查第一个条目是否已更新,现在显示为在线。

现在将此 vf 导出到 vm。

【讨论】:

【参考方案2】:

您可能需要检查 nvme 规范 1.4(第 320 页,第 8.5 节虚拟化增强)。我猜你还需要配置VQ和VI)。

【讨论】:

【参考方案3】:

维塔利-卡赫马尔

对于 VF,您仍会在主机中看到“初始化中止”。

设置 VI 和 VQ 以及在线变量后,现在您可以将 VF 导出到客户操作系统/管理程序。在来宾操作系统中,您可以在操作系统启动完成后立即检查是否生成了 nvme 块设备。

【讨论】:

【参考方案4】:

首先使用 nvme create 命令创建 nvme 命名空间,然后使用 nvme attach-ns 附加到控制器,创建单个或多个命名空间,然后创建 VF 并尝试导出。

将 VF 导出到 VM。

在 virt-manager 中安装 virt-manager 并安装 Guest OS(centos 或 unbuntu 等),我使用的是 Ubuntu。你也可以参考-https://help.ubuntu.com/community/KVM/VirtManager

现在,您有了 VF 和 VM。

要导出,请选择任何客户操作系统 在新窗口中选择打开并选择添加硬件选项,然后选择 PCI 并添加 VF 0000:86:00.1/2/3/4 设备之一 运行来宾操作系统。 在 lsblk 你会发现一个字符设备 /dev/nvme0 和一个块设备 /dev/nvme0n1 现在你可以在块设备上运行 fio

【讨论】:

以上是关于如何使用三星 PM1733/1735 NVMe SSD 设置 SR-IOV的主要内容,如果未能解决你的问题,请参考以下文章

三星970EVO Plus及NvMe系列固态硬盘对比测试

我的三星nvme 970evo 硬盘运动虚拟机一半总是突然崩溃?

拯救者15-isk i7 可以加装这个固态硬盘吗?

固态硬盘推荐2020-04

联想ideapad700―15isk的固态硬盘接口是ngff哪种接口?

带有顺序请求选项的 NVME 读/写命令