目录

前言列表

SR-IOV 网卡虚拟化技术

启用 SR-IOV 解决 Neutron 网络 I/O 性能瓶颈

前言

NOTE:本文主要参考了国防科技大学计算机学院的论文《基于SR—IOV的IO虚拟化技术》(编号:1005—1228(2010)05-0001-05),以及中兴通讯的专利《实现SR-IOV网卡的方法和装置、实现动态迁移的方法和装置》(编号:CN201510646047.X)。

OpenStack 中,虚拟机对 SR-IOV 的使用可以分为两种模式:

  • Indirect mode(间接模式):通过 macvtap 层来进行转接,支持 Hypervisor 层面的热迁移,但性能会损失(20%-30%)。
  • Direct mode(直接模式):即 Pass-through,不支持 Hypervisor 层面的热迁移,好处是性能几乎没有损失。

本文主要描述这两种模式的实现方式,以及验证在 Train 版本中官方给出的 Workaround 热迁移 SR-IOV Pass-through 虚拟机的方法,最后再讨论一下中兴支持的 SR-IOV Pass-through 虚拟机热迁移的实现方式。

SR-IOV Pass-through 虚拟机热迁移的问题

首先明确一个热迁移的概念,KVM 虚拟机热迁移并不是单纯的 重新创建 了一个一模一样的虚拟机,而是在 Hypervisor 层采用了类似于 从挂起状态到运行状态 的状态转换方式,即:使用系统盘在目的节点启动虚拟机时,并不存在 GuestOS 启动的过程,只是纯粹的启动了 Guest,这就意味着虚拟机在源节点上的所有配置与状态都会在目的节点上重现。所以,从 vNIC 的角度来看,虚拟机从源节点迁移到目的节点的整个过程中,都不存在向 DHCP 获取 IP 地址的动作。

而正是这一合情合理的实现原则,导致了 SR-IOV Pass-through 虚拟机无法进行热迁移。这需要从 Pass-through 所采用的技术 Passthrough I/O 说起。

Passthrough I/O 是一种硬件辅助的 I/O 虚拟化技术,对于 Xen 或 VMware 支持的纯软件实现的 I/O 虚拟化技术而言,显然具有性能上的优势。但缺点也很明显就是需要硬件的支撑。Intel 和 AMD 都在 CPU 架构中提供对 Passthrough I/O的支持。Intel 将这种支持称为 VT_d(Virtualization Technology for Directed l/O),AMD 称之为 IOMMU(I/O Memory Managemnt Unit)。这种技术的 Host CPU 能够将 PCI 设备的物理地址映射到 Guest 中。当这种映射发生时,硬件将负责访问和保护,GuestOS 像 HostOS 一样可以直接使用该设备。除了将 Guest 映射到物理内存外,还提供隔离机制,以便预先阻止其他 Guest(或管理程序)访问该区域。

简而言之,Passthrough I/O 就是将分配给网卡 DMA 的物理地址给到了 Guest,Guest 就可以直接访问这个物理地址来接收和发送数据报文。那么,显然的,使用了 Passthrough I/O 的 Guest 就不再是 “无状态” 的 Guest,它具有一个 Host 物理地址与 Guest 虚拟地址的映射表。也正是这一 “状态” 注定 Guest 无法随意的进行迁移。必须执行网卡 Detached 再 Reattach 的过程(重新建立地址映射表)

这就是 SR-IOV Pass-through 虚拟机热迁移的难题。表现到实际的现象就是,对 SR-IOV Pass-through 虚拟机执行热迁移完成后,需要登录到 GuestOS 上手动的执行 ifup <vnic> 指令,然后再获取到 IP 地址。这个过程中,网络流量肯定是断掉了。

基于 macvtap 层的 SR-IOV 虚拟机热迁移

计算机科学的名言之一就是:所有的问题都可以通过添加一个新的层来解决!SR-IOV Pass-through 虚拟机热迁移的问题亦然。基于 macvtap 层的 SR-IOV 虚拟机热迁移就是这样的一个 “解决方案”。



既然 SR-IOV Pass-through 到 Guest 会产生 “状态” ,那么将 “状态” 转移到别的地方不就好了吗?macvtap 层(Virt NIC-FE、Virt NIC-BE、macvtap)就是这般的存在。VF 的 Detached 再 Reattach 的过程在 macvtap 层完成,并且由 Hypervisor 来完成 Detached 再 Reattach 管理。对于虚拟机而言,依旧是 “无状态” 的,可以任意迁移。这就是基于 macvtap 层的 SR-IOV 虚拟机可以进行热迁移原因。

但严格来说,这并不是一个解决的方案,因为根本问题(“无状态”)没有被解决,而是通过一种方式来转移了,是一种中庸的实现。引入 macvtap 层的缺点就是 20%-30% 的性能损失,因为 macvtap 是一个内核态设备,需要进行内核协议栈的处理,这就意味着内存拷贝、上下文切换以及 Cache Miss 等等数据面转发的性能问题

Workaround SR-IOV Pass-through 虚拟机热迁移

在 Train 版本中,OpenStack 官方给出了一个 Workaround 执行 SR-IOV Pass-through 虚拟机热迁移的思路(https://docs.openstack.org/neutron/latest/admin/config-sriov.html)。

Live migration support has been added to the Libvirt Nova virt-driver in the Train release for instances with neutron SR-IOV ports. Indirect mode SR-IOV interfaces (vnic-type: macvtap or virtio-forwarder) can now be migrated transparently to the guest. Direct mode SR-IOV interfaces (vnic-type: direct or direct-physical) are detached before the migration and reattached after the migration so this is not transparent to the guest. To avoid loss of network connectivy when live migrating with direct mode sriov the user should create a failover bond in the guest with a transparently live migration port type e.g. vnic-type normal or indirect mode SR-IOV.

操作起来大致有以下步骤

  1. 为 SR-IOV 虚拟机添加一个 normal(OvS)或者 indirect mode SR-IOV(macvtap SR-IOV)的 Port。
  2. 在 GuestOS 中将原有的 SR-IOV Port 与 Step1 添加的 Port 做一个 Bond。
  3. 对 SR-IOV 虚拟机执行热迁移。
  4. 迁移完成后,登录 GuestOS 执行 ifup <vnic> 执行拉起原有的 SR-IOV Port。
  5. 删除 Step1 中添加的 Port。

显然,Workaround 的思路就是使用支持热迁移的 Port 来承接 SR-IOV Port 在迁移过程中的流量

中兴的 SR-IOV 热迁移实现思路

中兴的 SR-IOV 热迁移实现思路和加入 macvtap 层的实现方式类似,本质上是对后者的优化,具体说来主要有以下两点:

  1. 把 macvtap 去掉, 直接对接 VF Driver
  2. 将 Virt NIC-BE 和 VF Driver 移到了用户态

这两点优化,实现了在支持热迁移的同时进一步压缩的性能的损耗。从架构图上看,应该需要对 VirtIO 进行定制开发,还需要实现一个用户态的 vNIC 进程来管理 Virt NIC-BE 和 VF Driver 的 Detached 再 Reattach 流程。

OpenStack 的 SR-IOV 虚拟机热迁移的更多相关文章

  1. kvm虚拟机热迁移

    一.热迁移描述: 相比KVM虚拟机冷迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机热迁移无需拷贝虚拟磁盘文件,但是需要迁移到的宿主机之间需要有相同的目录结构虚拟机磁盘文件,也就是共享存储,本文这部分内 ...

  2. Kvm04 kvm虚拟机热迁移,可视化管理

    目录 1.kvm虚拟机热迁移 1). 冷迁移 修改配置文件,将定义的格式raw,改成qcow2格式! 修改完成,重启服务 2).热迁移 2.Virt-manager管理Kvm虚拟机 1.kvm虚拟机热 ...

  3. 华为云计算IE面试笔记-FusionCompute虚拟机热迁移定义,应用场景,迁移要求,迁移过程

    *热迁移传送了什么数据?保存在哪? 虚拟机的内存.虚拟机描述信息(配置和设备信息).虚拟机的状态 虚拟机的配置和设备信息:操作系统(类别.版本号).引导方式(VM通过硬盘.光盘.U盘.网络启动)和引导 ...

  4. OpenStack 虚拟机热迁移流程图

    目录 文章目录 目录 源计算节点与目的计算节点之间的交互流程 Nova 和 Neutron 之间的交互流程 源计算节点与目的计算节点之间的交互流程 热迁移主要包括三个阶段: pre_live_migr ...

  5. OpenStack之虚拟机热迁移

    这里的环境是centos7版本,openstack K版 1.在各个计算节点设置权限 chmod /var/lib/nova/instances 2.修改各个节点的nova.conf(/etc/nov ...

  6. OpenStack 虚拟机冷/热迁移功能实践与流程分析

    目录 文章目录 目录 前文列表 虚拟机迁移的应用场景 需要迁移的虚拟机数据类型 虚拟机迁移的存储场景 文件存储 块存储 非共享存储 迁移的类型 迁移的方式 执行虚拟机冷迁移 冷迁移日志分析 执行虚拟机 ...

  7. KVM 虚拟机的热迁移

    热迁移:顾名思义在虚拟机不关机的情况下将KVM虚拟机进行迁移 准备工作:两台KVM虚拟机,一台nfs虚拟机,centos7.4系统 主机 IP地址 主机名 KVM01 10.00.11 kvm01 K ...

  8. KVM虚拟机的热迁移---Live Migration

    KVM虚拟机的热迁移---Live Migration: 服务器虚拟化技术是当前的热点,而虚拟机的“热迁移(Live Migration)”技术则是虚拟机的运行状态完整保存下来,同时可以快速的回复到原 ...

  9. KVM 热迁移

    最终我们迁移的目的就是: ·简化系统维护管理 ·高系统负载均衡 ·增强系统错误容忍度 ·优化系统电源管理 热迁移 又叫动态迁移,实时迁移,即虚拟机保存( save )/恢复( restore ):将整 ...

  10. kvm热迁移(4)

    一.迁移简介 迁移分为热迁移和冷迁移,冷迁移是在机器关机的状态下进行迁移,具体操作在之前的博客有体现.热迁移是在机器处于开机状态进行迁移,本次博客主要讲解热迁移. 系统的迁移是指把源主机上的操作系统和 ...

随机推荐

  1. OpenHarmony父子组件单项同步使用:@Prop装饰器

      @Prop装饰的变量可以和父组件建立单向的同步关系.@Prop装饰的变量是可变的,但是变化不会同步回其父组件. 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用. 概述 ...

  2. OpenHarmony—内核对象事件之源码详解

    近年来,国内开源实现跨越式发展,并成为企业提升创新能力.生产力.协作和透明度的关键.作为 OpenAtom OpenHarmony(以下简称"OpenHarmony")开源项目共建 ...

  3. C# 运算符详解:包含算术、赋值、比较、逻辑运算符及 Math 类应用

    运算符用于对变量和值执行操作.在C#中,有多种运算符可用,包括算术运算符.关系运算符.逻辑运算符等. 算术运算符 算术运算符用于执行常见的数学运算: int x = 100 + 50; // 加法,结 ...

  4. 7. The Singular Value Decomposition(SVD)

    7.1 Singular values and Singular vectors The SVD separates any matrix into simple pieces. A is any m ...

  5. 6本值得推荐的MySQL学习书籍(有赠书福利)

    前言 在DotNetGuide技术社区交流群和微信公众号后台经常收到小伙伴们的留言,让我出一期MySQL相关学习书籍的推荐文章.因此,今天我特意为大家精选了 6 本值得推荐的 MySQL 学习书籍,希 ...

  6. C语言 02 安装

    C 语言的编译器有很多,其中最常用的是 GCC,这里以安装 GCC 为例. Windows 这里以 Windows 11 为例 官方下载地址:https://www.mingw-w64.org/ 选择 ...

  7. 实战:如何编写一个 OpenTelemetry Extensions

    前言 前段时间我们从 SkyWalking 切换到了 OpenTelemetry ,与此同时之前使用 SkyWalking 编写的插件也得转移到 OpenTelemetry 体系下. 我也写了相关介绍 ...

  8. vue登录3D效果

    实现的效果 登录动态效果很炫酷,话不多说直接上代码: 组件template <template> <div class="entrance"> <di ...

  9. react中引入css的方式有哪几种?区别?

    一.是什么 组件式开发选择合适的css解决方案尤为重要 通常会遵循以下规则: 可以编写局部css,不会随意污染其他组件内的原生: 可以编写动态的css,可以获取当前组件的一些状态,根据状态的变化生成不 ...

  10. 力扣183(MySQL)-从不订购的客户(简单)

    题目: 某网站包含两个表,Customers 表和 Orders 表.编写一个 SQL 查询,找出所有从不订购任何东西的客户. Customers 表: Orders 表:  解题思路: 需要查询出没 ...