All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arne Jansen <sensille@gmx.net>
To: Chris Mason <chris.mason@oracle.com>, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH] Btrfs: fix submit_worker congestion
Date: Wed, 30 Nov 2011 11:30:01 +0100	[thread overview]
Message-ID: <4ED605A9.9070707@gmx.net> (raw)
In-Reply-To: <20111129214707.GT24338@shiny>

On 29.11.2011 22:47, Chris Mason wrote:
> On Tue, Nov 29, 2011 at 09:40:56PM +0100, Arne Jansen wrote:
>> Write bios are submitted from the submit_worker. The worker pumps down
>> bios into the block layer until it signals a congestion. At least this
>> is the theory. In pratice submit_bio just blocks before any signalling
>> happens. As the bios are queued per device, this can lead to a situation
>> where only one device is served until all bios are submitted, and only
>> then the next device is served. This is obviously suboptimal.
>> This patch just throws out the congestion detection and reschedules the
>> worker every 8 requests. This way, all devices can be kept busy.
>> This is only a temporary fix until the block layer provides a non-blocking
>> submit_bio. Then the whole submit_worker mechanism can be killed.
> 
> The problem with the every 8 requests logic is that we've still got a
> pretty good chance of getting stuck behind get_request_wait.  The way
> the elevator batching works is that it should give us a batch of
> requests, and once that batch is done we wait.
> 
> If we jump around every 8 requests, we've turned this:
> 
> [ dev A bio 1-8, dev A bio 8-16, dev A bio 16-32, dev B bio 1-8, dev B ... ]

currently, it's more like
[ dev A bio 1 - 5000, dev B bio 1-5000 ]

> 
> into:
> 
> [ dev A bio 1-8, dev B bio 1-8, dev A bio 8-16, dev B bio 8-16 ]

so this is a great improvement :)

> 
> They look like the same IO, but if we wait for a request when we do
> (dev B bio 1-8) then our dev A bio 1-8 bio is likely to dispatch without
> all the other dev A bios we had queued.
> 
> As you said in IRC, we'd be better off with one thread per device or (my
> preference) with a real non-blocking submit_bio.  What kind of results
> did you get with your test from bumping the nr_requests?

what nr_requests do you mean? btrfs_async_submit_limit?

Arne

> 
> -chris
> --

  reply	other threads:[~2011-11-30 10:30 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-29 20:40 [PATCH] Btrfs: fix submit_worker congestion Arne Jansen
2011-11-29 21:47 ` Chris Mason
2011-11-30 10:30   ` Arne Jansen [this message]
2011-11-30 14:13     ` Chris Mason
2011-12-15 21:12 ` Chris Mason

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=4ED605A9.9070707@gmx.net \
    --to=sensille@gmx.net \
    --cc=chris.mason@oracle.com \
    --cc=linux-btrfs@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.