________________________________________ From: Mike Galbraith [[email protected]] Sent: Friday, March 21, 2014 8:14 AM To: Davis, Bud @ SSG - Link Cc: [email protected]; [email protected]; [email protected]; [email protected] Subject: RE: Bug 71331 - mlock yields processor to lower priority process
On Fri, 2014-03-21 at 12:18 +0000, [email protected] 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 [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

