--- title: Han1018 (謝宗翰) categories: User ... # 簡介 * 國立陽明交通大學 智慧與綠能產學研究所 * GitHub: [`Han1018`](https://github.com/Han1018) # 2024 Linux 核心實作 春季班 自我評量 ## 1. 成果發表和貢獻 [課堂簡記互動](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 實作的記憶體錯誤,並且使用了 Massif 視覺化記憶體使用量。使用到 Perf 工具的機會是,作業中為了檢驗實作的 merge sort 效果,使用 perf 工具得到排序百萬個節點的 cycles、instructions、執行時間,比較了 merget sort 與 linux 核心的 list_sort 差異。而 Ftrace 可以觀察 kernel space 程式的效能瓶頸,在期末專題中藉由使用 Ftrace,發現到特定 function 有著異常高的執行時間,觀察並使用快取機制改善後,增加了 2 倍以上的吞吐量(詳見期末專題開發紀錄)。 此外,作業中學習到 Linux 核心鏈結串列的實作並用此開發和改進核心模組、bitwise 操作、並行處理機制、檢驗複雜度的方法。其中學習檢驗複雜度方法時透過閱讀論文 和其檢測工具 [dudect](https://github.com/oreparaz/dudect),修正了作業 lab0-c 中 `Student's t-distribution` 檢驗時間複雜度的缺陷,去除小樣本來估計未知標準差的母體時出現的極端值。在專題中,大量使用到並行處理機制中,如 atomic、spinlock,並實作 lock-free 機制中的 RCU 用於維護放置快取內容的雜湊表。 ## 3. 期末專題 * Linux 核心專題: 高性能網頁伺服器:[GitHub](https://github.com/Han1018/khttpd) / [HackMD](https://hackmd.io/@sysprog/HkyNQeJrR) ## 4. 與授課教師的互動 ## 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) 各項的幾何平均