vm_meter.c (77582) | vm_meter.c (79224) |
---|---|
1/* 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)vm_meter.c 8.4 (Berkeley) 1/4/94 | 1/* 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)vm_meter.c 8.4 (Berkeley) 1/4/94 |
34 * $FreeBSD: head/sys/vm/vm_meter.c 77582 2001-06-01 13:23:28Z tmm $ | 34 * $FreeBSD: head/sys/vm/vm_meter.c 79224 2001-07-04 16:20:28Z dillon $ |
35 */ 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/kernel.h> 40#include <sys/lock.h> 41#include <sys/mutex.h> 42#include <sys/proc.h> --- 97 unchanged lines hidden (view full) --- 140 vm_map_t map; 141 int paging; 142 143 totalp = &total; 144 bzero(totalp, sizeof *totalp); 145 /* 146 * Mark all objects as inactive. 147 */ | 35 */ 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/kernel.h> 40#include <sys/lock.h> 41#include <sys/mutex.h> 42#include <sys/proc.h> --- 97 unchanged lines hidden (view full) --- 140 vm_map_t map; 141 int paging; 142 143 totalp = &total; 144 bzero(totalp, sizeof *totalp); 145 /* 146 * Mark all objects as inactive. 147 */ |
148 mtx_lock(&vm_mtx); | 148 GIANT_REQUIRED; |
149 TAILQ_FOREACH(object, &vm_object_list, object_list) 150 vm_object_clear_flag(object, OBJ_ACTIVE); | 149 TAILQ_FOREACH(object, &vm_object_list, object_list) 150 vm_object_clear_flag(object, OBJ_ACTIVE); |
151 mtx_unlock(&vm_mtx); | |
152 /* 153 * Calculate process statistics. 154 */ 155 sx_slock(&allproc_lock); 156 LIST_FOREACH(p, &allproc, p_list) { 157 if (p->p_flag & P_SYSTEM) 158 continue; 159 mtx_lock_spin(&sched_lock); --- 34 unchanged lines hidden (view full) --- 194 } 195 break; 196 } 197 mtx_unlock_spin(&sched_lock); 198 /* 199 * Note active objects. 200 */ 201 paging = 0; | 151 /* 152 * Calculate process statistics. 153 */ 154 sx_slock(&allproc_lock); 155 LIST_FOREACH(p, &allproc, p_list) { 156 if (p->p_flag & P_SYSTEM) 157 continue; 158 mtx_lock_spin(&sched_lock); --- 34 unchanged lines hidden (view full) --- 193 } 194 break; 195 } 196 mtx_unlock_spin(&sched_lock); 197 /* 198 * Note active objects. 199 */ 200 paging = 0; |
202 mtx_lock(&vm_mtx); | |
203 for (map = &p->p_vmspace->vm_map, entry = map->header.next; 204 entry != &map->header; entry = entry->next) { 205 if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) || 206 entry->object.vm_object == NULL) 207 continue; 208 vm_object_set_flag(entry->object.vm_object, OBJ_ACTIVE); 209 paging |= entry->object.vm_object->paging_in_progress; 210 } | 201 for (map = &p->p_vmspace->vm_map, entry = map->header.next; 202 entry != &map->header; entry = entry->next) { 203 if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) || 204 entry->object.vm_object == NULL) 205 continue; 206 vm_object_set_flag(entry->object.vm_object, OBJ_ACTIVE); 207 paging |= entry->object.vm_object->paging_in_progress; 208 } |
211 mtx_unlock(&vm_mtx); | |
212 if (paging) 213 totalp->t_pw++; 214 } 215 sx_sunlock(&allproc_lock); 216 /* 217 * Calculate object memory usage statistics. 218 */ | 209 if (paging) 210 totalp->t_pw++; 211 } 212 sx_sunlock(&allproc_lock); 213 /* 214 * Calculate object memory usage statistics. 215 */ |
219 mtx_lock(&vm_mtx); | |
220 TAILQ_FOREACH(object, &vm_object_list, object_list) { 221 /* 222 * devices, like /dev/mem, will badly skew our totals 223 */ 224 if (object->type == OBJT_DEVICE) 225 continue; 226 totalp->t_vm += object->size; 227 totalp->t_rm += object->resident_page_count; --- 7 unchanged lines hidden (view full) --- 235 totalp->t_rmshr += object->resident_page_count; 236 if (object->flags & OBJ_ACTIVE) { 237 totalp->t_avmshr += object->size; 238 totalp->t_armshr += object->resident_page_count; 239 } 240 } 241 } 242 totalp->t_free = cnt.v_free_count + cnt.v_cache_count; | 216 TAILQ_FOREACH(object, &vm_object_list, object_list) { 217 /* 218 * devices, like /dev/mem, will badly skew our totals 219 */ 220 if (object->type == OBJT_DEVICE) 221 continue; 222 totalp->t_vm += object->size; 223 totalp->t_rm += object->resident_page_count; --- 7 unchanged lines hidden (view full) --- 231 totalp->t_rmshr += object->resident_page_count; 232 if (object->flags & OBJ_ACTIVE) { 233 totalp->t_avmshr += object->size; 234 totalp->t_armshr += object->resident_page_count; 235 } 236 } 237 } 238 totalp->t_free = cnt.v_free_count + cnt.v_cache_count; |
243 mtx_unlock(&vm_mtx); | |
244 return (sysctl_handle_opaque(oidp, totalp, sizeof total, req)); 245} 246 247SYSCTL_PROC(_vm, VM_METER, vmmeter, CTLTYPE_OPAQUE|CTLFLAG_RD, 248 0, sizeof(struct vmtotal), vmtotal, "S,vmtotal", 249 "System virtual memory statistics"); 250SYSCTL_NODE(_vm, OID_AUTO, stats, CTLFLAG_RW, 0, "VM meter stats"); 251SYSCTL_NODE(_vm_stats, OID_AUTO, sys, CTLFLAG_RW, 0, "VM meter sys stats"); --- 114 unchanged lines hidden --- | 239 return (sysctl_handle_opaque(oidp, totalp, sizeof total, req)); 240} 241 242SYSCTL_PROC(_vm, VM_METER, vmmeter, CTLTYPE_OPAQUE|CTLFLAG_RD, 243 0, sizeof(struct vmtotal), vmtotal, "S,vmtotal", 244 "System virtual memory statistics"); 245SYSCTL_NODE(_vm, OID_AUTO, stats, CTLFLAG_RW, 0, "VM meter stats"); 246SYSCTL_NODE(_vm_stats, OID_AUTO, sys, CTLFLAG_RW, 0, "VM meter sys stats"); --- 114 unchanged lines hidden --- |