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:
-u option: UMCG-based performance test
-f option: futex-based performance test
-c option: condition variable-based performance test
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:
UMCG: 209995 cycles/sec
futex: 154419 cycles/sec
condition variable: 100965 cycles/sec
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.
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:-u
option: UMCG-based performance test-f
option: futex-based performance test-c
option: condition variable-based performance testThe 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.