From 500804f9b4a81e9cf18f3a42f966cad3d241c793 Mon Sep 17 00:00:00 2001 From: Guruprasad Aphale <guru@koruna.cs.unc.edu> Date: Tue, 18 May 2010 17:55:45 -0400 Subject: Revert back Bjoern's changes and added scons -h option --- index.html | 1085 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 543 insertions(+), 542 deletions(-) diff --git a/index.html b/index.html index bb6c026..2116e9c 100644 --- a/index.html +++ b/index.html @@ -1,542 +1,543 @@ - -<!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> - <h3>Goals</h3> - <p class="notopmargin"> - The primary purpose of the LITMUS<sup>RT</sup> project is to <strong>provide a useful experimental platform for applied real-time systems research</strong>. In that regard, LITMUS<sup>RT</sup> provides abstractions and interfaces within the kernel that simplify the prototyping of multiprocessor real-time scheduling and synchronization algorithms (compared to modifying a "vanilla" Linux kernel). As a secondary goal, LITMUS<sup>RT</sup> serves as a <strong>proof of concept</strong>, showing that algorithms such as PFAIR can be implemented on current hardware. Finally, we hope that parts of LITMUS<sup>RT</sup> and the "lessons learned" may find value as blueprints/sources of inspiration for other (both commercial and open source) implementation efforts. - </p> - <h3>Non-Goals</h3> - <p class="notopmargin"> - LITMUS<sup>RT</sup> is not a production-quality system, and we have currently no plans to turn it into one. LITMUS<sup>RT</sup> is not "stable," <em>i.e.</em>, interfaces and implementations may change without warning between releases. POSIX-compliance is not a goal; the LITMUS<sup>RT</sup>-API offers alternate system call interfaces. While we aim to follow Linux-coding guidelines, LITMUS<sup>RT</sup> is not targeted at being merged into mainline Linux. Rather, we hope that some of the ideas protoyped in LITMUS<sup>RT</sup> may eventually find adoption in Linux. - </p> - <h3>Current Version</h3> - <p class="notopmargin"> - The current version of LITMUS<sup>RT</sup> is <strong>2010.1</strong> and is based on Linux 2.6.32. - It was released on 05/12/2010 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> - Please refer to the <a href="#download">download</a> and <a href="#install">installation</a> sections for details. - </p> - <p>Earlier versions (2008.1 &mdash 2008.3),based on Linux 2.6.24 and (2007.1 — 2007.3), based on Linux 2.6.20 - ,support additional scheduling policies, are discussed on separate pages dedicated to the <a href="litmus2007.html">LITMUS<sup>RT</sup> 2008</a> and <a href="litmus2007.html">LITMUS<sup>RT</sup> 2007 </a> series respectively. - </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> - <h3> Development Plans </h3> - There are plans to port LITMUS<sup>RT</sup> to PowerPC and ARM platforms. Please contact us for details. - </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.sprg.uniroma2.it/home/bastoni/">Andrea Bastoni</a> (Visiting researcher from University of Rome "Tor Vergata") - </li> - </ul> - <p class="nobottommargin"> - (Additional collaborators for <a href="litmus2008.html#collaborators">LITMUS<sup>RT</sup> 2008 series</a> and <a href="litmus2007.html#collaborators">LITMUS<sup>RT</sup> 2007 series</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, - “On the Implementation of Global Real-Time - Schedulers”, <cite>Proceedings of the 30th IEEE Real-Time Systems Symposium</cite>, pp. 214-224, December 2009. - <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a.ps">Postscript</a>. - <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a.pdf">PDF</a>. - Longer version with all graphs: - <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a_long.ps">Postscript</a>. - <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a_long.pdf">PDF</a>. -</p> -<p> For reference, all evaluated plugins are provided as part of the following patch (against version 2008.3). -</p> - <ul> - <li> - <a href="download/RTSS09/litmus-rt-RTSS09.patch">litmus-rt-RTSS09.patch</a> - </li> - </ul> - -</li> - <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> - M. Mollison, B. Brandenburg, and J. Anderson - “Towards Unit Testing Real-Time Schedulers in LITMUS<sup>RT</sup>”, - <cite>Proceedings of the Fifth International Workshop on Operating Systems Platforms for Embedded Real-Time Applications</cite>, pp. 33-39, July 2009. - <a href="http://www.cs.unc.edu/~anderson/papers/ospert09.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/ospert09.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-124, 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 2010.1. - It consists of our Linux kernel modifications in the form of - a patch against Linux 2.6.32 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/feathertrace/">Feather-Trace</a> (which is part of the LITMUS<sup>RT</sup> patch). - </p> - - <h3 class="relname">LITMUS<sup>RT</sup> 2010.1</h3> - <div class="release"> - <p> - Based on Linux 2.6.32. Released in May 2010. - - </p> - <h4>Files:</h4> - <ul> - <li> - <a href="download/2010.1/litmus-rt-2010.1.patch">litmus-rt-2010.1.patch</a> - </li> - <li> - <a href="download/2010.1/liblitmus-2010.1.tgz">liblitmus-2010.1.tgz</a> - </li> - - <li><a href="download/2010.1/SHA256SUMS">SHA256 check sums</a> - </li> - </ul> - <h4>Major changes (since LITMUS<sup>RT</sup> 2008.3):</h4> TO BE UPDATED - <ul> - <li> - Changed codebase from Linux 2.6.24 to Linux 2.6.32 - </li> - <li>Several bugfixes.</li> - </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="litmus2008.html">LITMUS<sup>RT</sup> 2008 series</a>, <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.32. To install the LITMUS<sup>RT</sup> kernel, first <a - href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2">download the Linux - kernel 2.6.32</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.32 -wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2 -tar xjf linux-2.6.32.tar.bz2 -wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2010.1/litmus-rt-2010.1.patch -mv linux-2.6.32 litmus2010 -# apply the LITMUS RT patch -cd litmus2010 -patch -p1 < ../litmus-rt-2010.1.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, we provide sample <a href="download/2010.1/32bit-config">32-bit </a> and <a href="download/2010.1/64bit-config">64-bit </a> configurations that are 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 build system (based on <a href="http://www.scons.org/">scons</a>). - In order to compile <span class="src">liblitmus</span>, you need to adjust the - variable <span class="src">LITMUS_KERNEL</span> in the <span class="src">SConstruct</span> file to point to your - copy of the kernel. Users should not update the <span class="src">SConstruct</span> file manually anymore. Instead, a <span class="src">.config</span> file can be created with appropriate variables. The required variables can be listed using <span class="src"> scons -h </span> command. This command lists the variables required for building the <span class="src"> liblitmus2010 </span> library. <br> - Sample output of <span class="src"> scons -h </span> is as shown below. - </p> - <p> - <pre class="shell"> -scons -h -scons: Reading SConscript files ... -scons: done reading SConscript files. - -============================================= -liblitmus --- The LITMUS^RT Userspace Library - -There are a number of user-configurable build -variables. These can either be set on the -command line (e.g., scons ARCH=x86) or read -from a local configuration file (.config). - -Run 'scons --dump-config' to see the final -build configuration. - -Build Variables ---------------- - -LITMUS_KERNEL: Where to find the LITMUS^RT kernel. ( /path/to/LITMUS_KERNEL ) - default: ../litmus2010 - actual: ../litmus2010 - -PYTHON_HEADERS: Where to find Python headers. ( /path/to/PYTHON_HEADERS ) - default: /usr/include/python2.5 - actual: /usr/include/python2.5 - -ARCH: Target architecture. (x86_64|sparc64|x86|i686) - default: x86_64 - actual: x86_64 - -WSS: Working set size for pm analysis - default: 3072 - actual: 3072 - -Use scons -H for help about command-line options. - </pre> - -<p class="notopmargin"> - To summarize, the <span class="src"> liblitmus </span> can be obtained and - compiled with the following commands: -</p> - -<pre class="shell"> -cd $DIR -wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2010.1/liblitmus-2010.1.tgz -tar xzf liblitmus-2010.1.tgz -cd liblitmus - -# set LITMUS_KERNEL in .config to point to the kernel source and compile -scons -</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 and after 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> - <p> - If you do not have the <span class="src">dialog</span> utility installed, then you can still use <span class="src">setsched</span> by passing the desired scheduling policy as a commandline parameter, <em>e.g.</em> type <span class="src"> setsched PFAIR </span> to activate the PFAIR plugin. - </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> + +<!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> + <h3>Goals</h3> + <p class="notopmargin"> + The primary purpose of the LITMUS<sup>RT</sup> project is to <strong>provide a useful experimental platform for applied real-time systems research</strong>. In that regard, LITMUS<sup>RT</sup> provides abstractions and interfaces within the kernel that simplify the prototyping of multiprocessor real-time scheduling and synchronization algorithms (compared to modifying a "vanilla" Linux kernel). As a secondary goal, LITMUS<sup>RT</sup> serves as a <strong>proof of concept</strong>, showing that algorithms such as PFAIR can be implemented on current hardware. Finally, we hope that parts of LITMUS<sup>RT</sup> and the "lessons learned" may find value as blueprints/sources of inspiration for other (both commercial and open source) implementation efforts. + </p> + <h3>Non-Goals</h3> + <p class="notopmargin"> + LITMUS<sup>RT</sup> is not a production-quality system, and we have currently no plans to turn it into one. LITMUS<sup>RT</sup> is not "stable," <em>i.e.</em>, interfaces and implementations may change without warning between releases. POSIX-compliance is not a goal; the LITMUS<sup>RT</sup>-API offers alternate system call interfaces. While we aim to follow Linux-coding guidelines, LITMUS<sup>RT</sup> is not targeted at being merged into mainline Linux. Rather, we hope that some of the ideas protoyped in LITMUS<sup>RT</sup> may eventually find adoption in Linux. + </p> + <h3>Current Version</h3> + <p class="notopmargin"> + The current version of LITMUS<sup>RT</sup> is <strong>2010.1</strong> and is based on Linux 2.6.32. + It was released on 05/12/2010 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> + Please refer to the <a href="#download">download</a> and <a href="#install">installation</a> sections for details. + </p> + <p>Earlier versions based on Linux 2.6.24 and Linux 2.6.20, + which supported additional scheduling policies, are discussed on separate pages dedicated to the <a href="litmus2007.html">LITMUS<sup>RT</sup> 2008</a> and <a href="litmus2007.html">LITMUS<sup>RT</sup> 2007 </a> series respectively. + </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> + <h3> Development Plans </h3> + There are plans to port LITMUS<sup>RT</sup> to PowerPC and ARM platforms. Please contact us for details. + </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 + AT&T, IBM, and Northrop Grumman Corps.; the National Science Foundation (grants CNS 0834270 and CNS 0834132); the U.S. + Army Research Office (grant W911NF-09-1-0535); and the Air Force Office of Scientific Research (grant FA 9550-09-1-0549). + </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.sprg.uniroma2.it/home/bastoni/">Andrea Bastoni</a> (University of Rome "Tor Vergata") + </li> + </ul> + <p class="nobottommargin"> + Additional collaborators contributed to the previous <a href="litmus2008.html#collaborators">LITMUS<sup>RT</sup> 2008</a> and the <a href="litmus2007.html#collaborators">LITMUS<sup>RT</sup> 2007</a> versions. + </p> + </div> + + + <h2 id="publications">Publications</h2> + <div class="box"> + + <ol class="nomargin"> + <li><p> + B. Brandenburg and J. Anderson, + “On the Implementation of Global Real-Time + Schedulers”, <cite>Proceedings of the 30th IEEE Real-Time Systems Symposium</cite>, pp. 214-224, December 2009. + <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a.ps">Postscript</a>. + <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a.pdf">PDF</a>. + Longer version with all graphs: + <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a_long.ps">Postscript</a>. + <a href="http://www.cs.unc.edu/~anderson/papers/rtss09a_long.pdf">PDF</a>. +</p> +<p> For reference, all evaluated plugins are provided as part of the following patch (against version 2008.3). +</p> + <ul> + <li> + <a href="download/RTSS09/litmus-rt-RTSS09.patch">litmus-rt-RTSS09.patch</a> + </li> + </ul> + +</li> + <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> + M. Mollison, B. Brandenburg, and J. Anderson + “Towards Unit Testing Real-Time Schedulers in LITMUS<sup>RT</sup>”, + <cite>Proceedings of the Fifth International Workshop on Operating Systems Platforms for Embedded Real-Time Applications</cite>, pp. 33-39, July 2009. + <a href="http://www.cs.unc.edu/~anderson/papers/ospert09.ps">Postscript</a>. <a href="http://www.cs.unc.edu/~anderson/papers/ospert09.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-124, 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 2010.1. + It consists of our Linux kernel modifications in the form of + a patch against Linux 2.6.32 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/feathertrace/">Feather-Trace</a> (which is part of the LITMUS<sup>RT</sup> patch). + </p> + + <h3 class="relname">LITMUS<sup>RT</sup> 2010.1</h3> + <div class="release"> + <p> + Based on Linux 2.6.32. Released in May 2010. + + </p> + <h4>Files:</h4> + <ul> + <li> + <a href="download/2010.1/litmus-rt-2010.1.patch">litmus-rt-2010.1.patch</a> + </li> + <li> + <a href="download/2010.1/liblitmus-2010.1.tgz">liblitmus-2010.1.tgz</a> + </li> + + <li><a href="download/2010.1/SHA256SUMS">SHA256 check sums</a> + </li> + </ul> + <h4>Major changes (since LITMUS<sup>RT</sup> 2008.3):</h4> TO BE UPDATED + <ul> + <li> + Changed codebase from Linux 2.6.24 to Linux 2.6.32 + </li> + <li>Several bugfixes.</li> + </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="litmus2008.html">LITMUS<sup>RT</sup> 2008 series</a>, <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 x86-64 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.32. To install the LITMUS<sup>RT</sup> kernel, first <a + href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2">download the Linux + kernel 2.6.32</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.32 +wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2 +tar xjf linux-2.6.32.tar.bz2 +wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2010.1/litmus-rt-2010.1.patch +mv linux-2.6.32 litmus2010 +# apply the LITMUS RT patch +cd litmus2010 +patch -p1 < ../litmus-rt-2010.1.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, we provide sample <a href="download/2010.1/32bit-config">32-bit </a> and <a href="download/2010.1/64bit-config">64-bit </a> configurations that are 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 build system (based on <a href="http://www.scons.org/">scons</a>). + In order to compile <span class="src">liblitmus</span>, you need to adjust the + variable <span class="src">LITMUS_KERNEL</span> in the <span class="src">SConstruct</span> file to point to your + copy of the kernel. Users should not update the <span class="src">SConstruct</span> file manually anymore. Instead, a <span class="src">.config</span> file can be created with appropriate variables. The required variables can be listed using <span class="src"> scons -h </span> command. This command lists the variables required for building the <span class="src"> liblitmus2010 </span> library. <br> + Sample output of <span class="src"> scons -h </span> is as shown below. + </p> + <p> + <pre class="shell"> +scons -h +scons: Reading SConscript files ... +scons: done reading SConscript files. + +============================================= +liblitmus --- The LITMUS^RT Userspace Library + +There are a number of user-configurable build +variables. These can either be set on the +command line (e.g., scons ARCH=x86) or read +from a local configuration file (.config). + +Run 'scons --dump-config' to see the final +build configuration. + +Build Variables +--------------- + +LITMUS_KERNEL: Where to find the LITMUS^RT kernel. ( /path/to/LITMUS_KERNEL ) + default: ../litmus2010 + actual: ../litmus2010 + +PYTHON_HEADERS: Where to find Python headers. ( /path/to/PYTHON_HEADERS ) + default: /usr/include/python2.5 + actual: /usr/include/python2.5 + +ARCH: Target architecture. (x86_64|sparc64|x86|i686) + default: x86_64 + actual: x86_64 + +WSS: Working set size for pm analysis + default: 3072 + actual: 3072 + +Use scons -H for help about command-line options. + </pre> + +<p class="notopmargin"> + To summarize, the <span class="src"> liblitmus </span> can be obtained and + compiled with the following commands: +</p> + +<pre class="shell"> +cd $DIR +wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2010.1/liblitmus-2010.1.tgz +tar xzf liblitmus-2010.1.tgz +cd liblitmus + +# set LITMUS_KERNEL in .config to point to the kernel source and compile +scons +</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 and after 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> + <p> + If you do not have the <span class="src">dialog</span> utility installed, then you can still use <span class="src">setsched</span> by passing the desired scheduling policy as a commandline parameter, <em>e.g.</em> type <span class="src"> setsched PFAIR </span> to activate the PFAIR plugin. + </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> -- cgit v1.2.2