xref: /plan9/sys/src/cmd/iostats/statfs.h (revision 3421e8c440c2d7d042d8991af6ba44d81cd752c5)
13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier  * statfs.h - definitions for statistic gathering file server
33e12c5d1SDavid du Colombier  */
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier #define DEBUGFILE	"iostats.out"
63e12c5d1SDavid du Colombier #define DONESTR		"done"
79a747e4fSDavid du Colombier #define DEBUG		if(!dbg){}else fprint
83e12c5d1SDavid du Colombier #define MAXPROC		16
93e12c5d1SDavid du Colombier #define FHASHSIZE	64
103e12c5d1SDavid du Colombier #define fidhash(s)	fhash[s%FHASHSIZE]
113e12c5d1SDavid du Colombier 
129a747e4fSDavid du Colombier enum{
139a747e4fSDavid du Colombier 	Maxfdata	= 8192,	/* max size of data in 9P message */
149a747e4fSDavid du Colombier 	Maxrpc		= 20000,/* number of RPCs we'll log */
159a747e4fSDavid du Colombier };
169a747e4fSDavid du Colombier 
173e12c5d1SDavid du Colombier typedef struct Fsrpc Fsrpc;
183e12c5d1SDavid du Colombier typedef struct Fid Fid;
193e12c5d1SDavid du Colombier typedef struct File File;
203e12c5d1SDavid du Colombier typedef struct Proc Proc;
213e12c5d1SDavid du Colombier typedef struct Stats Stats;
223e12c5d1SDavid du Colombier typedef struct Rpc Rpc;
233e12c5d1SDavid du Colombier typedef struct Frec Frec;
243e12c5d1SDavid du Colombier 
253e12c5d1SDavid du Colombier struct Frec
263e12c5d1SDavid du Colombier {
273e12c5d1SDavid du Colombier 	Frec	*next;
283e12c5d1SDavid du Colombier 	char	*op;
293e12c5d1SDavid du Colombier 	ulong	nread;
303e12c5d1SDavid du Colombier 	ulong	nwrite;
313e12c5d1SDavid du Colombier 	ulong	bread;
323e12c5d1SDavid du Colombier 	ulong	bwrite;
333e12c5d1SDavid du Colombier 	ulong	opens;
343e12c5d1SDavid du Colombier };
353e12c5d1SDavid du Colombier 
363e12c5d1SDavid du Colombier struct Rpc
373e12c5d1SDavid du Colombier {
383e12c5d1SDavid du Colombier 	char	*name;
393e12c5d1SDavid du Colombier 	ulong	count;
40ab3dc52fSDavid du Colombier 	vlong	time;
41ab3dc52fSDavid du Colombier 	vlong	lo;
42ab3dc52fSDavid du Colombier 	vlong	hi;
433e12c5d1SDavid du Colombier 	ulong	bin;
443e12c5d1SDavid du Colombier 	ulong	bout;
453e12c5d1SDavid du Colombier };
463e12c5d1SDavid du Colombier 
473e12c5d1SDavid du Colombier struct Stats
483e12c5d1SDavid du Colombier {
493e12c5d1SDavid du Colombier 	ulong	totread;
503e12c5d1SDavid du Colombier 	ulong	totwrite;
513e12c5d1SDavid du Colombier 	ulong	nrpc;
523e12c5d1SDavid du Colombier 	ulong	nproto;
539a747e4fSDavid du Colombier 	Rpc	rpc[Maxrpc];
543e12c5d1SDavid du Colombier };
553e12c5d1SDavid du Colombier 
563e12c5d1SDavid du Colombier struct Fsrpc
573e12c5d1SDavid du Colombier {
583e12c5d1SDavid du Colombier 	int	busy;			/* Work buffer has pending rpc to service */
5974f16c81SDavid du Colombier 	uintptr	pid;			/* Pid of slave process executing the rpc */
603e12c5d1SDavid du Colombier 	int	canint;			/* Interrupt gate */
613e12c5d1SDavid du Colombier 	int	flushtag;		/* Tag on which to reply to flush */
623e12c5d1SDavid du Colombier 	Fcall	work;			/* Plan 9 incoming Fcall */
639a747e4fSDavid du Colombier 	uchar	buf[IOHDRSZ+Maxfdata];	/* Data buffer */
643e12c5d1SDavid du Colombier };
653e12c5d1SDavid du Colombier 
663e12c5d1SDavid du Colombier struct Fid
673e12c5d1SDavid du Colombier {
683e12c5d1SDavid du Colombier 	int	fid;			/* system fd for i/o */
693e12c5d1SDavid du Colombier 	File	*f;			/* File attached to this fid */
703e12c5d1SDavid du Colombier 	int	mode;
713e12c5d1SDavid du Colombier 	int	nr;			/* fid number */
723e12c5d1SDavid du Colombier 	Fid	*next;			/* hash link */
733e12c5d1SDavid du Colombier 	ulong	nread;
743e12c5d1SDavid du Colombier 	ulong	nwrite;
753e12c5d1SDavid du Colombier 	ulong	bread;
763e12c5d1SDavid du Colombier 	ulong	bwrite;
779a747e4fSDavid du Colombier 	vlong	offset;			/* for directories */
783e12c5d1SDavid du Colombier };
793e12c5d1SDavid du Colombier 
803e12c5d1SDavid du Colombier struct File
813e12c5d1SDavid du Colombier {
829a747e4fSDavid du Colombier 	char	*name;
833e12c5d1SDavid du Colombier 	Qid	qid;
847dd7cddfSDavid du Colombier 	int	inval;
853e12c5d1SDavid du Colombier 	File	*parent;
863e12c5d1SDavid du Colombier 	File	*child;
873e12c5d1SDavid du Colombier 	File	*childlist;
883e12c5d1SDavid du Colombier };
893e12c5d1SDavid du Colombier 
903e12c5d1SDavid du Colombier struct Proc
913e12c5d1SDavid du Colombier {
9274f16c81SDavid du Colombier 	uintptr	pid;
933e12c5d1SDavid du Colombier 	int	busy;
943e12c5d1SDavid du Colombier 	Proc	*next;
953e12c5d1SDavid du Colombier };
963e12c5d1SDavid du Colombier 
973e12c5d1SDavid du Colombier enum
983e12c5d1SDavid du Colombier {
99*3421e8c4SDavid du Colombier 	Nr_workbufs 	= 40,
1003e12c5d1SDavid du Colombier 	Dsegpad		= 8192,
1013e12c5d1SDavid du Colombier 	Fidchunk	= 1000,
1023e12c5d1SDavid du Colombier };
1033e12c5d1SDavid du Colombier 
1043e12c5d1SDavid du Colombier Extern Fsrpc	*Workq;
1053e12c5d1SDavid du Colombier Extern int  	dbg;
1063e12c5d1SDavid du Colombier Extern File	*root;
1073e12c5d1SDavid du Colombier Extern Fid	**fhash;
1083e12c5d1SDavid du Colombier Extern Fid	*fidfree;
1093e12c5d1SDavid du Colombier Extern int	qid;
1103e12c5d1SDavid du Colombier Extern Proc	*Proclist;
1113e12c5d1SDavid du Colombier Extern int	done;
1123e12c5d1SDavid du Colombier Extern Stats	*stats;
1133e12c5d1SDavid du Colombier Extern Frec	*frhead;
1143e12c5d1SDavid du Colombier Extern Frec	*frtail;
1159a747e4fSDavid du Colombier Extern int	myiounit;
1163e12c5d1SDavid du Colombier 
1173e12c5d1SDavid du Colombier /* File system protocol service procedures */
1183e12c5d1SDavid du Colombier void Xcreate(Fsrpc*), Xclunk(Fsrpc*);
1199a747e4fSDavid du Colombier void Xversion(Fsrpc*), Xauth(Fsrpc*), Xflush(Fsrpc*);
1209a747e4fSDavid du Colombier void Xattach(Fsrpc*), Xwalk(Fsrpc*), Xauth(Fsrpc*);
1219a747e4fSDavid du Colombier void Xremove(Fsrpc*), Xstat(Fsrpc*), Xwstat(Fsrpc*);
1223e12c5d1SDavid du Colombier void slave(Fsrpc*);
1233e12c5d1SDavid du Colombier 
1243e12c5d1SDavid du Colombier void	reply(Fcall*, Fcall*, char*);
1253e12c5d1SDavid du Colombier Fid 	*getfid(int);
1263e12c5d1SDavid du Colombier int	freefid(int);
1273e12c5d1SDavid du Colombier Fid	*newfid(int);
1283e12c5d1SDavid du Colombier Fsrpc	*getsbuf(void);
1293e12c5d1SDavid du Colombier void	initroot(void);
1303e12c5d1SDavid du Colombier void	fatal(char*);
1313e12c5d1SDavid du Colombier void	makepath(char*, File*, char*);
1323e12c5d1SDavid du Colombier File	*file(File*, char*);
1333e12c5d1SDavid du Colombier void	slaveopen(Fsrpc*);
1343e12c5d1SDavid du Colombier void	slaveread(Fsrpc*);
1353e12c5d1SDavid du Colombier void	slavewrite(Fsrpc*);
1363e12c5d1SDavid du Colombier void	blockingslave(void);
1373e12c5d1SDavid du Colombier void	reopen(Fid *f);
1383e12c5d1SDavid du Colombier void	noteproc(int, char*);
1393e12c5d1SDavid du Colombier void	flushaction(void*, char*);
1403e12c5d1SDavid du Colombier void	catcher(void*, char*);
1413e12c5d1SDavid du Colombier ulong	msec(void);
1423e12c5d1SDavid du Colombier void	fidreport(Fid*);
143