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 <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #10872
This commit is contained in:
Matthew Macy 2020-09-04 11:13:27 -07:00 committed by Brian Behlendorf
parent c0234eab65
commit ee73a8ff3d

View File

@ -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 * The write issue taskq can be extremely CPU
* intensive. Run it at slightly less important * intensive. Run it at slightly less important
* priority than the other taskqs. Under Linux this * priority than the other taskqs.
* means incrementing the priority value on platforms *
* like illumos it should be decremented. * 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++; pri++;
#elif defined(__FreeBSD__)
pri += 4;
#else
#error "unknown OS"
#endif
}
tq = taskq_create_proc(name, value, pri, 50, tq = taskq_create_proc(name, value, pri, 50,
INT_MAX, spa->spa_proc, flags); INT_MAX, spa->spa_proc, flags);
} }