User-mode scheduling (UMS) is a lightweight mechanism that applications can use to schedule their own threads. The ability to switch between threads in user mode makes UMS more efficient than thread pools for managing large numbers of short-duration work items that require few system calls.
To take advantage of UMS, an application must implement a scheduler component that manages the application's UMS threads and determines when they should run.
The implementation of a User-mode scheduling is inspired from the UMS specification available in the Windows kernel.
The package is made of a Linux Loadable Kernel Module (LKM) that implements all the backend services for executing and yielding UMS worker threads and a Userspace library which interacts with the LKM.
The code has been tested from linux kernel 4.4 to 5.12.
The online documentation for latest release is available here.
A PDF version of the documentation is also available here.
- GNU C >= 5.1
- GNU make >= 3.81
- libtool
- pkg-config
- linux-headers
- check 1
- sphinx 2
- doxygen 2
- breathe 2
- sphinx_rtd_theme 2
- latex 3
1 Optional: needed only for userspace library tests
2 Optional: needed only to build the documentation
3 Optional: needed only to build the pdf documentation
Build the userspace library and the LKM and install them into the system with:
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig
$ sudo modprobe ums
The following dependencies are needed in case of development build:
- autotools-dev
- autoconf
- automake
- git
- cppcheck 4
4 Optional: needed only for userspace library static code analysis
For starting developying the package you need to run:
$ ./autogen.sh
For build the documentation locally enable it during configuration:
$ ./configure --enable-docs
Then build the HTML documentation by:
$ make html
or the PDF documentation by:
$ make pdf
Enable the examples building during configuration:
$ ./configure --enable-examples
Then they will be build when invoking make
.
Enable the benchmark tool building during configuration;
$ ./configure --enable-benchmark
Then it will be build when invoking make
.
See LICENSE file.