138589Sabial/*- 238589Sabial * Copyright (c) 1998 Andrzej Bialecki 338589Sabial * All rights reserved. 438589Sabial * 538589Sabial * Redistribution and use in source and binary forms, with or without 638589Sabial * modification, are permitted provided that the following conditions 738589Sabial * are met: 838589Sabial * 1. Redistributions of source code must retain the above copyright 938589Sabial * notice, this list of conditions and the following disclaimer. 1038589Sabial * 2. Redistributions in binary form must reproduce the above copyright 1138589Sabial * notice, this list of conditions and the following disclaimer in the 1238589Sabial * documentation and/or other materials provided with the distribution. 1338589Sabial * 1438589Sabial * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1538589Sabial * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1638589Sabial * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1738589Sabial * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1838589Sabial * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1938589Sabial * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2038589Sabial * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2138589Sabial * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2238589Sabial * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2338589Sabial * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2438589Sabial * SUCH DAMAGE. 2538589Sabial * 2650479Speter * $FreeBSD$ 2738589Sabial */ 2838589Sabial 2950186Sdwhite#include <stdio.h> 3038589Sabial#include <sys/types.h> 3138589Sabial#include <sys/sysctl.h> 3238589Sabial#include <sys/vmmeter.h> 3338589Sabial#include <vm/vm_param.h> 3438589Sabial 3550399Sroger#define pgtok(a) ((a) * (u_int) pagesize >> 10) 3640729Sabial 3738589Sabialint 3884608Sluigivm_i() 3984608Sluigi{ 4084608Sluigi#define CNT 49 4184608Sluigi int cnt[CNT]; 4284608Sluigi char names[CNT*16]; 4384608Sluigi char *a, *namep[CNT*16]; 4484608Sluigi int i,len; 4584608Sluigi long long inttotal=0; 4684608Sluigi long uptime=1; 4784608Sluigi 4884608Sluigi len=sizeof(cnt); 4985450Sluigi i = sysctlbyname("hw.intrcnt", &cnt, &len, NULL, 0); 5084608Sluigi if (i != 0) 5184608Sluigi return i ; 5284608Sluigi len=sizeof(names); 5385450Sluigi i = sysctlbyname("hw.intrnames", &names, &len, NULL, 0); 5484608Sluigi if (i != 0) 5584608Sluigi return i ; 5684608Sluigi 5784608Sluigi for( i=0, a = names ; i < CNT && a < names+sizeof(names) ; ) { 5884608Sluigi namep[i++] = a++; 5984608Sluigi while (a < names+sizeof(names) && *a) 6084608Sluigi a++ ; 6184608Sluigi a++ ; /* skip \0 */ 6284608Sluigi } 6384608Sluigi printf("interrupt total rate\n"); 6484608Sluigi inttotal = 0; 6584608Sluigi for (i=0; i< CNT ; i++) 6684608Sluigi if (cnt[i] >0) { 6784608Sluigi printf("%-12s %20lu %10lu\n", namep[i], cnt[i], cnt[i]/uptime); 6884608Sluigi inttotal += cnt[i]; 6984608Sluigi } 7084608Sluigi printf("Total %20llu %10llu\n", inttotal, 7184608Sluigi inttotal / (u_int64_t) uptime); 7284608Sluigi return 0; 7384608Sluigi} 7484608Sluigiint 7538589Sabialmain(int argc, char *argv[]) 7638589Sabial{ 7738589Sabial int mib[2],i=0,len; 7850399Sroger int pagesize, pagesize_len; 7938589Sabial struct vmtotal v; 8038589Sabial 8184608Sluigi if (argc > 1 && !strcmp(argv[1], "-i")) { 8284608Sluigi if (vm_i()) 8384608Sluigi fprintf(stderr, "vm -i stats not available via sysctl\n"); 8484608Sluigi return 0 ; 8584608Sluigi } 8650399Sroger pagesize_len = sizeof(int); 8750399Sroger sysctlbyname("vm.stats.vm.v_page_size",&pagesize,&pagesize_len,NULL,0); 8850399Sroger 8938589Sabial len=sizeof(struct vmtotal); 9038589Sabial mib[0]=CTL_VM; 9138589Sabial mib[1]=VM_METER; 9238589Sabial for(;;) { 9338589Sabial sysctl(mib,2,&v,&len,NULL,0); 9438589Sabial if(i==0) { 9540729Sabial printf(" procs kB virt mem real mem shared vm shared real free\n"); 9640729Sabial printf(" r w l s tot act tot act tot act tot act\n"); 9738589Sabial } 98164718Sru printf("%2hd%2hd%2hd%2hd",v.t_rq-1,v.t_dw+v.t_pw,v.t_sl,v.t_sw); 99164718Sru printf("%7d %7d %7d%7d", 100164718Sru pgtok(v.t_vm),pgtok(v.t_avm), 101164718Sru pgtok(v.t_rm),pgtok(v.t_arm)); 102164718Sru printf("%7d%7d%7d%7d%7d\n", 103164718Sru pgtok(v.t_vmshr),pgtok(v.t_avmshr), 104164718Sru pgtok(v.t_rmshr),pgtok(v.t_armshr), 105164718Sru pgtok(v.t_free)); 10638589Sabial sleep(5); 10738589Sabial i++; 10838589Sabial if(i>22) i=0; 10938589Sabial } 11038589Sabial exit(0); 11138589Sabial 11238589Sabial} 113