--- title: SmallHanley (林霆寬) categories: User ... # 簡介 * 國立成功大學 資訊工程學系 111 級 (2018 ~ 2022) * GitHub: [`SmallHanley`](https://github.com/SmallHanley) * HackMD: [`SmallHanley`](https://hackmd.io/@SmallHanley) ## 成果發表 ## Linux 核心和相關專案貢獻 * 優化 [lab0-c](https://github.com/sysprog21/lab0-c):[commit 17f36bf](https://github.com/sysprog21/lab0-c/pull/63/commits/17f36bf53ac0616eb723922af841d3f72e7bf3e3), [commit b986710](https://github.com/sysprog21/lab0-c/pull/68/commits/b98671012d3cc6cab894b07ebc59850fe09554d5) * NCKU Wiki linux/schedule 教材錯誤修正 * 《Demystifying the Linux CPU Scheduler》[修改討論](https://hackmd.io/@SmallHanley/SJEQH6pd5) # 2022 Linux 核心設計 春季班 自我評量 ## 作業共筆 * lab0-c: [HackMD](https://hackmd.io/@SmallHanley/linux2022-lab0) / [GitHub](https://github.com/SmallHanley/lab0-c) * fibdrv: [HackMD](https://hackmd.io/@SmallHanley/linux2022-fibdrv) / [GitHub](https://github.com/SmallHanley/fibdrv) * ktcp: [HackMD](https://hackmd.io/@SmallHanley/linux2022-ktcp) ## 測驗共筆 * quiz1: [HackMD](https://hackmd.io/@SmallHanley/linux2022-quiz1) * quiz2: [HackMD](https://hackmd.io/@SmallHanley/linux2022-quiz2) * quiz4: [HackMD](https://hackmd.io/@SmallHanley/linux2022-quiz4) ## 期末專題 * BMQ 排程器研究: [HackMD](https://hackmd.io/@SmallHanley/linux2022-projects) ## 修課心得 這門課是我修過難度第二高的課,難度最高必須給到 [2021 年暑期「Linux 核心」課程](https://hackmd.io/@sysprog/linux2021-summer)。每週需要投入至少 16 小時的時間 (後來發現要吸收課程內容,16 小時遠遠不夠)。這門課除了學習到課程教材以及相關議題探討,也學習到 trace code 的技巧和開發紀錄的撰寫。程式從剛開學的一百行規模,到期末專題的上萬行規模,甚至 linux 核心上千萬行的規模,光要理解程式運作原理就不是一件容易的事,看半天很可能只是在意淫程式碼。只是理解程式運作原理也不夠,需要理解其中的設計哲學、理論,甚至修改、實驗,並且指出實作缺陷 (修完這門課我還沒辦法完整做到,要探討更深就需要更多背景知識)。而開發紀錄撰寫方面,我學期初寫得不好,後來想要準備面試相關資料時,我問自己要怎麼說服 interviewer 我做過事情 (不一定能做出像樣的作品),發現只有詳細紀錄開發過程才有說服力。因此學期後半我有注重開發紀錄的撰寫,往後的開發我也要保持這個習慣。 學期間,因為 quiz4 延伸問題和期末專題需求,閱讀老師撰寫的《Demystifying the Linux CPU Scheduler》(我只有閱讀前三章和一部分四、五章),對我幫助很大,因為 linux 核心的文件寫得比較簡潔,很多變數命名剛接觸時也無法想像其功用,老師整理的書籍可以幫助我了解排程器發展歷史,以及相關背景知識、資料結構、函式功能等等。過程中也有發現一些沒寫好的部份,有跟老師討論。 ## 自我評量 (1 ~ 10) 我給自己 7 分。 在修這門課程以前,有聽過老師開設的 [2021 年暑期「Linux 核心」課程](https://hackmd.io/@sysprog/linux2021-summer),該課程只用六週就上完一整個學期的份量,每次上課都會提到很多東西,特別是 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 與期末專題接觸一系列排程器以及學習效能分析方式。