找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7484|回复: 0

硬件I/O虚拟化技术--SR-IOV

[复制链接]

238

主题

329

帖子

2119

积分

超级版主

Rank: 8Rank: 8

积分
2119
QQ
发表于 2016-2-29 14:39:04 | 显示全部楼层 |阅读模式
本帖最后由 xiaoyu 于 2016-3-3 11:41 编辑

转自微信公众好号“思杰之路“

1401.JPG
1.1.SR-IOV介绍

Single Root I/O Virtualization(SR-IOV) 是一种由PCI-SIG 组织发布的I/O 虚拟化技术标准。SR-IOV 采用直接I/O 技术,绕过虚拟机监视器直接发送和接收I/O 数据。同时SR-IOV 还利用IOMMU(I/OMemory Management Unit)高效完成内存访问授权和内存地址转换。一个SR-IOV 设备具有一个或多个物理设备(Physical Function,或PF),PF 是标准的PCIe 设备。每一个PF可以创建多个虚拟设备(Virtual Function,或VF),VF 是“轻量级”的PCIe 设备。
  • Physical Function (PF) : 网卡上的每个实体端口具有至少有一个PF。在某些情况下,网卡上的每个端口可以被分割为四个端口。例如每个端口可成分为四个PFs,或是在双端口的网络卡上能分割为总共有八个PFs。关键点是在于PF拥有完整的设置能力,它们可以被hypervisor当成是实体端口来管理。
  • Virtual Function (VF) : VF是和VM关联的,它被限制为处理I/O流,基本上是移动数据。它们不支持对实体端口的管理。所支持的VF数不同但约莫是每张卡可虚拟为64个VF。

1402.JPG
每一个VF 拥有收发数据包的关键资源,如收发队列、DMA 通道等;而与其他VF 共享其他大部分非关键的设备资源。因此每一个VF 都有独立收发数据包的能力。若把一个VF 分配给一台虚拟机,该虚拟机就具备了直接使用该VF 进行数据包发送和接收的能力。最为重要的是,虚拟机通过VF 进行I/O 操作无需虚拟机监视器的干涉,这正是直接I/O 技术的优势之一。

1.2.SR-IOV体系结构

1403.PNG
如图,SR-IOV 体系结构中的软件部分包括:PF 驱动、VF 驱动和SR-IOV 管理器(IOVM)。在XenServer的环境下,PF 驱动运行于Domain0,VF 驱动运行于DomainU。
  • PF 驱动运行在宿主机并且有访问所有硬件设备资源的权限。PF 驱动的主要功能和职责是创建、配置和管理虚拟设备,即VF。
  • VF 驱动相当于一个普通的网络设备驱动运行在虚拟机,VF驱动只有操作相应VF 的权限。VF 驱动的主要功能和职责是在虚拟机和VF 之间直接完成I/O 操作,包括数据包的发送和接收。由于VF 并不是真正意义上的PCIe 设备,因此VF 也不能像普通的PCIe 设备一样(如PF)被操作系统直接识别并配置。
  • SR-IOV 管理器运行在宿主机,它为所有的VF 创建了一个虚拟的配置空间,使得宿主机操作系统可以正确的识别并配置VF。在VF 被宿主机正确的识别和配置之后,它们才能被分配给虚拟机,然后在虚拟机操作系统中被当作普通的PCI 设备初始化和使用。

1404.PNG
如图,SR-IOV 以太网控制器包括了一个内置的链路层交换机,一个PF 和多个VF。


1.3.SR-IOV技术运行原理

进入网卡的数据包首先经过链路层交换机,并被根据MAC 地址和VLAN 标签进行分类,从而确定数据包对应的目标VF。然后数据包被直接传输到该VF 对应虚拟机的接收缓冲区等待处理,这一步骤通过DMA 技术实现。在DMA 的过程中,IOMMU承担了把虚拟机缓冲区内存地址翻译成机器物理地址的任务。在数据包传输完成之后。当SR-IOV 网卡收到新数据包时,会向虚拟机监视器发起一个中断信号(在虚拟化环境下,硬件设备需要和CPU或者内存通信,都需要发送中断信号,其运作模式和传统的操作系统并无区别),虚拟监视器收到网卡发送过来的信号之后,截取该中断信号。然后虚拟机监视器将该中断信号进过一定的处理,给对应的虚拟机发送一个虚拟的中断信号,虚拟机在收到虚拟机监视器给他的中断信号后,虚拟机操作系统调用VF 驱动中的中断处理程序,中断处理程序通过发起NAPI 轮询来处理到达数据包。
NAPI(New API)是Linux 内核提供的网络驱动接口,用于配合网卡的中断聚集技术使用。,中断聚集技术就是使用一个中断来通知处理所有的数据包,不再一个数据包一个中断,这个技术的好处就是节省了CPU等系统的资源,不让其老是处于中断状态浪费系统的资源。NAPI 技术合并了两种接收数据包的方法:中断和轮询。
在SR-IOV中,VF采用了NAPI 接口的网络驱动,其工作模式是这样的:首先驱动处于中断模式;当中断到来的时候,驱动转换为轮询模式并且中断被屏蔽;在轮询模式,驱动开始处理数据包直到所有数据包都已经被接收;然后驱动再次转换为中断模式,解除对中断的屏蔽。

1.4.使用SR-IOV技术所需条件

SR-IOV的性能在目前的I/O虚拟化环境下是最好的,但是需要一系列的支持,包括网卡、服务器、VMM、CPU等。
  • 网卡:现目前来说,市面上就2家公司的网卡支持SR-IOV的技术,即Intel和EMULEX Corporation。Intel支持SR-IOV技术的网卡可以访问以下网址进行查询:http://www.winyao.com/news_info.asp?id=232
  • 服务器:必须支持输入/输出内存管理单元 (IOMMU),并且必须在 BIOS 中启用 IOMMU。必须支持SR-IOV,并且必须在 BIOS 中启用 SR-IOV。这需要查询服务器的手册或着咨询服务器厂家。
  • VMM:即hypervisor的支持,现在的主流hypervisor都支持SR-IOV技术,比如XenServer、vSphere、KVM、Hyper-v等。其实就是SR-IOV的PF驱动有没有基于该hypervisor做开发和集成。
  • CPU:配备 AMD 处理器的主机不受SR-IOV 支持,必须配备 Intel 处理器。
  • 虚拟机操作系统:其实操作系统应该也必须算上,因为部分操作系统SR-IOV的VF驱动就没有,你前面的条件满足了这一条不满足也使不了,现在主流使用的操作系统都是OK的。一些低版本的操作系统可能使用就有问题了。


1.5.在XenServer中使用SR-IOV技术

我们在前面的文章中提到过XenServer的两种网络堆栈模式,也给大家简单介绍了这两种模式的架构和工作原理。但是呢这两种都是基于纯软件虚拟的I/O虚拟化,在大规模和高并发的情况下,是无法满足虚拟机的性能需求的。比如你在XenServe上面部署Exchange邮件系统进行大规模并发压力测试的时候,你就会发现,你的网络IO是一个瓶颈。
所以基于这样的需求,我们可以在XenServer上面使用基于硬件的IO虚拟化SR-IOV技术,提高我们Exchange虚拟机系统的网络IO的性能。
  只有 XenServer 硬件兼容性列表http://hcl.vmd.citrix.com/ 上所列的支持 SR-IOV 的 NIC 才支持 SR-IOV 技术,而且该技术仅适用于 Windows Server 2008 来宾操作系统。
1. 在 XenServer 主机上打开本地命令 shell。
2. 运行 lspci 命令以显示虚拟功能 (VF) 的列表。例如:
      07:10.0 Ethernet controller: Intel Corporation 82559 \
      Ethernet Controller Virtual Function (rev 01)
     在上例中,07:10.0 是 VF 的 bus:device.function 地址。
3. 通过运行以下命令为目标 VM 分配所需的 VF:
     xe vm-param-set other-config:pci=0/0000:<bus:device.function> uuid=<vm-uuid>
4. 启动 VM,然后为特定的硬件安装相应的 VF 驱动程序。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表