第三部分:SR-IOV
第四部分:Intel网卡在VMware 环境 实现 SR-IOV 需要的条件和配置方法
第五部分:SR-IOV 在Red Hat Virtualization 的配制方法
第一部分:虚拟化通信延迟:
生产业务中,我们在虚拟化平台中遇到了部分虚拟机在业务高峰的时候,出现高延迟的情况。排查问题的时候,确认了两种情况,
-
是Hypervisor 的延迟是正常的;
-
是GuestOS 内部的延迟也是正常的;
所以判断应该是Hypervisor和GuestOS 之间的通信出现了问题。这时候想到了SR-IOV,想看看SR-IOV 能不能提供低延迟提供给对延迟敏感的业务。
写这篇文章之前,正好看到Red Hat 发布了 Red Hat Virtualization V4版,官方文档中,专门有一篇《Hardware considerations for implementing SR-IOV with Red Hat Virtualization》。
文章很短,主要介绍Red Hat Virtualization 中使用SR-IOV的前提条件:
-
CPU 必须支持IOMMU(input/output memory management unit 输入输出内存管理单元)(比如英特尔的 VT-d 或者AMD的 AMD-Vi,Power8 处理器默认支持IOMMU)
-
固件Firmware 必须支持IOMMU
-
CPU 根桥必须支持 ACS 或者ACS等价特性
-
PCIe 设备必须支持ACS 或者ACS等价特性
-
建议根桥和PCIe 设备中间的所有PCIe 交换设备都支持ACS,如果某个PCIe交换设备不支持ACS,其后的所有PCIe设备只能共享某个IOMMU 组,所以只能分配给1台虚机。
Red Hat 虚拟化平台V4 先介绍到这里。
第二部分:IO 虚拟化
现在介绍一下 IO 虚拟化。IO 虚拟化目前主要也是分为3种,
第一是全虚拟化
:
通过VMM来模拟IO设备实现,VMM截获GuestOS的IO请求,通过软件模拟真实的硬件。
VMM必须处理所有虚机的IO请求,然后将所有的IO情况序列化为可以被底层硬件处理的单一IO流。
好处是GuestOS不需要考虑硬件设备的情况。问题是效率相对较低。例如 qemu。
第二种是IO半虚拟化技术
:
通过前端和后端模拟实现虚拟化。GuestOS中的半虚拟化驱动为前端,VMM 提供的与GuestOS 通讯的驱动程序为后端。
前端驱动将GuestOS的请求通过与VMM之间的特殊通信机制发生给VMM后端需求,后端驱动处理完IO请求之后再发送给物理驱动。全虚拟化为了完成一次操作要涉及到多个寄存器的操作,使得VMM要截获每个寄存器访问并进行相应的模拟,就会导致多次上下文切换。这种方式能很大程度的减少上下文切换的频率,提供更大的优化空间。例如 virtio
软件的共享IO虚拟化技术
第三种是硬件辅助的IO虚拟化:
主要包括 英特尔VT-d, AMD的IOMMU(AMD-Vi) 和PCI-SIG 的IOV 。 前两种属于Directed I/O。物理设备直接分配给虚拟机使用,通过硬件芯片完成GPA到MA 的翻译。IOV 通过在硬件设备中增加一个PCIe 设备,用于呈现一个PF或多个VF,从而可以将每个VF单独分配给不同的虚机使用。
Intel VT-d
SR-IOV
第三部分:SR-IOV
SR-IOV(
S
ingle
R
oot
I/O
V
irtualization,单根I/O虚拟化)可允许Windows操作系统和微软的 Hyper-V 或 VMware 的 ESXi 等 hypervisor 对服务器的
磁盘I/O设备
,如现在 SR-IOV 对
网卡设备
一样进行
封装
,
管理
甚至
共享
。
-
SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。
-
SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。
-
SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备。
-
SR-IOV 是 PCI-SIG 的一个IOV的规范,目的是提供一种标准规范,通过为虚拟机提供独立的内存空间、中断、DMA流,来绕过VMM实现数据移动。
SR-IOV 的优点
SR-IOV 标准允许在 IO 来宾域之间高效共享 PCIe 设备。
SR-IOV 设备可以具有数百个与某个
物理功能
(Physical Function,
PF
) 关联的
虚拟功能
(Virtual Function,
VF
)。
VF 的创建可由 PF 通过设计用来开启 SR-IOV 功能的寄存器以动态方式进行控制。
缺省情况下,SR-IOV 功能处于禁用状态,PF 充当传统 PCIe 设备。
具有 SR-IOV 功能的设备可以利用以下优点:
-
性能-从虚拟机环境直接访问硬件。
-
成本降低-节省的资本和运营开销包括:
-
节能
-
减少了适配器数量
-
简化了布线
-
减少了交换机端口
-
SR-IOV 架构被设计用于将单个设备通过支持多个VF,并减少硬件的开销。
单个 I/O 资源可由许多虚拟机共享。共享的设备将提供专用的资源,并且还使用共享的通用资源。这样,每个虚拟机都可访问唯一的资源。因此,启用了 SR-IOV 并且具有适当的硬件和 OS 支持的 PCIe 设备(例如以太网端口)可以显示为多个单独的物理设备,每个都具有自己的 PCIe 配置空间。
SR-IOV 引入了
两种功能类型
:
1.
物理功能
(Physical Function,
PF
)
用于支持 SR-IOV 功能的 PCI 功能,如 SR-IOV 规范中定义。PF 包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。PF 是全功能的 PCIe 功能,可以像其他任何 PCIe 设备一样进行发现、管理和处理。PF 拥有完全配置资源,可以用于配置或控制 PCIe 设备。
2.
虚拟功能
(Virtual Function,
VF
)
与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 仅允许拥有用于其自身行为的配置资源。
注:部分图片源自 《PCI-SIG SR-IOV Primer》
第四部分:Intel网卡在VMware 环境 实现 SR-IOV 需要的条件和配置方法
1. 硬件需求:
-
兼容ESXi版本;
-
支持IOMMU,并且在BIOS中已开启;
-
支持VT-d 和 SR-IOV 规范;
-
在BIOS中开启SR-IOV;
2. 软件需求:
-
ESXi 5.1 及以上版本;
-
Red Hat Enterprise Linux 6.x 及以上版本;
-
Windows Server 2008 R2 with SP2 及以上版本;
-
VF 驱动必须兼容,并且支持 GuestOS 。
配置方法:
1) 创建VF
开启SSH, 登录ESXi , 使用以下命令创建VF
esxcli system module parameters set -m ixgbe -p=max_vfs=20,20,0,0
esxcli system module parameters list --module=ixgbe | grep max_vfs
esxcfg-module -g ixgb
配置完成之后,重启ESXi,参看以及创建的VF
lspci | grep -i intel | grep -i 'ethernet\|network'
补充一下,这一步可以通过Host Profile 尽快批量配置。
2)将VF分配给虚机
编辑虚机,添加PCI设备

选择VF,确定。

完成VF的分配。
3)GuestOS 安装VF 驱动。
Windos 需要单独去下载VF驱动, CentOS 6.x 自带了igbx 的驱动。

第五部分:SR-IOV 在Red Hat Virtualization 的配制方法
1) 创建VF
首先通过lscpi 验证物理网卡,通过重新加载内核模块参数,来创建VF:
modprobe -r igb
modprobe igb max_vfs=7
或者在rc.local 中配置:
echo 2 > /sys/class/net/enp14s0f0/device/sriov_numvfs
查看创建的VF
lscpi | grep 82587
virsh nodedev-list | grep 0b
2) 将VF分配给虚机
virsh nodedev-dumpxml pci_0000_0b_00_0 >> /tmp/new-i nterface. xml
virsh attach-device MyGuest /tmp/new-i nterface. xml --live --config
后面的步骤相同,不再赘述。SR-IOV 今天就介绍到这里。如果大家有兴趣,推荐阅读以下内容:
《IBM Power Systems SR-IOV Technical Overview and Introduction》
《How to Configure Intel Ethernet Converged Network Adapter-Enabled VF on VMware ESXi 5.1》
《Implementing SR-IOV on HPE ProLiant Servers with VMware vSphere 5.1》
《Red_Hat_Enterprise_Linux-7-Virtualization_Deployment_and_Administration_Guide-en-US》
SR-IOV是Single Root I/O Virtualization的缩写。
一、SR-IOV是什么?
在虚拟机中,一切皆虚拟。比如网卡,虚拟机看来好像有一个真实网卡,但是这个网卡是宿主机虚拟出来的硬件,也就是一堆软件代码而已,没有真实硬件。
虚拟虽然万能,但是很显然,这一堆代码是需要CPU去执行的!所以,虚拟设备的性能会随着宿主机的性能而改变,另外宿主机由于需要进行数据处理,时延等也产生了。
我们之前也提到过,VT-D这个功能可以将物理的PCI-e设备直接分配给虚拟机,让虚拟机直接控制
外设资源是有限的,为了满足多个客户机操作系统的需求,VMM必须通过I/O虚拟化的方式来复用有限的外部资源。VMM截获客户机操作系统对设备的访问请求,然后通过软件的方式来模拟真实设备的效果。从处理器角度看,外设是通过一组I/O资源(端口I/O或者是MMIO)来进行访问的,对设备相关的虚拟化又被称为I/O虚拟化。
首先分析一下没有虚拟化的情况。给定一个外设,定义有自己的一套供软件访问的接口,这些接口的属性可能是单向的,也可能是双向的。操作系统含有外设的驱动程序,它们...
2007年9月,PCI-SIG官方发布了《Single Root I/O Virtualization and Sharing Specification Revision 1.0》规范,定义了多个System Images如何共享PCI接口的I/O硬件设备,这里的设备可以是PCIe 网卡,一块PCIe SSD等等。
这就是今天要讨论的话题——SR-IOV,一种硬件角度出发的虚拟化解决方案,本...
SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV
规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设
(2)CPU 和 内存虚拟化
(3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton)
(4)I/O PCI/PCIe设备直接分配和 SR-IOV
(5)libvirt 介绍
(6)Nova 通过 libvirt 管理 QEMU/KVM 虚机
(7)快照 (snapshot)
(8)迁移 (migra...
云计算的三个分层:基础设施(infrastructure)、平台(platform)和软件(software)
基础设施在最下端,平台在中间,软件在顶端,分别是分别是Infrastructure-as-a-Service(IaaS),Platform-as-a-Service(PaaS),Software-as-a-Service(SaaS),别的一些“软”的层可以在这些层上面添加。
简单点理...
### 回答1:
SR-IOV (Single Root I/O Virtualization) 是一种硬件虚拟化技术,它将一个物理 IO 设备分割成多个虚拟设备,并将这些虚拟设备分配给不同的虚拟机。在 SR-IOV 技术下,每个虚拟设备都可以被视为独立的物理设备,可以被单独配置和管理。
在 SR-IOV 中,支持 trunking 的设备可以被分配给多个虚拟机。Trunking 是一种将多个 VLAN 合并到一个物理端口上的技术。使用 trunking 技术可以减少端口数量的使用,同时提高网络吞吐量和灵活性。
因此,如果 SR-IOV 的底层物理设备支持 trunking,则 SR-IOV 也可以支持 trunking。但是,需要注意的是,SR-IOV 的虚拟设备必须被正确配置,以支持被分配到正确的 VLAN ID,并且必须遵循 VLAN 的各种限制和规则。
总之,SR-IOV 技术可以支持 trunking,但需要以正确的方式配置和管理。
### 回答2:
SR-IOV(Single Root IO Virtualization,单根IO虚拟化)是一种通过在物理网卡上创建多个虚拟端口来提高虚拟机网络性能的技术。而Trunk则是指将多个VLAN合并成为一个VLAN透明地传输。
因为SR-IOV的虚拟端口是直接挂在物理网卡上的,所以在SR-IOV环境下,不需要在虚拟机内使用VLAN tagging。但是,SR-IOV并不直接支持Trunk,因为SR-IOV是在物理网卡上虚拟化出多个端口,每个端口都是单独的。
在SR-IOV环境中,如果希望实现Trunk功能,则需要在物理交换机上进行配置,将多个VLAN合并为一个VLAN,并将这个VLAN传输到物理网卡上。这样,SR-IOV环境下的虚拟机就可以通过这个VLAN透明地互相通信。
总之,SR-IOV可以实现提高虚拟机网络性能的目的,但是如果需要使用Trunk功能,则需要进行特定的物理交换机配置。
### 回答3:
SR-IOV是一种网络虚拟化技术,可以将物理网络资源划分成多个虚拟网络,从而提高网络性能和灵活性。而trunk是一种VLAN聚合技术,可以将多个VLAN合并为一个虚拟链路,提高网络吞吐量和可用性。那么,SR-IOV可以支持trunk吗?
答案是肯定的。事实上,SR-IOV就是在支持trunk的基础上实现的。SR-IOV的核心思想就是将物理NIC划分成多个虚拟NIC,每个虚拟NIC可以独立地接收和发送网络流量,同时可以配置不同的VLAN ID。这就意味着,SR-IOV可以支持trunk技术,通过将多个虚拟NIC绑定到一个虚拟链路上,可以实现对多个VLAN的聚合和负载均衡。
需要注意的是,SR-IOV的trunk技术与传统的VLAN聚合有所不同。在SR-IOV中,虚拟NIC的VLAN ID是在物理NIC上进行配置的,而不是在虚拟交换机上进行配置的。因此,当物理NIC上配置了trunk技术后,会自动将所有虚拟NIC绑定到这个trunk链路上,无需再次配置。
总的来说,SR-IOV可以完美地支持trunk技术,这也是它在进行高性能网络虚拟化方面的重要优势之一。