Friday, May 16, 2025

Generate report for SMF type 30, subtype 4 & 5 records with ICETOOL

SMF type 30 (subtype 4) records contain useful information on the resource consumption of a particular job step. These include CPU time (total, and broken down by field), elapsed time, EXCPs (total, and broken down by device), and device connect time.
 
These SMF records provide a wealth of performance data, which is often difficult to analyse in its raw form. You need to convert this raw data into processed data that can be used for trend analysis and management reports. If you do not have access to a performance analysis and reporting product, you can use the DFSORT editing functions in combination with the reporting capabilities of ICETOOL or OUTFIL to generate performance data reports. The INCLUDE/OMIT, OUTFIL, and INREC/OUTREC control statements are helpful in selecting the specific fields of the particular SMF, RMF, or other data records to be analysed. ICETOOL or OUTFIL can then be used to generate printable reports from the resulting raw data. See z/OS DFSORT Application Programming Guide (SC26- 7523-00) for more information about ICETOOL, OUTFIL, and editing functions.
 
ICETOOL was used to select and display SMF type 30 (subtype 4) records below. 

Run this job-1 to determine what offsets to use for the next job:
 
Job 1
//* OFFSET30 JCL: RUN THIS JOB TO
//* FIND OUT WHAT SMF RECORD 30/4 OFFSETS
//* TO USE FOR THE NEXT JOB.
//* IDENTIFICATION SECTION (SMF30IOF)
//* I/O ACTIVITY SECTION   (SMF30UOF)
//* PROCESSOR SECTION      (SMF30COF)
//* STORAGE SECTION        (SMF30COF)
//* PERFORMANCE SECTION    (SMF30POF)
//*------------------------------------------
//TOOL1 EXEC PGM=ICETOOL
//DFSMSG DD SYSOUT=*
//RAWSMF DD DSN=your.smf.weekly.ds,DISP=SHR
//SMFOFF DD DSN=&&SMFOFF,DISP=(,PASS),
//          SPACE=(CYL,(50,25)),UNIT=SYSDA,
//          DCB=(RECFM=VB,LRECL=32756,BLKSIZE=0)
//SRT1CNTL DD *
 OPTION DYNALLOC,VLSHRT,STOPAFT=10,SPANINC=RC4
 INCLUDE COND=(6,1,BI,EQ,X'1E',AND,23,2,BI,EQ,X'0004')
 SORT FIELDS=(7,4,FI,A)
/*
//TOOLMSG DD SYSOUT=*
//REPORT DD SYSOUT=*
//TOOLIN DD *
 SORT FROM(RAWSMF) TO(SMFOFF) USING(SRT1)
 DISPLAY FROM(SMFOFF) LIST(REPORT)        -
 TITLE('SMF RECORD 30/4 OFFSETS DISPLAY') -
 PAGE DATE TIME BLANK                     -
* USE VALUES DISPLAYED FOR A, B, C, D, E IN THE NEXT ICETOOL JOB
 HEADER('ID. SEC. (A)')    ON(33,4,FI)    -
 HEADER('I/O SEC.(B)')     ON(41,4,FI)    -
 HEADER('PROC SEC.(C)')    ON(57,4,FI)    -
 HEADER('STORAGE SEC.(D)') ON(73,4,FI)    -
 HEADER('PERF. SEC. (E)')  ON(81,4,FI)
/*
//*
 
Output from this job looks like this:
 
SMF RECORD 30/4 OFFSETS DISPLAY        - 1 -        05/16/25        09:10:12   
                                                                               
ID. SEC. (A)   I/O SEC.(B)   PROC SEC.(C)   STORAGE SEC.(D)   PERF. SEC. (E)   
------------   -----------   ------------   ---------------   --------------   
         257           507            591               807             1063   
 
Use a=257, b=507, c=591, d=807, and e=1063 in the below ICETOOL job (Job 2) to generate step level reports from SMF 30 sub type 4.

Job 2 

//*-----------------------------------------------------------------
//* Extract type 30 smf records from a dumped smf dataset
//*-----------------------------------------------------------------
//TOOL2 EXEC PGM=ICETOOL,REGION=0M
//DFSMSG   DD SYSOUT=*
//RAWSMF   DD DSN=your.smf.weekly.ds,DISP=SHR
//SMFEXTR  DD DSN=&&ASID3Ø,DISP=(,PASS),
//            SPACE=(CYL,(50,50)),UNIT=SYSALLDA
//COPYOUT  DD DSN=&&ASID,DISP=(,PASS),
//            SPACE=(TRK,(30,30)),UNIT=SYSALLDA
//DFSPARM  DD *
 OPTION SMF=FULL
//SRT1CNTL DD *
 OPTION DYNALLOC,VLSHRT,SPANINC=RC4
*Only these records that comply to:
*SMF 30, sub type 4, id offset = 257, excp > 0
 INCLUDE COND=(6,1,BI,EQ,X'1E',AND,23,2,BI,EQ,X'0004',AND,
 33,4,BI,EQ,X'00000101',AND,                id offset = 257
 512,4,BI,GT,X'00000000')                   excp > 0
 SORT FIELDS=(11,4,PD,A,7,4,BI,A)
/*
//SRT2CNTL DD *
 OPTION COPY,VLSHRT
* Run previous icetool job (OFFSET30) to get values for a, b, c, d, e
* and substitute with the appropriate values
* SMF30LEN (RDW)  0+1=1 start of record
* SMF30TME (TIME) 6+1=7 start of record
* SMF30DTE SMF record write date: 10+1
*
* Identification Section offset (a): 257 + 1 = 258
* off len
*  0+258: 258,8 SMF30JBN - Job or session name.
*  8+258: 266,8 SMF30PGM - Program name
* 32+258: 290,8 SMF30JNM - JES job identifier.
*
* I/O Activity Section offset (b): 507 + 1 = 508
*  4+508: 512,4 SMF30TEP - EXCP count
* 18+508: 526,4 SMF30TCN - Total device connect time for this ASID.
* 32+508: 540,4 SMF30AIC - DASD I/O connect time
* 36+508: 544,4 SMF30AID - DASD I/O disconnect time
* 40+508: 548,4 SMF30AIW - DASD I/O pending + control unit queue time
*
* Processor Accounting Section offset (c): 591 + 1 = 592
*  4+592: 596,4 SMF30CPT - CPU time under the TCB
*  8+592: 600,4 SMF30CPS - CPU time under the SRB
* 44+592: 636,4 SMF30IIP - CPU time used to process I/O interrupts
* 48+592: 640,4 SMF30RCT - CPU time used by the region control task
* 52+592: 644,4 SMF30HPT - CPU time used to transfer data:HSP <-> ASID
*
* Storage and Paging Section offset (d): 807 + 1 = 808
*  4+808: 812,2 SMF30PRV - Largest stg used from bottom of priv.
*  6+808: 814,2 SMF30SYS - Largest stg used from top of priv.
*  8+808: 816,4 SMF30PGI - Paged in from AUX.
* 12+808: 820,4 SMF30PGO - Paged out to AUX
* 20+808: 828,4 SMF30NSW - # of ASID swap sequences.
* 24+808: 832,4 SMF30PSI - # of pages swapped in from AUX storage to CS.
* 28+808: 836,4 SMF30PSO - # of pages swapped out from CS to AUX.
* 32+808: 840,4 SMF30VPI - # of VIO page-ins from AUX to CS.
* 36+808: 844,4 SMF30VPO - # of VIO page-outs from CS to AUX.
* 44+808: 852,4 SMF30CPI - # of Comm area page-ins from AUX to CS.
* 48+808: 856,4 SMF30HPI - # of HSP page-ins from AUX to PROC stg.
* 52+808: 860,4 SMF30LPI - # of LPA page-ins from AUX to CS.
* 56+808: 864,4 SMF30HPO - # of HSP page-outs from PROC stg. to AUX.
* 72+808: 880,4 SMF30RGB - Private size in bytes (< 16 megabytes).
* 76+808: 884,4 SMF30ERG - Private size in bytes (> 16 megabytes).
* 80+808: 888,4 SMF30ARB - Maxvirt alloc from LSQA and the
* SWA subpools (<16M)
* 84+808: 892,4 SMF30EAR - Maxvirt alloc from LSQA and the
* SWA subpools (>16M)
* 88+808: 896,4 SMF30URB - Maxvirt alloc from the user
* subpools (< 16 M B)
* 92+808: 900,4 SMF30EUR - Maxvirt alloc from the user
* subpools (> 16 M B)
* 96+808: 904,4 SMF30RGN - Region size established
*100+808: 908,4 SMF30DSV - Amount of dsp and hsp VS used
*
* Performance Section offset (e): 1063 + 1 = 1064
*  0+1064:1064,4 SMF30SRV - Total service units.
*  4+1064:1068,4 SMF30CSU - CPU service units.
*  8+1064:1072,4 SMF30SRB - Service request block (SRB) service units.
* 12+1064:1076,4 SMF30IO - I/O service units.
* 16+1064:1080,4 SMF30MSO - Main storage occupancy (MSO) service units.
*
 OUTREC FIELDS=(1,4,       SMF30LEN
   7,4,                    SMF30TME
  11,4,                    SMF30DTE
 258,8,                    SMF30JBN
 266,8,                    SMF30PGM
 290,8,                    SMF30JNM
 512,4,                    SMF30TEP
 526,4,                    SMF30TCN
 540,4,                    SMF30AIC
 544,4,                    SMF30AID
 548,4,                    SMF30AIW
 596,4,                    SMF30CPT
 600,4,                    SMF30CPS
 636,4,                    SMF30IIP
 640,4,                    SMF30RCT
 644,4,                    SMF30HPT
 812,2,                    SMF30PRV
 814,2,                    SMF30SYS
 816,4,                    SMF30PGI
 820,4,                    SMF30PGO
 828,4,                    SMF30NSW
 832,4,                    SMF30PSI
 836,4,                    SMF30PSO
 840,4,                    SMF30VPI
 844,4,                    SMF30VPO
 852,4,                    SMF30CPI
 856,4,                    SMF30HPI
 860,4,                    SMF30LPI
 864,4,                    SMF30HPO
 880,4,                    SMF30RGB
 884,4,                    SMF30ERG
 888,4,                    SMF30ARB
 892,4,                    SMF30EAR
 896,4,                    SMF30URB
 900,4,                    SMF30EUR
 904,4,                    SMF30RGN
 908,4,                    SMF30DSV
 1064,4,                   SMF30SRV
 1068,4,                   SMF30CSU
 1072,4,                   SMF30SRB
 1076,4,                   SMF30IO
 1080,4)                   SMF30MSO
*
//TOOLMSG DD SYSOUT=*
//SERVICE DD SYSOUT=* <-- Service performance data
//CPURPT  DD SYSOUT=* <-- CPU performance data
//SUMMARY DD SYSOUT=* <-- Summary report
//STORAGE DD SYSOUT=* <-- Storage report
//DASD    DD SYSOUT=* <-- I/O report
//PAGE    DD SYSOUT=* <-- Paging report
//SWAP    DD SYSOUT=* <-- Swap report
//HSP     DD SYSOUT=* <-- Hiperspace report
//TOOLIN  DD *
 SORT FROM(RAWSMF)  TO(SMFEXTR) USING(SRT1)
 COPY FROM(SMFEXTR) TO(COPYOUT) USING(SRT2)
 
 DISPLAY FROM(COPYOUT) LIST(STORAGE)                   -
   TITLE('Storage report')                               -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Region - kb ')    ON(149,4,FI)                -
   HEADER('Dsp Hsp mb')      ON(153,4,FI)                -
   HEADER('Bott stg KB')     ON(77,2,FI)                 -
   HEADER('Top stg KB')      ON(79,2,FI)                 -
   HEADER('p < 16 kb')       ON(125,4,FI,/KB)            -
   HEADER('p > 16 kb')       ON(129,4,FI,/KB)            -
   HEADER('VS< 16 kb')       ON(133,4,FI,/KB)            -
   HEADER('VS> 16 kb')       ON(137,4,FI,/KB)            -
   HEADER('Max VS<16 mb')    ON(141,4,FI,/KB)            -
   HEADER('Max VS>16 mb')    ON(145,4,FI,/KB)
 
 DISPLAY FROM(COPYOUT) LIST(PAGE)                      -
   TITLE('Paging report')                                -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Page in')         ON(81,4,FI)                 -
   HEADER('Page out')        ON(85,4,FI)                 -
   HEADER('VIO page in')     ON(101,4,FI)                -
   HEADER('VIO page out')    ON(105,4,FI)                -
   HEADER('Comm page in')    ON(109,4,FI)                -
   HEADER('LPA page in')     ON(117,4,FI)                -
   HEADER('HSP page in')     ON(113,4,FI)                -
   HEADER('HSP page out')    ON(121,4,FI)
 
 DISPLAY FROM(COPYOUT) LIST(SWAP)                      -
   TITLE('Swap report')                                  -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Swap seq.')       ON(89,4,FI)                 -
   HEADER('Swap in')         ON(93,4,FI)                 -
   HEADER('Swap out')        ON(97,4,FI)
 
 DISPLAY FROM(COPYOUT) LIST(DASD)                      -
   TITLE('I/O report')                                   -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Excp')            ON(37,4,FI)                 -
   HEADER('Tot.conn')        ON(41,4,FI)                 -
   HEADER('Dasd conn')       ON(45,4,FI)                 -
   HEADER('Dasd disconn')    ON(49,4,FI)                 -
   HEADER('Dasd pend.')      ON(53,4,FI)
 
 DISPLAY FROM(COPYOUT) LIST(CPURPT)                    -
   TITLE('CPU performance data')                         -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Excp')            ON(37,4,FI)                 -
   HEADER('tcb')             ON(57,4,FI,F1)              -
   HEADER('srb')             ON(61,4,FI,F1)              -
   HEADER('iip')             ON(65,4,FI,F1)              -
   HEADER('rct')             ON(69,4,FI,F1)              -
   HEADER('hpt')             ON(73,4,FI,F1)
 
 DISPLAY FROM(COPYOUT) LIST(SERVICE)                   -
   TITLE('Service performance data')                     -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Total su')        ON(157,4,FI)                -
   HEADER('Tcb su')          ON(161,4,FI)                -
   HEADER('Srb su')          ON(165,4,FI)                -
   HEADER('Io su')           ON(169,4,FI)                -
   HEADER('MSO su')          ON(173,4,FI)
 
 DISPLAY FROM(COPYOUT) LIST(SUMMARY)                   -
   TITLE('Summary report')                               -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Excp')            ON(37,4,FI)                 -
   HEADER('Conn.')           ON(41,4,FI)                 -
   HEADER('tcb')             ON(57,4,FI,F1)              -
   HEADER('srb')             ON(61,4,FI,F1)              -
   HEADER('Serv')            ON(157,4,FI)                -
   HEADER('Region - kb ')    ON(149,4,FI)                -
   HEADER('Dsp Hsp mb')      ON(153,4,FI)
 
 DISPLAY FROM(COPYOUT) LIST(HSP)                       -
   TITLE('Hiperspace report')                            -
   PAGE DATE TIME BLANK                                  -
   HEADER('Date')            ON(09,4,DT1,E'9999/99/99')  -
   HEADER('Time')            ON(05,4,TM1,E'99:99:99')    -
   HEADER('Jes2 #')          ON(29,8,CH)                 -
   HEADER('Job')             ON(13,8,CH)                 -
   HEADER('Pgm')             ON(21,8,CH)                 -
   HEADER('Dsp Hsp mb')      ON(153,4,FI)                -
   HEADER('hpt')             ON(73,4,FI,F1)              -
   HEADER('HSP page in')     ON(113,4,FI)                -
   HEADER('HSP page out')    ON(121,4,FI)
/*

The above job can be run to get job level information by simply changing the subtype 
X'0004' in the below INCLUDE condition to X'0005' 
 
INCLUDE COND=(6,1,BI,EQ,X'1E',AND,23,2,BI,EQ,X'0004',AND,

This article is copied from https://www.cbttape.org/xephon/xephonm/mvs0507.pdf and some minor modifications are made.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.