summaryrefslogtreecommitdiffstats
path: root/module/zfs/spa.c
diff options
context:
space:
mode:
authorMatthew Macy <[email protected]>2020-09-04 11:13:27 -0700
committerGitHub <[email protected]>2020-09-04 11:13:27 -0700
commit7432d29760ebce2415a696bb5fb443c50969e7be (patch)
treee8535a53951f92fc7c43d3bc3511803bab52fa04 /module/zfs/spa.c
parentef55446a9ce6a666eb843126eca8a715ff3bb0d6 (diff)
FreeBSD: reduce priority of ZIO_TASKQ_ISSUE writes by a larger value
On FreeBSD, if priorities divided by four (RQ_PPQ) are equal then a difference between them is insignificant. In other words, incrementing pri by only one as on Linux is insufficient. Reviewed-by: Alexander Motin <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Matt Macy <[email protected]> Closes #10872
Diffstat (limited to 'module/zfs/spa.c')
-rw-r--r--module/zfs/spa.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/module/zfs/spa.c b/module/zfs/spa.c
index 015996d15..0bf0e366a 100644
--- a/module/zfs/spa.c
+++ b/module/zfs/spa.c
@@ -1000,13 +1000,25 @@ spa_taskqs_init(spa_t *spa, zio_type_t t, zio_taskq_type_t q)
/*
* The write issue taskq can be extremely CPU
* intensive. Run it at slightly less important
- * priority than the other taskqs. Under Linux this
- * means incrementing the priority value on platforms
- * like illumos it should be decremented.
+ * priority than the other taskqs.
+ *
+ * Under Linux and FreeBSD this means incrementing
+ * the priority value as opposed to platforms like
+ * illumos where it should be decremented.
+ *
+ * On FreeBSD, if priorities divided by four (RQ_PPQ)
+ * are equal then a difference between them is
+ * insignificant.
*/
- if (t == ZIO_TYPE_WRITE && q == ZIO_TASKQ_ISSUE)
+ if (t == ZIO_TYPE_WRITE && q == ZIO_TASKQ_ISSUE) {
+#if defined(__linux__)
pri++;
-
+#elif defined(__FreeBSD__)
+ pri += 4;
+#else
+#error "unknown OS"
+#endif
+ }
tq = taskq_create_proc(name, value, pri, 50,
INT_MAX, spa->spa_proc, flags);
}