# 2019q1 Homework5 (daemon)
contributed by < `afcidk` >
* [F09: daemon](https://hackmd.io/s/r14Qu9hYV)
## 實作缺失的發現與改進
### 1

可以看到 `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 時花費的成本。
* 平均回應時間

* 最差回應時間

* CPU 使用率

## Workqueue v.s. Task queue
Workqueue 是在 Task queue 之後被提出的一個機制,在 workqueue 上面的每個 task 都被稱為 worker thread。這兩者比較大的差異是 workqueue 上面的每個 task 是在 process context 上跑的,因此可以允許 blocking function。
## 使用 Workqueue
* 平均回應時間

* 最差回應時間

* CPU 使用率

## 引進 CMWQ
* 平均回應時間

* 最差回應時間

* CPU 使用率

## 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