Re: [RFC][PATCH -mm 3/3] Freezer: Replace the timeout

Pavel Machek
2007-08-01T08:31:46Z

Hi!

> Instead of using the global timeout, we can use a more fine grained method of
> checking if the freezing of tasks should fail. Namely, we can measure the time
> in which no tasks have entered the refrigerator by counting the number of calls
> to wait_event_timeout() in try_to_freeze_tasks() that have returned 0 (in a
> row).
>
> After sending freeze requests to the tasks regarded as freezable
> try_to_freeze_tasks() goes to sleep and waits until at least one task enters the
> refrigerator.  If the refrigerator is not entered by any tasks before WAIT_TIME
> expires, try_to_freeze_tasks() increases the counter of expired timeouts and
> sends freeze requests to the remaining tasks. If the number of expired timeouts
> becomes greater than MAX_WAITS, the freezing of tasks fails (the counter of
> expired timeouts is reset whenever a task enters the refrigerator).

I do not get logic behind this.

Old logic was "we give system 20 seconds to come into quiet state".

New logic is "if we do no progress within second, we fail"... which is
quite a big change. What happens on loaded ext3 filesystem, for
example? Bunch of userland tasks will wait on data to be synced to
disk, taking more than second, no?

Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html