OpenZFS on Linux and FreeBSD
Go to file
Mark Johnston 5303fc4c95 Avoid memory allocations in the ARC eviction thread
When the eviction thread goes to shrink an ARC state, it allocates a set
of marker buffers used to hold its place in the state's sublists.

This can be problematic in low memory conditions, since
1) the allocation can be substantial, as we allocate NCPU markers;
2) on at least FreeBSD, page reclamation can block in
   arc_wait_for_eviction()

In particular, in stress tests it's possible to hit a deadlock on
FreeBSD when the number of free pages is very low, wherein the system is
waiting for the page daemon to reclaim memory, the page daemon is
waiting for the ARC eviction thread to finish, and the ARC eviction
thread is blocked waiting for more memory.

Try to reduce the likelihood of such deadlocks by pre-allocating markers
for the eviction thread at ARC initialization time.  When evicting
buffers from an ARC state, check to see if the current thread is the ARC
eviction thread, and use the pre-allocated markers for that purpose
rather than dynamically allocating them.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: George Amanakis <gamanakis@gmail.com>
Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Closes #12985
2022-02-03 15:30:52 -08:00
.github Update `checkstyle` workflow env to ubuntu-20.04 2021-12-08 13:27:56 -08:00
cmd Update `checkstyle` workflow env to ubuntu-20.04 2021-12-08 13:27:56 -08:00
config Linux 5.16: The blk-cgroup.h header is where struct blkcg_gq is defined 2021-12-07 13:14:23 -08:00
contrib Fix plymouth passphrase prompt with dracut 2021-06-29 13:14:49 -07:00
etc systemd: import: expand $ZPOOL_IMPORT_OPTS correctly 2021-06-15 16:56:53 -07:00
include Avoid memory allocations in the ARC eviction thread 2022-02-03 15:30:52 -08:00
lib libzfs_sendrecv: Fix leaked holds nvlist 2022-02-03 15:28:01 -08:00
man Reduce number of arc_prune threads 2022-02-03 15:28:01 -08:00
module Avoid memory allocations in the ARC eviction thread 2022-02-03 15:30:52 -08:00
rpm zfs-dkms rpm: Fix scriptlets dependencies 2021-12-13 13:23:48 -08:00
scripts Update `checkstyle` workflow env to ubuntu-20.04 2021-12-08 13:27:56 -08:00
tests Verify dRAID empty sectors 2022-02-03 15:28:01 -08:00
udev Udev rules: use match (==) rather than assign (=) for PROGRAM 2021-09-14 12:23:10 -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 zfs-2.1.2 2021-12-13 15:00:39 -08:00
Makefile.am Upgrade to libabigail 2.0.0 2021-11-05 07:59:40 -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 Fix lseek(SEEK_DATA/SEEK_HOLE) mmap consistency 2021-11-05 08:08:55 -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.