3

三星 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 绑定?

4

4 回答 4

1

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

于 2021-02-23T03:16:07.647 回答
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。

于 2021-03-22T10:37:10.737 回答
0

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

于 2021-04-15T06:09:35.687 回答
0

生命力-卡赫马尔

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

设置 VI 和 VQ 以及在线变量后,现在您可以将 VF 导出到 Guest OS/hypervisor。在来宾操作系统中,一旦操作系统启动完成,您就可以检查是否生成了 nvme 块设备。

于 2021-04-23T07:26:37.697 回答