<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" id="owaParaStyle" style="display: none;"><!--P {margin-top:0;margin-bottom:0;}--></style>
</head>
<body dir="ltr" fpstyle="1" aria-label="Message body" tabindex="0">
<div name="divtagdefaultwrapper" id="divtagdefaultwrapper" style="font-family: Calibri,Arial,Helvetica,sans-serif; font-size: 12pt; color: #000000; margin: 0">
<div style="color: rgb(40, 40, 40);"><br>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> litmus-dev-bounces@lists.litmus-rt.org <litmus-dev-bounces@lists.litmus-rt.org> on behalf of Glenn Elliott <gelliott@cs.unc.edu><br>
<b>Sent:</b> Saturday, December 14, 2013 12:37 PM<br>
<b>To:</b> litmus-dev@lists.litmus-rt.org<br>
<b>Subject:</b> Re: [LITMUS^RT] Question about how to specify dedicated cores to G-EDF and the relative deadline</font>
<div> </div>
</div>
<div>(As a matter of style, we prefer to follow the Linux mailing list practice of putting email replies at the bottom of email threads, rather than the top.  See my response below.  Also, there is a note at the bottom I want everyone new to Litmus to read.)
<div><br>
<div>
<div>On Dec 13, 2013, at 11:34 PM, Luo, Zheng <<a href="mailto:luozheng@wustl.edu">luozheng@wustl.edu</a>> wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">
<div dir="ltr" tabindex="0" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant:normal; font-weight:normal; letter-spacing:normal; line-height:normal; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px">
<div name="divtagdefaultwrapper" id="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; margin:0px">
<div style="margin-top:0px; margin-bottom:0px">Thanks for the reply. I think I get a little bit confused here. I tried to use the set cpu mask and set cpu affinity on Litmus, however it does not work. It seems that the Litmus ignored that.</div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div style="margin-top:0px; margin-bottom:0px">Also how can I use the<font color="#282828" size="3"> “Release Master”? Does that mean I have to the reconfiguration and then </font><font color="#282828">recompile</font><font color="#282828" size="3"> the kernel
 to do that?</font></div>
<div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; margin:0px">
Zheng Luo<br>
</div>
</div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div style="color:rgb(40,40,40)">
<hr tabindex="-1" style="display:inline-block; width:706px">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt"><b>From:</b><span class="Apple-converted-space"> </span><a href="mailto:litmus-dev-bounces@lists.litmus-rt.org" title="mailto:litmus-dev-bounces@lists.litmus-rt.org
Ctrl+click or tap to follow link">litmus-dev-bounces@lists.litmus-rt.org</a>
 <<a href="mailto:litmus-dev-bounces@lists.litmus-rt.org">litmus-dev-bounces@lists.litmus-rt.org</a>> on behalf of Glenn Elliott <<a href="mailto:gelliott@cs.unc.edu" title="mailto:gelliott@cs.unc.edu
Ctrl+click or tap to follow link">gelliott@cs.unc.edu</a>><br>
<b>Sent:</b><span class="Apple-converted-space"> </span>Friday, December 13, 2013 9:15 PM<br>
<b>To:</b><span class="Apple-converted-space"> </span><a href="mailto:litmus-dev@lists.litmus-rt.org" title="mailto:litmus-dev@lists.litmus-rt.org
Ctrl+click or tap to follow link">litmus-dev@lists.litmus-rt.org</a><br>
<b>Subject:</b><span class="Apple-converted-space"> </span>Re: [LITMUS^RT] Question about how to specify dedicated cores to G-EDF and the relative deadline</font>
<div> </div>
</div>
<div><br>
<div>
<div>On Dec 13, 2013, at 11:00 PM, Luo, Zheng <<a href="mailto:luozheng@wustl.edu" title="mailto:luozheng@wustl.edu
Cmd+click or tap to follow link">luozheng@wustl.edu</a>> wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">
<div dir="ltr" tabindex="0" id="" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant:normal; font-weight:normal; letter-spacing:normal; line-height:normal; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px">
<div name="divtagdefaultwrapper" id="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; margin:0px">
<div style="margin-top:0px; margin-bottom:0px">Hi everyone,</div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div style="margin-top:0px; margin-bottom:0px">I have a question about how to choose dedicated group of cores on Litmus running G-EDF. For example, if my machine have 4 cores, I want to reserve core 0 for the Operating system, and core 1-3 to the rt-thread
 which can do the work. How can I do that? I tried the C-EDF, however used the L1,L2,L3 caches to do the division. I was wondering how can I do the division manually in the G-EDF?</div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div style="margin-top:0px; margin-bottom:0px">Also, I have a question about the relative deadline, I think the normally the G-EDF should have the absolute deadline. Does the Litmus automatically convert <span style="font-size:12pt">relative deadline to the
 absolute deadline when using the G-EDF?</span></div>
<div style="margin-top:0px; margin-bottom:0px"><span style="font-size:12pt"><br>
</span></div>
<div style="margin-top:0px; margin-bottom:0px"><span style="font-size:12pt">Thanks, Looking forward to the reply. </span><span style="font-size:12pt">   </span></div>
<div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; margin:0px">
Zheng Luo</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<div>Hi Zheng,</div>
<div><br>
</div>
<div>I think you can accomplish what you want to do by using a “Release Master”.  This is enabled by asserting the CONFIG_RELEASE_MASTER compile-time option under the “Scheduling” menu.  This will reserve CPU0 (aka the “Release Master”) for handling release
 interrupts for G-EDF running on the remaining CPUs.  You can also run general code on the release master CPU, assuming you have properly configured CPU affinity masks for those processes/threads.</div>
<div><br>
</div>
<div>All EDF schedulers, including G-EDF, always uses a job’s absolute deadline to prioritize scheduling.  A relative deadline (a task attribute, not a job attribute) scheduler would be something like Deadline-Monotonic scheduling— tasks with smaller relative
 deadlines have higher priority.  Implementing your own Deadline-Monotonic scheduler is not hard.  There are kludgey ways to do it in Litmus with just 5 to 10 minutes of coding.</div>
<div><br>
</div>
<div>-Glenn</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
<div><br>
</div>
<div>Hi Zheng,</div>
<div><br>
</div>
<div>(AFFINITY)</div>
<div><br>
</div>
<div>CPU affinity in Litmus is pretty well tested, so I would be surprised if it were broken.  What behaviors are you observing that make you think that it is broken?  To rule out programmer error, please make sure you are setting affinity masks via Litmus’s
 helper APIs found in liblitmus/include/migration.h:</div>
<div><br>
</div>
<div>be_migrate_to_cpu()</div>
<div>be_migrate_to_partition()</div>
<div>be_migrate_to_cluster()</div>
<div><br>
</div>
<div>Please note that these functions must be called BEFORE a task enters real-time mode.  Observe that CPU affinity is used to assign tasks to partitions/clusters.</div>
<div><br>
</div>
<div>If you are using partitioned or clustered scheduling, then you want to use be_migrate_to_partition() and be_migrate_to_cluster(), respectively.  Note that be_migrate_to_partition() and be_migrate_to_cluster() APIs are release-master aware.  For instance,
 when release master is enabled and is set to CPU0, the 0th partition starts on CPU1.  When release master is disabled, the 0th partition starts on CPU0.  </div>
<div><br>
</div>
<div>You can use be_migrate_to_cpu() to pin the callee to a particular CPU if you want that sort of lower-level control.  This API is easier to use that Linux’s API if you need to pin to just one CPU (rather than a collection of CPUs).</div>
<div><br>
</div>
<div>(RELASE MASTER)</div>
<div><br>
</div>
<div>I believe that I was mistaken in my earlier email.  I had forgotten that release master was configurable (I had assumed that CPU0 was automatically set up as the release master).</div>
<div><br>
</div>
<div>You can set a release master CPU by echo’ing a CPU to /proc/litmus/release_master.</div>
<div>Example:</div>
<div>> sudo echo “0” > /proc/litmus/release_master</div>
<div><br>
</div>
<div>IMPORTANT: You must select a release master before you activate a Litmus scheduler plugin. That is, you can set a release master whenever the active plugin is “Linux”.</div>
<div><br>
</div>
<div>You can query for the release master CPU via liblitmus in your applications with the release_master() API, also found in liblitmus/include/migration.h.  The function returns “-1” if a release master CPU has not been selected (or is not supported by the
 kernel, i.e., support was not configured into the kernel when it was compiled).  Otherwise, it will return the CPU# of the release master.</div>
<div><br>
</div>
<div>Yes, support for release master is a kernel compile-time option (hence, my earlier reference to CONFIG_RELEASE_MASTER).  Once you boot into the Litmus kernel, you should see “release_master” in /proc/litmus.  If you don’t, Litmus wasn’t compiled correctly.</div>
<div><br>
</div>
<div>(ATTENTION EVERYONE)</div>
<div><br>
</div>
<div>We are __very__ pleased that others outside of UNC and MPI have taken an interest in Litmus and want to experiment with it.  This has always been a goal for us, and we will always help others whenever we can.  That said, lately we’ve been receiving a lot
 of emails on the mailing list that lack enough information for us to be helpful.  Working with Litmus can be challenging at first, especially if you have never done kernel development before.  I understand that frustration can lead you to quickly shoot off
 a short email to the Litmus mailing list.  However, in the future, please try to be more __thoughtful__ with your questions.  Be more descriptive.  We can’t help if you merely say “it doesn’t work.”  Ask yourself, “What sort of information would someone need
 in order to answer my question?"  What code appears to be broken?  What is your code?  Are you doing something different than the example applications in liblitmus?  Are there any error messages printed to the console log?  What evidence can you show that
 the system is functioning improperly (logs, traces, etc.)?  More often than not, when *I* go through these steps and actually gather the requisite information, I find the answer for myself.  And when I don’t, everyone has enough information to help out.</div>
<div><br>
</div>
<div>Best Regards,</div>
<div>Glenn</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>Hi Glenn,</div>
<div><br>
</div>
<div>Thanks for the reply. That is very helpful.</div>
</div>
</div>
</div>
</body>
</html>