All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andres Salomon <dilinger@debian.org>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: pdflush and high load
Date: Thu, 23 Mar 2006 14:30:41 -0500	[thread overview]
Message-ID: <4422F761.8000300@debian.org> (raw)
In-Reply-To: <20060307040821.29aa78c1.akpm@osdl.org>

(Sorry for the delayed response, been way too busy)


Andrew Morton wrote:
> Andres Salomon <dilinger@debian.org> wrote:
>> Hi,
>>
>> (2nd attempt at posting this; the first one appears to have
>> disappeared?)
> 
> It came through.
> 
>> Basically, what ends up happening on my system is, each pdflush process
>> is handling background_writeout(), encountering congestion, and calling
>> blk_congestion_wait(WRITE, HZ/10) after every loop.
> 
> Yes, the do-we-need-another-thread algorithm is rather too naive.  I could
> swear it _used_ to work OK.  Maybe something changed to cause individual
> threads to block for longer than they used to.  That would be an
> independent problem - one pdflush instance is supposed to be able to handle
> many queues (I tested one instance on 12 disks and it worked OK.  But that
> was 4-5 years ago)

The fact that background_writeout() seems to count up to 0 in the common
case suggests some serious bitrot.


> 
>> My solution to the problem is to keep the blk_congestion_wait() sleep as
>> uninterruptible, but add a check to the background_writeout() loop to
>> check whether the current pdflush thread is actually doing anything
>> useful; if it's not, just give up.
> 
> It would be better to not start a new thread in the first place.
> 

Indeed, but how do we determine that?

One option that I thought of was to move the thread spawning logic down
into the worker callbacks, as they have more of an idea about what's
going on.  When they simply sleep (as is the case w/
background_writeout), it's very easy to hit the 1 second threshold that
the generic pdflush logic uses to determine whether to create a new thread.

I'm playing around w/ some patches that move the logic down into the
callbacks, returning non-zero if they need help.  Thus, the pdflush
thread checks if the callback returned non-zero, and if there's no
pdflush threads idle; if that's the case, allocate a new thread.

  reply	other threads:[~2006-03-23 19:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-06 22:06 pdflush and high load Andres Salomon
2006-03-07 12:08 ` Andrew Morton
2006-03-23 19:30   ` Andres Salomon [this message]
  -- strict thread matches above, loose matches on Subject: below --
2006-03-06 18:21 Andres Salomon

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=4422F761.8000300@debian.org \
    --to=dilinger@debian.org \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.