SR-IOV技术简介

虚拟化场景都会听到SR-IOV,究竟什么是SR-IOV呢,下面资料可参考,具体实现步骤请再硬件满足的情况下自行尝试。

基础概念

SR-IOV全称为Single Root I/O Virtualization(单根输入/输出虚拟化),是一种硬件加速的虚拟化技术,它允许多个虚拟机同时访问物理设备,从而提高虚拟机的性能和可靠性。SR-IOV技术是通过将单个物理设备划分为多个虚拟设备或虚拟端口(即一张物理网卡虚拟化成多个虚拟网卡给虚拟机(VM)用),为每个虚拟机提供独立的物理通道。这样,每个虚拟机可以直接访问独立的虚拟设备或虚拟端口,而无需在主机操作系统和虚拟化层之间进行上下文切换。

SR-IOV中有两个PCIe的function types:

  • 物理功能 (Physical Function, PF):用于支持 SR-IOV 功能的 PCI 功能,每个PF都可以被物理主机发现和管理。PF 包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。PF 拥有完全配置资源,可以用于配置或控制 PCIe 设备。进一步讲,借助物理主机上的PF驱动可以直接访问PF所有资源,并对所有VF并进行配置,比如:设置VF数量,并对其进行全局启动或停止。

  • 虚拟功能 (Virtual Function, VF):PF虚拟出来的功能,VF 是一种轻量级 PCIe 功能,仅允许拥有用于其自身行为的配置资源。一个或者多个VF共享一个PF,其驱动装在虚拟机上,当VF分配给虚拟机以后,虚拟机就能像使用普通PCIe设备一样初始化和配置VF。如果PF代表的是一张物理网卡,那么VF则是一个虚拟机可以看见和使用的虚拟网卡。

每个 SR-IOV 设备都可有一个物理功能 (Physical Function, PF),并且每个 PF 最多可有 64,000 个与其关联的虚拟功能 (Virtual Function, VF)。PF 可以通过寄存器创建 VF,这些寄存器设计有专用于此目的的属性。只要在 PF 中启用了 SR-IOV,就可以通过 PF 的总线、设备和功能编号(路由 ID)访问各个 VF 的 PCI 配置空间。每个 VF 都具有一个 PCI 内存空间,用于映射其寄存器集。VF 设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的 PCI 设备。创建 VF 后,可以直接将其指定给 IO 或各个应用程序(如裸机平台上的 Oracle Solaris Zones)。此功能使得虚拟功能可以共享物理设备,并在没有 CPU 和虚拟机管理程序软件开销的情况下执行 I/O,即可跳过中间的虚拟化堆栈(即VMM层),以达到近乎于纯物理环境的性能。

SR-IOV技术的优缺点及应用场景

SR-IOV的缺点:

  1. 高性能:SR-IOV技术可以降低虚拟机与物理设备之间的通信延迟,提高虚拟机的性能和响应速度。

  2. 简化管理:SR-IOV技术可以使虚拟机直接访问物理设备,从而简化了虚拟化环境的管理。

  3. 提高可靠性:SR-IOV技术可以将物理设备的错误隔离到虚拟机级别,从而提高了系统的可靠性。

  4. 提高安全性:SR-IOV技术将物理设备划分成多个虚拟设备,可以使不同虚拟机之间的数据传输更加安全。

SR-IOV的缺点:

使用了VFs的虚拟机不能在线迁移。

应用场景:SR-IOV技术在云计算、虚拟化、服务器应用等领域得到了广泛应用。在云计算数据中心中,SR-IOV技术可以提高虚拟机的网络和存储性能,允许灵活的分配和管理资源,从而降低了资源消耗和成本。在服务器应用中,SR-IOV技术可以支持高密度虚拟化、高性能计算和大规模分布式存储。

如何实现SR-IOV功能?

前提首先SR-IOV需要软硬都支持才行:

  • 一台支持SR-IOV的主机或服务器(主板),SR-IOV功能在BIOS中已开启;

  • 一块支持SR-IOV且能安装于上述设备的网卡。

步骤如下:确认测试的设备在BIOS打开VT-D及SRIOV支持选项;进入ESXi硬件配置页面,找到我们需要进行配置的SR-IOV网卡;两个网口,配置某一个网口为SR-IOV口。并设置虚拟VF的数量;保存配置之后,重新启动ESXi,就可以看到硬件上出现对应的虚拟网卡设备。这样子我们就完成了SR-IOV配置。