| 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.
|
|---|
| 3 |
|
|---|
| 4 | \section{Existing options}
|
|---|
| 5 | Since \glsxtrshort{io} operations are generally handled by the
|
|---|
| 6 |
|
|---|
| 7 | \subsection{\lstinline|epoll|, \lstinline|poll| and \lstinline|select|}
|
|---|
| 8 |
|
|---|
| 9 | \subsection{Linux's AIO}
|
|---|
| 10 |
|
|---|
| 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 |
|
|---|
| 34 | \subsection{\texttt{io\_uring}}
|
|---|
| 35 | A very recent addition to Linux, @io_uring@\cit{io\_uring} is a framework that aims to solve many of the problems listed with the above mentioned solutions.
|
|---|
| 36 |
|
|---|
| 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}.
|
|---|
| 39 |
|
|---|
| 40 | \subsection{Discussion}
|
|---|
| 41 |
|
|---|
| 42 |
|
|---|
| 43 | \section{Event-Engine}
|
|---|
| 44 |
|
|---|
| 45 |
|
|---|
| 46 | \section{Interface}
|
|---|