zfs performance degradation

Dmitrijs war at dim.lv
Tue Sep 22 17:38:17 UTC 2015


Goog afternoon,

   I've encountered strange ZFS behavior - serious performance 
degradation over few days. Right after setup on fresh ZFS (2 hdd in a 
mirror) I made a test on a file 30Gb size with dd like
dd if=test.mkv of=/dev/null bs=64k
and got 150+Mbs speed.

Today I got only 90Mbs, tested with different blocksizes, many times, 
speed seems to be stable +-5%

nas4free: divx# dd if=test.mkv of=/dev/null bs=64k
484486+1 records in
484486+1 records out
31751303111 bytes transferred in 349.423294 secs (90867734 bytes/sec)



Computer\system details:

  nas4free: /mnt# uname -a
FreeBSD nas4free.local 10.2-RELEASE-p2 FreeBSD 10.2-RELEASE-p2 #0 
r287260M: Fri Aug 28 18:38:18 CEST 2015 
root at dev.nas4free.org:/usr/obj/nas4free/usr/src/sys/NAS4FREE-amd64 amd64

RAM 4Gb
I've got brand new 2x HGST HDN724040ALE640, 4Тб, 7200rpm (ada0, ada1) 
for pool data4.
Another pool, data2, performs slightly better even on older\cheaper WD 
Green 5400 HDDs, up to 99Mbs.


  nas4free: /mnt# zpool status
   pool: data2
  state: ONLINE
   scan: none requested
config:

         NAME        STATE     READ WRITE CKSUM
         data2       ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada2    ONLINE       0     0     0
             ada3    ONLINE       0     0     0

errors: No known data errors

   pool: data4
  state: ONLINE
   scan: none requested
config:

         NAME        STATE     READ WRITE CKSUM
         data4       ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0    ONLINE       0     0     0
             ada1    ONLINE       0     0     0

errors: No known data errors


While dd is running, gstat is showing like:

dT: 1.002s w: 1.000s
L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name
0 366 366 46648 1.1 0 0 0.0 39.6| ada0
1 432 432 54841 1.0 0 0 0.0 45.1| ada1



so iops are very high, while %busy is quite low. It averages about 50%, 
rare peaks till 85-90%

Even top shows no significant load:

last pid: 61983; load averages: 0.44, 0.34, 0.37 up 11+07:51:31 16:44:56
40 processes: 1 running, 39 sleeping
CPU: 0.3% user, 0.0% nice, 6.4% system, 1.1% interrupt, 92.1% idle
Mem: 21M Active, 397M Inact, 2101M Wired, 56M Cache, 94M Buf, 1044M Free
ARC: 1024M Total, 232M MFU, 692M MRU, 160K Anon, 9201K Header, 91M Other
Swap: 4096M Total, 4096M Free
Not displaying idle processes.
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
61981 root 1 30 0 12364K 2084K zio->i 3 0:09 18.80% dd
61966 root 1 22 0 58392K 7144K select 3 0:24 3.86% proftpd



Zpool list:

  nas4free: /mnt# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP HEALTH  ALTROOT
data2  1.81T   578G  1.25T         -    11%    31%  1.00x ONLINE  -
data4  3.62T  2.85T   797G         -    36%    78%  1.00x ONLINE  -


Could it happen because of pool being 78% full? So I cannot fill puls full?
Can anyone please advice how could I fix the situation - or is it normal?
I've googled a lot about vmaxnodes, vminnodes but advices are mostly 
controversial and doesn't help.
I can provide additional system output on request.

best regards,
Dmitry



More information about the freebsd-questions mailing list