summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-06-17 08:09:40 +0000
committermav <mav@FreeBSD.org>2014-06-17 08:09:40 +0000
commit7b99979e56176d928b7d97a29875a26f25f74936 (patch)
treee1809f48d7900eca83a21e2eb54b7c7969093258
parentd418fd00cccabf30d672bf6253a9a501cec23629 (diff)
downloadFreeBSD-src-7b99979e56176d928b7d97a29875a26f25f74936.zip
FreeBSD-src-7b99979e56176d928b7d97a29875a26f25f74936.tar.gz
MFC r267029, r267038:
Replace gethrtime() with cpu_ticks(), as source of random for the taskqueue selection. gethrtime() in our port updated with HZ rate, so unusable for this specific purpose, completely draining benefit of multiple taskqueues.
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
index 6ab48ca..adee7b6 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
@@ -953,7 +953,11 @@ spa_taskq_dispatch_ent(spa_t *spa, zio_type_t t, zio_taskq_type_t q,
if (tqs->stqs_count == 1) {
tq = tqs->stqs_taskq[0];
} else {
+#ifdef _KERNEL
+ tq = tqs->stqs_taskq[cpu_ticks() % tqs->stqs_count];
+#else
tq = tqs->stqs_taskq[gethrtime() % tqs->stqs_count];
+#endif
}
taskq_dispatch_ent(tq, func, arg, flags, ent);
OpenPOWER on IntegriCloud