<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">Hi,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">Thanks for your help. I would like to point out the following to finalize my observations and be of help to the community who will read litmus digest, especially those who might be forced to run litmus on single board computers with older kernels, requiring older versions of litmus.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">1. Despite what I was led to initially believe that there are significant changes between the 2014.2 tracing code formats and the recent ones, it turns out that it all goes down to adding the ACET in the completion struct in newer versions. This explains why using st_job_stats on the 2014.2 traces yielded garbage data.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">(latest versions)</div>struct st_completion_data { /* A job completed. */<br><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">u64 when;<br>u64 forced:1;<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148);display:inline">         </div>/* Set to 1 if job overran and kernel advanced to the<blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148);display:inline">​​</div>* next task automatically; set to 0 otherwise.<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148);display:inline">*/</div></blockquote></blockquote></blockquote>u64 exec_time:63;<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148);display:inline">   </div><div class="gmail_default" style="font-family:verdana,sans-serif;color:rgb(11,83,148);display:inline">​</div>/* Actual execution time of job. */</blockquote>};<div><br><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">(2014.2 version)</div><div class="gmail_default"><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">struct st_completion_data {<span style="white-space:pre-wrap">    </span>/* A job completed. */</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><span style="white-space:pre-wrap">   </span>u64<span style="white-space:pre-wrap">     </span>when;</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><span style="white-space:pre-wrap">    </span>u8<span style="white-space:pre-wrap">      </span>forced:1; <span style="white-space:pre-wrap">      </span>/* Set to 1 if job overran and kernel advanced to the</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><span style="white-space:pre-wrap">                            </span> * next task automatically; set to 0 otherwise.</font><span style="color:rgb(11,83,148);font-family:verdana,sans-serif">*/</span></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><span style="white-space:pre-wrap"> </span>u8<span style="white-space:pre-wrap">      </span>__uflags:7;</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><span style="white-space:pre-wrap">      </span>u8<span style="white-space:pre-wrap">      </span>__unused[7];</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">};</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">2. As for the wrong period reported when it becomes too large, after investigating, this problem is expected in <b>all</b> versions <b>including the recent ones</b>. This has to do with the <i>struct st_param_data </i>because in there, the period and WCET are defined as <i>u32 </i>type. Since all timing is in nanoseconds, all execution times and periods exceeding the <i>int</i> type capacity will be wrongly represented. However, since internally litmus_rt WCET and periods are of type lt_t (long long), my expectation is that internally Litmus will work correctly. To correct the issue, a complete rework and resizing of the event record struct and size is needed if one wishes to see a correct large period/WCET displayed in st-job-stats. This might not be a priority, but worth noting.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">3. I have found the old unit trace tool which was used to parse the 2014.2 traces and older ones. Comparing the codes, I realized that the most changes between 2014.2 and recent versions have nothing to do with the traces, formats, and records except for the ACET field. All work in recent changes was mostly related to writing better parsers, drawing tools, job statistics .. etc. Yet, <b>st</b> tracing remains essentially unchanged for the most part. So basically using the 2016.1 ft_tools version with 2014.2 litmus works fine as long as one discards the ACET field data.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">4. Now the only puzzling issue remaining is for five benchmarks out of 45. If the benchmark is launched using a litmus_rt wrapper which calls it as a periodic task, the execution time is stretched for no apparent reason. For example, one benchmark which has a WCET of 50ms (non-rt executable) will have 1500ms exec time when launched as a real-time task. I opted to do without these five benchmarks in my final set. Some of these troublesome benchmarks were CPU bound too.</font></div><div class="gmail_default"><br></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">5. Thanks for the help. I hope that at one <span style="color:rgb(11,83,148);font-family:verdana,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">point, whenever time permits, you could document more of the litmus files</span>. Plus, some sort of how the files are related to each other could be useful. It would help the community in understanding and using Litmus RT.  Using cscope to navigate the code is recommended for new users.  Great job though on the work done.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">regards,</font></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 14 February 2018 at 22:47, Ashraf E. Suyyagh <span dir="ltr"><<a href="mailto:mrsuyyagh@gmail.com" target="_blank">mrsuyyagh@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">Hi,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">First of all, my apologies for the long post, but needed to cover the setup and results in details. I am forced to use litmus 2014.2 on a 3.10 kernel.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">I have a set of 45 embedded benchmarks. I have written a litmus RT main file (<span style="color:rgb(11,83,148);font-family:verdana,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">wrapper) </span>for each benchmark which calls it as a periodic litmus RT job for a duration T. The tasks are compiled and linked against the litmus RT API and libraries. The attached file (main.c) is for benchmarks with arguments.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">The running platform is an ARM Odroid-XU4 board with Exynos 5422 Octa-core (ARM big little A15 and A7 cores).</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">

<span style="color:rgb(11,83,148);font-family:verdana,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">In a previously published research project we did, the WCET of each benchmark was estimated on the same platform for each type of the cores, so I have two sets of WCETs for each A15 and A7 core types. This is a safe WCET estimate. Execution times never exceeded this WCET. We choose the WCET based on which type of core the task is run at.</span></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"> </div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">I am using partitioned EDF (each core is a partition - L1 cache based). I have estimated the overhead of the wrapper and scheduler to be 0.36ms on the A15 core and 0.5ms on the A7 core. <b>Those overheads are factored into the final WCET when running the litmus task.</b></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">For now, <b><i>I am running each RT benchmark one at a time with synchronous release and forced completion.</i></b></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><b><br></b></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">A sample command is running the bitcnts benchmark, <b>the period is four times the WCET. Therefore, the implicit deadline is far away.</b></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">sudo ./bitcnts -p 1 -w 1502 6010 30 -- 1125000  & <br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)">I have run each of the benchmarks and they do execute periodically. So no problem in launching the benchmarks and I verified that my tasks are launching fine with correct results/outputs. However, the problems are the follows:</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><ol><li>When running <i>st-trace-schedule</i> and collecting results by <i>st-job stats</i> for one task, ACET values are odd. In many cases, they are 0, in others extremely high values which makes no sense (e.g. 3677604500000) (see file result_01</li><li>This issue is a frequent case with most benchmarks, I will list one as an example. In a task with a WCET of 107ms and a period of 500ms running for 30 seconds, the results are odd. The ACET shows as before, 0. And there are lots of forced jobs in a pattern of 1,1,0,1,1,0 ... etc or 0,1,0,10,1 ...etc. Why would the task be forced? The execution time is less than the WCET and the deadline is four times the WCET. There is no way I can imagine that the job would exceed its deadline. (see file result_02). Do note, in a previous project we have run those benchmarks tens of thousands of times each and we have a solid idea of how long they execute on average.</li><li>Is the period capped? I have a task which is run as " <span class="m_-6617445537695299604gmail-gr_ m_-6617445537695299604gmail-gr_1138 m_-6617445537695299604gmail-gr-alert m_-6617445537695299604gmail-gr_spell m_-6617445537695299604gmail-gr_inline_cards m_-6617445537695299604gmail-gr_run_anim m_-6617445537695299604gmail-ContextualSpelling" id="m_-6617445537695299604gmail-1138" style="display:inline;color:rgb(11,83,148);font-size:small;border-bottom:2px solid transparent;background-repeat:no-repeat;font-family:verdana,sans-serif;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">sudo</span><span style="color:rgb(11,83,148);font-family:verdana,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> ./bitcnts -p 1 -w 1502 6010 30 -- 1125000  &  ". However, the trace shows a period of 1715 instead of 6010</span></li></ol></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><div class="gmail_default"># Task,   Job,     Period,   Response, DL Miss?,   Lateness,  Tardiness, Forced?,       ACET,  Preemptions,   Migrations</div></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><div class="gmail_default"># task NAME=bitcnts PID=4052 COST=1502000000 PERIOD=1715032704 CPU=1</div></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><div class="gmail_default">  4052,     2, 1715032704, 1443401363,        0, -4566598637,          0,       0,          0,            0,            0</div></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><div class="gmail_default">  4052,     3, 1715032704, 1446788641,        0, -4563211359,          0,       0,          0,            0,            0</div><div class="gmail_default"><br></div></div></blockquote></blockquote><font color="#0b5394" face="verdana, sans-serif"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148);display:inline">​Thank you​</div><br></font><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small;color:rgb(11,83,148)"><br></div></div>
</blockquote></div><br></div>