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}
|
---|