--- title: Han1018 (謝宗翰) categories: User ... # 簡介 * 國立陽明交通大學 智慧與綠能產學研究所 * GitHub: [`Han1018`](https://github.com/Han1018) # 2024 Linux 核心實作 春季班 自我評量 ## 1. 成果發表和貢獻 * 複習[你所不知道的 C 語言:記憶體管理、對齊及硬體特性](https://hackmd.io/@sysprog/c-prog/%2Fs%2FBkuMDQ9K7)篇時,注意到一些中英之間沒有空白字元便增添上去,詳見 hackmd 版本紀錄。 * [課堂簡記互動](https://hackmd.io/7svssG2MQpe9ozE_IRRZdg?view#han1018) 中提出同學間的共同疑惑 kernel space 的 GDB 方式,得到老師 KDB / UML 的解答後。後續便整理 kHTTPd 開源專案安裝至 UML 的方法於專題開發紀錄中。 kHTTPd 開源專案參考資料修訂,改善 [Paintako](https://hackmd.io/@sysprog/BkSW8Z2Bn) 同學的專案開發紀錄,使語意更通順。 * 引入 CMWQ 章節:「在 kernal kmalloc 一塊空間,再把 work 給丟進 CMWQ 中」。改為:「在 kernal kmalloc 分配一段空間給 http_request 結構體,再把 work 放入至 CMWQ 中。」 * MIME 型態章節:調整「MIME 是由主要型態(type) ... 如下: type/subtype;parameter=value」段落,修正多餘換行。 * 讀取檔案內容章節:「帶來的額外 IO 開銷」,改為「帶來的額外 I/O 開銷」 ## 2. 作業/隨堂測驗 * 2024q1 Homework1 (lab0):[GitHub](https://github.com/Han1018/lab0-c) / [HackMD](https://hackmd.io/@zRlFO_buT66gBhkP4gN7vg/linux2024-homework1) * 2024q1 Homework2 (quiz1+2):[HackMD](https://hackmd.io/@zRlFO_buT66gBhkP4gN7vg/linux2024-homework2) * 2024q1 Homework3 (ttt):2024q1 Homework1 (lab0):[GitHub](https://github.com/Han1018/lab0-c) * 2024q1 Homework5 (assessment):[HackMD](https://hackmd.io/@zRlFO_buT66gBhkP4gN7vg/linux2024-homework5) * 2024q1 Homework6 (integration):[HackMD](https://hackmd.io/@zRlFO_buT66gBhkP4gN7vg/linux2024-homework6) 在課程中的作業與測驗中學到了非常多的東西,首先是各種工具的使用,如 Valgrind、Perf、Ftrace 和 Git 等。在作業一和作業三中,使用 Valgrind 分析記憶體問題,排除了 qtest 實作的記憶體錯誤。為了檢驗實作的 merge sort 效果,在作業中使用到 Perf 工具,測量排序百萬個節點所需的 cycles、instructions 及執行時間,並比較了 merge sort 與 Linux 核心的 list_sort 的差異。 Ftrace 則被用來觀察 kernel space 程式的效能瓶頸。在期末專題中,使用 Ftrace 發現到某些特定 function 有著異常高的執行時間,透過觀察並使用快取機制進行改進後,系統吞吐量提升了兩倍以上(詳見期末專題開發紀錄)。 此外,作業中學習到 Linux 核心鏈結串列的實作,並利用此知識開發和改進核心模組,還有 bitwise 操作、並行處理機制和檢驗複雜度的方法。在學習檢驗複雜度方法時,通過閱讀論文《Dude, is my code constant time?》和使用其檢測工具 [dudect](https://github.com/oreparaz/dudect),修正了作業 lab0-c 中使用 Student's t-distribution 檢驗時間複雜度的缺陷,去除了在小樣本估計未知標準差時可能出現的極端值。 在期末專題中,大量使用了並行處理機制,如 atomic、spinlock,並實作了 lock-free 機制中的 RCU,用於維護放置快取內容的雜湊表。通過引入 CMWQ 改善了創建 kthread 時的成本,改善吞吐量約 1.5 倍。 ## 3. 期末專題 * Linux 核心專題: 高性能網頁伺服器:[GitHub](https://github.com/Han1018/khttpd) / [HackMD](https://hackmd.io/@sysprog/HkyNQeJrR) 課程專題聚焦於提升 kernel mode 網頁伺服器的吞吐量。專題中增添了 kernel 模組的目錄顯示功能,並透過 Ftrace 定位效能瓶頸進行改善,過程中使用了 Ftrace、CMWQ、RCU 和網路通訊機制。透過 CMWQ、content cache 改善了吞吐量,與現行網站相比在特定使用情境下吞吐量有大幅的優勢。 在這個項目,我給自己的評分為 **10** 分。 專題開發過程中學習並運用了並行處理機制保護 critical section,並且使用了 Ftrace 定位出效能瓶頸區域並予以改善,實際開發了 kernel module 並使用 CMWQ 改善原先實作建立 kthread 時的時間成本。 ## 4. 與授課教師的互動 - 第一次互動:2024年3月8日 23:09 粉專私訊,私訊簡述「看完前三週教材考試時依舊無法取得及格分數」和老師討論學習方法。 - 第二次互動:2024年3月28日 20:17 粉專私訊,私訊簡述「剛作答完這週考試,有兩題跟我的想法不太一樣」和老師討論 - 第三次互動:2024年5月6日 15:00 一對一討論 - 第四次互動:2024年5月10日 21:46粉專私訊,私訊簡述「如何讓 khttpd 在 UML GDB 的程式裡中斷」和老師討論 學期初時每次考試並沒有取得及格的分數,意識到自己對於教材的熟練程度不夠,尤其是 bitwise 操作章節。透過和老師的互動給的一點雞湯「你只是還不熟悉我的授課風格,繼續參加測驗就好,本月底若還是看不到改善,我們再來討論」之後便重新複習 bitwise 操作。把 bitwise 章節中的練習題全部練習過一遍,與實驗室同學在考試後 trace 測驗題的程式 (e.g., 開平方根、ilog2 計算以 2 為底的對數等題目)。隨著檢討次數上升,慢慢也跟上了考試節奏後續的考試也取得幾次滿分成績。 與授課老師的一對一討論 ## 5. 所見所聞所感,務必提及閱讀〈因為自動飲料機而延畢的那一年〉和回顧自身在本課程的投入狀況 ## 6. 每月發給實驗室指導教授的學習回顧 二月份學習回顧 * 寄信日期:2024/02/29 PM1:32 * 信件內容簡述:主要與指導教授分享作業進度、教材中學習到的 Git 操作、commit message 規範、linux/list.h 中的鏈結串列使用方法。 三月份學習回顧 * 寄信日期:2024/04/01 PM10:01 * 信件內容簡述:主要與指導教授分享課程進度,包括數值系統、BITWISE 操作、系統層面的記憶體管理對其及硬體的特性,以及閱讀 〈DUDE, IS MY CODE CONSTANT TIME?〉論文後的心得及對實驗室的效益。 四月份學習回顧 * 寄信日期:2024/05/11 PM4:16 * 信件內容簡述:主要與指導教授分享並行處理機制包括 atomic 指令、memory ordering、lock-free 程式設計等。 五月份學習回顧 * 寄信日期:2024/06/23 PM2:27 * 信件內容簡述:主要與指導教授分享學校另一門課的 FTL SSD 專題,描述用課程中學習到的並行處理機制解決 SSD 中的 critical section 資料錯誤問題。 我每個月都有發回顧信,且在信件只要討論到課程相關主題,也都有附上對應的鍊結供指導教授參閱,並沒有任何隱瞞。 在這個項目,我給自己評分為 **10** 分。 ## 7.使用GEOMEAN 來計算上述 (1) 到 (6) 各項的幾何平均