Mercurial > illumos > illumos-gate
changeset 970:4574571f2d00
6337564 kcage_cageout() daemon thread hangs up when kernel_cage_enable=1
author | vb70745 |
---|---|
date | Tue, 22 Nov 2005 13:37:40 -0800 |
parents | d3e3a7657934 |
children | 4c0e728a52f0 |
files | usr/src/uts/common/os/mem_cage.c |
diffstat | 1 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/os/mem_cage.c Tue Nov 22 12:35:05 2005 -0800 +++ b/usr/src/uts/common/os/mem_cage.c Tue Nov 22 13:37:40 2005 -0800 @@ -249,6 +249,7 @@ pgcnt_t kcage_desfree; pgcnt_t kcage_minfree; pgcnt_t kcage_throttlefree; +pgcnt_t kcage_reserve; int kcage_maxwait = 10; /* in seconds */ /* when we use lp for kmem we start the cage at a higher initial value */ @@ -918,6 +919,7 @@ static pgcnt_t init_desfree; static pgcnt_t init_minfree; static pgcnt_t init_throttlefree; + static pgcnt_t init_reserve; /* TODO: any reason to take more care than this with live editing? */ mutex_enter(&kcage_cageout_mutex); @@ -929,11 +931,13 @@ init_desfree = kcage_desfree; init_minfree = kcage_minfree; init_throttlefree = kcage_throttlefree; + init_reserve = kcage_reserve; } else { kcage_lotsfree = init_lotsfree; kcage_desfree = init_desfree; kcage_minfree = init_minfree; kcage_throttlefree = init_throttlefree; + kcage_reserve = init_reserve; } if (kcage_lotsfree == 0) @@ -948,6 +952,9 @@ if (kcage_throttlefree == 0) kcage_throttlefree = MAX(32, kcage_minfree / 2); + if (kcage_reserve == 0) + kcage_reserve = MIN(32, kcage_throttlefree / 2); + mutex_exit(&freemem_lock); mutex_exit(&kcage_cageout_mutex); @@ -1030,9 +1037,10 @@ } /* - * Don't throttle real-time threads. + * Don't throttle real-time threads if kcage_freemem > kcage_reserve. */ - if (DISP_PRIO(curthread) > maxclsyspri) { + if (DISP_PRIO(curthread) > maxclsyspri && + kcage_freemem > kcage_reserve) { KCAGE_STAT_INCR(kct_exempt); /* unprotected incr. */ return (KCT_CRIT); }