龍蜥開發者說:不忘初心,方得始終 | 第 7 期

OpenAnolis小助手發表於2022-06-02
「龍蜥開發者說」第 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 年度「突出貢獻獎」。這是我參與社群建設以來,首次收到來自社群的認可,當然也是自己辛苦付出得到的成果,這也更加堅定了我不斷進步、繼續為社群貢獻我力量的信心。

龍蜥開發者說:不忘初心,方得始終 | 第 7 期
(圖/獲得龍蜥社群 2021 年度「突出貢獻獎」)

最後,期待未來飛騰 CPU 和龍蜥作業系統產品的適配,為社群做出更多貢獻。也期待社群聚起更多志同道合的朋友,一起為國家的基礎設施開源貢獻一份力量!


歡迎大家加入 Arm SIG 共建,SIG地址可移步龍蜥公眾號(OpenAnolis龍蜥)2022年6月1日相同推送檢視。

—— 完 ——

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2898633/,如需轉載,請註明出處,否則將追究法律責任。

相關文章