主講人: jserv / 課程討論區: 2019 年系統軟體課程
預習 CS:APP 第 11 章: Network Programming,搭配閱讀:
許多 Linux 裝置驅動程式或子系統會透過 kernel threads(簡稱kthread
),讓 kthread 在背景執行提供特定服務,然後等待 events 發生。等待的過程中,kthread 會進入 sleep 狀態,當 events 發生時,kthread 會被喚醒執行一些耗時的工作,如此一來,可防止 main thread 被 blocked。
下方命令可查閱系統上的 kthread:
預期可見:
PPID 為 2
的都屬於 kthread,而 $ ps auxf
可見樹狀結構。
取得 kecho 程式碼並編譯:
預期可見到檔案 fastecho.ko
的產生,接著可測試:
會出現以下輸出:
可輸入任何字元 (記得按下 Enter),然後就會看到 telnet 回應你剛才輸入的字元。
按下 Ctrl
和 ]
組合鍵,之後按下 q
,即可離開 telnet 畫面。接著可以試著在 $ telnet localhost 12345
時不要輸入任何字元,只是等待,會看到以下的 kernel 訊息 (可用 $ dmesg
觀察):
尋找剛才載入的 kecho 核心模組:
預期可見以下:
參見 Kernel HTTPd
4.15
, 可嘗試熱騰騰的 linux-5.1
kecho
效能的實驗,過程中留意到 concurrency;kecho
的程式碼基礎上,引入 Concurrency Managed Workqueue (cmwq),配合 (2) 的實驗,提出效能改善計畫和落實;kecho
目錄中,以另外一個 Linux 核心模組或者共用程式碼的方式存在,比照 Kernel HTTPd 共筆的實驗,檢驗效能和正確性;編輯 Homework5 作業區共筆,將你的觀察、上述要求的解說和改善過程,紀錄於新建立的共筆
May 13, 2019 (含) 之前