NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

热迁移、RTC 计时与安全加固…腾讯云 KVM 性能优化实践验谈

  • 2017-11-13
  • 本文字数:2884 字

    阅读完需:约 9 分钟

前不久,KVM Forum 大会发布了 2017 年最新 KVM 开源贡献榜,腾讯云因其向 KVM 内核贡献了 46 个 patch,成为全球唯一一家上榜的公有云厂商。据了解,这些补丁大多是腾讯云在实战过程中的经验总结,主要用于改善和解决 KVM 虚拟机在热迁移,时钟计时、嵌套虚拟化等方面的使用问题以及修复一些安全漏洞。

在开源的所有 patch 里,比较引人注目的是,腾讯云率先采用快速写保护、共享脏页位图、优化热迁移块大小等一系列方式,优化热迁移效率以及提升热迁移成功率。那么,它的虚拟机热迁移过程和具体方法是什么?腾讯云又如何看待 KVM 技术开源?KVM 现在面临着哪些新的挑战?带着这些问题,InfoQ 采访了腾讯云高级工程师肖光荣,就腾讯云的 KVM 开源技术与开源思路做了简单交流。

InfoQ:简单阐述一下 KVM 虚拟化技术以及 KVM 和云计算的关系?

肖光荣: KVM 是 Kernel-based Virtual Machine 的简称,KVM 要求 CPU 支持硬件虚拟化技术(如 intel VT 或 AMD-V),是 Linux 下的全虚拟化解决方案。KVM 由处于内核态的 KVM 模块和用户态的 QEMU 两部分构成。内核模块实现了 CPU 和内存虚拟化等决定关键性能和核心安全的功能并向用户空间提供了使用这些功能的接口,QEMU 利用 KVM 模块提供的接口来实现设备模拟、 IO 虚拟化和网络虚拟化等。单个虚拟机是宿主机上的一个普通 QEMU 进程,虚拟机中的 CPU 核(vCPU)是 QEMU 的一个线程,VM 的物理地址空间是 QEMU 的虚拟地址空间(图 1)。

vCPU 线程经过 KVM 模块提供的系统调用进入到宿主机内核态,在内核态切换到 CPU 的非根模式,即 guest 模式,此时虚拟机内的 CPU 获得宿主机 CPU 资源,得以执行。在 guest 模式中,遇到敏感指令无法直接执行,或者有特定的内部异常和外部中断产生,vCPU 会退出到根模式由 KVM 内核或 QEMU 来模拟执行(图 2)。

KVM 虚拟化技术是当前云计算中计算虚拟化的主流技术,是云计算的核心底层能力,使用 KVM 把多台物理机虚拟化后,组成一个大的虚拟资源池,方便用户从资源池中按需分配计算能力,提升资源的使用效率,同时保证多用户资源之间的隔离性、安全性。

InfoQ:腾讯云此次向 KVM 社区贡献的 46 个 patch 主要解决了哪些问题?

肖光荣:这 46 个 patch 是我们在实战过程中的经验总结,用于改善和解决 KVM 虚拟机在实际运营过程中遇到的一些问题,这些 Patch 主要应用在以下三个方面:

  • 时钟方面重构 KVM 的 RTC 计时框架。让 windows 虚拟机的时钟系统在时钟频率频繁调整的情况下保持精准。重构 KVM LAPIC Timer 的模式切换和频率调整的模拟,使其完全与硬件行为保持一致。优化 KVM LAPIC Timer 时钟中断注入的延迟。发现并解决了使用硬件辅助的 VMX Preemption Timer 模拟的 KVM LAPIC Timer 时的各种抢占问题。
  • 嵌套虚拟化方面重构异常注入的逻辑。解决了嵌套虚拟化下异常丢失的问题。添加异步缺页异常 (Async Page Fault) 在嵌套虚拟化下的支持。这些问题的解决,使得嵌套虚拟化更加稳定和高效,可以让更多的用户在不导镜像的情况下,将业务迁移上云。
  • 修复 KVM 将宿主机信息外泄的问题。修复 KVM 在模拟 CPUID 指令和处理虚拟机设备访问时,意外地将宿主机上的内存泄露到虚拟机。

InfoQ:腾讯云在虚拟机热迁移技术上有比较明显的突破,能否讲解一下虚拟机的迁移过程以及腾讯云如何提升热迁移性能?

肖光荣:虚拟机热迁移是一项非常重要的技术,热迁移可以在用户几乎无感知的情况下将虚拟机从当前宿主机迁到另外的宿主机,热迁移主要用于解决一些软硬件不可逆场景下的虚拟机可用性问题,如:宿主机硬件批次性隐患、宿主机内核内存泄漏等。腾讯云内部大量地使用热迁移来提升虚拟机的可用性,从近一年的统计数据来看,已经做到虚拟机的可用性大于物理机。

虚拟机的热迁移主要有下面几步:

  • 在目标宿主机上准备虚拟机运行环境,如挂载共享存储,创建虚拟网络等;
  • 从源宿主机建立到目标宿主机的连接,用于传输虚拟机的状态,比如内存;
  • 源端需要捕捉内存的更改并记录在内存传输过程中有哪些页面被改动,这些脏页需要在下一轮迭代中继续传输;
  • 传输全量内存;
  • 本轮内存传输完毕后,如果剩下的脏页数量能在设定的停机时间内传输完毕,那么将虚拟机停机,否则继续传输脏内存,直到脏内存的量收敛到可以在预定时间内传输完成为止;
  • 传输余下的脏内存,以及停机时 CPU 寄存器和各个子系统的状态;
  • 此时源端和目标端的虚拟机状态完全一致,在目标端让虚拟机恢复运行,迁移完毕。

如上所述,源端需要去捕获内存的更改,在当前的环境下是采用写保护和脏页位图的方法,即先把内存全部变为只读,在虚拟机写内存时就会产生异常被 KVM 内核模块捕获并且记录到脏页位图,该脏页位图最后被复制到 QEMU,据此 QEMU 能知道哪些内存被更改。

对于脏页内存的捕获,我们主要通过两大方式提升热迁移效率:1)采用快速写保护算法,该算法是无锁的并且算法复杂度为 O(1),这就意味着它的性能与虚拟机的内存大小和工作负载无关。2)采用 KVM 内核模块和 QEMU 共享脏页位图的方法,实现零拷贝以及减少用户态和内核态的上下文切换。

另外在迁移脏块的时候,针对子机内部 IO 性能下降的问题,优化热迁移块大小,避免传输无用数据,提升热迁移成功率。当然,腾讯云还有很多其他提升热迁移性能和稳定性的优化方法,在此就不一一列举了。

InfoQ:腾讯云如何看待云厂商们对 KVM 开源的贡献和支持问题?

肖光荣:腾讯云一直秉承开放,共享的心态参与开源,凭借庞大的用户群和 KVM 集群规模,腾讯云在 KVM 虚拟化上做了深入的研究和丰富的实践。腾讯云自 2017 年 5 月加入 Linux 基金会以来,更加大了回馈社区的力度。在 KVM 内核领域,已经是贡献度最高的公有云厂商。

过去,大型开源项目一直鲜见中国大型企业的身影,所以开源界一直诟病中国企业只索取不贡献,作为公有云的一线厂商,我们希望通过实际行动转变开源界的看法。

当前 KVM 虚拟化技术是各家云厂商使用的主流虚拟化技术,腾讯云有一个专门负责做开源的团队,该团队一方面将持续创新以来解决腾讯云线上遇到的各种挑战并且将产出反馈给社区,另一方面探索云计算领域的新技术,做好前沿技术的预演和积累。同时我们也希望各大云厂商加大对 KVM 项目的投入,积极参与到社区,共同应对新硬件,新架构给 KVM 带来的挑战。

InfoQ:KVM 技术现在面临着哪些新的挑战?

肖光荣:一方面,Intel 不断推出新 CPU 架构:haswell、broadwell、skylake 到 cascadelake,网络带宽从 10G 到 25G 再到 100G,更新的硬件架构,更高的网络带宽需要更高效的虚拟化才能将硬件的性能充分发挥。另一方面,GPU、FPGA 在 KVM 上的虚拟化、池化有待突破,否则 GPU、FPGA 的整体利用率无法提升。虚拟机网络性能一直是虚拟化的短板,利用智能网卡等技术可以将网络性能做到和物理机旗鼓相当,但同时也让热迁移变得困难。

嘉宾介绍

肖光荣,腾讯云开源团队负责人,操作系统专家。肖光荣在 Linux 内核、KVM 社区工作近十年,是 Ftrace, MM, Networking 等子系统的活跃贡献者。近几年主要工作在虚拟化领域,是 KVM 的核心开发者,Virtual NVDIMM 子系统的维护者。肖光荣向社区提交了大量 Patch,在华人内核贡献者中排名 Top 15,在内核和 KVM 社区拥有巨大影响力。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2017-11-13 21:013175
用户头像

发布了 24 篇内容, 共 99471 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

专利解析|混合缓存技术在元年多维库中的应用

元年技术洞察

数据分析 多维数据库

Linux下automake工具使用(自动构建Makefile文件)

DS小龙哥

10月月更

你从未见过如此详细的 TCP 八股文!

C++后台开发

TCP 网络编程 网络协议 八股文 C++开发

十大 CI/CD 安全风险(二)

SEAL安全

DevOps CI/CD DevSecOps CI/CD管道 软件供应链安全

别按部就班的背面试题了!吃透这份Java面试核心知识手册,大环境不好Offer也能拿到手软!

Java全栈架构师

程序员 面试 程序人生 架构师 Java后端

Bug改不完,迭代总延期,咋办?

华为云开发者联盟

开发流程 bug 迭代 瀑布开发 企业号十月 PK 榜

Python进阶(十二)浅谈python中的方法

No Silver Bullet

Python 方法 10月月更

用了这个API协作调试工具,忘记了postman

Liam

Postman 接口调试 开放api API接口 API调试

Linux下文件目录权限操作

DS小龙哥

10月月更

Linux下Shell脚本基础语法

DS小龙哥

10月月更

5分钟,带你创建一个智能电梯检测器模型

华为云开发者联盟

物联网 华为云 iotda 智慧电梯 企业号十月 PK 榜

IT人士必须警惕这9个信号:说明你的IT架构很糟糕

雨果

数据管理工具 数据服务平台

Linux下基础命令(二)

DS小龙哥

10月月更

阿里内部手写的Spring Security,真的香啊

小二,上酒上酒

spring spring security

挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践

Apache DolphinScheduler

大数据任务调度 任务调度 dophinscheduler 大数据调度

SchedulX V1.7.0更新,规格压测、成本洞察等重磅功能发布!

星汉未来

云原生 降本增效 星汉未来

数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)

墨天轮

MySQL 数据库 oracle 故障定位 国产数据库

Gartner:被CIO们忽略的7个颠覆性趋势

雨果

CIO

JFrog Xray 与 Amazon Security Hub 集成

亚马逊云科技 (Amazon Web Services)

安全 DevSecOps

有人想用开源工具DBT取代 SQL,你同意吗?

雨果

sql

爆火的RPA尚在初期阶段,拥挤的赛道厂商如何突围?

ToB行业头条

Flowable 任务如何认领,回退?

江南一点雨

Java springboot workflow flowable JavaEE

String、StringBuffer、StringBuilder的区别

zarmnosaj

10月月更

什么是深度学习?人工智能能影响未来的特点之一

Finovy Cloud

人工智能 深度学习

融云实践:主流叙事之外,科技如何助力民生改善

融云 RongCloud

数据 服务 科技

向量数据库是如何检索的?基于 Feder 的 IVF_FLAT 可视化实现

Zilliz

人工智能 可视化 向量检索 anns 以图搜图

数字化转型案例解读:德意志银行数字化转型背后的故事

雨果

数字化转型

驱动企业数字化转型 低代码平台需要具备哪些能力?

力软低代码开发平台

网易数帆数据治理2.0实践分享

网易数帆

大数据 数据中台 数据治理 数据质量 企业号十月 PK 榜

阿里高工携18位架构师耗时两个月整合1000页的Java岗面试八股文

程序知音

Java 架构 java面试 后端技术 Java面试八股文

如何使用华为云IoT平台实现远程控制无人机,资深物联网从业者手把书一步一步教你!

wljslmz

物联网 IoT 无人机 华为云 10月月更

热迁移、RTC计时与安全加固…腾讯云KVM性能优化实践验谈_DevOps & 平台工程_江柳_InfoQ精选文章