160727d8bSWarner Losh /*- 2df8bae1dSRodney W. Grimes * Copyright (c) 1982, 1986, 1989, 1993 3df8bae1dSRodney W. Grimes * The Regents of the University of California. All rights reserved. 4df8bae1dSRodney W. Grimes * 5df8bae1dSRodney W. Grimes * Redistribution and use in source and binary forms, with or without 6df8bae1dSRodney W. Grimes * modification, are permitted provided that the following conditions 7df8bae1dSRodney W. Grimes * are met: 8df8bae1dSRodney W. Grimes * 1. Redistributions of source code must retain the above copyright 9df8bae1dSRodney W. Grimes * notice, this list of conditions and the following disclaimer. 10df8bae1dSRodney W. Grimes * 2. Redistributions in binary form must reproduce the above copyright 11df8bae1dSRodney W. Grimes * notice, this list of conditions and the following disclaimer in the 12df8bae1dSRodney W. Grimes * documentation and/or other materials provided with the distribution. 13df8bae1dSRodney W. Grimes * 4. Neither the name of the University nor the names of its contributors 14df8bae1dSRodney W. Grimes * may be used to endorse or promote products derived from this software 15df8bae1dSRodney W. Grimes * without specific prior written permission. 16df8bae1dSRodney W. Grimes * 17df8bae1dSRodney W. Grimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18df8bae1dSRodney W. Grimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19df8bae1dSRodney W. Grimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20df8bae1dSRodney W. Grimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21df8bae1dSRodney W. Grimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22df8bae1dSRodney W. Grimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23df8bae1dSRodney W. Grimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24df8bae1dSRodney W. Grimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25df8bae1dSRodney W. Grimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26df8bae1dSRodney W. Grimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27df8bae1dSRodney W. Grimes * SUCH DAMAGE. 28df8bae1dSRodney W. Grimes * 29df8bae1dSRodney W. Grimes * @(#)vm_meter.c 8.4 (Berkeley) 1/4/94 30df8bae1dSRodney W. Grimes */ 31df8bae1dSRodney W. Grimes 32874651b1SDavid E. O'Brien #include <sys/cdefs.h> 33874651b1SDavid E. O'Brien __FBSDID("$FreeBSD$"); 34874651b1SDavid E. O'Brien 35df8bae1dSRodney W. Grimes #include <sys/param.h> 36df8bae1dSRodney W. Grimes #include <sys/systm.h> 37df8bae1dSRodney W. Grimes #include <sys/kernel.h> 38fb919e4dSMark Murray #include <sys/lock.h> 39fb919e4dSMark Murray #include <sys/mutex.h> 40fb919e4dSMark Murray #include <sys/proc.h> 4108637435SBruce Evans #include <sys/resource.h> 421005a129SJohn Baldwin #include <sys/sx.h> 43efeaf95aSDavid Greenman #include <sys/vmmeter.h> 4480f5c8bfSMatthew Dillon #include <sys/smp.h> 45efeaf95aSDavid Greenman 46df8bae1dSRodney W. Grimes #include <vm/vm.h> 47b0359e2cSPeter Wemm #include <vm/vm_page.h> 489b4288a3SBruce Evans #include <vm/vm_extern.h> 49efeaf95aSDavid Greenman #include <vm/vm_param.h> 50efeaf95aSDavid Greenman #include <vm/pmap.h> 51efeaf95aSDavid Greenman #include <vm/vm_map.h> 52efeaf95aSDavid Greenman #include <vm/vm_object.h> 53df8bae1dSRodney W. Grimes #include <sys/sysctl.h> 54df8bae1dSRodney W. Grimes 552feb50bfSAttilio Rao struct vmmeter cnt; 56df8bae1dSRodney W. Grimes 57ea754954SJohn Baldwin int maxslp = MAXSLP; 58df8bae1dSRodney W. Grimes 599701cd40SJohn Baldwin SYSCTL_UINT(_vm, VM_V_FREE_MIN, v_free_min, 602feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_free_min, 0, ""); 619701cd40SJohn Baldwin SYSCTL_UINT(_vm, VM_V_FREE_TARGET, v_free_target, 622feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_free_target, 0, ""); 639701cd40SJohn Baldwin SYSCTL_UINT(_vm, VM_V_FREE_RESERVED, v_free_reserved, 642feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_free_reserved, 0, ""); 659701cd40SJohn Baldwin SYSCTL_UINT(_vm, VM_V_INACTIVE_TARGET, v_inactive_target, 662feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_inactive_target, 0, ""); 679701cd40SJohn Baldwin SYSCTL_UINT(_vm, VM_V_CACHE_MIN, v_cache_min, 682feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_cache_min, 0, ""); 699701cd40SJohn Baldwin SYSCTL_UINT(_vm, VM_V_CACHE_MAX, v_cache_max, 702feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_cache_max, 0, ""); 719701cd40SJohn Baldwin SYSCTL_UINT(_vm, VM_V_PAGEOUT_FREE_MIN, v_pageout_free_min, 722feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_pageout_free_min, 0, ""); 739701cd40SJohn Baldwin SYSCTL_UINT(_vm, OID_AUTO, v_free_severe, 742feb50bfSAttilio Rao CTLFLAG_RW, &cnt.v_free_severe, 0, ""); 75a9ad941cSPoul-Henning Kamp 76a7bc3102SPeter Wemm static int 77a7bc3102SPeter Wemm sysctl_vm_loadavg(SYSCTL_HANDLER_ARGS) 78a7bc3102SPeter Wemm { 79ac957cd2SJulian Elischer 80a7bc3102SPeter Wemm #ifdef SCTL_MASK32 81a7bc3102SPeter Wemm u_int32_t la[4]; 82a7bc3102SPeter Wemm 83a7bc3102SPeter Wemm if (req->flags & SCTL_MASK32) { 84a7bc3102SPeter Wemm la[0] = averunnable.ldavg[0]; 85a7bc3102SPeter Wemm la[1] = averunnable.ldavg[1]; 86a7bc3102SPeter Wemm la[2] = averunnable.ldavg[2]; 87a7bc3102SPeter Wemm la[3] = averunnable.fscale; 88a7bc3102SPeter Wemm return SYSCTL_OUT(req, la, sizeof(la)); 89a7bc3102SPeter Wemm } else 90a7bc3102SPeter Wemm #endif 91a7bc3102SPeter Wemm return SYSCTL_OUT(req, &averunnable, sizeof(averunnable)); 92a7bc3102SPeter Wemm } 938a7ef10bSJohn Baldwin SYSCTL_PROC(_vm, VM_LOADAVG, loadavg, CTLTYPE_STRUCT | CTLFLAG_RD | 948a7ef10bSJohn Baldwin CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_loadavg, "S,loadavg", 958a7ef10bSJohn Baldwin "Machine loadaverage history"); 96a9ad941cSPoul-Henning Kamp 97a9ad941cSPoul-Henning Kamp static int 9882d9ae4eSPoul-Henning Kamp vmtotal(SYSCTL_HANDLER_ARGS) 99df8bae1dSRodney W. Grimes { 100a9ad941cSPoul-Henning Kamp struct proc *p; 101ef1b7c48SRuslan Ermilov struct vmtotal total; 102a9ad941cSPoul-Henning Kamp vm_map_entry_t entry; 103a9ad941cSPoul-Henning Kamp vm_object_t object; 104a9ad941cSPoul-Henning Kamp vm_map_t map; 105df8bae1dSRodney W. Grimes int paging; 106e602ba25SJulian Elischer struct thread *td; 10757051fdcSTor Egge struct vmspace *vm; 108df8bae1dSRodney W. Grimes 109ef1b7c48SRuslan Ermilov bzero(&total, sizeof(total)); 110df8bae1dSRodney W. Grimes /* 111df8bae1dSRodney W. Grimes * Mark all objects as inactive. 112df8bae1dSRodney W. Grimes */ 113a5698387SAlan Cox mtx_lock(&vm_object_list_mtx); 11481e4e48dSAlan Cox TAILQ_FOREACH(object, &vm_object_list, object_list) { 115e0ba75ddSAlan Cox if (!VM_OBJECT_TRYLOCK(object)) { 116e0ba75ddSAlan Cox /* 117e0ba75ddSAlan Cox * Avoid a lock-order reversal. Consequently, 118e0ba75ddSAlan Cox * the reported number of active pages may be 119e0ba75ddSAlan Cox * greater than the actual number. 120e0ba75ddSAlan Cox */ 121e0ba75ddSAlan Cox continue; 122e0ba75ddSAlan Cox } 123069e9bc1SDoug Rabson vm_object_clear_flag(object, OBJ_ACTIVE); 124b077a362SAlan Cox VM_OBJECT_UNLOCK(object); 12581e4e48dSAlan Cox } 126a5698387SAlan Cox mtx_unlock(&vm_object_list_mtx); 127df8bae1dSRodney W. Grimes /* 128df8bae1dSRodney W. Grimes * Calculate process statistics. 129df8bae1dSRodney W. Grimes */ 1301005a129SJohn Baldwin sx_slock(&allproc_lock); 131b40ce416SJulian Elischer FOREACH_PROC_IN_SYSTEM(p) { 132df8bae1dSRodney W. Grimes if (p->p_flag & P_SYSTEM) 133df8bae1dSRodney W. Grimes continue; 134374ae2a3SJeff Roberson PROC_LOCK(p); 135982d11f8SJeff Roberson PROC_SLOCK(p); 136e602ba25SJulian Elischer switch (p->p_state) { 137e602ba25SJulian Elischer case PRS_NEW: 138982d11f8SJeff Roberson PROC_SUNLOCK(p); 139374ae2a3SJeff Roberson PROC_UNLOCK(p); 140df8bae1dSRodney W. Grimes continue; 141e602ba25SJulian Elischer break; 142e602ba25SJulian Elischer default: 143374ae2a3SJeff Roberson PROC_SUNLOCK(p); 144e602ba25SJulian Elischer FOREACH_THREAD_IN_PROC(p, td) { 145982d11f8SJeff Roberson thread_lock(td); 146e602ba25SJulian Elischer switch (td->td_state) { 14771fad9fdSJulian Elischer case TDS_INHIBITED: 148c5aa6b58SJeff Roberson if (TD_IS_SWAPPED(td)) 149ef1b7c48SRuslan Ermilov total.t_sw++; 150c5aa6b58SJeff Roberson else if (TD_IS_SLEEPING(td) && 151c5aa6b58SJeff Roberson td->td_priority <= PZERO) 152ef1b7c48SRuslan Ermilov total.t_dw++; 15371fad9fdSJulian Elischer else 154ef1b7c48SRuslan Ermilov total.t_sl++; 155df8bae1dSRodney W. Grimes break; 156e602ba25SJulian Elischer 15771fad9fdSJulian Elischer case TDS_CAN_RUN: 158ef1b7c48SRuslan Ermilov total.t_sw++; 15971fad9fdSJulian Elischer break; 160e602ba25SJulian Elischer case TDS_RUNQ: 161e602ba25SJulian Elischer case TDS_RUNNING: 162ef1b7c48SRuslan Ermilov total.t_rq++; 163982d11f8SJeff Roberson thread_unlock(td); 164e602ba25SJulian Elischer continue; 165e602ba25SJulian Elischer default: 166e602ba25SJulian Elischer break; 167e602ba25SJulian Elischer } 168982d11f8SJeff Roberson thread_unlock(td); 169e602ba25SJulian Elischer } 170df8bae1dSRodney W. Grimes } 171374ae2a3SJeff Roberson PROC_UNLOCK(p); 172df8bae1dSRodney W. Grimes /* 173df8bae1dSRodney W. Grimes * Note active objects. 174df8bae1dSRodney W. Grimes */ 175df8bae1dSRodney W. Grimes paging = 0; 17657051fdcSTor Egge vm = vmspace_acquire_ref(p); 17757051fdcSTor Egge if (vm == NULL) 17857051fdcSTor Egge continue; 17957051fdcSTor Egge map = &vm->vm_map; 18049247edcSAlan Cox vm_map_lock_read(map); 18149247edcSAlan Cox for (entry = map->header.next; 182df8bae1dSRodney W. Grimes entry != &map->header; entry = entry->next) { 1839fdfe602SMatthew Dillon if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) || 18449247edcSAlan Cox (object = entry->object.vm_object) == NULL) 185df8bae1dSRodney W. Grimes continue; 186b077a362SAlan Cox VM_OBJECT_LOCK(object); 18749247edcSAlan Cox vm_object_set_flag(object, OBJ_ACTIVE); 18849247edcSAlan Cox paging |= object->paging_in_progress; 189b077a362SAlan Cox VM_OBJECT_UNLOCK(object); 190df8bae1dSRodney W. Grimes } 19149247edcSAlan Cox vm_map_unlock_read(map); 19257051fdcSTor Egge vmspace_free(vm); 193df8bae1dSRodney W. Grimes if (paging) 194ef1b7c48SRuslan Ermilov total.t_pw++; 195df8bae1dSRodney W. Grimes } 1961005a129SJohn Baldwin sx_sunlock(&allproc_lock); 197df8bae1dSRodney W. Grimes /* 198df8bae1dSRodney W. Grimes * Calculate object memory usage statistics. 199df8bae1dSRodney W. Grimes */ 200a5698387SAlan Cox mtx_lock(&vm_object_list_mtx); 201cc64b484SAlfred Perlstein TAILQ_FOREACH(object, &vm_object_list, object_list) { 2021c7c3c6aSMatthew Dillon /* 203e0ba75ddSAlan Cox * Perform unsynchronized reads on the object to avoid 204e0ba75ddSAlan Cox * a lock-order reversal. In this case, the lack of 205e0ba75ddSAlan Cox * synchronization should not impair the accuracy of 206e0ba75ddSAlan Cox * the reported statistics. 2071c7c3c6aSMatthew Dillon */ 20849247edcSAlan Cox if (object->type == OBJT_DEVICE) { 209e0ba75ddSAlan Cox /* 210e0ba75ddSAlan Cox * Devices, like /dev/mem, will badly skew our totals. 211e0ba75ddSAlan Cox */ 2121c7c3c6aSMatthew Dillon continue; 21349247edcSAlan Cox } 214276096bbSRuslan Ermilov if (object->ref_count == 0) { 215276096bbSRuslan Ermilov /* 216276096bbSRuslan Ermilov * Also skip unreferenced objects, including 217276096bbSRuslan Ermilov * vnodes representing mounted file systems. 218276096bbSRuslan Ermilov */ 219276096bbSRuslan Ermilov continue; 220276096bbSRuslan Ermilov } 221ef1b7c48SRuslan Ermilov total.t_vm += object->size; 222ef1b7c48SRuslan Ermilov total.t_rm += object->resident_page_count; 223df8bae1dSRodney W. Grimes if (object->flags & OBJ_ACTIVE) { 224ef1b7c48SRuslan Ermilov total.t_avm += object->size; 225ef1b7c48SRuslan Ermilov total.t_arm += object->resident_page_count; 226df8bae1dSRodney W. Grimes } 2275070c7f8SJohn Dyson if (object->shadow_count > 1) { 228df8bae1dSRodney W. Grimes /* shared object */ 229ef1b7c48SRuslan Ermilov total.t_vmshr += object->size; 230ef1b7c48SRuslan Ermilov total.t_rmshr += object->resident_page_count; 231df8bae1dSRodney W. Grimes if (object->flags & OBJ_ACTIVE) { 232ef1b7c48SRuslan Ermilov total.t_avmshr += object->size; 233ef1b7c48SRuslan Ermilov total.t_armshr += object->resident_page_count; 234df8bae1dSRodney W. Grimes } 235df8bae1dSRodney W. Grimes } 236df8bae1dSRodney W. Grimes } 237a5698387SAlan Cox mtx_unlock(&vm_object_list_mtx); 2382feb50bfSAttilio Rao total.t_free = cnt.v_free_count + cnt.v_cache_count; 239ef1b7c48SRuslan Ermilov return (sysctl_handle_opaque(oidp, &total, sizeof(total), req)); 240df8bae1dSRodney W. Grimes } 241a9ad941cSPoul-Henning Kamp 24280f5c8bfSMatthew Dillon /* 24380f5c8bfSMatthew Dillon * vcnt() - accumulate statistics from all cpus and the global cnt 24480f5c8bfSMatthew Dillon * structure. 24580f5c8bfSMatthew Dillon * 24680f5c8bfSMatthew Dillon * The vmmeter structure is now per-cpu as well as global. Those 24780f5c8bfSMatthew Dillon * statistics which can be kept on a per-cpu basis (to avoid cache 24880f5c8bfSMatthew Dillon * stalls between cpus) can be moved to the per-cpu vmmeter. Remaining 24980f5c8bfSMatthew Dillon * statistics, such as v_free_reserved, are left in the global 25080f5c8bfSMatthew Dillon * structure. 25180f5c8bfSMatthew Dillon * 25280f5c8bfSMatthew Dillon * (sysctl_oid *oidp, void *arg1, int arg2, struct sysctl_req *req) 25380f5c8bfSMatthew Dillon */ 25480f5c8bfSMatthew Dillon static int 25580f5c8bfSMatthew Dillon vcnt(SYSCTL_HANDLER_ARGS) 25680f5c8bfSMatthew Dillon { 25780f5c8bfSMatthew Dillon int count = *(int *)arg1; 2582feb50bfSAttilio Rao int offset = (char *)arg1 - (char *)&cnt; 25980f5c8bfSMatthew Dillon #ifdef SMP 26080f5c8bfSMatthew Dillon int i; 26180f5c8bfSMatthew Dillon 26280f5c8bfSMatthew Dillon for (i = 0; i < mp_ncpus; ++i) { 26380f5c8bfSMatthew Dillon struct pcpu *pcpu = pcpu_find(i); 26480f5c8bfSMatthew Dillon count += *(int *)((char *)&pcpu->pc_cnt + offset); 26580f5c8bfSMatthew Dillon } 2669991ea71SMatthew Dillon #else 2679991ea71SMatthew Dillon count += *(int *)((char *)PCPU_PTR(cnt) + offset); 26880f5c8bfSMatthew Dillon #endif 2699fd06695SJohn Baldwin return (SYSCTL_OUT(req, &count, sizeof(int))); 27080f5c8bfSMatthew Dillon } 27180f5c8bfSMatthew Dillon 2728a7ef10bSJohn Baldwin SYSCTL_PROC(_vm, VM_TOTAL, vmtotal, CTLTYPE_OPAQUE|CTLFLAG_RD|CTLFLAG_MPSAFE, 2733d177f46SBill Fumerola 0, sizeof(struct vmtotal), vmtotal, "S,vmtotal", 2743d177f46SBill Fumerola "System virtual memory statistics"); 2757fbdc921SPoul-Henning Kamp SYSCTL_NODE(_vm, OID_AUTO, stats, CTLFLAG_RW, 0, "VM meter stats"); 27639a79f0cSPoul-Henning Kamp static SYSCTL_NODE(_vm_stats, OID_AUTO, sys, CTLFLAG_RW, 0, 27739a79f0cSPoul-Henning Kamp "VM meter sys stats"); 27839a79f0cSPoul-Henning Kamp static SYSCTL_NODE(_vm_stats, OID_AUTO, vm, CTLFLAG_RW, 0, 27939a79f0cSPoul-Henning Kamp "VM meter vm stats"); 280b0359e2cSPeter Wemm SYSCTL_NODE(_vm_stats, OID_AUTO, misc, CTLFLAG_RW, 0, "VM meter misc stats"); 28180f5c8bfSMatthew Dillon 2828a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_sys, OID_AUTO, v_swtch, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2832feb50bfSAttilio Rao &cnt.v_swtch, 0, vcnt, "IU", "Context switches"); 2848a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_sys, OID_AUTO, v_trap, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2852feb50bfSAttilio Rao &cnt.v_trap, 0, vcnt, "IU", "Traps"); 2868a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_sys, OID_AUTO, v_syscall, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2872feb50bfSAttilio Rao &cnt.v_syscall, 0, vcnt, "IU", "Syscalls"); 2888a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_sys, OID_AUTO, v_intr, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2892feb50bfSAttilio Rao &cnt.v_intr, 0, vcnt, "IU", "Hardware interrupts"); 2908a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_sys, OID_AUTO, v_soft, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2912feb50bfSAttilio Rao &cnt.v_soft, 0, vcnt, "IU", "Software interrupts"); 2928a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_vm_faults, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2932feb50bfSAttilio Rao &cnt.v_vm_faults, 0, vcnt, "IU", "VM faults"); 2948a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_cow_faults, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2952feb50bfSAttilio Rao &cnt.v_cow_faults, 0, vcnt, "IU", "COW faults"); 2968a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_cow_optim, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2972feb50bfSAttilio Rao &cnt.v_cow_optim, 0, vcnt, "IU", "Optimized COW faults"); 2988a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_zfod, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 2992feb50bfSAttilio Rao &cnt.v_zfod, 0, vcnt, "IU", "Zero fill"); 3008a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_ozfod, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3012feb50bfSAttilio Rao &cnt.v_ozfod, 0, vcnt, "IU", "Optimized zero fill"); 3028a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_swapin, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3032feb50bfSAttilio Rao &cnt.v_swapin, 0, vcnt, "IU", "Swapin operations"); 3048a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_swapout, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3052feb50bfSAttilio Rao &cnt.v_swapout, 0, vcnt, "IU", "Swapout operations"); 3068a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_swappgsin, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3072feb50bfSAttilio Rao &cnt.v_swappgsin, 0, vcnt, "IU", "Swapin pages"); 3088a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_swappgsout, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3092feb50bfSAttilio Rao &cnt.v_swappgsout, 0, vcnt, "IU", "Swapout pages"); 3108a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_vnodein, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3112feb50bfSAttilio Rao &cnt.v_vnodein, 0, vcnt, "IU", "Vnodein operations"); 3128a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_vnodeout, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3132feb50bfSAttilio Rao &cnt.v_vnodeout, 0, vcnt, "IU", "Vnodeout operations"); 3148a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_vnodepgsin, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3152feb50bfSAttilio Rao &cnt.v_vnodepgsin, 0, vcnt, "IU", "Vnodein pages"); 3168a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_vnodepgsout, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3172feb50bfSAttilio Rao &cnt.v_vnodepgsout, 0, vcnt, "IU", "Vnodeout pages"); 3188a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_intrans, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3192feb50bfSAttilio Rao &cnt.v_intrans, 0, vcnt, "IU", "In transit page blocking"); 3208a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_reactivated, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3212feb50bfSAttilio Rao &cnt.v_reactivated, 0, vcnt, "IU", "Reactivated pages"); 3228a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_pdwakeups, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3232feb50bfSAttilio Rao &cnt.v_pdwakeups, 0, vcnt, "IU", "Pagedaemon wakeups"); 3248a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_pdpages, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3252feb50bfSAttilio Rao &cnt.v_pdpages, 0, vcnt, "IU", "Pagedaemon page scans"); 3268a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_tcached, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 327eaa29f1cSAlan Cox &cnt.v_tcached, 0, vcnt, "IU", "Total pages cached"); 3288a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_dfree, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3292feb50bfSAttilio Rao &cnt.v_dfree, 0, vcnt, "IU", ""); 3308a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_pfree, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3312feb50bfSAttilio Rao &cnt.v_pfree, 0, vcnt, "IU", ""); 3328a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_tfree, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3332feb50bfSAttilio Rao &cnt.v_tfree, 0, vcnt, "IU", ""); 3348a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_page_size, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3352feb50bfSAttilio Rao &cnt.v_page_size, 0, vcnt, "IU", ""); 3368a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_page_count, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3372feb50bfSAttilio Rao &cnt.v_page_count, 0, vcnt, "IU", ""); 3388a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_free_reserved, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3392feb50bfSAttilio Rao &cnt.v_free_reserved, 0, vcnt, "IU", ""); 3408a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_free_target, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3412feb50bfSAttilio Rao &cnt.v_free_target, 0, vcnt, "IU", ""); 3428a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_free_min, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3432feb50bfSAttilio Rao &cnt.v_free_min, 0, vcnt, "IU", ""); 3448a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_free_count, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3452feb50bfSAttilio Rao &cnt.v_free_count, 0, vcnt, "IU", ""); 3468a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_wire_count, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3472feb50bfSAttilio Rao &cnt.v_wire_count, 0, vcnt, "IU", ""); 3488a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_active_count, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3492feb50bfSAttilio Rao &cnt.v_active_count, 0, vcnt, "IU", ""); 3508a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_inactive_target, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3512feb50bfSAttilio Rao &cnt.v_inactive_target, 0, vcnt, "IU", ""); 3528a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_inactive_count, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3532feb50bfSAttilio Rao &cnt.v_inactive_count, 0, vcnt, "IU", ""); 3548a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_cache_count, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3552feb50bfSAttilio Rao &cnt.v_cache_count, 0, vcnt, "IU", ""); 3568a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_cache_min, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3572feb50bfSAttilio Rao &cnt.v_cache_min, 0, vcnt, "IU", ""); 3588a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_cache_max, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3592feb50bfSAttilio Rao &cnt.v_cache_max, 0, vcnt, "IU", ""); 3608a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_pageout_free_min, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3612feb50bfSAttilio Rao &cnt.v_pageout_free_min, 0, vcnt, "IU", ""); 3628a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_interrupt_free_min, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3632feb50bfSAttilio Rao &cnt.v_interrupt_free_min, 0, vcnt, "IU", ""); 3648a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_forks, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3652feb50bfSAttilio Rao &cnt.v_forks, 0, vcnt, "IU", "Number of fork() calls"); 3668a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_vforks, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3672feb50bfSAttilio Rao &cnt.v_vforks, 0, vcnt, "IU", "Number of vfork() calls"); 3688a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_rforks, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3692feb50bfSAttilio Rao &cnt.v_rforks, 0, vcnt, "IU", "Number of rfork() calls"); 3708a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_kthreads, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3712feb50bfSAttilio Rao &cnt.v_kthreads, 0, vcnt, "IU", "Number of fork() calls by kernel"); 3728a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_forkpages, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3732feb50bfSAttilio Rao &cnt.v_forkpages, 0, vcnt, "IU", "VM pages affected by fork()"); 3748a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_vforkpages, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3752feb50bfSAttilio Rao &cnt.v_vforkpages, 0, vcnt, "IU", "VM pages affected by vfork()"); 3768a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_rforkpages, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3772feb50bfSAttilio Rao &cnt.v_rforkpages, 0, vcnt, "IU", "VM pages affected by rfork()"); 3788a7ef10bSJohn Baldwin SYSCTL_PROC(_vm_stats_vm, OID_AUTO, v_kthreadpages, CTLTYPE_UINT|CTLFLAG_RD|CTLFLAG_MPSAFE, 3792feb50bfSAttilio Rao &cnt.v_kthreadpages, 0, vcnt, "IU", "VM pages affected by fork() by kernel"); 38080f5c8bfSMatthew Dillon 381b0359e2cSPeter Wemm SYSCTL_INT(_vm_stats_misc, OID_AUTO, 382b0359e2cSPeter Wemm zero_page_count, CTLFLAG_RD, &vm_page_zero_count, 0, ""); 383