mount time (was Re: Fwd: Hello -- NAND/NOR Flash design for GTA02)

Werner Almesberger werner at openmoko.org
Thu Jan 17 02:26:10 CET 2008


Okay, so I got some jffs2 results. First the baseline: default kernel
setup, printks enabled, serial console. What I tested was to mount a
freshly created rootfs. I used the 20080116 snapshot, with a size of
47038464 bytes. So all times below are for the "mount" operation.

As expected, this takes a looong time, with the kernel complaining
bitterly about "Empty flash at ... ends at ...": about 49.5s.

Now, we can cheat and turn kernel messages off. This brings the mount
time down to about 39.2s, or 80% of the initial value.

Then I enabled hardware ECC. Note that the code for this is quite
broken, but as long as there are no real errors, this doesn't matter :-)
This brought it down to about 29.9s, or 60% of the first result.

Then I was getting a bit worried about those error messages. Turns
out the the file system is generated with completely wrong parameters,
i.e., the Flash parameters of the GTA01, not the GTA02. Fixing this
yielded an image of 50069504 (+6.4%), and a mount time of about 8.4s,
or roughly 17% of the initial mess.

Tony, your estimate of -80% was pretty accurate :-)

Finally, I gave summaries a try. They increased the image by 3.4%
and reduced mount time to about 1.2s, or 2.4% of the original time.


The correct mkfs command would be something like this:

mkfs.jffs2 --eraseblock=0x20000 --pagesize=0x800 --no-cleanmarkers \
  --little-endian --pad -o rootfs.jffs2 -d ./rootfs

To add the summaries, something like this:

sumtool --eraseblock=0x20000 --no-cleanmarkers \
  --littleendian --pad -i rootfs.jffs2 -o srootfs.jffs2


Below is my detailed log. Note that also unmounting takes some time,
something in the order of 8 seconds after the first mount. But that
just seem to be some dirty buffers (probably summary updates) that
eventually get flushed in the background.

So, my conclusion this far is that jffs2 can do quite well if we just
let it. I think summaries are enough of a win that we want to us them,
particularly since they're cheap to use and don't break any assumptions
we make.

- Werner

---------------------------------- cut here -----------------------------------

# ls -l openmoko-devel-image-fic-gta02.jffs2
-rw-r--r--  1 root root 47038464 Jan 16 08:53 openmoko-devel-image-fic-gta02.jffs2

time scp openmoko-devel-image-fic-gta02.jffs2 192.168.0.1:
	real    0m52.649s	user    0m1.464s	sys     0m1.268s
time flash_eraseall -q /dev/mtd5
	real    0m 1.26s	user    0m 0.00s	sys     0m 1.27s
time nandwrite -p -q /dev/mtd5 openmoko-devel-image-fic-gta02.jffs2
	real    0m 24.27s	user    0m 0.05s	sys     0m 24.22s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 49.49s	user    0m 0.00s	sys     0m 47.01s
time umount /mnt
	real    0m 8.59s	user    0m 0.00s	sys     0m 0.02s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 49.35s	user    0m 0.00s	sys     0m 46.90s
time umount /mnt
	real    0m 0.03s	user    0m 0.00s	sys     0m 0.02s

BASELINE:	mount 49.5s, umount 0-9s

echo 0 >/proc/sys/kernel/printk
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 39.19s	user    0m 0.00s	sys     0m 36.67s
time umount /mnt
	real    0m 0.02s	user    0m 0.00s	sys     0m 0.01s

SILENT:		mount 39.2s

time scp openmoko-devel-image-fic-gta02.jffs2 192.168.0.1:
	real    0m52.644s	user    0m1.504s	sys     0m1.008s
time flash_eraseall -q /dev/mtd5
time nandwrite -p -q /dev/mtd5 openmoko-devel-image-fic-gta02.jffs2
	real    0m 22.22s	user    0m 0.05s	sys     0m 22.18s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 40.10s	user    0m 0.00s	sys     0m 37.70s
time umount /mnt
	real    0m 2.19s	user    0m 0.01s	sys     0m 0.01s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 40.28s	user    0m 0.00s	sys     0m 37.67s
time umount /mnt
	real    0m 0.02s	user    0m 0.01s	sys     0m 0.01s
echo 0 >/proc/sys/kernel/printk
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 29.92s	user    0m 0.01s	sys     0m 27.56s
time umount /mnt
	real    0m 0.05s	user    0m 0.00s	sys     0m 0.02s

HWECC+SILENT:	mount 29.9s

# rm openmoko-devel-image-fic-gta02.jffs2
# mkfs.jffs2 --eraseblock=0x20000 --pagesize=0x800 ...
# echo 7 >/proc/sys/kernel/printk
# ls -l rootfs.jffs2
-rw-r--r--  1 root root 50069504 Jan 16 21:37 rootfs.jffs2

time scp rootfs.jffs2 192.168.0.1:
	real    0m55.898s	user    0m1.532s	sys     0m1.336s
time flash_eraseall -q /dev/mtd5
time nandwrite -p -q /dev/mtd5 rootfs.jffs2
	real    0m 23.64s	user    0m 0.09s	sys     0m 23.55s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 8.34s	user    0m 0.00s	sys     0m 8.33s
time umount /mnt
	real    0m 8.46s	user    0m 0.01s	sys     0m 0.01s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 8.34s	user    0m 0.00s	sys     0m 8.33s
time umount /mnt
	real    0m 0.13s	user    0m 0.00s	sys     0m 0.01s

HWECC+MKFS:	mount 8.4s

# rm rootfs.jffs2
# sumtool ...
# ls -l srootfs.jffs2
-rw-r--r--  1 root root 51773440 Jan 16 21:39 srootfs.jffs2

time scp srootfs.jffs2 192.168.0.1:
	real    0m57.818s	user    0m1.576s	sys     0m1.404s
time flash_eraseall -q /dev/mtd5
time nandwrite -p -q /dev/mtd5 srootfs.jffs2
	real    0m 24.45s	user    0m 0.04s	sys     0m 24.41s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 1.13s	user    0m 0.00s	sys     0m 1.12s
time umount /mnt
	real    0m 6.68s	user    0m 0.01		sys     0m 0.01s
time mount -t jffs2 /dev/mtdblock5 /mnt
	real    0m 1.14s	user    0m 0.00s	sys     0m 1.13s
time umount /mnt
	real    0m 0.03s	user    0m 0.00s	sys     0m 0.02s

HWECC+MKFS+SUM:	mount 1.2s




More information about the openmoko-kernel mailing list