linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Andrew Morton <akpm@osdl.org>
Cc: riel@redhat.com, marcelo.tosatti@cyclades.com, andrea@suse.de,
	linux-kernel@vger.kernel.org, Jens Axboe <axboe@suse.de>
Subject: Re: [PATCH][5/?] count writeback pages in nr_scanned
Date: Thu, 06 Jan 2005 15:55:34 +1100	[thread overview]
Message-ID: <41DCC4C6.8000205@yahoo.com.au> (raw)
In-Reply-To: <20050105204706.0781d672.akpm@osdl.org>

[-- Attachment #1: Type: text/plain, Size: 1052 bytes --]

Andrew Morton wrote:
> Nick Piggin <nickpiggin@yahoo.com.au> wrote:
> 
>> > If the queue is not congested, blk_congestion_wait() will still sleep.  See
>> > freed_request().
>> > 
>>
>> Hmm... doesn't look like it to me:
>>
>>          if (rl->count[rw] < queue_congestion_off_threshold(q))
>>                  clear_queue_congested(q, rw);
>>
>> And clear_queue_congested does an unconditional wakeup (if there
>> is someone sleeping on the congestion queue).
> 
> 
> That's my point.  blk_congestion_wait() will always sleep, regardless of
> the queue's congestion state.
> 

Oh yes, but it will return as soon as a single request is finished.
Which is probably a couple of milliseconds, rather than the 100 we
had hoped for. So the allocators will wake up again and go around
the loop and still make no progress.

However, if you had a plain io_schedule_timeout there, at least you
would sleep for the full extend of the specified timeout.

BTW. Jens, now that I look at freed_request, is the memory barrier
required? If so, what is it protecting?


[-- Attachment #2: blk-no-mb.patch --]
[-- Type: text/plain, Size: 1275 bytes --]



This memory barrier is not needed because the waitqueue will only get
waiters on it in the following situations:

rq->count has exceeded the threshold - however all manipulations of ->count
are performed under the runqueue lock, and so we will correctly pick up any
waiter.

Memory allocation for the request fails. In this case, there is no additional
help provided by the memory barrier. We are guaranteed to eventually wake
up waiters because the request allocation mempool guarantees that if the mem
allocation for a request fails, there must be some requests in flight. They
will wake up waiters when they are retired.



---

 linux-2.6-npiggin/drivers/block/ll_rw_blk.c |    1 -
 1 files changed, 1 deletion(-)

diff -puN drivers/block/ll_rw_blk.c~blk-no-mb drivers/block/ll_rw_blk.c
--- linux-2.6/drivers/block/ll_rw_blk.c~blk-no-mb	2005-01-06 15:37:05.000000000 +1100
+++ linux-2.6-npiggin/drivers/block/ll_rw_blk.c	2005-01-06 15:37:12.000000000 +1100
@@ -1630,7 +1630,6 @@ static void freed_request(request_queue_
 	if (rl->count[rw] < queue_congestion_off_threshold(q))
 		clear_queue_congested(q, rw);
 	if (rl->count[rw]+1 <= q->nr_requests) {
-		smp_mb();
 		if (waitqueue_active(&rl->wait[rw]))
 			wake_up(&rl->wait[rw]);
 		blk_clear_queue_full(q, rw);

_

  reply	other threads:[~2005-01-06  4:55 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-03 17:25 [PATCH][5/?] count writeback pages in nr_scanned Rik van Riel
2005-01-05 10:08 ` Andrew Morton
2005-01-05 18:06   ` Andrea Arcangeli
2005-01-05 18:50     ` Rik van Riel
2005-01-05 17:49       ` Marcelo Tosatti
2005-01-05 21:44         ` Andrew Morton
2005-01-05 20:32           ` Marcelo Tosatti
2005-01-05 23:51             ` Nick Piggin
2005-01-06  1:27               ` Rik van Riel
2005-01-06  1:33                 ` Nick Piggin
2005-01-06  1:37                   ` Andrew Morton
2005-01-06  1:40                     ` Nick Piggin
2005-01-06  1:52                       ` Andrea Arcangeli
2005-01-06  1:36                 ` Andrew Morton
2005-01-06  3:42                   ` Rik van Riel
2005-01-06  3:50                     ` Nick Piggin
2005-01-06  4:26                       ` Andrew Morton
2005-01-06  4:35                         ` Nick Piggin
2005-01-06  4:47                           ` Andrew Morton
2005-01-06  4:55                             ` Nick Piggin [this message]
2005-01-06  5:03                               ` Andrea Arcangeli
2005-01-06  8:06                               ` Jens Axboe
2005-01-06  8:16                                 ` memory barrier in ll_rw_blk.c (was Re: [PATCH][5/?] count writeback pages in nr_scanned) Nick Piggin
2005-01-06  8:32                                   ` Jens Axboe
2005-01-06  8:53                                     ` Nick Piggin
2005-01-06 12:00                                       ` Jens Axboe
2005-01-06  4:59                             ` [PATCH][5/?] count writeback pages in nr_scanned Andrea Arcangeli
2005-01-06  5:05                               ` Andrew Morton
2005-01-06  5:17                                 ` Andrea Arcangeli
2005-01-06  5:19                                   ` Nick Piggin
2005-01-06  5:25                                     ` Andrea Arcangeli
2005-01-06  5:36                                       ` Nick Piggin
2005-01-06  5:44                                         ` Nick Piggin
2005-01-06  5:37                                       ` Andrew Morton
2005-01-06  5:59                                         ` Andrea Arcangeli
2005-01-06 13:28                                         ` Rik van Riel
2005-01-06  5:32                                     ` Andrew Morton
2005-01-06  5:46                                       ` Andrea Arcangeli
2005-01-06  5:59                                         ` Andrew Morton
2005-01-06  6:16                                           ` Andrea Arcangeli
2005-01-06  5:06                               ` Nick Piggin
2005-01-06  5:21                                 ` Andrea Arcangeli
2005-01-05 23:26 ` Andrew Morton

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=41DCC4C6.8000205@yahoo.com.au \
    --to=nickpiggin@yahoo.com.au \
    --cc=akpm@osdl.org \
    --cc=andrea@suse.de \
    --cc=axboe@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo.tosatti@cyclades.com \
    --cc=riel@redhat.com \
    /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;
as well as URLs for NNTP newsgroup(s).