腾讯云虚拟化:坚定的开源主义者
“只要有足够多的眼睛,就可以让所有问题浮出水面。”
在开源社区,以开源理念的发起者之一、Linux创始人林纳斯·托瓦兹名字来命名的林纳斯定律为不少开发者所共鸣。也正是这种共创共享的精神内核,让开源自1988年发展至今,并逐步成为全球IT软件的重要组成。
根据全球最大开源代码托管平台 GitHub 年度报告数据显示,截至 2019 年 GitHub 托管仓库已有 1.4 亿,2019 年新增仓库 400 万个,创建第一个项目的用户比 2018 年增加44%,130 万开发者对开源做出首次贡献。SourceClear 调查报告指出开源项目已呈现指数级增长趋势,2026 年预计超过 3 亿。
在腾讯云,也有这样一支专门面向开源的小分队:他们深耕云计算的最根本技术之一——虚拟化,并始终以拥抱开源、回馈开源作为使命。
10月29日,在全球虚拟化顶级技术峰会KVM Forum上,2020年全球企业KVM开源贡献榜正式公布,腾讯云再度荣登该榜,其中两项技术方案被评为KVM2020年度核心突破。腾讯云因此也成为国内唯一连续四次登榜的云服务商。
腾讯云两项技术方案获评KVM2020年度核心突破
不止于此,腾讯云目前在KVM开源社区已贡献超过170个patch,超过20个技术特性,其中8个被评为KVM年度核心突破,贡献国内排名第一。也正因为在开源领域的突出贡献,腾讯云已经累计7次受邀在KVM Forum发表演讲。
团队成员说:“之前中国人一直被开源社区诟病,认为中国人总索取,不贡献。我们希望用行动说话,为开源社区贡献真正硬核的好东西,慢慢改变开源社区对中国的偏见。”
探索无人区
KVM是当前云计算中计算虚拟化的主流技术。云服务商通过KVM对物理服务器进行虚拟化后生产出云服务器,用户就能从虚拟资源池中按需购买不同规格的云服务器产品,进而获取对应的计算能力。
然而,当时间回流至2013年,KVM却并不是云计算的“真命天子”。
彼时,腾讯云刚刚从服务腾讯开放平台上的合作伙伴升级为面向社会全面开放。腾讯云虚拟化技术团队正在思考,采用什么样的技术栈,能够保障好更大规模云上用户业务安全性、连续性和稳定性。
业界当时最主流的虚拟化技术是Xen,由剑桥大学开发。不管其他云服务商,还是腾讯内部,Xen都是计算虚拟化的不二之选。可是,Xen的痛点在于,代码过于复杂,当规模达到一定程度后,出问题的几率倍增,且难以把控,最终极有可能给云上用户带来损失。
KVM更像是后起之秀。代码简单清晰,从原理上分析相对Xen具有更好的技术前瞻性。但问题是,它仅有一个初级的社区开源版本,而尚未作为一个主流的技术栈为业界所验证。
是跟随主流还是探索无人区,需要技术团队迅速做出抉择。
经过充分的探讨,腾讯云虚拟化技术团队的选择是KVM。“面对产业数字化的契机,云计算作为产业 互联网 的底层基石,未来一定有巨大的成长空间。Xen大概率不能满足未来大规模应用场景下的技术需要,探索KVM虽然相对来说更加艰难,但这是一条必由之路。”腾讯云资深虚拟化技术专家马文霜回忆起当时的决策过程。
但为了稳妥,团队最开始还只是拿出5%的机器作为KVM的技术试验场,小步快跑。
试验总会充满波折。很快,团队就经历了一次面积较大的KVM 虚拟机宕机事故。好在经过周密的检查,发现这个事故源自于KVM 开源版本里一个小错误,改掉就可以恢复正常。
随后的过程虽然也是问题不断,但经过团队的努力,一个个难关逐步被攻克。团队的技术也在不断进化,包括重构了整套技术逻辑,以及研究出基于KVM的热升级技术,能够在用户无感知的前提下,快速处理一些底层故障。
技术团队合影
这至少证明了,KVM这条技术路线能走通。2014年起,腾讯云云服务器CVM已全部基于KVM技术生产。
值得一提的是,2015年,其他云服务商因为感受到 Xen 的局限性,也开始将虚拟化技术从 Xen 切换到 KVM。此时,腾讯云在KVM技术栈上已经积累两年。
从开源中来,到开源中去
独行快,众行远。
KVM运转起来不代表一劳永逸。初级开源版本没有经过集群验证和海量业务测试,也不能把所有代码路径跑到。在真正的业务应用过程中,需要踩的坑超出想象。
如何在踩坑中让KVM快速成熟起来?腾讯云虚拟化技术团队的答案是开源——借助腾讯的场景把KVM用起来,发现和解决问题,然后把方案开源,从而带动更多开发者关注,更多人发现问题,更多人解决问题,最终实现KVM技术演进的利益共享……
2014年底,一个棘手的问题浮现出来。一些大型 游戏 客户在使用KVM生产出来的云服务器时,经常出现CPU占用率高,抖动很大的情况,用户能感到明显的掉帧。
看代码,复现问题,技术团队发现了中间的规律——游戏类业务需要关联KVM底层的定时器,游戏人数达到一定量的时候,因为一些原因会导致定时器异常。同时,技术团队发现,出现这个问题是因为KVM架构中时间戳计数器的逻辑有bug。技术团队采取现网修复的方式解决了这个问题。
问题得到解决后,技术团队迅速将bug解决的过程写成一个patch提交给社区,经过一系列严格评估,官方认可了由腾讯云团队贡献的第一个patch。
KVM社区确认腾讯云首个patch贡献的邮件
后来,类似的贡献还有,KVM架构中irq路由表的bug修复,解决大存储高负载的场景中虚拟机出现恶性宕机……
2015年,更大的挑战爆发。因为内存存在批次性质量缺陷,基于KVM生产的云服务器故障率飙升。厂商的解决方案是更换内存,但换内存意味着物理服务器需要关机重启。这对于客户尤其是大量的游戏客户来说,显然无法接受。
能不能把虚拟机环境在运行态中直接搬迁至健康的服务器上?KVM架构中的热迁移技术设想给了技术团队启发。可是问题在于,这个技术存在较大的环境依赖,需要结合业务负载、硬件代次等一系列复杂的因素做技术优化,而且没有实践先例。
“没有退路可言,只有死磕。”如今的腾讯云虚拟化技术负责人陈立东,这样形容当时的压力。
没日没夜的几天里,技术团队不断研究热迁移的技术原理,从提升迁移成功率和服务可用性两个维度推理技术方案。终于,在解决了几个关键技术卡点后,团队终于找到了一种能够实现的方案。腾讯云也因此成为第一个大规模运用热迁移技术,解决硬件批次性故障的云厂商。
衍生问题随之而来。这个可能会为腾讯云带来至少一定时间内竞争优势的技术方案,是否还要第一时间开源?团队出现了一些分歧的声音。
“开源应该是一种一以贯之的思想。如果我们这次的热迁移技术方案不开源,也许能够获得一时的竞争优势,但这就会让我们一直倡导的开源价值被摧毁,这并不利于KVM技术的长远发展。”在腾讯云副总裁刘颖的开导下,技术团队很快达成一致,将热迁移技术方案贡献到社区。
这个突破性的贡献也为腾讯云在社区赢得了广泛赞誉。随后的2017年,凭借在这一领域的持续贡献,腾讯云受邀在KVM Forum上发表主题演讲,这也是国内云厂商代表中的首次。
成立专门团队
2016年底,李万鹏加入腾讯云,身份是高级工程师。这个职责需要承担大量的业务开发工作。
因为对开源有着狂热爱好,他每天早上五点起床,利用上班前的时间和周末以及节假日的时间研究KVM开源相关的项目。
“本职工作的压力还是很大,为了避免耽误工作,只能抽业余时间做一些bugfix的工作,虽然价值相对低一点,但也算是对爱好的一种保持吧,这就是腾讯的‘工程师文化’。”与李万鹏保持相同爱好的还有几位同事。
无心插柳柳成荫。李万鹏和几个同事在业余爱好上的坚持,却让腾讯云在2017年第一次登上了KVM全球企业开源贡献榜,这也是榜单上首次出现中国云服务商身影。
2017年,腾讯云首次登上KVM全球企业开源贡献榜
登榜的消息很快传到了腾讯公司高级执行副总裁汤道生那里,他对团队提出了表扬和鼓励。
做出影响力,并得到了领导的肯定,也让技术团队更加坚定,在开源领域的持续投入很值得。“从自身角度而言能提升腾讯云的技术影响力,往大的价值上说也是推动技术进步的一个很好的方式。尤其是对KVM这样一个云计算的关键技术,腾讯云应该有这样的担当。”
这样的想法得到了支持。领导决定,成立一个专注开源的虚拟团队,虚拟团队成员日常工作量减半,留下精力更好地投入到KVM开源方面的工作当中。
“虚拟化和内核的研究还是有很高的门槛,要想在开源这个领域做出成绩,需要更多的人力投入。之前业余时间做,更多就是研究怎么修复bug,成立一个专门的团队,大家有机会攻克一些关键特性。”李万鹏说。
2018年开始,腾讯云陆续向社区贡献技术特性。
那一年,腾讯云提出的PV TLB shootdown、PV IPI方案,对TLB刷新以及IPI进行优化,这些方案能够提升大规格配置虚拟机的性能,降低虚拟化层损耗,使得部分应用场景性能提升达到130%~150%,被列入了当年核心突破。
2018年,腾讯云提交的贡献被列为核心突破
2019年,腾讯云Yield IPI、C-state MSRs、Exitless Timers方案再次对IPI和Timer进行进一步优化,3个方案再次被评为2019年度核心突破。值得一提的是,2019年腾讯云还推出35ms内启动一台虚拟机的轻量级虚拟化技术,创造了业界目前能最快启动一台虚拟机的记录。
2019年,李万鹏受邀参加KVM大会演讲
团队也吸引了越来越多的人加入,同样热爱开源的李海伟就是其中之一。
“业界做开源通常都是零散的组织,像腾讯云一样专门有虚拟团队的并不多,这正是吸引我的原因。 ”李海伟表示,专门的组织最大的好处是能够建立好的氛围,成员传帮带,大家的视野也可以更广,而且能有比较充裕的时间和精力去做一些高价值的技术突破。
2019年8月,这个组织更进一步。腾讯云产品团队的架构调整时一封专门的邮件,将李万鹏、李海伟等划在了一个部门,部门职责是:1.将经过业务实践验证的技术方案持续贡献到社区;2.将社区里好的技术特性落地到业务中实践验证;3.探索KVM技术新方向和难点问题的攻坚……
自此,KVM开源团队,成为了一个全职部门。
瞄准行业最痛的问题
2020年,针对IPI(处理器中断)和Timer(定时器)这两个业务场景中出现频次最多、性能影响最大以及最难克服的难题,腾讯云提出了快速处理的框架, 绕过虚拟化开销,使得IPI和Timer处理的性能提升分别有30%和16.5%,再次被评为年度KVM核心突破。
除此之外,针对大规格虚拟机(多CPU和大内存)场景中性能下降明显的问题,腾讯云经过深入研究和探索,自主设计了完全支持CPU并行化的vMMU方案,克服了KVM原有设计中CPU执行被迫串行化带来的性能损失,实现了虚拟机内存管理机制的架构升级。目前,该方案已经在腾讯云稳定运行,并已经贡献给开源社区。
另外,针对操作系统中元数据对内存资源占用过高的问题,腾讯云设计了全新的文件系统Dmemfs(Direct Memory File System), 可以直接管理部分系统预留的虚拟机内存服务,提高系统的资源利用率降低平台成本。这个方案不仅提高了系统的资源利用率, 能够降低平台成本并最终让利于用户,同时也给系统开销降低提供了一种新的思路。目前,这一方案也被贡献到了开源社区。
“腾讯云现阶段在KVM开源方面聚焦的就是行业最痛点的问题,一方面通过持续创新解决腾讯云线上遇到的各种挑战并将产出反馈给社区,另一方面探索云计算领域的新技术,做好前沿技术的预演和积累,坚定不移地持续为虚拟化开源社区做出贡献。”陈立东表示。
另一个更大范围的数据是,截至2020年3月,腾讯共对外开源110个项目,包含腾讯云、 微信 、大数据、游戏、AI、安全等领域,并覆盖所有BG(事业群)。
腾讯累计在GitHub获得了约32万Star(代表项目受欢迎程度),在GitHub全球开源企业Star数排名中位居全球前十。目前,腾讯已加入Linux、Apache等9大开源基金会,深度合作成为最高级别会员,并向开源基金会捐赠多个优质开源项目。
“生于开源,长于企业,反哺开源,腾讯云希望实现这个良性循环。”刘颖说。