[BACK]Return to vmstat.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / vmstat

Diff for /src/usr.bin/vmstat/vmstat.c between version 1.37 and 1.38

version 1.37, 2000/06/27 18:11:48 version 1.38, 2000/10/25 16:49:32
Line 180 
Line 180 
 /* Namelist and memory file names. */  /* Namelist and memory file names. */
 char    *nlistf, *memf;  char    *nlistf, *memf;
   
   extern char *__progname;
   
 int  int
 main(argc, argv)  main(argc, argv)
         register int argc;          register int argc;
Line 244 
Line 246 
         }          }
   
         kd = kvm_openfiles(nlistf, memf, NULL, O_RDONLY, errbuf);          kd = kvm_openfiles(nlistf, memf, NULL, O_RDONLY, errbuf);
         if (kd == 0) {          if (kd == 0)
                 (void)fprintf(stderr,                  errx(1, "kvm_openfiles: %s", errbuf);
                     "vmstat: kvm_openfiles: %s\n", errbuf);  
                 exit(1);  
         }  
   
         if ((c = kvm_nlist(kd, namelist)) != 0) {          if ((c = kvm_nlist(kd, namelist)) != 0) {
   
Line 257 
Line 256 
   
                 if (c > 0) {                  if (c > 0) {
                         (void)fprintf(stderr,                          (void)fprintf(stderr,
                             "vmstat: undefined symbols:");                              "%s: undefined symbols:", __progname);
                         for (c = 0;                          for (c = 0;
                             c < sizeof(namelist)/sizeof(namelist[0]); c++)                              c < sizeof(namelist)/sizeof(namelist[0]); c++)
                                 if (namelist[c].n_type == 0)                                  if (namelist[c].n_type == 0)
                                         fprintf(stderr, " %s",                                          fprintf(stderr, " %s",
                                             namelist[c].n_name);                                              namelist[c].n_name);
                         (void)fputc('\n', stderr);                          (void)fputc('\n', stderr);
                           exit(1);
                 } else                  } else
                         (void)fprintf(stderr, "vmstat: kvm_nlist: %s\n",                          errx(1, "kvm_nlist: %s", kvm_geterr(kd));
                             kvm_geterr(kd));  
                 exit(1);  
         }          }
   
         if (todo & VMSTAT) {          if (todo & VMSTAT) {
Line 361 
Line 359 
                 kread(X_BOOTTIME, &boottime, sizeof(boottime));                  kread(X_BOOTTIME, &boottime, sizeof(boottime));
         (void)time(&now);          (void)time(&now);
         uptime = now - boottime.tv_sec;          uptime = now - boottime.tv_sec;
         if (uptime <= 0 || uptime > 60*60*24*365*10) {          if (uptime <= 0 || uptime > 60*60*24*365*10)
                 (void)fprintf(stderr,                  errx(1, "time makes no sense; namelist must be wrong");
                     "vmstat: time makes no sense; namelist must be wrong.\n");  
                 exit(1);  
         }  
         return(uptime);          return(uptime);
 }  }
   
Line 560 
Line 555 
         (void)printf("%11u pages being paged out\n", uvmexp.paging);          (void)printf("%11u pages being paged out\n", uvmexp.paging);
         (void)printf("%11u pages wired\n", uvmexp.wired);          (void)printf("%11u pages wired\n", uvmexp.wired);
         (void)printf("%11u pages reserved for pagedaemon\n",          (void)printf("%11u pages reserved for pagedaemon\n",
                      uvmexp.reserve_pagedaemon);              uvmexp.reserve_pagedaemon);
         (void)printf("%11u pages reserved for kernel\n",          (void)printf("%11u pages reserved for kernel\n",
                      uvmexp.reserve_kernel);              uvmexp.reserve_kernel);
   
         /* swap */          /* swap */
         (void)printf("%11u swap pages\n", uvmexp.swpages);          (void)printf("%11u swap pages\n", uvmexp.swpages);
Line 582 
Line 577 
         (void)printf("%11u swap outs\n", uvmexp.swapouts);          (void)printf("%11u swap outs\n", uvmexp.swapouts);
         (void)printf("%11u forks\n", uvmexp.forks);          (void)printf("%11u forks\n", uvmexp.forks);
         (void)printf("%11u forks where vmspace is shared\n",          (void)printf("%11u forks where vmspace is shared\n",
                      uvmexp.forks_sharevm);              uvmexp.forks_sharevm);
   
         /* daemon counters */          /* daemon counters */
         (void)printf("%11u number of times the pagedeamon woke up\n",          (void)printf("%11u number of times the pagedeamon woke up\n",
                      uvmexp.pdwoke);              uvmexp.pdwoke);
         (void)printf("%11u revolutions of the clock hand\n", uvmexp.pdrevs);          (void)printf("%11u revolutions of the clock hand\n", uvmexp.pdrevs);
         (void)printf("%11u pages freed by pagedaemon\n", uvmexp.pdfreed);          (void)printf("%11u pages freed by pagedaemon\n", uvmexp.pdfreed);
         (void)printf("%11u pages scanned by pagedaemon\n", uvmexp.pdscans);          (void)printf("%11u pages scanned by pagedaemon\n", uvmexp.pdscans);
Line 723 
Line 718 
                 for (j = 0; j < 16; j++, ivp++) {                  for (j = 0; j < 16; j++, ivp++) {
                         if (ivp->iv_vec && ivp->iv_use && ivp->iv_cnt) {                          if (ivp->iv_vec && ivp->iv_use && ivp->iv_cnt) {
                                 if (kvm_read(kd, (u_long)ivp->iv_use, iname, 63) != 63) {                                  if (kvm_read(kd, (u_long)ivp->iv_use, iname, 63) != 63) {
                                         (void)fprintf(stderr, "vmstat: iv_use: %s\n",                                          errx(1, "iv_use: %s", kvm_geterr(kd));
                                             kvm_geterr(kd));                                              kvm_geterr(kd));
                                         exit(1);                                          exit(1);
                                 }                                  }
Line 745 
Line 740 
 dointr()  dointr()
 {  {
         struct intrhand *intrhand[16], *ihp, ih;          struct intrhand *intrhand[16], *ihp, ih;
         long inttotal;          u_long inttotal;
         time_t uptime;          time_t uptime;
         int intrstray[16];          u_long intrstray[16];
         char iname[17], fname[31];          char iname[17], fname[31];
         int i;          int i;
   
Line 766 
Line 761 
                         if (kvm_read(kd, (u_long)ih.ih_what, iname, 16) != 16)                          if (kvm_read(kd, (u_long)ih.ih_what, iname, 16) != 16)
                                 errx(1, "vmstat: ih_what: %s", kvm_geterr(kd));                                  errx(1, "vmstat: ih_what: %s", kvm_geterr(kd));
                         snprintf(fname, sizeof fname, "irq%d/%s", i, iname);                          snprintf(fname, sizeof fname, "irq%d/%s", i, iname);
                         printf("%-16.16s %10ld %8ld\n", fname, ih.ih_count,                          printf("%-16.16s %10lu %8lu\n", fname, ih.ih_count,
                             ih.ih_count / uptime);                              ih.ih_count / uptime);
                         inttotal += ih.ih_count;                          inttotal += ih.ih_count;
                         ihp = ih.ih_next;                          ihp = ih.ih_next;
Line 774 
Line 769 
         }          }
         for (i = 0; i < 16; i++)          for (i = 0; i < 16; i++)
                 if (intrstray[i]) {                  if (intrstray[i]) {
                         printf("Stray irq %-2d     %10d %8d\n",                          printf("Stray irq %-2d     %10lu %8lu\n",
                                i, intrstray[i], intrstray[i] / uptime);                                 i, intrstray[i], intrstray[i] / uptime);
                         inttotal += intrstray[i];                          inttotal += intrstray[i];
                 }                  }
         printf("Total            %10ld %8ld\n", inttotal, inttotal / uptime);          printf("Total            %10lu %8lu\n", inttotal, inttotal / uptime);
 }  }
 #else  #else
 void  void
Line 798 
Line 793 
             namelist[X_EINTRNAMES].n_value - namelist[X_INTRNAMES].n_value;              namelist[X_EINTRNAMES].n_value - namelist[X_INTRNAMES].n_value;
         intrcnt = malloc((size_t)nintr);          intrcnt = malloc((size_t)nintr);
         intrname = malloc((size_t)inamlen);          intrname = malloc((size_t)inamlen);
         if (intrcnt == NULL || intrname == NULL) {          if (intrcnt == NULL || intrname == NULL)
                 (void)fprintf(stderr, "vmstat: %s.\n", strerror(errno));                  err(1, "malloc");
                 exit(1);  
         }  
         kread(X_INTRCNT, intrcnt, (size_t)nintr);          kread(X_INTRCNT, intrcnt, (size_t)nintr);
         kread(X_INTRNAMES, intrname, (size_t)inamlen);          kread(X_INTRNAMES, intrname, (size_t)inamlen);
         (void)printf("interrupt             total     rate\n");          (void)printf("interrupt             total     rate\n");
Line 818 
Line 811 
         evptr = allevents.tqh_first;          evptr = allevents.tqh_first;
         while (evptr) {          while (evptr) {
                 if (kvm_read(kd, (long)evptr, (void *)&evcnt,                  if (kvm_read(kd, (long)evptr, (void *)&evcnt,
                     sizeof evcnt) != sizeof evcnt) {                      sizeof evcnt) != sizeof evcnt)
                         (void)fprintf(stderr, "vmstat: event chain trashed: %s\n",                          errx(1, "event chain trashed: %s", kvm_geterr(kd));
                             kvm_geterr(kd));  
                         exit(1);  
                 }  
                 if (strcmp(evcnt.ev_name, "intr") == 0) {                  if (strcmp(evcnt.ev_name, "intr") == 0) {
                         if (kvm_read(kd, (long)evcnt.ev_dev, (void *)&dev,                          if (kvm_read(kd, (long)evcnt.ev_dev, (void *)&dev,
                             sizeof dev) != sizeof dev) {                              sizeof dev) != sizeof dev)
                                 (void)fprintf(stderr, "vmstat: event chain trashed: %s\n",                                  errx(1, "event chain trashed: %s", kvm_geterr(kd));
                                     kvm_geterr(kd));  
                                 exit(1);  
                         }  
                         if (evcnt.ev_count)                          if (evcnt.ev_count)
                                 (void)printf("%-14s %12d %8ld\n", dev.dv_xname,                                  (void)printf("%-14s %12d %8ld\n", dev.dv_xname,
                                     evcnt.ev_count, (long)(evcnt.ev_count / uptime));                                      evcnt.ev_count, (long)(evcnt.ev_count / uptime));
Line 866 
Line 853 
                 if (first) {                  if (first) {
                         (void)printf("Memory statistics by bucket size\n");                          (void)printf("Memory statistics by bucket size\n");
                         (void)printf(                          (void)printf(
                 "    Size   In Use   Free   Requests  HighWater  Couldfree\n");                  "    Size   In Use   Free   Requests  HighWater  Couldfree\n");
                         first = 0;                          first = 0;
                 }                  }
                 size = 1 << i;                  size = 1 << i;
                 (void)printf("%8d %8ld %6ld %10ld %7ld %10ld\n", size,                  (void)printf("%8d %8ld %6ld %10ld %7ld %10ld\n", size,
                         kp->kb_total - kp->kb_totalfree,                          kp->kb_total - kp->kb_totalfree,
                         kp->kb_totalfree, kp->kb_calls,                          kp->kb_totalfree, kp->kb_calls,
                         kp->kb_highwat, kp->kb_couldfree);                          kp->kb_highwat, kp->kb_couldfree);
Line 965 
Line 952 
                 sym = namelist[nlx].n_name;                  sym = namelist[nlx].n_name;
                 if (*sym == '_')                  if (*sym == '_')
                         ++sym;                          ++sym;
                 (void)fprintf(stderr,                  errx(1, "symbol %s not defined", sym);
                     "vmstat: symbol %s not defined\n", sym);  
                 exit(1);  
         }          }
         if (kvm_read(kd, namelist[nlx].n_value, addr, size) != size) {          if (kvm_read(kd, namelist[nlx].n_value, addr, size) != size) {
                 sym = namelist[nlx].n_name;                  sym = namelist[nlx].n_name;
                 if (*sym == '_')                  if (*sym == '_')
                         ++sym;                          ++sym;
                 (void)fprintf(stderr, "vmstat: %s: %s\n", sym, kvm_geterr(kd));                  errx(1, "%s: %s", sym, kvm_geterr(kd));
                 exit(1);  
         }          }
 }  }
   
 void  void
 usage()  usage()
 {  {
         (void)fprintf(stderr,          (void)fprintf(stderr, "usage: %s [-fimst] [-c count] [-M core] "
             "usage: vmstat [-fimst] [-c count] [-M core] \              "[-N system] [-w wait] [disks]\n", __progname);
 [-N system] [-w wait] [disks]\n");  
         exit(1);          exit(1);
 }  }
   

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.38