.TITLE SNP - SNAP SHOT PERFORMANCE PARAMETERS .IDENT /01.S/ ;+ ; JAMES G. DOWNWARD ; KMS FUSION, INC ; 3941 RESEARCH PARK DRIVE ; ANN ARBOR, MICH 48106 ; (313)-769-8500 ; ; TAKE A SNAPSHOT OF THE CURRENT STATE OF THE SYSTEM PERFORMANCE PARAMETERS ; AND WRITE THEM TO A COMMAND FILE SO THAT A CENTRAL INDIRECT COMMAND FILE ; CAN HAVE ACCESS TO THE VALUES. THE FORMAT OF THE COMMAND FILE IS ; .SETN $PARM VAL ; THE GLOBLE VARIABLES TRANSFER THE VALUE TO THE CONTROLING COMMAND FILE. ; ; MODIFIED BY: ; ; ; ; MACRO LIBRARY CALLS ; .MCALL FSRSZ$,FDBDF$,FDRC$A,FDBK$A,NMBLK$,FINIT$ .MCALL FDOP$A .MCALL QIO$C,EXIT$S,OPEN$W,FDAT$A,PUT$,WTSE$C .MCALL ALUN$C,UCBDF$ UCBDF$ ; ; ; ; ; FSRSZ$ 3 ; FDBOUT: FDBDF$ FDAT$A R.VAR,FD.CR!FD.BLK FDRC$A ,BUFOUT,40. FDOP$A 2,,SNAP,FO.WRT ; SNAP: NMBLK$ SNAPSHOT,CMD,1 ; ; ; * LOCAL VARIABLES * ; ; BUFOUT: .BLKB 58. ;FOR OUTPUT RECORD ARGBL: .BLKW 6 ;FOR USE BY $EDMSG IOSTAT: .BLKW 2 .PAGE ; ; * THESE ARE THE ASCIZ STRINGS USED BY $EDMSG * ; MSG1: .ASCIZ /.DISABLE QUIET/ MSG2: .ASCIZ /.ENABLE QUIET/ NOTON: .ASCIZ /SYSLOG IS NOT ACTIVE/<7> NOACNT: .ASCIZ /SYSTEM ACCOUNTING NOT SYSGENED IN/<7> CPUTIM: .ASCIZ /.SETN $CPUTM %M./ SHFRQ: .ASCIZ /.SETN $SHFRQ %M./ LDRQ: .ASCIZ /.SETN $LDRQ %M./ CKPRQ: .ASCIZ /.SETN $CKPRQ %M./ UQIOCT: .ASCIZ /.SETN $QIOCT %M./ ; ; DEFINE ACCOUNTING BLOCK OFFSETS FOR UCB ; .IFDF M$$CLI ; IF MULTIPLE CLI SUPPORT BASE = U.CLI ; OFFSET FROM CLI POINTER .IFF ; IF NOT SUPPORTED BASE = U.LUIC ; OFFSET FROM LOGIN UIC .ENDC U.QIO1=BASE-22 ; LOVAL QIO COUNT U.QIO2=BASE-20 ; HIVAL QIO COUNT U.TIC1=BASE-10 ; LOVAL CPU TIME U.TIC2=BASE-6 ; HIVAL CPU TIME ; ; ; .EVEN START: FINIT$ ALUN$C 1,TI,0 ; ASSIGN LUN 1 TO TI: ;CREATE SNAPSHOT.CMD OPEN$W #FDBOUT,,,,,,ERR1 MOV #FDBOUT,R4 MOV #MSG1,R1 ; DISABLE QUIET CALL PUTMSG ; WRITE IT OUT .IFNDF S$$ACC ; IF ACCOUNTING NOT DEFINED MOV #NOACNT,R1 ; SET UP MESSAGE CALL PUTMSG ; WRITE IT OUT JMP 90$ ; CLOSE AND EXIT .ENDC TST $ACMSK ; IS ACCOUNTING RUNNING BNE 10$ ; IF NE 0, IS ACTIVE MOV #NOTON,R1 ; SAY ITS NOT ON CALL PUTMSG ; WRITE IT OUT JMP 90$ ; CLOSE AND EXIT 10$: MOV $TKTCB,R1 ; POINT TO OUR TASK HEADER MOV T.UCB(R1),R1 ; GET OUR UCB ADDRESS FOR TI: MOV R1,R4 ; SAVE FOR LATER MOV $TKPS,R0 ; DIVIDE BY TICS/SEC MOV U.TIC1(R1),R2 ; GET LOVAL OF CPU TIME MOV U.TIC2(R1),R1 ; GET HIVAL OF CPU TIME CALL $DDIV ; DIVIDE MOV R2,ARGBL ; GET LOW ORDER CPU TIME IN SEC MOV #CPUTIM,R1 ; GET SET TO WRITE CALL PUTMSG ; WRITE IT OUT MOV $SHFRQ,ARGBL ; GET SHUFFLER REQUEST COUNT MOV #SHFRQ,R1 ; GET SET TO WRITE CALL PUTMSG ; WRITE IT OUT MOV $CKPRQ,ARGBL ; GET CHECKPOINT REQUEST COUNT MOV #CKPRQ,R1 ; GET SET CALL PUTMSG ; AND WRITE IT OUT MOV $LDRQ,ARGBL ; GET LOADER REQUEST COUNT MOV #LDRQ,R1 ; GET SET TO WRITE CALL PUTMSG ; WRITE IT OUT MOV #10,R0 ; DIVIDE QIOCOUNT BY 10 MOV R4,R1 ; RESTORE UCB ADDRESS MOV U.QIO1(R1),R2 ; GET QIO COUNT (LOW VAL) MOV U.QIO2(R1),R1 ; GET QIO COUNT(HIGH VAL) CALL $DDIV ; DIVIDE BY 10 MOV R2,ARGBL ; GET READY TO WRITE MOV #UQIOCT,R1 ; CALL PUTMSG ; AND WRITE IT OUT 90$: MOV #MSG2,R1 ; ENABLE QUIET CALL PUTMSG ; WRITE IT OUT ; ; NOW ITS NICE TO TRUNCATE A FILE BEFORE CLOSING IT. THERE IS ; A WEE BIT OF A TRICK TO GET .TRNCL TO WORK HOWEVER. IF ALL ONE ; DOES IS TO PUT THE ADDRESS OF THE FDB INTO R0, AND CALL .TRNCL, ; IT WILL FAIL, AND F.ERR(R0) WILL HAVE A 366 IN IT(IMPLYING ; EOF DETECTED). IF, HOWEVER, ONE REWINDS THE FILE TO ITS START, ; AND THEN CALLS .TRNCL, IT WORKS!. MORAL, DON'T CALL .TRNCL IF ; ONE IS POSTITIONED AT THE CURRENT EOF! ; MOV #FDBOUT,R0 ; SET FDB ADR FOR TRUNCATE/CLOSE CLR R1 ; GET SET TO REWIND FILE MOV #1,R2 ; " " " " " CLR R3 ; " " " " " CALL .POINT ; REWIND TO BLOCK 0, BYTE 0 CALL .TRNCL ; TRUNCATE,CLOSE BCC 100$ ; EXIT IF NO ERRORS CALL ERR6 ; ELSE PRINT ERROR MESSAGE ; 100$: EXIT$S ; .PAGE ; ; THE PUTMSG SUBROUTINE CREATES THE ASCII OUTPUT LINE FOR THE COMMAND ; FILE BY MEANS OF THE SYSTEM LIBRARY ROUTINE, $EDMSG. IT THEN ; EXECUTES A PUT$ TO WRITE THE COMMAND LINE TO THE FILE WHOSE FDB ; ADDRESS IS FOUND IN R4. ; PUTMSG: MOV #BUFOUT,R0 ;FOR $EDMSG OUTPUT MOV R2,-(SP) ;SAVE TOTEST POINTER MOV #ARGBL,R2 ;ALSO USED BY $EDMSG CALL $EDMSG ;R1 WILL HOLD THE MESSAGE BYTE CT AFTER CALL PUT$ #FDBOUT,,R1,ERR8 ;OUTPUT TO SYSTEM DISK FILE MOV (SP)+,R2 ;RESTORE TOTEST POINTER RETURN .PAGE ; ERR1: MOV #1,R1 MOV F.ERR(R0),R5 BR ERRORS ERR6: MOV #6,R1 MOV F.ERR(R0),R5 BR ERRORS ERR8: MOV #8.,R1 MOV F.ERR(R0),R5 BR ERRORS ERRORS: MOV #BUFERR,R0 ;FOR PRINTING PROGRAM ERROR NUMBER CLR R2 CALL $CBDSG ;CONVERT TO DECIMAL FORMAT MOVB #40,@R0 QIO$C IO.WVB,1,1,,,, WTSE$C 1 MOV #BUFERR,R0 MOV R5,R1 ;FOR PRINTING SYSTEM ERROR CODE MOV #1,R2 CALL $CBOMG ;CONVERT TO OCTAL FORMAT QIO$C IO.WVB,1,1,,,, WTSE$C 1 RETURN ; ERR: .ASCII /SNPSHT ERROR # / ERRSZ=.-ERR+2 BUFERR: .BLKB 8. ; ; .END START