目录

前言列表

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. #二分,哈希 or dp#洛谷 4398 [JSOI2008]Blue Mary的战役地图

    题目 求两个正方形矩阵的最大公共正方形矩阵边长 分析 第一种就是\(dp\): 设\(dp[x1][y1][x2][y2]\)表示第一个正方形矩阵以\((x1,y1)\)为右下角, 第二个正方形矩阵以 ...

  2. OpenHarmony加速行业应用落地,多款软件发行版正通过兼容性测评

    4 月 25 日,OpenAtom OpenHarmony(以下简称"OpenHarmony")技术日在深圳举办,大会聚焦 OpenHarmony 3.1 Release 版本核心 ...

  3. 【版本发布公告】HMS Core6.5.0来啦

    新 能 力 3D Engine 3D Engine提供高性能.高画质.高扩展性的实时3D引擎,并提供便捷高效的可视化开发工具.开发者可基于华为的3D Studio开发工具,通过图形和渲染.动画.UI等 ...

  4. pip提示升级pip版本

    今天在进行pip安装库的时候发现下面出现一段黄色的字体,如下图: 自由翻译: 大概意思就是说我现在安装的pip的版本是 20.0.2,最新版本是 20.1,希望我可以更新到最新的版本,并告诉了我怎么安 ...

  5. Zookeeper+dubbo学习笔记

    举个例子 你需要打车 那么会使用滴滴软件,而滴滴软件就类似于Zookeeper,  你和汽车司机都需要在滴滴公司注册(留下联系方式方便联系), 当你需要打车时Zookeeper会帮你找到你需要的汽车司 ...

  6. Stage模型深入解读

     原文链接:https://mp.weixin.qq.com/s/4Mb5BMw1IgKvqE0Ff9Ts-w,点击链接查看更多技术内容:   HarmonyOS 3.1版本(API 9)推出了全新应 ...

  7. 日志分析qsnctfwp

    使用工具:http Logs Viewer 使用 http Logs Viewer 载入 access.log 按照 Status 排序 其中大量 Status 为404的日志不难推断出,这是在进行目 ...

  8. 基于openstack安装部署私有云详细图文教程

    本文主要分享的是云计算.openstack的使用.私有云平台建设.云服务器云硬盘的构建和使用.从基本概念入手到私有云建设,信息量非常大.对于openstack的安装部署都是从官方文档中一步步的介绍,内 ...

  9. Linux系统中查找文件的方法

    -name 必须用到的选项.表明要求系统按照文件名查找. 一般格式:find /(dirname) -name filename 具体文件名查找法: 如果知道了某个文件的文件名,而不知道这个文件放到哪 ...

  10. mm系列权重文件瘦身

    瘦身脚本: (会在resnet50.pth文件的同级目录下生成一个resnet50_thin.pth) import os import torch root_dir = os.getcwd() de ...