summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/os/kmem.c
diff options
context:
space:
mode:
authorTim Kordas <tim.kordas@joyent.com>2017-10-13 17:10:52 -0700
committerTim Kordas <tim.kordas@joyent.com>2017-10-25 16:47:48 +0000
commitdaa3911f02365820bf2df2a1cdf96602eda66912 (patch)
tree65b452006c58dc88f7955a09bfb3cb94dff79f8c /usr/src/uts/common/os/kmem.c
parente0c6772393ee04366494174e8e95ba7bcc980ed7 (diff)
downloadillumos-joyent-release-20171026.tar.gz
OS-6363 system went to dark side of moon for ~467 secondsrelease-20171026
OS-6404 ARC reclaim should throttle its calls to arc_kmem_reap_now() Reviewed by: Bryan Cantrill <bryan@joyent.com> Reviewed by: Dan McDonald <danmcd@joyent.com> Approved by: Bryan Cantrill <bryan@joyent.com>
Diffstat (limited to 'usr/src/uts/common/os/kmem.c')
-rw-r--r--usr/src/uts/common/os/kmem.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/usr/src/uts/common/os/kmem.c b/usr/src/uts/common/os/kmem.c
index 1243d0fbbf..052bdb62ca 100644
--- a/usr/src/uts/common/os/kmem.c
+++ b/usr/src/uts/common/os/kmem.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2015 Joyent, Inc. All rights reserved.
+ * Copyright (c) 2017, Joyent, Inc.
* Copyright (c) 2012, 2017 by Delphix. All rights reserved.
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
*/
@@ -3287,10 +3287,27 @@ kmem_cache_magazine_enable(kmem_cache_t *cp)
}
/*
- * Reap (almost) everything right now.
+ * Allow our caller to determine if there are running reaps.
+ *
+ * This call is very conservative and may return B_TRUE even when
+ * reaping activity isn't active. If it returns B_FALSE, then reaping
+ * activity is definitely inactive.
+ */
+boolean_t
+kmem_cache_reap_active(void)
+{
+ return (!taskq_empty(kmem_taskq));
+}
+
+/*
+ * Reap (almost) everything soon.
+ *
+ * Note: this does not wait for the reap-tasks to complete. Caller
+ * should use kmem_cache_reap_active() (above) and/or moderation to
+ * avoid scheduling too many reap-tasks.
*/
void
-kmem_cache_reap_now(kmem_cache_t *cp)
+kmem_cache_reap_soon(kmem_cache_t *cp)
{
ASSERT(list_link_active(&cp->cache_link));
@@ -3298,7 +3315,6 @@ kmem_cache_reap_now(kmem_cache_t *cp)
(void) taskq_dispatch(kmem_taskq,
(task_func_t *)kmem_depot_ws_reap, cp, TQ_SLEEP);
- taskq_wait(kmem_taskq);
}
/*