From: "Jörn Engel" <joern@logfs.org>
To: Ricard Wanderlof <ricard.wanderlof@axis.com>
Cc: linux-mtd@lists.infradead.org, "Jörn Engel" <joern@logfs.org>,
"David Woodhouse" <dwmw2@infradead.org>,
"Josh Boyer" <jwboyer@gmail.com>,
"Matthieu CASTET" <matthieu.castet@parrot.com>
Subject: Re: Jffs2 and big file = very slow jffs2_garbage_collect_pass
Date: Wed, 23 Jan 2008 11:19:15 +0100 [thread overview]
Message-ID: <20080123101915.GA24953@lazybastard.org> (raw)
In-Reply-To: <Pine.LNX.4.64.0801231014540.25733@lnxricardw.se.axis.com>
On Wed, 23 January 2008 10:23:55 +0100, Ricard Wanderlof wrote:
> On Tue, 22 Jan 2008, Jörn Engel wrote:
>
> >- Moderate: one block continuously spews -EUCLEAN, then becomes
> > terminally bad.
> > If those are just random bitflips, garbage collection will move the
> > data sooner or later. Logfs does not force GC to happen soon when
> > encountering -EUCLEAN, which it should. Are correctable errors an
> > indication of block going bad in the near future? If yes, I should do
> > something about it.
>
> I would say that correctable errors occurring "soon" after writing are an
> indication that the block is going bad. My experience has been that
> extensive reading can cause bitflips (and it probably happens over time
> too), but that for fresh blocks, billions of read operations need to be
> done before a bit flips. For blocks that are nearing their best before
> date, a couple of hundred thousand reads can cause a bit to flip. So if I
> was implementing some sort of 'when is this block considered
> bad'-algorithm, I'd try to keep tabs on how often the block has been
> (read-) accessed in relation to when it was last writen. If this number is
> "low", the block should be considered bad and not used again.
That sounds like an impossible strategy. Causing a write for every read
will significantly increase write pressure, thereby reduce flash
lifetime, reduce performance etc.
What would be possible was a counter for soft/hard errors per physical
block. On soft error, move data elsewhere and reuse the block, but
increment the error counter. If the counter increases beyond 17 (or any
other random number), mark the block as bad. Limit can be an mkfs
option.
> I'm also think that when (if) logfs decides a block is bad, it should mark
> it bad using mtd->block_markbad(). That way, if the flash is rewritten by
> something else than logfs (say during a firmware upgrade), bad blocks can
> be handled in a consistent and startad way.
Maybe I should revive the old patch then. I don't think it matters much
either way.
> We ran some tests here on a particular flash chip type to try and
> determine at least some of the failure modes that are related to block
> wear (due to write/erase) and bit decay (due to reading). The end result
> was basically what I tried to describe above, but I can go into more
> detail if you're interested.
I do remember your mail describing the test. One of the interesting
conclusions is that even awefully worn out block is still good enough to
store short-lived information. It appears to be a surprisingly robust
strategy to have a high wear-out, as long as you keep the wear
constantly high and replace block contents at a high rate.
Jörn
--
You can't tell where a program is going to spend its time. Bottlenecks
occur in surprising places, so don't try to second guess and put in a
speed hack until you've proven that's where the bottleneck is.
-- Rob Pike
next prev parent reply other threads:[~2008-01-23 10:25 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-17 16:12 Jffs2 and big file = very slow jffs2_garbage_collect_pass Matthieu CASTET
2008-01-17 16:26 ` Jörn Engel
2008-01-17 17:43 ` Josh Boyer
2008-01-18 9:39 ` Matthieu CASTET
2008-01-18 12:48 ` Josh Boyer
2008-01-18 16:17 ` Matthieu CASTET
2008-01-18 17:55 ` Josh Boyer
2008-01-18 18:17 ` Jörn Engel
2008-01-21 15:57 ` Matthieu CASTET
2008-01-21 21:25 ` Jörn Engel
2008-01-21 22:16 ` Josh Boyer
2008-01-21 22:29 ` Jörn Engel
2008-01-22 8:57 ` Matthieu CASTET
2008-01-22 12:03 ` Jörn Engel
2008-01-22 13:24 ` Ricard Wanderlof
2008-01-22 15:05 ` Jörn Engel
2008-01-23 9:23 ` Ricard Wanderlof
2008-01-23 10:19 ` Jörn Engel [this message]
2008-01-23 10:41 ` Ricard Wanderlof
2008-01-23 10:57 ` Jörn Engel
2008-01-23 11:57 ` Ricard Wanderlof
2008-01-23 13:01 ` Jörn Engel
2008-01-23 13:16 ` Ricard Wanderlof
2008-01-23 14:06 ` Jörn Engel
2008-01-23 14:25 ` Ricard Wanderlof
2008-01-21 22:36 ` Glenn Henshaw
2008-01-18 17:20 ` Glenn Henshaw
2008-01-18 18:39 ` Jamie Lokier
2008-01-18 21:00 ` Jörn Engel
2008-01-19 0:23 ` Jamie Lokier
2008-01-19 2:38 ` Jörn Engel
2008-01-17 23:22 ` David Woodhouse
2008-01-18 9:45 ` Matthieu CASTET
2008-01-18 18:20 ` Jamie Lokier
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=20080123101915.GA24953@lazybastard.org \
--to=joern@logfs.org \
--cc=dwmw2@infradead.org \
--cc=jwboyer@gmail.com \
--cc=linux-mtd@lists.infradead.org \
--cc=matthieu.castet@parrot.com \
--cc=ricard.wanderlof@axis.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