Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| zfstuningguide [2015/05/02 19:08] – Reflect v28 as default and deprecated FreeBSD versions as comments BernardSpil | zfstuningguide [2023/04/02 17:15] (current) – 2 GB minimum for ZFS, according to OpenZFS documentation. GrahamPerrin | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ---- | + | See also: [[https:// |
| - | See also: [[http:// | + | ===== ZFS Tuning Guide ===== |
| - | ===== ZFS Tuning Guide ===== | + | [[https:// |
| - | (Work in Progress) | + | |
| - | To use ZFS, at least 1& | + | Depending on your workload, it may be possible to use ZFS on systems with less memory, but it requires careful tuning to avoid panics from memory exhaustion in the kernel. |
| A 64-bit system is preferred due to its larger address space and better performance on 64-bit variables, which are used extensively by ZFS. 32-bit systems are supported though, with sufficient tuning. | A 64-bit system is preferred due to its larger address space and better performance on 64-bit variables, which are used extensively by ZFS. 32-bit systems are supported though, with sufficient tuning. | ||
| Line 74: | Line 73: | ||
| ZFS has the ability to extend the ARC with one or more L2ARC devices, which provides the best benefit for random read workloads. | ZFS has the ability to extend the ARC with one or more L2ARC devices, which provides the best benefit for random read workloads. | ||
| - | By default the L2ARC does not attempt to cache streaming/ | + | By default the L2ARC does not attempt to cache prefetched/streaming workloads, on the assumption that most data of this type is sequential and the combined throughput of your pool disks exceeds the throughput of the L2ARC devices, and therefore, this workload is best left for the pool disks to serve. This is usually the case. If you believe otherwise (number of L2ARC devices X their max throughput > number of pool disks X their max throughput, or you are not doing large amounts of sequential access), then this can be toggled with the following sysctl: |
| < | < | ||
| Line 80: | Line 79: | ||
| </ | </ | ||
| - | The default value of 1 does not allow caching of streaming and/or sequential workloads. | + | The default value of 1 does not allow caching of streaming and/or sequential workloads, and will not read from L2ARC when prefetching blocks. Switching it to 0 will allow prefetched/streaming |
| The default throttling of loading the L2ARC device is 8 Mbytes/sec, on the assumption that the L2ARC is warming up from a random read workload from spinning disks, for which 8 Mbytes/sec is usually more than the spinning disks can provide. For example, at a 4 Kbyte I/O size, this is 2048 random disk IOPS, which may take at least 20 pool disks to drive. Should the L2ARC throttling be increased from 8 Mbytes, it would make no difference in many configurations, | The default throttling of loading the L2ARC device is 8 Mbytes/sec, on the assumption that the L2ARC is warming up from a random read workload from spinning disks, for which 8 Mbytes/sec is usually more than the spinning disks can provide. For example, at a 4 Kbyte I/O size, this is 2048 random disk IOPS, which may take at least 20 pool disks to drive. Should the L2ARC throttling be increased from 8 Mbytes, it would make no difference in many configurations, | ||
| Line 109: | Line 108: | ||
| ==== Application Issues ==== | ==== Application Issues ==== | ||
| - | ZFS is a copy-on-write filesystem. As such metadata from the top of the hierarchy is copied in order to maintain consistency in case of sudden failure, i.e. loss of power during a write operation. This obviates the need for an fsck-like requirement of ZFS filesystems at boot. However the downside to this is that applications which perform updates in place to large files, e.g. databases, will likely perform poorly in this application of the filesystem due to excessive I/O from copy-on-write (a fast SLOG device -- e.g. a SSD -- can help regarding the write performance of databases or any application which is doing synchronous writes (e.g. open with O_FSYNC) to the FS to make sure the data is on non-volatile storage when the write-call returns). Additionally, | + | ZFS is a copy-on-write filesystem. As such metadata from the top of the hierarchy is copied in order to maintain consistency in case of sudden failure, i.e. loss of power during a write operation. This obviates the need for an fsck-like requirement of ZFS filesystems at boot. However the downside to this is that applications which perform updates in place to large files, e.g. databases, will likely perform poorly in this application of the filesystem due to excessive I/O from copy-on-write (a fast SLOG device -- e.g. a SSD -- can help regarding the write performance of databases or any application which is doing synchronous writes (e.g. open with O_FSYNC) to the FS to make sure the data is on non-volatile storage when the write-call returns). Additionally, |
| ===== General Tuning ===== | ===== General Tuning ===== | ||
| Line 143: | Line 142: | ||
| # Set TXG write limit to a lower threshold. | # Set TXG write limit to a lower threshold. | ||
| # the throughput rate (see "zpool iostat" | # the throughput rate (see "zpool iostat" | ||
| - | # for systems with 4 GB of RAM, while 1 GB works well for us w/ 8 GB on | + | # for systems with 4 GB of RAM, while 1 GB works well for us w/ 8 GB on |
| # disks which have 64 MB cache. << | # disks which have 64 MB cache. << | ||
| Line 181: | Line 180: | ||
| < | < | ||
| - | vfs.zfs.zil_disable=" | + | vfs.zfs.zil_disable=" |
| </ | </ | ||
| the vfs.zfs.zil_disable loader tunable was replaced with the " | the vfs.zfs.zil_disable loader tunable was replaced with the " | ||
| - | Disabling ZIL is not recommended where data consistency is required (such as database servers) but will not result in file system corruption. See http://www.solarisinternals.com/wiki/ | + | Disabling ZIL is not recommended where data consistency is required (such as database servers) but will not result in file system corruption. See [[https://archive.is/pV9cy|ZFS Evil Tuning Guide]], section " |
| ZFS is designed to be used with " | ZFS is designed to be used with " | ||
| Line 200: | Line 199: | ||
| *zfs set primarycache=metadata tank/db | *zfs set primarycache=metadata tank/db | ||
| *zfs set atime=off tank/db | *zfs set atime=off tank/db | ||
| - | *zfs set recordsize=16k tank/db | + | *zfs set recordsize=16k tank/db/innodb |
| + | *zfs set recordsize=128k tank/ | ||
| *zfs set zfs: | *zfs set zfs: | ||
| - | *sysctl vfs.zfs.prefetch_disable=1 | + | *zfs set sync=disabled tank/db |
| + | |||
| + | Note: %%MySQL%% 5.6.6 and newer (and related %%MariaDB%% / Percona forks) | ||
| + | |||
| + | References | ||
| + | *[[https:// | ||
| ===== Scrub and Resilver Performance ===== | ===== Scrub and Resilver Performance ===== | ||
| Line 215: | Line 220: | ||
| Setting those sysctls to those values increased my (Shawn Webb' | Setting those sysctls to those values increased my (Shawn Webb' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | {{tag> | ||
| + | {{tag> | ||
| + | {{tag> | ||
| + | {{tag> | ||