From: Neil Brown <neilb@suse.de>
To: Jens Axboe <jens.axboe@oracle.com>
Cc: Brad Campbell <brad@wasp.net.au>,
Chuck Ebbert <cebbert@redhat.com>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: [OOPS] 2.6.21-rc6-git5 in cfq_dispatch_insert
Date: Wed, 25 Apr 2007 19:37:28 +1000 [thread overview]
Message-ID: <17967.8536.788076.851546@notabene.brown> (raw)
In-Reply-To: message from Jens Axboe on Wednesday April 25
On Wednesday April 25, jens.axboe@oracle.com wrote:
>
> That's pretty close to where I think the problem is (the front merging
> and cfq_reposition_rq_rb()). The issue with that is that you'd only get
> aliases for O_DIRECT and/or raw IO, and that doesn't seem to be the case
> here. Given that front merges are equally not very likely, I'd be
> surprised is something like that has ever happened.
Well it certainly doesn't happen very often....
And I can imagine a filesystem genuinely wanting to read the same
block twice - maybe a block that contained packed tails of two
different files.
>
> BUT... That may explain while we are only seeing it on md. Would md
> ever be issuing such requests that trigger this condition?
Can someone remind me which raid level(s) was/were involved?
I think one was raid0 - that just passes requests on from the
filesystem, so md would only issue requests like that if the
filesystem did.
I guess it could happen with raid4/5/6. A read request that was
properly aligned (and we do encourage proper alignment) will be passed
directly to the underlying device. A concurrent write elsewhere could
require the same block to be read into the stripe-cache to enable a
parity calculation. So you could get two reads at the same block
address.
Getting a front-merge would probably require two stripe-heads to be
processed in reverse-sector order, and it tends to preserve the order
of incoming requests (though that isn't firmly enforced).
raid1 is much like raid0 (with totally different code) in that the
request pattern seen by the underlying device matches the request
pattern generated by the filesystem.
If I read the debugging output correctly, the request which I
hypothesise was the subject of a front-merge is a 'sync' request.
raid5 does not generate sync requests to fill the stripe cache (maybe
it should?) so I really think it must have come directly from the
filesystem.
(just checked previous email for more detail of when it hits)
The fact that it hits degraded arrays more easily is interesting.
Maybe we try to read a block on the missing device and so schedule
reads for the other devices. Then we try to read a block on a good
device and issue a request for exactly the same block that raid5 asked
for. That still doesn't explain the 'sync' and the 'front merge'.
But that is quite possible, just not common maybe.
It doesn't help us understand the raid0 example though. May it is
just a 'can happen, but only rarely' thing.
NeilBrown
next prev parent reply other threads:[~2007-04-25 9:37 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-15 10:14 [OOPS] 2.6.21-rc6-git5 in cfq_dispatch_insert Brad Campbell
2007-04-15 10:49 ` Brad Campbell
2007-04-15 23:53 ` Adrian Bunk
2007-04-16 3:23 ` Brad Campbell
2007-04-16 22:39 ` Chuck Ebbert
2007-04-17 5:10 ` Neil Brown
2007-04-17 8:13 ` Brad Campbell
2007-04-17 11:48 ` Brad Campbell
2007-04-17 20:39 ` Bartlomiej Zolnierkiewicz
2007-04-18 12:37 ` Jens Axboe
2007-04-18 13:19 ` Brad Campbell
2007-04-18 13:21 ` Jens Axboe
2007-04-22 7:37 ` Brad Campbell
2007-04-23 7:35 ` Jens Axboe
2007-04-24 19:40 ` Brad Campbell
2007-04-25 8:34 ` Neil Brown
2007-04-25 8:46 ` Jens Axboe
2007-04-25 9:34 ` Jens Axboe
2007-04-25 9:37 ` Neil Brown [this message]
2007-04-25 9:47 ` Jens Axboe
2007-04-25 10:02 ` Brad Campbell
2007-04-25 10:18 ` Jens Axboe
2007-04-25 13:59 ` Roland Kuhn
2007-04-25 10:25 ` Neil Brown
2007-04-25 10:36 ` Jens Axboe
2007-04-25 9:54 ` Brad Campbell
2007-04-25 8:50 ` Brad Campbell
2007-04-25 10:06 ` Brad Campbell
2007-04-25 10:59 ` Neil Brown
2007-04-25 11:17 ` Degraded RAID performance - Was : " Brad Campbell
2007-04-18 13:19 ` Jens Axboe
[not found] <79880979-51BB-4D28-A3E8-3AE0F56F5B0A@e18.physik.tu-muenchen.de>
[not found] ` <20070424091807.GA3744@kernel.dk>
[not found] ` <6A6800B3-F9C8-4046-9E1C-A8CEA81B2CE0@e18.physik.tu-muenchen.de>
[not found] ` <20070424093904.GB3744@kernel.dk>
[not found] ` <20070424094003.GC3744@kernel.dk>
2007-04-24 12:27 ` Roland Kuhn
2007-04-24 12:32 ` Jens Axboe
2007-04-24 13:03 ` Roland Kuhn
2007-04-24 13:07 ` Jens Axboe
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=17967.8536.788076.851546@notabene.brown \
--to=neilb@suse.de \
--cc=brad@wasp.net.au \
--cc=cebbert@redhat.com \
--cc=jens.axboe@oracle.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox