aboutsummaryrefslogtreecommitdiffstats
path: root/config/kernel-percpu.m4
diff options
context:
space:
mode:
authorAlexander Motin <[email protected]>2021-05-27 16:27:29 -0400
committerBrian Behlendorf <[email protected]>2021-06-09 13:05:34 -0700
commit85c43508f3cc5ff57b1cd53a42ea932c9c25464d (patch)
treee17168e77583fa69601fc0472d4025447cc311ef /config/kernel-percpu.m4
parent09c0a8fd1a3a69bbb212aa0f507f54d9ff55b5e2 (diff)
Introduce write-mostly sums
wmsum counters are a reduced version of aggsum counters, optimized for write-mostly scenarios. They do not provide optimized read functions, but instead allow much cheaper add function. The primary usage is infrequently read statistic counters, not requiring exact precision. The Linux implementation is directly mapped into percpu_counter KPI. The FreeBSD implementation is directly mapped into counter(9) KPI. In user-space due to lack of better implementation mapped to aggsum. Unfortunately neither Linux percpu_counter nor FreeBSD counter(9) provide sufficient functionality to completelly replace aggsum, so it still remains to be used for several hot counters. Reviewed-by: Paul Dagnelie <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: Alexander Motin <[email protected]> Sponsored-By: iXsystems, Inc. Closes #12114
Diffstat (limited to 'config/kernel-percpu.m4')
-rw-r--r--config/kernel-percpu.m427
1 files changed, 27 insertions, 0 deletions
diff --git a/config/kernel-percpu.m4 b/config/kernel-percpu.m4
index 700d97a25..5125dd5c5 100644
--- a/config/kernel-percpu.m4
+++ b/config/kernel-percpu.m4
@@ -26,6 +26,31 @@ AC_DEFUN([ZFS_AC_KERNEL_PERCPU_COUNTER_INIT], [
])
dnl #
+dnl # 4.13 API change,
+dnl # __percpu_counter_add() was renamed to percpu_counter_add_batch().
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_PERCPU_COUNTER_ADD_BATCH], [
+ ZFS_LINUX_TEST_SRC([percpu_counter_add_batch], [
+ #include <linux/percpu_counter.h>
+ ],[
+ struct percpu_counter counter;
+
+ percpu_counter_add_batch(&counter, 1, 1);
+ ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_PERCPU_COUNTER_ADD_BATCH], [
+ AC_MSG_CHECKING([whether percpu_counter_add_batch() is defined])
+ ZFS_LINUX_TEST_RESULT([percpu_counter_add_batch], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PERCPU_COUNTER_ADD_BATCH, 1,
+ [percpu_counter_add_batch() is defined])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
dnl # 5.10 API change,
dnl # The "count" was moved into ref->data, from ref
dnl #
@@ -51,10 +76,12 @@ AC_DEFUN([ZFS_AC_KERNEL_PERCPU_REF_COUNT_IN_DATA], [
])
AC_DEFUN([ZFS_AC_KERNEL_SRC_PERCPU], [
ZFS_AC_KERNEL_SRC_PERCPU_COUNTER_INIT
+ ZFS_AC_KERNEL_SRC_PERCPU_COUNTER_ADD_BATCH
ZFS_AC_KERNEL_SRC_PERCPU_REF_COUNT_IN_DATA
])
AC_DEFUN([ZFS_AC_KERNEL_PERCPU], [
ZFS_AC_KERNEL_PERCPU_COUNTER_INIT
+ ZFS_AC_KERNEL_PERCPU_COUNTER_ADD_BATCH
ZFS_AC_KERNEL_PERCPU_REF_COUNT_IN_DATA
])