分享到plurk 分享到twitter 分享到facebook

SmallHanley (林霆寬)

簡介

成果發表

Linux 核心和相關專案貢獻

2022 Linux 核心設計 春季班 自我評量

作業共筆

測驗共筆

期末專題

修課心得

這門課是我修過難度第二高的課,難度最高必須給到 2021 年暑期「Linux 核心」課程。每週需要投入至少 16 小時的時間 (後來發現要吸收課程內容,16 小時遠遠不夠)。這門課除了學習到課程教材以及相關議題探討,也學習到 trace code 的技巧和開發紀錄的撰寫。程式從剛開學的一百行規模,到期末專題的上萬行規模,甚至 linux 核心上千萬行的規模,光要理解程式運作原理就不是一件容易的事,看半天很可能只是在意淫程式碼。只是理解程式運作原理也不夠,需要理解其中的設計哲學、理論,甚至修改、實驗,並且指出實作缺陷 (修完這門課我還沒辦法完整做到,要探討更深就需要更多背景知識)。而開發紀錄撰寫方面,我學期初寫得不好,後來想要準備面試相關資料時,我問自己要怎麼說服 interviewer 我做過事情 (不一定能做出像樣的作品),發現只有詳細紀錄開發過程才有說服力。因此學期後半我有注重開發紀錄的撰寫,往後的開發我也要保持這個習慣。

學期間,因為 quiz4 延伸問題和期末專題需求,閱讀老師撰寫的《Demystifying the Linux CPU Scheduler》(我只有閱讀前三章和一部分四、五章),對我幫助很大,因為 linux 核心的文件寫得比較簡潔,很多變數命名剛接觸時也無法想像其功用,老師整理的書籍可以幫助我了解排程器發展歷史,以及相關背景知識、資料結構、函式功能等等。過程中也有發現一些沒寫好的部份,有跟老師討論。

自我評量 (1 ~ 10)

我給自己 7 分。

在修這門課程以前,有聽過老師開設的 2021 年暑期「Linux 核心」課程,該課程只用六週就上完一整個學期的份量,每次上課都會提到很多東西,特別是 HackMD 共筆,連結點一點,點不完。這學期初選修這門課時,知道自己很可能無法吸收全部課程內容,不過因為還是學生,有較多時間深入研究,所以給自己定個一週投入 20 小時的目標,並且從中選幾個有興趣的議題研究。可惜學期中後段投入時間不足,每週只投入 10 ~ 15 小時。

學期間還是有學到東西。quiz1 探討 hash function 議題,借閱 TAOCP 來看,了解 collision 和 cache locality 間的取捨。lab0-c 搭配 git log 和核心程式,比較 linux sort 不同版本間 compare 次數的差異。quiz2 研究 branchless 程式,發現過去 linux 有一個 int2float() 函式,利用 ror32() 函式,透過 bitwise operation 讓編譯器生成 rotate 系列指令,並且巧妙達成 branchless。quiz4 與期末專題接觸一系列排程器以及學習效能分析方式。