追思傑出的 Linux 核心開發者李少華

發表於2019-01-08

2018 年最後一天,我在商場溜娃,忽然看到少華妻子的朋友圈提到李少華於 12 月 28 日離開了我們。我知道少華前陣子身體不好但有好轉,這心痛的訊息來得太突然,眼淚一下就出來了。家人也發現了我忽然情緒低沉,我忍不住眼淚顫抖的說“少華走了”。

李少華是我們這一輩 Linux 核心開發者之中的傑出代表,應該說是目前華人圈最優秀和最重要的 Linux 核心開發者之一,他除了是核心子系統 MD(軟raid)的維護者之外,在塊裝置層、I/O 排程器、NVMe、記憶體管理、電源管理等領域都做出了非常重要的工作。他的程式碼和對核心的改進,融合在整個核心在 IO 和儲存站的方方面面,真的是通過很具體的工作,貢獻了正能量,讓這世界變得更美好了些許。

和少華家人聯絡後得知,在最後的時候,少華還時不時的提起“我有了一個新的想法”,“這段程式碼路徑還可以再優化改進”。這是一個多麼純粹的人,對系統軟體技術充滿的虔誠的純真的熱愛,我心想恐怕也只有這般專注,才能成為一個改變世界的人。很多人活一輩子,恐怕也沒有少華這三十幾年來的閃亮和耀眼。一輩子活成這樣,從個人來說,沒有遺憾,是我們心目中的英雄!

我和少華最直接的工作交集,我印象最深的有兩件事情。

第一件事情是我在解決 MD raid1在 NVMe SSD 上的讀寫效能瓶頸時,少華認為我的修改可能會在多層 MD 裝置堆疊的時候引入死鎖,而我認為不會。我們在郵件列表裡來回討論了很多次,他指導我來理解MD程式碼中的一些細節,最終我們發現 MD raid1 在發射 IO 的時候會從另外一個 raid1d() 執行緒來處理,所以不會在 generic_make_request() 裡面發生死鎖,少華鼓勵我“這是很好的討論”,然後接受了我的 patch。而後來少華還發現了我的 patch 裡的其他問題,直接就修掉了。在少華的幫助下,除了我們將 MD raid1 的讀效能提升了好幾倍之外,我也對 MD 的基本原理有了更深刻的認識。

第二件事情是有使用者報告 MD raid0 在 NVMe SSD 上做 trim 的時候時間非常久,我自己測試在 15T 的 NVMe raid0 裝置上格式化 xfs 檔案系統(加trim)需要 300 多秒,絕大多數時間都用在 trim 這裡了,這是很不正常的。少華分析這是因為 raid0 會將上層發來的 discard bio 按照 stripe 大小做切分,然後再傳送到 raid0 組成的不同硬碟上去,所以當 raid0 容量比較大的時候,原本的一個 discard bio 可能會被切分成幾百甚至上千萬個小 bio 來處理,這效能一下就降低了。

我們的思路是將切分後的 bio 再根據每一個 raid0 的元件裝置拼接起來,最後可以組成連續的一個或者極少數幾個 bio,然後再將拼接後的bio傳送到每一個元件裝置上去,這樣就可以降低幾百萬個 bio 了。我先寫了一個很複雜的 patch,來準確的將所有切分的 bio 按照每個裝置一個 bio 的方式拼接起來。雖然拼接出來的 bio 最少,但是程式碼非常難讀懂。少華後來做了一個實現,大概幾十行程式碼,做了一個次優化版本:

raid0_handle_discard()核心程式碼片段raid0_handle_discard()核心程式碼片段

少華的程式碼,通過一個很優雅的迴圈,就完成了將分佈在不同元件裝置上的 bio 的拼接,並且在絕大多數通常情況下,拼接效果和我的複雜程式碼一樣,速度還更快!最後我測試出來,少華的這個程式碼可以將在 raid0 上格式化 xfs 檔案系統的速度從 300 多秒降低到 20 多秒。當我閱讀少華的 patch 時,心中充滿的欣賞和愉悅,能看到一段更優雅和高效的程式碼,真的是非常愉悅的事情,而且這種好心情可以持續很久,每每想起都會覺得開心。

再後來我接手了 bcache 子系統的維護工作,和少華一起密切合作的機會就少了很多。但我一直在關注他在核心裡的工作,看到他繼續在做的很多優秀的工作。非常切合實際的說,少華是為 Linux 核心做貢獻的最傑出和最重要的中國人之一,從全球華人的範圍來看他的工作重要性也能夠進入前 20 位。而他還這麼年輕,還不到 40 歲,實在是我們這輩人之中的璀璨明星,能和他一起工作是我的驕傲和榮幸!

在寫這些文字的時候,不禁回想起從最初認識少華,那時他在 Intel OTC 我在 SUSE Labs,他在做效能相關,我在做檔案系統。然後2009 年我們在 CLSF[1] 會議上第一次見面,然後 2010 年他和其他 Intel 朋友一起幫忙在 Intel 紫竹園區舉行第二屆 CLSF。再後來他離開了 Intel 去了儲存領域創新獨角獸公司 Fusion IO,在 PCIe SSD、IO 排程器和塊裝置層做了大量的優秀工作。在我加入阿里組建淘寶核心組的時候,他已經決定去 Facebook 核心團隊,和 Jens Axboe、Chiris Mason、Tanjun Heo 等國際頂級核心黑客一起工作,很遺憾沒有機會和他做同事。少華一直是我們這一批人中最耀眼最傑出的極少數幾個人。我在 2016 年遇到參加 Kernel Summit 的 Tanjun Heo 的時候,他特意反覆幾次的提到,少華非常優秀,在塊裝置層做了很多優秀的工作。能夠被頂級黑客這樣評價的人,少之又少,而我認識的國人之中大概也就兩三個人吧。當時我意識到,經過長期不懈的努力工作,在 Linux 核心開發領域,少華已經躋身全球最好的 IO 棧開發者之列了。

從 git log 裡看到少華的大量的貢獻,我感覺到少華雖然人離開了我們,但是他的程式碼,仍然散發著他的才華,繼續在為世界做貢獻。在今後的工作中,我們還會繼續閱讀他的程式碼,就像和他在談心,對於熟悉他的人而言,這雖然心酸,也是和老朋友對話的最好的方式。而我也知道,他的程式碼以及他所維護的 MD 子系統,在工業屆被廣泛應用。譬如現在火熱的 PD-1/PD-L1 生物製藥領域,通過大資料的方式來分析 DNA 特徵,其中的資訊處理系統中 Linux 核心和高效能 IO 棧肯定被廣泛地使用到了。少華雖然離開了我們,他為這個世界留下的貢獻,仍然在為創造更美好的世界發揮價值。

我們都會離開這個世界,或早或晚,命不在長短而在價值,活得有價值是很幸運的。很痛心少華過早離開了我們,但我也很羨慕他的人生活出了精彩,他自己的不懈奮鬥為這操蛋的世界帶來了更多的光亮。這光亮,對家人對朋友,都是鼓勵和激勵,讓我們繼續在這操蛋的世界裡,為更好的世界努力不懈,也享受生活中點滴的幸福。感激少華,你短暫的一生所創造的溫暖和快樂,讓我感受到這世界多一點的善意和希望。

CLSF[1]: China Linux Storage, Memory management & File system Workshp

相關文章