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]
