--- title: 2020 年春季 Linux 核心設計課程期末專題 image: description: 列舉「Linux 核心設計」課程期末專題的可能題目 --- # 2020 年春季 Linux 核心設計課程期末專題 ## XDP 透過 XDP(eXpress Data Path,Linux 核心得以更有效率地處理低階封包,拋棄帶有 L4Drop 的 DoS 攻擊封包。如果封包發現錯誤,則在 protocol stack 前就會判斷是否要繼續處理或丟棄。 > 執行人: AndybnACT ## 透過 Netfilter 自動過濾廣告 儘管我們可在網頁瀏覽器中透過像是 [AdBlock](https://getadblock.com/) 這類的 extension 來過濾廣告,但需要額外的設定和佔用更多系統資源,倘若我們能透過 netfilter,直接在核心層級過濾網路廣告,那所有應用程式都有機會受益。 參考資訊: * [How to drop 10 million packets per second](https://blog.cloudflare.com/how-to-drop-10-million-packets/) * [Use the iptables firewall to block ads on your Linux machine](https://securitronlinux.com/debian-testing/use-the-iptables-firewall-to-block-ads-on-your-linux-machine/) * [nBlock](https://github.com/notracking/nBlock) > 執行人: ZhuMon > [開發紀錄](https://hackmd.io/@ZhuMon/2020q1_final_project) ## KTLS > 題目: KTLS —— Linux 核心內部的 TLS 實作 在 Linux 核心內部實作 Transport Layer Security (TLS),好處是: 1. 更低的 CPU 使用率 2. 過往 SSL 實作僅限於使用者層級緩衝區的安全,但 TLS 成為核心的服務後,即可提升為傳輸層級的安全 Linux 核心自 `v4.13` 已整合來自 Facebook 和 Red Hat 合作的 KTLS,相關資訊可見: * [Kernel TLS](https://github.com/torvalds/linux/blob/master/Documentation/networking/tls.rst) * [Kernel TLS offload](https://github.com/torvalds/linux/blob/master/Documentation/networking/tls-offload.rst) 相關討論: * [来自 Facebook 的 KTLS (Kernel SSL/TLS) 原理和實例](https://blog.csdn.net/dog250/article/details/53868519) * [TLS in the kernel](https://lwn.net/Articles/666509/) * [Linux Kernel TLS/DTLS Module](https://github.com/ktls/af_ktls) * [Hacker News](https://news.ycombinator.com/item?id=15164568) > 執行人: OscarShiang - [共筆](https://hackmd.io/@oscarshiang/linux_ktls) ## Twin YouTube: [TWIN: An Even Smaller Window System For Even Smaller Devices](https://youtu.be/726RpDWE-O0) [論文和投影片](https://keithp.com/~keithp/talks/twin-ols2005/) 相關討論: 1. [嵌入式向量图形系统设计](https://blog.joouis.com/2020/evgui-design-review/) 2. [SVG Tiny 与 Libsvgtiny](https://blog.joouis.com/2020/evgui-svgtiny/) 3. [XML Parser for Libsvgtiny](https://blog.joouis.com/2020/evgui-xml-parser/) 4. [EVGUI 触控简单处理笔记](https://blog.joouis.com/2020/evgui-touch-interaction/) 5. [TWIN API 整理](https://blog.joouis.com/2020/evgui-twin-apis/) 6. [以 Clock 应用为例追踪 TWIN 的运作流程](https://blog.joouis.com/2020/evgui-twin-workflow-review/) ## LittleFS Arm Mbed 作業系統有個子項目名為 littlefs,顧名思義就是針對嵌入式裝置開發的小型檔案系統,我們可透過 FUSE 掛載到 Linux 或 macOS 作為檔案系統,卻不用撰寫對應的核心模組。 本任務嘗試改寫 littlefs,使其直接成為 Linux 核心原生 (native) 檔案系統,並確保在並行操作依舊符合預期。 相關討論: * [littlefs-fuse](https://www.facebook.com/groups/system.software2020/permalink/326283654972507/) > 執行人: simpson0114 ## simplefs > 題目: 從無到有開發針對 Linux 核心的檔案系統 為了探索 Linux VFS (virtual file system) 介面及檔案系統實作機制,我們從無到有撰寫一個運作於 Linux 核心模式中的精簡檔案系統,原始程式碼約一千餘行,支援基本的檔案和目錄處理,同時也考慮到權限和並行處理的議題。 相關討論: * [simplefs](https://www.facebook.com/groups/system.software2020/permalink/330569901210549/) > 執行人: ndsl7109256 ## usbip 以 USB/IP 來說,這個實作已整合進 Linux 核心,能夠將 USB 裝置透過網路連線重新導向到另外一台電腦,具體來說: * USB 裝置實際所在的電腦稱為 server (伺服器),接收重導那台稱為 client(客戶端; * client 端可搭配 udev 和相關的工具,接受裝置重新導向後,自動掛載 server 端的 USB 裝置; 這樣的情境在虛擬化環境變得重要,因為一台伺服器可提供遠端桌面所需要資源,但是 USB 裝置往往就需要適度分享,於是透過 USB/IP 可讓遠端裝置分享變得可行。 相關討論: * [usbip](https://www.facebook.com/groups/system.software2020/permalink/331069264493946/) > 執行人: ire33164 ## vcam > 題目: 打造 Linux 虛擬攝影機裝置驅動程式 vcam 是個針對 Linux 核心開發的虛擬攝影機裝置,全部程式碼僅 1 千 5 百行,從而可理解 V4L2 (video fro Linux APIs, version 2) 的使用和 Linux 多媒體架構。開發一個虛擬的攝影機裝置除了理解 Linux 核心設計外,也有資訊安全的幫助,例如你可以安插相關程式碼,紀錄有哪些應用程式偷偷啟動攝影機,但過程中又不會揭露真正的隱私。本議程不僅討論 V4L2,也涵蓋 DMA-Buf 這樣著重 Zero-copy 裝置驅動程式運作機制。 相關討論: * [vcam](https://www.facebook.com/groups/system.software2020/permalink/332852434315629/) > 執行人: eecheng87 * [開發紀錄(vcam)](https://hackmd.io/@eecheng/B16rQ3GjU) / [Github](https://github.com/eecheng87/vcam) ## `/dev/mem` 研究 編撰 [Linux 核心的 /dev/mem 裝置](https://hackmd.io/@sysprog/linux-mem-device),強化 eBPF, crash 等工具的運用,目標是「成為電腦的主人」 —— 想改哪一段記憶體就可輕鬆達成 > 執行人: oucs638 ## Linux 排程器研究 * [Linux fork之后,到底是子进程先运行还是父进程先运行](https://blog.csdn.net/dog250/article/details/105756168) * [从一个CFS调度案例谈Linux系统卡顿的根源](https://blog.csdn.net/dog250/article/details/105710571) > 執行人: babysusue * [開發紀錄(Linux 排程器研究)](https://hackmd.io/@babysuse2018/Hya2VEziI) ## Faceboo"c" Facebooc (注意書寫方式,最後的字母是 c) 用 C 語言打造一套類似 Facebook 的網路服務,允許使用者發文並按讚,本專案唯一的相依套件是 SQLite3。 這個專案實質引導學員成為 full stack engineer —— 從 web 伺服器開發、資料庫處理、SQL 命令、Linux 系統呼叫 (如 select) 和進階的 epoll,到網頁程式開發都一把抓。這不單是 C 程式,還是很好的系統分析題材 相關討論: * [Facebooc](https://www.facebook.com/groups/system.software2020/permalink/336683797265826/) ## High performance Web Server > 題目: 高效網頁伺服器 —— 針對 Linux 核心和進階系統呼叫重新設計 本議程探討從無到有打造 Linux 平台的高效網頁伺服器,涵蓋是否該將伺服器實作於 Linux 核心內部、並行處理、I/O 模型、epoll、React pattern,和 Web 伺服器在事件驅動架構的考量。 > 執行人: jwang0306 * [開發紀錄](https://hackmd.io/@jwang0306/final-project) ## 以 Linux XDP 為基礎的高效網路負載平衡器 > 題目: XDP (eXpress Data Path) 自 Linux 核心 4.8 版本起作為以 eBPF 為基礎的高效資料處理路徑,一旦網路中斷觸發後,XDP 允許將特定的操作提前在 TCP/IP 堆疊之前就處理,不僅反應更快而且省下寶貴的記憶體分配的成本。本議程以 XDP 作為切入,探討如何在這之上發展高效網路負載平衡器,並針對典型的 High Availability (HA) 叢集和非典型的情境去調整。 延伸閱讀: [XDP Use-case: Load Balancer](https://prototype-kernel.readthedocs.io/en/latest/networking/XDP/use-cases/xdp_use_case_load_balancer.html) > 執行人: foxhoundsk ## 重做 [quiz5](https://hackmd.io/@sysprog/linux2020-quiz5) 重做指定隨堂測驗並完成延伸問題 > 執行人: 64079102 ## 重做 [quiz6](https://hackmd.io/@sysprog/linux2020-quiz6), [quiz7](https://hackmd.io/@sysprog/linux2020-quiz7), [quiz9](https://hackmd.io/@sysprog/linux2020-quiz9) 重做指定隨堂測驗並完成延伸問題 > 執行人: YanjenChen ## 重做 [quiz11](https://hackmd.io/@sysprog/linux2020-quiz11), [quiz12](https://hackmd.io/@sysprog/linux2020-quiz12) > 執行人: kylekylehaha ## 重做 [quiz13](https://hackmd.io/@sysprog/linux2020-quiz13), [quiz14](https://hackmd.io/@sysprog/linux2020-quiz14), [quiz10](https://hackmd.io/@sysprog/linux2020-quiz10) > 執行人: eddie9712 > [重做 quiz13,quiz14,quiz10](https://hackmd.io/Nprhfx-kQR6iNwZqjHY0UA) ## 重做 kecho 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: C24042018 ## 重做 fiber 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: a20034294 ## 重做 fibdrv 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: sherisea ## 重做 kcalc 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: cicero884 ## 重做 khttpd 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: IepIweidieng ## 重做 fibdrv [2020q2 Homework2 (fibdrv)](https://hackmd.io/@KYWeng/rkGdultSU) > 執行人: KYWeng