svn commit: r288544 - stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Alexander Motin
mav at FreeBSD.org
Sat Oct 3 07:25:06 UTC 2015
Author: mav
Date: Sat Oct 3 07:25:05 2015
New Revision: 288544
URL: https://svnweb.freebsd.org/changeset/base/288544
Log:
MFC r286551: 5694 traverse_prefetcher does not prefetch enough
Reviewed by: Matthew Ahrens <mahrens at delphix.com>
Reviewed by: Alex Reece <alex at delphix.com>
Reviewed by: Christopher Siden <christopher.siden at delphix.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek at nexenta.com>
Reviewed by: Bayard Bell <buffer.g.overflow at gmail.com>
Approved by: Garrett D'Amore <garrett at damore.org>
Author: George Wilson <george.wilson at delphix.com>
illumos/illumos-gate at 34d7ce052c4565b078f73b95ccbd49274e98edaa
Modified:
stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
==============================================================================
--- stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c Sat Oct 3 07:24:12 2015 (r288543)
+++ stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c Sat Oct 3 07:25:05 2015 (r288544)
@@ -39,13 +39,12 @@
#include <sys/callb.h>
#include <sys/zfeature.h>
-int zfs_pd_blks_max = 100;
+int32_t zfs_pd_bytes_max = 50 * 1024 * 1024; /* 50MB */
typedef struct prefetch_data {
kmutex_t pd_mtx;
kcondvar_t pd_cv;
- int pd_blks_max;
- int pd_blks_fetched;
+ int32_t pd_bytes_fetched;
int pd_flags;
boolean_t pd_cancel;
boolean_t pd_exited;
@@ -250,11 +249,12 @@ traverse_visitbp(traverse_data_t *td, co
}
if (pd != NULL && !pd->pd_exited && prefetch_needed(pd, bp)) {
+ uint64_t size = BP_GET_LSIZE(bp);
mutex_enter(&pd->pd_mtx);
- ASSERT(pd->pd_blks_fetched >= 0);
- while (pd->pd_blks_fetched == 0 && !pd->pd_exited)
+ ASSERT(pd->pd_bytes_fetched >= 0);
+ while (pd->pd_bytes_fetched < size && !pd->pd_exited)
cv_wait(&pd->pd_cv, &pd->pd_mtx);
- pd->pd_blks_fetched--;
+ pd->pd_bytes_fetched -= size;
cv_broadcast(&pd->pd_cv);
mutex_exit(&pd->pd_mtx);
}
@@ -447,7 +447,7 @@ traverse_prefetcher(spa_t *spa, zilog_t
prefetch_data_t *pfd = arg;
arc_flags_t aflags = ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH;
- ASSERT(pfd->pd_blks_fetched >= 0);
+ ASSERT(pfd->pd_bytes_fetched >= 0);
if (pfd->pd_cancel)
return (SET_ERROR(EINTR));
@@ -455,9 +455,9 @@ traverse_prefetcher(spa_t *spa, zilog_t
return (0);
mutex_enter(&pfd->pd_mtx);
- while (!pfd->pd_cancel && pfd->pd_blks_fetched >= pfd->pd_blks_max)
+ while (!pfd->pd_cancel && pfd->pd_bytes_fetched >= zfs_pd_bytes_max)
cv_wait(&pfd->pd_cv, &pfd->pd_mtx);
- pfd->pd_blks_fetched++;
+ pfd->pd_bytes_fetched += BP_GET_LSIZE(bp);
cv_broadcast(&pfd->pd_cv);
mutex_exit(&pfd->pd_mtx);
@@ -529,7 +529,6 @@ traverse_impl(spa_t *spa, dsl_dataset_t
td.td_hole_birth_enabled_txg = 0;
}
- pd.pd_blks_max = zfs_pd_blks_max;
pd.pd_flags = flags;
mutex_init(&pd.pd_mtx, NULL, MUTEX_DEFAULT, NULL);
cv_init(&pd.pd_cv, NULL, CV_DEFAULT, NULL);
More information about the svn-src-stable-10
mailing list