From: Juri Lelli <juri.lelli@arm.com>
To: Michael Riesch <michael@riesch.at>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"juri.lelli@gmail.com" <juri.lelli@gmail.com>,
juri.lelli@arm.com
Subject: Re: Question about SCHED_DEADLINE and sched_yield() usage
Date: Tue, 11 Aug 2015 12:55:07 +0100 [thread overview]
Message-ID: <55C9E29B.1050203@arm.com> (raw)
In-Reply-To: <55C9D32A.4030506@riesch.at>
Hi Michael,
On 11/08/15 11:49, Michael Riesch wrote:
> 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 you are running a 3.14 kernel, you probably missed this fix
5bfd126e80dc "sched/deadline: Fix sched_yield() behavior". Can
you please check?
> 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.
>
It depends. The sched_yield() semantic for SCHED_DEADLINE might
be used to implement some sort of reclaiming mechanism (not
there yet) where you inform the scheduler that you are not going
to use the remaining runtime in this period; and the scheduler
could recycle this spare runtime for other tasks that are running
short of it.
However, I'd say that in your case you can also live without it.
SCHED_DEADLINE can handle sporadic tasks, it depends on how you
implement your userspace loop I guess. If you just check the active
flag, and this flag is always set, you are right that you may
end up executing back to back, though; in which case it seems that yield
semantic could do the trick.
Best,
- Juri
next prev parent reply other threads:[~2015-08-11 11:54 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2015-08-12 9:10 ` Michael Riesch
2015-08-12 10:52 ` Juri Lelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55C9E29B.1050203@arm.com \
--to=juri.lelli@arm.com \
--cc=juri.lelli@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=michael@riesch.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox