Go to file
Brian Behlendorf 7cb67b45f3 Add direct+indirect ARC reclaim
Under OpenSolaris all memory reclaim is done asyncronously.  Under
Linux memory reclaim is done asynchronously _and_ synchronously.
When a process allocates memory with GFP_KERNEL it explicitly allows
the kernel to do reclaim on its behalf to satify the allocation.
If that GFP_KERNEL allocation fails the kernel may take more drastic
measures to reclaim the memory such as killing user space processes.

This was observed to happen with ZFS because the ARC could consume
a large fraction of the system memory but no synchronous reclaim
could be performed on it.  The result was GFP_KERNEL allocations
could fail resulting in OOM events, and only moments latter the
arc_reclaim thread would free unused memory from the ARC.

This change leaves the arc_thread in place to manage the fundamental
ARC behavior.  But it adds a synchronous (direct) reclaim path for
the ARC which can be called when memory is badly needed.  It also
adds an asynchronous (indirect) reclaim path which is called
much more frequently to prune the ARC slab caches.
2011-04-07 09:52:10 -07:00
cmd Call udevadm trigger more safely 2011-04-05 13:00:51 -07:00
config Linux 2.6.28 compat, insert_inode_locked() 2011-03-22 12:15:54 -07:00
dracut Add dracut support 2011-03-17 16:52:04 -07:00
etc Set cmd paths in udev rules using --prefix 2011-03-25 10:05:09 -07:00
include Fix libzpool cv_* build error 2011-03-31 12:20:53 -07:00
lib Linux 2.6.28 compat, insert_inode_locked() 2011-03-22 12:15:54 -07:00
man Linux 2.6.28 compat, insert_inode_locked() 2011-03-22 12:15:54 -07:00
module Add direct+indirect ARC reclaim 2011-04-07 09:52:10 -07:00
patches Add build system 2010-08-31 13:41:27 -07:00
scripts Call udevadm trigger more safely 2011-04-05 13:00:51 -07:00
.gitignore Ignore unsigned module build products 2010-03-09 14:14:09 -08:00
AUTHORS Add dracut support 2011-03-17 16:52:04 -07:00
autogen.sh Minor packaging fixes 2010-09-01 15:42:32 -07:00
ChangeLog Add build system 2010-08-31 13:41:27 -07:00
configure Set cmd paths in udev rules using --prefix 2011-03-25 10:05:09 -07:00
configure.ac Set cmd paths in udev rules using --prefix 2011-03-25 10:05:09 -07:00
COPYING Relocate COPYING+COPYRIGHT, remove README cruft 2008-12-01 15:34:53 -08:00
COPYRIGHT Update COPYRIGHT to reference zpios CDDL exceptions. 2010-05-18 14:25:28 -07:00
DISCLAIMER Update COPYRIGHT and DISCLAIMER. 2010-05-18 10:32:23 -07:00
Makefile.am Add dracut support 2011-03-17 16:52:04 -07:00
Makefile.in Linux 2.6.28 compat, insert_inode_locked() 2011-03-22 12:15:54 -07:00
META Prep zfs-0.6.0-rc2 tag 2011-03-09 15:26:48 -08:00
OPENSOLARIS.LICENSE Add CDDL license file 2008-12-01 14:49:34 -08:00
README.markdown Fix markdown rendering 2010-09-15 09:09:37 -07:00
zfs_config.h.in Linux 2.6.28 compat, insert_inode_locked() 2011-03-22 12:15:54 -07:00
zfs-modules.spec.in Update CHAOS 5 Packaging 2011-03-31 13:49:42 -07:00
zfs-script-config.sh.in Unconditionally load core kernel modules 2010-11-11 11:38:25 -08:00
ZFS.RELEASE Update to onnv_147 2010-08-26 14:24:34 -07:00
zfs.spec.in Spec file compat, %{datadir} 2011-03-25 10:08:49 -07:00

Native ZFS for Linux! ZFS is an advanced file system and volume manager which was originally developed for Solaris. It has been successfully ported to FreeBSD and now there is a functional Linux ZFS kernel port too. The port currently includes a fully functional and stable SPA, DMU, and ZVOL with a ZFS Posix Layer (ZPL) on the way!

$ ./configure
$ make pkg

Full documentation for building, configuring, and using ZFS can be found at: http://zfsonlinux.org