Linux 核心設計: 針對事件驅動的 I/O 模型演化 === :::warning 注意!這是上課筆記 ::: :::info 原始課程在這裡 - [影片](https://www.youtube.com/watch?v=4ahU3xN5dMY) - [講義](https://hackmd.io/@sysprog/linux-io-model/https%3A%2F%2Fhackmd.io%2F%40sysprog%2Fevent-driven-server) Original by [jserv](http://wiki.csie.ncku.edu.tw/User/jserv) ::: --- | Section | Time| Description | | -------- | -------- | -------- | | 1 | [00:00:16](https://www.youtube.com/live/4ahU3xN5dMY?si=8mrtm0LaGeufMSb-&t=16) | ==The Evolution of Linux I/O Models: A Path towards IO_uring==<br> 1. 簡介。<br> 2. Blocking I/O: read().<br> 3. Non-blocking I/O.<br> 4. 在充滿偏見的台灣,用知識武裝自己。<br> 5. I/O Multiplexing: select(), epoll().<br> 6. Asynchronous I/O: aio_read().<br> 7. AIO 的效益在多核環境下,效果較顯著。<br> 8. AIO pros and cons.<br> 9. thread pool 的設計:醫生跟病患。<br> 10. sendfile(): 降低 kernel and user space 的資料存取。<br> 11. Linux libaio functions.<br> 12. POSIX AIO(user level) v.s. KAIO(kernel level).<br> 13. io_uring: submission queue(SQ) and completion queue(CQ).<br> 14. 實驗數據:sync / posix-aio / libaio / io_uring. | | 2 | [01:21:36](https://www.youtube.com/live/4ahU3xN5dMY?si=ak4QCPzsvgM7WXk9&t=4896) | 1. 簡單複習。<br> 2. 多執行緒的講古: 在執行緒出來之前,使用 epoll 滿足需求。<br> 3. "對 seHTTPd 進行壓力測試"。<br> 4. cserv 專案。<br> 5. Asynchronous I/O Model. | | 3 | [01:35:13](https://www.youtube.com/live/4ahU3xN5dMY?si=P_u-WR9zcILJNWt-&t=5713) | 1. Event-driven Server<br> 2. 案例探討: NGINX.<br> 3. Proxy server 創業講古時間. | | 4 | [01:56:43](https://www.youtube.com/live/4ahU3xN5dMY?si=a50RylMgONstPk-E&t=7003) | 1. NGINX 的介紹。 | | 5 | [02:03:38](https://www.youtube.com/live/4ahU3xN5dMY?si=8nmlFyQdCgZWK-nz&t=7418) | 1. 以 sendfile 和 splice 系統呼叫達到 Zero-Copy.<br> 2. khttpd 的講古。<br> 3. sendfile 系統呼叫。<br> 4. Zero-Copy. | | 6 | [02:26:30](https://www.youtube.com/live/4ahU3xN5dMY?si=JWbil6JjTAP929zw&t=8790) | 1. splice 系統呼叫。<br> 2. Thread Pool.<br> 3. Thread pool 與 epoll loop 的關係。<br> 4. 野雞大學上課的經驗分享。 | | 7 | [02:52:37](https://www.youtube.com/live/4ahU3xN5dMY?si=_bZ8hCevdpCSFehA&t=10357) | 1. 高效 Web 伺服器開發。<br> 2. TCP 伺服器的實作挑戰。 | | 8 | [03:08:31](https://www.youtube.com/live/4ahU3xN5dMY?si=dPQtFIA7767ukFYP&t=11311) | 1. Reactor Pattern.<br> 2. edge/ level trigger.<br> 3. 實作考量點。<br> 4. 透過 timerfd 處理週期性任務。<br> 5. khttpd jserv 版.