ZFS performance of various vdevs (long post)

Bradley W. Dutton brad at duttonbros.com
Tue Jun 8 15:20:07 UTC 2010


Quoting Jeremy Chadwick <freebsd at jdc.parodius.com>:

>> On Mon, Jun 07, 2010 at 05:32:18PM -0700, Bradley W. Dutton wrote:
>> I know it's pretty simple but for checking throughput I thought it
>> would be ok. I don't have compression on and based on the drive
>> lights and gstat, the drives definitely aren't idle.
>
> Try disabling prefetch (you have it enabled) and try setting
> vfs.zfs.txg.timeout="5".  Some people have reported a "sweet spot" with
> regards to the last parameter (needing to be adjusted if your disks are
> extremely fast, etc.), as otherwise ZFS would be extremely "bursty" in
> its I/O (stalling/deadlocking the system at set intervals).  By
> decreasing the value you essentially do disk writes more regularly (with
> less data), and depending upon the load and controller, this may even
> out performance.

I tested some of these settings. With the timeout set to 5 not much  
changed write wise. (keep in mind these results are the Nvidia/WDRE2  
combo):

With txg=5 and prefetch disabled I saw read speeds go down considerably:
# normal/jbod txg=5 no prefetch
zpool create bench /dev/ad4 /dev/ad6 /dev/ad10 /dev/ad12 /dev/ad14
dd if=/bench/test.file of=/dev/null bs=1m
12582912000 bytes transferred in 59.330330 secs (212082286 bytes/sec)
compared to
12582912000 bytes transferred in 34.668165 secs (362952928 bytes/sec)

zpool create bench raidz /dev/ad4 /dev/ad6 /dev/ad10 /dev/ad12 /dev/ad14
dd if=/bench/test.file of=/dev/null bs=1m
12582912000 bytes transferred in 71.135696 secs (176886046 bytes/sec)
compared to
12582912000 bytes transferred in 45.825533 secs (274582993 bytes/sec)

Running the same tests on the raidz2 Supermicro/Hitachi setup didn't  
yield any difference in writes, the reads were slower:
zpool create tank raidz2 /dev/da0 /dev/da1 /dev/da2 /dev/da3 /dev/da4  
/dev/da5 /dev/da6 /dev/da7
dd if=/tank/test.file of=/dev/null bs=1m
12582912000 bytes transferred in 44.118409 secs (285207745 bytes/sec)
compared to
12582912000 bytes transferred in 32.911291 secs (382328118 bytes/sec)

I rebooted and reran these numbers just to make sure they were consistent.


>> >The higher CPU usage might be due to the device driver or the
>> >interface card being used.
>>
>> Definitely a plausible explanation. If this was the case would the 8
>> parallel dd processes exhibit the same behavior? or is the type of
>> IO affecting how much CPU the driver is using?
>
> It would be the latter.
>
> Also, I believe this Supermicro controller has been discussed in the
> past.  I can't remember if people had outright failures/issues with it
> or if people were complaining about sub-par performance.  I could also
> be remembering a different Supermicro controller.
>
> If I had to make a recommendation, it would be to reproduce the same
> setup on a system using an Intel ICH9/ICH9R or ICH10/ICH10R controller
> in AHCI mode (with ahci.ko loaded, not ataahci.ko) and see if things
> improve.  But start with the loader.conf tunables I mentioned above --
> segregate each test.
>
> I would also recommend you re-run your tests with a different blocksize
> for dd.  I don't know why people keep using 1m (Linux websites?).  Test
> the following increments: 4k, 8k, 16k, 32k, 64k, 128k, 256k.  That's
> about where you should stop.

I tested with 8, 16, 32, 64, 128, 1m and the results all looked  
similar. As such I stuck with bs=1m because it's easier to change count.


> Otherwise, consider installing ports/benchmarks/bonnie++ and try that.
> That will also get you concurrent I/O tests, I believe.

I may give this a shot but I'm most interested in less concurrency as  
I have larger files with only a couple of readers/writers. As Bob  
noted a bunch of mirrors in the pool would definitely be faster for  
concurrent IO.


Thanks for the help,
Brad



More information about the freebsd-fs mailing list