[转帖]IO虚拟化——SR-IOV 原理

io,虚拟化,sr,iov,原理 · 浏览次数 : 0

小编点评

**SR-IOV 的优点:** * 性能:从虚拟机环境直接访问硬件,可以提高性能。 * 成本降低:SR-IOV 功能可以节省资本和运营开销,因为它可以减少硬件的开销。 * 可扩展性:SR-IOV 支持多个VF,可以满足不同虚拟机之间的需求。 * 灵活性:SR-IOV 能够根据实际需求动态调整配置。 **SR-IOV 的关键特性:** * 支持 multipleVF:SR-IOV 支持多个VF,可以为不同的虚拟机提供独立的内存空间、中断、DMA 流。 * 虚拟功能:SR-IOV 支持虚拟功能,可以将物理功能与多个VF关联起来。 * 硬件支持:SR-IOV 支持许多HasAnnotation 设备,包括以太网端口。

正文

摘要: 介绍SR-IOV 的概念、使用场景、VMware 和 KVM 中的配置方法。

第一部分:虚拟化通信延迟:

第二部分:IO 虚拟化

第三部分:SR-IOV

第四部分:Intel网卡在VMware 环境 实现 SR-IOV 需要的条件和配置方法

第五部分:SR-IOV 在Red Hat Virtualization 的配制方法


第一部分:虚拟化通信延迟:

      生产业务中,我们在虚拟化平台中遇到了部分虚拟机在业务高峰的时候,出现高延迟的情况。排查问题的时候,确认了两种情况,

  1. 是Hypervisor 的延迟是正常的;
  2. 是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的前提条件:

  1. CPU 必须支持IOMMU(input/output memory management unit 输入输出内存管理单元)(比如英特尔的 VT-d 或者AMD的 AMD-Vi,Power8 处理器默认支持IOMMU)
  2. 固件Firmware 必须支持IOMMU
  3. CPU 根桥必须支持 ACS 或者ACS等价特性
  4. PCIe 设备必须支持ACS 或者ACS等价特性
  5. 建议根桥和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(Single Root I/O Virtualization,单根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

  1. esxcli system module parameters set  -m ixgbe -p=max_vfs=20,20,0,0
  2. 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:

  1. modprobe -r igb
  2. modprobe igb max_vfs=7

或者在rc.local 中配置:

echo 2 > /sys/class/net/enp14s0f0/device/sriov_numvfs

查看创建的VF

  1.  lscpi | grep 82587
  2.  virsh nodedev-list | grep 0b

2) 将VF分配给虚机

  1. virsh nodedev-dumpxml pci_0000_0b_00_0 >> /tmp/new-i nterface. xml
  2. 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》

</article>

与[转帖]IO虚拟化——SR-IOV 原理相似的内容:

[转帖]IO虚拟化——SR-IOV 原理

摘要: 介绍SR-IOV 的概念、使用场景、VMware 和 KVM 中的配置方法。 第一部分:虚拟化通信延迟: 第二部分:IO 虚拟化 第三部分:SR-IOV 第四部分:Intel网卡在VMware 环境 实现 SR-IOV 需要的条件和配置方法 第五部分:SR-IOV 在Red Hat Virt

[转帖]SR-IOV是什么?性能能好到什么程度?

https://zhuanlan.zhihu.com/p/91197211 SR-IOV是Single Root I/O Virtualization的缩写。 在虚拟机中,一切皆虚拟。比如网卡,虚拟机看来好像有一个真实网卡,但是这个网卡是宿主机虚拟出来的硬件,也就是一堆软件代码而已,没有真实硬件。

[转帖]Flannel 环境搭建与分析

https://switch-router.gitee.io/blog/flanenl/ 介绍 Flannel是CoreOS团队针对Kubernates设计的跨主机容器网络解决方案, 它可以使集群中不同节点上运行的docker容器都具有全集群唯一的虚拟IP地址。 举个例子,在一个由3台主机节点组成系

[转帖]Flannel 环境搭建与分析

https://switch-router.gitee.io/blog/flanenl/ 介绍 Flannel是CoreOS团队针对Kubernates设计的跨主机容器网络解决方案, 它可以使集群中不同节点上运行的docker容器都具有全集群唯一的虚拟IP地址。 举个例子,在一个由3台主机节点组成系

【转帖】47.直接内存

目录 1.直接内存概述2.`IO`与`NIO`对比3.直接内存的`OOM`与内存大小设置 1.直接内存概述 1.直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。 2.直接内存是在Java堆外,直接向系统申请的内存空间 3.Java的NIO库允许使用直接内存,用于数据

[转帖]io 性能指标及其基准测试

https://www.jianshu.com/p/23a956e09b1c 磁盘io性能指标 主要有2个: IOPSIOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,I/O请

[转帖]IO测试工具之fio详解

目前主流的第三方IO测试工具有fio、iometer和Orion,这三种工具各有千秋。 fio在Linux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的IO测试软件,可在没有安装oracle数据库的情况下模拟oracle数据库场景的读写。 如下是在Li

[转帖]IO、NIO、BIO 傻傻分不清吗,让我对象告诉你~~

https://my.oschina.net/jiagoushi/blog/5783304 1、Stream 与 Channel stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层) stream 仅支持阻塞 API,channel 同时支持阻塞、非阻塞

[转帖]IO多路复用的三种机制Select,Poll,Epoll

I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作 select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。 相信大家

【转帖】io_uring vs epoll ,谁在网络编程领域更胜一筹?

简介:从定量分析的角度,通过量化 io_uring 和 epoll 两种编程框架下的相关操作的耗时,来分析二者的性能差异。 本文作者:王小光,「高性能存储技术SIG」核心成员。 背景 io_uring 在传统存储 io 场景已经证明其价值,但 io_uring 不仅支持传统存储 io,也支持网络 i