freebsd-nq/module/zfs
Chunwei Chen 8e71ab99dc Batch free zpl_posix_acl_release
Currently every calls to zpl_posix_acl_release will schedule a delayed task,
and each delayed task will add a timer. This used to be fine except for
possibly bad performance impact.

However, in Linux 4.8, a new timer wheel implementation[1] is introduced. In
this new implementation, the larger the delay, the less accuracy the timer is.
So when we have a flood of timer from zpl_posix_acl_release, they will expire
at the same time. Couple with the fact that task_expire will do linear search
with lock held. This causes an extreme amount of contention inside interrupt
and would actually lockup the system.

We fix this by doing batch free to prevent a flood of delayed task. Every call
to zpl_posix_acl_release will put the posix_acl to be freed on a lockless
list. Every batch window, 1 sec, the zpl_posix_acl_free will fire up and free
every posix_acl that passed the grace period on the list. This way, we only
have one delayed task every second.

[1] https://lwn.net/Articles/646950/

Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
2016-11-07 11:04:44 -08:00
..
arc.c Use vmem_size() for 32-bit systems 2016-11-02 12:14:45 -07:00
blkptr.c Illumos 4757, 4913 2014-08-01 14:28:05 -07:00
bplist.c Change KM_PUSHPAGE -> KM_SLEEP 2015-01-16 14:41:26 -08:00
bpobj.c Illumos 5810 - zdb should print details of bpobj 2015-05-11 15:10:24 -07:00
bptree.c Illumos 5960, 5925 2016-01-08 15:08:19 -08:00
bqueue.c Fix coverity defects: CID 147565-147567 2016-10-07 13:19:43 -07:00
dbuf_stats.c OpenZFS 6950 - ARC should cache compressed data 2016-09-13 09:58:33 -07:00
dbuf.c Fix coverity defects: CID 150943, 150938 2016-10-13 14:30:50 -07:00
ddt_zap.c Change KM_PUSHPAGE -> KM_SLEEP 2015-01-16 14:41:26 -08:00
ddt.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
dmu_diff.c OpenZFS 6950 - ARC should cache compressed data 2016-09-13 09:58:33 -07:00
dmu_object.c Implement large_dnode pool feature 2016-06-24 13:13:21 -07:00
dmu_objset.c Add TASKQID_INVALID 2016-11-02 12:14:45 -07:00
dmu_send.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
dmu_traverse.c Add TASKQID_INVALID 2016-11-02 12:14:45 -07:00
dmu_tx.c Fix coverity defects: CID 147553 2016-11-01 10:20:24 -07:00
dmu_zfetch.c OpenZFS 6322 - ZFS indirect block predictive prefetch 2016-08-30 14:26:55 -07:00
dmu.c Fix coverity defects: CID 152975 2016-10-31 16:23:56 -07:00
dnode_sync.c Add support for user/group dnode accounting & quota 2016-10-07 09:45:13 -07:00
dnode.c OpenZFS 6988 spa_sync() spends half its time in dmu_objset_do_userquota_updates 2016-10-07 09:45:13 -07:00
dsl_bookmark.c OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
dsl_dataset.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
dsl_deadlist.c Performance optimization of AVL tree comparator functions 2016-08-31 14:35:34 -07:00
dsl_deleg.c Performance optimization of AVL tree comparator functions 2016-08-31 14:35:34 -07:00
dsl_destroy.c OpenZFS 2605, 6980, 6902 2016-06-28 13:47:02 -07:00
dsl_dir.c Fix coverity defects: 147658, 147652, 147651 2016-09-29 12:06:14 -07:00
dsl_pool.c Fix file permissions 2016-10-08 14:57:56 -07:00
dsl_prop.c Fix dsl_prop_get_all_dsl() memory leak 2016-11-02 12:34:10 -07:00
dsl_scan.c OpenZFS 6950 - ARC should cache compressed data 2016-09-13 09:58:33 -07:00
dsl_synctask.c Illumos 4951 - ZFS administrative commands should use reserved space 2015-05-04 09:41:10 -07:00
dsl_userhold.c OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
edonr_zfs.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
fm.c Multipath autoreplace, control enclosure LEDs, event rate limiting 2016-10-19 12:55:59 -07:00
gzip.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
lz4.c Change KM_PUSHPAGE -> KM_SLEEP 2015-01-16 14:41:26 -08:00
lzjb.c Change KM_PUSHPAGE -> KM_SLEEP 2015-01-16 14:41:26 -08:00
Makefile.in Add parity generation/rebuild using AVX-512 for x86-64 2016-11-02 12:40:23 -07:00
metaslab.c Add TASKQID_INVALID 2016-11-02 12:14:45 -07:00
multilist.c Identify locks flagged by lockdep 2015-12-22 10:21:33 -08:00
pathname.c Add pn_alloc()/pn_free() functions 2016-04-21 09:49:25 -07:00
policy.c Fix NFS credential 2016-06-21 09:58:37 -07:00
range_tree.c Performance optimization of AVL tree comparator functions 2016-08-31 14:35:34 -07:00
refcount.c OpenZFS 7090 - zfs should throttle allocations 2016-10-13 17:59:18 -07:00
rrwlock.c Illumos 5008 - lock contention (rrw_exit) while running a read only load 2015-07-06 09:34:13 -07:00
sa.c Fix sa_legacy_attr_count to use ARRAY_SIZE 2016-11-02 10:26:12 -07:00
sha256.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
skein_zfs.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
spa_boot.c Add linux kernel module support 2010-08-31 13:41:58 -07:00
spa_config.c Fix coverity defects: CID 147565-147567 2016-10-07 13:19:43 -07:00
spa_errlog.c Illumos 4914 - zfs on-disk bookmark structure should be named *_phys_t 2014-08-06 14:48:41 -07:00
spa_history.c Fix indefinite article 2016-08-11 11:23:49 -07:00
spa_misc.c OpenZFS 7090 - zfs should throttle allocations 2016-10-13 17:59:18 -07:00
spa_stats.c Explicit integer promotion for bit shift operations 2016-09-29 15:55:41 -07:00
spa.c Fix coverity defects: CID 147488, 147490 2016-10-14 11:00:47 -07:00
space_map.c Illumos 5960, 5925 2016-01-08 15:08:19 -08:00
space_reftree.c Performance optimization of AVL tree comparator functions 2016-08-31 14:35:34 -07:00
trace.c OpenZFS 6531 - Provide mechanism to artificially limit disk performance 2016-05-26 10:11:51 -07:00
txg.c txg visibility code should not execute under tc_open_lock 2016-07-27 14:11:13 -07:00
uberblock.c Illumos 5347 - idle pool may run itself out of space 2015-07-14 10:35:21 -07:00
unique.c Performance optimization of AVL tree comparator functions 2016-08-31 14:35:34 -07:00
vdev_cache.c OpenZFS 7090 - zfs should throttle allocations 2016-10-13 17:59:18 -07:00
vdev_disk.c Explicit block device plugging when submitting multiple BIOs 2016-09-29 13:13:31 -07:00
vdev_file.c Add TASKQID_INVALID 2016-11-02 12:14:45 -07:00
vdev_label.c Turn on/off enclosure slot fault LED even when disk isn't present 2016-10-24 10:45:59 -07:00
vdev_mirror.c OpenZFS 7090 - zfs should throttle allocations 2016-10-13 17:59:18 -07:00
vdev_missing.c Illumos #5244 - zio pipeline callers should explicitly invoke next stage 2015-04-30 15:07:47 -07:00
vdev_queue.c OpenZFS 7090 - zfs should throttle allocations 2016-10-13 17:59:18 -07:00
vdev_raidz_math_aarch64_neon_common.h Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math_aarch64_neon.c Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math_aarch64_neonx2.c Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math_avx2.c Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math_avx512bw.c Add parity generation/rebuild using AVX-512 for x86-64 2016-11-02 12:40:23 -07:00
vdev_raidz_math_avx512f.c Add parity generation/rebuild using AVX-512 for x86-64 2016-11-02 12:40:23 -07:00
vdev_raidz_math_impl.h Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math_scalar.c Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math_sse2.c Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math_ssse3.c Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
vdev_raidz_math.c Add parity generation/rebuild using AVX-512 for x86-64 2016-11-02 12:40:23 -07:00
vdev_raidz.c OpenZFS 4185 - add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R 2016-10-03 14:51:15 -07:00
vdev_root.c Illumos #3598 2013-10-31 14:58:04 -07:00
vdev.c Add TASKQID_INVALID 2016-11-02 12:14:45 -07:00
zap_leaf.c Illumos 5314 - Remove "dbuf phys" db->db_data pointer aliases in ZFS 2015-04-28 16:25:20 -07:00
zap_micro.c Fix coverity defects: CID 147650, 147649, 147647, 147646 2016-09-25 15:08:28 -07:00
zap.c Avoid undefined shift overflow in fzap_cursor_retrieve() 2016-09-29 15:55:41 -07:00
zfeature_common.c Add support for user/group dnode accounting & quota 2016-10-07 09:45:13 -07:00
zfeature.c Revert "zhack: Add 'feature disable' command" 2016-05-17 11:52:07 -07:00
zfs_acl.c Fix unlinked file cannot do xattr operations 2016-11-04 10:46:40 -07:00
zfs_byteswap.c Add linux kernel module support 2010-08-31 13:41:58 -07:00
zfs_ctldir.c Enable .zfs/snapshot for 32-bit systems 2016-11-02 12:14:45 -07:00
zfs_debug.c Add dbgmsg kstat 2015-09-04 16:08:14 -07:00
zfs_dir.c Fix unlinked file cannot do xattr operations 2016-11-04 10:46:40 -07:00
zfs_fm.c Fix statechange-led.sh & unnecessary libdevmapper warning 2016-10-25 11:05:30 -07:00
zfs_fuid.c Fix coverity defects 2016-09-21 18:09:00 -07:00
zfs_ioctl.c Fix dsl_prop_get_all_dsl() memory leak 2016-11-02 12:34:10 -07:00
zfs_log.c Fix unlinked file cannot do xattr operations 2016-11-04 10:46:40 -07:00
zfs_onexit.c zfsdev_getminor() should check for invalid file handles 2015-06-22 17:02:13 -07:00
zfs_replay.c Fix coverity defects 2016-09-21 18:09:00 -07:00
zfs_rlock.c Performance optimization of AVL tree comparator functions 2016-08-31 14:35:34 -07:00
zfs_sa.c Use native inode->i_nlink instead of znode->z_links 2016-07-14 16:25:34 -07:00
zfs_vfsops.c Batch free zpl_posix_acl_release 2016-11-07 11:04:44 -08:00
zfs_vnops.c Add support for O_TMPFILE 2016-11-04 10:46:40 -07:00
zfs_znode.c Add support for O_TMPFILE 2016-11-04 10:46:40 -07:00
zil.c OpenZFS 6950 - ARC should cache compressed data 2016-09-13 09:58:33 -07:00
zio_checksum.c OpenZFS 6541 - Pool feature-flag check defeated if "verify" is included in the dedup property value 2016-10-03 14:51:21 -07:00
zio_compress.c Illumos 5661 - ZFS: "compression = on" should use lz4 if feature is enabled 2015-07-10 12:11:45 -07:00
zio_inject.c OpenZFS 6531 - Provide mechanism to artificially limit disk performance 2016-05-26 10:11:51 -07:00
zio.c Allow 16M zio buffers in user space 2016-11-07 10:26:17 -08:00
zle.c Update core ZFS code from build 121 to build 141. 2010-05-28 13:45:14 -07:00
zpl_ctldir.c Linux 4.9 compat: iops->rename() wants flags 2016-10-20 09:39:09 -07:00
zpl_export.c zfsctl: No need to sync ctldir inodes 2015-08-31 13:54:39 -07:00
zpl_file.c Fix cred leak in zpl_fallocate_common 2016-10-24 16:41:56 -07:00
zpl_inode.c Add support for O_TMPFILE 2016-11-04 10:46:40 -07:00
zpl_super.c Fix memleak in zpl_parse_options 2016-05-31 16:04:26 -07:00
zpl_xattr.c Batch free zpl_posix_acl_release 2016-11-07 11:04:44 -08:00
zrlock.c Illumos 5812 - assertion failed in zrl_tryenter(): zr_owner==NULL 2015-04-30 14:43:40 -07:00
zvol.c Fix 32-bit maximum volume size 2016-11-02 12:14:45 -07:00