无限带宽 + KVM

无限带宽 + KVM

这个问题是从 stackoverflow 复制而来的,正如我所说的,我的问题更适合在这里。

尽管我搜索了好几天,但我还是找不到有关以下内容的任何有用信息 - 尽管我认为我不是第一个遇到此问题的人:我们正在使用 MATLAB、MPI 和 Infiniband 开发高性能集群。此设置在过去几年中一直运行良好。但为了实现更大的灵活性和更易于维护,我们正在考虑使用 KVM 虚拟化计算节点。

现在我有一个大问题,就是如何将 Infiniband “放入”我的虚拟机中。我不仅想通过 PCI 接口,还想构建一些与乙太網路橋我可以将其连接到主机上的机器。我找到了一些讨论此问题的资料 - 但没有介绍如何安装/配置 IB。有谁知道如何做到这一点?

提前致谢!

答案1

NVidia (Mellanox) 是 Infiniband 的主要支持者,对 Infiniband 虚拟化提供了良好的支持。借助 NVidia ConnectX 卡和 SR-IOV 支持,它可以与 Redhat、Centos、Debian 和其他 Linux 版本(x86_64 和 ARM)下的 KVM 配合使用。借助 SR-IOV,您可以安装 OFED 和 VM,SR-IOV 将为每个 VM 提供一个类似于硬件网卡的接口。KVM 有许多网络/桥接选项,NAT、路由、隔离,允许您构建任意数量的虚拟网络,无论是否带有物理或虚拟功能适配器。

确保您的 Infiniband 卡支持单根 IO 虚拟化 (SR-IOV)。SR-IOV 似乎为每个虚拟机提供了唯一的物理网卡、GPU 或其他 IO 设备。并非所有 Infiniband 卡都支持 SR-IOV。

SR-IOV 背景:

NVidia 单根 IO 虚拟化

https://www.lynx.com/embedded-systems-learning-center/what-is-sr-iov-and-why-is-it-important-for-embedded-devices

https://en.wikipedia.org/wiki/Single-root_input/output_virtualization

我假设您使用的是 Intel CPU、NVidia ConnectX 卡、NVidia OFED 和 Redhat 7.9 或更高版本或 Centos 7.9 或更高版本。在其他版本的 Linux 上也是可能的。我熟悉 Centos 和 Redhat。

  • 您的计算机 BIOS 必须支持 CPU、IOMMU 和 SR-IOV 虚拟化
  • 在 BIOS 中打开 CPU 虚拟化,在英特尔处理器上,这也称为 VT-x
  • 在 BIOS 中打开 IOMMU(输入输出内存管理单元),在英特尔处理器上,这也称为 VT-d
  • 在 BIOS 中打开 SR-IOV 支持
  • Linux 内核需要打开 IOMMU。对于 Intel 处理器,您需要将“intel_iommu=on”传递给内核。我总是添加 IOMMU 直通“iommu=pt”如果您使用的是 Redhat,请编辑 /etc/default/grub 并将其添加到 GRUB_COMMAND_LINE。

https://access.redhat.com/documentation/en-us/red_hat_virtualization/4.1/html/installation_guide/appe-configuring_a_hypervisor_host_for_pci_passthrough

  • “sudo dracut--force”
  • “sudo grub2-mkconfig -o /boot/..path_to_your_grub_cfg”。对于非 UEFI,这是“grub2-mkconfig -o /boot/grub2/grub.cfg”
  • 如果成功,您应该在启动过程中通过查看“dmesg”的输出看到 IOMMU 和 DMAR(DMA 重映射)消息
  • 从 NVidia 下载并安装最近支持的与您的 Infiniband 卡、操作系统和处理器相匹配的 NVidia OFED,并使其在主机上运行。
  • 从 NVidia 下载并安装 Mellanox 固件工具 mft。
  • 从 NVidia 下载并安装受您的 OFED、OS、处理器和 NVidia ConnectX 卡组合支持的最新固件。
  • 使用 NVidia MST 和 Flint 更新 ConnectX 卡上的固件。

https://network.nvidia.com/support/firmware/update-instructions/

  • 您必须使用 mlxconfig 在 OFED 中启用 SR-IOV,并设置虚拟功能的数量,即您要支持的虚拟 ConnectX 卡的数量。“mlxconfig -d /dev/mst/YOUR_INTERFACE_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4”

https://support.mellanox.com/s/article/HowTo-Configure-SR-IOV-for-ConnectX-4-ConnectX-5-ConnectX-6-with-KVM-Ethernet

https://mymellanox.force.com/mellanoxcommunity/s/article/howto-configure-sr-iov-for-connect-ib-connectx-4-with-kvm--infiniband-x

https://shawnliu.me/post/configuring-sr-iov-for-mellanox-adapters/

  • “sudo lspci | grep Mellanox” 应该显示硬件和虚拟功能适配器。
  • 您需要从主机解除一个或多个虚拟功能绑定,并将其绑定到所需的虚拟机

https://support.mellanox.com/s/article/howto-configure-sr-iov-for-connect-ib-connectx-4-with-kvm--infiniband-x

  • 然后,KVM virt-manager 或 virsh 将允许您将虚拟功能添加为虚拟机中的 PCI 设备。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/virtualization/sect-virtualization-adding_a_pci_device_to_a_host

  • 在虚拟机中安装 OFED

相关内容