summaryrefslogblamecommitdiffstats
path: root/index.html
blob: 8ec23fba6c47464919fa06afbb85b0dcd7007cd8 (plain) (tree)











































                                                                                                                         
                                                                       
                        








                                                                       

                                                                                      



                                                                                                      
                                    
        
















                                                                                             

                                                                          










                                                                              
                                                                                                                                     








                                            






                                                                                                                                                           

          
           


                                                                                                                                                         
            


           
           


                                                                                    
                                                                                                                                                                 
                                                                                                                                                         
            


           

                                              
                                                                                                
                                                                                                              
                                                                                                                                                           
            


           
         





                                                                                                                                                       
            




















                                                                                               
                                                                       



























                                                                                            
                                                          




                                                                               





                                                       
        







                                                                                           


                                                               
             
                                                              
                
                                                                                  
                



                                                                                                            


                                                          
                                                                                




                            
          











                                                                                  





                                       
                                                             

                                                                            
                                                                      
                                                                         
                                           



                                                                          


                                                                                              








                                                                               




                                                                                     
                           

                                        
                                                    
               





                                               



                                                                                           


                           




                                                                                    


                   

                                                                                   
             
                                                             

      

                                                                                              
                                                                    








                                    
                                                                                           



                                                                                              






















                                                                                                                   
       







                                                                                                                    


                                                                
          
       



                                                                                               




                                                                                
                                                                                       



















                                                                               
                                                                                         













                                                                               
<?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 &amp;
	   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="#links">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.1</strong> and is based on Linux&nbsp;2.6.24. 
    It was released on 7/19/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 &mdash; 2007.3), which are based on Linux&nbsp;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&nbsp;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
    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&ouml;rn B. Brandenburg</a>
    </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,
	&ldquo;A Comparison of the M-PCP, D-PCP, and FMLP on LITMUS<sup>RT</sup>&rdquo;, in submission, July 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,
	&ldquo;On the Scalability of Real-Time Scheduling Algorithms on Multicore Platforms: A Case Study&rdquo;, in submission, May 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,
	&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>, to appear, 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>
      </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.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, &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.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,
	&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.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, &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.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,
      &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.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.1. 
    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.
    </p>

    <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.1/litmus-rt-2008.1.patch
mv linux-2.6.24 litmus2008
# apply the LITMUS RT patch
cd litmus2008
patch -p1 &lt; ../litmus-rt-2008.1.patch
# create a working kernel configuration with HZ=1000
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.
    </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.1/liblitmus-2008.1.tgz
tar xzf liblitmus-2008.1.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">&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 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>
    <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 Primeval Designs. <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>