ubi/ubifs performance comparison on two NAND devices

Tim Harvey
2019-02-27T20:39:53Z

Greetings,

I've got two embedded boards (IMX6 using gpmi-nand driver) that are
identical except for the NAND FLASH and am trying to understand why
I'm seeing a massive performance difference when it comes to ubi and
ubifs (in particular ubi scanning and UBIFS resizing).

Micron MT29F16G08ADACAH4:
- page size: 4320 bytes (4096 + 224 bytes)
- block size: 64 pages (256K + 14K bytes)
- device size: 16Gb
- 30ns per-block read
- 300us per-block program
- 2.0ms per-block erase

Cypress S34ML16G202BHI000
- page size: 2176 bytes (2048+128)
- block size: 64 pages (128K + 8K)
- device size: 16Gb
- 25ns per-block read
- 300us per-block program
- 3.5ms per-block erase

The parts are relatively close in per-block performance but because
the Micron has twice the block size I think of it being twice as fast
on a per-byte basis compared to the Cypress and I do see this relative
performance when testing read/write/erase both in modern U-Boot and
latest Linux. What doesn't add up is that the Cypress part takes about
7x longer to complete the ubi attach (between 'attaching mtd' and
'scanning is finished' and about 100x longer to complete the UBIFS
free space fixup (between 'start fixing up free space' and 'free space
fixup complete') performed on the first mount of a ubifs filesystem
that was created with auto-resize enabled.

Both parts are 2GiB and the ubi scanning on attach in the kernel goes
from ~4s on Micron to ~28s on Cypress and the UBIFS free space fixup
goes from 0.5s on Micron to a whopping 56s on Cypress.

Any ideas why would I be seeing this kind of performance difference
when the raw erase/read/write performance is (both datasheet and Linux
tests) only 2x slower? Anywhere I can look to improve performance of
the Cypress part?

Best Regards,