OpenZFS on Linux and FreeBSD
Go to file
Brian Behlendorf af80160f48 Linux: Set spl_kmem_cache_slab_limit when page size !4K
For small objects the kernel's slab implementation is very fast and
space efficient. However, as the allocation size increases to
require multiple pages performance suffers. The SPL kmem cache
allocator was designed to better handle these large allocation
sizes. Therefore, on Linux the kmem_cache_* compatibility wrappers
prefer to use the kernel's slab allocator for small objects and
the custom SPL kmem cache allocator for larger objects.

This logic was effectively disabled for all architectures using
a non-4K page size which caused all kmem caches to only use the
SPL implementation. Functionally this is fine, but the SPL code
which calculates the target number of objects per-slab does not
take in to account that __vmalloc() always returns page-aligned
memory. This can result in a massive amount of wasted space when
allocating tiny objects on a platform using large pages (64k).

To resolve this issue we set the spl_kmem_cache_slab_limit cutoff
to 16K for all architectures. 

This particular change does not attempt to update the logic used
to calculate the optimal number of pages per slab. This remains
an issue which should be addressed in a future change.

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #12152
Closes #11429
Closes #11574
Closes #12150
2021-06-09 13:05:34 -07:00
.github Don't direct to freenode in issue template 2021-06-09 13:05:34 -07:00
cmd Added another missed case to arc_summary3 2021-06-09 13:05:34 -07:00
config Turn checkbashisms into a make target 2021-06-09 13:05:34 -07:00
contrib Turn checkbashisms into a make target 2021-06-09 13:05:34 -07:00
etc Turn shellcheck into a normal make target. Fix new files it caught 2021-06-09 13:05:34 -07:00
include Introduce write-mostly sums 2021-06-09 13:05:34 -07:00
lib A couple of small style cleanups 2021-06-09 13:05:34 -07:00
man zfs-module-parameters.5: remove nonexistent parameters 2021-06-09 13:05:34 -07:00
module Linux: Set spl_kmem_cache_slab_limit when page size !4K 2021-06-09 13:05:34 -07:00
rpm RPM: Explicitly set the required min/max kernel version for the DKMS package 2021-05-28 09:01:31 -07:00
scripts Turn checkbashisms into a make target 2021-06-09 13:05:34 -07:00
tests Quick fixes for two ZTS failures 2021-06-09 13:05:34 -07:00
udev udev/rules.d: .gitignore: glob all rules 2021-06-09 13:05:34 -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 .gitmodules: link to openzfs github repository 2021-04-14 13:23:08 -07:00
AUTHORS Add zstd support to zfs 2020-08-20 10:30:06 -07:00
CODE_OF_CONDUCT.md 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
LICENSE Update build system and packaging 2018-05-29 16:00:33 -07:00
META Tag 2.1.0-rc6 2021-05-28 09:01:47 -07:00
Makefile.am Turn checkbashisms into a make target 2021-06-09 13:05:34 -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 Update FreeBSD versions 2021-03-16 15:03:28 -07:00
RELEASES.md Add RELEASES.md file 2021-04-07 13:26:58 -07:00
TEST Remove CI builder customization from TEST 2020-03-16 10:46:03 -07:00
autogen.sh Cause autogen.sh to fail if autoreconf fails 2018-07-06 09:27:37 -07:00
configure.ac zstreamdump: replace with link to zstream 2021-06-08 14:48:58 -07:00
copy-builtin copy-builtin: posix conformance 2021-05-10 12:18:54 -07:00
zfs.release.in Move zfs.release generation to configure step 2012-07-12 12:22:51 -07:00

README.md

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 any supported branches and releases starting from 12.2-RELEASE.