All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Richard Weinberger <richard@nod.at>
Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
	dedekind1@gmail.com
Subject: Re: [PATCH 4/4] UBI: Implement bitrot checking
Date: Sun, 12 Apr 2015 21:20:50 +0200	[thread overview]
Message-ID: <20150412212050.2949b6f5@bbrezillon> (raw)
In-Reply-To: <552AA6B7.3070806@nod.at>

On Sun, 12 Apr 2015 19:09:11 +0200
Richard Weinberger <richard@nod.at> wrote:

> Am 12.04.2015 um 19:01 schrieb Boris Brezillon:
> > Hi Richard,
> > 
> > After the 'coding style related'/'useless' comments, now comes a real
> > question related to the approach you've taken :-).
> > 
> > On Sun, 29 Mar 2015 14:13:17 +0200
> > Richard Weinberger <richard@nod.at> wrote:
> > 
> > [...]
> >> +
> >> +/**
> >> + * ubi_wl_trigger_bitrot_check - triggers a re-read of all physical erase
> >> + * blocks.
> >> + * @ubi: UBI device description object
> >> + */
> >> +void ubi_wl_trigger_bitrot_check(struct ubi_device *ubi)
> >> +{
> >> +	int i;
> >> +	struct ubi_wl_entry *e;
> >> +
> >> +	ubi_msg(ubi, "Running a full read check");
> >> +
> >> +	for (i = 0; i < ubi->peb_count; i++) {
> >> +		spin_lock(&ubi->wl_lock);
> >> +		e = ubi->lookuptbl[i];
> >> +		spin_unlock(&ubi->wl_lock);
> >> +		if (e) {
> >> +			atomic_inc(&ubi->bit_rot_work);
> >> +			schedule_bitrot_check(ubi, e);
> >> +		}
> >> +	}
> > 
> > Do we really need to create a ubi_work per PEB ?
> > Couldn't we create a single work being rescheduled inside the worker
> > function (after updating the ubi_wl_entry of course).
> 
> Currently the UBI worker thread handles one PEB per ubi_work. I didn't wanted
> to break that pattern. The downside of that approach is that we need more memory.
> A few KiB per run.
> 
> I'm not sure if I understood your idea. You mean that we schedule one check for
> PEB N and this work will re-schedule again a work for PEB N+1?

That's exactly what I meant.

> Using that approach we can safe memory, yes. But is it worth the hassle?

Unless I'm missing something, it should be pretty easy to implement:
adding the following lines at the end of bitrot_check_worker() should do
the trick

	if (e->pnum + 1 < ubi->peb_count) {
		wl_wrk->e = ubi->lookuptbl[e->pnum + 1];
		__schedule_ubi_work(ubi, wl_wrk);
	} else {
		atomic_dec(&ubi->bit_rot_work);
	}
	

> I'd like to avoid works which schedule again other works.
> In the current way it is clear where the work is scheduled and how much.

Yes, but the memory consumption induced by this approach can be pretty
big on modern NAND chips (on 32 bit platforms, ubi_work is 32 octets
large, and on modern NANDs you often have 4096 blocks, so a UBI device
of 4000 block is pretty common => 4000 * 32 = 125 KiB).

For standard wear leveling requests, using a ubi_work per request is
sensible since you can't know in advance which block will be queued for
wear-leveling operation next time.
In your case, you're scanning all blocks in ascending order, which
makes it a good candidate for this 'one work for all bitrot checks'
approach.



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

  reply	other threads:[~2015-04-12 19:20 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-29 12:13 UBI: Bitrot checking Richard Weinberger
2015-03-29 12:13 ` Richard Weinberger
2015-03-29 12:13 ` [PATCH 1/4] UBI: Introduce ubi_schedule_fm_work() Richard Weinberger
2015-03-29 12:13   ` Richard Weinberger
2015-03-29 12:13 ` [PATCH 2/4] UBI: Introduce prepare_erase_work() Richard Weinberger
2015-03-29 12:13   ` Richard Weinberger
2015-03-29 12:13 ` [PATCH 3/4] UBI: Introduce in_pq() Richard Weinberger
2015-03-29 12:13   ` Richard Weinberger
2015-03-29 12:13 ` [PATCH 4/4] UBI: Implement bitrot checking Richard Weinberger
2015-03-29 12:13   ` Richard Weinberger
2015-04-02 17:34   ` Andrea Scian
2015-04-02 17:34     ` Andrea Scian
2015-04-02 17:54     ` Richard Weinberger
2015-04-02 17:54       ` Richard Weinberger
2015-04-02 19:19       ` Andrea Scian
2015-04-02 19:19         ` Andrea Scian
2015-04-08 10:34         ` Richard Weinberger
2015-04-08 10:34           ` Richard Weinberger
2015-04-08 21:02           ` Andrea Scian
2015-04-08 21:02             ` Andrea Scian
2015-04-08 11:48   ` David Oberhollenzer
2015-04-12 14:12   ` Boris Brezillon
2015-04-12 16:09     ` Richard Weinberger
2015-04-12 16:43       ` Boris Brezillon
2015-04-12 16:55         ` Richard Weinberger
2015-04-12 20:42           ` [PATCH 4/4] UBI: Implement bitrot checking (linux-mtd Digest, Vol 145, Issue 24) Andrea Scian
2015-04-12 20:42             ` Andrea Scian
2015-04-12 21:01             ` Richard Weinberger
2015-04-12 21:01               ` Richard Weinberger
2015-04-12 21:30               ` Boris Brezillon
2015-04-12 21:37                 ` Richard Weinberger
2015-04-12 21:33               ` Andrea Scian
2015-04-12 21:33                 ` Andrea Scian
2015-04-12 21:42                 ` Richard Weinberger
2015-04-12 21:42                   ` Richard Weinberger
2015-04-13 17:17                   ` linux-mtd digest emails (was Re: [PATCH 4/4] UBI: Implement bitrot checking) Brian Norris
2015-04-13 17:17                     ` Brian Norris
2015-04-12 15:14   ` [PATCH 4/4] UBI: Implement bitrot checking Boris Brezillon
2015-04-12 16:14     ` Richard Weinberger
2015-04-12 16:31       ` Boris Brezillon
2015-04-12 16:32         ` Richard Weinberger
2015-04-12 17:01   ` Boris Brezillon
2015-04-12 17:09     ` Richard Weinberger
2015-04-12 19:20       ` Boris Brezillon [this message]
2015-04-12 19:53         ` Richard Weinberger
2015-04-12 21:24           ` Boris Brezillon
2015-04-12 21:34             ` Richard Weinberger
2015-04-13  3:36               ` nick
2015-04-12 17:36     ` Richard Weinberger
     [not found] <mailman.40253.1428858576.22890.linux-mtd@lists.infradead.org>
     [not found] <mailman.38750.1427638218.22890.linux-mtd@lists.infradead.org>

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=20150412212050.2949b6f5@bbrezillon \
    --to=boris.brezillon@free-electrons.com \
    --cc=dedekind1@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=richard@nod.at \
    /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.