summaryrefslogblamecommitdiffstats
path: root/index.html
blob: 653e8f3a977d39c435d175034b7f1189181afe79 (plain) (tree)




































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                        


































































                                                                                                                                                                                                                                                                                                                                                                                                          




















                                                                                                                                                                

                     
                                                   




























































































































































































































































































                                                                                                                                                                                                                                                                                                       
         
















































































                                                                                                                                                                                                                                                                               
 


























































                                                                                                                                                                                                                                                                                                       
        
                                             
                  


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
 

























































                                                                                                                                                                                       
 
<!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 &amp;
	   Students</a>, 
	   <a href="http://www.unc.edu">The University of North Carolina at Chapel Hill</a> 
	</p> 
 
   </div> 
 
    <div class="alertbox">
<h3 class="notopmargin">Interested in kernel hacking and real-time systems? We're hiring!</h3>
<p>
<a href="http://www.cs.unc.edu/rt">UNC's real-time group</a> is actively recruiting <strong>PhD-seeking graduate students</strong> with a strong background in Linux kernel development. Applicants must be highly-motivated self-starters and eager to complete a <a href="http://www.cs.unc.edu/Admin/AcademicPrograms/Doctoral/DoctoralReqOfficial.html">rigorous PhD program in computer science</a>. Having contributed to Linux (or other open source systems-level projects) and/or maintained an open source project is definitively a plus.  (Extra bonus points for submitting a high-quality patch to LITMUS<sup>RT</sup>.)
</p>
<p  class="nobottommargin">
Have a look at our group's <a href="http://www.cs.unc.edu/%7Eanderson/papers.html">recent publications</a> to get a feel for the kind of work that we are doing. Sounds good? Great! Next step: check out the graduate school's <a href="http://www.cs.unc.edu/Admissions/">application requirements</a> and, if you meet the requirements, contact <a href="http://www.cs.unc.edu/~anderson">Prof. Anderson</a>.
<br/><strong>Fun, challenging problems are waiting!</strong>
</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> -
   <a href="#development">development</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>Please  have a look at <a href="slides/rtns2010-keynote.pptx">Prof. Anderson's RTNS'10 keynote address</a> slides for a recent overview of our motivation, the project, and recent results.
    </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>2011.1</strong> and is based on Linux&nbsp;2.6.36. 
    It was released on 01/26/2011 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, which supported additional scheduling policies,     are discussed on separate pages dedicated to the <a href="litmus2010.html">LITMUS<sup>RT</sup> 2010</a> (based on Linux &nbsp;2.6.34), <a href="litmus2008.html">LITMUS<sup>RT</sup> 2008</a> (based on Linux &nbsp;2.6.24), and <a href="litmus2007.html">LITMUS<sup>RT</sup> 2007 </a> (based on Linux&nbsp;2.6.20) series.
    </p> 
    <p class="nobottommargin"> 
       The first version of LITMUS<sup>RT</sup> (implemented in Spring 2006)
       was based on Linux&nbsp;2.6.9.
    </p> 
	<h3> Development Plans </h3>
	There are plans to port LITMUS<sup>RT</sup> to the PowerPC platform. 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&amp;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 developers of the current version are:
    </p> 
    <ul> 
    <li> 
	<a href="http://www.cs.unc.edu/~bbb/">Bj&ouml;rn B. Brandenburg</a> (UNC Chapel Hill, maintainer)
    </li> 
    <li> <a href="http://www.sprg.uniroma2.it/home/bastoni/">Andrea Bastoni</a> (University of Rome "Tor Vergata") 
    </li> 
    <li> <a href="http://www.cs.unc.edu/~gelliott">Glenn Elliot</a> (UNC Chapel Hill)
    </li> 
    <li> <a href="http://www.cs.unc.edu/~cjk">Christopher Kenna</a> (UNC Chapel Hill)
    </li> 

    </ul> 
	<p > 
	Additional collaborators contributed to the previous <a href="litmus2010.html#collaborators">LITMUS<sup>RT</sup> 2010</a>,
	<a href="litmus2008.html#collaborators">LITMUS<sup>RT</sup> 2008</a>, and  <a href="litmus2007.html#collaborators">LITMUS<sup>RT</sup> 2007</a> versions.
	</p> 
	<p class="nobottommargin">
	 We always welcome new contributors; please see <a href="#development">Development</a> below for information on how to get 
	 access to our source code repository.
	</p>
    </div> 
    
 
     <h2 id="publications">Publications</h2> 
    <div class="box"> 
  
    <ol class="nomargin">     

              <li><p>
	A. Bastoni, B. Brandenburg and J. Anderson,
	&ldquo;Is Semi-Partitioned Scheduling Practical?&rdquo;,
	  <cite>in submission</cite>, January 2011.
	  <a href="http://www.cs.unc.edu/~bbb/papers/ecrts11a.pdf">PDF</a>.
	  Longer version with all graphs: <a href="http://www.cs.unc.edu/~bbb/papers/ecrts11a-long.pdf">PDF</a>	  </p>
	<p> For reference, all evaluated plugins as well as the required userspace tools are provided as part of the following patches (against version 2010.2).
</p> 
 	  <ul> 
	 <li> 
	 	<a href="download/ECRTS11/litmus-rt-semi-part.patch">litmus-rt-semi-part.patch</a> 
	 </li> 
	 <li> 
	 	<a href="download/ECRTS11/liblitmus-semi-part.patch">liblitmus-semi-part.patch</a> 
	 </li> 

	 </ul> 
	</li>


  
              <li><p>
	A. Bastoni, B. Brandenburg and J. Anderson,
	&ldquo;An Empirical Comparison of Global, Partitioned, and Clustered Multiprocessor Real-Time Schedulers&rdquo;,
	  <cite>Proceedings of the 31th IEEE Real-Time Systems Symposium</cite>,  pp.&nbsp;14-24, December 2010.
	  <a href="http://www.cs.unc.edu/~anderson/papers/rtss10c.pdf">PDF</a>.
	  Longer version with all graphs: <a href="http://www.cs.unc.edu/~anderson/papers/rtss10clong.pdf">PDF</a>	  </p>
	</li>

  	<li><p>J. Anderson, &ldquo;Real-Time Multiprocessor Scheduling: Connecting Theory and Practice &rdquo;, keynote address, <cite>18th International Conference on Real-Time and Network Systems</cite>, November 4, 2010. 
  	<a href="slides/rtns2010-keynote.pptx">PPTX</a>.
  	</p>
  	</li>


              <li><p>
	G. Elliott and J. Anderson,
	&ldquo;Real-Time Multiprocessor Systems with GPUs&rdquo;,
	  <cite>Proceedings of the 18th International Conference on Real-Time and Network Systems</cite>, pp.&nbsp;197-206, November 2010.
	  <a href="http://www.cs.unc.edu/~anderson/papers/rtns10.pdf">PDF</a>.
	  Longer version with appendices: <a href="http://www.cs.unc.edu/~anderson/papers/rtns10extended.pdf">PDF</a>	  </p>
	</li>
    
      <li> 
      <p> 
	A.Bastoni, B. Brandenburg and J. Anderson
	&ldquo;Cache-Related Preemption and Migration Delays: Empirical Approximation and Impact on Schedulability&rdquo;, 
	<cite>Proceedings of the Sixth International Workshop on Operating Systems Platforms for Embedded Real-Time Applications</cite>, pp.&nbsp;33-44, July 2010.
<a href="http://www.cs.unc.edu/~anderson/papers/ospert10.pdf">PDF</a>.
	</p> 
      </li> 

    <li><p> 
              B. Brandenburg and J. Anderson,
	  &#8220;On the Implementation of Global Real-Time
	  Schedulers&#8221;, <cite>Proceedings of the 30th IEEE Real-Time Systems Symposium</cite>, pp.&nbsp;214-224, December 2009.
	  <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.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
	&ldquo;Reader-Writer Synchronization for Shared-Memory Multiprocessor Real-Time Systems&rdquo;, 
	<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.pdf">PDF</a>.
	Long version with blocking terms:
     <a href="http://www.cs.unc.edu/~anderson/papers/ecrts09b-long.pdf">PDF</a>.
	</p> 
      </li> 
 
      <li> 
      <p> 
	J. Calandrino and J. Anderson
	&ldquo;On the Design and Implementation of a Cache-Aware Multicore Real-Time Scheduler&rdquo;, 
	<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.pdf">PDF</a>.
	</p> 
      </li> 
 
      <li> 
      <p> 
	M. Mollison, B. Brandenburg, and J. Anderson
	&ldquo;Towards Unit Testing Real-Time Schedulers in LITMUS<sup>RT</sup>&rdquo;, 
	<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.pdf">PDF</a>.
	</p> 
      </li> 
 
      <li> 
      	<p> 
	B. Brandenburg and J. Anderson,
	&ldquo;A Comparison of the M-PCP, D-PCP, and FMLP on LITMUS<sup>RT</sup>&rdquo;, 
	<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.pdf">PDF</a>.
	</p> 
      </li> 
      
      <li> 
      	<p> 
	B. Brandenburg, J. Calandrino,  and J. Anderson,
	&ldquo;On the Scalability of Real-Time Scheduling Algorithms on Multicore Platforms: A Case Study&rdquo;,
	<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.pdf">PDF</a>.
	</p> 
      </li> 
 
      <li> 
      	<p> 
	B. Brandenburg and J. Anderson,
	&ldquo;An Implementation of the PCP, SRP, D-PCP, M-PCP, 
	and FMLP Real-Time Synchronization Protocols in LITMUS<sup>RT</sup>&rdquo;, 
	<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.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, &ldquo;An Adaptive Framework for Multiprocessor Real-Time Systems&rdquo;, 
	<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.pdf">PDF</a>.
	</p> 
      </li> 
 
      <li> 
      <p> 
	B. Brandenburg, J. Calandrino, A. Block,
	H. Leontyev, and J. Anderson, &ldquo;Real-Time Synchronization
	on Multiprocessors: To Block or Not to Block, to Suspend or
	Spin?&rdquo;, <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.pdf">PDF</a>.
	</p> 
      <p> 
	Extended version, including all graphs:
		<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,
	&quot;LITMUS<sup>RT</sup>:  A Status Report&quot;, <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.pdf">PDF</a>.
      </p> 
    </li> 
 
    <li> 
      <p> 
	B. Brandenburg and J. Anderson, &quot;Integrating Hard/Soft Real-Time Tasks
	and Best-Effort Jobs on Multiprocessors&quot;, <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.pdf">PDF</a>.
      </p> 
    </li> 
    
 
    <li> 
    <p> 
      J. Calandrino, H. Leontyev, A. Block, U. Devi, and J. Anderson,
      &quot;LITMUS<sup>RT</sup>: A Testbed for Empirically Comparing Real-Time
      Multiprocessor Schedulers &quot;, <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.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>. LITMUS<sup>RT</sup> is released as a patch against Linux. Additionally,
    it is also available as a <span class="src">git</span> repository (see <a href="#development">Development</a> below).
    </p>
    <p> 
    The current release of LITMUS<sup>RT</sup> is 2010.2. 
    It  consists of our Linux kernel modifications in the form of
    a patch against Linux 2.6.34 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> 2011.1</h3> 
    <div class="release"> 
    <p> 
         Based on Linux 2.6.36. Released in January 2011.
 
    </p> 
    <h4>Files:</h4> 
    <ul class="notopmargin"> 
	 <li> 
	 	<a href="download/2011.1/litmus-rt-2011.1.patch">litmus-rt-2011.1.patch</a> 
	 </li> 
	 <li> 
	 	<a href="download/2011.1/liblitmus-2011.1.tgz">liblitmus-2011.1.tgz</a> 
	 </li> 
	 <li> 
	 	<a href="download/2011.1/ft_tools-2011.1.tgz">ft_tools-2011.1.tgz</a> 
	 </li>  
	 <li><a href="download/2011.1/SHA256SUMS">SHA256 check sums</a> 
	 </li> 
    </ul> 
    <h4>Major changes (since LITMUS<sup>RT</sup> 2010.2):</h4>
    <ul class="notopmargin">
    <li> 
      Rebased LITMUS<sup>RT</sup> from Linux 2.6.34 to Linux 2.6.36.
    </li>
    <li>
      Added support for the ARM architecture (tested on a PB11MPCore baseboard with a four-core ARM11 MPCore CPU).
    </li>

    <li>
      Feather-Trace devices are now allocated dynamically and are properly registered with <span class="src">sysfs</span>. This avoids bugs due to major device number collisions and removes the need for manual device node creation (on a system with standard <span class="src">udev</span> rules).
    </li>

    <li>
      Improved debug tracing output and made trace buffer size configurable.
    </li>

    <li>
      Various bug fixes concerning C-EDF cluster size changes. The cluster size
      can now be configured with the file <span class="src">/proc/litmus/plugins/C-EDF/cluster</span>.
    </li>

    <li>
      Various <span class="src">KConfig</span> cleanups and improvements.
    </li>

    <li>
      Dropped <span class="src">scons</span> as the build system for <span class="src">liblitmus</span>
      and reverted to makefiles.
    </li>

    <li>
      Added cscope and TAG file generation to <span class="src">liblitmus</span>.
    </li>

    <li>
      <span class="src">st_trace</span> can now be controlled with signals (part of <span class="src">ft_tools</span>).
    </li>
    
    </ul>
    </div> 
    <p> 
       Please note that the current implementation is a <em>prototype</em> with
       certain limitations. 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="litmus2010.html">LITMUS<sup>RT</sup> 2010 series</a>, <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 works on the
    Intel (both x86-32 and x86-64) and on the ARM architecture (ARMV6).
    </p> 
    <h3>Patching the Kernel</h3> 
    <p class="notopmargin"> 
    The extension to the Linux kernel is released as a patch against Linux
    2.6.36. To install the LITMUS<sup>RT</sup> kernel, first <a 
    href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2">download the Linux
    kernel 2.6.36</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.36
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
tar xjf linux-2.6.36.tar.bz2
wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2011.1/litmus-rt-2011.1.patch
mv linux-2.6.36 litmus-rt
# apply the LITMUS RT patch
cd litmus-rt
patch -p1 &lt; ../litmus-rt-2011.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
#  - disable "Write protect kernel read-only data structures" (in kernel debug)
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/2011.1/x86_64-config">64-bit configuration</a>  that is known to work under KVM.
    </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. Run  <span class="src">make help</span> for instructions. Note that
    you will have to create a <span class="src">.config</span> file in the library directory to point the build system to the kernel sources. 
    For reference, we provide a sample <a href="download/2011.1/liblitmus-config">liblitmus configuration file</a>.
    </p> 
<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/2011.1/liblitmus-2011.1.tgz
tar xzf liblitmus-2011.1.tgz
cd liblitmus 
wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2011.1/liblitmus-config
mv liblitmus-config .config
make
</pre> 

    <h3>Tools</h3> 
    <p class="notopmargin"> 
    The Feather-Trace tools (<span class="src">ft_tools</span>) depend on the <span class="src">liblitmus</span> build system. Before the <span class="src">ft_tools</span> project can be built, you must have successfully compiled <span class="src">liblitmus</span> first.
    For reference, we provide a sample <a href="download/2011.1/ft_tools-config">ft_tools configuration file</a>.
    </p> 
<p class="notopmargin">
 To summarize, the <span class="src">ft_tools</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/2011.1/ft_tools-2011.1.tgz
tar xzf ft_tools-2011.1.tgz
cd ft_tools 
wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2011.1/ft_tools-config
mv ft_tools-config .config
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">&ldquo;LITMUS<sup>RT</sup>:
      A Status Report&rdquo;</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 used <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>
    <p>The list of loaded plugins is exported at <span class="src">/proc/litmus/plugins/loaded</span>; the active plugin is reported at <span class="src">/proc/litmus/active_plugin</span>.
    </p>
    <h3>Selecting the C-EDF Cluster Size</h3>
    <p class="qa">
    The C-EDF plugin can create clusters based on the cache topology. When the plugin is activated (see above), it configures clusters based on the value  (&quot;L1&quot;, &quot;L2&quot;, &quot;L3&quot;, or &quot;ALL&quot;) last written to  <span class="src">/proc/litmus/plugins/C-EDF/cluster</span>. Note that the C-EDF must be reloaded (for example by switching to the Linux plugin and back to C-EDF) to enact a change to the desired cluster size; changing the cluster size while C-EDF is active is not supported.
    </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 at 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 the <a href="#collaborators">current maintainer</a> if you have any
      questions.
    </p> 
 
 
    </div> 

    <h2 id="development">Development</h2> 
    <div class="box">  
    <p class="nomargin">
    Patches and suggestions are very welcome!
    Both the LITMUS<sup>RT</sup> kernel and liblitmus are available 
    as a public <a href="http://git-scm.com/">git</a> repository at
    <a href="public-repository/index.html">http://www.cs.unc.edu/~anderson/litmus-rt/public-repository</a>.
    </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&ouml;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>