Links and Resources =================== Topic: Kernel and IO -------------------- Background: Asynchronous IO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - https://www.kegel.com/c10k.html[The C10k problem]: a very frequently quoted (and actually quite old page (2003-2011) that analyses the problem of serving more than 10k requests from a server, the bottlenecks and possible solution strategies. - https://dreamsongs.com/WorseIsBetter.html[The crux with »worse is better«]. This is a summary by Richard P. Gabriel himself, looking back, and he still has not made up his mind if _worse is better_. The tension between the »*Berkely*« (or »New Jersy«) style and the »*MIT* style« helps to understand design choices taken in the original design of Unix -- and with the advent of fast SSDs and finally an interface like `io_uring` in the Linux kernel, all these unresolved questions are coming back to haunt us. * https://dreamsongs.com/Files/WorseIsBetterPositionPaper.pdf[Back to the Future: Is Worse (Still) Better?] * https://dreamsongs.com/Files/ProWorseIsBetterPosition.pdf[Back to the Future: Worse (Still) is Better!] History of io_uring ~~~~~~~~~~~~~~~~~~~ - https://web.archive.org/web/20251010072644/https://kernel.dk/io_uring.pdf[Whitepaper(2019): Efficient IO with io_uring] - https://lwn.net/Articles/810414/[LWN.net: The rapid growth of io_uring] - https://web.archive.org/web/20200421163135/https://thenewstack.io/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/[2020: io_uring and eBPF will revolutionize programming in linux] IO_URING -------- Introduction ~~~~~~~~~~~~ * https://unixism.net/loti/[»Lord of the uring«] * https://towardsdev.com/io-uring-vs-epoll-syscall-overhead-linux-performance-a3d7fcc6c9b9?gi=e429808ce081[The Linux I/O Interface That Finally Makes Sense] * https://lwn.net/Articles/776703/[LWN.2019: Ringing in a new asynchronous I/O API] (explains the low-level API) Reference ~~~~~~~~~ * https://man7.org/linux/man-pages/man7/io_uring.7.html[Manpage (low-level API)] * https://unixism.net/loti/ref-liburing/index.html[Overview (liburing)] ** https://unixism.net/loti/ref-liburing/submission.html[Submission and Submission helpers] ** Liburing provides _submission helpers_ for common Kernel IO calls... - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_nop[io_uring_prep_nop] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_read[io_uring_prep_read] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_write[io_uring_prep_write] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_readv[io_uring_prep_readv] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_read_fixed[io_uring_prep_read_fixed] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_writev[io_uring_prep_writev] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_write_fixed[io_uring_prep_write_fixed] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_fsync[io_uring_prep_fsync] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_close[io_uring_prep_close] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_openat[io_uring_prep_openat] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_openat2[io_uring_prep_openat2] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_fallocate[io_uring_prep_fallocate] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_statx[io_uring_prep_statx] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_fadvise[io_uring_prep_fadvise] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_madvise[io_uring_prep_madvise] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_splice[io_uring_prep_splice] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_recvmsg[io_uring_prep_recvmsg] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_sendmsg[io_uring_prep_sendmsg] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_recv[io_uring_prep_recv] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_send[io_uring_prep_send] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_accept[io_uring_prep_accept] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_connect[io_uring_prep_connect] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_epoll_ctl[io_uring_prep_epoll_ctl] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_poll_add[io_uring_prep_poll_add] - https://unixism.net/loti/ref-liburing/submission.html#c.io_uring_prep_poll_remove[io_uring_prep_poll_remove]