liblaiogen, a generic LAIO implementation
This thesis introduces a new implementation of the LAIO api, liblaiogen. LAIO stands for Lazy Asynchronous I/O. It is an api for performing asynchronous I/O. Among several benefits, one of the most important is that LAIO is lazy, in the sense that it creates a continuation only when an operation actually blocks. LAIO was introduced along with an implementation for FreeBSD using scheduler activations to provide this lazy characteristic. Our objective is to provide a cross-platform implementation. To achieve this, liblaiogen uses threads eagerly instead of relying on scheduler activations to save threads for non blocking operations. By doing this we challenge the argument that kernel threads are inherently expensive, which is the justification for the need of a mechanism such as scheduler activa- tions. We compare the performances of liblaiogen in the scope of event- driven web servers, using the same web server and the same benchmark that was used to benchmark the original FreeBSD implementation of LAIO. We show that on recent versions of Linux with lightweight threading sup- port, the web server using liblaiogen performs better than the one using LAIO on FreeBSD. We highlight the different component of the operating system that are responsible for the differences in performance.