public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Pavel Machek <pavel@ucw.cz>
Cc: Nigel Cunningham <nigel@nigel.suspend2.net>,
	Andres Salomon <dilinger@debian.org>,
	linux-pm@lists.linux-foundation.org, Chris Ball <cjb@laptop.org>,
	David Woodhouse <dwmw2@infradead.org>,
	Oleg Nesterov <oleg@tv-sign.ru>
Subject: Re: [RFC][PATCH -mm 3/3] Freezer: Replace the timeout
Date: Wed, 1 Aug 2007 12:43:24 +0200	[thread overview]
Message-ID: <200708011243.25276.rjw@sisk.pl> (raw)
In-Reply-To: <20070801083146.GX2087@elf.ucw.cz>

On Wednesday, 1 August 2007 10:31, Pavel Machek wrote:
> 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.

Well, I agree, and that's why I wanted to separate this part from the two
previous patches ...

> 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?

IMHO this only is a question of what the value of MAX_WAITS should be.
[I took 5 because it turned to be enough in my testing, but that could be 10 or
more.]

The point is that in 99.(9)% of cases the 20s timeout is unnecessary, because:
(1) most often we succeed within 1s
(2) if we are going to fail, we can say that we'll fail way before the 20s
    expires.
Now, the question is how we can check that we'll fail and this patch attempts
to use a simple machanism:
* measure the time in which no tasks have entered the refrigerator and if this
  time is long enough, we can safely assume the "blocking" tasks to be stuck
  somewhere and give up.
This isn't bullet proof, but it should cover the vast majority of cases.

Anyway, eventually, I'd like the freezer to detect failures relatively early,
so the user won't have to wait 20s each time it's going to fail.

Greetings,
Rafael


-- 
"Premature optimization is the root of all evil." - Donald Knuth

  reply	other threads:[~2007-08-01 10:43 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-25 12:01 [RFC][PATCH -mm 0/2] Freezer: Use wait queue instead of busy looping Rafael J. Wysocki
2007-07-25 12:03 ` [RFC][PATCH -mm 1/2] Freezer: Be more verbose Rafael J. Wysocki
2007-07-25 12:27   ` Pavel Machek
2007-07-25 12:09 ` [RFC][PATCH -mm 2/2] Freezer: Use wait queue instead of busy looping Rafael J. Wysocki
2007-07-25 12:28   ` Pavel Machek
2007-07-25 12:55     ` Rafael J. Wysocki
2007-07-25 13:29   ` Oleg Nesterov
2007-07-25 14:03     ` Rafael J. Wysocki
2007-07-25 14:24       ` Oleg Nesterov
2007-07-26 12:24         ` Rafael J. Wysocki
2007-07-26 12:43           ` Rafael J. Wysocki
2007-07-31  8:01           ` Pavel Machek
2007-07-31  9:39             ` Rafael J. Wysocki
2007-07-31 10:00               ` Pavel Machek
2007-07-31 10:17                 ` Rafael J. Wysocki
2007-07-31 10:08               ` Rafael J. Wysocki
2007-07-31 10:02                 ` Pavel Machek
2007-07-31 22:25                   ` [RFC][PATCH -mm 0/3] Freezer: Use wait queue instead of busy looping (updated) Rafael J. Wysocki
2007-07-31 22:26                     ` [RFC][PATCH -mm 1/3] Freezer: Use wait queue instead of busy looping Rafael J. Wysocki
2007-08-01  7:59                       ` Pavel Machek
2007-07-31 22:28                     ` [RFC][PATCH -mm 2/3] Freezer: Measure the time of freezing tasks Rafael J. Wysocki
2007-08-01  8:28                       ` Pavel Machek
2007-07-31 22:29                     ` [RFC][PATCH -mm 3/3] Freezer: Replace the timeout Rafael J. Wysocki
2007-08-01  8:31                       ` Pavel Machek
2007-08-01 10:43                         ` Rafael J. Wysocki [this message]
2007-08-05 21:37                           ` Pavel Machek
2007-08-05 22:38                             ` Rafael J. Wysocki
2007-08-05 22:53                               ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200708011243.25276.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=cjb@laptop.org \
    --cc=dilinger@debian.org \
    --cc=dwmw2@infradead.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=nigel@nigel.suspend2.net \
    --cc=oleg@tv-sign.ru \
    --cc=pavel@ucw.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox