create 10GB file (on 2GB RAM machine, with some swap used to make sure
little cache would be available for filesystem.
dd if=/dev/zero of=file bs=1m count=10k
block size is 32KB, fragment size 4k
now test random read access to it (10 threads)
randomio test 10 0 0 4096
normal result on such not so fast disk in my laptop.
118.5 | 118.5 5.8 82.3 383.2 85.6 | 0.0 inf nan 0.0 nan
138.4 | 138.4 3.9 72.2 499.7 76.1 | 0.0 inf nan 0.0 nan
142.9 | 142.9 5.4 69.9 297.7 60.9 | 0.0 inf nan 0.0 nan
133.9 | 133.9 4.3 74.1 480.1 75.1 | 0.0 inf nan 0.0 nan
138.4 | 138.4 5.1 72.1 380.0 71.3 | 0.0 inf nan 0.0 nan
145.9 | 145.9 4.7 68.8 419.3 69.6 | 0.0 inf nan 0.0 nan
systat shows 4kB I/O size. all is fine.
BUT random 4kB writes
randomio test 10 1 0 4096
total | read: latency (ms) | write: latency (ms)
iops | iops min avg max sdev | iops min avg max
sdev
--------+-----------------------------------+----------------------------------
38.5 | 0.0 inf nan 0.0 nan | 38.5 9.0 166.5 1156.8 261.5
44.0 | 0.0 inf nan 0.0 nan | 44.0 0.1 251.2 2616.7 492.7
44.0 | 0.0 inf nan 0.0 nan | 44.0 7.6 178.3 1895.4 330.0
45.0 | 0.0 inf nan 0.0 nan | 45.0 0.0 239.8 3457.4 522.3
45.5 | 0.0 inf nan 0.0 nan | 45.5 0.1 249.8 5126.7 621.0
results are horrific. systat shows 32kB I/O, gstat shows half are reads
half are writes.
Why UFS need to read full block, change one 4kB part and then write
back, instead of just writing 4kB part?
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"