[b9537e6] | 1 | \chapter{User Level \glsxtrshort{io}} |
---|
| 2 | As mentionned in Section~\ref{prev:io}, User-Level \glsxtrshort{io} requires multiplexing the \glsxtrshort{io} operations of many \glspl{thrd} onto fewer \glspl{proc} using asynchronous \glsxtrshort{io} operations. Various operating systems offer various forms of asynchronous operations and as mentioned in Chapter~\ref{intro}, this work is exclusively focuesd on Linux. |
---|
[86c1f1c3] | 3 | |
---|
| 4 | \section{Existing options} |
---|
[b9537e6] | 5 | Since \glsxtrshort{io} operations are generally handled by the |
---|
[86c1f1c3] | 6 | |
---|
| 7 | \subsection{\texttt{epoll}, \texttt{poll} and \texttt{select}} |
---|
| 8 | |
---|
| 9 | \subsection{Linux's AIO} |
---|
| 10 | |
---|
[b9537e6] | 11 | |
---|
| 12 | |
---|
| 13 | \begin{displayquote} |
---|
| 14 | AIO is a horrible ad-hoc design, with the main excuse being "other, |
---|
| 15 | less gifted people, made that design, and we are implementing it for |
---|
| 16 | compatibility because database people - who seldom have any shred of |
---|
| 17 | taste - actually use it". |
---|
| 18 | |
---|
| 19 | But AIO was always really really ugly. |
---|
| 20 | |
---|
| 21 | \begin{flushright} |
---|
| 22 | -- Linus Torvalds\cit{https://lwn.net/Articles/671657/} |
---|
| 23 | \end{flushright} |
---|
| 24 | \end{displayquote} |
---|
| 25 | |
---|
| 26 | Interestingly, in this e-mail answer, Linus goes on to describe |
---|
| 27 | ``a true \textit{asynchronous system call} interface'' |
---|
| 28 | that does |
---|
| 29 | ``[an] arbitrary system call X with arguments A, B, C, D asynchronously using a kernel thread'' |
---|
| 30 | in |
---|
| 31 | ``some kind of arbitrary \textit{queue up asynchronous system call} model''. |
---|
| 32 | This description is actually quite close to the interface of the interface described in the next section. |
---|
| 33 | |
---|
[86c1f1c3] | 34 | \subsection{\texttt{io\_uring}} |
---|
[b9537e6] | 35 | A very recent addition to Linux, \texttt{io\_uring}\cit{io\_uring} is a framework that aims to solve many of the problems listed with the above mentioned solutions. |
---|
[86c1f1c3] | 36 | |
---|
[b9537e6] | 37 | \subsection{Extra Kernel Threads}\label{io:morethreads} |
---|
| 38 | Finally, if the operating system does not offer any satisfying forms of asynchronous \glsxtrshort{io} operations, a solution is to fake it by creating a pool of \glspl{kthrd} and delegating operations to them in order to avoid blocking \glspl{proc}. |
---|
[86c1f1c3] | 39 | |
---|
| 40 | \subsection{Discussion} |
---|
| 41 | |
---|
| 42 | |
---|
| 43 | \section{Event-Engine} |
---|
| 44 | |
---|
| 45 | |
---|
| 46 | \section{Interface} |
---|