Workload Tuning: actualize volblocksize
It was a little bit obsolete and obscure. Signed-off-by: George Melikov <mail@gmelikov.ru>
This commit is contained in:
@@ -203,7 +203,7 @@ ZFS datasets use an internal recordsize of 128KB by default. The dataset
|
||||
recordsize is the basic unit of data used for internal copy-on-write on
|
||||
files. Partial record writes require that data be read from either ARC
|
||||
(cheap) or disk (expensive). recordsize can be set to any power of 2
|
||||
from 512 bytes to 128 kilobytes. Software that writes in fixed record
|
||||
from 512 bytes to 1 megabyte. Software that writes in fixed record
|
||||
sizes (e.g. databases) will benefit from the use of a matching
|
||||
recordsize.
|
||||
|
||||
@@ -233,10 +233,32 @@ must support the large_blocks feature.
|
||||
zvol volblocksize
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Zvols have a volblocksize property that is analogous to record size. The
|
||||
default size is 8KB, which is the size of a page on the SPARC
|
||||
architecture. Workloads that use smaller sized IOs (such as swap on x86
|
||||
which use 4096-byte pages) will benefit from a smaller volblocksize.
|
||||
Zvols have a ``volblocksize`` property that is analogous to ``recordsize``.
|
||||
Current default (16KB since v2.2) balances the metadata overhead, compression
|
||||
opportunities and decent space efficiency on majority of pool configurations
|
||||
due to 4KB disk physical block rounding (especially on RAIDZ and DRAID),
|
||||
while incurring some write amplification on guest FSes that run with smaller
|
||||
block sizes [#VOLBLOCKSIZE]_.
|
||||
|
||||
Users are advised to test their scenarios and see whether the ``volblocksize``
|
||||
needs to be changed to favor one or the other:
|
||||
|
||||
- sector alignment of guest FS is crucial
|
||||
- most of guest FSes use default block size of 4-8KB, so:
|
||||
|
||||
- Larger ``volblocksize`` can help with mostly sequential workloads and
|
||||
will gain a compression efficiency
|
||||
|
||||
- Smaller ``volblocksize`` can help with random workloads and minimize
|
||||
IO amplification, but will use more metadata
|
||||
(e.g. more small IOs will be generated by ZFS) and may have worse
|
||||
space efficiency (especially on RAIDZ and DRAID)
|
||||
|
||||
- It's meaningless to set ``volblocksize`` less than guest FS's block size
|
||||
or :ref:`ashift <alignment_shift_ashift>`
|
||||
|
||||
- See :ref:`Dataset recordsize <dataset_recordsize>`
|
||||
for additional information
|
||||
|
||||
Deduplication
|
||||
~~~~~~~~~~~~~
|
||||
@@ -760,3 +782,4 @@ AIO should be used to maximize IOPS when using files for guest storage.
|
||||
.. [#sqlite_ps_change] <https://www.sqlite.org/pgszchng2016.html>
|
||||
.. [#FS_CASEFOLD_FL] <https://github.com/openzfs/zfs/pull/13790>
|
||||
.. [#init_on_alloc] <https://patchwork.kernel.org/project/linux-security-module/patch/20190626121943.131390-2-glider@google.com/#22731857>
|
||||
.. [#VOLBLOCKSIZE] <https://github.com/openzfs/zfs/pull/12406>
|
||||
|
||||
Reference in New Issue
Block a user