contributed by < jwang0306
>
$ sudo insmod khttpd.ko port=1999
這命令是如何讓 port=1999
傳遞到核心,作為核心模組初始化的參數呢?htstress.c
用到 epoll 系統呼叫,其作用為何?這樣的 HTTP 效能分析工具原理為何?透過 htstress 測試原本每秒所能處理的請求:
輸出結果為大約 15000 requests/sec:
以下實做參考了 sysprog21/kecho 。與該實做的不同點是,我沒有去自己建立並維護一個全域的 list ,目的只是為了在清理 workqueue 的時候依循著該 list 將資源釋放。我覺得只要在每個 work 執行的 function (這裡為 http_server_worker
)最後釋放就好,每完成一個 work 就釋放一個。而且 workqueue 裡面的 struct worker_pool
本來就有一個 worklist 用以維護 queue_work()
所插入的 works 了,所以我認為不需要再額外去維護一個全域的 list 。
sock
:每個 connection 都有一個 socketkhttpd_work
:每一個 request 都代表一個 workkhttpd_work_data
INIT_WORK
的時候,會將此 function 賦予 work (__work)->func = func
void
queue_work(khttpd_wq, work)
alloc_workqueue(char *name, unsigned int flags, int max_active)
WQ_MEM_RECLAIM
(default)WQ_UNBOUND
WQ_HIGHPRI
flush_workqueue(struct workqueue_struct *wq)
destroy_workqueue(struct workqueue_struct *wq)
將 concurrent connections 數目調大:
輸出結果為大約 33000 requests/sec ,翻了一倍左右:
由於我不確定整合到底是整合到什麼地步,因此首先就用最直接簡單的方法達到了要求,目前沒有其他的想法。
Makefile
將 bignum fibonacci 引入request_url
,拿出數字http_server_response()
回傳至 client 端這就是你需要釐清且準備好解決方案的議題。
TODO