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