共计 2650 个字符,预计需要花费 7 分钟才能阅读完成。
「龙蜥开发者说」第 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…
—— 完 ——