Print this page
*** 128,137 ****
--- 128,146 ----
#define TUNE_NVMU "phys-mcap-no-vmusage"
#define TUNE_NPAGE "phys-mcap-no-pageout"
#define TUNE_NPFTHROT "phys-mcap-no-pf-throttle"
/*
+ * The large mapping value was derived empirically by seeing that mappings
+ * much bigger than 16mb sometimes take a relatively long time to invalidate
+ * (significant fraction of a second).
+ */
+ #define SEC_INTERIM 4 /* num secs to pause after stopped too long */
+ #define MSEC_TOO_LONG 100 /* release proc. after stopped for 100ms */
+ #define LARGE_MAPPING 16384 /* >= 16MB in KB - pageout in chunks */
+
+ /*
* These are only used in get_mem_info but global. We always need scale_rss and
* prev_fast_rss to be persistent but we also have the other two global so we
* can easily see these with mdb.
*/
uint64_t scale_rss = 0;
*** 151,162 ****
static char over_cmd[2 * BUFSIZ]; /* same size as zone_attr_value */
static boolean_t skip_vmusage = B_FALSE;
static boolean_t skip_pageout = B_FALSE;
static boolean_t skip_pf_throttle = B_FALSE;
- static zlog_t *logp;
-
static int64_t check_suspend();
static void get_mcap_tunables();
/*
* Structure to hold current state about a process address space that we're
--- 160,169 ----
*** 377,387 ****
pageout_process(pid_t pid, int64_t excess)
{
int psfd;
prmap_t *pmap;
proc_map_t cur;
- int res;
int64_t sum_d_rss, d_rss;
int64_t old_rss;
int map_cnt;
psinfo_t psinfo;
char pathbuf[MAXPATHLEN];
--- 384,393 ----
*** 429,441 ****
* Within the process's address space, attempt to page out mappings.
*/
sum_d_rss = 0;
while (excess > 0 && pmap != NULL && !shutting_down) {
/* invalidate the entire mapping */
! if ((res = pageout_mapping(pid, pmap)) < 0)
debug("pid %ld: mapping 0x%p %ldkb unpageable (%d)\n",
! pid, pmap->pr_vaddr, pmap->pr_size / 1024, errno);
map_cnt++;
/*
* Re-check the process rss and get the delta.
--- 435,448 ----
* Within the process's address space, attempt to page out mappings.
*/
sum_d_rss = 0;
while (excess > 0 && pmap != NULL && !shutting_down) {
/* invalidate the entire mapping */
! if (pageout_mapping(pid, pmap) < 0)
debug("pid %ld: mapping 0x%p %ldkb unpageable (%d)\n",
! pid, (void *)pmap->pr_vaddr,
! (long)pmap->pr_size / 1024L, errno);
map_cnt++;
/*
* Re-check the process rss and get the delta.
*** 1145,1155 ****
{
int res;
shutting_down = 0;
zid = id;
- logp = zlogp;
/* all but the lx brand currently use /proc */
if (strcmp(brand_name, "lx") == 0) {
(void) snprintf(zoneproc, sizeof (zoneproc),
"%s/root/native/proc", zonepath);
--- 1152,1161 ----