=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/vmstat/vmstat.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/vmstat/vmstat.c 1995/10/28 04:41:40 1.3 --- src/usr.bin/vmstat/vmstat.c 1996/02/20 04:48:36 1.4 *************** *** 105,115 **** { "_bucket" }, #define X_ALLEVENTS 14 { "_allevents" }, #ifdef notdef ! #define X_DEFICIT 15 { "_deficit" }, - #define X_FORKSTAT 16 - { "_forkstat" }, #define X_REC 17 { "_rectime" }, #define X_PGIN 18 --- 105,115 ---- { "_bucket" }, #define X_ALLEVENTS 14 { "_allevents" }, + #define X_FORKSTAT 15 + { "_forkstat" }, #ifdef notdef ! #define X_DEFICIT 16 { "_deficit" }, #define X_REC 17 { "_rectime" }, #define X_PGIN 18 *************** *** 118,124 **** { "_xstats" }, #define X_END 20 #else ! #define X_END 15 #endif #if defined(hp300) || defined(luna68k) #define X_HPDINIT (X_END) --- 118,124 ---- { "_xstats" }, #define X_END 20 #else ! #define X_END 16 #endif #if defined(hp300) || defined(luna68k) #define X_HPDINIT (X_END) *************** *** 140,145 **** --- 140,151 ---- #define X_IVT (X_END) { "_ivt" }, #endif + #if defined(i386) + #define X_INTRHAND (X_END) + { "_intrhand" }, + #define X_INTRSTRAY (X_END+1) + { "_intrstray" }, + #endif { "" }, }; *************** *** 167,175 **** void cpustats(), dkstats(), dointr(), domem(), dosum(); void dovmstat(), kread(), usage(); - #ifdef notdef void dotimes(), doforkst(); - #endif main(argc, argv) register int argc; --- 173,179 ---- *************** *** 210,220 **** case 's': todo |= SUMSTAT; break; - #ifndef notdef case 't': todo |= TIMESTAT; break; - #endif case 'w': interval = atoi(optarg); break; --- 214,222 ---- *************** *** 286,303 **** } else if (reps) interval = 1; - #ifdef notdef if (todo & FORKSTAT) doforkst(); - #endif if (todo & MEMSTAT) domem(); if (todo & SUMSTAT) dosum(); - #ifdef notdef if (todo & TIMESTAT) dotimes(); - #endif if (todo & INTRSTAT) dointr(); if (todo & VMSTAT) --- 288,301 ---- *************** *** 505,529 **** hdrcnt = 1; } - #ifdef notdef void dotimes() { u_int pgintime, rectime; kread(X_REC, &rectime, sizeof(rectime)); kread(X_PGIN, &pgintime, sizeof(pgintime)); kread(X_SUM, &sum, sizeof(sum)); ! (void)printf("%u reclaims, %u total time (usec)\n", ! sum.v_pgrec, rectime); ! (void)printf("average: %u usec / reclaim\n", rectime / sum.v_pgrec); (void)printf("\n"); (void)printf("%u page ins, %u total time (msec)\n", ! sum.v_pgin, pgintime / 10); (void)printf("average: %8.1f msec / page in\n", ! pgintime / (sum.v_pgin * 10.0)); } - #endif pct(top, bot) long top, bot; --- 503,530 ---- hdrcnt = 1; } void dotimes() { u_int pgintime, rectime; + #ifdef NEWVM + pgintime = 0; + rectime = 0; + #else kread(X_REC, &rectime, sizeof(rectime)); kread(X_PGIN, &pgintime, sizeof(pgintime)); + #endif kread(X_SUM, &sum, sizeof(sum)); ! (void)printf("%u reactivates, %u total time (usec)\n", ! sum.v_reactivated, rectime); ! (void)printf("average: %u usec / reclaim\n", rectime / sum.v_reactivated); (void)printf("\n"); (void)printf("%u page ins, %u total time (msec)\n", ! sum.v_pageins, pgintime / 10); (void)printf("average: %8.1f msec / page in\n", ! pgintime / (sum.v_pageins * 10.0)); } pct(top, bot) long top, bot; *************** *** 647,653 **** #endif } - #ifdef notdef void doforkst() { --- 648,653 ---- *************** *** 657,665 **** (void)printf("%d forks, %d pages, average %.2f\n", fks.cntfork, fks.sizfork, (double)fks.sizfork / fks.cntfork); (void)printf("%d vforks, %d pages, average %.2f\n", ! fks.cntvfork, fks.sizvfork, (double)fks.sizvfork / fks.cntvfork); } - #endif void dkstats() --- 657,666 ---- (void)printf("%d forks, %d pages, average %.2f\n", fks.cntfork, fks.sizfork, (double)fks.sizfork / fks.cntfork); (void)printf("%d vforks, %d pages, average %.2f\n", ! fks.cntvfork, fks.sizvfork, (double)fks.sizvfork / (fks.cntvfork ? fks.cntvfork : 1)); ! (void)printf("%d rforks, %d pages, average %.2f\n", ! fks.cntrfork, fks.sizrfork, (double)fks.sizrfork / (fks.cntrfork ? fks.cntrfork : 1)); } void dkstats() *************** *** 743,748 **** --- 744,790 ---- (void)printf("Total %8ld %8ld\n", inttotal, inttotal / uptime); } + } + #elif defined(i386) + /* To get struct intrhand */ + #define _KERNEL + #include + #undef _KERNEL + void + dointr() + { + struct intrhand *intrhand[16], *ihp, ih; + long inttotal, uptime; + int intrstray[16]; + char iname[17]; + int i; + + iname[16] = '\0'; + uptime = getuptime(); + kread(X_INTRHAND, intrhand, sizeof(intrhand)); + kread(X_INTRSTRAY, intrstray, sizeof(intrstray)); + + (void)printf("interrupt total rate\n"); + inttotal = 0; + for (i = 0; i < 16; i++) { + ihp = intrhand[i]; + while (ihp) { + if (kvm_read(kd, (u_long)ihp, &ih, sizeof(ih)) != sizeof(ih)) + errx(1, "vmstat: ih: %s", kvm_geterr(kd)); + if (kvm_read(kd, (u_long)ih.ih_what, iname, 16) != 16) + errx(1, "vmstat: ih_what: %s", kvm_geterr(kd)); + printf("%-16.16s %8ld %8ld\n", iname, ih.ih_count, ih.ih_count / uptime); + inttotal += ih.ih_count; + ihp = ih.ih_next; + } + } + for (i = 0; i < 16; i++) + if (intrstray[i]) { + printf("Stray irq %-2d %8ld %8ld\n", + i, intrstray[i], intrstray[i] / uptime); + inttotal += intrstray[i]; + } + printf("Total %8ld %8ld\n", inttotal, inttotal / uptime); } #else void