[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.5 and 1.6

version 1.5, 1996/03/01 07:35:40 version 1.6, 1996/03/03 02:51:24
Line 73 
Line 73 
 #include <string.h>  #include <string.h>
 #include <paths.h>  #include <paths.h>
 #include <limits.h>  #include <limits.h>
   #include "dkstats.h"
   
 #define NEWVM                   /* XXX till old has been updated or purged */  #define NEWVM                   /* XXX till old has been updated or purged */
 struct nlist namelist[] = {  struct nlist namelist[] = {
Line 150 
Line 151 
         { "" },          { "" },
 };  };
   
 struct _disk {  /* Objects defined in dkstats.c */
         long time[CPUSTATES];  extern struct _disk     cur;
         long *xfer;  extern char             **dr_name;
 } cur, last;  extern int              *dk_select, dk_ndrive;
   
 struct  vmmeter sum, osum;  struct  vmmeter sum, osum;
 char    **dr_name;  int             ndrives;
 int     *dr_select, dk_ndrive, ndrives;  
   
 int     winlines = 20;  int     winlines = 20;
   
Line 170 
Line 170 
 #define TIMESTAT        0x10  #define TIMESTAT        0x10
 #define VMSTAT          0x20  #define VMSTAT          0x20
   
 #include "names.c"                      /* disk names -- machine dependent */  
   
 void    cpustats(), dkstats(), dointr(), domem(), dosum();  void    cpustats(), dkstats(), dointr(), domem(), dosum();
 void    dovmstat(), kread(), usage();  void    dovmstat(), kread(), usage();
 void    dotimes(), doforkst();  void    dotimes(), doforkst();
   
   char *nlistf = NULL;
   char *memf = NULL;
   
 main(argc, argv)  main(argc, argv)
         register int argc;          register int argc;
         register char **argv;          register char **argv;
Line 195 
Line 196 
                 case 'c':                  case 'c':
                         reps = atoi(optarg);                          reps = atoi(optarg);
                         break;                          break;
 #ifndef notdef  
                 case 'f':                  case 'f':
                         todo |= FORKSTAT;                          todo |= FORKSTAT;
                         break;                          break;
 #endif  
                 case 'i':                  case 'i':
                         todo |= INTRSTAT;                          todo |= INTRSTAT;
                         break;                          break;
Line 263 
Line 262 
         }          }
   
         if (todo & VMSTAT) {          if (todo & VMSTAT) {
                 char **getdrivedata();                  char **choosedrives();
                 struct winsize winsize;                  struct winsize winsize;
   
                 argv = getdrivedata(argv);                  dkinit(0);      /* Initialize disk stats, no disks selected. */
                   argv = choosedrives(argv);      /* Select disks. */
                 winsize.ws_row = 0;                  winsize.ws_row = 0;
                 (void) ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&winsize);                  (void) ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&winsize);
                 if (winsize.ws_row > 0)                  if (winsize.ws_row > 0)
Line 305 
Line 305 
 }  }
   
 char **  char **
 getdrivedata(argv)  choosedrives(argv)
         char **argv;          char **argv;
 {  {
         register int i;          register int i;
         register char **cp;          register char **cp;
         char buf[30];          char buf[30];
   
         kread(X_DK_NDRIVE, &dk_ndrive, sizeof(dk_ndrive));  
         if (dk_ndrive <= 0) {  
                 (void)fprintf(stderr, "vmstat: dk_ndrive %d\n", dk_ndrive);  
                 exit(1);  
         }  
         dr_select = calloc((size_t)dk_ndrive, sizeof(int));  
         dr_name = calloc((size_t)dk_ndrive, sizeof(char *));  
         for (i = 0; i < dk_ndrive; i++)  
                 dr_name[i] = NULL;  
         cur.xfer = calloc((size_t)dk_ndrive, sizeof(long));  
         last.xfer = calloc((size_t)dk_ndrive, sizeof(long));  
         if (!read_names())  
                 exit (1);  
         for (i = 0; i < dk_ndrive; i++)  
                 if (dr_name[i] == NULL) {  
                         (void)sprintf(buf, "??%d", i);  
                         dr_name[i] = strdup(buf);  
                 }  
   
         /*          /*
          * Choose drives to be displayed.  Priority goes to (in order) drives           * Choose drives to be displayed.  Priority goes to (in order) drives
          * supplied as arguments, default drives.  If everything isn't filled           * supplied as arguments, default drives.  If everything isn't filled
Line 346 
Line 327 
                 for (i = 0; i < dk_ndrive; i++) {                  for (i = 0; i < dk_ndrive; i++) {
                         if (strcmp(dr_name[i], *argv))                          if (strcmp(dr_name[i], *argv))
                                 continue;                                  continue;
                         dr_select[i] = 1;                          dk_select[i] = 1;
                         ++ndrives;                          ++ndrives;
                         break;                          break;
                 }                  }
         }          }
         for (i = 0; i < dk_ndrive && ndrives < 4; i++) {          for (i = 0; i < dk_ndrive && ndrives < 4; i++) {
                 if (dr_select[i])                  if (dk_select[i])
                         continue;                          continue;
                 for (cp = defdrives; *cp; cp++)                  dk_select[i] = 1;
                         if (strcmp(dr_name[i], *cp) == 0) {  
                                 dr_select[i] = 1;  
                                 ++ndrives;  
                                 break;  
                         }  
         }  
         for (i = 0; i < dk_ndrive && ndrives < 4; i++) {  
                 if (dr_select[i])  
                         continue;  
                 dr_select[i] = 1;  
                 ++ndrives;                  ++ndrives;
         }          }
         return(argv);          return(argv);
Line 413 
Line 384 
         for (hdrcnt = 1;;) {          for (hdrcnt = 1;;) {
                 if (!--hdrcnt)                  if (!--hdrcnt)
                         printhdr();                          printhdr();
                 kread(X_CPTIME, cur.time, sizeof(cur.time));                  /* Read new disk statistics */
                 kread(X_DKXFER, cur.xfer, sizeof(*cur.xfer) * dk_ndrive);                  dkreadstats();
                 kread(X_SUM, &sum, sizeof(sum));                  kread(X_SUM, &sum, sizeof(sum));
                 size = sizeof(total);                  size = sizeof(total);
                 mib[0] = CTL_VM;                  mib[0] = CTL_VM;
Line 425 
Line 396 
                 }                  }
                 (void)printf("%2d%2d%2d",                  (void)printf("%2d%2d%2d",
                     total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw);                      total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw);
 #define pgtok(a) ((a) * sum.v_page_size >> 10)  #define pgtok(a) ((a) * (sum.v_page_size >> 10))
 #define rate(x) (((x) + halfuptime) / uptime)   /* round */  #define rate(x) (((x) + halfuptime) / uptime)   /* round */
                 (void)printf("%6ld%6ld ",                  (void)printf("%6ld%6ld ",
                     pgtok(total.t_avm), pgtok(total.t_free));                      pgtok(total.t_avm), pgtok(total.t_free));
Line 476 
Line 447 
         register int i;          register int i;
   
         (void)printf(" procs   memory     page%*s", 20, "");          (void)printf(" procs   memory     page%*s", 20, "");
         if (ndrives > 1)          if (ndrives > 0)
                 (void)printf("disks %*s  faults      cpu\n",  #ifdef NEWVM
                    ndrives * 3 - 6, "");                  (void)printf("%s %*sfaults   cpu\n",
                      ((ndrives > 1) ? "disks" : "disk"),
   #else
                   (void)printf("disks %*sfaults      cpu\n",
   #endif
                      ((ndrives > 1) ? ndrives * 3 - 4 : 0), "");
         else          else
                 (void)printf("%*s  faults      cpu\n", ndrives * 3, "");  #ifdef NEWVM
 #ifndef NEWVM                  (void)printf("%*s  faults   cpu\n",
         (void)printf(" r b w   avm   fre  re at  pi  po  fr  de  sr ");  
 #else  #else
                   (void)printf("%*s  faults      cpu\n",
   #endif
                      ndrives * 3, "");
   
   #ifdef NEWVM
         (void)printf(" r b w   avm   fre  flt  re  pi  po  fr  sr ");          (void)printf(" r b w   avm   fre  flt  re  pi  po  fr  sr ");
   #else
           (void)printf(" r b w   avm   fre  re at  pi  po  fr  de  sr ");
 #endif  #endif
         for (i = 0; i < dk_ndrive; i++)          for (i = 0; i < dk_ndrive; i++)
                 if (dr_select[i])                  if (dk_select[i])
                         (void)printf("%c%c ", dr_name[i][0],                          (void)printf("%c%c ", dr_name[i][0],
                             dr_name[i][strlen(dr_name[i]) - 1]);                              dr_name[i][strlen(dr_name[i]) - 1]);
         (void)printf("  in   sy  cs us sy id\n");          (void)printf("  in   sy  cs us sy id\n");
Line 670 
Line 652 
         double etime;          double etime;
         long tmp;          long tmp;
   
         for (dn = 0; dn < dk_ndrive; ++dn) {          /* Calculate disk stat deltas. */
                 tmp = cur.xfer[dn];          dkswap();
                 cur.xfer[dn] -= last.xfer[dn];  
                 last.xfer[dn] = tmp;  
         }  
         etime = 0;          etime = 0;
         for (state = 0; state < CPUSTATES; ++state) {          for (state = 0; state < CPUSTATES; ++state) {
                 tmp = cur.time[state];                  etime += cur.cp_time[state];
                 cur.time[state] -= last.time[state];  
                 last.time[state] = tmp;  
                 etime += cur.time[state];  
         }          }
         if (etime == 0)          if (etime == 0)
                 etime = 1;                  etime = 1;
         etime /= hz;          etime /= hz;
         for (dn = 0; dn < dk_ndrive; ++dn) {          for (dn = 0; dn < dk_ndrive; ++dn) {
                 if (!dr_select[dn])                  if (!dk_select[dn])
                         continue;                          continue;
                 (void)printf("%2.0f ", cur.xfer[dn] / etime);                  (void)printf("%2.0f ", cur.dk_xfer[dn] / etime);
         }          }
 }  }
   
Line 700 
Line 676 
   
         total = 0;          total = 0;
         for (state = 0; state < CPUSTATES; ++state)          for (state = 0; state < CPUSTATES; ++state)
                 total += cur.time[state];                  total += cur.cp_time[state];
         if (total)          if (total)
                 pct = 100 / total;                  pct = 100 / total;
         else          else
                 pct = 0;                  pct = 0;
         (void)printf("%2.0f ", (cur.time[CP_USER] + cur.time[CP_NICE]) * pct);          (void)printf("%2.0f ", (cur.cp_time[CP_USER] + cur.cp_time[CP_NICE]) * pct);
         (void)printf("%2.0f ", (cur.time[CP_SYS] + cur.time[CP_INTR]) * pct);          (void)printf("%2.0f ", (cur.cp_time[CP_SYS] + cur.cp_time[CP_INTR]) * pct);
         (void)printf("%2.0f", cur.time[CP_IDLE] * pct);          (void)printf("%2.0f", cur.cp_time[CP_IDLE] * pct);
 }  }
   
 #if defined(pc532)  #if defined(pc532)

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6