F09: daemon

主講人: jserv / 課程討論區: 2019 年系統軟體課程

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
返回「Linux 核心設計」課程進度表

預期目標

  • 開發 non-trivial Linux kernel module
  • 學習 Linux 核心的 kernel thread 處理機制
  • 預習電腦網路原理

電腦網路概論

預習 CS:APP 第 11 章: Network Programming,搭配閱讀:

kecho

  • 完全運作在 Linux 核心模式的 echo server
  • 不到 200 行 C 原始程式碼
  • 示範 kthread 的使用
$ ps -ef | grep fastecho

許多 Linux 裝置驅動程式或子系統會透過 kernel threads(簡稱kthread),讓 kthread 在背景執行提供特定服務,然後等待 events 發生。等待的過程中,kthread 會進入 sleep 狀態,當 events 發生時,kthread 會被喚醒執行一些耗時的工作,如此一來,可防止 main thread 被 blocked。

下方命令可查閱系統上的 kthread:

$ ps -ef

預期可見:

root         2     0  0 Feb17 ?        00:00:01 [kthreadd]

PPID 為 2 的都屬於 kthread,而 $ ps auxf 可見樹狀結構。

取得 kecho 程式碼並編譯:

$ git clone https://github.com/sysprog21/kecho
$ cd kecho
$ make

預期可見到檔案 fastecho.ko 的產生,接著可測試:

$ sudo insmod fastecho.ko
$ telnet localhost 12345

會出現以下輸出:

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

可輸入任何字元 (記得按下 Enter),然後就會看到 telnet 回應你剛才輸入的字元。

按下 Ctrl] 組合鍵,之後按下 q,即可離開 telnet 畫面。接著可以試著在 $ telnet localhost 12345 時不要輸入任何字元,只是等待,會看到以下的 kernel 訊息 (可用 $ dmesg 觀察):

                 cope
                 le:	    4404 kB
                 RssShmem:	       0 kB
                 VmData:	     880 kB
                 VmStk:	     132 kB
                 VmExe:	     136 kB
                 VmLib:	    6336 kB
                 VmPTE:	     212 kB
                 VmSwap:	       0 kB
                 HugetlbPages:	       0 kB
                 CoreDumping:	0
                 Threads:	1
                 SigQ:	0/31543

尋找剛才載入的 kecho 核心模組:

$ ps -ef | grep fastecho

預期可見以下:

root     18147     2  0 14:13 ?        00:00:00 [fastecho]

KernelHTTP

參見 Kernel HTTPd

作業要求

  1. 指出 kecho 程式碼 實作的缺失 (注意像是 buffer overflow 一類的問題),並在你 fork 出來的 repository 中予以改進
    • Linux 核心版本至少為 4.15, 可嘗試熱騰騰的 linux-5.1
    • 留意 kernel API 的變更
  2. 參閱相關材料,設計足以驗證 kecho 效能的實驗,過程中留意到 concurrency;
  3. kecho 的程式碼基礎上,引入 Concurrency Managed Workqueue (cmwq),配合 (2) 的實驗,提出效能改善計畫和落實;
  4. 研究上述 KernelHTTP,整合到 kecho 目錄中,以另外一個 Linux 核心模組或者共用程式碼的方式存在,比照 Kernel HTTPd 共筆的實驗,檢驗效能和正確性;

繳交方式

編輯 Homework5 作業區共筆,將你的觀察、上述要求的解說和改善過程,紀錄於新建立的共筆

截止日期

May 13, 2019 (含) 之前