[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <FFF95760268D324AB6DD9426E83C8DF70B2E5925@ARLEXCHMBX01.lst.link.l-3com.com>
Date: Fri, 21 Mar 2014 14:34:19 +0000
From: <jimmie.davis@...com.com>
To: <umgwanakikbuti@...il.com>
CC: <artem_fetishev@...m.com>, <peterz@...radead.org>,
<kosaki.motohiro@...fujitsu.com>, <linux-kernel@...r.kernel.org>
Subject: RE: Bug 71331 - mlock yields processor to lower priority process
________________________________________
From: Mike Galbraith [umgwanakikbuti@...il.com]
Sent: Friday, March 21, 2014 8:14 AM
To: Davis, Bud @ SSG - Link
Cc: artem_fetishev@...m.com; peterz@...radead.org; kosaki.motohiro@...fujitsu.com; linux-kernel@...r.kernel.org
Subject: RE: Bug 71331 - mlock yields processor to lower priority process
On Fri, 2014-03-21 at 12:18 +0000, jimmie.davis@...com.com wrote:
> As the submitter of the bug, let me give you my perspective.
> SCHED_FIFO means run my task until it blocks or a higher priority task
> pre-empts it. Period.
It blocked.
>
> mlock() doesn't block. check the man page.
>
I don't see that specified.
(or how it could be, but what do I know, IANIPL)
> Any other way and you are not able to use priority based scheduling.
Sure you can, allocate and lock down resources before entering critical
sections.
If you think donning a SCHED_FIFO super-suit should make your task
unstoppable, you're gonna be very disappointed. Fact is if your
Juggernaut bumps ever so gently into a contended sleeping variety lock
(and in the rt kernel that means nearly every lock), it will block.
-Mike
------------------------------------------------------------------------------------------------
Mike,
There are several problem domains where you protect critical sections by assigning multiple
threads to a single CPU and use priorities and SCHED_FIFO to ensure data integrity.
In this kind of design you don't make many syscalls. The ones you do make, have to be clearly understood
if they block.
So, yes, I expect that a SCHED_FIFO task, that uses a subset of syscalls known to be non-blocking, will not block.
If it is not 'unstoppable', then there is a defect in the OS.
In the past, a call to mlock() was known to be OK. It would not block. It might take a while, but it would run to completion. It does not do that any more.
If mlock() is now a blocking call, then fine. It only needs to be called on occasion, and this can be accounted for
in the application design. Does write() block ? Yes, the man pages talks all about it. Does clock_gettime() block ?
No, blocking is not mentioned in the man page. Blocking behaviour is rare, when it exists it is documented.
My point is, this is either a defect to be fixed, or a change that warrants updating the documentation.
regards,
Bud Davis
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists