网络I/O虚拟化,SR-IOV技术

1、简介

网络I/O虚拟化是服务器虚拟化技术的重要组成部分,在服务器虚拟化技术领域,计算虚拟化(如CPU和内存虚拟化)已经日趋成熟,但是,网络I/O虚拟化技术的发展相对比较滞后。当前,主流的网络I/O虚拟化技术有三种:软件模拟、网卡直通和SR-IOV。这三种虚拟化技术在不同程度上实现了网络I/O设备的虚拟化功能。其中,软件模拟是通过虚拟化Hypervisor层模拟虚拟网卡,实现与物理设备完全一样的接口,虚拟机操作系统无须修改就能直接驱动虚拟网卡,其最大的缺点是性能相对较差;网卡直通支持虚拟机绕过Hypervisor层,直接访问物理I/O设备,具有最高的性能,但是,在同一时刻,物理I/O设备只能被一个虚拟机独享;SR-IOV是Intel在2007年提出的解决虚拟化网络I/O的硬件技术方案,该技术不仅能够继承网卡直通的高性能优势,而且同时支持物理I/O设备的跨虚拟机共享,具有较好的应用前景。

2007年10月,PCI-SIG发布了PCI-SIG Single Root I/O Virtualization(SR-IOV)规范,其中详细阐述了硬件供应商在多个虚拟机中如何共享单个I/O设备硬件。

图1 硬件SR-IOV虚拟化技术原理图

图1 硬件SR-IOV虚拟化技术原理图

SR-IOV引入了两个新的功能类型:

  • PFs(Physical Functions,物理功能):物理网卡所支持的一项PCI功能,一个PF可以扩展出若干个VF。
  • VFs(Virtual Functions,虚拟功能):支持SR-IOV的物理网卡虚拟出来的实例,以一个独立网卡的形式呈现,每个VF有独立的PCI配置区域,并可以与其它VF共享同一个物理资源(共用同一个物理网口)。

一旦在PF中启用了SR-IOV,就可以通过PF的总线、设备和功能编号(路由ID)访问各个VF的PCIe配置空间。每个VF都具有一个PCIe内存空间,用于映射其寄存器集。VF设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的PCIe设备。创建VF后,可以直接将其指定给I/O来宾域或各个应用程序。此功能使得虚拟功能可以共享物理设备,并在没有CPU和虚拟机管理程序软件开销的情况下执行I/O。

由此可见,SR-IOV网卡通过将SR-IOV功能集成到物理网卡上,将单一的物理网卡虚拟成多个VF接口,每个VF接口都有单独的虚拟PCIe通道,这些虚拟的PCIe通道共用物理网卡的PCIe通道。每个虚拟机可占用一个或多个VF接口,这样虚拟机就可以直接访问自己的VF接口,而不需要Hypervisor的协调干预,从而大幅提升网络吞吐性能。
需要注意的是,SR-IOV作为一种新技术,目前仍不完善的地方:

  • 单个物理网卡支持的虚拟机个数有限制;
  • SR-IOV特性需要物理网卡硬件支持,并非所有的物理网卡都支持SR-IOV特性。

2、产品规格

2.1 兼容性列表

H3C CAS云计算管理平台兼容多种支持硬件SR-IOV的网卡及虚拟机操作系统。下表为进行了详细兼容性验证的硬件网卡类型及对应操作系统的版本,对于未在列表中的网卡和操作系统可能可以支持,但在项目实施之前,需要进行适当的适配与验证工作。

网络IO虚拟化,SR-IOV技术 图2

说明:

  • 如果虚拟机操作系统为Windows类型,都必须在操作系统内安装SR-IOV网卡的VF驱动程序,您可以联系服务器或网卡供应商获取相应的软件驱动安装文件。
  • 如果虚拟机操作系统为Linux类型,对于Intel 82599网卡,只支持内核版本为2.6以上的Linux操作系统,对于BCM57810网卡,只支持内核版本为3.9以上的Linux操作系统。

2.2 注意事项

  • 物理主机必须支持并开启I/O内存管理单元(IOMMU)功能。
  • 物理主机必须支持SR-IOV,并且在BIOS中启用了SR-IOV。
  • PF驱动程序必须安装在CVK虚拟化内核系统中。对于Intel 82599和BCM57810等主流网卡,H3C CAS CVK虚拟化内核系统提供默认驱动程序。
  • VF驱动程序必须与物理网卡兼容,必须安装在虚拟机操作系统内。对于某些网卡,操作系统版本中包含默认驱动程序(例如,内核版本高于3.9的Red Hat Enterprise Linux Server 7.0操作系统,默认自带BCM57810网卡的VF驱动程序),而对于其它网卡,则必须从网卡供应商或主机供应商所提供的位置下载并安装驱动程序。
  • 支持SR-IOV的网卡必须插在总线带宽X8以上的扩展槽中。以HP ProLiant DL380p Gen8服务器为例,该服务器的3个扩展槽的总线带宽是不一样的,2×10G的网卡必须插在X8或X16的槽位,才能提供足够的带宽。插槽1提供X16总线带宽,插槽2提供X8总线带宽,插槽3提供X4总线带宽,因此,插槽3不支持SRIOV网卡。

3、配置前提

本文档中的配置均是在实验室环境下进行的配置和验证,配置前服务器和软件的所有参数均采用出厂时的缺省配置。如果您已经对被测试对象进行了配置,为了保证配置效果,请确认现有配置和以下举例中的配置不冲突。

4、配置环境

4.1 服务器

本文档不严格与具体硬件服务器型号对应,如果使用过程中与产品实际情况有差异,请参考相关产品手册,或以设备实际情况为准。本文档使用的服务器型号与配置如下表所示,该环境不作为实际部署时的强制环境或推荐环境,只需要服务器能够兼容H3C CAS云计算管理平台即可完成本配置。

网络IO虚拟化,SR-IOV技术 图3

4.2 软件

网络IO虚拟化,SR-IOV技术 图4

5、组网需求

图2 硬件SR-IOV网卡逻辑组网图

图2 硬件SR-IOV网卡逻辑组网图

  • 服务器 0安装H3C CAS CVM虚拟化管理平台,服务器 1安装H3C CAS CVK虚拟化内核系统。在HP StoreVirtual P4730(iSCSI)存储设备上划分了一个500GB的LUN,并将这个LUN作为iSCSI共享存储设备挂载给服务器 1使用。
  • 在服务器 1上创建2个虚拟机,分别安装Windows Server 2008 R2数据中心版64位和Red Hat Enterprise Linux Server 7.0 64位操作系统。
  • 在服务器 1的BCM57810网卡上开启SR-IOV功能,并分别分配1个VF接口给VM 1和VM 2。

主要验证项包括:

  • VM1和VM2操作系统内是否能看到分配的SR-IOV网卡。
  • VM1和VM2分别使用Virtio网卡和SR-IOV网卡进行网络流量压力测试,对比Virtio网卡转发与SR-IOV网卡转发时的I/O吞吐量。

6、测试步骤

6.1 检查服务器硬件配置

步骤1 检查服务器的CPU是否启用了VT-d技术。

启动服务器 1,在启动过程中,按[F9]键进入BIOS设置。

在BIOS设置中,依次选择“System Options”->“Processor Options”->“Intel(R) VT-d”,将其值设置为“Enabled”,表示开启CPU的VT-d功能。

图3 在服务器BIOS中开启Intel VT-d技术

图3 在服务器BIOS中开启Intel VT-d技术

依次选择“Advanced Options”->“SR-IOV”,将其值设置为“Enabled”,表示开启物理网卡的SR-IOV功能。

图4 在服务器BIOS中开启SR-IOV功能

图4 在服务器BIOS中开启SR-IOV功能

步骤2 保存BIOS配置后,重启服务器。

6.2 开启服务器IOMMU功能

系统管理员登录H3C CAS CVM虚拟化管理平台,在导航菜单中选中被测试虚拟机所在的服务器主机,在右侧配置窗口中点击“高级设置”标签页。

图5 服务器IOMMU配置

图5 服务器IOMMU配置

默认情况下,服务器主机的IOMMU状态为“禁用”。点击<修改>按钮,在弹出的“IOMMU配置”对话框中,修改“IOMMU状态”为“启用”,并点击<确定>按钮。

图6 修改服务器IOMMU状态

图6 修改服务器IOMMU状态

将服务器主机进入维护模式,并重启服务器使IOMMU配置生效。

图7 重启服务器主机使IOMMU配置生效

图7 重启服务器主机使IOMMU配置生效

注意
在配置IOMMU之后,由于必须重新启动服务器生效,如果被测试服务器主机上已经存在虚拟机,强烈建议:服务器主机进入维护模式,将处于运行状态的虚拟机在线迁移到其它服务器主机上,然后再重启服务器主机,以最大程度规避因为主机重启而导致虚拟机数据丢失。

服务器主机启动完成之后,在H3C CAS CVM虚拟化管理平台上将服务器主机退出维护模式,检查其IOMMU配置是否为“启用”状态。

图8 检查服务器IOMMU配置状态

图8 检查服务器IOMMU配置状态

6.3 准备测试虚拟机

步骤1 创建虚拟机。
在H3C CAS CVK虚拟化内核系统(服务器 #1)上创建2个新的虚拟机,两个虚拟机的虚拟硬件资源配置相同,如下表所示。

网络IO虚拟化,SR-IOV技术 图5

说明
上述虚拟机资源配置仅为测试环境下的配置,不作为生产环境中业务虚拟机的推荐配置。生产环境中的虚拟机配置应该根据业务本身对CPU、内存、磁盘和网卡等资源的实际需求进行评估和测试后最终确定。

步骤2 通过控制台(VNC),分别为两个虚拟机安装Windows Server 2008 R2数据中心版64位操作系统和Red Hat Enterprise Linux Server 7.0 64位操作系统。

步骤3【可选】在H3C CAS CVM虚拟化管理平台中,在线修改虚拟机,分别为两个虚拟机挂载CAStools工具,并在操作系统内安装CAStools工具。

步骤4 在操作系统内安全关闭虚拟机。

6.4 虚拟机配置SR-IOV网卡

步骤1 开启物理主机物理网卡SR-IOV功能。

在H3C CAS CVM虚拟化管理平台导航菜单中,选中被测试虚拟机所在的服务器主机,在右侧配置窗口中点击“物理网卡”标签页。

在“物理网卡”列表中,选中支持SR-IOV功能的物理网卡(本文档以Broadcom公司的NetXtreme II BCM57810万兆网卡为例),在“高级设置”中,点击“SR-IOV”标签页,修改“SR-IOV状态”为“启用”,输入“虚拟网卡个数”为“2”个,点击<保存>按钮。

图9 配置物理网卡的SR-IOV功能

图9 配置物理网卡的SR-IOV功能

步骤2 为VM 1和VM 2配置SR-IOV网卡。

在“修改虚拟机”界面中,点击<增加硬件>按钮,准备为虚拟机增加SR-IOV网卡。

在弹出的“增加新的虚拟机硬件”配置向导中,选择“硬件类型”为“网络”,点击<下一步>按钮。

图10 为虚拟机增加虚拟硬件配置向导第一步 – 选择硬件类型

图10 为虚拟机增加虚拟硬件配置向导第一步 – 选择硬件类型

选择“设备型号”为“SR-IOV直通网卡”,驱动类型为“VFIO”,点击“物理网卡”后的“ ”按钮,选择支持SR-IOV功能的网卡,点击<下一步>按钮。

图11 为虚拟机增加虚拟硬件配置向导第二步 – 选择SR-IOV网卡

图11 为虚拟机增加虚拟硬件配置向导第二步 – 选择SR-IOV网卡

确认配置之后,点击<完成>按钮。

图12 为虚拟机增加虚拟硬件配置向导第三步 – 配置确认

图12 为虚拟机增加虚拟硬件配置向导第三步 – 配置确认

说明

  • KVM:基于KVM内核的PCI设备分配方式,是一种较老的PCI设备分配方式,在较老的Linux操作系统内核中支持。
  • VFIO(Virtual Function I/O,虚拟化功能输入输出):基于VFIO的PCI设备分配方式。VFIO是一套用户态驱动框架,在虚拟化场景下,可以用来在用户态实现PCI设备分配,与基于KVM内核的PCI设备分配方式相比,具有更好的兼容性,在实际部署时,建议配置为VFIO类型分配方式。

步骤3 从HP官网下载BCM57810网卡在Windows类型操作系统下的VF驱动程序,下载网址为:http://h20564.www2.hpe.com/hpsc/swd/public/detail?sp4ts.oid=5282673&swItemId=MTX_06339e112ace404aaab82b2b0a&swEnvOid=4064。

注意
仅Windows类型操作系统需要安装VF驱动程序,对于BCM57810网卡,Linux内核版本3.9以上的操作系统都不需要安装VF驱动程序。

步骤4 启动虚拟机VM 1,并在虚拟机操作系统内完成驱动程序的安装。驱动程序安装成功之后,在Windows操作系统的“设备管理器”中,可以看到SR-IOV网卡已经被操作系统识别到。

图13 在Windows Server 2008 R2虚拟机上识别到的SR-IOV网卡

图13 在Windows Server 2008 R2虚拟机上识别到的SR-IOV网卡

步骤5 在VM 2虚拟机上,无需安装VF驱动程序,Red Hat Enterprise Linux Server 7.0操作系统默认已经支持BCM57810的网卡驱动程序。在“Settings”->“Network”中,可以看到被操作系统识别到的SR-IOV网卡。

图14 在Red Hat Enterprise Linux Server虚拟机上识别到的SR-IOV网卡

图14 在Red Hat Enterprise Linux Server虚拟机上识别到的SR-IOV网卡

6.5 验证SR-IOV网卡的互通性

步骤1 配置虚拟机SR-IOV网卡IP地址。

在Windows虚拟机操作系统内,配置SR-IOV网卡IP地址为192.168.100.101。

图15 配置Windows Server 2008 R2虚拟机SR-IOV网卡IP地址

图15 配置Windows Server 2008 R2虚拟机SR-IOV网卡IP地址

在Red Hat Enterprise Linux虚拟机操作系统内,配置SR-IOV网卡IP地址为192.168.100.102。

图16 配置Red Hat Enterprise Linux 7.0虚拟机SR-IOV网卡IP地址

图16 配置Red Hat Enterprise Linux 7.0虚拟机SR-IOV网卡IP地址

在VM1操作系统内命令行窗口,Ping VM2的IP地址,观察是否能Ping通。

图17 验证配置了SR-IOV网卡的虚拟机之间的IP互通性

图17 验证配置了SR-IOV网卡的虚拟机之间的IP互通性

6.6 验证SR-IOV和Virtio网卡I/O吞吐量

步骤1 从iperf官方网站下载Windows版本和Linux版本的iperf工具软件,并分别在VM #1和VM #2虚拟机操作系统内安装。下载网址为:https://iperf.fr,本文档使用2.5.0版本为例。

步骤2 以VM1(Windows Server 2008 R2)为服务端,VM2(Red Hat Enterprise Linux Server 7.0)为客户端,两个虚拟机通过SR-IOV网卡进行网络吞吐量加压测试。为了防止偶然因素影响测试结果,总共测试5次取均值,结果约为2.13Gbps,下图为具体测试结果。

图18 SR-IOV网卡性能测试结果

图18 SR-IOV网卡性能测试结果

步骤3 两个虚拟机通过Virtio网卡(关闭内核加速)进行网络吞吐量加压测试,同样测试5次取均值,结果约为614Mbps,下图为具体测试结果。

图19 Virtio网卡(关闭内核加速)性能测试结果

图19 Virtio网卡(关闭内核加速)性能测试结果

步骤4 两个虚拟机通过Virtio网卡(开启内核加速)进行网络吞吐量加压测试,同样测试5次取均值,结果约为2.3Gbps,下图为具体测试结果。

图20 Virtio网卡(开启内核加速)性能测试结果

图20-Virtio网卡(开启内核加速)性能测试结果

注意
Virtio类型虚拟网卡是通过软件来模拟的网络转发模型,在实际运行时,请性能与服务器的CPU性能、当前服务器物理CPU利用率、虚拟化内核软件处理效率都有关系。

6.7 对比验证结果

根据上述测试结果,可以看出,在给定的服务器HP ProLiant DL380p Gen8(2路6核,Intel Xeon E5-2630 0 @ 2.30GHz)和物理SR-IOV网卡(Broadcom NetXtreme BCM57810 10 Gigabit Ethernet)条件下,在不同的虚拟网卡配置情况下的网络I/O转发性能对比如下图所示。

图21 SR-IOV与Virtio网卡IO吞吐量性能对比

图21 SR-IOV与Virtio网卡IO吞吐量性能对比

作者:欧珊瑚

转载自:虚拟化技术


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/14403.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于15-10-29
8