X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/a68924a6e07d69bc4b8d6106b3af0ac5a7490905..31cef89cb428866f787983e68246030321893df4:/usr/src/cmd/iostat.c diff --git a/usr/src/cmd/iostat.c b/usr/src/cmd/iostat.c index 8e03f88e4d..79579edf0e 100644 --- a/usr/src/cmd/iostat.c +++ b/usr/src/cmd/iostat.c @@ -1,40 +1,46 @@ -int bflg; -int dflg; -int tflg; -int iflg; -int aflg; -int sflg; -struct -{ - char name[8]; - int type; - unsigned value; -} nl[] = { - "_dk_busy", 0, 0, - "_io_info", 0, 0, - "\0\0\0\0\0\0\0\0", 0, 0 +static char *sccsid = "@(#)iostat.c 4.2 (Berkeley) 10/19/80"; +/* + * iostat + */ +#include +#include + +struct nlist nl[] = { + { "_dk_busy" }, +#define X_DK_BUSY 0 + { "_dk_time" }, +#define X_DK_TIME 1 + { "_dk_xfer" }, +#define X_DK_XFER 2 + { "_dk_wds" }, +#define X_DK_WDS 3 + { "_tk_nin" }, +#define X_TK_NIN 4 + { "_tk_nout" }, +#define X_TK_NOUT 5 + { "_dk_seek" }, +#define X_DK_SEEK 6 + { "_cp_time" }, +#define X_CP_TIME 7 + { "_dk_mspw" }, +#define X_DK_MSPW 8 + { 0 }, }; struct { - int busy; - long etime[32]; - long numb[3]; - long wds[3]; - long tin; - long tout; + int dk_busy; + long cp_time[CPUSTATES]; + long dk_time[DK_NDRIVE]; + long dk_wds[DK_NDRIVE]; + long dk_seek[DK_NDRIVE]; + long dk_xfer[DK_NDRIVE]; + float dk_mspw[DK_NDRIVE]; + long tk_nin; + long tk_nout; } s, s1; -struct iostat { - int nbuf; - long nread; - long nreada; - long ncache; - long nwrite; - long bufcount[50]; -} io_info, io_delta; -double etime; - int mf; +double etime; main(argc, argv) char *argv[]; @@ -44,10 +50,11 @@ char *argv[]; int iter; double f1, f2; long t; + int tohdr = 1; - nlist("/unix", nl); - if(nl[0].type == -1) { - printf("dk_busy not found in /unix namelist\n"); + nlist("/vmunix", nl); + if(nl[X_DK_BUSY].n_type == 0) { + printf("dk_busy not found in /vmunix namelist\n"); exit(1); } mf = open("/dev/kmem", 0); @@ -57,78 +64,65 @@ char *argv[]; } iter = 0; while (argc>1&&argv[1][0]=='-') { - if (argv[1][1]=='d') - dflg++; - else if (argv[1][1]=='s') - sflg++; - else if (argv[1][1]=='a') - aflg++; - else if (argv[1][1]=='t') - tflg++; - else if (argv[1][1]=='i') - iflg++; - else if (argv[1][1]=='b') - bflg++; argc--; argv++; } + lseek(mf, (long)nl[X_DK_MSPW].n_value, 0); + read(mf, s.dk_mspw, sizeof s.dk_mspw); if(argc > 2) iter = atoi(argv[2]); - if (!(sflg|iflg)) { - if(tflg) - printf(" TTY"); - if (bflg==0) - printf(" RF RK RP PERCENT\n"); - if(tflg) - printf(" tin tout"); - if (bflg==0) - printf(" tpm msps mspt tpm msps mspt tpm msps mspt user nice systm idle\n"); - } - loop: - lseek(mf, (long)nl[0].value, 0); - read(mf, (char *)&s, sizeof s); - for(i=0; i<40; i++) { - t = s.etime[i]; - s.etime[i] -= s1.etime[i]; - s1.etime[i] = t; - } - t = 0; - for(i=0; i<32; i++) - t += s.etime[i]; - etime = t; - if(etime == 0.) - etime = 1.; - if (bflg) { - biostats(); - goto contin; + if (--tohdr == 0) { + printf(" TTY"); + for (i = 0; i < DK_NDRIVE; i++) + if (s.dk_mspw[i] != 0.0) + printf(" D%d ", i); + printf(" CPU\n"); + printf(" tin tout"); + for (i = 0; i < DK_NDRIVE; i++) + if (s.dk_mspw[i] != 0.0) + printf(" sps tps msps "); + printf(" us ni sy id\n"); + tohdr = 19; } - if (dflg) { - long tm; - time(&tm); - printf("%s", ctime(&tm)); + lseek(mf, (long)nl[X_DK_BUSY].n_value, 0); + read(mf, &s.dk_busy, sizeof s.dk_busy); + lseek(mf, (long)nl[X_DK_TIME].n_value, 0); + read(mf, s.dk_time, sizeof s.dk_time); + lseek(mf, (long)nl[X_DK_XFER].n_value, 0); + read(mf, s.dk_xfer, sizeof s.dk_xfer); + lseek(mf, (long)nl[X_DK_WDS].n_value, 0); + read(mf, s.dk_wds, sizeof s.dk_wds); + lseek(mf, (long)nl[X_TK_NIN].n_value, 0); + read(mf, &s.tk_nin, sizeof s.tk_nin); + lseek(mf, (long)nl[X_TK_NOUT].n_value, 0); + read(mf, &s.tk_nout, sizeof s.tk_nout); + lseek(mf, (long)nl[X_DK_SEEK].n_value, 0); + read(mf, s.dk_seek, sizeof s.dk_seek); + lseek(mf, (long)nl[X_CP_TIME].n_value, 0); + read(mf, s.cp_time, sizeof s.cp_time); + lseek(mf, (long)nl[X_DK_MSPW].n_value, 0); + read(mf, s.dk_mspw, sizeof s.dk_mspw); + for (i = 0; i < DK_NDRIVE; i++) { +#define X(fld) t = s.fld[i]; s.fld[i] -= s1.fld[i]; s1.fld[i] = t + X(dk_xfer); X(dk_seek); X(dk_wds); X(dk_time); } - if (aflg) - printf("%.2f minutes total\n", etime/3600); - if (sflg) { - stats2(etime); - goto contin; + t = s.tk_nin; s.tk_nin -= s1.tk_nin; s1.tk_nin = t; + t = s.tk_nout; s.tk_nout -= s1.tk_nout; s1.tk_nout = t; + etime = 0; + for(i=0; i