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

2021-09-18 11:41:11 浏览数 (1)

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年的成长……仿佛一切像“苦尽甘来”。

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

PART ONE

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

李万鹏是腾讯云虚拟化产品中心的一名工程师,现负责腾讯云虚拟化开源技术的开发和社区工作。和标准程序员类似,他不擅长言语。“有点无聊,更不是个有趣的人”,是他对自我性格的总结。而在其腼腆内敛的表达下,你很难联想到这个“普通人”背后所拥有的光环: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内核中的注释错误。

图注:第一个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’里”。

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

PART TWO

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

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一起同台对全球虚拟化开发者的提问进行讨论及解答。

图注:在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内启动一台虚拟机,创造了业界目前能最快启动一台虚拟机的记录。”李万鹏自豪地说。

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

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

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

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

PART THREE

兴趣引发“革命”

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

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

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

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

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

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

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

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

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

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

Interaction

有奖互动

互动问答赢好礼

读完本文,你还有更多想要了解或交流的问题吗?评论区留言提问,我们会同步给李万鹏老师(也可能空降评论区哦),抽取3位幸运童鞋的问题进行回答,同时被抽中的童鞋也会获得精美小礼品一份哦。

截止时间:9月23日中午12:00前

更多互动福利,公众号回复“2”进行了解哦。

(*以上礼品随机赠送,以实物为准)

 往期阅读推荐

  • 日调用量超三十万亿,腾讯开源百万级服务发现和治理中心北极星
  • 腾讯Angel Graph团队刷新GNN最强榜单OGB世界纪录!
  • 从动物科学到乐队鼓手,腾讯技术小哥的开源人生
  • Apache之道在腾讯的探索与实践

欢迎关注「腾源会」公众号,期待你的「在看」哦~

0 人点赞