mirror_zfs/module/os/linux/spl
Serapheim Dimitropoulos ec1fea4516
Use percpu_counter for obj_alloc counter of Linux-backed caches
A previous commit enabled the tracking of object allocations
in Linux-backed caches from the SPL layer for debuggability.
The commit is: 9a170fc6fe54f1e852b6c39630fe5ef2bbd97c16

Unfortunately, it also introduced minor performance regressions
that were highlighted by the ZFS perf test-suite. Within Delphix
we found that the regression would be from -1%, all the way up
to -8% for some workloads.

This commit brings performance back up to par by creating a
separate counter for those caches and making it a percpu in
order to avoid lock-contention.

The initial performance testing was done by myself, and the
final round was conducted by @tonynguien who was also the one
that discovered the regression and highlighted the culprit.

Reviewed-by: Matt Ahrens <matt@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes #10397
2020-06-26 18:06:50 -07:00
..
Makefile.in Add zfs_file_* interface, remove vnodes 2019-11-21 09:32:57 -08:00
README.md Change http://zfsonlinux.org links to https://zfsonlinux.org 2020-01-13 16:43:59 -08:00
spl-atomic.c OpenZFS restructuring - move platform specific sources 2019-09-06 11:26:26 -07:00
spl-condvar.c Disambiguate condvar API contract 2020-06-18 10:17:50 -07:00
spl-cred.c Linux compat: Minimum kernel version 3.10 2019-11-12 08:59:06 -08:00
spl-err.c OpenZFS restructuring - move platform specific sources 2019-09-06 11:26:26 -07:00
spl-generic.c Switch off -Wmissing-prototypes for libgcc math functions 2020-06-18 12:21:46 -07:00
spl-kmem-cache.c Use percpu_counter for obj_alloc counter of Linux-backed caches 2020-06-26 18:06:50 -07:00
spl-kmem.c Move GFP flags kernel compatibility code 2020-06-08 16:33:46 -07:00
spl-kstat.c Linux 5.6 compat: struct proc_ops 2020-02-07 11:03:53 -08:00
spl-proc.c Use percpu_counter for obj_alloc counter of Linux-backed caches 2020-06-26 18:06:50 -07:00
spl-procfs-list.c Linux 5.6 compat: struct proc_ops 2020-02-07 11:03:53 -08:00
spl-taskq.c Improve performance of zio_taskq_member 2020-03-03 10:29:38 -08:00
spl-thread.c Linux 4.14, 4.19, 5.0+ compat: SIMD save/restore 2019-10-24 10:17:33 -07:00
spl-trace.c Add tracepoints for taskq entry lifetime events 2019-11-01 13:14:54 -07:00
spl-tsd.c cppcheck: (error) Uninitialized variable 2019-12-18 17:24:29 -08:00
spl-vmem.c cppcheck: (error) Uninitialized variable 2019-12-18 17:24:29 -08:00
spl-xdr.c OpenZFS restructuring - move platform specific sources 2019-09-06 11:26:26 -07:00
spl-zlib.c Add kmem_cache flag for forcing kvmalloc 2019-11-13 10:05:23 -08:00
THIRDPARTYLICENSE.gplv2 OpenZFS restructuring - move platform specific sources 2019-09-06 11:26:26 -07:00
THIRDPARTYLICENSE.gplv2.descrip OpenZFS restructuring - move platform specific sources 2019-09-06 11:26:26 -07:00

The Solaris Porting Layer, SPL, is a Linux kernel module which provides a compatibility layer used by the ZFS on Linux project.

Installation

The latest version of the SPL is maintained as part of this repository. Only when building ZFS version 0.7.x or earlier must an external SPL release be used. These releases can be found at:

Release

The SPL is released under a GPLv2 license.
For more details see the NOTICE and THIRDPARTYLICENSE files; UCRL-CODE-235197