# 2023q1 Homework7 (ktcp) contributed by < [tintinjian12999](https://github.com/tintinjian12999) > ## 實驗環境 ```shell $ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 $ ls cpu 架構: x86_64 CPU 作業模式: 32-bit, 64-bit Byte Order: Little Endian Address sizes: 43 bits physical, 48 bits virtual CPU(s): 8 On-line CPU(s) list: 0-7 每核心執行緒數: 2 每通訊端核心數: 4 Socket(s): 1 NUMA 節點: 1 供應商識別號: AuthenticAMD CPU 家族: 23 型號: 24 Model name: AMD Ryzen 7 3750H with Radeon Vega Mobile Gfx 製程: 1 Frequency boost: enabled CPU MHz: 1700.000 CPU max MHz: 2300.0000 CPU min MHz: 1400.0000 BogoMIPS: 4591.40 虛擬: AMD-V L1d 快取: 128 KiB L1i 快取: 256 KiB L2 快取: 2 MiB L3 快取: 4 MiB NUMA node0 CPU(s): 0-7 ``` ## 開發紀錄 ### Introduction and why CMWQ 參考 [CMWQ](https://www.kernel.org/doc/html/latest/core-api/workqueue.html) 在原本的 workqueue(wq) 實作中,分為 muti threaded(MT)wq 和 single thereaded(ST)wq 兩種,MT wq 對於每個 CPU 都擁有一個 worker thread 且會隨著 CPU 數量增加而跟著增加,因此可能會導致預設的32k PID(Process ID) 空間被用完。另一方面 ST wq 在整個系統中只擁有一個 worker thread 。 且MT wq對於並行(Concurrency)的效果也有限,歸因於每個 wq 只維護自身的 work pool。 MT wq 在每個 CPU 上只擁有一個執行上下文(Execution context),ST wq 則是在一個系統上只擁有一個執行上下文。於是當多個工作項目需要執行時就有可能會導致問題,如 blocking 或 deadlock。 為了改善以上的問題 Concurrency Managed Workqueue (cmwq) 便被提出,並有下列三個目標 * 能夠兼容原有的 workqueue API。 * 用每個CPU共有的 worker pools 來避免資源浪費並提供具有彈性的並行等級。 * 自動調整 worker pool 和並行等級使 API 的使用者不用在意裡面的細節。 ### CMWQ 運作方式 ### 引入 CMWQ #### 參考 kecho
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up