⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iostat.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
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};struct{	int	busy;	long	etime[32];	long	numb[3];	long	wds[3];	long	tin;	long	tout;} 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;main(argc, argv)char *argv[];{	extern char *ctime();	register  i;	int iter;	double f1, f2;	long t;	nlist("/unix", nl);	if(nl[0].type == -1) {		printf("dk_busy not found in /unix namelist\n");		exit(1);	}	mf = open("/dev/kmem", 0);	if(mf < 0) {		printf("cannot open /dev/kmem\n");		exit(1);	}	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++;	}	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 (dflg) {		long tm;		time(&tm);		printf("%s", ctime(&tm));	}	if (aflg)		printf("%.2f minutes total\n", etime/3600);	if (sflg) {		stats2(etime);		goto contin;	}	if (iflg) {		stats3(etime);		goto contin;	}	etime /= 60.;	if(tflg) {		f1 = s.tin;		f2 = s.tout;		printf("%6.1f", f1/etime);		printf("%6.1f", f2/etime);	}	for(i=0; i<3; i++)		stats(i);	for(i=0; i<4; i++)		stat1(i*8);	printf("\n");contin:	--iter;	if(iter)	if(argc > 1) {		sleep(atoi(argv[1]));		goto loop;	}}/* usec per word for the various disks */double	xf[] = {	16.0,	/* RF */	11.1,	/* RK03/05 */	2.48,	/* RP06 */};stats(dn){	register i;	double f1, f2, f3;	double f4, f5, f6;	long t;	t = 0;	for(i=0; i<32; i++)		if(i & (1<<dn))			t += s.etime[i];	f1 = t;	f1 = f1/60.;	f2 = s.numb[dn];	if(f2 == 0.) {		printf("%6.0f%6.1f%6.1f", 0.0, 0.0, 0.0);		return;	}	f3 = s.wds[dn];	f3 = f3*32.;	f4 = xf[dn];	f4 = f4*1.0e-6;	f5 = f1 - f4*f3;	f6 = f1 - f5;	printf("%6.0f", f2*60./etime);	printf("%6.1f", f5*1000./f2);	printf("%6.1f", f6*1000./f2);}stat1(o){	register i;	long t;	double f1, f2;	t = 0;	for(i=0; i<32; i++)		t += s.etime[i];	f1 = t;	if(f1 == 0.)		f1 = 1.;	t = 0;	for(i=0; i<8; i++)		t += s.etime[o+i];	f2 = t;	printf("%6.2f", f2*100./f1);}stats2(t)double t;{	register i, j;	for (i=0; i<4; i++) {		for (j=0; j<8; j++)			printf("%6.2f\n", s.etime[8*i+j]/(t/100));		printf("\n");	}}stats3(t)double t;{	register i;	double sum;	t /= 100;	printf("%6.2f idle\n", s.etime[24]/t);	sum = 0;	for (i=0; i<8; i++)		sum += s.etime[i];	printf("%6.2f user\n", sum/t);	sum = 0;	for (i=0; i<8; i++)		sum += s.etime[8+i];	printf("%6.2f nice\n", sum/t);	sum = 0;	for (i=0; i<8; i++)		sum += s.etime[16+i];	printf("%6.2f system\n", sum/t);	sum = 0;	for (i=1; i<8; i++)		sum += s.etime[24+i];	printf("%6.2f IO wait\n", sum/t);	sum = 0;	for (i=1; i<8; i++)		sum += s.etime[i]+s.etime[i+8]+s.etime[i+16]+s.etime[i+24];	printf("%6.2f IO active\n", sum/t);	sum = 0;	for (i=0; i<32; i++)		if (i&01)			sum += s.etime[i];	printf("%6.2f RF active\n", sum/t);	sum = 0;	for (i=0; i<32; i++)		if (i&02)			sum += s.etime[i];	printf("%6.2f RK active\n", sum/t);	sum = 0;	for (i=0; i<32; i++)		if (i&04)			sum += s.etime[i];	printf("%6.2f RP active\n", sum/t);}biostats(){register i;	lseek(mf,(long)nl[1].value, 0);	read(mf, (char *)&io_info, sizeof(io_info));	printf("%D\t%D\t%D\t%D\n",	 io_info.nread-io_delta.nread, io_info.nreada-io_delta.nreada,	 io_info.ncache-io_delta.ncache, io_info.nwrite-io_delta.nwrite);	for(i=0; i<30; ) {		printf("%D\t",(long)io_info.bufcount[i]-io_delta.bufcount[i]);		i++;		if (i % 10 == 0)			printf("\n");	}	io_delta = io_info;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -