Hi
I am benchmarking my system in prepare for ESXi, I have very little understanding in the internal mechanism in ZFS so would like to hear your thoughts.
Here is the detail of the test pool:
Key words: 4 mirrored vdevs, low utilization and fragmentation, recordsize=16K, sync=always, compression off
Now with the slog in play, I was expecting the write IOPS to approximate that of the slog, especially with a small (512M) test file, but only get ~10K IOPS. While it is a vast improvement over w/o slog (~150 IOPS) but I was hoping for something like 30-40K IOPS. Is there anything I can do short of throw in more hardware?
I am benchmarking my system in prepare for ESXi, I have very little understanding in the internal mechanism in ZFS so would like to hear your thoughts.
Here is the detail of the test pool:
Code:
root@freenas:/mnt/m8 # zpool list -v m8 NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT m8 14.5T 447G 14.1T - 0% 3% 1.00x ONLINE /mnt mirror 3.62T 109G 3.52T - 0% 2% gptid/1956925c-c9e5-11e8-b164-ecf4bbcb7e90 - - - - - - gptid/1a38d15c-c9e5-11e8-b164-ecf4bbcb7e90 - - - - - - mirror 3.62T 113G 3.51T - 0% 3% gptid/1b4b8875-c9e5-11e8-b164-ecf4bbcb7e90 - - - - - - gptid/18050e27-c9f1-11e8-b164-ecf4bbcb7e90 - - - - - - mirror 3.62T 113G 3.51T - 0% 3% gptid/1d5c5df5-c9e5-11e8-b164-ecf4bbcb7e90 - - - - - - gptid/1e5ee446-c9e5-11e8-b164-ecf4bbcb7e90 - - - - - - mirror 3.62T 111G 3.52T - 0% 2% gptid/3cdb7a3e-c9f1-11e8-b164-ecf4bbcb7e90 - - - - - - gptid/6cbeef4b-c9e5-11e8-b164-ecf4bbcb7e90 - - - - - - log - - - - - - nvd0 40G 128K 40.0G - 0% 0% root@freenas:/mnt/m8 # zfs get all m8 NAME PROPERTY VALUE SOURCE m8 type filesystem - m8 creation Sat Oct 6 20:57 2018 - m8 used 447G - m8 available 13.6T - m8 referenced 447G - m8 compressratio 1.00x - m8 mounted yes - m8 quota none local m8 reservation none local m8 recordsize 16K local m8 mountpoint /mnt/m8 default m8 sharenfs off default m8 checksum on default m8 compression off local m8 atime on default m8 devices on default m8 exec on default m8 setuid on default m8 readonly off default m8 jailed off default m8 snapdir hidden default m8 aclmode passthrough local m8 aclinherit passthrough local m8 canmount on default m8 xattr off temporary m8 copies 1 default m8 version 5 - m8 utf8only off - m8 normalization none - m8 casesensitivity sensitive - m8 vscan off default m8 nbmand off default m8 refquota none local m8 refreservation none local m8 primarycache all default m8 secondarycache all default m8 usedbysnapshots 0 - m8 usedbydataset 447G - m8 usedbychildren 37.5M - m8 usedbyrefreservation 0 - m8 logbias latency default m8 dedup off default m8 mlslabel - m8 sync always local m8 refcompressratio 1.00x - m8 written 447G - m8 logicalused 447G - m8 logicalreferenced 447G - m8 volmode default default m8 filesystem_limit none default m8 snapshot_limit none default m8 filesystem_count none default m8 snapshot_count none default m8 redundant_metadata all default
Key words: 4 mirrored vdevs, low utilization and fragmentation, recordsize=16K, sync=always, compression off
Code:
root@freenas:/mnt/m8 # iozone -a -s 512M -O Iozone: Performance Test of File I/O Version $Revision: 3.457 $ Compiled for 64 bit mode. Build: freebsd Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins Al Slater, Scott Rhine, Mike Wisner, Ken Goss Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR, Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner, Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone, Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root, Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer, Vangel Bojaxhi, Ben England, Vikentsi Lapa, Alexey Skidanov. Run began: Tue Oct 9 09:50:10 2018 Auto Mode File size set to 524288 kB OPS Mode. Output is in operations per second. Command line used: iozone -a -s 512M -O Time Resolution = 0.000001 seconds. Processor cache size set to 1024 kBytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 524288 4 9281 9510 162554 340426 250513 8166 135176 10920 160345 10034 9485 147176 315245 524288 8 8563 8531 110181 260793 214246 7899 98585 10013 97223 8552 8609 103698 155445 524288 16 6614 6526 83307 87849 152698 7025 76399 8758 76104 6624 6651 71240 77383 524288 32 4552 4337 52874 62135 107487 4575 52359 5898 51267 4313 4279 45693 48314 524288 64 2717 2703 29693 30646 34548 2801 29705 3497 29035 2784 2717 22968 25298 524288 128 1666 1529 16272 16223 16586 1698 16168 1869 15943 1539 1565 11979 12701 524288 256 1013 1006 8422 8435 16472 1186 8359 1284 8376 1032 1019 6034 6038 524288 512 587 593 4388 4411 7132 724 4493 1424 4473 611 609 3048 3095 524288 1024 318 315 2253 2245 2348 466 2237 427 2136 326 327 1538 1571 524288 2048 173 168 1136 1128 1741 188 1174 241 1150 170 167 753 801 524288 4096 114 85 559 583 637 90 581 128 642 88 85 398 452 524288 8192 43 42 248 261 282 42 285 57 274 43 43 148 168 524288 16384 21 21 109 128 136 23 109 26 108 26 21 58 71
Now with the slog in play, I was expecting the write IOPS to approximate that of the slog, especially with a small (512M) test file, but only get ~10K IOPS. While it is a vast improvement over w/o slog (~150 IOPS) but I was hoping for something like 30-40K IOPS. Is there anything I can do short of throw in more hardware?