Re: [PATCH] freezer: configure user space process frozen along with kernel threads

Eric W. Biederman
2013-02-20T21:36:43Z

Alan Stern <stern@rowland.harvard.edu> writes:

> On Wed, 20 Feb 2013, Eric W. Biederman wrote:
>
>> >> Why can't the fuse filesystem freeze when there are requests pending?
>> >
>> > It _can_ freeze (that is, the fuse daemon can). The problem is that
>> > tasks _using_ the fuse filsystem can't if the daemon doesn't respond.
>>
>> Which is what I meant when I said that the fuse filesystem couldn't
>> freeze.
>
> Oh, okay. But it's no different from any other filesystem in that
> respect. Processes generally can't be frozen while they are waiting
> for filesystem I/O to complete. In many cases they can't receive
> signals either (they are in an uninterruptible wait state).

Ick. So the process freezer and all network filesystems has problems?
Especially nfs?

>> > These tasks are stuck in uninterruptible wait states deep in the
>> > filesystem layer, probably holding important locks. They can't be
>> > frozen until the outstanding requests complete.
>>
>> Why is it that processes that can be preempted can't be frozen?
>
> There's a big difference between preemption and freezing: Preemption
> is involuntary whereas freezing is voluntary. It's like the difference
> between preemptive and cooperative multitasking.

I hadn't realized freezing was voluntary. That certainly seems like a
pain.

> Processes can be frozen only by making explicit checks, and they
> mustn't be frozen while they are holding locks that would prevent other
> processes from reaching one of those checks.
>
>> At most I would suggest that processes be frozen in reverse priority
>> order. Which unless there is a priority inversion should solve this
>> problem without an additional proc file.
>
> Do fuse daemons (and the processes they rely upon) run with elevated
> priority?

I don't know if the daemons are of an elevated scheduling priority today
but if they aren't it is as easy to require an elevated scheduling
priority as it is to require a magic freezer priority. Furthermore if
they don't run at an elevated priority there is the possibility of
priority inversion.

With a little care you might even be able to drop the kernel thread
special case if you freeze processes by prirority.

Eric