腾讯云首次披露虚拟化技术发展线路图,看好轻量级虚拟化的潜力

avatar 2020年9月29日13:55:30 评论 66


在云计算中,虚拟化技术、分布式资源管理技术、数据存储技术、网络技术是最为关键的几个基础技术体系。其中,虚拟化作为底层最核心的技术之一,其在高可用、高性能、快速创建等方面的技术指标,甚至直接关系到云计算的商业模式能否成立。

 

虚拟化技术也分为技术流派,其中以 KVM、Xen、VMWare (Virtual Machine ware)等为主流。早在2013年,腾讯云基于对虚拟化技术未来发展方向的判断,放弃当时的主流XEN虚拟化技术,在业界率先拥抱开源的KVM技术,并将其不断演进。

 

近日,腾讯云虚拟化技术负责人陈立东,首次向外界详细披露其在虚拟化技术上的技术演进路线。

 

虚拟化到底是什么?

 

简单来说,虚拟化主要是指服务器资源的虚拟化,即在一台物理机上为一个虚拟机构造一个完整的操作系统的运行环境,再通俗点说,就是“把一台电脑虚拟成N台电脑”。其中,虚拟化的资源包括 CPU、内存、网络和存储几个部分。一般来说,在一个物理机上,通过虚拟化技术可以将多个完整的虚拟机以不同的形式售卖给不同的客户,满足客户定制化的需求。

 

谈到虚拟化技术,这其实并不是一个新鲜的词汇,早在 60年代中期,IBM 就已经有了虚拟化技术。近十多年来,尤其是 2005年Intel 推出硬件辅助虚拟化,也就是在 CPU 指令上支持虚拟化,才让这个技术有了一次重大的发展。

 

最初,虚拟化技术的主流是剑桥大学开发的 Xen。陈立东透露,2010 年腾讯做开放平台时,采用的也是 Xen。之后推出腾讯云公有云产品时,腾讯云选择了 KVM。之所以做出这个选择,陈立东表示,主要的原因是 KVM 技术是一个完全开源且轻量级的技术,内核对其的支持也做得比较好,是后续技术发展的方向。

 

为了解虚拟化技术的作用与意义,我们从一张腾讯的云分布式调度系统 VStation 的整体架构图中来看。VStation 作为腾讯云计算操作系统,承担了资源调度、请求排队的工作。

 

虚拟化则负责为每台 CVM(云服务器(Cloud Virtual Machine))构造出完整的 PC 运行环境,包括 CPU、内存、网络、存储各个部分资源。主要包含 libvirt、qemu、kvm 三部分:

 

  • qemu与kvm构成hypervisor,负责CVM资源的虚拟化,在物理机上,虚拟出一个个完整的PC环境;

  • libvirt负责提供统一对外的接口,用于管理hypervisor。

 

    

图1. 整体架构

 

腾讯云虚拟化技术演进路程

 

据陈立东介绍,在腾讯云的大规模云计算实践过程中,他们遇到一些虚拟化方面的技术挑战,也在不断解决问题的过程中,走出了一条自己的虚拟化技术路线图。

 

挑战一:如何提高云服务器的可用性?

 

第一个挑战体现在可用性方面。随着目前硬件发展的趋势,服务器的集成度越来越高,单台物理机故障对云服务器的影响面越来越大。如何在云上规避物理服务器宕机对虚拟化的影响,是腾讯云面临的第一个挑战。

 

陈立东提到,在腾讯云规模达到一定规模时遇到了一个问题,当时某个游戏客户投诉腾讯云云服务器故障率高,云服务器突然宕机,导致游戏玩家掉线,客户甚至因此考虑迁移到其他云。这给了陈立东团队非常大的压力。

 

通过统计服务器常见的故障原因后,发现在服务器故障中最主要的故障原因是内存故障。当内存发生多 bit UCE错误时,就会导致整个物理机宕机,一台物理机上所有的虚拟机都会随之宕机。

 

然而,问题是内存硬件上本身存在失效率,低概率的发生多 bit UCE 错误是无法完全避免的。为了提升云服务器的可用性,腾讯云采用了多种优化方案,这里介绍其中两个利器:内存高级 RAS 特性MCA recovery 和热迁移。

 

首先是 MCA recovery。为了解决内存故障率的问题,腾讯云联合了 CPU 厂商,包括 Intel,针对腾讯云单独定制 CPU。在定制过程中,腾讯云要求服务器厂商为腾讯云提供一些更高端的 CPU 特性,其中一个叫做 MCA Recovery。

 

之前,如果发生了内存UCE错误,原有的服务器就会直接宕机,但在支持了 MCA Recovery后再发生内存错误时,服务器不会宕机,只会发出警告内存有问题,再由上层决定解决如何处理。

 

腾讯云是首家在数据中心中大规模使用MCA Recovery技术的云厂商,刚开始进展并不顺利。启用了MCA Recovery后,大量的UCE错误并没有成功规避。当时服务器ODM厂商,Linux 内核对MCA Recovery支持并不完善。

 

针对硬件厂商缺陷导致的规避失败案例,腾讯云开发故障注入工具,作为服务器 BIOS BMC 厂商引入标准。针对故障注入进行长时间压力测试,确保硬件厂商都按照腾讯云的标准完成硬件引入。

 

同时,腾讯云还发现了多个 CPU架构优化的案例,通过修改 Linux 内核软件尽量避免触发,大大降低了不可恢复异常的触发概率。同时,腾讯云在CPU厂商的下一代CPU中进行改进优化。

 

对于Linux内核对MCA Recovery的支持,腾讯云也针对性对内核的内存管理模块和KVM进行优化。

 

相关的优化,在腾讯云基于Intel Skylake及其以后代次的云服务器上都以全面落地。

 

除了 Intel,腾讯云还联合 AMD 落地多项内存RAS 特性,结合其他多项硬件可用性优化措施,提升腾讯云AMD云服务器SA2实例的可用性。

目前,腾讯云成为首家在数据中心中大规模使用MCA Recovery技术的公司,通过一系列的软硬件结合优化,腾讯云 CVM 云服务器通过 MCA Recovery 已规避大量的内存 UCE 错误,大大降低了内存故障率,将腾讯云云服务器的可用性做到了业界领先。

 

第二个技术点是热迁移技术

 

支持了 MCA Recovery等高级RAS特性 后,腾讯云当物理服务器出现硬件隐患时,虽然不会宕机,但是已经存在隐患了,需要尽快下线维修。这个时候正在运行的云服务器怎么办?

 

针对这个问题,腾讯云用热迁移技术来解决,可以把云服务器从一台物理机无感知迁移另一台,当一台物理机存在硬件隐患时,把云服务器迁移到另一台正常的物理机上。因此,通过热迁移技术,腾讯云将云服务器的可用性提升到高于物理机本身的可用性。

热迁移示意图

 

在大规模落地时,热迁移的难度体现在两个方面,一个是热迁移的成功率,如果热迁移所以来的服务器负载过高,则热迁移可能失败,为了提高热迁移的成功率,腾讯云使用了包括RDMA 在内的多个热迁移优化,将热迁移成功率从原来的 70% 提升至 99%;第二个难点在于尽量减少热迁移的停机时间,目前腾讯云可实现在 50 毫秒以内的热迁移停机时间,基本上可以达到无感知的水平。

挑战二:如何降低虚拟化带来的损耗?

 

第二个挑战是,虚拟化在同一个物理机虚拟多个虚拟机带来灵活性,但同时虚拟化本身会有一些性能损耗,业务希望虚拟化技术要保证性能与物理机相匹配,尽量减少虚拟化的损耗,这也是虚拟化技术面临的很大的挑战。

 

在降低虚拟化性能损耗上,陈立东以腾讯内部自研上云的过程举例。项目启动不久,微信同事在测试时反馈其中一个模块性能下降超过 30%。为此,腾讯云投入了多个资深开发工程师进行分析,共做了 7 轮优化,最终将 KVM 的虚拟化损耗降低到 5%。

针对 Linux 子机场景,腾讯云也做了一些与 KVM 虚拟化本身结合性的性能优化,对外推出了腾讯的 Linux 的发行版 Tencent Linux,目前已经开源。

 

另外,腾讯云还针对 Windows 子机进行了大量优化,逆向分析Windows内核逻辑,专门优化了 KVM 对 Windows内核的支持,大大提升了 Windows 云服务器在腾讯云上的性能。

 

挑战三:如何提升虚拟化的稳定性?

 

第三点挑战是在虚拟化后,包括 CPU 和内存都多出一个虚拟化层。业务希望虚拟化需要和物理机一样的稳定性,满足业务对响应延时的极致追求。

 

除了一些性能测试工具跑分的峰值性能,腾讯云更注重性能的稳定性和业务的实际体现。

 

陈立东提到,Linux本身的内核度算法是CFS,但是分析了以后,Linux本身的CFS调度算法并不适合完全满足虚拟化场景的需求,因此腾讯云针对虚拟化场景,自研了一套Linux内核的调度的算法,在内部称之为VMF。这套算法的核心思想要保证虚拟机的任务要优先执行。通过该技术,腾讯云将虚拟化场景下的调度延时做到和物理机持平的稳定性。

 

挑战四:如何快速交付?

 

第四点就是交付的效率,使用云后,客户希望尽可能快速地获得大量计算资源,如何为客户提供秒级交付体验也是一个挑战。

 

早期腾讯云的客户反馈GPU机型,购买后启动比较慢,需要等几分钟后才能启动,影响使用体验。虚拟机启动的时候,提前分配并锁住全部的虚拟机内存,而虚拟机内存越大,启动就越慢。这给用户带来非常糟糕的体验,当时也是所有云厂商都存在的一个问题。

 

在优化前,一台700G规格的一个虚拟化启动,在之前启动需要大概270秒,优化以后,将其启动时间缩短了22秒,大大提升了用户的体验,腾讯云将相关的优化补丁已经贡献到了社区。

 

轻量级虚拟化是未来发展方向

 

从腾讯虚拟化技术的演进路线中,可以看到虚拟化技术当前存在的一些技术难点与热点,希望对云计算开发者带来一定的借鉴意义。

 

最后,陈立东还谈到了虚拟化技术未来发展的趋势和方向。他认为,虚拟化将来一个很大的发展方向就是轻量级虚拟化,而要实现这一点需要要把虚拟化层做得尽量简单,从而降低损耗。

 

“总的来说,要实现把物理资源进行拆分的情况下,尽量减少虚拟化的损耗,这对整个底层的挑战还是非常大的。”陈立东指出。

 

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: