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