Changes in / [0a6da484:21923bd]


Ignore:
Location:
doc/theses/thierry_delisle_PhD/comp_II
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • doc/theses/thierry_delisle_PhD/comp_II/comp_II.tex

    r0a6da484 r21923bd  
    447447$select$ entails significant complexity and is being replaced in UNIX operating-systems, which make it a less interesting alternative.
    448448Another popular interface is $epoll$\cite{epoll}, which is supposed to be cheaper than $select$.
    449 However, $epoll$ also does not handle the file system and anectodal evidence suggest it has problem with linux pipes and $TTY$s.
    450 A popular cross-platform alternative is $libuv$\cite{libuv}, which offers asynchronous sockets and asynchronous file system operations (among other features).
     449However, $epoll$ also does not handle the file system and seems to have problem to linux pipes and $TTY$s\cit.
     450A very recent alternative that I am investigating is $io_uring$\cite{io_uring}.
     451It claims to address some of the issues with $epoll$ but is too recent to be confident that it does.
     452Finally, a popular cross-platform alternative is $libuv$\cite{libuv}, which offers asynchronous sockets and asynchronous file system operations (among other features).
    451453However, as a full-featured library it includes much more than I need and could conflict with other features of \CFA unless significant effort is made to merge them together.
    452 A very recent alternative that I am investigating is $io_uring$\cite{io_uring}.
    453 It claims to address some of the issues with $epoll$ and my early investigating suggest that the claim is accurate.
    454 $io_uring$ uses a much more general approach where system calls are register to a queue and later executed by the kernel, rather than relying on system calls to return an error instead of blocking and subsequently waiting for changes on file descriptors.
    455 I believe this approach allows for fewer problems, \eg the manpage for $open$\cite{open} states:
    456 \begin{quote}
    457         Note that [the $O_NONBLOCK$ flag] has no effect for regular files and block devices;
    458         that is, I/O operations will (briefly) block when device activity is required, regardless of whether $O_NONBLOCK$ is set.
    459         Since $O_NONBLOCK$ semantics might eventually be implemented, applications should not depend upon blocking behavior when specifying this flag for regular files and block devices.
    460 \end{quote}
    461 This makes approach based on $epoll$/$select$ less reliable since they may not work for every file descriptors.
    462 For this reason, I plan to use $io_uring$ as the OS abstraction for the \CFA runtime, unless further work shows problems I haven't encountered yet.
    463 However, only a small subset of the features are available in Ubuntu as of April 2020\cite{wiki:ubuntu-linux}, which will limit performance comparisons.
    464 I do not believe this will affect the comparison result.
    465454
    466455\paragraph{Event Engine}
     
    488477% ===============================================================================
    489478\section{Discussion}
    490 I believe that runtime system and scheduling are still open topics.
    491 Many ``state of the art'' production frameworks still use single threaded event-loops because of performance considerations, \eg \cite{nginx-design}, and, to my knowledge, no wideyl available system language offers modern threading facilities.
    492 I believe the proposed work offers a novel runtime and scheduling package, where existing work only offers fragments that users must assemble themselves when possible.
     479
    493480
    494481% ===============================================================================
    495482% ===============================================================================
    496483\section{Timeline}
    497 \begin{center}
    498 \begin{tabular}{ | r @{--} l | p{4in} | }
    499 \hline May 2020 & October 2020   & Creation of the performance benchmark. \\
    500 \hline November 2020 & March 2021   & Completion of the implementation. \\
    501 \hline March 2021 & April 2021  & Final Performance experiments. \\
    502 \hline May 2017 & August 2021 & Thesis writing and defense. \\
    503 \hline
    504 \end{tabular}
    505 \end{center}
     484
    506485
    507486% B I B L I O G R A P H Y
  • doc/theses/thierry_delisle_PhD/comp_II/local.bib

    r0a6da484 r21923bd  
    265265% Linux Man Pages
    266266% ===============================================================================
    267 @manual{open,
    268   title      = "open(2) Linux User's Manual",
    269   year       = "2020",
    270   month      = "February",
    271 }
    272 
    273267@manual{epoll,
    274268  title      = "epoll(7) Linux User's Manual",
     
    312306  author={KARSTEN, MARTIN},
    313307  journal={URL: https://git.uwaterloo.ca/mkarsten/libfibre}
    314 }
    315 
    316 @misc{nginx-design,
    317   title={Inside NGINX: How We Designed for Performance \& Scale},
    318   url = "https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/",
    319308}
    320309
     
    346335   note = "[Online; accessed 14-April-2020]"
    347336 }
    348 
    349  @misc{wiki:ubuntu-linux,
    350    author = "{Wikipedia contributors}",
    351    title = "Ubuntu version history : Table of versions --- {W}ikipedia{,} The Free Encyclopedia",
    352    year = "2020",
    353    url = "https://en.wikipedia.org/wiki/Ubuntu_version_history#Table_of_versions",
    354    note = "[Online; accessed 15-April-2020]"
    355  }
Note: See TracChangeset for help on using the changeset viewer.