0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SR-IOV研究:一个简单的测试环境

冬至子 来源:布鲁斯的读书圈 作者:BruceL 2023-06-14 11:34 次阅读

简单地说,SR-IOV是一种让一台主机上的多台虚拟机和主机系统本身合用同一张物理网卡的技术,每台虚拟机都认为自己拥有一张独立的网卡(即一个VF),而其实它们都被骗了~~

由于手上只有一台Linux主机和一张Mellanox ConnectX-4 LX 10G网卡(双物理网口),为了研究SR-IOV,我只能搭建了如下图所示的极简测试环境。这块网卡支持RoCE(RDMA),但在这里只使用它的以太网功能。

图片

对于宿主机的操作系统来说,这块网卡的两个物理网口可以看作两个独立的网卡/网络接口。如果运行ifconfig,可以看到系统中存在enp6s0f0np0和enp6s0f1np1两个网口。

之所以会这样,是因为硬件向系统展现了两个PCIe设备,准确地说是两个功能号。

比如用下面这个命令,可以看到这两个PCIe设备的"bus:slot.func",即"总线号:设备号:功能号"。

$ lspci -D | grep Mellanox

0000:06:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]

0000:06:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]

一旦网卡被插在PCIe插槽上,它的bus和slot就确定了,并且是唯一的。但硬件只要提供两个独立的func,就会被Linux检测为两个独立的PCIe设备,从而对应两个独立的网口。

准备好上述硬件连接和操作系统(Ubuntu 20.04.6)后,我们需要做如下几件事才能使用SR-IOV功能。此处主要的参考文献为《HOWTO CONFIGURE SR-IOV FOR CONNECTX-4/CONNECTX-5/CONNECTX-6 WITH KVM (ETHERNET)》。本文并非操作手册,所以一些网上可以很容易搜到的东西我就不详细说明了。

  1. 在BIOS中打开SR-IOV功能,一般位于PCI配置中。
  2. 在Linux启动命令行中添加“intel_iommu=on iommu=pt”(对于Intel CPU)。
  3. 在Ubuntu中安装虚拟机(只安装virt-manager就几乎把所有组件都安装了)。
  4. 在宿主机安装Mellanox网卡驱动。

安装文件为MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu20.04-x86_64.tgz,需要从NVIDIA网站下载

如果以后要看代码还需要下载MLNX_OFED_SRC-debian-5.8-2.0.3.0.tgz 。

  1. 设置网卡的固件,使其支持SR-IOV。比如运行如下命令,将网卡最大支持的VF数量设置为8个。

*sudo mlxconfig -d /dev/mst/mt4117_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8*

  1. 设置MLNX_OFED驱动(最终也会设置硬件),打开SR-IOV功能。

比如运行如下命令,使能4个VF。

echo 4 > /sys/class/net/enp6s0f1np1/device/sriov_numvfs

此时系统中会呈现4个VFs(每个都是一个PCIe设备),分别对应下面的后四行,即0000:06:00.2(后三个数就是"bus:slot.func")、0000:06:00.3、0000:06:00.4和0000:06:00.5。

$ lspci -D | grep Mellanox

0000:06:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]

0000:06:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]

0000:06:01.2 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]

0000:06:01.3 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]

0000:06:01.4 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]

0000:06:01.5 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]

  1. 把第一个VF添加到虚拟机中,虚拟机会把它认做一个独立的PCIe设备。

这里给一个配置虚拟机的参考图。

图片

  1. 在虚拟机中安装MLNX_OFED驱动。

此时我们会得到如下图所示的测试环境。

图片

如果我们在虚拟机里把enp6s0的IP设置为192.168.8.1。

然后在宿主机里把两个原有的非VF的系统网口的IP设置为192.168.8.2(enp6s0f0np0)和192.168.8.3(enp6s0f1np1),并把VF3(在宿主机中)对应的网口enp6s0f1v3的IP设置为192.168.8.4。

在虚拟机中是可以ping通上述后三个IP的。

当然在这三种情况下数据走的物理通路是不同的。

按照我浅薄的认识,我认为从虚拟机中ping后面三个IP时,应该对应下图中三条彩色虚线所示的数据通路。

图片

对于不同的物理网口,数据肯定会通过光纤。

对于属于相同物理网口的PF(对应原系统网口)和VFs,我认为网卡硬件中存在一个内部的交换机机制,使得所有PF和VFs之间都可以转发数据包。之所以这样想,是由于做了如下测试:

①在虚拟机中连续地ping 192.168.8.5,这是一个并不存在的地址。

②同时在宿主机上依次用“tcpdump -i enpXXXX”命令监视每个网口,包括未配置IP的VF。

可以发现每个网口都会持续收到ARP报文。如果数据没有经过硬件而是在操作系统内部直接处理掉了,那这么做是完全没必要的,因为系统知道每个网口的IP。并且ifconfig命令输出中也会显示每个网口的RX计数在持续增加,这种计数一般在驱动中实现,而且只有驱动真正从硬件收到包时才会增加计数。

在今后阅读相关驱动代码时我还会关注这一点。欢迎高手来拍砖。

本文只是搭建了一个简单的测试环境,尝试使用SR-IOV功能。接下来我会研究Linux系统和Mellanox驱动中做了哪些事情支持SR-IOV功能,以及猜测需要硬件做哪些工作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    40

    文章

    5080

    浏览量

    166258
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26926
  • 虚拟机
    +关注

    关注

    1

    文章

    855

    浏览量

    27389
  • RDMA
    +关注

    关注

    0

    文章

    69

    浏览量

    8845
  • PCIe接口
    +关注

    关注

    0

    文章

    111

    浏览量

    9529
收藏 人收藏

    评论

    相关推荐

    SR5500 收购! Spirent SR5500

    或者多MIMO测试平台。l 可选的配置,使您可以无需担心预算风险。系统可随时为您全面升级到功能最强大的模块化配置。l 思博伦独有的衰退实验室为您从数据集合中创建可重现重现的无线射频环境
    发表于 04-29 18:37

    GPU虚拟化在哪里发生?

    GPU虚拟化在哪里发生?它是否出现在GRID卡中,然后将vGPU呈现给管理程序然后呈现给客户?或者,GPU的虚拟化和调度是否真的发生在管理程序上安装的GRID管理器软件?是否使用了SR-IOV?我
    发表于 09-28 16:45

    正在使用SR-IOV功能,请问能不能再VF端口中启动MAC学习?

    我在我的PC中使用X710进行自定义应用程序。我正在使用SR-IOV功能。我已为每个VF分配了MAC地址。有没有办法在VF端口启用MAC学习?我的应用程序将使用生成的mac地址与对等方进行通信
    发表于 10-31 19:22

    基于PCI Express SR-IOV的大量虚拟化功能

    当今数据中心用的PCI Express最强大的功能是I/O虚拟化。I/O虚拟化让虚拟机直接访问I/O硬件设备,提高了企业级服务器的性能。单根I/O虚拟化(SR-IOV)技术规范拉动了市场
    发表于 07-17 06:18

    如何将Virtex 7 PCI Express Gen3集成模块迁移到Kintex 7

    亲爱的大家,我目前正在开发Vivado 2013.4项目,我需要利用物理和虚拟功能以及SR-IOV。我作为例子
    发表于 07-16 10:12

    Intel图形SR-IOV增强工具箱使用指南

    的标准方法。每个虚拟功能都被直接分配给虚拟机,从而实现虚拟机接近本机的性能。 英特尔图形公司SR-IOV的主要好处是: 种标准方法,即与虚拟机器共享有形的GPU,从而允许在虚拟
    发表于 08-02 16:07

    PXIe万兆网卡资料 双路

    (DCB)支持128虚拟机(SR-IOV)支持边带管理协议,支持IPSEC分载,支持ISCSI加速,支持RSS/TX队列,支持VMDQ、SR-IOV接口标准支持PCI-E x8,支持PCIE3.0
    发表于 08-22 11:53

    网络环境下的软件测试心理问题研究_宋婷婷

    网络环境下的软件测试心理问题研究_宋婷婷
    发表于 03-15 11:30 0次下载

    测试环境是什么_搭建测试环境要遵循什么原则?

    测试环境简单的说就是软件运行的平台,即软件、硬件和网络三种环境的合集,也就是说:测试环境=软件+
    的头像 发表于 01-31 15:38 3.6w次阅读

    SR-IOV创建虚拟函数

    This video demonstrates how to create virtual functions using SR-IOV mode.
    的头像 发表于 10-18 05:42 2786次阅读

    SR-IOV在云计算数据中心的应用方法、价值和前景

    传统虚拟化系统中大量的资源和时间损耗在Hypervisor(或者VMM)软件层面,PCIe设备的性能优势因此无法彻底发挥。而SR-IOV的价值在于消除这一软件瓶颈,助力多个虚拟机实现物理资源共享,同时使得虚拟机可以使用到NVMe SSD的高性能。
    的头像 发表于 04-19 17:16 4967次阅读
    <b class='flag-5'>SR-IOV</b>在云计算数据中心的应用方法、价值和前景

    Switchtec PAX网络互联Gen 4 PCIe交换机系列现已投产

    Microchip的Switchtec PAX PCIe系列交换机为需要多主机共享访问单根I/O虚拟化(SR-IOV)、非易失性存储器(NVMe)、固态硬盘(SSD)、图形处理器(GPU)和其他PCIe终端的系统提供了一个交钥匙网络互联解决方案,并缩短上市时间。
    的头像 发表于 06-24 16:24 2477次阅读

    涡轮增压多云安全和应用程序交付与VirtIO卸载

    通常,虚拟机依赖 VirtIO 等软件接口与虚拟机监控程序连接。尽管与 SR-IOV 相比, VirtIO 具有更大的灵活性,但它可以在主机中使用高达 50% 的计算能力,从而降低服务器的整体效率。
    的头像 发表于 10-10 15:49 455次阅读
    涡轮增压多云安全和应用程序交付与VirtIO卸载

    什么是SR-IOV呢?SR-IOV技术的优缺点及应用场景

    SR-IOV全称为Single Root I/O Virtualization(单根输入/输出虚拟化),是一种硬件加速的虚拟化技术,它允许多个虚拟机同时访问物理设备,从而提高虚拟机的性能和可靠性。
    的头像 发表于 06-06 14:58 2.1w次阅读

    慧荣科技于FMS 2023展出企业级和即将上市的消费级PCIe Gen5 SSD主控,以及全球首款支持SR-IOV的车用级SSD主控

    Memory Summit 2023)展示专为服务器和数据中心打造的企业级PCIe Gen5 SSD开发平台和全球首款支持SR-IOV(Single Root-IO Virtualization
    发表于 08-09 17:36 382次阅读
    慧荣科技于FMS 2023展出企业级和即将上市的消费级PCIe Gen5 SSD主控,以及全球首款支持<b class='flag-5'>SR-IOV</b>的车用级SSD主控