idea: set a niceness value under which a process won't awaken suspended CPU

Jon Nettleton jon.nettleton at gmail.com
Fri Mar 2 04:50:16 EST 2012


On Mar 2, 2012 10:37 AM, "Lennert Buytenhek" <buytenh at wantstofly.org> wrote:
>
> One problem you can get into with this scheme is a kind of priority
> inversion.  If the low priority process does:
>
>        fd = open("/foo/bar", O_RDWR);
>        flock(fd, LOCK_EX);
>
> and the high priority process then also does:
>
>        fd = open("/foo/bar", O_RDWR);
>        flock(fd, LOCK_EX);
>
> and the low priority process then does:
>
>        sleep(1);
>        flock(fd, LOCK_UN);
>
> and the system then goes into suspend, you'll not wake up again
> after that second expires, and you might not wake up again soon
> at all.  The low priority process doesn't even have to sleep
> explicitly, if it takes a page fault you get basically the same
> thing.

I believe the cgroup method will catch this though.  I would have to double
check, but I think that the cgroup becomes partially frozen returning EBUSY
until all the processes can properly be frozen.  At that time I believe it
is up to userspace to thaw, or refreeze the group, unless the blocking
process ends in which case the entire cgroup is set to the frozen state.

-Jon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.laptop.org/pipermail/devel/attachments/20120302/733ad69c/attachment.html>


More information about the Devel mailing list