Go to file
Alexander Motin f8020c9363
Make metaslab class rotor and aliquot per-allocator.
Metaslab rotor and aliquot are used to distribute workload between
vdevs while keeping some locality for logically adjacent blocks.  Once
multiple allocators were introduced to separate allocation of different
objects it does not make much sense for different allocators to write
into different metaslabs of the same metaslab group (vdev) same time,
competing for its resources.  This change makes each allocator choose
metaslab group independently, colliding with others only sporadically.

Test including simultaneous write into 4 files with recordsize of 4KB
on a striped pool of 30 disks on a system with 40 logical cores show
reduction of vdev queue lock contention from 54 to 27% due to better
load distribution.  Unfortunately it won't help much ZVOLs yet since
only one dataset/ZVOL is synced at a time, and so for the most part
only one allocator is used, but it may improve later.

While there, to reduce the number of pointer dereferences change
per-allocator storage for metaslab classes and groups from several
separate malloc()'s to variable length arrays at the ends of the
original class and group structures.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Closes #11288
2020-12-15 10:55:44 -08:00
.github CI: add zloop workflow 2020-12-10 20:46:15 +03:00
cmd Make metaslab class rotor and aliquot per-allocator. 2020-12-15 10:55:44 -08:00
config Implement memory and CPU hotplug 2020-12-10 14:09:23 -08:00
contrib dracut: use /bin/sh instead of bash as the intepreter 2020-11-28 11:02:08 -08:00
etc Verify zfs module loaded before starting services 2020-11-28 11:11:18 -08:00
include Make metaslab class rotor and aliquot per-allocator. 2020-12-15 10:55:44 -08:00
lib FreeBSD libzfs: gcc requires __thread after static 2020-12-14 09:28:24 -08:00
man Add -u option to 'zfs create' 2020-12-04 14:01:42 -08:00
module Make metaslab class rotor and aliquot per-allocator. 2020-12-15 10:55:44 -08:00
rpm zpool_influxdb: move to libexec dir 2020-11-28 11:15:57 -08:00
scripts DKMS: Disable weak modules 2020-12-15 09:22:30 -08:00
tests Fix reporting of CKSUM errors in indirect vdevs 2020-12-11 12:15:37 -08:00
udev Centralize variable substitution 2020-07-14 17:33:44 -07:00
.editorconfig Add an .editorconfig; document git whitespace settings 2020-01-27 13:32:52 -08:00
.gitignore Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
.gitmodules Add zimport.sh compatibility test script 2014-02-21 12:10:31 -08:00
AUTHORS Add zstd support to zfs 2020-08-20 10:30:06 -07:00
autogen.sh Cause autogen.sh to fail if autoreconf fails 2018-07-06 09:27:37 -07:00
CODE_OF_CONDUCT.md Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
configure.ac Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
copy-builtin Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
COPYRIGHT Fix typos 2020-06-09 21:24:09 -07:00
cppcheck-suppressions.txt Import ZStandard v1.4.5 2020-08-20 10:30:06 -07:00
LICENSE Update build system and packaging 2018-05-29 16:00:33 -07:00
Makefile.am dracut: use /bin/sh instead of bash as the intepreter 2020-11-28 11:02:08 -08:00
META Increase Supported Linux Kernel to 5.9 2020-10-13 09:51:13 -07:00
NEWS Fix NEWS file 2020-08-26 21:44:41 -07:00
NOTICE Update build system and packaging 2018-05-29 16:00:33 -07:00
README.md docs: update README's installation link 2020-10-08 09:33:53 -07:00
TEST Remove CI builder customization from TEST 2020-03-16 10:46:03 -07:00
zfs.release.in Move zfs.release generation to configure step 2012-07-12 12:22:51 -07:00

img

OpenZFS is an advanced file system and volume manager which was originally developed for Solaris and is now maintained by the OpenZFS community. This repository contains the code for running OpenZFS on Linux and FreeBSD.

codecov coverity

Official Resources

Installation

Full documentation for installing OpenZFS on your favorite operating system can be found at the Getting Started Page.

Contribute & Develop

We have a separate document with contribution guidelines.

We have a Code of Conduct.

Release

OpenZFS is released under a CDDL license. For more details see the NOTICE, LICENSE and COPYRIGHT files; UCRL-CODE-235197

Supported Kernels

  • The META file contains the officially recognized supported Linux kernel versions.
  • Supported FreeBSD versions are 12-STABLE and 13-CURRENT.