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

版本 8ca8f585e514e111a35f82a4f53fd598c2c20efe

User/Han1018

Changes from 8ca8f585e514e111a35f82a4f53fd598c2c20efe to 000eda49194be03e4489172267ce3ec2e4cefaf9

---
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 實作的記憶體錯誤。為了檢驗實作的 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 為底的對數等題目)。隨著檢討次數上升,慢慢也跟上了考試節奏後續的考試也取得幾次滿分成績。
學期初時每次考試並沒有取得及格的分數,意識到自己對於教材的熟練程度不夠,尤其是 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) 各項的幾何平均