http://www.cs.unc.edu/~anderson/litmus-rt/AboutThe LITMUSRT project is a soft real-time extension of the Linux kernel with focus on multiprocessor real-time scheduling and synchronization. The Linux kernel is modified to support the sporadic task model and modular scheduler plugins. Both partitioned and global scheduling is supported. The current version of LITMUSRT is 2008.2 and is based on Linux 2.6.24. It was released on 12/01/2008 and includes plugins for the following scheduling policies:
Earlier versions (2007.1 — 2007.3), which are based on Linux 2.6.20 and support additional scheduling policies, are discussed on a separate page dedicated to the LITMUSRT 2007 series. The first version of LITMUSRT, which was implemented in Spring 2006, is based on Linux 2.6.9. SupportThe LITMUSRT development effort is being supported by grants from, SUN Corp., Intel Corp., IBM Corp., The National Science Foundation (grant CCR 0615197), and The U.S. Army Research Office (grant W911NF-06-1-0425). CollaboratorsThe LITMUSRT project is led by Dr. James H. Anderson. The implementation effort is carried out by students of the Real-Time Systems Group at the University of North Carolina at Chapel Hill:
(Additional contributors contributed to earlier versions of LITMUSRT.) Publications
DownloadThe source code of LITMUSRT is made available as open source under the terms of the GNU General Public License (GPL). The current release of LITMUSRT is 2008.2. It consists of our Linux kernel modifications in the form of a patch against Linux 2.6.24 and liblitmus, the user-space API for real-time tasks, as well as ft_tools, a collection of tools used for tracing with Feather-Trace (which is part of the LITMUSRT patch). LITMUSRT 2008.2Based on Linux 2.6.24. Released in December 2008. Files:Major changes (since LITMUSRT 2008.1):
LITMUSRT 2008.1Based on Linux 2.6.24. Released in July 2008. Files:Major changes (since LITMUSRT 2007.3):
Please note that the current implementation is a prototype with certain limitations. Most notably, it is not secure in a multiuser context, i.e., real-time system calls do not require superuser privileges. Older releases: LITMUSRT 2007 series. InstallationThe current release of LITMUSRT consists of an extension of the Linux kernel that adds support for the sporadic task model, a scheduler plugin infrastructure, and some scheduler plugins, as well as a user-space library that provides the LITMUSRT real-time API. Note that the current implementation only works on the Intel x86-32 and sparc64 architectures. Patching the KernelThe extension to the Linux kernel is released as a patch against Linux 2.6.24. To install the LITMUSRT kernel, first download the Linux kernel 2.6.24 and untar it in a directory of your choice (hereafter referred to as $DIR). Second, apply the LITMUSRT patch (see Section Download) and configure, compile, and install the kernel as usual. The patch is -p1 applicable. To summarize, the LITMUSRT kernel can be obtained, patched, and compiled with the following commands: cd $DIR # get Linux 2.6.24 wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 tar xjf linux-2.6.24.tar.bz2 wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2008.2/litmus-rt-2008.2.patch mv linux-2.6.24 litmus2008 # apply the LITMUS RT patch cd litmus2008 patch -p1 < ../litmus-rt-2008.2.patch # create a working kernel configuration # - select HZ=1000 # - enable in-kernel preemptions # - disable NO_HZ # - don't use power management options like frequency scaling # - disable support for group scheduling make menuconfig # compile the kernel make bzImage make modules # proceed to install kernel, build initrd, etc. ... When configuring the kernel, note that there is a menu (at the very end of the list) with LITMUSRT-specific configuration options. For reference, we provide a configuration that is known to work under QEMU. LibrariesThe user-space library for real-time tasks, liblitmus, depends on the LITMUSRT kernel kernel and provides its own makefile. In order to compile liblitmus, you need to adjust the variable KERNEL_DIR in the Makfile to point to your copy of the kernel. cd $DIR wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2008.2/liblitmus-2008.2.tgz tar xzf liblitmus-2008.2.tgz cd liblitmus # change KERNEL_DIR in Makefile to point to the kernel source make Please refer to the documentation on how to use the LITMUSRT real-time API as provided by liblitmus. DocumentationUnfortunately, most of the documentation has yet to be written. To get an overview of the architecture of the kernel extension, we recommend reading the paper “LITMUSRT: A Status Report”. Real-Time Scheduling PoliciesThe kernel contains the following real-time scheduling policy implementations:
Only one policy can be active at any time. Initially (i.e., during boot), the "Linux" policy is active. You can use the tool showsched (part of liblitmus) to display the name of the currently active policy. Changing the Active PolicyYou can use the tool setsched (part of liblitmus) to select a new plugin at run time. Only root can change the active policy, and only when there are no real-time tasks present. Writing Real-Time TasksThe user space library that provides the LITMUSRT API, liblitmus, contains two example real-time tasks (base_task.c and base_mt_task.c) that both illustrate how to use the API and provide a skeleton for real-time task development. To get started with development, please take a look these example programs. Tracing Overheads and Scheduling DecisionsLITMUSRT provides numerous tracing facilities that are discussed in-depth in the tutorial Tracing with LITMUSRT. Please contact bbb[AT]cs.unc.edu if you have any questions. Credits |
