<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 17, 2020 at 3:00 PM Gedare Bloom <<a href="mailto:gedare@rtems.org">gedare@rtems.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Jonathan,<br>
<br>
On Fri, Jan 17, 2020 at 11:33 AM Jonathan Brandmeyer<br>
<<a href="mailto:jbrandmeyer@planetiq.com" target="_blank">jbrandmeyer@planetiq.com</a>> wrote:<br>
><br>
> We're using the SMP EDF scheduler in our application, and I want to make sure that I understand its semantics correctly when using it in conjunction with both priority-based and deadline-based tasks.<br>
><br>
Below you are quoting from the documentation on the uniprocessor EDF<br>
scheduler. The two schedulers are different.<br>
See: <a href="https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler" rel="noreferrer" target="_blank">https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#earliest-deadline-first-smp-scheduler</a><br>
<br>
You can still use the RM Manager to set up periodic tasks with the SMP<br>
processor.<br>
<br>
> "It assumes that tasks have priorities equal to deadlines" -> It is the responsibility of the application author to give task priorities which are actually equal to deadlines.  Otherwise, the utilization guarantee is not valid.<br>
><br>
> "This EDF is initially preemptive, however, individual tasks may be declared not-preemptive." -> Tasks are preemptive unless they set the scheduling mode to RTEMS_NO_PREEMT.  Using the rate monotonic manager does not make a task non-preemptive.<br>
><br>
> "The tasks with an active deadline have a higher priority than the background tasks."  -> Any task which is using the rate monotonic manager will preempt a task which does not when the rate-monotonic task is ready to run.<br>
><br>
The RM Manager is distinct from the scheduler and does not itself<br>
control preemption.<br>
<br>
> "Deadlines are declared using only Rate Monotonic manager which goal is to handle periodic behavior. Period is always equal to deadline." -> It's not actually possible to give a task a deadline independent of its period.  The task's deadline is implied by the previous call to rtems_rate_monotonic_period().<br>
><br>
I think this is still the case in SMP EDF.<br>
<br>
> I'd like to use the rate monotonic manager to schedule some tasks, while using the rtems_event_send and posix condition variables to schedule others.  In my application, it turns out that some of the tasks which are being made ready to run by an ISR via rtems_event_send have stricter requirements than the rate-monotonic tasks.  They also usually execute with a period that is much finer than the kernel time quantum.<br>
><br>
That is interesting. This might require to augment the scheduler or<br>
roll your own period management logic. It might be nice to allow the<br>
EDF schedulers to support a band of priority that is higher than<br>
deadlines. Off the top of my head though I don't know if there are any<br>
such schedulers with proven schedulability tests in the literature.<br>
<br>
> What is the best way to get event-,  condvar-, or queue-managed tasks to cooperate with rate-monotonic tasks?  If I restrict rate-monotonic tasks to just one core with the affinity API, then it sounds like the other core will always be free to schedule event-triggered tasks + the remainder of the rate-monotonic core.  What other tools are available for this purpose?<br>
><br>
That's probably the easiest way, and least likely to cause trouble<br>
from a schedulability perspective if you have hard real-time<br>
constraints.<br>
<br>
>From the theory side, this problem is usually addressed using a<br>
(sporadic) server. Basically, you create some periodic task at the<br>
prioritization that you want (e.g., the shortest relative deadline in<br>
the system to usually get the highest priority) and then the server<br>
uses its budget to execute the event-based tasks. There are several<br>
variations with pros/cons. However, these do not allow for the<br>
event-based tasks to be the most responsive in general; with EDF,<br>
unless you use relative deadline = 1, there can always be some other<br>
task with a shorter absolute deadline. Also, if the server budget gets<br>
consumed you have to wait for replenishment. I'm not up-to-date with<br>
the latest in SMP schedulers with servers. (Shame on me.)<br></blockquote><div><br></div><div>I wondered about a band of high rate periodic tasks that check</div><div>for the condition and do it or go to sleep. Binds them to periods</div><div>which introduces latency so that's bad.</div><div><br></div><div>This would work but likely not be acceptable.</div><div><br></div><div>I will pile on that I have no idea if there is an scheduler which</div><div>operates this way. If you find one which has good theoretical</div><div>credentials, we would love to know about it. Obviously if it exists</div><div>and gets implemented, even the better. :)</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
There is not much support available out-of-the-box in RTEMS for<br>
servers, other than some academic implementation of the constant<br>
bandwidth server (CBS) for uniprocessor EDF.<br></blockquote><div><br></div><div>The affinity should work if deadline tasks and priority based tasks never</div><div>are assigned to the same core.</div><div><br></div><div>If you do this, you could experiment with affinity and then consider moving</div><div>to a partitioned scheduler setup with some cores running based on </div><div>deadline and other cores running threads based on priority.</div><div><br></div><div>The SMP EDF scheduler only supports pinning (single core) and not </div><div>affinity sets so the clustered scheduling may be the more optimal</div><div>alternative.</div><div><br></div><div><br></div><div><br></div><div>--joel</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Gedare<br>
<br>
> Thanks,<br>
> --<br>
> Jonathan Brandmeyer<br>
> _______________________________________________<br>
> users mailing list<br>
> <a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a><br>
_______________________________________________<br>
users mailing list<br>
<a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a><br>
</blockquote></div></div>