;******************************************************************************* ; U T I L . M A C ;******************************************************************************* .TITLE UTILIZATION .IDENT /UTL1.0/ .ENABL LC .NLIST BEX .SBTTL AUTHOR'S CREDITS ; PROGRAMMER: HENRY TUMBLIN ; THE JACKSON LABORATORY COMPUTER SERVICE. ; DATE: MARCH 26,1978 ; VERSION: 1.0 ; RESIDENCE: DB1:[1,21]UTIL.MAC ; MODULE NAME: UTIL -- SYSTEM UTILIZATION MONITOR ; FOR: SYSTEMS/UTILITIES ; CORE REQUIREMENTS: 1-K ; MACHINE/SYSTEM: PDP11/45-IAS V2.0 ; TYPE/LANGUAGE: MAIN/ASSEMBLER ; INDIRECT COMMAND FILE: UTIL.CMD ; ABSTRACT: THIS ROUTINE CALCULATES THE PER-CENT SYSTEM ; UTILIZATION AND DISPLAYS IT ON THE OPERATORS ; CONSOLE. IT ALSO DISPLAYS THE TOTAL AVAILABLE ; NODES ON THE SYSTEM ; THIS ROUTINE ALSO WRITES TO THE FILE NOTICE.TXT ; IN SY:[1,1] TO GIVE THE USER A "LOGIN" MESSAGE ; OF THE TOTAL UTILIZATION. ; EDITS: 26-MAR-78 -- ADAPTED THIS VERSION FROM ORIGINAL ; "BENCH" ROUTINE DEVELOPED BY RANDY ADAMS, EXCEPT ; CHANGED THE FILE I/O TO BE FASTER AND ADDED THE ; NODE FEATURES. HRT. ; RESTRICTIONS: SINCE THIS ROUTINE DOES INHIBIT AND ENABLES ; TASK SWITCHING, IT MUST BE RUN AS A REALTIME ; TASK. ;******************************************************************************* .SBTTL TELL THE ASSEMBLER WHICH LIBMACS TO USE. .MCALL QIO$,QIOW$,DIR$,FSRSZ$,FDBDF$,FDRC$A,FDBK$A,FDOP$A .MCALL OPNS$M,CLOSE$,CVTA$,EXIT$S,C$C,MVCL,FINIT$ .SBTTL DEFINE ALL LOCAL MACROS .MACRO INH0 MOV PS.EXP,-(SP) BIS #140,PS.EXP .ENDM INH0 ; DEFINE THE LUNS USED INLUN=1 ;LUN FOR NOTICE.TXT SYLUN=2 ;LUN FOR SYSTEM CONSOLE .SBTTL DEFINE THE QIO'S RDREC: QIOW$ IO.RVB,INLUN,1,200,IOSTAT,, WTREC: QIOW$ IO.WVB,INLUN,2,200,IOSTAT,, PRINT: QIOW$ IO.WVB,SYLUN,3,200,,, IOSTAT: .WORD 0,0 .SBTTL DEFINE THE INPUT FDB .EVEN FSRSZ$ 0 ;FOR FCS PURPOSES MESFDB: FDBDF$ ;DEFINE THE FDB FDRC$A FD.RWM FDBK$A INBUF,512. FDOP$A INLUN,NOTIC NOTIC: .WORD DEVS,DEV .WORD UICS,UIC .WORD FNAMS,FNAM DEV: .ASCII /DB0:/ DEVS=.-DEV UIC: .ASCII /[1,1]/ UICS=.-UIC FNAM: .ASCII /NOTICE.TXT/ FNAMS=.-FNAM .SBTTL DEFINE STORAGE AREA. C$C MES: .ASCII .ASCII /NOTE: Current Utilization is now at / DATA: .BLKB 6. .ASCII .ASCII / TOTAL NODES AVAILABLE = / NODES: .ASCII / / .ASCII / MAX HOLE = / MHOLES: .ASCII / / MESZ=.-MES .EVEN INBUF: .BLKB 512. UTIL:: FINIT$ INH0 MOV .SSTIM+2,R1 ;GET TOTAL STAT TIME CLR .SSTIM+2 ;RESET FOR NEXT TIME MOV .SNTIM+2,R2 ;GET TOTAL NULL TIME CLR .SNTIM CLR .SNTIM+2 ;RESET TOTAL NULL TIME MOV .SPTIM+2,R3 ;GET SWAP TIME CLR .SPTIM CLR .SPTIM+2 ;RESET SWAP TIME CALL ..ENB0 ;ALLOW SWITCHING ; THE EQUATION USED TO CALCULATE THE SYSTEM UTILIZATION IS AS ; FOLLOWS. ; UTIL=((.SSTIM-(.SNTIM-(.SPTIM*2)))*50.)/.SSTIM ASL R3 ;MULTIPLY SWAP BY 2, SWAPPING ;DOESN'T OCCUR UNTIL SYSTEM HALF USED SUB R3,R2 ;TOTAL PROGRESS OF ALL TIMESHARING JOBS MOV R1,R3 SUB R2,R3 CLR R2 MUL #50.,R3 DIV R1,R2 ; NOW CONVERT THE STATISTIC TO A PRINTABLE GRAPHIC ADD .SSTIM,R2 ;TRY TO GET A MEAN AVERAGE ASR R2 ;DIVIDE BY 2 TO GET MEAN MOV R2,.SSTIM ;AND STORE IT IN THE EXEC FOR NEXT TIME MOV #DATA,R0 ;DST BUFFER MOV R2,R1 ;SOURCE WORD CLR R2 ;ZERO SUPPRESS JSR PC,$CBDMG ;CONVERT TO DECIMAL MAGNITUDE MOVB #'%,(R0) ;AND PUT A % SIGN AFTER IT ; NOW DO THE FILE STUFF .MCALL OPNS$M OPNS$M #MESFDB ;OPEN THE FDB DIR$ #RDREC ;READ A BLOCK FROM THE FILE MVCL #DATA,#INBUF+43.,#6. ;CHANGE UTILIZATION FIGURE DIR$ #WTREC ;AND REWRITE THE BLOCK CLOSE$ #MESFDB ;AND CLOSE THE FILE ; NOW DO THE SAME FOR THE MAX HOLE AND NUMBER OF NODES ; DISABLE TASK SWITCHING INH0 MOV .POLLH,R4 ;GET POOL LIST HEAD CLR R3 ;CLEAR LARGEST HOLE COUNT CLR R5 ;CLEAR TOTAL NODES COUNT 10$: ADD 2(R4),R5 ;ADD IN NEW HOLE SIZE CMP 2(R4),R3 ;IS THIS THE LARGEST HOLE SO FAR? BLOS 20$ ;BR IF NO. MOV 2(R4),R3 ;GET NEW SIZE 20$: TST (R4) ;DONE?? BEQ 30$ ;BRANCH IF YES MOV @R4,R4 ;ELSE MOVE TO NEXT HOLE BR 10$ ;LOOP TILL THRU 30$: CALL ..ENB0 ;ENABLE TASK SWITCHING ; NOW CONVERT THE NUMBER OF NODES AND THE MAX HOLE TO ASCII MOV R5,R1 ;SET UP FOR ASCII CONVERSION ASH #-4,R1 ;DIVIDE BY 16. FOR CORRECT COUNT CLR R2 ;ZERO SUPPRESS MOV #NODES,R0 ;SET DESTINATION @ JSR PC,$CBDMG ;AND CONVERT THE NUMBER OF NODES MOV #MHOLES,R0 ;AND SET DST @ FOR MAX HOLE MOV R3,R1 ;SET UP FOR CONVERSION ASH #-4,R1 ;DIVIDE BY 16 FOR CORRECT COUNT JSR PC,$CBDMG ;AND CONVERT TO DECIMAL DIR$ #PRINT ;OUTPUT DATA EXIT$S ;AND EXIT GRACEFULLY .END UTIL