From ee73a8ff3dd8863967876bd2068f8c9152e1a3ae Mon Sep 17 00:00:00 2001 From: Matthew Macy Date: Fri, 4 Sep 2020 11:13:27 -0700 Subject: [PATCH] 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 Reviewed-by: Brian Behlendorf Signed-off-by: Matt Macy Closes #10872 --- module/zfs/spa.c | 22 +++++++++++++++++----- 1 file 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); }