mirror_zfs/cmd
Brian Behlendorf 7657defc48 Introduce ARC Buffer Data (ABD)
ZFS currently uses ARC buffers which are backed by virtual memory.
While functional, there are some major problems with this approach
which can be observed on all OpenZFS platforms.  ABD was designed
to address these issues and includes contributions from OpenZFS
developers from multiple platforms.

While all OpenZFS platforms will benefit from ABD this functionality
is critical for Linux.  Unlike the other OpenZFS platforms the Linux
kernel discourages extensive use of virtual memory.  The provided
interfaces are not optimized for frequent allocations from the virtual
address space.  To maintain good performance a kmem cache is
used which contains relatively long lived slabs backed by virtual
memory.  The downside to the approach is that those slabs can
become highly fragmented resulting in an inefficient use of memory.

Another issue is that on 32-bit systems the available virtual
address space in the kernel is only a small fraction of total
system memory.  This means the ARC size is highly constrained
which hurts performance and make allocating memory difficult
and OOMs more likely.

ABD is designed to address these issues by using scatter lists
of pages for data buffers.  This removes the need for slabs
which resolves the fragmentation issue.  It also allows high
memory pages to be allocated which alleviates the virtual
address space pressure on 32-bit systems.

For metadata buffers, which are small, linear ABDs are allocated
from the slab.  This is preferable because there are many places
in the code which expect to be able to read from a given offset
in the buffer.  Using linear ABDs means none of that code needs
to be modified.  The majority of these buffers are allocated with
kmalloc so there's minimal impact of the virtual address space.

Tested-by: Kash Pande <kash@tripleback.net>
Tested-by: kernelOfTruth <kerneloftruth@gmail.com>
Tested-by: RageLtMan <rageltman@sempervictus>
Tested-by: DHE <git@dehacked.net>
Reviewed-by: Chunwei Chen <david.chen@osnexus.com>
Reviewed-by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed-by: David Quigley <david.quigley@intel.com>
Reviewed-by: Gvozden Neskovic <neskovic@gmail.com>
Reviewed-by: Tom Caputi <tcaputi@datto.com>
Reviewed-by: Isaac Huang <he.huang@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #3441 
Closes #5135
2016-11-30 14:48:16 -07:00
..
arc_summary Correct style in arcstat and arc_summary 2016-10-06 10:04:54 -07:00
arcstat Correct exit code for dbufstat -v and arcstat -v 2016-10-06 10:52:21 -07:00
dbufstat Correct exit code for dbufstat -v and arcstat -v 2016-10-06 10:52:21 -07:00
fsck_zfs Add /sbin/fsck.zfs helper 2013-01-09 16:54:58 -08:00
mount_zfs Change /etc/mtab to /proc/self/mounts 2016-09-20 10:07:58 -07:00
raidz_test ABD raidz avx512f support 2016-11-29 14:34:33 -08:00
vdev_id Add extra keyword 'slot' to vdev_id.conf 2015-08-30 10:03:56 -07:00
zdb DLPX-44812 integrate EP-220 large memory scalability 2016-11-29 14:34:27 -08:00
zed Add -c to zpool iostat & status to run command 2016-11-29 14:45:38 -07:00
zfs Allow zfs unshare <protocol> -a 2016-11-29 12:22:38 -07:00
zhack Fix zhack argument processing 2016-08-31 14:32:46 -07:00
zinject Fix coverity defects: CID 147443, 147656, 147655, 147441, 147653 2016-09-29 13:33:09 -07:00
zpios Fix coverity defects: CID 147643, 152204, 49339 2016-10-18 10:43:22 -07:00
zpool Fix coverity defects: CID 154591 2016-11-30 10:48:01 -07:00
zstreamdump zstreamdump needs to initialize fletcher 4 support 2016-11-29 14:47:05 -07:00
ztest DLPX-44812 integrate EP-220 large memory scalability 2016-11-29 14:34:27 -08:00
zvol_id OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
Makefile.am SIMD implementation of vdev_raidz generate and reconstruct routines 2016-06-21 09:27:26 -07:00