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.