On Sunday 24 April 2011 19:55:32 Sitsofe Wheeler wrote:
On Sun, Apr 24, 2011 at 04:59:27PM +0200, Arnd Bergmann wrote:
# ./flashbench --open-au /dev/sdb --erasesize=1048576 --blocksize=2048 --random --open-au-nr=10 1MiB 7.57M/s 512KiB 3.31M/s 256KiB 2.67M/s 128KiB 2.64M/s 64KiB 2.15M/s 32KiB 2.2M/s 16KiB 1.74M/s 8KiB 679K/s 4KiB 575K/s 2KiB 317K/s
# ./flashbench --open-au /dev/sdb --erasesize=1048576 --blocksize=2048 --random --open-au-nr=11 1MiB 4.66M/s 512KiB 2.69M/s 256KiB 1.94M/s 128KiB 1.23M/s 64KiB 687K/s 32KiB 356K/s 16KiB 189K/s 8KiB 104K/s 4KiB 51.2K/s 2KiB 25.9K/s
So the best --open-au-nr is 10.
Ok, excellent!
For completeness, please rerun the -f test with these parameters:
flashbench -f /dev/sdb --erasesize=1048576 --blocksize=512 --random
# ./flashbench -f /dev/sdb --erasesize=1048576 --blocksize=512 --random 1MiB 2.08M/s 7.73M/s 2.03M/s 7.74M/s 2.06M/s 7.73M/s 512KiB 7.94M/s 2.04M/s 7.44M/s 7.58M/s 7.11M/s 7.26M/s 256KiB 7.29M/s 2.1M/s 1.73M/s 7.49M/s 7.33M/s 2.04M/s 128KiB 7.28M/s 7.79M/s 2.07M/s 7.41M/s 6.57M/s 2.03M/s 64KiB 2.09M/s 10.8M/s 2.23M/s 11.1M/s 5.24M/s 2.23M/s 32KiB 1.74M/s 4.64M/s 4.88M/s 1.75M/s 4.4M/s 4.75M/s 16KiB 1.05M/s 1.03M/s 1.03M/s 1.03M/s 1.01M/s 1.59M/s 8KiB 436K/s 427K/s 427K/s 330K/s 430K/s 327K/s 4KiB 400K/s 394K/s 395K/s 309K/s 396K/s 311K/s 2KiB 176K/s 198K/s 187K/s 339K/s 306K/s 303K/s 1KiB 87.8K/s 87.7K/s 88.4K/s 88.4K/s 88.2K/s 88.2K/s 512B 43.2K/s 43.9K/s 44K/s 42.7K/s 44K/s 58.4K/s
What does this last result show?
It's a bit unexpected: The numbers for the large block sizes are much more random than I'd expect them, which hints that the erase size was actually incorrect. Compare these to your original numbers for 4 MB erasesize, which are almost identical for each column except the first one. In particular, the 64KiB row should give results of around 10 MB/s consistently, which it does not.
The thing that should be seen in this case is one column that is consistently either worse or better than the others, but that is not the case.
The most likely interpretation to me is that this is an MLC flash that has 2 MB erase blocks but in fact writes the faster part of each erase block before it writes the slower part.
Unfortunately, these variations have so far prevented me from automating flashbench to the point where you can run it without manual interaction and a bit experience. Could you run flashbench -f again with a 2 MB erasesize to see if it makes a difference? You can also run the --open-au --random test again with 10 and 11 erase blocks with that size, but I don't expect many changes there other than hopefully a better performance in the 10 * 2 MB erase block case compared to 10 * 1 MB.
An important result of this is that the page size of this USB stick is 4 KB, not how every smaller column is only half the speed of the one above it -- it takes the same time to write 4 KB that it takes to write 512 byte. The good news for you is that this stick has almost perfect characteristics for use in Linux, even with ext3, as long as the partitions are correctly aligned and you use 4 KB block size (or 64 KB clusters in fat32).
Arnd