Tutorial: "LibOS as a regression test framework for Linux networking" (Hajime Tazaki)

Contents:
Description:

Linux library operating system, a.k.a. LibOS, has been proposed in the linux-kernel communities with two specific applications and usecases, 1) regression testing environment with a network simulator, and 2) network stack personality with the ad-hoc replacement of network stack (i.e., NUSE). After the patch proposal and the presentation at the last netdev 0.1, it also got may feedback ranging from concerns about maintenance burden to future possibilities such as small operating systems for cloud (*1 *2).

In this tutorial, we provide one of the interesting use case which is a regression testing framework of kernel network stack in userspace programs. With the simplicity of test scripts/programs written as a network simulator script, and the reproducibility by using virtual clock of network simulator, the testing framework is useful to check regressions in frequently-changing code bases: we have detected a couple of actual regressions during the growth of net-next repository.

We will firstly introduce a brief overview of what LibOS is, its history including recent discussion with LKL (Linux kernel library), and updates including trial running on QEMU without booting kernel, vfs support etc (if everything goes well). Then go through how many regressions we have found with the tool, and how our testing framework is useful, how other testing framework couldn't detect such regressions, and then how we can implement our own test than our pre-installed tests. We are not going to discuss why we should apply test-driven-development (TDD) or what kind of software development process is great, etc, but will try to focus on presenting our experience of bug hunting and introduction to extend tests.

Target audience is (of course) the developer of all of network stack subsystem (under net/ directory) and any people who are interested in testing of software in a large network with complex configurations. I'm not going to give a hands-on tutorial but give a material which everybody can follow the tutorial later.

Reference:

Tags: