Print this page

        

*** 20,30 **** */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. ! * Copyright 2012 Joyent, Inc. All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ --- 20,30 ---- */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. ! * Copyright 2011 Joyent, Inc. All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */
*** 178,204 **** return (physinstalled); case _CONFIG_AVPHYS_PAGES: /* * If the non-global zone has a phys. memory cap, use ! * the phys. memory cap - zone's rss. We always * report the system-wide value for the global zone, even ! * though memory capping can be used on the global zone too. ! * We use the cached value for the RSS since vm_getusage() ! * is so expensive and we don't need this value to be exact. */ if (!INGLOBALZONE(curproc) && curproc->p_zone->zone_phys_mem_ctl != UINT64_MAX) { pgcnt_t cap, rss, free; cap = btop(curproc->p_zone->zone_phys_mem_ctl); if (cap > physinstalled) return (freemem); ! rss = btop(curproc->p_zone->zone_phys_mem); /* ! * Because this is a soft cap, it is possible * for rss to be temporarily over the cap. */ if (cap > rss) free = cap - rss; else --- 178,207 ---- return (physinstalled); case _CONFIG_AVPHYS_PAGES: /* * If the non-global zone has a phys. memory cap, use ! * the phys. memory cap - zone's current rss. We always * report the system-wide value for the global zone, even ! * though rcapd can be used on the global zone too. */ if (!INGLOBALZONE(curproc) && curproc->p_zone->zone_phys_mem_ctl != UINT64_MAX) { pgcnt_t cap, rss, free; + vmusage_t in_use; + size_t cnt = 1; cap = btop(curproc->p_zone->zone_phys_mem_ctl); if (cap > physinstalled) return (freemem); ! if (vm_getusage(VMUSAGE_ZONE, 1, &in_use, &cnt, ! FKIOCTL) != 0) ! in_use.vmu_rss_all = 0; ! rss = btop(in_use.vmu_rss_all); /* ! * Because rcapd implements a soft cap, it is possible * for rss to be temporarily over the cap. */ if (cap > rss) free = cap - rss; else