From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Steigerwald Subject: Re: [PATCH 00/16 v3] f2fs: introduce flash-friendly file system Date: Wed, 14 Nov 2012 16:57:39 +0100 Message-ID: <201211141657.39475.Martin@lichtvoll.de> References: <003d01cdb74b$0c3fa420$24beec60$%kim@samsung.com> <201211121616.23616.Martin@lichtvoll.de> <201211121657.03054.arnd@arndb.de> (sfid-20121112_212249_443265_9B39A76A) Mime-Version: 1.0 Content-Type: Text/Plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: linux-kernel@vger.kernel.org, Kim Jaegeuk , Jaegeuk Kim , linux-fsdevel@vger.kernel.org, gregkh@linuxfoundation.org, viro@zeniv.linux.org.uk, tytso@mit.edu, chur.lee@samsung.com, cm224.lee@samsung.com, jooyoung.hwang@samsung.com To: Arnd Bergmann Return-path: In-Reply-To: <201211121657.03054.arnd@arndb.de> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Am Montag, 12. November 2012 schrieb Arnd Bergmann: > On Monday 12 November 2012, Martin Steigerwald wrote: > > Am Samstag, 10. November 2012 schrieb Arnd Bergmann: >=20 > > > I would also recommend using flashbench to find out the optimum p= arameters > > > for your device. You can download it from > > > git://git.linaro.org/people/arnd/flashbench.git > > > In the long run, we should automate those tests and make them par= t of > > > mkfs.f2fs, but for now, try to find out the erase block size and = the number > > > of concurrently used erase blocks on your device using a timing a= ttack > > > in flashbench. The README file in there explains how to interpret= the > > > results from "./flashbench -a /dev/sdb --blocksize=3D1024" to gu= ess > > > the erase block size, although that sometimes doesn't work. > >=20 > > Why do I use a blocksize of 1024 if the kernel reports me 512 byte = blocks? >=20 > The blocksize you pass here is the size of writes that flashbench sen= ds to the > kernel. Because of the algorithm used by flashbench, two hardware blo= cks > is the smallest size you can use here, and larger block tend to be le= ss reliable > for this test case. I should probably change the default. >=20 > > [ 3112.144086] scsi9 : usb-storage 1-1.1:1.0 > > [ 3113.145968] scsi 9:0:0:0: Direct-Access TinyDisk 2007-05-12 = 0.00 PQ: 0 ANSI: 2 > > [ 3113.146476] sd 9:0:0:0: Attached scsi generic sg2 type 0 > > [ 3113.147935] sd 9:0:0:0: [sdb] 4095999 512-byte logical blocks: (= 2.09 GB/1.95 GiB) > > [ 3113.148935] sd 9:0:0:0: [sdb] Write Protect is off > >=20 > >=20 > > And how do reads give information about erase block size? Wouldn=C2= =B4t writes me > > more conclusive for that? (Having to erase one versus two erase blo= cks?) >=20 > The --open-au tests can be more reliable, but also take more time and= are > harder to understand. Using this test is faster and often gives an ea= sy > answer even without destroying data on the device. >=20 >=20 > > Hmmm, I get very varying results here with said USB stick: > >=20 > > merkaba:~> /tmp/flashbench -a /dev/sdb > > align 536870912 pre 1.1ms on 1.1ms post 1.08ms dif= f 13=C2=B5s > > align 268435456 pre 1.2ms on 1.19ms post 1.16ms dif= f 11.6=C2=B5s > > align 134217728 pre 1.12ms on 1.14ms post 1.15ms dif= f 9.51=C2=B5s > > align 67108864 pre 1.12ms on 1.15ms post 1.12ms dif= f 29.9=C2=B5s > > align 33554432 pre 1.11ms on 1.17ms post 1.13ms dif= f 49=C2=B5s > > align 16777216 pre 1.14ms on 1.16ms post 1.15ms dif= f 22.4=C2=B5s > > align 8388608 pre 1.12ms on 1.09ms post 1.06ms dif= f -2053ns > > align 4194304 pre 1.13ms on 1.16ms post 1.14ms dif= f 21.7=C2=B5s > > align 2097152 pre 1.11ms on 1.08ms post 1.1ms dif= f -18488n > > align 1048576 pre 1.11ms on 1.11ms post 1.11ms dif= f -2461ns > > align 524288 pre 1.15ms on 1.17ms post 1.1ms dif= f 45.4=C2=B5s > > align 262144 pre 1.11ms on 1.13ms post 1.13ms dif= f 12=C2=B5s > > align 131072 pre 1.1ms on 1.09ms post 1.16ms dif= f -38025n > > align 65536 pre 1.09ms on 1.08ms post 1.11ms dif= f -21353n > > align 32768 pre 1.1ms on 1.08ms post 1.11ms dif= f -23854n > > merkaba:~> /tmp/flashbench -a /dev/sdb > > align 536870912 pre 1.11ms on 1.13ms post 1.13ms dif= f 10.6=C2=B5s > > align 268435456 pre 1.12ms on 1.2ms post 1.17ms dif= f 61.4=C2=B5s > > align 134217728 pre 1.14ms on 1.19ms post 1.15ms dif= f 46.8=C2=B5s > > align 67108864 pre 1.08ms on 1.15ms post 1.08ms dif= f 63.8=C2=B5s > > align 33554432 pre 1.09ms on 1.08ms post 1.09ms dif= f -4761ns > > align 16777216 pre 1.12ms on 1.14ms post 1.07ms dif= f 41.4=C2=B5s > > align 8388608 pre 1.1ms on 1.1ms post 1.09ms dif= f 7.48=C2=B5s > > align 4194304 pre 1.08ms on 1.1ms post 1.1ms dif= f 10.1=C2=B5s > > align 2097152 pre 1.1ms on 1.11ms post 1.1ms dif= f 16=C2=B5s > > align 1048576 pre 1.09ms on 1.1ms post 1.07ms dif= f 15.5=C2=B5s > > align 524288 pre 1.12ms on 1.12ms post 1.1ms dif= f 11=C2=B5s > > align 262144 pre 1.13ms on 1.13ms post 1.1ms dif= f 21.6=C2=B5s > > align 131072 pre 1.11ms on 1.13ms post 1.12ms dif= f 17.9=C2=B5s > > align 65536 pre 1.07ms on 1.1ms post 1.1ms dif= f 11.6=C2=B5s > > align 32768 pre 1.09ms on 1.11ms post 1.13ms dif= f -5131ns > > merkaba:~> /tmp/flashbench -a /dev/sdb > > align 536870912 pre 1.2ms on 1.18ms post 1.21ms dif= f -27496n > > align 268435456 pre 1.22ms on 1.21ms post 1.24ms dif= f -18972n > > align 134217728 pre 1.15ms on 1.19ms post 1.14ms dif= f 42.5=C2=B5s > > align 67108864 pre 1.08ms on 1.09ms post 1.08ms dif= f 5.29=C2=B5s > > align 33554432 pre 1.18ms on 1.19ms post 1.18ms dif= f 9.25=C2=B5s > > align 16777216 pre 1.18ms on 1.22ms post 1.17ms dif= f 48.6=C2=B5s > > align 8388608 pre 1.14ms on 1.17ms post 1.19ms dif= f 4.36=C2=B5s > > align 4194304 pre 1.16ms on 1.2ms post 1.11ms dif= f 65.8=C2=B5s > > align 2097152 pre 1.13ms on 1.09ms post 1.12ms dif= f -37718n > > align 1048576 pre 1.15ms on 1.2ms post 1.18ms dif= f 34.9=C2=B5s > > align 524288 pre 1.14ms on 1.19ms post 1.16ms dif= f 41.5=C2=B5s > > align 262144 pre 1.19ms on 1.12ms post 1.15ms dif= f -52725n > > align 131072 pre 1.21ms on 1.11ms post 1.14ms dif= f -68522n > > align 65536 pre 1.21ms on 1.13ms post 1.18ms dif= f -64248n > > align 32768 pre 1.14ms on 1.25ms post 1.12ms dif= f 116=C2=B5s > > > > Even when I apply the explaination of the README I do not seem to g= et a > > clear picture of the stick erase block size. > >=20 > > The values above seem to indicate to me: I don=C2=B4t care about al= ignment at all. >=20 > I think it's more a case of a device where reading does not easily re= veal > the erase block boundaries, because the variance between multiple rea= ds > is much higher than between different positions. You can try again us= ing > "--blocksize=3D1024 --count=3D100", which will increase the accuracy = of the > test. >=20 > On the other hand, the device size of "4095999 512-byte logical block= s" > is quite suspicious, because it's not an even number, where it should > be a multiple of erase blocks. It is one less sector than 1000 2MB bl= ocks > (or 500 4MB blocks, for that matter), but it's not clear if that one > block is missing at the start or at the end of the drive. Just for this first flash drive, I think the erase block size if 4 MiB.= The -a count=3D100/100 tests did not show any obvious results, but the=20 --open-au ones did, I think. I would use two open allocation units (AUs= ). Maybe also 1 AU, cause 64 KiB sized accesses are faster that way? Well I tend to use one AU. So that device would be more suitable for FA= T than for BTRFS. Or more suitable for F2FS that is. What do you think? Only thing that seems to contradict this is the test with different alignments below. merkaba:~#254> /tmp/flashbench -a /dev/sdb --count=3D100 align 536870912 pre 1.06ms on 1.07ms post 1.04ms diff 14= =2E6=C2=B5s align 268435456 pre 1.09ms on 1.1ms post 1.09ms diff 11= =2E3=C2=B5s align 134217728 pre 1.09ms on 1.09ms post 1.1ms diff -8= 7ns align 67108864 pre 1.05ms on 1.06ms post 1.03ms diff 15= =2E9=C2=B5s align 33554432 pre 1.06ms on 1.06ms post 1.03ms diff 18= =2E7=C2=B5s align 16777216 pre 1.05ms on 1.05ms post 1.03ms diff 13= =2E3=C2=B5s align 8388608 pre 1.05ms on 1.06ms post 1.04ms diff 9.= 03=C2=B5s align 4194304 pre 1.06ms on 1.06ms post 1.04ms diff 8.= 56=C2=B5s align 2097152 pre 1.06ms on 1.05ms post 1.05ms diff 2.= 02=C2=B5s align 1048576 pre 1.05ms on 1.04ms post 1.06ms diff -1= 1524n align 524288 pre 1.05ms on 1.05ms post 1.04ms diff 64= 2ns align 262144 pre 1.04ms on 1.04ms post 1.04ms diff -6= 04ns align 131072 pre 1.03ms on 1.04ms post 1.04ms diff 2.= 79=C2=B5s align 65536 pre 1.04ms on 1.05ms post 1.05ms diff 7.= 2=C2=B5s align 32768 pre 1.05ms on 1.05ms post 1.05ms diff -4= 475ns merkaba:~> /tmp/flashbench -a /dev/sdb --count=3D1000 align 536870912 pre 1.03ms on 1.05ms post 1.02ms diff 20= =2E3=C2=B5s align 268435456 pre 1.06ms on 1.05ms post 1.04ms diff 3.= 14=C2=B5s align 134217728 pre 1.07ms on 1.08ms post 1.05ms diff 16= =2E1=C2=B5s align 67108864 pre 1.03ms on 1.03ms post 1.02ms diff 11= =C2=B5s align 33554432 pre 1.02ms on 1.03ms post 1.01ms diff 10= =2E3=C2=B5s align 16777216 pre 1.03ms on 1.04ms post 1.02ms diff 9.= 68=C2=B5s align 8388608 pre 1.04ms on 1.03ms post 1.02ms diff 6.= 45=C2=B5s align 4194304 pre 1.03ms on 1.04ms post 1.02ms diff 9.= 12=C2=B5s align 2097152 pre 1.04ms on 1.04ms post 1.02ms diff 15= =2E4=C2=B5s align 1048576 pre 1.03ms on 1.03ms post 1.03ms diff -1= 590ns align 524288 pre 1.03ms on 1.03ms post 1.03ms diff -8= 35ns align 262144 pre 1.04ms on 1.04ms post 1.03ms diff 1.= 25=C2=B5s align 131072 pre 1.03ms on 1.03ms post 1.03ms diff -3= 477ns align 65536 pre 1.03ms on 1.03ms post 1.03ms diff 19= 1ns align 32768 pre 1.03ms on 1.04ms post 1.03ms diff 4.= 06=C2=B5s merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[16*1024*1024] 16MiB 15M/s =20 8MiB 3.44M/s=20 4MiB 13.9M/s=20 2MiB 13M/s =20 1MiB 15M/s =20 512KiB 3.3M/s =20 256KiB 6.55M/s=20 128KiB 4.17M/s=20 64KiB 13.5M/s=20 32KiB 2.15M/s=20 16KiB 1.83M/s=20 8KiB 1.25M/s=20 4KiB 731K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[8*1024*1024] 8MiB 14.6M/s=20 4MiB 8.11M/s=20 2MiB 12.5M/s=20 1MiB 15.1M/s=20 512KiB 3.29M/s=20 256KiB 6.54M/s=20 128KiB 4.16M/s=20 64KiB 13.4M/s=20 32KiB 2.14M/s=20 16KiB 1.81M/s=20 8KiB 1.23M/s=20 4KiB 722K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[4*1024*1024] 4MiB 14M/s =20 2MiB 13M/s =20 1MiB 15M/s =20 512KiB 3.26M/s=20 256KiB 6.57M/s=20 128KiB 4.2M/s =20 64KiB 13.3M/s=20 32KiB 2.13M/s=20 16KiB 1.82M/s=20 8KiB 1.24M/s=20 4KiB 724K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[2*1024*1024] 2MiB 13.1M/s=20 1MiB 15.2M/s=20 512KiB 3.22M/s=20 256KiB 6.57M/s=20 128KiB 4.2M/s =20 64KiB 13.3M/s=20 32KiB 2.11M/s=20 16KiB 1.82M/s=20 8KiB 1.24M/s=20 4KiB 725K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[2*1024*1024] 2MiB 13.1M/s=20 1MiB 14.9M/s=20 512KiB 3.21M/s=20 256KiB 6.61M/s=20 128KiB 4.19M/s=20 64KiB 13.3M/s=20 32KiB 2.11M/s=20 16KiB 1.82M/s=20 8KiB 1.23M/s=20 4KiB 726K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[1*1024*1024] 1MiB 14.9M/s=20 512KiB 3.12M/s=20 256KiB 6.64M/s=20 128KiB 4.2M/s =20 64KiB 13.4M/s=20 32KiB 2.07M/s=20 16KiB 1.82M/s=20 8KiB 1.24M/s=20 4KiB 725K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D2 --blocks= ize=3D4096 --erasesize=3D$[4*1024*1024] 4MiB 14.2M/s=20 2MiB 13.1M/s=20 1MiB 5.58M/s=20 512KiB 3.43M/s=20 256KiB 6.58M/s=20 128KiB 4.18M/s=20 64KiB 5.06M/s=20 32KiB 2.14M/s=20 16KiB 1.82M/s=20 8KiB 1.24M/s=20 4KiB 724K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D2 --blocks= ize=3D4096 --erasesize=3D$[16*1024*1024] 16MiB 5.68M/s=20 8MiB 4.3M/s =20 4MiB 14.2M/s=20 2MiB 13.1M/s=20 1MiB 5.6M/s =20 512KiB 3.35M/s=20 256KiB 6.61M/s=20 128KiB 4.19M/s=20 64KiB 5.07M/s=20 32KiB 2.16M/s=20 16KiB 1.82M/s=20 8KiB 1.24M/s=20 4KiB 726K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D3 --blocks= ize=3D4096 --erasesize=3D$[16*1024*1024] 16MiB 7.18M/s=20 8MiB 14.6M/s=20 4MiB 14.1M/s=20 2MiB 13M/s =20 1MiB 6.39M/s=20 512KiB 8.77M/s=20 256KiB 6.13M/s=20 128KiB 3.81M/s=20 64KiB 2.37M/s=20 32KiB 1.15M/s=20 16KiB 648K/s =20 8KiB 344K/s =20 4KiB 180K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[16*1024*1024] 16MiB 15.3M/s=20 8MiB 3.48M/s=20 4MiB 14.3M/s=20 2MiB 13.2M/s=20 1MiB 15.2M/s=20 512KiB 3.33M/s=20 256KiB 6.64M/s=20 128KiB 4.2M/s =20 64KiB 13.6M/s=20 32KiB 2.15M/s=20 16KiB 1.83M/s=20 8KiB 1.24M/s=20 4KiB 727K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D2 --blocks= ize=3D4096 --erasesize=3D$[16*1024*1024] 16MiB 5.72M/s=20 8MiB 4.33M/s=20 4MiB 14.3M/s=20 2MiB 13.3M/s=20 1MiB 5.66M/s=20 512KiB 3.38M/s=20 256KiB 6.68M/s=20 128KiB 4.24M/s=20 64KiB 5.12M/s=20 32KiB 2.17M/s=20 16KiB 1.83M/s=20 8KiB 1.24M/s=20 4KiB 729K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocks= ize=3D4096 --erasesize=3D$[4*1024*1024] 4MiB 14M/s =20 2MiB 13.3M/s=20 1MiB 15.3M/s=20 512KiB 3.29M/s=20 256KiB 6.68M/s=20 128KiB 4.22M/s=20 64KiB 13.7M/s=20 32KiB 2.15M/s=20 16KiB 1.83M/s=20 8KiB 1.24M/s=20 4KiB 729K/s =20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D2 --blocks= ize=3D4096 --erasesize=3D$[4*1024*1024] 4MiB 14.1M/s=20 2MiB 13.1M/s=20 1MiB 5.62M/s=20 512KiB 3.43M/s=20 256KiB 6.63M/s=20 128KiB 4.2M/s =20 64KiB 5.11M/s=20 32KiB 2.15M/s=20 16KiB 1.82M/s=20 8KiB 1.24M/s=20 4KiB 727K/s=20 merkaba:~#130> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --bl= ocksize=3D65536 --erasesize=3D$[16*1024*1024] 16MiB 15.2M/s=20 8MiB 3.46M/s=20 4MiB 14.2M/s=20 2MiB 13.1M/s=20 1MiB 15.1M/s=20 512KiB 3.31M/s=20 256KiB 6.59M/s=20 128KiB 4.19M/s=20 64KiB 13.5M/s=20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D2 --blocks= ize=3D65536 --erasesize=3D$[16*1024*1024] 16MiB 5.68M/s=20 8MiB 4.31M/s=20 4MiB 14.2M/s=20 2MiB 13.2M/s=20 1MiB 5.62M/s=20 512KiB 3.36M/s=20 256KiB 6.63M/s=20 128KiB 4.21M/s=20 64KiB 5.09M/s=20 But then I tried with offset and get: > > > With the correct guess, compare the performance you get using > > >=20 > > > $ ERASESIZE=3D$[2*1024*1024] # replace with guess from flashbench= -a > > > $ ./flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocksize=3D= 4096 --erasesize=3D${ERASESIZE} > > > $ ./flashbench /dev/sdb --open-au --open-au-nr=3D3 --blocksize=3D= 4096 --erasesize=3D${ERASESIZE} > > > $ ./flashbench /dev/sdb --open-au --open-au-nr=3D5 --blocksize=3D= 4096 --erasesize=3D${ERASESIZE} > > > $ ./flashbench /dev/sdb --open-au --open-au-nr=3D7 --blocksize=3D= 4096 --erasesize=3D${ERASESIZE} > > > $ ./flashbench /dev/sdb --open-au --open-au-nr=3D13 --blocksize=3D= 4096 --erasesize=3D${ERASESIZE} > >=20 > > I omit this for now, cause I am not yet sure about the correct gues= s. >=20 > You can also try this test to find out the erase block size if the -a= test fails. > Start with the largest possible value you'd expect (16 MB for a moder= n and fast > USB stick, less if it's older or smaller), and use --open-au-nr=3D1 t= o get a baseline: >=20 > ./flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocksize=3D4096 -= -erasesize=3D$[16*1024*1024] >=20 > Every device should be able to handle this nicely with maximum throug= hput. The default is > to start the test at 16 MB into the device to get out of the way of a= potential FAT > optimized area. You can change that offset to find where an erase blo= ck boundary is. > Adding '--offset=3D[24*1024*1024]' will still be fast if the erase bl= ock size is 8 MB, > but get slower and have more jitter if the size is actually 16 MB, be= cause now we write > a 16 MB section of the drive with an 8 MB misalignment. The next ones= to try after that > would be 20, 18, 17, 16.5, etc MB, to which will be slow for an 8,4, = 2, an 1 MB erase > block size, respectively. You can also reduce the --erasesize argumen= t there and do >=20 > ./flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocksize=3D65536 = --erasesize=3D[16*1024*1024 --offset=3D[24*1024*1024] > ./flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocksize=3D65536 = --erasesize=3D[8*1024*1024 --offset=3D[20*1024*1024] > ./flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocksize=3D65536 = --erasesize=3D[4*1024*1024 --offset=3D[18*1024*1024] > ./flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocksize=3D65536 = --erasesize=3D[2*1024*1024 --offset=3D[17*1024*1024] > ./flashbench /dev/sdb --open-au --open-au-nr=3D1 --blocksize=3D65536 = --erasesize=3D[1*1024*1024 --offset=3D[33*512*1024] >=20 > If you have the result from the other test to figure out the maximum = value for > '--open-au-nr=3DN', using that number here will make this test more r= eliable as well. merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --offset= $[8*1024*1024] --erasesize=3D$[16*1024*1024] 16MiB 15.1M/s=20 8MiB 3.45M/s=20 4MiB 14M/s =20 2MiB 13.1M/s=20 1MiB 15.2M/s=20 512KiB 3.31M/s=20 256KiB 6.55M/s=20 128KiB 4.18M/s=20 64KiB 13.4M/s=20 32KiB 2.14M/s=20 16KiB 1.81M/s=20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --offset= $[1*1024*1024] --erasesize=3D$[4*1024*1024] 4MiB 14.1M/s=20 2MiB 13M/s =20 1MiB 14.9M/s=20 512KiB 3.25M/s=20 256KiB 6.56M/s=20 128KiB 4.16M/s=20 64KiB 13.4M/s=20 32KiB 2.13M/s=20 16KiB 1.81M/s=20 merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --offset= $[2*1024*1024] --erasesize=3D$[4*1024*1024] 4MiB 14M/s =20 2MiB 13M/s =20 1MiB 15.1M/s=20 512KiB 3.25M/s=20 256KiB 6.58M/s=20 128KiB 4.18M/s=20 64KiB 13.5M/s=20 32KiB 2.13M/s=20 16KiB 1.82M/s=20 So this does seem to me that the device quite likes 4 MiB sized, but do= esn=C2=B4t care too much about their alignment? merkaba:~> /tmp/flashbench /dev/sdb --open-au --open-au-nr=3D1 --offset= $[78*1024] --erasesize=3D$[4*1024*1024] 4MiB 14.2M/s=20 2MiB 13.3M/s=20 1MiB 15.1M/s=20 512KiB 3.42M/s=20 256KiB 6.6M/s =20 128KiB 4.22M/s=20 64KiB 13.5M/s=20 32KiB 2.17M/s=20 16KiB 1.84M/s=20 Its seem thats a kinda special USB stick. Thanks, --=20 Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7