diff options
author | Tim Kordas <tim.kordas@joyent.com> | 2017-10-13 17:10:52 -0700 |
---|---|---|
committer | Tim Kordas <tim.kordas@joyent.com> | 2017-10-25 16:47:48 +0000 |
commit | daa3911f02365820bf2df2a1cdf96602eda66912 (patch) | |
tree | 65b452006c58dc88f7955a09bfb3cb94dff79f8c /usr/src/uts/common/os/kmem.c | |
parent | e0c6772393ee04366494174e8e95ba7bcc980ed7 (diff) | |
download | illumos-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.c | 24 |
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); } /* |