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

版本 996d297ea3e6fd94d9b1356d86632775514ab405

User/Han1018

Changes from 996d297ea3e6fd94d9b1356d86632775514ab405 to dcff3899a66a76e39d40a5adfae7d54892600c43

---
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 倍以上的吞吐量(詳見期末專題開發紀錄)。
在課程中的作業與測驗中學到了非常多的東西,首先是各種工具的使用,如 Valgrind、Perf、Ftrace 和 Git 等。在作業一和作業三中,我使用 Valgrind 分析記憶體問題,並排除 qtest 實作的記憶體錯誤,同時使用 Massif 視覺化記憶體使用量。為了檢驗實作的 merge sort 效果,我在作業中使用 Perf 工具,測量排序百萬個節點所需的 cycles、instructions 及執行時間,並比較了 merge sort 與 Linux 核心的 list_sort 的差異。

此外,作業中學習到 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 用於維護放置快取內容的雜湊表。
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,用於維護放置快取內容的雜湊表。

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