freebsd-dev/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Andriy Gapon f9cdbaba8d MFV r318946: 8021 ARC buf data scatter-ization
illumos/illumos-gate@770499e185
770499e185

https://www.illumos.org/issues/8021
  The ARC buf data project (known simply as "ABD" since its genesis in the ZoL
  community) changes the way the ARC allocates `b_pdata` memory from using linear
  `void *` buffers to using scatter/gather lists of fixed-size 1KB chunks. This
  improves ZFS's performance by helping to defragment the address space occupied
  by the ARC, in particular for cases where compressed ARC is enabled. It could
  also ease future work to allocate pages directly from `segkpm` for minimal-
  overhead memory allocations, bypassing the `kmem` subsystem.
  This is essentially the same change as the one which recently landed in ZFS on
  Linux, although they made some platform-specific changes while adapting this
  work to their codebase:
  1. Implemented the equivalent of the `segkpm` suggestion for future work
  mentioned above to bypass issues that they've had with the Linux kernel memory
  allocator.
  2. Changed the internal representation of the ABD's scatter/gather list so it
  could be used to pass I/O directly into Linux block device drivers. (This
  feature is not available in the illumos block device interface yet.)

FreeBSD notes:
- the actual (default) chunk size is 4KB (despite the text above saying 1KB)
- we can try to reimplement ABDs, so that they are not permanently
  mapped into the KVA unless explicitly requested, especially on
  platforms with scarce KVA
- we can try to use unmapped I/O and avoid intermediate allocation of a
  linear, virtual memory mapped buffer
- we can try to avoid extra data copying by referring to chunks / pages
  in the original ABD

Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: John Kennedy <john.kennedy@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: Prashanth Sreenivasa <pks@delphix.com>
Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed by: Chris Williamson <chris.williamson@delphix.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
Author: Dan Kimmel <dan.kimmel@delphix.com>

MFC after:	3 weeks
2017-06-20 17:39:24 +00:00
..
sys MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
abd.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
arc.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
blkptr.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
bplist.c
bpobj.c MFC r316913: 7869 panic in bpobj_space(): null pointer dereference 2017-05-24 21:45:52 +00:00
bptree.c MFV r302661: 7082 bptree_iterate() passes wrong args to zfs_dbgmsg() 2016-09-01 15:10:40 +00:00
bqueue.c
dbuf.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
ddt_zap.c
ddt.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
dmu_diff.c MFV r302991: 6950 ARC should cache compressed data 2016-09-03 08:30:51 +00:00
dmu_object.c MFC r316914: 7801 add more by-dnode routines 2017-05-24 21:49:21 +00:00
dmu_objset.c MFV r319738: 8155 simplify dmu_write_policy handling of pre-compressed buffers 2017-06-09 15:26:03 +00:00
dmu_send.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
dmu_traverse.c Add #ifdef _KERNEL around send_holes_without_birth_time sysctl. 2016-09-29 17:48:53 +00:00
dmu_tx.c MFV r318931: 8063 verify that we do not attempt to access inactive txg 2017-05-26 11:37:11 +00:00
dmu_zfetch.c Add missed vfs.zfs.zfetch.max_idistance sysctl. 2016-12-10 21:19:27 +00:00
dmu.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
dnode_sync.c MFV r316917: 7968 multi-threaded spa_sync() 2017-05-24 22:21:24 +00:00
dnode.c MFV r316917: 7968 multi-threaded spa_sync() 2017-05-24 22:21:24 +00:00
dsl_bookmark.c MFC r316907: 1300 filename normalization doesn't work for removes 2017-05-24 21:29:31 +00:00
dsl_dataset.c MFV r316917: 7968 multi-threaded spa_sync() 2017-05-24 22:21:24 +00:00
dsl_deadlist.c MFV r319948: 5428 provide fts(), reallocarray(), and strtonum() 2017-06-14 16:42:38 +00:00
dsl_deleg.c MFV r302660: 6314 buffer overflow in dsl_dataset_name 2016-09-01 15:08:27 +00:00
dsl_destroy.c MFV r306422: 7254 ztest failed assertion in ztest_dataset_dirobj_verify: dirobjs + 1 == usedobjs 2016-09-28 23:54:47 +00:00
dsl_dir.c MFC r316912: 7793 ztest fails assertion in dmu_tx_willuse_space 2017-05-24 21:43:34 +00:00
dsl_pool.c MFV r318931: 8063 verify that we do not attempt to access inactive txg 2017-05-26 11:37:11 +00:00
dsl_prop.c MFV r302660: 6314 buffer overflow in dsl_dataset_name 2016-09-01 15:08:27 +00:00
dsl_scan.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
dsl_synctask.c
dsl_userhold.c MFV r319948: 5428 provide fts(), reallocarray(), and strtonum() 2017-06-14 16:42:38 +00:00
edonr_zfs.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
gzip.c
lz4.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
lzjb.c
metaslab.c MFV r316920: 8023 Panic destroying a metaslab deferred range tree 2017-05-24 22:25:26 +00:00
multilist.c MFV r316917: 7968 multi-threaded spa_sync() 2017-05-24 22:21:24 +00:00
range_tree.c
refcount.c MFV r304155: 7090 zfs should improve allocation order and throttle allocations 2016-09-03 10:04:37 +00:00
rrwlock.c
sa.c MFC r316924: 8061 sa_find_idx_tab can be declared more type-safely 2017-05-26 10:27:35 +00:00
sha256.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
skein_zfs.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
spa_config.c MFV r299440: 6736 ZFS per-vdev ZAPs 2016-05-11 12:54:00 +00:00
spa_errlog.c MFV r319948: 5428 provide fts(), reallocarray(), and strtonum() 2017-06-14 16:42:38 +00:00
spa_history.c MFV r302660: 6314 buffer overflow in dsl_dataset_name 2016-09-01 15:08:27 +00:00
spa_misc.c MFV r316920: 8023 Panic destroying a metaslab deferred range tree 2017-05-24 22:25:26 +00:00
spa.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
space_map.c MFV r316920: 8023 Panic destroying a metaslab deferred range tree 2017-05-24 22:25:26 +00:00
space_reftree.c
THIRDPARTYLICENSE.lz4
THIRDPARTYLICENSE.lz4.descrip
trim_map.c
txg.c MFV r318931: 8063 verify that we do not attempt to access inactive txg 2017-05-26 11:37:11 +00:00
uberblock.c
unique.c
vdev_cache.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_disk.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_file.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_geom.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_label.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_mirror.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_missing.c
vdev_queue.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_raidz.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
vdev_root.c
vdev.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
zap_leaf.c MFC r316907: 1300 filename normalization doesn't work for removes 2017-05-24 21:29:31 +00:00
zap_micro.c MFC r316914: 7801 add more by-dnode routines 2017-05-24 21:49:21 +00:00
zap.c MFC r316912: 7793 ztest fails assertion in dmu_tx_willuse_space 2017-05-24 21:43:34 +00:00
zfeature.c
zfs_acl.c MFV r319951: 8311 ZFS_READONLY is a little too strict 2017-06-14 16:55:47 +00:00
zfs_byteswap.c
zfs_ctldir.c Use whole mnt_stat.f_fsid bits for st_dev. 2017-05-27 17:00:30 +00:00
zfs_debug.c
zfs_dir.c MFC r316907: 1300 filename normalization doesn't work for removes 2017-05-24 21:29:31 +00:00
zfs_fm.c
zfs_fuid.c
zfs_ioctl.c MFV r319945,r319946: 8264 want support for promoting datasets in libzfs_core 2017-06-14 16:31:36 +00:00
zfs_log.c After some ZIL changes 6 years ago zil_slog_limit got partially broken 2016-11-17 21:01:27 +00:00
zfs_onexit.c
zfs_replay.c
zfs_rlock.c
zfs_sa.c zfs: honour and make use of vfs vnode locking protocol 2016-08-05 06:23:06 +00:00
zfs_vfsops.c MFV r319948: 5428 provide fts(), reallocarray(), and strtonum() 2017-06-14 16:42:38 +00:00
zfs_vnops.c MFV r319951: 8311 ZFS_READONLY is a little too strict 2017-06-14 16:55:47 +00:00
zfs_znode.c fix unsafe modification of zfs_vnodeops when DIAGNOSTIC is enabled 2016-11-20 14:00:50 +00:00
zfs.conf
zil.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
zio_checksum.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
zio_compress.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
zio_inject.c
zio.c MFV r318946: 8021 ARC buf data scatter-ization 2017-06-20 17:39:24 +00:00
zle.c
zrlock.c 3746 ZRLs are racy 2016-10-27 07:38:07 +00:00
zvol.c Do not invoke the resize event when previous provider's size was zero. 2017-03-01 18:03:32 +00:00