版本 752d0a41f5543ad9eb3a25b8dae1a87b80c56073
SmallHanley (林霆寬)
簡介
國立成功大學 資訊工程學系 111 級 (2018 ~ 2022)
GitHub:
SmallHanley
HackMD:
SmallHanley
成果發表
Linux 核心和相關專案貢獻
- 優化 lab0-c:commit 17f36bf, commit b986710
- NCKU Wiki linux/schedule 教材錯誤修正
- 《Demystifying the Linux CPU Scheduler》修改討論
2022 Linux 核心設計 春季班 自我評量
作業共筆
測驗共筆
期末專題
- BMQ 排程器研究: HackMD
修課心得
這門課是我修過難度第二高的課,難度最高必須給到 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 與期末專題接觸一系列排程器以及學習效能分析方式。