MainframeSupports
tip uge 31/2010:

For over tre år siden i uge 13/2007 skrev jeg om hvordan du kan måle CPU forbruget for en stump kode i et CICS program. Denne stump kode virker desværre ikke mere, hvis din CICS installation er blevet opgraderet til CICS Transaction Server 3.2 eller endnu nyere. For tidligere versioner af CICS virker det tidligere tip fortsat. Jeg vil her vise en stump kode, der virker både før og efter CICS TS 3.2:

DATA DIVISION.
WORKING-STORAGE SECTION.
01  DFHMNTDS-POINTER POINTER.
01  WORKUSED PIC S9(9) BINARY.
01  LASTUSED PIC S9(9) BINARY.
01  CPUUSAGE PIC S9(9) BINARY.
LINKAGE SECTION.
01  DFHMNTDS-OLD.
  02  MNTLEN PIC S9(4) BINARY.
  02  FILLER PIC X(1262).
  02  CPUTIME-OLD PIC S9(9) BINARY.
01  DFHMNTDS-NEW.
  02  FILLER PIC X(1448).
  02  CPUTIME-NEW PIC S9(18) BINARY.
PROCEDURE DIVISION.
    ...
    MOVE 0 TO LASTUSED
    PERFORM CPU-SO-FAR
    ... ALL THE WORK I WANT TO MEASURE
    PERFORM CPU-SO-FAR
    DISPLAY 'MEASURED CPU CONSUMPTION IN 1/1000 SECONDS = ' CPUUSAGE
    ...
CPU-SO-FAR.
    EXEC CICS
      SUSPEND NOHANDLE
    END-EXEC
    EXEC CICS
      COLLECT STATISTICS SET(DFHMNTDS-POINTER)
      MONITOR(EIBTASKN) NOHANDLE
    END-EXEC
    IF EIBRESP = 0
      SET ADDRESS OF DFHMNTDS-OLD TO DFHMNTDS-POINTER
      IF MNTLEN < 2300
        COMPUTE WORKUSED = CPUTIME-OLD / 62,5
      ELSE
        SET ADDRESS OF DFHMNTDS-NEW TO DFHMNTDS-POINTER
        COMPUTE WORKUSED = CPUTIME-NEW / 4096000
      END-IF
      COMPUTE CPUUSAGE = WORKUSED - LASTUSED
      MOVE WORKUSED TO LASTUSED
    ELSE
      MOVE 0 TO WORKUSED
      MOVE 999999999 TO CPUUSAGE
    END-IF
    .

I forhold til det tidligere tip har jeg indført en EXEC CICS SUSPEND, da denne kommando tvinger CICS til at opdatere CPU-tiden. Jeg oplevede med det tidligere tip, at CPU tiden var 0 selv om jeg vidste, at der var brugt ret meget CPU. Det hjalp SUSPEND på. Længden på det nye areal på den installation, jeg arbejder på (CICS TS 3.2), er 2360 og jeg er ret sikker på, at længden på det gamle areal er mindre end 2300, så ved hjælp af test på længden finder jeg ud af, om jeg skal benytte den gamle eller den nye definition af DFHMNTS.

I CICS TS 3.2 har CPUTIME pludselig fået samme nøjagtighed som CPU tiden registreret på ASCB'en. Det er sandsynligvis pga. den tidligere større unøjagtighed, at CICS har fået ændret på CPUTIME. Det var bare lidt kedeligt, at det skulle gå ud over mit tidligere tip. Jeg kan til gengæld bekræfte, at CPUTIME indbefatter alt CPU forbrug for task'et, uanset hvordan transaktionen er sat op.

Forrige danske tip        Last tip in english        Tip oversigten