nanovms / nanos

A kernel designed to run one and only one application in a virtualized environment
https://nanos.org
Apache License 2.0
2.58k stars 133 forks source link

Klibs (x86_64): add User-Managed Concurrency Groups #1996

Closed francescolavra closed 6 months ago

francescolavra commented 7 months ago

This changeset adds a new klib that implements UMCG (the Linux kernel feature proposed by Google in order to support user-mode threading). The implementation in Nanos is compatible with the Linux kernel code at https://www.spinics.net/lists/kernel/msg4740112.html.

A new runtime test has been added to exercise this feature. Beside various test cases, this program can be run in demo mode (with the -d command line option), which is inspired by the code at https://lore.kernel.org/lkml/20220120155517.066795336@infradead.org/. In addition, it contains a set of performance tests with which the performance of thread switching with UMCG can be evaluated and compared with traditional threading implementations:

The performance test creates a worker thread and continuously switches between the main thread and the worker thread, measuring how many main->worker->main thread switching cycles can be executed per unit of time. The test by default runs for 10 seconds, but the duration can be modified with the -t command line option. Performance tests run in a KVM instance with a single vCPU showed the following figures:

The first 2 commits refactor existing code in order to allow defining arch-specific klibs and runtime tests, and to remove code duplication in the test suite.