public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Question about SCHED_DEADLINE and sched_yield() usage
@ 2015-08-10 20:47 Michael Riesch
       [not found] ` <55C9D32A.4030506@riesch.at>
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Riesch @ 2015-08-10 20:47 UTC (permalink / raw)
  To: linux-kernel; +Cc: j.lelli

Hi all,

I connected two analog-to-digital converters to a BeagleBoneBlack (with
kernel version 3.14.33-ti-r51.2) and tried to use the deadline scheduler
to get samples at a constant rate. In my C++/Qt application the ADCs are
represented by a class which is derived from QThread. The run() method
is basically:

run()
{
   unsigned int flags;
   struct sched_attr attr;
   attr.sched_policy = SCHED_DEADLINE;
   attr.sched_runtime = 600 * 1000;
   attr.sched_deadline = 1250 * 1000;
   attr.sched_period = 1250 * 1000;
   sched_setattr(0, &attr, flags);

   while (active) {
      /* code that gets a sample from adc, takes around 500 ms */

      sched_yield();
   }
}

to get samples at a rate of 800 Hz. However, once sched_yield() is
called, the threads do not seem to be scheduled again (no samples are
acquired and when the application shuts down the threads remain as zombies).

As far as I understand, I have to call sched_yield() if the the
execution time of one loop iteration is either not constant or unknown
(both cases being very likely), because if I do not, a new loop
iteration could be started if the time budget is not empty.

Have I missed something? Any ideas or alternative approaches are welcome!

Thanks a lot in advance!
Best regards, Michael

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-08-12 10:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-10 20:47 Question about SCHED_DEADLINE and sched_yield() usage Michael Riesch
     [not found] ` <55C9D32A.4030506@riesch.at>
2015-08-11 11:55   ` Juri Lelli
2015-08-12  9:10     ` Michael Riesch
2015-08-12 10:52       ` Juri Lelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox