USB pendrive teljesítmény - formázás

Sziasztok!

Egy Kingston DataTraveler 100 G2 USB meghajtóval szerencsétlenkedek épp.
Az eszköz gyárilag egy darab partícióval, azon pedig egy FAT32 fájlrendszerrel érkezett, amit én reflexből meg is formáztam ext2-re (hardlink támogatásra van ugyanis szükségem). Hiba volt, mert innentől kezdve meglehetősen gyatra teljesítményt produkál, szinkron módban alig 0.5 MB/sec, aszinkron módban pedig ~2 MB/sec az írási sebesség.
Eddig odáig jutottam, hogy dd-vel végigpróbálgattam a szekvenciális írást különböző blokkméretekkel. A legjobb eredmény 16,6 MB/sec volt, ezt 64K-s blokkméret mellett tudja.
Aztán töröltem a gyári partíciót, létrehoztam egy újat, most így néz ki:


root@OpenWrt:/mnt/usb# fdisk -lu /dev/sda

Disk /dev/sda: 15.9 GB, 15998099456 bytes
64 heads, 32 sectors/track, 15256 cylinders, total 31246288 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x00017a8d

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    31246287    15622120   83  Linux

Ezen létrehoztam egy ext2 fájlrendszert a lehetséges maximális 4K-s blokkmérettel, de semmit nem javult a helyzet, és ez így még mindig nagyon gyatra a "nyers" 16,6 MB/sec-hez képest.

A kérdésem az lenne: hogy a fenébe' kell egy pendrive-ot normális fájlrendszerrel úgy megformázni, hogy rendesen működjön is?

Előre is köszi!

Hozzászólások

nem annyira értek hozzá, de olvastam már ilyen témájú írást:
http://blogofterje.wordpress.com/2012/01/14/optimizing-fs-on-sd-card/

Az ő esetében 8k méretű blokkok voltak:
" 1)Ext4 should have a block size of 4k, and the “stride” value should be 2. This will cause ext4 to think that units of 2 blocks (8k) can and should be treated as one.
2) Ext4 should have the stripe-size set to 1024. This value was calculated by taking 8M (guessed erasure block size) dividing by 8K (size of a stride, 2 times block size (4K)). This will (hopefully) cause Ext4 to try to align writes so that while erasure blocks are written continuously and make it avoid sub-block updates."

gondolom a "stride" értékét kellene 16-ra megadni.
Írja a particionálás és formázás menetét is, onnan merítve valami ilyesmi kellhet neked:

mkfs.ext4 -O ^has_journal -E stride=16,stripe-width=1024 -b 4096 -L SDCard /dev/mmcblk0p1

Köszönöm szépen. A linkről továbbnézelődve sokmindent megtudtam a flash memóriákról, amit mindig is tudni akartam, csak nem mertem megkérdezni :)

Nálam ugyan nem adott ilyen szép eredményeket a flashbench, mint a blogger srácnál, de azért kb. meg tudtam belőle tippelni, hogy nálam is 8k "blokkokban" történik az írás, viszont az erase block méret itt nagy valószínűséggel 16MB. Gondolom, a 64K blokkméretes írás azért volt gyors a dd-vel, mert a vezérlő elektronika párhuzamosít valamit rajta.
Így a pendrive 16. MB-jától kezdve indul az első partícióm, amit stride=2,stripe-width=2048 beállításokkal formáztam. A sebesség most nagy fájlokkal ~5.5-5.8 MB/sec között mozog, apróságokkal (konkrétan egy leforgatott OpenWrt könyvtár) ~ 1.2 MB/sec. Mivel a pendrive egy OpenWrt-s routeren lesz backup célokra használva, aminek az USB-je szintén nem egy villám, nekem ez így már elég is.

Köszönöm szépen a hasznos tippet!

Egy ilyenem nekem is van, de kb. csak dísznek használom, mert a gyári fat32-vel sem hoz jobb eredményeket, az 5 éves Transcend-em messze lepipálja. Mostanában egy DT Elite 3.0-át használok, kb. ugyanazon az áron sokszoros teljesítmény...

Sziasztok!

Ma sikerült beszereznem egy 16GB-os Class 10-es SDHC memóriakártyát(Maxell). Feltettem rá egy ubuntu-t (12.04 lts). Sajnos iszonyú lassú lett...
iostat -m
avg-cpu: %user %nice %system %iowait %steal %idle
2,15 0,12 0,63 12,16 0,00 84,93

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 0,38 0,00 0,00 3 0
sdb 11,38 0,20 0,13 432 289

./flashbench -a /dev/sdb1 --blocksize=1024
align 2147483648 pre 1.62ms on 2.08ms post 1.87ms diff 338µs
align 1073741824 pre 1.53ms on 2.14ms post 1.79ms diff 481µs
align 536870912 pre 1.6ms on 2.17ms post 1.72ms diff 507µs
align 268435456 pre 1.79ms on 2.41ms post 1.78ms diff 624µs
align 134217728 pre 1.55ms on 2.15ms post 1.82ms diff 460µs
align 67108864 pre 1.47ms on 1.92ms post 1.53ms diff 420µs
align 33554432 pre 1.9ms on 2.45ms post 1.79ms diff 603µs
align 16777216 pre 1.9ms on 2.52ms post 1.83ms diff 654µs
align 8388608 pre 1.9ms on 2.53ms post 1.8ms diff 673µs
align 4194304 pre 1.85ms on 2.45ms post 1.79ms diff 628µs
align 2097152 pre 1.74ms on 2.17ms post 1.75ms diff 423µs
align 1048576 pre 1.8ms on 2.21ms post 1.8ms diff 415µs
align 524288 pre 1.75ms on 2.15ms post 1.78ms diff 380µs
align 262144 pre 1.74ms on 2.14ms post 1.78ms diff 380µs
align 131072 pre 1.74ms on 2.15ms post 1.79ms diff 381µs
align 65536 pre 1.74ms on 2.16ms post 1.81ms diff 386µs
align 32768 pre 1.73ms on 2.15ms post 1.76ms diff 409µs
align 16384 pre 1.74ms on 2.15ms post 1.74ms diff 413µs
align 8192 pre 1.74ms on 2.12ms post 1.72ms diff 385µs
align 4096 pre 1.82ms on 1.81ms post 1.82ms diff -6950ns
align 2048 pre 1.86ms on 1.86ms post 1.84ms diff 14.1µs

fstab
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sdb1 during installation
UUID=1c0c076b-4425-4df5-a760-25724e9fe4c7 / ext4 errors=remount-ro 0 1
# swap was on /dev/sdb5 during installation
UUID=c44db8a1-5a10-422a-b1e0-2f917041df4a none swap sw 0 0

/boot is ezen van.

Van vkinek ötlete, hogy hol a hiba? Mit kellene bekonfigurálnom? Sima gyári telepítési beállításokkal raktam fel...

Köszönöm

szinkron módban alig 0.5 MB/sec

FLASH-t nem jó ötlet sync opcióval csatolni. A sebesség az egyik ok, az élettartam pedig a másik.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ezt a sebességet sikerült elérnem, hogy az ext4-nél kikapcsoltam a naplózást és 4k-s blokkosra formáztam.
Valahol azt olvastam, hogy flashek esetében a jffs2 és az ubifs az ideális fájlrendszer. Csak ezekre nem lehet direkt a /-t rakni.
Esetleg ebben az irányban nincs előrelépés?

Nem tudom. Én lehet, nem gondolkodnék ezen annyit, megformáznám ext4-re, async, noatime mount-olnám. Flash olvasáskor gyorsabb, mint íráskor, így az oprendszer mehet róla. A /home illetve /var már érdekesebb probléma, mert azokat írni is akarja a rendszer.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE