<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="verify-v1" content="pZNmf5XyUUfAPdlSPbFSavMUsLgVsmBYOXzOhbIy2gw=" />
<link rel="stylesheet" type="text/css" href="inc/format.css"/>
<title>LITMUS RT: Linux Testbed for Multiprocessor Scheduling in Real-Time Systems</title>
</head>
<body>
<div class="logobox">
<img src="inc/litmusrt.png" alt="LITMUS^RT: Linux Testbed for Multiprocessor Scheduling in Real-Time Systems" />
<p class="authors">
<a href="http://www.cs.unc.edu/~anderson/">Dr. James H. Anderson &
Students</a>,
<a href="http://www.unc.edu">The University of North Carolina at Chapel Hill</a>
</p>
</div>
<div class="nav">
<p>
<a href="#about">about</a> -
<a href="#support">support</a> -
<a href="#collaborators">collaborators</a> -
<a href="#publications">publications</a> -
<a href="#download">download</a> -
<a href="#install">installation</a> -
<a href="#doc">documentation</a>
</p>
</div>
<h2 id="about">About</h2>
<div class="box">
<p class="nomargin">
The LITMUS<sup>RT</sup> 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.
</p>
<p>
The current version of LITMUS<sup>RT</sup> is <strong>2008.2</strong> and is based on Linux 2.6.24.
It was released on 12/01/2008 and includes plugins for the following
scheduling policies:
</p>
<ul>
<li> Partitioned EDF with synchronization support (PSN-EDF)</li>
<li> Global EDF with synchronization support (GSN-EDF)</li>
<li> Clustered EDF (C-EDF) </li>
<li> PFAIR (both staggered and aligned quanta are supported)</li>
</ul>
<p>
</p>
<p>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 <a href="litmus2007.html">LITMUS<sup>RT</sup> 2007 series</a>.
</p>
<p class="nobottommargin">
The first version of LITMUS<sup>RT</sup>, which was implemented in Spring 2006,
is based on Linux 2.6.9.
</p>
</div>
<h2 id="support">Support</h2>
<div class="box">
<p class="nomargin">
The LITMUS<sup>RT</sup> 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).
</p>
</div>
<h2 id="collaborators">Collaborators</h2>
<div class="box">
<p class="notopmargin"> The LITMUS<sup>RT</sup> project is led by <a
href="http://www.cs.unc.edu/~anderson/">Dr. James H. Anderson</a>.
</p>
<p>
The implementation effort is carried out by students of the
<a href="http://www.cs.unc.edu/~anderson/real-time/">Real-Time Systems
Group</a> at the <a href="http://www.unc.edu">University of North Carolina
at Chapel Hill</a>:
</p>
<ul>
<li>
<a href="http://www.cs.unc.edu/~bbb/">Björn B. Brandenburg</a> (current maintainer)
</li>
<li> <a href="http://www.cs.unc.edu/~jmc/">John M. Calandrino</a>
</li>
</ul>
<p>
(<a href="litmus2007.html#collaborators">Additional contributors</a> contributed to earlier versions of LITMUS<sup>RT</sup>.)
</p>
</div>
<h2 id="publications">Publications</h2>
<div class="box">
<ol class="nomargin">
<li>
<p>
B. Brandenburg and J. Anderson
“Reader-Writer Synchronization for Shared-Memory Multiprocessor Real-Time Systems”,
<cite>Proceedings of the 21st Euromicro Conference on Real-Time Systems</cite>, pp. 184-193, July 2009.
<a href="http://www.cs.unc.edu/~anderson/papers/ecrts09b.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/ecrts09b.pdf">PDF</a>.
Long version with blocking terms:
<a href="http://www.cs.unc.edu/~anderson/papers/ecrts09b-long.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/ecrts09b-long.pdf">PDF</a>.
</p>
</li>
<li>
<p>
J. Calandrino and J. Anderson
“On the Design and Implementation of a Cache-Aware Multicore Real-Time Scheduler”,
<cite>Proceedings of the 21st Euromicro Conference on Real-Time Systems</cite>, pp. 194-204, July 2009.
<a href="http://www.cs.unc.edu/~anderson/papers/ecrts09c.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/ecrts09c.pdf">PDF</a>.
</p>
</li>
<li>
<p>
B. Brandenburg and J. Anderson,
“A Comparison of the M-PCP, D-PCP, and FMLP on LITMUS<sup>RT</sup>”,
<cite>Proceedings of the 12th International Conference on Principles of Distributed Systems</cite>, pp. 105-12, December 2008.
<a href="http://www.cs.unc.edu/~anderson/papers/opodis08.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/opodis08.pdf">PDF</a>.
</p>
</li>
<li>
<p>
B. Brandenburg, J. Calandrino, and J. Anderson,
“On the Scalability of Real-Time Scheduling Algorithms on Multicore Platforms: A Case Study”,
<cite>Proceedings of the 29th IEEE Real-Time Systems Symposium</cite>,
pp. 157-169, December 2008.
<a href="http://www.cs.unc.edu/~anderson/papers/rtss08b.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/rtss08b.pdf">PDF</a>.
</p>
</li>
<li>
<p>
B. Brandenburg and J. Anderson,
“An Implementation of the PCP, SRP, D-PCP, M-PCP,
and FMLP Real-Time Synchronization Protocols in LITMUS<sup>RT</sup>”,
<cite>Proceedings of the 14th IEEE International Conference on Embedded and Real-Time Computing Systems and Applications</cite>, pp. 185-194, August 2008.
<a href="http://www.cs.unc.edu/~anderson/papers/rtcsa08.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/rtcsa08.pdf">PDF</a>.
</p>
<p><strong>Note:</strong> The work described in this paper took part in a branch that is currently not part of
the main distribution. For reference, we provide the branch as a separate download:
</p>
<ul>
<li>
<a href="download/RTCSA08/litmus-rt-RTCSA08.patch">litmus-rt-RTCSA08.patch</a>
</li>
<li>
<a href="download/RTCSA08/liblitmus-RTCSA08.tgz">liblitmus-RTCSA08.tgz</a>
</li>
<li><a href="download/RTCSA08/SHA256SUMS">SHA256 check sums</a>
</li>
</ul>
<p>Please don't use this version for active development. If you are interested in this work, it would be best
to first port the desired features to a current version of LTIMUS<sup>RT</sup> and merge them into the main distribution.
</p>
</li>
<li>
<p>
A. Block, B. Brandenburg, J. Anderson,
and S. Quint, “An Adaptive Framework for Multiprocessor Real-Time Systems”,
<cite>Proceedings of the 20th Euromicro Conference on Real-Time Systems</cite>, pp. 23-33, July 2008.
<a href="http://www.cs.unc.edu/~anderson/papers/ecrts08b.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/ecrts08b.pdf">PDF</a>.
</p>
</li>
<li>
<p>
B. Brandenburg, J. Calandrino, A. Block,
H. Leontyev, and J. Anderson, “Real-Time Synchronization
on Multiprocessors: To Block or Not to Block, to Suspend or
Spin?”, <cite> Proceedings of the 14th IEEE Real-Time and Embedded
Technology and Applications Symposium</cite>, pp. 342-353, April 2008.
<a href="http://www.cs.unc.edu/~anderson/papers/rtas08.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/rtas08.pdf">PDF</a>.
</p>
<p>
Extended version, including all graphs:
<a href="http://www.cs.unc.edu/~anderson/papers/rtas08along.ps">Postscript</a>,
<a href="http://www.cs.unc.edu/~anderson/papers/rtas08along.pdf">PDF</a>.
</p>
</li>
<li>
<p>
B. Brandenburg, A. Block, J. Calandrino, U. Devi, H. Leontyev, and J. Anderson,
"LITMUS<sup>RT</sup>: A Status Report", <cite> Proceedings of the 9th
Real-Time Linux Workshop</cite>, pp. 107-123, November 2007.
<a href="http://www.cs.unc.edu/~anderson/papers/rtlws07.ps">Postscript</a>.
<a href="http://www.cs.unc.edu/~anderson/papers/rtlws07.pdf">PDF</a>.
</p>
</li>
<li>
<p>
B. Brandenburg and J. Anderson, "Integrating Hard/Soft Real-Time Tasks
and Best-Effort Jobs on Multiprocessors", <cite> Proceedings of the 19th Euromicro
Conference on Real-Time Systems</cite>, pp. 61-70, July 2007.
<a href="http://www.cs.unc.edu/~anderson/papers/ecrts07b.ps">Postscript</a>,
<a href="http://www.cs.unc.edu/~anderson/papers/ecrts07b.pdf">PDF</a>.
</p>
</li>
<li>
<p>
J. Calandrino, H. Leontyev, A. Block, U. Devi, and J. Anderson,
"LITMUS<sup>RT</sup>: A Testbed for Empirically Comparing Real-Time
Multiprocessor Schedulers ", <cite>Proceedings of the 27th IEEE Real-Time Systems
Symposium</cite>, pp. 111-123, December 2006.
<a href="http://www.cs.unc.edu/~anderson/papers/rtss06b.ps">Postscript</a>,
<a href="http://www.cs.unc.edu/~anderson/papers/rtss06b.pdf">PDF</a>.
</p>
</li>
</ol>
</div>
<h2 id="download">Download</h2>
<div class="box">
<p class="notopmargin">
The source code of LITMUS<sup>RT</sup> is made available as open source
under the terms of the <a href="http://www.gnu.org/licenses/gpl.txt">GNU
General Public License (GPL)</a>.
</p>
<p>
The current release of LITMUS<sup>RT</sup> is 2008.2.
It consists of our Linux kernel modifications in the form of
a patch against Linux 2.6.24 and
<span class="src">liblitmus</span>, the user-space API for real-time
tasks, as well as <span class="src">ft_tools</span>, a collection of tools
used for tracing with <a href="http://www.cs.unc.edu/~bbb/feather-trace/">Feather-Trace</a> (which is part of the LITMUS<sup>RT</sup> patch).
</p>
<h3 class="relname">LITMUS<sup>RT</sup> 2008.2</h3>
<div class="release">
<p>
Based on Linux 2.6.24. Released in December 2008.
</p>
<h4>Files:</h4>
<ul>
<li>
<a href="download/2008.2/litmus-rt-2008.2.patch">litmus-rt-2008.2.patch</a>
</li>
<li>
<a href="download/2008.2/liblitmus-2008.2.tgz">liblitmus-2008.2.tgz</a>
</li>
<li>
<a href="download/2008.2/ft_tools-2008.2.tgz">ft_tools-2008.2.tgz</a>
</li>
<li><a href="download/2008.2/SHA256SUMS">SHA256 check sums</a>
</li>
</ul>
<h4>Major changes (since LITMUS<sup>RT</sup> 2008.1):</h4>
<ul>
<li>PFAIR implementation can now recover from missed tick interrupts.
</li>
<li>A bug in the PFAIR prioritization function was corrected.
</li>
<li>Support for synchronous task system releases in the EDF-based schedulers was fixed.
</li>
<li><span class="src">sched_trace()</span> support was re-implemented based on Feather-Trace.
</li>
<li>Added the tool <span class="src">showst</span> to liblitmus, which can convert <span class="src">sched_trace()</span> binary data to a human-readable format.
</li>
<li>
Assorted bug fixes.
</li>
</ul>
</div>
<h3 class="relname">LITMUS<sup>RT</sup> 2008.1</h3>
<div class="release">
<p>
Based on Linux 2.6.24. Released in July 2008.
</p>
<h4>Files:</h4>
<ul>
<li>
<a href="download/2008.1/litmus-rt-2008.1.patch">litmus-rt-2008.1.patch</a>
</li>
<li>
<a href="download/2008.1/liblitmus-2008.1.tgz">liblitmus-2008.1.tgz</a>
</li>
<li><a href="download/2008.1/SHA256SUMS">SHA256 check sums</a>
</li>
</ul>
<h4>Major changes (since LITMUS<sup>RT</sup> 2007.3):</h4>
<ul>
<li>LITMUS<sup>RT</sup> was ported to Linux 2.6.24.
</li>
<li>LITMUS<sup>RT</sup> was ported to <span style="src">sparc64</span>.
</li>
<li>LITMUS<sup>RT</sup> is now a proper scheduling class (<span class="src">SCHED_LITMUS</span>).
</li>
<li>
LITMUS<sup>RT</sup> queues are now based on mergeable heaps.
</li>
<li>Support for multi-threaded real-time tasks.
</li>
<li>Scheduler plugins can be selected at runtime; no reboot required.
</li>
<li>
Many bug fixes.
</li>
</ul>
</div>
<p>
Please note that the current implementation is a <em>prototype</em> with
certain limitations. Most notably, it is not secure in a multiuser context,
<em>i.e.</em>, real-time system calls do not require superuser
privileges.
</p>
<p class="nobottommargin">
Older releases: <a href="litmus2007.html">LITMUS<sup>RT</sup> 2007 series</a>.
</p>
</div>
<h2 id="install">Installation</h2>
<div class="box">
<p class="notopmargin">
The current release of LITMUS<sup>RT</sup> 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 LITMUS<sup>RT</sup>
real-time API. Note that the current implementation only works on the
Intel x86-32 and sparc64 architectures.
</p>
<h3>Patching the Kernel</h3>
<p class="notopmargin">
The extension to the Linux kernel is released as a patch against Linux
2.6.24. To install the LITMUS<sup>RT</sup> kernel, first <a
href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2">download the Linux
kernel 2.6.24</a> and untar it in a directory of your choice (hereafter
referred to as <span class="src">$DIR</span>). Second, apply the
LITMUS<sup>RT</sup> patch (see <a href="#download">Section Download</a>)
and configure, compile, and install the kernel as usual. The patch is <span
class="src">-p1</span> applicable.
To summarize, the LITMUS<sup>RT</sup> kernel can be obtained, patched, and
compiled with the following commands:
</p>
<pre class="shell">
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.
...
</pre>
<p>
When configuring the kernel, note that there is a menu (at the very end of the list)
with LITMUS<sup>RT</sup>-specific configuration options. For reference, <a href="download/2008.2/qemu-config">we provide a configuration that is known to work under QEMU</a>.
</p>
<h3>Libraries</h3>
<p class="notopmargin">
The user-space library for real-time tasks, <span class="src">liblitmus</span>,
depends on the LITMUS<sup>RT</sup> kernel kernel and provides its own makefile.
In order to compile <span class="src">liblitmus</span>, you need to adjust the
variable <span class="src">KERNEL_DIR</span> in the Makfile to point to your
copy of the kernel.
</p>
<pre class="shell">
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
</pre>
<p class="nobottommargin">
Please refer to the <a href="#doc">documentation</a> on how to use the LITMUS<sup>RT</sup>
real-time API as provided by <span class="src">liblitmus</span>.
</p>
</div>
<h2 id="doc">Documentation</h2>
<div class="box">
<p class="notopmargin">
Unfortunately, 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
<a href="http://www.cs.unc.edu/~anderson/papers/rtlws07.pdf">“LITMUS<sup>RT</sup>:
A Status Report”</a>.
</p>
<h3>Real-Time Scheduling Policies</h3>
<p class="qa">
The kernel contains the following real-time scheduling policy implementations:
</p>
<ul>
<li>
PFAIR, an implementation of the PD<sup>2</sup> algorithm,
</li>
<li>
PSN-EDF, a partitioned EDF (P-EDF) implementation with support for the real-time synchronization protocol
FMLP,
</li>
<li>
GSN-EDF, a global EDF (G-EDF) implementation with support for the real-time synchronization protocol
FMLP,
</li>
<li>
C-EDF (Clustered EDF), a hybrid of G-EDF and P-EDF, and
</li>
<li>
Linux, a placeholder policy that disables all real-time functionality added by the LITMUS<sup>RT</sup> patch.
</li>
</ul>
<p>
Only one policy can be active at any time. Initially (<em>i.e.,</em> during boot), the "Linux" policy is active.
You can use the tool <span class="src">showsched</span> (part of <span class="src">liblitmus</span>) to display
the name of the currently active policy.
</p>
<h3>Changing the Active Policy</h3>
<p class="qa">
You can use the tool <span class="src">setsched</span> (part of <span class="src">liblitmus</span>)
to select a new plugin at run time.
</p>
<div class="screenshot">
<img src="gfx/setsched.png" alt="Screen shot of setsched"/>
</div>
<p>
Only root can change the active policy, and only when there are no real-time tasks present.
</p>
<h3>Writing Real-Time Tasks</h3>
<p class="qa">
The user space library that provides the LITMUS<sup>RT</sup> API,
<span class="src">liblitmus</span>, contains two example real-time tasks
(<span class="src">base_task.c</span> and
<span class="src">base_mt_task.c</span>)
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.
</p>
<h3>Tracing Overheads and Scheduling Decisions</h3>
<p class="qa">LITMUS<sup>RT</sup> provides numerous tracing facilities that are discussed in-depth in the tutorial <a href="doc/tracing.html">Tracing with LITMUS<sup>RT</sup></a>.
</p>
<p class="nobottommargin">
Please contact <span class="src">bbb[AT]cs.unc.edu</span> if you have any
questions.
</p>
</div>
<h2 id="credits">Credits</h2>
<div class="box">
<div style="float: right;">
<a href="http://validator.w3.org/check?uri=referer"><img
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Strict" height="31" width="88"/></a>
</div>
<p class="nomargin">
Linux is a registered trademark of Linus Torvalds. <br /> The
LITMUS<sup>RT</sup> logo was designed by Jasper McChesney of <a href="http://www.breakforsense.net/">Break for Sense Design</a>. <br />
Web design by Björn Brandenburg.
</p>
</div>
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-3184628-1";
urchinTracker();
</script>
</body>
</html>