[OmniOS-discuss] zpool/zfs settings optimization

Paul B. Henson henson at acm.org
Wed May 29 19:11:28 EDT 2013


I'm getting down to the wire on the home storage server I've been 
working on building for altogether too long. Right now I'm trying to 
finalize the zpool/zfs settings I'm going to create the rpool and bulk 
storage pool with.

The rpool is going to be a mirror of the first partitions of two 256G 
SSDs (I haven't decided how big to make that, it looks like a default 
install of omnios takes up less than 1G, and I don't anticipate 
installing that much more at the OS level).

The storage pool is going to made up of 2 x 6 RAIDZ2 WD Red 3TB drives, 
with a partition of an Intel DC 3700 as log, and the remaining two 
partitions of the rpool SSDs as l2arc.

There's going to be a wide variety of stuff stored on the storage pool, 
from mp3/flac/aac music, to DVD/bluray rips, and basic home directory 
stuff like documents and pictures. A big chunk will be dedicated to my 
mythtv system and contain OTA ATSC mpeg2 transport streams.

For the rpool I plan to enable lz4 compression for the entire pool. For 
the storage pool I will probably disable it for filesystems containing 
mostly noncompressible stuff and enable it for home directory like 
filesystems containing documents and other things more likely to be 
compressible. I think I'm going to set atime=off globally on both pools, 
I can't think of any reason that data would be worth the extra write load.

While I'm going to leave it the default for rpool, I'm thinking I'm 
going to set failmode=continue on the storage pool.

If I understood correctly, there's really no value in changing the 
default recordsize unless you're using an application like a database 
that you know always reads in chunk sizes smaller and reading in the 
entire record would be a waste. I thought I remembered reading somewhere 
that one of the zfs forks had increased the maximum recordsize to 
something bigger, like 2M or 10M or something, but I can't seem to find 
a reference to it now. For filesystems which store only large files (OTA 
HD recordings are generally multi-gigabyte) it seems that would be more 
efficient. Is anybody looking at increasing the maximum record size in 
illumos zfs?

While I understand what the primarycache and secondarycache attributes 
control, I'm not really clear on when it might be desirable to change 
them. Are there any routine scenarios where you might want to configure 
them other than the default, or is that just limited to specific 
deployments such as databases where you want to avoid double buffering 
of data in memory?

I was planning on making the storage available to my mythv server over 
NFS. I was thinking about setting logbias=throughput for that file 
system, as intuitively that would seem a better tuning for multiple 
streams being written at once. Or, I could possibly set sync=disabled on 
that file system to completely avoid the overhead of NFS synchronous 
writes. If there's a failure during a recording and I lose five minutes 
of the end, oh well…

Moving on to kernel tunables, I was thinking of enabling l2arc 
prefetching (l2arc_noprefetch=0). I'm also thinking of increasing 
l2arc_write_max to better avail of more modern SSDs, but I'm not sure to 
what. At some point will the default zfs kernel tunables be updated to 
match currently available devices rather than the more limited flash 
devices of yesteryear?

Any thoughts on these mentioned settings/tunables, or recommendations of 
other things I might want to do?

Thanks much…


More information about the OmniOS-discuss mailing list