[PATCH] UBI: Decrease I/O count in ubi_scan

Corentin Chary corentin.chary at gmail.com
Tue Jul 21 09:42:35 EDT 2009


On Tue, Jul 21, 2009 at 2:14 PM, Artem Bityutskiy<dedekind1 at gmail.com> wrote:
> On Tue, 2009-07-21 at 13:26 +0200, Corentin Chary wrote:
>> Merge ec_hdr and vid_hdr read in one ubi_io_read()
>> This result in a 25% speedup with nandsim, and 6%
>> speedup on an AT91SAM9263 board with a 200Mo UBI volume.
>>
>> Signed-off-by: Corentin Chary <corentincj at iksaif.net>
>> ---
>>  drivers/mtd/ubi/io.c   |   67 ++++++++++++++++++++++++++++++++++++++++++++++-
>>  drivers/mtd/ubi/scan.c |   35 +++++++++++++------------
>>  drivers/mtd/ubi/ubi.h  |    4 +++
>>  3 files changed, 87 insertions(+), 19 deletions(-)
>
> Yeah, I did the same optimization some time ago:
>
> http://lists.infradead.org/pipermail/linux-mtd/2008-April/021311.html
>
> Could you please take a look at those patches as well, and if they
> are any better, use them or improve yours. I do not remember the
> details, to be frank.

Didn't see them, they are essentially the same. But I suspect yours are better.

> No one reported a significant improvement, so I dropped it.
> nandsim improvement is not very interesting, but the AT91SAM9263 is.
> Which flash is there?

[   12.544598] NAND device: Manufacturer ID: 0xec, Chip ID: 0x36
(Samsung NAND 64MiB 1,8V 8-bit)
[   12.683697] Scanni
[   12.691395] 0x000000000000-0x000000800000 : "Linux Kernel"
[   12.699687] 0x000000800000-0x000002800000 : "Filesystem"
[   12.707648] 0x000002800000-0x000004000000 : "Free"
[   12.719948] UBI: attaching mtd2 to ubi0
[   12.728005] UBI: physical eraseblock size:   16384 bytes (16 KiB)
[   12.741397] UBI: logical eraseblock size:    15360 bytes
[   12.751721] UBI: smallest flash I/O unit:    512
[   12.760202] UBI: VID header offset:          512 (aligned 512)
[   12.767589] UBI: data offset:                1024
[   13.047943] UBI: attached mtd2 to ubi0
[   13.055450] UBI: MTD device name:            "Free"
[   13.063343] UBI: MTD device size:            24 MiB
[   13.071539] UBI: number of good PEBs:        1536
[   13.084148] UBI: number of bad PEBs:         0
[   13.095572] UBI: max. allowed volumes:       89
[   13.105468] UBI: wear-leveling threshold:    4096
[   13.113178] UBI: number of internal volumes: 1
[   13.129826] UBI: number of user volumes:     1
[   13.140834] UBI: available PEBs:             0
[   13.153634] UBI: total number of reserved PEBs: 1536
[   13.160852] UBI: number of PEBs reserved for bad PEB handling: 15
[   13.167731] UBI: max/mean erase counter: 2/1
[   13.177809] UBI: image sequence number: 0

> And why do you presume is the improvement -
> just less calls to MTD or really less I/O? Note MTD usually caches
> the last read NAND page, so usually this is not about less I/O.

In this case it seems vid and ec headers are not on the same page.
So, if I understand things correctly, there *is* more I/O, and the same thing

The same thing occurs with nandsim, because VID header offset is 2048,
I don't know
if it can happen on real flash.

-- 
Corentin Chary
http://xf.iksaif.net - http://uffs.org



More information about the linux-mtd mailing list