jay@gdx.UUCP (Jay A. Snyder) (08/28/90)
what exactly is this mon386 program? What does it do? -- ============================================================================== Jay A. Snyder "Let Me Up! I've had enough" wa3wbu!gdx!jay@uunet.uu.net uunet!wa3wbu!gdx!jay
gt0178a@prism.gatech.EDU (BURNS,JIM) (08/29/90)
in article <50@gdx.UUCP>, jay@gdx.UUCP (Jay A. Snyder) says: > In-reply-to: jct@jct.UUCP's message of 24 Aug 90 02:14:57 GMT > > what exactly is this mon386 program? > > What does it do? > -- This is the README file for monitor. Isn't that news. Written and copyrighted by John C. Tompkins 1989. You may use this for noncommercial use only. I don't have an army of lawyers but you won't sleep well if you do try and steal it! :-) John C. Tompkins 4616 NW 59th St. Oklahoma City, Oklahoma 73122 (405) 728-1208 This monitor program reads various kernal data structures concerning system capacity and performance and displays them in a very easy to understand and "move about" display. This supplied version will run on XENIX 286 and Convergent CTIX. If you are a normal user and don't know quite a bit about programming and don't have XENIX or CTIX, I'm afraid you won't be able to get this program to compile. You'll have to wait for someone who has a system like yours to do it for you. Sorry, it can't be helped. Since its reads kernal data, it is VERY dependent on how your UNIX is implemented. The System V's I've seen are similar but still vary. XENIX 286 is similar to System V but again different. XENIX 386, prior to UNIX compatibility, I understand has many Berkley kernal data structures. And of course Berkley is different. There is no way for me to implement all the different versions. I have done XENIX 286 and Convergent Technologies CTIX (at least on a MiniFrame), this should give porters a good start for places to look. Search for the symbol "#ifdef CTIX", "#ifdef XENIX", and "#ifdef SYSV". To get an idea of porting difficulity, look in the system include directory, <sys/*.h>. On 286 XENIX, include files used, among others, are sysinfo.h, proc.h, user.h, inode.h and file.h. Data structures used are, among others, sysinfo, proc, user, inode and file. These include files define what data is available to monitor and how it is organized, this is what changes for different UNIX versions. Many versions, such as Convergent CTIX, include data on disk IO queues and response times. Berkley based versions have similar data but it is organized very much differently. I understand 386 Unix has a lot more interesting data than whats available on 286 XENIX. Anyhow, the porting process involves understanding these data structures, whats available in them, and what would be interesting to put on the screen. Its really not too difficult, just a matter of many small details. Some things, such as on top CPU monitor the percentages for each process, may be a little tricky and not immediately obvious how it works. Actually the most difficulity I had in porting to CTIX and XENIX was figuring out where on the swap device the kernal stored the "user" structure. I had to experiment till I found what worked and it isn't the same on CTIX as XENIX! This is true on several data items, they are not part of the normal system documentation. You just have to keep poking your nose where it doesn't belong and eventually you will accomplish something. The library routines sould be fairly easy to port. One problem could be the system is based on 'termcap' entries and not the newer System V 'terminfo'. Someone needs to port that, no big deal. It also uses System V style 'ioctl' calls for terminal line mode control, not Berkley 'stty/gtty'. If you do a port to another system, PLEASE send me your results or diffs so I can keep up to date. Also, I would strongly suggest posting your port or diffs so others can use it. Some things I've thought about monitoring, but so far haven't gotten around to are inter-process communication (message queues, shared memory and semaphores) [as in ipcs], logins/logouts [as in who], free disk space [as in df], print spooler queues [as in lpstat], serial line status [as in stty] etc. One reason I haven't done these is on the 286 medium model I'm limited to 64k data+stack and I've used up 99.99% of that. I don't want to go to a large model because all the far data references will slow down the program too much. I wanted to keep the CPU usage down to a reasonable level. If someone expands the capabilities I would appreciate a "#ifdef XENIX286" mode so I can still use it! Actually, I'm so pressed for memory I've made some of the popup help windows smaller and decreased the stack size, it still runs out on some help windows but the main program still runs. I have included some sample screens (captured directly to a disk file) showing some of the capabilities. This is by no means a through example, it doesn't show any help windows, dynamic scaling of graphs, menu usage, modification of sample intervals. If you study sysinfo.h, proc.h, user.h, file.h, text.h, inode.h, vars.h you should be able to figure out where the data comes from for each display. (And of course if its as user friendly as I hope, I don't even have to explain what you are looking at!) If you can figure it out, porting should be no problem. (Hey, I figured it out and nobody told me how!) I have run into real problems, I'm drop me a line, I'll see what I can do. Note that the '*' characters indicate reverse video spaces and line drawing sets are used instead of '-' and '|' (you just can't "capture" these since they are not true ASCII characters. I do have a "Uniplex" capture mode where you can get everything except color). Sample screens : *System*Monitor*Menu* 18:37 Fri, Jun 2, 1989 A : CPU Monitor B : Disk Monitor C : I/O Monitor D : Capacity Monitor E : Miscellaneous Monitor F : User Process Monitor G : Top CPU Process Monitor *(Q)uit*or*selection* *CPU*Monitor* 18:38 Fri, Jun 2, 1989 +-( 59)---------------------------+ +-( 8)---------------------------+ | ******************* | | ** | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| | 0 20 40 60 80 100| +----------- % CPU Idle ----------+ +----------- % Wait I/O ----------+ +-( 19)---------------------------+ +-( 47)---------------------------+ | ******* | | *************** | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| | 0 20 40 60 80 100| +----------- % CPU User ----------+ +---------- % Wait Swap ----------+ +-( 21)---------------------------+ +-( 0)---------------------------+ | ****** | | | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| | 0 20 40 60 80 100| +---------- % CPU System ---------+ +------ % Wait Physical I/O ------+ *(Q)uit,*(T)op,*(W)hen*or*<SPACE>*to*backup* *Disk*Monitor* 18:38 Fri, Jun 2, 1989 +-( 49)--------------------+ +-( 4)--------------------+ | **************** | | ************* | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| | 0 2 4 6 8 10| +--------- Reads / Second --------+ +-------- Writes / Second --------+ +-(100)---------------------------+ +-( 25)---------------------------+ | ******************************* | | ******* | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| | 0 20 40 60 80 100| +---------- % Read Cache ---------+ +--------- % Write Cache ---------+ +-( 0)--------------------+ +-( 0)--------------------+ | | | | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 2 4 6 8 10| | 0 2 4 6 8 10| +------- Swap Ins / Second -------+ +------- Swap Outs / Second ------+ *(Q)uit,*(T)op,*(W)hen*or*<SPACE>*to*backup* *I/O*Monitor* 18:38 Fri, Jun 2, 1989 +-( 30202)--------------------+ +-( 172)--------------------+ | ********** | | ****** | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20K 40K 60K 80K 100K| | 0 200 400 600 800 1K| +---- Read Characters / Second ---+ +--- Write Characters / Second ---+ +-( 0)--------------------+ +-( 0)--------------------+ | | | | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 2 4 6 8 10| | 0 2 4 6 8 10| +---- Read Interrupts / Second ---+ +--- Write Interrupts / Second ---+ +-( 1)--------------------+ +-( 174)--------------------+ | **** | | ****** | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 2 4 6 8 10| | 0 200 400 600 800 1K| +---- Read TTY Chars / Second ----+ +---- Write TTY Chars / Second ---+ *(Q)uit,*(T)op,*(W)hen*or*<SPACE>*to*backup* *Capacity*Monitor* 18:38 Fri, Jun 2, 1989 +-( 345600)--------------------+ Wait count : 0 | *********** | Free mem size : 107520 | +-----+-----+-----+-----+-----+ | 84480 | 0 200K 400K 600K 800K 1M| 74240 +------ Free Memory in Bytes -----+ 39424 22528 +-( 11)-------( 60)-+ +-( 11)-------( 40)-+ | **** | | **** | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| | 0 20 40 60 80 100| +--------- Process Count ---------+ +---- Open Text Segment Count ----+ +-( 20)-------( 100)-+ +-( 33)-------( 100)-+ | ******* | | *********** | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| | 0 20 40 60 80 100| +-------- Open File Count --------+ +-------- Open Inode Count -------+ *(Q)uit,*(T)op,*(W)hen*or*<SPACE>*to*backup* *Miscellaneous*Monitor* 18:39 Fri, Jun 2, 1989 +-( 17)--------------------+ | ****** | | +-----+-----+-----+-----+-----+ | | 0 20 40 60 80 100| +----- System Calls / Second -----+ +-( 1)--------------------+ +-( 0)--------------------+ | **** | | | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 2 4 6 8 10| | 0 2 4 6 8 10| +--- Process Switches / Second ---+ +--------- Igets / Second --------+ +-( 0)--------------------+ +-( 0)--------------------+ | | | | | +-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+ | | 0 2 4 6 8 10| | 0 2 4 6 8 10| +-------- Nameis / Second --------+ +-------- Dirblks / Second -------+ *(Q)uit,*(T)op,*(W)hen*or*<SPACE>*to*backup* *Top*CPU*Monitor* 18:39 Fri, Jun 2, 1989 +------------------------------------------------+ A : idle | ************************************ | | | B : sh 1639 | ***** | | | C : sh 1638 | ** | | | D : monitor 1620 | | | | | | | | | | | | | | | | | | | +--------+--------+--------+--------+--------+ | | 0 20 40 60 80 100| +--------------- % CPU Utilization --------------+ *(Q)uit,*(T)op,*(W)hen,*<SPACE>*to*backup*or*selection* User - jct *User*Process*Monitor*Menu* 18:39 Fri, Jun 2, 1989 A : 38 - - sh B : 39 - - sh C : 1620 - 8% - monitor D : 1639 - - uucico E : 1638 - - sh F : 1640 - - dialHA24 *(Q)uit,*(T)op,*(U)ser,*(W)hen,*(Z)ap,*<SPACE>*to*backup*or*selection* 39 - sh *Process*Monitor* 18:40 Fri, Jun 2, 1989 +-( 0)---------------------------+ Start Time : 18:19:41 | | Start Date : Fri, May 26, 1989 | +-----+-----+-----+-----+-----+ | User ID : jct, jct | 0 20 40 60 80 100| Group ID : psm, psm +----------- % CPU User ----------+ TTY : tty02 Parent PID : 1 Process Group : 39 +-( 0)---------------------------+ Process Status : Sleeping | | Process Flags : Loaded Valid | +-----+-----+-----+-----+-----+ | Priority : 28, 20 | 0 20 40 60 80 100| Run Time : 606038 +---------- % CPU System ---------+ Total CPU Time : 7 - 0% CPU User Time : 2 - 0% CPU Sys Time : 4 - 0% +-( 0)--------------------+ Open Files : 3 | | Block Reads : 88 | +-----+-----+-----+-----+-----+ | Block Writes : 89 | 0 2 4 6 8 10| I/O Count : 28384 +------- I/O Chars / Second ------+ Curr Dir I-node : 1518 Root Dir I-node : 0 *(Q)uit,*(T)op,*(S)witch,*(W)hen,*(Z)ap*or*<SPACE>*to*backup* 39 - sh *Process*Monitor* 18:40 Fri, Jun 2, 1989 Umask Value : -------w- Open File Status Ulimit Value : 2097152 Fid Typ Mode Cnt Offset I-node Text Size : 34816/2 0 C RW 3 239175 117 Data Size : 14336 1 C RW 3 239175 117 Stack Size : 25088 2 C RW 3 239175 117 Pending Signals : None Time to Alarm : 0 Signal Hangup Trapped Signal Interrupt Trapped Signal Quit Ignored Signal Illegal instruct Trapped Signal Trace trap Trapped Signal IOT Trapped Signal EMT Trapped Signal FP error Trapped *(Q)uit,*(T)op,*(S)witch,*(W)hen,*(Z)ap*or*<SPACE>*to*backup* -- BURNS,JIM Georgia Institute of Technology, Box 30178, Atlanta Georgia, 30332 uucp: ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!gt0178a Internet: gt0178a@prism.gatech.edu