zfs/include/os/linux/spl/sys
Matthew Ahrens b3212d2fa6
Improve performance of zio_taskq_member
__zio_execute() calls zio_taskq_member() to determine if we are running
in a zio interrupt taskq, in which case we may need to switch to
processing this zio in a zio issue taskq.  The call to
zio_taskq_member() can become a performance bottleneck when we are
processing a high rate of zio's.

zio_taskq_member() calls taskq_member() on each of the zio interrupt
taskqs, of which there are 21.  This is slow because each call to
taskq_member() does tsd_get(taskq_tsd), which on Linux is relatively
slow.

This commit improves the performance of zio_taskq_member() by having it
cache the value of tsd_get(taskq_tsd), reducing the number of those
calls to 1/21th of the current behavior.

In a test case running `zfs send -c >/dev/null` of a filesystem with
small blocks (average 2.5KB/block), zio_taskq_member() was using 6.7% of
one CPU, and with this change it is reduced to 1.3%.  Overall time to
perform the `zfs send` reduced by 10% (~150,000 block/sec to ~165,000
blocks/sec).

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #10070
2020-03-03 10:29:38 -08:00
..
Makefile.am Add zfs_file_* interface, remove vnodes 2019-11-21 09:32:57 -08:00
acl.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
atomic.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
byteorder.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
callb.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
callo.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
cmn_err.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
condvar.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
console.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
cred.h Linux compat: Minimum kernel version 3.10 2019-11-12 08:59:06 -08:00
ctype.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
debug.h Remove stale ASSERTV comment 2019-12-06 09:33:27 -08:00
disp.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
dkio.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
errno.h Move platform dependent errno aliases 2019-10-25 13:40:50 -07:00
fcntl.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
file.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
inttypes.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
isa_defs.h Preliminary support for RV64G 2019-11-06 10:56:09 -08:00
kmem.h Make use of kvmalloc if available and fix vmem_alloc implementation 2019-11-13 10:05:10 -08:00
kmem_cache.h Add kmem_cache flag for forcing kvmalloc 2019-11-13 10:05:23 -08:00
kstat.h Linux 5.6 compat: struct proc_ops 2020-02-07 11:03:53 -08:00
list.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
mod_os.h Wrap Linux module macros 2019-11-01 10:41:03 -07:00
mutex.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
param.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
proc.h Linux compat: Minimum kernel version 3.10 2019-11-12 08:59:06 -08:00
processor.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
procfs_list.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
random.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
rwlock.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
shrinker.h Linux compat: Minimum kernel version 3.10 2019-11-12 08:59:06 -08:00
sid.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
signal.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
simd.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
stat.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
strings.h Linux compat: Minimum kernel version 3.10 2019-11-12 08:59:06 -08:00
sunddi.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
sysmacros.h Move linux qsort def to platform header 2019-12-03 09:49:40 -08:00
systeminfo.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
taskq.h Improve performance of zio_taskq_member 2020-03-03 10:29:38 -08:00
thread.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
time.h Linux 5.6 compat: time_t 2020-02-27 09:31:02 -08:00
timer.h Linux compat: Minimum kernel version 3.10 2019-11-12 08:59:06 -08:00
trace.h Enable use of DTRACE_PROBE* macros in "spl" module 2019-11-01 13:13:43 -07:00
trace_spl.h Add tracepoints for taskq entry lifetime events 2019-11-01 13:14:54 -07:00
trace_taskq.h Add tracepoints for taskq entry lifetime events 2019-11-01 13:14:54 -07:00
tsd.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
types.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
types32.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
uio.h Minor diff reduction with ZoF in include/sys 2019-11-27 11:11:03 -08:00
user.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
vfs.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
vmem.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
vmsystm.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
vnode.h Add zfs_file_* interface, remove vnodes 2019-11-21 09:32:57 -08:00
wait.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00
zmod.h Linux compat: Minimum kernel version 3.10 2019-11-12 08:59:06 -08:00
zone.h OpenZFS restructuring - move platform specific headers 2019-09-05 09:34:54 -07:00