svn commit: r319741 - vendor-sys/illumos/dist/uts/common/fs/zfs
Andriy Gapon
avg at FreeBSD.org
Fri Jun 9 15:01:19 UTC 2017
Author: avg
Date: Fri Jun 9 15:01:18 2017
New Revision: 319741
URL: https://svnweb.freebsd.org/changeset/base/319741
Log:
8156 dbuf_evict_notify() does not need dbuf_evict_lock
illumos/illumos-gate at dbfd9f930004c390a2ce2cf850c71b4f880eef9c
https://github.com/illumos/illumos-gate/commit/dbfd9f930004c390a2ce2cf850c71b4f880eef9c
https://www.illumos.org/issues/8156
dbuf_evict_notify() holds the dbuf_evict_lock while checking if it should do
the eviction itself (because the evict thread is not able to keep up).
This can result in massive lock contention.
It isn't necessary to hold the lock, because if we make the wrong choice
occasionally, nothing bad will happen.
Reviewed by: Dan Kimmel <dan.kimmel at delphix.com>
Reviewed by: Paul Dagnelie <pcd at delphix.com>
Approved by: Robert Mustacchi <rm at joyent.com>
Author: Matthew Ahrens <mahrens at delphix.com>
Modified:
vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c
Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c Fri Jun 9 15:00:13 2017 (r319740)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c Fri Jun 9 15:01:18 2017 (r319741)
@@ -561,19 +561,15 @@ dbuf_evict_notify(void)
if (tsd_get(zfs_dbuf_evict_key) != NULL)
return;
+ /*
+ * We check if we should evict without holding the dbuf_evict_lock,
+ * because it's OK to occasionally make the wrong decision here,
+ * and grabbing the lock results in massive lock contention.
+ */
if (refcount_count(&dbuf_cache_size) > dbuf_cache_max_bytes) {
- boolean_t evict_now = B_FALSE;
-
- mutex_enter(&dbuf_evict_lock);
- if (refcount_count(&dbuf_cache_size) > dbuf_cache_max_bytes) {
- evict_now = dbuf_cache_above_hiwater();
- cv_signal(&dbuf_evict_cv);
- }
- mutex_exit(&dbuf_evict_lock);
-
- if (evict_now) {
+ if (dbuf_cache_above_hiwater())
dbuf_evict_one();
- }
+ cv_signal(&dbuf_evict_cv);
}
}
More information about the svn-src-vendor
mailing list