On Monday 04 April 2011, Sascha Silbe wrote:
Excerpts from Arnd Bergmann's message of Mon Apr 04 04:27:52 +0200 2011:
This is not well supported in flashbench, but what you can try is pass a blocksize and erasesize that are a multiple of three:
flashbench -a /dev/mmcblk0 --blocksize=1536 --count=100
I'm afraid that doesn't work:
flashtest@flatty:~/flashbench$ time ./flashbench -a /dev/mmcblk0 --blocksize=1536 --count=100 time_read: Invalid argument time_read: Invalid argument time_read: Invalid argument [...]
physical_block_size, hw_sector_size, logical_block_size and minimum_io_size all read 512, so I don't understand why the pread() fails with odd multiples of 512 (512, 1536, 2560). Multiples of 1024 (1024, 2048, 3072) work fine.
Ah, right, sorry about that. It needs to be 3072.
Also, better apply this patch to make sure that everything starts at multiples of three.
Arnd
diff --git a/flashbench.c b/flashbench.c index 0a1016f..c95e916 100644 --- a/flashbench.c +++ b/flashbench.c @@ -322,17 +322,19 @@ static int try_read_alignment(struct device *dev, int tries, int count,
static int try_read_alignments(struct device *dev, int tries, int blocksize) { - const int count = 7; + const int count = 10; int ret; off_t align, maxalign;
- /* make sure we can fit eight power-of-two blocks in the device */ - for (maxalign = blocksize * 2; maxalign < dev->size / count; maxalign *= 2) + /* make sure we can fit ten 3*power-of-two blocks in the device */ + for (maxalign = blocksize * 2 * 3; maxalign < dev->size / count; maxalign *= 2) ;
for (align = maxalign; align >= blocksize * 2; align /= 2) { ret = try_read_alignment(dev, tries, count, maxalign, align, blocksize); returnif (ret); + ret = try_read_alignment(dev, tries, count, maxalign, align / 3 * 2, blocksize); + returnif (ret); }
return 0; @@ -538,7 +540,7 @@ static int try_open_au(struct device *dev, unsigned int erasesize, { (random ? O_OFF_RAND : O_OFF_LIN), erasesize / blocksize, -1}, {O_REDUCE, .aggregate = A_AVERAGE}, - {O_OFF_RAND, count, 4 * erasesize}, {O_WRITE_RAND}, + {O_OFF_RAND, count, 6 * erasesize}, {O_WRITE_RAND}, {O_NEWLINE}, {O_END}, {O_END},