--- title: 2024 年 Linux 核心設計/實作課程作業 —— ktcp image: https://repository-images.githubusercontent.com/249636967/4e4e8900-6e20-11ea-9abf-57f8123e9c66 description: 檢驗學員對 Linux 核心 kthread 和 workqueue 處理機制的認知 tags: linux2024 --- # L11: ktcp > 主講人: [jserv](https://wiki.csie.ncku.edu.tw/User/jserv) / 課程討論區: [2024 年系統軟體課程](https://www.facebook.com/groups/system.software2024/) :mega: 返回「[Linux 核心設計/實作](https://wiki.csie.ncku.edu.tw/linux/schedule)」課程進度表 ## :checkered_flag: 自我檢查清單 - [ ] 研讀〈[Linux 核心設計: RCU 同步機制](https://hackmd.io/@sysprog/linux-rcu)〉並測試相關 Linux 核心模組以理解其用法 - [ ] 如何測試網頁伺服器的效能,針對多核處理器場景調整 - [ ] 如何利用 [Ftrace](https://docs.kernel.org/trace/ftrace.html) 找出 `khttpd` 核心模組的效能瓶頸,該如何設計相關實驗學習。搭配閱讀《Demystifying the Linux CPU Scheduler》第 6 章 - [ ] 解釋 `drop-tcp-socket` 核心模組運作原理。`TIME-WAIT` sockets 又是什麼? - [ ] 研讀 [透過 eBPF 觀察作業系統行為](https://hackmd.io/@sysprog/linux-ebpf),如何用 eBPF 測量 kthread / CMWQ 關鍵操作的執行成本? > 參照 [eBPF 教程](https://github.com/eunomia-bpf/bpf-developer-tutorial) - [ ] 參照〈[測試 Linux 核心的虛擬化環境](https://hackmd.io/@sysprog/linux-virtme)〉和〈[建構 User-Mode Linux 的實驗環境](https://hackmd.io/@sysprog/user-mode-linux-env)〉,在原生的 Linux 系統中,利用 UML 或 `virtme` 建構虛擬化執行環境,搭配 GDB 追蹤 `khttpd` 核心模組 ## :penguin: 作業要求 * 回答上述「自我檢查清單」的所有問題,需要附上對應的參考資料和必要的程式碼,以第一手材料 (包含自己設計的實驗) 為佳 * 在 GitHub 上 fork [khttpd](https://github.com/sysprog21/khttpd),目標是 1. 引入 [Concurrency Managed Workqueue](https://www.kernel.org/doc/html/v4.15/core-api/workqueue.html) (cmwq),改寫 kHTTPd,分析效能表現和提出改進方案,可參考 [kecho](https://github.com/sysprog21/kecho) 2. 提供目錄檔案存取功能,提供基本的 [directory listing](https://cwiki.apache.org/confluence/display/httpd/DirectoryListings) 功能 3. 目前的 kHTTPd 初步實作 [HTTP 1.1 keep-alive](https://en.wikipedia.org/wiki/HTTP_persistent_connection),不過效率不彰,以 ftrace 一類的工具指出問題所在並改進 4. 引入 timer,讓 kHTTPd 主動關閉逾期的連線 5. 以 RCU 搭配自行設計的 lock-free 資料結構,在並行環境中得以釋放系統資源 > 參照 [http-server-rcu](https://github.com/frextrite/http-server-rcu) 6. 學習 [cserv](https://github.com/sysprog21/cserv) 的 memcache 並在 kHTTPd 重新實作 * 過程中應一併完成以下: * 修正 kHTTPd 的執行時期缺失 * 指出 kHTTPd 實作的缺失 (特別是安全疑慮) 並予以改正 * 用你改進的 kHTTPd 和 [cserv](https://github.com/sysprog21/cserv) 進行效能評比,解釋行為落差 ## 截止日期 * May 15, 2024 (含) 之前 > 越早在 GitHub 上有動態、越早接受 code review,評分越高 ## 作業觀摩 * [YiChianLin/khttpd](https://hackmd.io/@YiChianLin/linux2022-ktcp) * [zoanana990/khttpd](https://hackmd.io/@zoanana990/linux2022-ktcp) * [eric88525/kecho](https://hackmd.io/@eric88525/linux2022-ktcp) * [eecheng87/kecho](https://hackmd.io/@eecheng/Sy9XsgjOI) * [OscarShiang/kecho](https://hackmd.io/@oscarshiang/linux_kecho) * [bakudr18/khttpd](https://hackmd.io/@bakudr18/SkFA8Favu) * [AndybnA/khttpd](https://hackmd.io/@AndybnA/khttpd) * [eecheng/khttpd](https://hackmd.io/@eecheng/SkyvhMqwU) * [haogroot/khttpd](https://hackmd.io/@haogroot/2020q1linux-khttpd) * [KYG-yaya573142/khttpd](https://hackmd.io/@KYWeng/H1OBDQdKL)