tft每日頭條

 > 科技

 > linux内核升級方式

linux内核升級方式

科技 更新时间:2024-12-19 09:14:16

linux内核升級方式?【CSDN 編者按】一個好的開源項目,能夠成長為一個全球性的開源項目,肯定有它的獨特魅力所在Linux内核守護者吳峰光博士特别為《新程序員001:開發者的黃金十年》撰文,生動細緻地,現在小編就來說說關于linux内核升級方式?下面内容希望能幫助到你,我們來一起看看吧!

linux内核升級方式(一個補丁叠代了16個版本後被撤)1

linux内核升級方式

【CSDN 編者按】

一個好的開源項目,能夠成長為一個全球性的開源項目,肯定有它的獨特魅力所在。Linux内核守護者吳峰光博士特别為《新程序員001:開發者的黃金十年》撰文,生動細緻地

分享了他早年為Linux Kernel提交I/O預讀取算法補丁的經曆,過程頗為波折有趣,從中可以一窺Linux成為全球最大開源項目的關鍵。

作者 | 吳峰光 責編 | 張紅月

出品 | 《新程序員》編輯部

Linux内核開發者社區普遍被認為是一個大神雲集、充滿挑戰的社區,不僅是這個社區對于代碼質量的高度挑剔,也因為網絡上盛傳這一項目的發起人——Linus Torvalds,是一個脾氣不太好的“獨裁者”:每一次他在郵件列表裡發飙“罵人”,都會成為不大不小的新聞事件,讓每一位好奇Linux項目的開發者們交頭接耳。

Linus Torvalds,圖片來源于2022年開源峰會活動

那些充滿驕傲的黑客們,四處傳頌着他那句“Talk is cheap, show me the code”,昂首挺胸地遊走在各個社區之間。

與此同時,雖然開源社區已經發展了這麼多年,但要說是否有另外一個開源項目達到了Linux這樣的成就,其答案至今仍然是否定的,Linux仍是軟件領域最為成功的開源項目,沒有之一。

1991年的那個夏天,當時就讀于赫爾辛基大學的Linus Torvalds 21歲,在Usenet上發布了那篇著名的帖子,開啟了他的奇妙人生,也改變了更多年輕人的未來。1999年,在Linux誕生的8年後,還在中科大自動化系讀大三的我第一次接觸到Linux,成為一名Linux用戶。6年後,讀到博士的我向Linux内核社區提交了人生中第一個内核補丁。本來,隻是為了完成自己的論文,本着實用化的想法,将補丁提交給社區。然而,這個對I/O預讀取算法進行改進的補丁卻是一塊超出我預估的硬骨頭。從一開始丢入社區中無人問津,到經受挑戰,再到反複修改,差不多每個月都提交一兩次叠代版本,曆經将近兩年的時間,在叠代了十多個版本之後終于被社區接受。

不打不相識,畢業後,我正式走上了Linux内核開發這條職業道路。

吳峰光,博士畢業于中國科學技術大學自動化系。先後工作于Intel與華為。開源貢獻包括:2007 Linux Kernel I/O預讀算法、2010 Linux Kernel回寫算法、2013 LKP(Linux Kernel Performance)内核性能測試、2018 Memory-optimizer冷熱内存檢測與透明遷移解決方案、2020 Compass-CI開源軟件全棧測試平台、2021 openEuler開源操作系統技術委員會成員等。

初見Linux内核

我第一次近距離接觸Linux比較有意思,是有人拿着一張Linux光盤來讓我幫忙安裝。我順着安裝程序的一步步英文提示的指引,居然成功了,然而重啟後就抓瞎了,不知道該怎麼用。

之後,我的同學弓岱偉就充當了我的Linux導師,他在Linux控制台裡噼裡啪啦打命令,滿屏幕的英文輸入輸出讓人目不暇接——真真Linux大玩家! 我很喜歡搬一個闆凳默默坐在他一旁,跟着他在這個新世界裡徜徉。

我是幸運的:這可能是最為輕松而有趣的一種Linux入門方式了!對于不玩遊戲的我來說,GNU/Linux系統就是我的“遊戲世界”:探索、挑戰,新鮮感、成就感。一般遊戲的引人之處,Linux亦可帶來相似的滿足感。更讓人興奮的是,身邊有志同道合的人一起交流學習,将來還能對接實驗室、學校、社會的需求。這符合人的本性,就像是小小孩熱衷于追着大一點的小孩求帶着玩一樣,跟志同道合的人一起玩Linux,比獨樂樂有意思太多。

從此,我與Windows下的OWL/MFC拜拜了。之後很自然地,我也以類似的方式影響了身邊的有緣人。這是屬于程序員的美麗新世界——Shell/Vim等命令行工具一旦掌握,就效率飛起;GNU/Linux開放源代碼,工具鍊齊全,對開發者的可玩性太高了;UNIX系統小而美工具集的組合設計理念,經受了曆史考驗,一旦學會終身受用。

那時候我們跑Slackware,兩個寝室之間拉一根網線,内網互聯,嘗試各種服務。後來我們在瀚海星雲BBS找到了LUG組織,就玩得更嗨,還在校園裡玩Debian安裝大會。進實驗室後,我們搭起了PXE網絡啟動服務,校園網各處的電腦,可以免安裝啟動進入KNOPPIX等Linux系統。我們獨家優化的FTP服務器,百倍提速,開啟了全校的文件分享盛宴。

在又一次機緣巧合之下,我開始觸及Linux Kernel代碼。

2005年讀博期間,我在實驗室做的流媒體服務器項目,遭遇了并發能力不足的問題。随着排查的深入,我闖入了内核I/O領域:原來是其中的I/O預讀取(readahead)算法代碼沒有按預期檢測出的順序讀,導緻大量低效的小I/O。

我嘗試自己修改内核代碼後,問題被修複,效果令人振奮!好東西要分享呀!于是我屁颠屁颠地去給Linux社區提交補丁。

本文節選自《新程序員001:開發者的黃金十年》

幾經波折的填坑之路

那時我已經非常認可開源的理念:自由使用、分發,修改、回饋。當Linux用戶遇到了問題,就能以Bug report或Bug fix的方式,回饋上遊社區,從而形成一個越用越好的正向循環。所以,搭了多年免費班車的我,現在親曆一個坑,責任感油然而生:是時候幫忙填坑了!(隻不過當時的我還沒有意識到這是個多麼龐大的坑!)

要填坑,第一件要做的事情是啥?是轉變角度:不能僅僅以服務自己單位項目為目标,草草搬個木闆,讓項目之車能快速通過就了事——那叫Hack,顯然上不了台面。需要正兒八經地研究I/O預讀取周邊代碼,研究過去的郵件讨論,搞清楚它的設計目标、思路、來龍去脈,還有非常重要的:各種場景下的行為表現。這意味着大量測試和假設/驗證叠代,在此基礎上形成新的方案(Linux社區主要在Mailing list展開公開讨論,這就為我這種潛水愛好者提供了極好的觀摩學習機會)。

然而當時的我還不懂太多道理,隻知其一,不知其二。當心懷興奮與忐忑,敲下郵件發送命令之後,首先面對的第一重考驗就是:沉默。

郵件如泥牛入海,沒有收到任何反饋。

我想沒關系,沒有收到反饋一定是因為代碼還不夠好,咱繼續測試和改進代碼。就這樣,V2、V3、…… 補丁集越發越龐大。在默默發了幾個版本之後,終于,來自Andrew Morton的一份郵件打破了甯靜:

(備注:Andrew Morton是内核社區-mm tree的maintainer,主管質量的二号人物。他郵件大意是:這個補丁可真大!而且預讀這個事情本身就超級複雜。我已經找了兩位兄弟Ram Pao和Steve Pratt幫忙一起審查和測試了,但是這要花時間。)

從這裡可以看出,Linux社區最稀缺的資源是兩個:代碼審查(Review)和測試(Testing)。我也是那個時候才知道,社區鼓勵發小而美的補丁——抛出一大坨令人望而生畏的補丁集,很容易勸退查看者(至少會讓人産生“等我有大塊空閑時間了再來消化”的想法)。

新人發補丁最擔心什麼?有人挑戰、挑毛病?或者更糟,無人理會?而更深層次的問題,是面對一個新社區,心虛沒底,沒感覺,沒品位。解決辦法,一是潛水學習,二是投身其中。新人發補丁的最佳策略,是從小修複開始:“這兒有個缺陷,這個小補丁可以修複”,接下來社區的交互就會比較順,不容易遭遇重大挫折。

在這一點上,我顯然犯錯了。

但我又極其幸運,因為不久之後,Andrew Morton開始正式審查我的補丁。從此,我與他結下了不解之緣,可以說他正是我在Linux Kernel的領路人。

我逐漸學會了從社區視角來看問題:Linus Torvalds及其維護者(Maintainer)團隊,他們需要什麼樣的補丁?不歡迎什麼樣的補丁?

“我們公司/項目需要xxx,所以寫了這個配套補丁希望合入Linux。”這是一種以公司為中心的視角。抱歉,在社區看來,上述描述是一種政治不正确。

Linux現在的主要貢獻都來自各家公司的雇員,這可能是世界上最廣泛的一個跨公司合作開源項目。那麼,Linux社區如何協調和引導如此衆多的公司完成協作,避免沖突?這是個不小的挑戰,尤其是其中有不少互為競争對手的公司,在一些熱點問題上可能希望競争主導權、話語權,以及有利于自身的實現。

對此,Linus Torvalds作為“獨裁者”的作用就體現出來了:你們都願意投人來做xxx,很好!選擇做什麼,是你們的自由。但是!最終怎麼做,我的地盤我做主,要遵從社區的原則來做。

最大的原則就是:所有開發者/貢獻者,摘掉你們所屬公司的帽子,戴上“獨立貢獻者”的帽子,按照技術本來的最佳實踐,去做設計與實現。大家都以“獨立貢獻者”的角度參與審查。

換言之,公司從商業競争力角度,選擇“做正确的事”;社區從技術通用性角度,确保“把事情做正确”。這就是開源社區與商業公司的基本合作共識。除了倡導大家做“獨立貢獻者”,Linux社區還有“看門人”的邏輯。Linux社區人來人往,每天補丁與話題無數,像是個熱鬧的市集;開放的郵件列表,誰都可以訂閱,觀摩;誰都可以沖進來,發布一個補丁,或者對一個補丁發表自己的看法。在這紛紛纭纭之中,對補丁貢獻的質量控制,必須極為嚴格。

在Linux社區,質量控制的核心在于“代碼合入”(Git Merge)這一動作,這是屬于“看門人”的唯一權力。合入是一個重要的門檻和分水嶺。在合入之前,看門人有是否接受、何時合入的決斷權,以及在此基礎上衍生的關于補丁實現原則/方案的建議權。此時看門人的權威一面,想必給貢獻者們留下了深刻印象。可是在合入之後,強勢的看門人,随即變身為苦命的維護者,這是因為開源社區有一個基本假設:在開源市集裡,貢獻者們進進出出,随時可能走掉,不再響應。這意味着合入代碼所增加的系統複雜性,其長期維護責任,要由社區與維護者來兜底。

“Linux有xxx問題,影響了xxx用戶/場景。這個補丁效果好,副作用小,通用,是長期演進方向。”這,才是看門人喜聞樂見的補丁。

I/O預讀取補丁集前後發了十幾個版本,Andrew Morton非常認真地給了一百多份審查郵件,就連Linus Torvalds也回複了十來封郵件,甚至還躍躍欲試,親手奉上了一個一百多行代碼的補丁。

當時我信心滿滿,以為功能日漸完善,很快會被合入主線。

然而,經曆了一年多的開發叠代,到第16個版本發出後,我收到了Andrew的一份郵件,大意是:

我把你的補丁集去掉了,因為它太複雜了!

那一刻猶如晴天霹靂!我整個人都傻了。回過味來,我終于刻骨銘心地體會到了KISS原則的重要性。這可是真正的刻骨銘心!

從一開始,Linux就是簡單的。當年Linus第一次發布Linux的時候,并不完善,但是簡單能用。及早發布,這是Linux取得成功的一個重要因素。時至今日,雖然Linux日趨龐大和完善,但對于任何一個功能項,這一原則仍然适用,并被看門人堅持。

于是,我決定抛掉原來的代碼,重新寫一份大大簡化了的方案,包括功能與算法,這又花了我幾個月的時間。在Andrew Morton的審查下,這些代碼又經過了幾輪改進。終于,到了2007年的7月19日,那一天我收到了很壯觀的幾十封郵件,那是Andrew Morton把補丁集發給Linus,然後從-mm tree裡移除消息!

380 C Jul 19 Andrew Morton ( 64:0) [patch 048/209] readahead: pass real splice size

381 C Jul 19 Andrew Morton ( 122:0) [patch 049/209] mm: share PG_readahead and PG_reclaim

382 C Jul 19 Andrew Morton ( 240:0) [patch 051/209] readahead: sanify file_ra_state names

383 C Jul 19 Andrew Morton ( 282:0) [patch 050/209] readahead: split ondemand readahead interface into two fun

384 T Jul 19 Andrew Morton ( 69:0) - readaheadintroduce-pg_readahead.patch removed from -mm tree

385 T Jul 19 Andrew Morton ( 109:0) - readaheadadd-look-ahead-support-to-__do_page_cache_readahead.patch remo

386 T Jul 19 Andrew Morton ( 66:0) - readaheadmin_ra_pages-max_ra_pages-macros.patch removed from -mm tree

387 T Jul 19 Andrew Morton ( 146:0) - readaheaddata-structure-and-routines.patch removed from -mm tree

This patch was dropped because it was merged into mainline or a subsystem tree

這些補丁集終于被合并了!這可真是激動人心的時刻!進入開源世界交互,就像是打開一扇大門。整個過程中,先後有140多位來自世界各地、各種背景的人幫忙審查、測試,在自己的網站上試用并反饋效果;還有人在網上發帖子、曬貼自己的性能數據、圖表;有人邀請我在期刊雜志寫文章,去技術大會講,甚至出書……如此廣泛和全方位的協作,有效支撐了代碼的改進。

這樣的支持力度,在一家即使很大的公司裡,可能也僅限于重點項目。但是在Linux社區,這樣的事情就是日常協作!基于開源協作,任何一個模塊都能吸收全世界的能量,并且是自由選擇,讓最适合的人做最适合的事,讓最利益相關的個人與組織做最對口的測試和反饋,從而達到《大教堂與市集》裡描述的:市集實質上擁有了壓倒性的資源優勢,形成對大教堂開發模式的碾壓。

這大概就是Linux能夠發展為全世界最大的開源項目的生命力源泉吧!

Sai對本文亦有貢獻。

本文節選自《新程序員001:開發者黃金十年》,該書特别策劃十萬億開發者新生态、家家都是技術公司、人人都是開發者三大版塊,為所有開發者帶來有技術、有深度、有質量的高品質内容。

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved