我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱

我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱

 

9 月 17 日,在 2021 中国信通院主办的 2021 OSCAR 开源产业大会上,腾讯云虚拟化资深研发专家李万鹏凭借在 Linux 内核 KVM 子系统的长期及突出贡献,荣获“开源先锋人物”奖。腾源会也第一时间采访了李万鹏,以求向开源爱好者们传递这位开源达人成长背后的感悟及点滴。

 

2019 年 8 月 9 号,对于李万鹏来说,是一个不同寻常的日子。

 

那天早上,来自 Paolo Zonzini(KVM 总体维护者)的一封邮件让他久久不能平静。邮件中赫然写着的,“Formalize this by listing them as reviewers. I am including people with various expertise:……Wanpeng for LAPIC and paravirtualization”,意味着从此,他的身份里又多了一个新的“头衔”——Linux 内核 KVM 子系统 Reviewer。

 

寥寥一句,不仅是对李万鹏从 2012 年投入开源社区和开源贡献开始 7 年来的认可,更让他感慨和念想自己前 7 年的成长……仿佛一切像“苦尽甘来”。

“那一刻我真的有些激动”,李万鹏说。

 

我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱

我的开源前半段,是一段“虐心”之旅

李万鹏是腾讯云虚拟化产品中心的一名工程师,现负责腾讯云虚拟化开源技术的开发和社区工作。和标准程序员类似,他不擅长言语。“有点无聊,更不是个有趣的人”,是他对自我性格的总结。而在其腼腆内敛的表达下,你很难联想到这个“普通人”背后所拥有的光环:Linux 内核 X86 KVM 子系统的 5 位核心 Reviewer 之一,Linux 内核全球华人贡献排名 Top 26……

 

但这些头衔,的确就是他 9 年开源之路的烙印。

 

9 年里,李万鹏累计给 Linux 内核及社区贡献了 395 个 Patches、20 多 Features(技术特性)。2015 年到 2021 年,他的 12 个 Features 被 KVM FORUM 纳入年度核心突破——对于全球参与 KVM 贡献的开发者来说,相当于占据了 1/5 的成果。

 

不过,李万鹏这一路并非一帆风顺。在 2015 年前,他也经历过一段长时间的蛰伏期。回忆起那几年参与开源的成长历程,他用的词最多的是:“虐心”。

 

2010 年,还在读大二的李万鹏就开始钟情于 Linux 嵌入式开发。“我那会儿满脑子想着:如果有一天,这个庞大的系统中能有我的 Patch 该有多好”。于是,潜水专业论坛、检索学习文献、分析内核代码、撰写技术博客,成了他学习之余最大的乐趣。大学期间,李万鹏在自己的 CSDN 专家博客上发表了很多篇帖子来分析 Linux 内核中的技术。2012 年,他的一篇帖子成功吸引了当时身在 IBM 中国区团队的黑建龙(现腾讯云架构师)的关注,随后,黑建龙将李万鹏内推到了 IBM LTC(Linux Technology Center)部门。

顺理成章的,2012 年,大四毕业的李万鹏拿到了那个时候令人艳羡的一份 offer,并随即加入了 IBM LTC 团队。6 月 9 日,他小试牛刀地提交了人生中的第一个 Patch——修复 Linux 内核中的注释错误。

 

我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱

图注:第一个 Patch,修复内核中的注释错误

 

但不久,小插曲发生了。“在提交的 Patch 没那么完善、价值没那么大的时候,一些大佬们的脾气就会特别不好”,李万鹏回忆说。

 

在这种压力下,他给自己“闭关”了大半年时间。那个时候他内心非常煎熬。煎熬的原因不是要遭受大佬们艰涩的“质疑”,而是对参与开源这件事的不甘与挣扎。

 

这种处境直到 2013 年春节才有所变化。

那年春节,李万鹏没有回家,几个日夜都泡在公司大楼里。借着新项目中的一个技术点,李万鹏终于想通了困扰自己和团队许久的问题——如何解决“内存压缩过滤掉全 0 页面”。当天他就把这个 Feature 提交到了社区,社区接收了。想起那个场景,他非常兴奋,“当时我们办公室里还有一个老外和一位很资深的同事,一开始他们还不相信社区能接收”。

 

这个事情在李万鹏的印象里很深刻。而后的两年时间里,他一直寻找着自己开源生涯中的晋级与突破,其中也包括 2014 年加入 Intel OTC(Open Source Technology Center)虚拟化团队。

 

“可以完完全全把虚拟化开源当作一份工作来做”,是他选择背后的重要原因。有了更长的专注时间,李万鹏得以逐渐对计算虚拟化当时的痛点问题如虚拟化开销和性能,有更多的理解、尝试。读论文、参加业界会议更是他规划里的常态。此外,他还提交了更多的 Feature 给社区,算是对自我成长的一种验证。

2014 年,是他“开源之旅”中一个非常重要的转折点。

 

当年,李万鹏给 Linux 社区提交了第一个比较大的特性——优化了虚拟机上下文切换,从而实现更少的内存占用和更好的性能。这项特性最终并入了内核,并在 2015 年的 KVM Forum 上被评为"年度核心突破”之一。

看到曙光后,他又陆续对性能损耗中常见的一些问题如 TLB(translation lookaside buffer)、IPI(Inter-Processor Interrupt)、Timer 进行了特性的优化及贡献。正是基于一系列的投入,接下来的每一年,李万鹏都是 KVM “年度核心突破”榜里的“常客”。

 

“随着越来越多的 Patch 进入 KVM,我慢慢成了 KVM 的核心开发人员之一,在社区也开始高度活跃起来,我开始更频繁参与社区中的讨论,Review 其他人提交的 Patch。渐渐的,Maintainer 也开始询问我的意见,我的名字和邮箱也慢慢被加到‘Reviewed-by’和‘Acked-by’里”。

 

对比之前“虐心”的那几年,这一切来得格外不易却又刻骨铭心。

持续成长,我相信天道酬勤

Linux 项目迄今已成立 30 周年,KVM 于 2006 年 10 月 19 日首次发布了 Linux 内核邮件列表。与一些时髦新兴技术不同,虚拟化技术已发展得相对成熟。目前,全球许多云厂商的底层都基于的 KVM 内核,KVM 社区因此非常活跃。同时,开源也为 KVM 的发展带来了更大的推动力。

 

李万鹏认为,“虚拟化技术变迁几乎都是在开源社区中孵化的”,开源的创新也在不断解决 KVM 虚拟化技术中浮现的问题。

 

以腾讯为例,腾讯云 2013 年已全面采用了开源社区支持的 KVM 技术,2014 年起,腾讯云云服务器 CVM 全部基于 KVM 技术生产,同年,腾讯云就开始向 KVM 社区贡献成果。随后 2015 年起,腾讯云虚拟化技术团队通过解决大规格虚拟机热迁移、降低虚拟化开销并提升虚拟机性能等问题,推出了自适应热迁移优等多套结合腾讯云海量业务应用的创新性解决方案。2016 年,腾讯云开始组建开源团队专门负责向社区贡献成果并解决社区反馈的问题,不断提升社区版本的性能和稳定性。

 

2016 年,彼时的李万鹏加入了腾讯。

初期,KPI 压力大,事务多,他和团队成员除了工作之外,还需要投入大量的业余时间来参与开源社区的贡献。在团队的共同努力,领导的支持下,腾讯云于 2017 年第一次登上了 KVM 全球企业开源贡献榜,这也是榜单上首次出现中国云服务商身影。

 

到了 2018 年 10 月 25 日,一个更大的舞台让李万鹏感受到了这一切付出背后应得的成就和荣耀。

当天的 KVM FORUM(KVM 虚拟化社区最重要和最权威的国际大会)上,李万鹏第一次受邀作为讲师,面向现场及线上的几千名开发者,进行了题为“Torwards a More Scalable KVM Hypervisor”的演讲,代表腾讯云分享参与虚拟化开源的经验,并和 KVM 的 Maintainer 一起同台对全球虚拟化开发者的提问进行讨论及解答。

 

我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱

图注:在 2018 年的 KVM FORUM 上(英国爱丁堡),李万鹏受邀上台进行交流和分享

 

同样是这一年,腾讯启动“自研业务上云”(将 QQ、微信、游戏等全部切换到腾讯云)战略和行动。在业务迁移过程中,“性能损耗”,即虚拟机相对于同规格物理机的性能差距,是很多团队最为关注的问题之一。腾讯云虚拟化团队针对该问题推出了 PV TLB shootdown、PV IPI 方案,对 TLB 刷新以及 IPI 进行了优化,从而提升大规格配置虚拟机的性能,降低虚拟化层损耗,使得部分应用场景性能提升达到了 130%~150%。

在这些实战中,李万鹏最大的感受是相互传帮带的工程师文化。因为小组成员擅长点不同(有的擅长开发性能监测单元的虚拟化特性,有的擅长内存管理子系统、内存虚拟化、cgroup 子系统等各个内核技术开发),技术氛围多样化……所以,大家平时经常会组织组内探讨、相互协助,“一旦新技术问题产生了,大家是非常愿意花时间深入讨论的。长期以往,我们每个人也在不断拓展自我便捷,将时间和精力分配在更高价值的技术突破上”。

 

正是在这种成长节奏下,2019 年成为了李万鹏开源历程中贡献数最多的一年。

 

这一年,他代表腾讯云虚拟化团队,继续向社区重点推送了 Yield IPI、C-state MSRs、Exitless Timers 方案,对业务场景中出现频次最多、性能影响最大的 IPI 和 Timer 两大问题做了进一步优化。在这之前, 很多云厂商都相继发现频繁使用 Timer 带来的很严重的性能下降问题,但社区一直没有很好的解决方案。新 Timer 方案推出后,业务场景测试下的结果显示,KVM 内核性能提升了超过 20%。

 

基于这一系列推送,李万鹏的 Feature 贡献数占据了 2019 KVM“年度核心突破”榜单中的三个席位,腾讯云在 KVM 领域的影响力也越来越大。在当年的 KVM Forum 上,“腾讯云还向大家介绍了基于虚拟机克隆的轻量级虚拟化技术, 这项技术能在 35ms 内启动一台虚拟机,创造了业界目前能最快启动一台虚拟机的记录。”李万鹏自豪地说。

我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱

图注:同样是 2019 年,李万鹏成为了 Linux 内核 KVM 子系统 Reviewer

 

2020 年至今,他所在的腾讯云虚拟化开源团队又陆续提出了快速处理框架提升 IPI 和 Timer 的处理性能;自主设计了完全支持 CPU 并行化的 vMMU 方案,克服 KVM 原有设计中 CPU 执行*串行化带来的性能损失,实现虚拟机内存管理机制的架构升级;以及开发了全新的文件系统 Dmemfs (Direct Memory File System),给降低系统开销提供了一种新的思路。

 

截止今日,腾讯云已连续五年登上 KVM 开源贡献榜,累计贡献超过了 200 个 Patch,20 多个 Feature。

对于 KVM 技术研究,李万鹏感悟更多的是,要带着持续饥渴的心态去学习。他说,KVM 的开发一定要有扎实的 Linux 内核开发基础,精益求精学习软硬件知识的态度,特别是在处理虚拟化系统安全与性能的挑战上,需要尽可能拥有全面的技术视角。

兴趣引发“革命”

伴随 KVM 技术 15 年的演进,指令集虚拟化、MMU 虚拟化、中断虚拟化中的技术难点被不断突破,在半虚拟化维度,virtio 技术栈也从单一到标准,从标准发展为通用;同时,目前开源社区也对轻量级虚拟化方向有更多的探索和研究。不过,开源虚拟化的未来还有很长的发展路。

 

在李万鹏看来,开源虚拟化技术的未来可能存在着三个方向,第一是对可信计算技术栈的全面支持,第二是对新型 offloading 硬件包括对 Nvidia DPU/GPU、Intel IPU/NVDIMM 的技术栈重整;最后,虚拟化各个应用场景的性能优化(特别是对虚拟机调试与性能监控的特性开发)也是长期乃至永恒的技术话题。

 

这些不同技术维度的演进和未来的探索空间,也侧面反映了,长期在内核开源社区贡献是一件需要在学习、心态上都与时俱进的事情。

 

“Linux 或者 KVM 开源社区中,大部分爱好者一开始缺乏一定的技术能力,他们在早期贡献上需要攀爬陡峭的技术学习曲线”。李万鹏见证过很多这样的案例,回想当年自己同样经历过的那些过往,他也感慨道,“这一周期会相对较长,甚至经常会收获一些负反馈。但只有正反馈次数的积累才能决定你在开源社区中技术生态位的高低。”

 

此外,开源参与者的技术能力和心理能力,是决定其能否在内核社区持续成长的两个关键点。这意味着要想在社区内形成影响力,基本绕不开长时间的学习沉淀,严格工程师文化的考验以及开源社区文化的过滤。这些经历让很多参与过开源的人都深有体会——包括在 2014、2015 年前,李万鹏也曾走过这一阶段。

不过,他从来没把这些当作负担,即使是前半段被他称作“虐心”的经历,在采访中他更多也以平静的心态去陈述。但言语中,掩盖不住的是他内心的那股*,就像从懵懂少年到三十而立的这一路上,追求内核世界的好奇心、好胜心从未改变一样。

 

我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱

图注:李万鹏参与 KVM FORUM 2019 大会期间,正赶上当地举办的一场“万圣节”Party

 

回望这 9 年在内核世界攀登的过程,李万鹏给自己总结了 12 字真经——“热爱技术、学会欣赏、追求卓越”。

也许他的意识里,始终被“兴趣引发革命,一切都是为了好玩儿”这句话影响着。这句话来自他热爱的偶像——Linux 之父 Linus Torvalds 的自我成长总结。

 

Linus 开创了 Linux 系统并推动了开源运动的成功,李万鹏也希望自己能在 Linux 的世界里,种下一颗自己的种子。

 

 往期阅读推荐

 

点个关注,不迷路哟~

我的 9 年开源之路:395 Patch、20+Feature,背后只有努力与热爱
上一篇:Network in Network论文笔记


下一篇:数据预处理