Print this page
patch segpcache-maxwindow-is-useless
@@ -124,11 +124,10 @@
/*
* The following variables can be tuned via /etc/system.
*/
int segpcache_enabled = 1; /* if 1, shadow lists are cached */
-pgcnt_t segpcache_maxwindow = 0; /* max # of pages that can be cached */
ulong_t segpcache_hashsize_win = 0; /* # of non wired buckets */
ulong_t segpcache_hashsize_wired = 0; /* # of wired buckets */
int segpcache_reap_sec = 1; /* reap check rate in secs */
clock_t segpcache_reap_ticks = 0; /* reap interval in ticks */
int segpcache_pcp_maxage_sec = 1; /* pcp max age in secs */
@@ -147,18 +146,17 @@
/*
* Keep frequently used variables together in one cache line.
*/
static struct p_ctrl1 {
uint_t p_disabled; /* if not 0, caching temporarily off */
- pgcnt_t p_maxwin; /* max # of pages that can be cached */
size_t p_hashwin_sz; /* # of non wired buckets */
struct seg_phash *p_htabwin; /* hash table for non wired entries */
size_t p_hashwired_sz; /* # of wired buckets */
struct seg_phash_wired *p_htabwired; /* hash table for wired entries */
kmem_cache_t *p_kmcache; /* kmem cache for seg_pcache structs */
#ifdef _LP64
- ulong_t pad[1];
+ ulong_t pad[2];
#endif /* _LP64 */
} pctrl1;
static struct p_ctrl2 {
kmutex_t p_mem_mtx; /* protects window counter and p_halinks */
@@ -179,11 +177,10 @@
ulong_t pad[3];
#endif /* _LP64 */
} pctrl3;
#define seg_pdisabled pctrl1.p_disabled
-#define seg_pmaxwindow pctrl1.p_maxwin
#define seg_phashsize_win pctrl1.p_hashwin_sz
#define seg_phashtab_win pctrl1.p_htabwin
#define seg_phashsize_wired pctrl1.p_hashwired_sz
#define seg_phashtab_wired pctrl1.p_htabwired
#define seg_pkmcache pctrl1.p_kmcache
@@ -754,14 +751,10 @@
if (IS_PFLAGS_WIRED(flags)) {
return (SEGP_SUCCESS);
}
- if (seg_plocked_window + btop(len) > seg_pmaxwindow) {
- return (SEGP_FAIL);
- }
-
if (freemem < desfree) {
return (SEGP_FAIL);
}
return (SEGP_SUCCESS);
@@ -827,14 +820,10 @@
ASSERT((len & PAGEOFFSET) == 0);
npages = btop(len);
mutex_enter(&seg_pmem_mtx);
if (!IS_PFLAGS_WIRED(flags)) {
- if (seg_plocked_window + npages > seg_pmaxwindow) {
- mutex_exit(&seg_pmem_mtx);
- return (SEGP_FAIL);
- }
seg_plocked_window += npages;
}
seg_plocked += npages;
mutex_exit(&seg_pmem_mtx);
@@ -946,11 +935,10 @@
int hlinks = 0;
int hlix;
pcache_link_t *hlinkp;
pcache_link_t *hlnextp = NULL;
int lowmem;
- int trim;
ASSERT(seg_phashsize_win != 0);
/*
* if the cache is off or empty, return
@@ -959,11 +947,10 @@
return;
}
if (!force) {
lowmem = 0;
- trim = 0;
if (freemem < lotsfree + needfree) {
spgcnt_t fmem = MAX((spgcnt_t)(freemem - needfree), 0);
if (fmem <= 5 * (desfree >> 2)) {
lowmem = 1;
} else if (fmem <= 7 * (lotsfree >> 3)) {
@@ -976,14 +963,11 @@
3 * (availrmem_initial >> 2)) {
lowmem = 1;
}
}
}
- if (seg_plocked_window >= 7 * (seg_pmaxwindow >> 3)) {
- trim = 1;
- }
- if (!lowmem && !trim) {
+ if (!lowmem) {
return;
}
npgs_to_purge = seg_plocked_window >>
seg_pshrink_shift;
if (lowmem) {
@@ -1107,11 +1091,11 @@
}
if (!force) {
if (npgs_purged >= npgs_to_purge) {
break;
}
- if (!trim && !(seg_pathr_full_ahb & 15)) {
+ if (!(seg_pathr_full_ahb & 15)) {
ASSERT(lowmem);
if (freemem >= lotsfree + needfree) {
break;
}
}
@@ -1468,29 +1452,10 @@
hp->p_hnext = (struct seg_pcache *)hp;
hp->p_hprev = (struct seg_pcache *)hp;
mutex_init(&hp->p_hmutex, NULL, MUTEX_DEFAULT, NULL);
}
- if (segpcache_maxwindow == 0) {
- if (physmegs < 64) {
- /* 3% of memory */
- segpcache_maxwindow = availrmem >> 5;
- } else if (physmegs < 512) {
- /* 12% of memory */
- segpcache_maxwindow = availrmem >> 3;
- } else if (physmegs < 1024) {
- /* 25% of memory */
- segpcache_maxwindow = availrmem >> 2;
- } else if (physmegs < 2048) {
- /* 50% of memory */
- segpcache_maxwindow = availrmem >> 1;
- } else {
- /* no limit */
- segpcache_maxwindow = (pgcnt_t)-1;
- }
- }
- seg_pmaxwindow = segpcache_maxwindow;
seg_pinit_mem_config();
}
/*
* called by pageout if memory is low