Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Jan 2013 19:43:51 +0100 (CET)
From:      Wojciech Puchar <wojtek@wojtek.tensor.gdynia.pl>
To:        freebsd-hackers@freebsd.org
Subject:   stupid UFS behaviour on random writes
Message-ID:  <alpine.BSF.2.00.1301171939380.421@wojtek.tensor.gdynia.pl>

next in thread | raw e-mail | index | archive | help
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?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.1301171939380.421>