H11: fiber
主講人: jserv / 課程討論區: 2020 年系統軟體課程
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 核心設計」課程進度表
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 →
預期目標
- 搭配第 8 周進度,理解執行緒實作機制
- 針對 Linux 核心的設計,實作高效率的 M:N threading model
- 學習透過 eBPF 追蹤特定的 Linux 系統呼叫並解讀
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 →
Thread Pool 實作和視覺化分析
ThreadKit 提供一系列輕量級的執行緒工具,其中包含一個簡易的 Thread Pool 實作,搭配內建視覺化的效能分析工具 (profiler),後者利用 chrome://tracing。
取得原始程式碼並編譯測試:
預期可見類似以下的輸出:
在現行目錄下,會出現檔名為 threadtracer.PID.json
的檔案,其中 PID 是數值,即 process ID。此時,打開 Google Chrome 網頁瀏覽器,開啟網址 chrome://tracing
並注意左上角有個 "load" 的按鈕,按下並指定剛才產生的 JSON 檔案,預期可見類似下圖:
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 →
上圖的 dummy_task
為 thread function, Process 47041
是 PID、粉紅色區域則是執行過程中的 CPU 使用率,你可以透過右方的視角切換功能,放大特定區域,點擊即可見下方資訊,例如在特定的時間單元中,執行時間和其比例等等。又,由於 thread pool 的運作機制是事先建立執行緒 (在本例是 4
個),所以無論多少 thread pool 之上的任務被新增,終究只有 4 個執行緒並行運作。
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 →
Fiber
fiber 是個實作 M:N threading model 的套件,針對 Linux 核心機制發展,設計動機是提供比原生執行緒 (native thread) 更小的執行單元,一般可稱為 Fiber。現有的實作具備以下特徵:
- Preemptive user-level threads
- Familiar threading concepts are available
- Mutexes
- Condition varialbles
取得原始程式碼並編譯測試:
預期可見類似以下輸出: (有時無法全數執行通過,實屬正常,現行實作存在若干缺陷)
研讀 Linux 核心設計: 透過 eBPF 觀察作業系統行為,得知 clone 系統呼叫在一定時間內的統計量和發生頻率,也能善用 calltop 這個同樣運用 eBPF 的工具來分析系統呼叫。
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 →
作業要求
- 研讀 Paul Turner 的簡報檔案 User-level threads 及相對應的演講錄影,記錄你的認知,並回答以下問題:
- M:N model 的優勢在哪?請舉例說明
- M:N model 的劣勢為何?舉例說明並談論 Linux NPTL 作為折衷的設計,做了哪些修正?搭配閱讀 The future of M:N threading 討論串
- Google 內部 (至少在 2013 年) 針對執行緒實作做了哪些調整?
- 答覆 第 8 週測驗題 第 2 題組的所有延伸問題,需要設計實驗和解讀各式數據
- 解釋上述 threadpool 內建 profiler 運作的機制,特別是 getrusage 和
RUSAGE_THREAD
的使用。可透過 eBPF 觀察及分析;
- 自 GitHub fiber 進行 fork,目標是修正現有 fiber 實作的缺失並發展視覺化效能分析工具,過程中應滿足以下:
- 解釋 Fiber 運作機制,和指出原有測試項目無法通過的原因並修正;
- 以
$ grep -r FIXME
找出程式碼標注的改進事項,特別是記憶體管理相關,若能引入高效能的 memory pool 實作,會有助益;
- 學習 第 8 週測驗題 的實作手法,對 Fiber 程式予以重構 (refactor),讓實作更清晰並易於維護;
- 針對 Fiber,撰寫更多的測試案例,如 Producer–consumer problem,過程中你可能會新增若干 API,儘可能維持和 POSIX Thread 的對應;
- 將前述的視覺化效能分析工具整合在 Fiber 並設計對應的實驗;
- 提出改進 Fiber 效能的機制並予以落實;
- ThreadKit 提出的 tasklet 定位是 "thread without stack",思考其效益,也對照 Protothread 這樣 "Threads without stacks" 的設計 (即不用依賴 ucontext) 的效能表現,和探討其限制;
繳交方式
編輯 Homework6 作業區共筆,將你的觀察、上述要求的解說、應用場合探討,以及各式效能改善過程,善用 gnuplot 製圖,紀錄於新建立的共筆
截止日期
越早在 GitHub 上有動態、越早接受 code review,評分越高