summaryrefslogblamecommitdiffstats
path: root/litmus2008.html
blob: 14b908a1f433f1c25047adb6d1c4b6b19f1a1a4a (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605




























































































































































































































































































































































































































































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
<?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 2008</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">
    <p class="nomargin">
    	<em><b>NOTE:</b> This web page discusses an older version of
    	LITMUS<sup>RT</sup>. Please use the
    	<a href="index.html">current version</a> unless you
    	have specific interest in the 2008 series.
    	</em>
    </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>2008.3</strong> and is based on Linux&nbsp;2.6.24. 
    It was released on 09/24/2009 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 (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>
    <h3>Development Plans</h3>
    <p class="nomargin">
    Re-basing to the then-current Linux kernel version is scheduled for Spring 2010. There are plans to port LITMUS<sup>RT</sup> to PowerPC and ARM platforms. Please contact us for details.
	</p>
    </div>

   <h2 id="support">Support</h2>
    <div class="box">
    <p class="nomargin">
    The LITMUS<sup>RT</sup> development effort is being supported by grants from, SUN Corp.,
    Intel Corp., IBM Corp., The National Science Foundation (grant CCR 0615197), and The U.S.
    Army Research Office (grant W911NF-06-1-0425).
    </p>
    </div>

   <h2 id="collaborators">Collaborators</h2> 
    <div class="box"> 
    <p class="notopmargin"> The LITMUS<sup>RT</sup> project is led by <a
    href="http://www.cs.unc.edu/~anderson/">Dr. James H. Anderson</a>.
    </p>
    <p>
    The implementation effort is carried out by students of the 
    <a href="http://www.cs.unc.edu/~anderson/real-time/">Real-Time Systems
    Group</a> at the <a href="http://www.unc.edu">University of North Carolina
    at Chapel Hill</a>:
    </p>
    <ul>
    <li>
	<a href="http://www.cs.unc.edu/~bbb/">Bj&ouml;rn B. Brandenburg</a> (current maintainer)
    </li>
    <li> <a href="http://www.cs.unc.edu/~jmc/">John M. Calandrino</a> <em>(graduated July 2009)</em>
    </li>
    </ul>
	<p class="nobottommargin">
	(<a href="litmus2007.html#collaborators">Additional collaborators</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,
	  &#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.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
	&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.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
	&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.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
	&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.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,
	&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.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;,
	<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,
	&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.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, &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.3. 
    It  consists of our Linux kernel modifications in the form of
    a patch against Linux 2.6.24 and 

      <span class="src">liblitmus</span>, the user-space API for real-time
    tasks, as well as <span class="src">ft_tools</span>, a collection of tools
    used for tracing with <a href="http://www.cs.unc.edu/~bbb/feather-trace/">Feather-Trace</a> (which is part of the LITMUS<sup>RT</sup> patch).
    </p>

    <h3 class="relname">LITMUS<sup>RT</sup> 2008.3</h3>
    <div class="release">
    <p>
         Based on Linux 2.6.24. Released in September 2009.

    </p>
    <h4>Files:</h4>
    <ul>
	 <li>
	 	<a href="download/2008.3/litmus-rt-2008.3.patch">litmus-rt-2008.3.patch</a>
	 </li>
	 <li>
	 	<a href="download/2008.3/liblitmus-2008.3.tgz">liblitmus-2008.3.tgz</a>
	 </li>
	 <li>
	 	<a href="download/2008.3/ft_tools-2008.3.tgz">ft_tools-2008.3.tgz</a>
	 </li>

	 <li><a href="download/2008.3/SHA256SUMS">SHA256 check sums</a>
	 </li>
    </ul>
    <h4>Major changes (since LITMUS<sup>RT</sup> 2008.2):</h4> 
	 <ul>
    <li>
      <code>sys_null_call()</code>, a dummy system call that simplifies determining system call overheads.
    </li>
    <li>
      Support for starting timers on remote CPUs via <code>hrtimer_start_on()</code>.
    </li>
    <li>
      Support for dedicated release handling in GSN-EDF and a corresponding <code>/proc</code> interface.
    </li>
    <li>
      Support for IPI latency tracing.
    </li>
    <li>Several bugfixes.</li>
    <li>Switched to <a href="http://www.scons.org/">scons</a> as build system in libraries.</li>
    <li>Support for cross compiling the libraries on x86-64 systems to i386 binaries (specify <code>ARCH=i386</code> in your environment).</li>
	 </ul>
	 <p>
	 Please consult the <a href="doc/changes.html">Change Log</a> for further details.
	 </p>
    </div>

    <h3 class="relname">LITMUS<sup>RT</sup> 2008.2</h3>
    <div class="release">
    <p>
         Based on Linux 2.6.24. Released in December 2008.

    </p>
    <h4>Files:</h4>
    <ul>
	 <li>
	 	<a href="download/2008.2/litmus-rt-2008.2.patch">litmus-rt-2008.2.patch</a>
	 </li>
	 <li>
	 	<a href="download/2008.2/liblitmus-2008.2.tgz">liblitmus-2008.2.tgz</a>
	 </li>
	 <li>
	 	<a href="download/2008.2/ft_tools-2008.2.tgz">ft_tools-2008.2.tgz</a>
	 </li>

	 <li><a href="download/2008.2/SHA256SUMS">SHA256 check sums</a>
	 </li>
    </ul>
    <h4>Major changes (since LITMUS<sup>RT</sup> 2008.1):</h4> 
	 <ul>
	   <li>PFAIR implementation can now recover from missed tick interrupts.
	   </li>
	   <li>A bug in the PFAIR prioritization function was corrected.
	   </li>
	   <li>Support for synchronous task system releases in the EDF-based schedulers was fixed.
	   </li>
	   <li><span class="src">sched_trace()</span> support was re-implemented based on Feather-Trace.
	   </li>
	   <li>Added the tool <span class="src">showst</span> to liblitmus, which can convert <span class="src">sched_trace()</span> binary data to a human-readable format.
	   </li>
	   <li>
	     Assorted bug fixes.
	   </li>
	 </ul>
    </div>
  
    <h3 class="relname">LITMUS<sup>RT</sup> 2008.1</h3>
    <div class="release">
    <p>
         Based on Linux 2.6.24. Released in July 2008.
    </p>
   <h4>Files:</h4>
    <ul>
	 <li>
	 	<a href="download/2008.1/litmus-rt-2008.1.patch">litmus-rt-2008.1.patch</a>
	 </li>
	 <li>
	 	<a href="download/2008.1/liblitmus-2008.1.tgz">liblitmus-2008.1.tgz</a>
	 </li>
	 <li><a href="download/2008.1/SHA256SUMS">SHA256 check sums</a>
	 </li>
    </ul>

    <h4>Major changes (since LITMUS<sup>RT</sup> 2007.3):</h4> 
	 <ul>
	   <li>LITMUS<sup>RT</sup> was ported to Linux 2.6.24.
	   </li>
	   <li>LITMUS<sup>RT</sup> was ported to <span style="src">sparc64</span>.
	   </li>
	   <li>LITMUS<sup>RT</sup> is now a proper scheduling class (<span class="src">SCHED_LITMUS</span>).
	   </li>
	   <li>
	   LITMUS<sup>RT</sup> queues are now based on mergeable heaps.
	   </li>
	   <li>Support for multi-threaded real-time tasks.
	   </li>
	   <li>Scheduler plugins can be selected at runtime; no reboot required.
	   </li>
	   <li>
	     Many bug fixes.
	   </li>
	 </ul>
    </div>
    
    <p>
       Please note that the current implementation is a <em>prototype</em> with
       certain limitations. Most notably, it is not secure in a multiuser context,
       <em>i.e.</em>, real-time system calls do not require superuser
       privileges.
    </p>

    <p class="nobottommargin">
    Older releases: <a href="litmus2007.html">LITMUS<sup>RT</sup> 2007 series</a>.
    </p>

    </div>



    <h2 id="install">Installation</h2> 
    <div class="box"> 
    <p class="notopmargin">
    The current release of LITMUS<sup>RT</sup> consists of an
    extension of the Linux kernel that adds support for the sporadic task
    model, a scheduler plugin infrastructure, and some scheduler plugins, as
    well as a user-space library that provides the LITMUS<sup>RT</sup>
    real-time API. Note that the current implementation only works on the
    Intel x86-32 and sparc64 architectures.
    </p>
    <h3>Patching the Kernel</h3>
    <p class="notopmargin">
    The extension to the Linux kernel is released as a patch against Linux
    2.6.24. To install the LITMUS<sup>RT</sup> kernel, first <a
    href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2">download the Linux
    kernel 2.6.24</a> and untar it in a directory of your choice (hereafter
    referred to as <span class="src">$DIR</span>). Second, apply the
    LITMUS<sup>RT</sup> patch (see <a href="#download">Section Download</a>)
    and configure, compile, and install the kernel as usual. The patch is <span
    class="src">-p1</span> applicable. 
    To summarize, the  LITMUS<sup>RT</sup> kernel can be obtained, patched, and
    compiled with the following commands:
    </p>
<pre class="shell">
cd $DIR
# get Linux 2.6.24
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2
tar xjf linux-2.6.24.tar.bz2
wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2008.3/litmus-rt-2008.3.patch
mv linux-2.6.24 litmus2008
# apply the LITMUS RT patch
cd litmus2008
patch -p1 &lt; ../litmus-rt-2008.3.patch
# create a working kernel configuration
#  - select HZ=1000
#  - enable in-kernel preemptions
#  - disable NO_HZ
#  - don't use power management options like frequency scaling
#  - disable support for group scheduling
make menuconfig
# compile the kernel
make bzImage
make modules
# proceed to install kernel, build initrd, etc.
...
</pre>
    <p>
      When configuring the kernel, note that there is a menu (at the very end of the list) 
      with LITMUS<sup>RT</sup>-specific configuration options. For reference, <a href="download/2008.3/qemu-config">we provide a configuration that is known to work under QEMU</a>.
    </p>

    <h3>Libraries</h3>
    <p class="notopmargin">
    The user-space library for real-time tasks, <span class="src">liblitmus</span>, 
    depends on the LITMUS<sup>RT</sup> kernel kernel and provides its own 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.
    </p>
<pre class="shell">
cd $DIR
wget http://www.cs.unc.edu/~anderson/litmus-rt/download/2008.3/liblitmus-2008.3.tgz
tar xzf liblitmus-2008.3.tgz
cd liblitmus 
# change LITMUS_KERNEL in SConstruct to point to the kernel source
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">&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>
    <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&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>