--- title: 2020 第七週作業 tags: _核心設計 date: April 9, 2020 breaks: true --- # 2020q1 Homework5 (kecho) contributed by < [babysuse](https://github.com/babysuse) > # 大綱 [toc] # 作業描述 參見 [H09: kecho](https://hackmd.io/@sysprog/linux2020-kecho) # CMWQ (Concurrency Managed Workqueue) 先來說說我對[核心文件](https://www.kernel.org/doc/html/latest/core-api/workqueue.html)的理解。在 Multi-Threaded 的 workqueue 設計中,每個處理器各有一個獨立的 thread worker。這種設計缺點在於每個處理器只能提供一個執行單元 (execution context),隨著核心的增長和作業系統的演進下,和 workqueue 的 user 增加的數量相比,就顯得很沒效率,或是說沒辦法提供一個足夠的工作 (work items) 運行數量 (concurrency level)。再加上,重點是每個 workqueue 都是對應獨立且固定的 worker,有點像是排隊時每個站台擁有各自隊伍,容易讓工作量不平均而沒辦法善用資源。 CMWQ 的想法在於虛擬化處理器的執行緒為 worker threads 的機制,允許同一時間下更多的執行單元 (execution context);並讓所有的 workqueue 共享整個 worker pools,像是統一的等待隊伍或是改用號碼機,可以平均各個 worker 和處理器的工作量;然後再提供 API 來更彈性地管理或是讓使用者可以控制 concurrency level。