# 2019q1 Homework5 (daemon) contributed by < `afcidk` > * [F09: daemon](https://hackmd.io/s/r14Qu9hYV) ## 實作缺失的發現與改進 ### 1 ![](https://i.imgur.com/R9r4v41.png) 可以看到 `send_request` 和 `get_request` 都印出了額外的內容,因此在 `kernel_recvmsg` 之後幫 buf 加上 terminating character ('\0') 來避免這個問題。[patch](https://github.com/afcidk/kecho/commit/055834059f7e391185e95301bf49dcf09a51701a) ## 驗證效能 我撰寫了一個 C 語言程式,紀錄不同 thread 數量發出 request 給 server 的時候所需要的回應時間。這邊測量了 1 到 1000 個 thread 時花費的成本。 * 平均回應時間 ![](https://i.imgur.com/2YoM2sN.png) * 最差回應時間 ![](https://i.imgur.com/DiXkX9U.png) * CPU 使用率 ![](https://i.imgur.com/NkYykXm.png) ## Workqueue v.s. Task queue Workqueue 是在 Task queue 之後被提出的一個機制,在 workqueue 上面的每個 task 都被稱為 worker thread。這兩者比較大的差異是 workqueue 上面的每個 task 是在 process context 上跑的,因此可以允許 blocking function。 ## 使用 Workqueue * 平均回應時間 ![](https://i.imgur.com/3UHiUDZ.png) * 最差回應時間 ![](https://i.imgur.com/2zeUPTT.png) * CPU 使用率 ![](https://i.imgur.com/U5mISwz.png) ## 引進 CMWQ * 平均回應時間 ![](https://i.imgur.com/4A0Lfac.png) * 最差回應時間 ![](https://i.imgur.com/ssSaSdm.png) * CPU 使用率 ![](https://i.imgur.com/xND9mfe.png) ## Reference * [Working on workqueues](https://lwn.net/Articles/403891/) * [Workqueues get a rework](https://lwn.net/Articles/211279/) * [Concurrency-Managed Workqueues](https://lwn.net/Articles/355700/) * [Concurrency Managed Workqueue之(二):CMWQ概述](http://www.wowotech.net/irq_subsystem/cmwq-intro.html) * [Understanding the Linux Kernel, 3rd Edition](https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch04s08.html) > confidence interval > remove outlier