「龙蜥开发者说」第 7 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者李文成来分享「不忘初心,方得始终」。

开发者说系长期活动,对于积极投稿、多次分享的童鞋,我们还有神秘大礼鼓励!诚邀开发者们分享真实体验,以文会友、共同学习、一起进步。


本期故事主角:李文成,「 龙蜥社区 2021 年度突出贡献奖」获得者;龙蜥社区 Arm SIG 核心成员,负责龙蜥内核支持飞腾补丁的开发与维护, 对 Linux 内核和网络协议栈有较深入的研究。目前从事 Arm64 国产化 CPU 驱动的开发、内核补丁的维护,解决生态客户反馈的软件相关的 BUG。

初心启蒙,坚定信仰

大学时,初次接触电路基础知识,我对硬件课程产生了极大兴趣,一发不可收拾,因此,开启了漫长又有趣的动手实践历程。我会时常运用模拟电路和数字电路的基础知识看电路图和修理故障单板,作为老师及师兄的科研助手不断历练,书本上复杂的原理在我眼中逐渐变得简单。大四,我顺利保研成为心仪导师的学生,有了更多机会接触电路图设计和程序开发工作。在学校几年的理论结合实践中,我的软硬件基础知识锻炼地十分扎实。自此,对 Linux 软件开发满怀热血的我正式踏入了嵌入式的大门。

初入职场,我自然而然地选择了嵌入式 Linux 驱动开发、网络通信设备开发等领域的工作。实际上,刚参加工作的那段时间并没有得心应手,通过阅读相关书籍我实现了快速的自我提升,如《Linux 设备驱动程序》、《TCP/IP 详解》等,同时研究内核协议栈的实现,边学习理论边积累实践,保证自身技术从不落后。工作中的我尝试做过许多不同的方向,如从 Linux 内核驱动到用户态 DPDK、智能家居的嵌入式开发、核心路由器开发等等。无论是自我提升还是工作探索,我都坚定地围绕着 Linux 软件开发的初心,丰富的经历也为我目前从事国产 CPU 行业做了许多铺垫。

浪潮已起,乘风而上

随着中国科技日新月异的发展,国产 CPU 如雨后春笋般出现,行业已呈朝阳之势。响应浪潮的我几年前加入飞腾,负责网卡驱动开发和维护、解决生态客户反馈等各种难题。每每遇到客户反馈的问题,我的心情总是既紧张又兴奋,紧张的是像拆弹般时间短任务重,兴奋的是自己积累的知识和经验又一次在实践中产生价值。比如虚拟机需要千兆网口支持 30 条组播流、每条流双向收发速率不低于 2Mb/s、24 小时每条流丢包率都低于 10e-6 等等问题场景,在软件调优时候,经常会遇见测试到几小时后突发丢包,又不得不从头分析的案例,但最终得益于对 Linux 协议栈的熟悉,我每次都能从中发现一些线索进而顺利解决问题。

给大家举例一个让我至今印象深刻的问题场景。客户在使用飞腾 CPU 做网络产品的时候发现有万分之一报文出错,而且报文里面只有一部分内容出错,出错的内容和 Cache 大小有关。但是,从软件上看 Cache 又都处于透明的状态,当时问题比较棘手,但凭借我此前对网卡硬件工作原理的掌握、Linux 驱动的熟悉,以及对 CPU 体系结构的理解,还是从迷雾中找到了解决方案。每每如此,我对 Linux 开发的信心便增添一份笃定,走在这条路上的行囊也因此更加丰富。


(图/交换机产品框图)


(图/错误报文示例)

遇见龙蜥,遇见懂得

身处 Linux 开发的圈子,大家往往会遇见各种各样的开源社区,参与社区并积极贡献技术力量。社区生活更是我职业生涯不可或缺的重要组成,直到 2021 年,我遇见了龙蜥操作系统开源社区(以下简称龙蜥社区)。彼时,飞腾已经加入龙蜥社区并成为了理事会成员,我作为飞腾代表参与共建 Arm SIG 组,成为主要维护者。在社区生活的日常,除了惯例参加双周的技术交流例会,与各个维护者代表轮流主持会议,同步交流工作进度,我还会借助社区平台面向大家做技术分享。通过参与社区工作,我不仅获得了与志同道合小伙伴们时时交流的机会,而且还有效地锻炼了沟通表达能力(技术例会详见 SIG)。

在龙蜥社区的日常中,我主要负责对飞腾 CPU Linux 内核补丁的开发和维护。记得印象较深的一次,在阿里云的服务器上对龙蜥操作系统进行 FIO 测试,少量机器在 48 小时内出现随机死机现象。收到这个问题反馈时,感觉有点棘手。问题在于时间随机不确定,经常测试好长时间才出现,快速复现成为解决问题的关键。经过多次反复尝试后,我发现跨路 FIO 在大的压力测试下容易复现,此时会经常看见内核 watchdog 超时,分析发现跨路的时候出现中断聚集了。于是我不断阅读和分析 gic 中断处理的逻辑代码,发现跨路中断分配逻辑存在问题,才导致了这个现象的出现。于是我们通过修改代码后测试,终于在较短时间没有出现 watchdog 超时导致内核卡死了的问题。就在我们认为问题得到解决时,现实打了脸, 48 小时内还是死机了,而且这次死机现象没有任何打印信息,感觉比上次更棘手一点。思来想去怀疑 CPU 跑飞了,所以只能接仿真器去调试。事实证实的确如此。我们通过查看 IO 和内存访问的误码率,发现了存在的问题。最后通过调整固件参数减少误码解决了问题,并把补丁提交到了龙蜥社区,至此,才有一种如释重负的感觉。

至此,我们可以发现每次复杂的问题经常是由多种原因导致,需要较深的技术积累,从各个方面去分析才能解决,而这些技术积累正是源自不忘初心。

难能可贵的是,我在龙蜥社区接触到了很多行业大佬,与大家的交流中,不断扩大自身知识面。我就像海绵一样汲汲吸取着新知识,时刻不忘记要进步。值得一提,龙蜥大讲堂直播,我基本上都准时收看。比如听完《SIMD 指令集在 OpenJDK 中的现状与未来》,迅速了解了 SIMD 在 OpenJDK 中如何进行优化、在哪些方面做了优化,以及将来使用 SVE 指令能带来更好的性能提升等。每次听完各位技术大佬的分享,感觉茅塞顿开,在最短的时间内吸取了很多先进的技术和思想。

很荣幸在龙蜥社区开展交流合作的过程中,我获得了龙蜥社区 2021 年度「突出贡献奖」。这是我参与社区建设以来,首次收到来自社区的认可,当然也是自己辛苦付出得到的成果,这也更加坚定了我不断进步、继续为社区贡献我力量的信心。


(图/获得龙蜥社区 2021 年度「突出贡献奖」)

最后,期待未来飞腾 CPU 和龙蜥操作系统产品的适配,为社区做出更多贡献。也期待社区聚起更多志同道合的朋友,一起为国家的基础设施开源贡献一份力量!
欢迎大家加入 Arm SIG 共建,SIG地址:
https://openanolis.cn/sig/ARM...
—— 完 ——


龙蜥社区
40 声望12 粉丝

OpenAnolis龙蜥社区由国内外头部企业联合建立的操作系统开源社区。