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

版本 c6ff6ce81d179b8b43b830dc88cfa5781d3aee8d

Han1018 (謝宗翰)

簡介

  • 國立陽明交通大學 智慧與綠能產學研究所

  • GitHub: Han1018

2024 Linux 核心實作 春季班 自我評量

1. 成果發表和貢獻

課堂簡記互動 中提出同學間的共同疑惑 kernel space 的 GDB 方式,得到老師 KDB / UML 的解答後。後續便整理 kHTTPd 開源專案安裝至 UML 的方法於專題開發紀錄中。

kHTTPd 開源專案參考資料修訂,改善 Paintako 同學的專案開發紀錄,使語意更通順。

  • 引入 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 / HackMD

  • 2024q1 Homework2 (quiz1+2):HackMD

  • 2024q1 Homework3 (ttt):2024q1 Homework1 (lab0):GitHub

  • 2024q1 Homework5 (assessment):HackMD

  • 2024q1 Homework6 (integration):HackMD

在課程中的作業與測驗中學到了非常多的東西,首先是各種工具的使用,如 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,修正了作業 lab0-c 中使用 Student’s t-distribution 檢驗時間複雜度的缺陷,去除了在小樣本估計未知標準差時可能出現的極端值。

在期末專題中,大量使用了並行處理機制,如 atomic、spinlock,並實作了 lock-free 機制中的 RCU,用於維護放置快取內容的雜湊表。通過引入 CMWQ 改善了創建 kthread 時的成本,改善吞吐量約 1.5 倍。

3. 期末專題

  • Linux 核心專題: 高性能網頁伺服器:GitHub / HackMD

課程專題聚焦於提升 kernel mode 網頁伺服器的吞吐量。專題中增添了 kernel 模組的目錄顯示功能,並透過 Ftrace 定位效能瓶頸進行改善,過程中使用了 Ftrace、CMWQ、RCU 和網路通訊機制。透過 CMWQ、content cache 改善了吞吐量,與現行網站相比在特定使用情境下吞吐量有大幅的優勢。

在這個項目,我給自己的評分為 10 分。 專題開發過程中學習並運用了並行處理機制保護 critical section,並且使用了 Ftrace 定位出效能瓶頸區域並予以改善,實際開發了 kernel module 並使用 CMWQ 改善原先實作建立 kthread 時的時間成本。

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) 各項的幾何平均