SYSTEM STRATEGIES BY TOM BRYANT MVS/XA/ESA Problem Solving: Part I — Using IPCS With MVS/ESA Version 5 IPCS for MVS/ESA Version 5 offers many capabilities, including the ability to scan for unformatted storage dumps. This article examines the many facilities of IPCS, and includes some of the author’s favorite IPCS commands. TECHNICAL SUPPORT OCTOBER 1996 I PCS for MVS/ESA Version 5 has come a long way since I first used it in 1983 at the prompting of an exuberant IBM customer engineer. IPCS continues to move toward a fully panel-driven environment, although in some situations, I find using IPCS commands easier. Future articles will examine the environmental record editing and printing program (EREP), one-page MVS/XA/ESA abend analysis, advanced SVCDUMP analysis, slip traps and GTF tracing, and standalone dump analysis. IPCS stands for Interactive Problem Control System, although most people (myself included) use it just for looking at unformatted storage dumps. IPCS will process SVCDUMPs which are dumps usually produced with the abend (SVC 13) issued by your program or the system. Other unformatted dumps that IPCS will produce include an application unformatted dump allocated through the SYSMDUMP DD statement and the standalone dump produced by the standalone dump program. IPCS has the ability to process generalized trace facility (GTF) data both externally and within the dump. IPCS has the ability to look at live system storage, although only for your address space; you can’t look at any private storage in another address space. IBM provides the BLSCDDIR CLIST in the library SYS1.SBLSCLI0 to initiate an IPCS session. If you are at MVS/ESA Version 4.3 or above, you can now initialize IPCS under ISPF — this makes IPCS much easier to use as a full-fledged ISPF application. I took the ideas presented in the BLSCDDIR CLIST and created my own IPCS startup CLIST. I wanted a CLIST that could be run easily in batch mode as well as in an ISPF foreground session. I also wanted a CLIST that was well-documented with easy-to-use parameters. Finally, I wanted a CLIST that does not hang onto dump directory and IPCS print dataset allocations when completed, as the IBM BLSCDDIR CLIST does. IPCS CLISTS FOR MVS/ESA VERSION 4.3 AND ABOVE The #IPCSTJB CLIST is the mainline CLIST that you execute to establish an IPCS session (see Figure 1). If you are invoking #IPCSTJB for the first time, the NEW CLIST keyword parameter indicates that you will dynamically create a VSAM dump directory using the value of the VOL CLIST keyword parameter. The BATCH keyword will allow you to run the #IPCSTJB CLIST in batch (where ISPF LIBDEF commands need not be performed and initial SETDEF parameter favorites of mine are set). I have been unable to pass these SETDEF commands to IPCS when running as an ISPF application. I usually do a certain amount of IPCS batch processing before using the ISPF interface due to performance reasons covered later in this article. I have added keyword parameters of DDIRPRI and DDIRSEC to the #IPCSTJB CLIST to allow the user to determine how many cylinders are necessary for the primary allocation of the IPCS VSAM dump directory and for the secondary allocation. Most of the SYSTEM STRATEGIES Figure 1: #IPCSTJB: Clist to Get Into {Access} IPCS PROC 0 BATCH NEW VOL(UCB999) DDIRPRI(90) DDIRSEC(50) DEBUG /**************************************************************/ /* */ /* #IPCSTJB: IPCS ALL-PURPOSE INITIALIZATION CLIST */ /* */ /* */ /* BATCH ==> POSITIONAL OPERAND TO INDICATE IPCS BATCH */ /* EXECUTION (ISPF DIALOG IS DEFAULT) */ /* */ /* NEW ==> CREATE NEW IPCS VSAM DUMP DIRECTORY */ /* (DEFAULT IS TO USE EXISTING DIRECTORY) */ /* */ /* VOL ==> KEYWORD OPERAND TO SPECIFY WHERE IPCS VSAM */ /* DUMP DIRECTORY IS TO RESIDE */ /* */ /* DDIRPRI ==> IPCS DUMP DIRECTORY PRIMARY ALLOCATION IN */ /* CYLINDERS (IF NEW DIRECTORY SPECIFIED) */ /* */ /* DDIRSEC ==> IPCS DUMP DIRECTORY PRIMARY ALLOCATION IN */ /* CYLINDERS (IF NEW DIRECTORY SPECIFIED) */ /* */ /* DEBUG ==> SHOW DIAGNOSTICS IF CLIST PROBLEMS */ /* */ /**************************************************************/ CONTROL NOFLUSH NOLIST NOMSG IF &DEBUG EQ &STR(DEBUG) THEN + CONTROL CONLIST SYMLIST LIST MSG IF &NEW EQ &STR(NEW) THEN SET &DMPSTAT EQ &STR(NEW) ELSE SET &DMPSTAT EQ &STR(EXISTING) DELETE ‘&SYSUID..IPCSPRNT’ ALLOC F(IPCSPRNT) DA(‘&SYSUID..IPCSPRNT’) + NEW SPA(20 10) CYL REL REUSE IF &BATCH NE &STR(BATCH) THEN + DO IF &STR(&SYSISPF) EQ &STR(NOT ACTIVE) THEN + DO WRITE #IPCSTJB NOBATCH CLIST MUST BE EXECUTED UNDER ISPF FREE F(IPCSDDIR,IPCSPRNT) EXIT END WRITE #IPCSTJB CLIST ONLINE EXECUTION WRITE &SYSUID..DDIR.DUMP DUMP DIRECTORY STATUS IS &DMPSTAT WRITE DATASET &SYSUID..IPCSPRNT WILL BE CREATED IF &NEW EQ &STR(NEW) THEN + DO %#IPCSDDR VOL(&VOL) DDIRPRI(&DDIRPRI) DDIRSEC(&DDIRSEC) &DEBUG END Figure 2: #IPCSDDR: Allocate and Initialize New IPCS VSAM Dump Directory PROC 0 VOL(UCB999) DDIRPRI(90) DDIRSEC(50) DEBUG /**************************************************************/ /* */ /* #IPCSDDR: CLIST TO DEFINE IPCS VSAM DUMP DIRECTORY */ /* (INVOKED BY THE #IPCSTJB CLIST) */ /* */ /* */ /* VOL ==> KEYWORD OPERAND TO SPECIFY WHERE IPCS VSAM */ /* DUMP DIRECTORY IS TO RESIDE */ /* */ /* DDIRPRI ==> IPCS DUMP DIRECTORY PRIMARY ALLOCATION IN */ /* CYLINDERS (IF NEW DIRECTORY SPECIFIED) */ /* */ /* DDIRSEC ==> IPCS DUMP DIRECTORY PRIMARY ALLOCATION IN */ /* CYLINDERS (IF NEW DIRECTORY SPECIFIED) */ /* */ /* DEBUG ==> SHOW DIAGNOSTICS IF CLIST PROBLEMS */ /* */ /* */ /* APAR OY62871 - FIX CISIZ SPECIFIED FOR INDEX AND DATA */ /* APAR OW13537 - SPECIFY CISIZE(4096) FOR INDEX ONLY */ /* (LET DATA TAKE VSAM DEFAULT) */ /* */ /**************************************************************/ time, my defaults will suffice (unless you are processing DB2 SVCDUMPs or standalone dumps, in which case, you will need much more space). The #IPCSTJB CLIST will invoke the #IPCSDDR CLIST only when the NEW parameter has been selected to create a new IPCS VSAM dump directory (see Figure 2). The #IPCSDDR CLIST takes care of this IPCS VSAM dump directory allocation using the same keyword command names as #IPCSTJB. This is all pretty straightforward. The #IPCSTRM CLIST is only needed in a batch IPCS job to ELSE ALLOCATE F(IPCSDDIR) DSNAME(‘&SYSUID..DDIR.DUMP’) SHR REUSE IF &LASTCC GT 0 THEN + DO WRITE WRITE &SYSUID..DUMP.DDIR NOT FOUND WRITE SPECIFY #IPCSTJB NEW FREE F(IPCSPRNT EXIT END ISPEXEC LIBDEF ISPPLIB DATASET ID(‘SYS1.SBLSPNL0’) ISPEXEC LIBDEF ISPMLIB DATASET ID(‘SYS1.SBLSMSG0’) ISPEXEC LIBDEF ISPTLIB DATASET ID(‘SYS1.SBLSTBL0’) ISPEXEC LIBDEF ISPSLIB DATASET ID(‘SYS1.SBLSKEL0’) ISPEXEC SELECT PGM(BLSGLIBD) PARM(PANEL(BLSPPRIM)) + NEWAPPL(BLSG) PASSLIB ISPEXEC LIBDEF ISPPLIB ISPEXEC LIBDEF ISPMLIB ISPEXEC LIBDEF ISPSLIB ISPEXEC LIBDEF ISPTLIB FREE F(IPCSDDIR,IPCSPRNT) EXIT END IF &BATCH EQ &STR(BATCH) THEN + DO IF &STR(&SYSISPF) EQ &STR(ACTIVE) THEN + DO WRITE #IPCSTJB BATCH CLIST MUST NOT BE EXECUTED UNDER ISPF FREE F(IPCSDDIR,IPCSPRNT) EXIT END WRITE #IPCSTJB CLIST BATCH EXECUTION WRITE &SYSUID..DDIR.DUMP DUMP DIRECTORY STATUS IS &DMPSTAT WRITE DATASET &SYSUID..IPCSPRNT WILL BE CREATED IF &NEW EQ &STR(NEW) THEN + DO %#IPCSDDR VOL(&VOL) DDIRPRI(&DDIRPRI) DDIRSEC(&DDIRSEC) &DEBUG END ELSE ALLOCATE F(IPCSDDIR) DSNAME(‘&SYSUID..DDIR.DUMP’) SHR REUSE IF &LASTCC GT 0 THEN + DO WRITE WRITE &SYSUID..DUMP.DDIR NOT FOUND WRITE SPECIFY #IPCSTJB NEW FREE F(IPCSPRNT EXIT END IPCS NOPARM SETDEF ACTIVE LENGTH(200) FLAG(ERROR) + DISPLAY(MACHINE,REMARK,STORAGE,SYMBOL) + NOCONFIRM NOVERIFY END CONTROL NOFLUSH NOLIST NOMSG IF &DEBUG EQ &STR(DEBUG) THEN CONTROL SYMLIST CONLIST MSG DELETE ‘&SYSUID..DDIR.DUMP’ CLUSTER DEFINE CLUSTER(NAME(‘&SYSUID..DDIR.DUMP’) + VOLUME(&VOL) + INDEXED + FREESPACE(10,10) + REUSE + IMBED + REPLICATE + SHAREOPTIONS(1,3)) + INDEX(NAME(‘&SYSUID..DDIR.DUMP.INDEX’) + CYLINDERS(2,2) + CONTROLINTERVALSIZE(4096)) + DATA(NAME(‘&SYSUID..DDIR.DUMP.DATA’) + CYLINDERS(&DDIRPRI,&DDIRSEC) + KEYS(128,0) + RECORDSIZE(384 3072)) IPCSDDIR ‘&SYSUID..DDIR.DUMP’ ALLOCATE FILE(IPCSDDIR) DSNAME(‘&SYSUID..DDIR.DUMP’) SHR REUSE allow you to free IPCS print dataset allocation in order to rename the IPCSPRNT dataset to your choosing (see Figure 3). Now that we have a tool for IPCS dump processing, we first have to get the dump from the dump dataset to DASD. If the dump is in one of the system dump datasets (SYS1.DUMP?? where ?? is a number such as 00 through 99) all you have to do is use IEBGENER to copy the dump to your dump dataset. The SYS1.DUMP?? datasets must be allocated LRECL of 4160, BLKSIZE of 4160 and RECFM F or FB, besides DSORG of PS. The problem inherent with using the TECHNICAL SUPPORT OCTOBER 1996 SYSTEM STRATEGIES Figure 3: #IPCSTRM: Issue IPCS END Command and Free Files (Only Needed for Batch Jobs) PROC 0 /**************************************************************/ /* */ /* #IPCSTRM: IPCS ALL-PURPOSE INITIALIZATION CLIST */ /* */ /* CLIST TO END BATCH IPCS SESSION IN ORDER TO */ /* FREE IPCS FILES. */ /* */ /**************************************************************/ CONTROL NOFLUSH NOLIST NOMSG END FREE F(IPCSDDIR,IPCSPRNT) //JOBCARD JOB //* //*************************************************// //* BATCH INVOCATION OF #IPCSTJB *// //*************************************************// //* //IPCSNEW EXEC PGM=IKJEFT01, // DYNAMNBR=75,REGION=8M //SYSPROC DD DSN=MY.USER.EXEC,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * PROFILE PREFIX(DCTOM) DELETE ‘DCTOM.SVCDUMP.IOSPURGA’ %#IPCSTJB NEW BATCH SETDEF NOTERMINAL PRINT SETDEF DSNAME(‘DCTOM.SVCDUMP.IOSPURGA’) STATUS FAILDATA REGISTERS SUMMARY FORMAT ALL SETDEF TERMINAL NOPRINT %#IPCSTRM RENAME IPCSPRNT IOSPURGA /* SYS1.DUMP?? datasets is managing the resource. An installation must have automated procedures in place to dump and clear the datasets when they become filled. Another alternative is to use the new MVS/ESA Version 5 dynamic dump datasets. Since MVS/ESA Version 5 offers much in the way of dynamic system variables, all you have to do to utilize dynamic dumps is add the following commands to your COMMND?? SYS1.PARMLIB member (where ?? is a command suffix value): COM=’DD NAME=SYSTEM.DUMP.&SYSNAME..D&DATE..&JOBNAME..S&SEQ. ‘ COM=’DD ADD,SMS=(DATA=DEFAULT,MGMT=DUMPSYS,STOR=DUMPSYS)’ COM=’DD ALLOC=ACTIVE In the above situation, there are SMS classes that will put these dumps directly to ML2 as soon as the volumes defined in the DUMPSYS storage group fill up to a certain threshold. If you want DFHSM to move these dumped datasets to ML2, then make sure your dump dataset name is not SYS1. When using automatic SVCDUMPs, the command to display dump titles (D D,T) should have the AUTODSN keyword added. For example: D D,T,AUTODSN=5 will display the last five automatically allocated dump datasets (unless they have been migrated by DFHSM). The IPCS (and TSO) SYSDSCAN will not show dynamic dumps! If you are loading a standalone dump to DASD, it is a little trickier. The little-documented BLKSIZE for the standalone dump tape is 29120 and the RECFM is FBS (see Figure 4 for sample JCL to load a standalone dump to DASD from tape). Now that your dump has been copied to DASD, it’s time to use the #IPCSTJB initialization CLIST.1 After subtask completion, all nonshared subpools are freed. Some batch LSR control blocks are built in non-shared protected storage which leaves batch LSR out of our performance analysis. The #IPCSTJB CLIST has been updated to use a CISIZE of 4096 for the IPCS VSAM dump directory index component Figure 4: Load Standalone Dump From Tape //SADLOAD EXEC PGM=IEBGENER, // REGION=5M //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY //* //SYSUT1 DD DSN=SADUMP, // UNIT=(CART,,DEFER), // LABEL=(1,NL,,EXPDT=98000), // VOL=SER=00666, // LRECL=4160, // BLKSIZE=29120, // RECFM=FBS, // DISP=OLD //* //SYSUT2 DD DSN=YOUR.SADUMP.DASD.DSN, // UNIT=(SYSDA,2), // LRECL=4160, // BLKSIZE=4160, // RECFM=F, // SPACE=(CYL,(70,20),RLSE), // DISP=(,CATLG,DELETE) Figure 5: IPCS Option 1 BROWSE ————————— IPCS - ENTRY PANEL ———————————COMMAND ==> CURRENT DEFAULTS: SOURCE ==> DSNAME(‘DCTOM.SVCDUMP.IEC999I’) ADDRESS SPACE ==> OVERRIDE DEFAULTS: SOURCE ==> DSNAME(‘DCTOM.SVCDUMP.IEC999I’) ADDRESS SPACE ==> PASSWORD ==> POINTER: ADDRESS REMARK ==> 00000010.% ==> and let the data component take a VSAM default which, in this case, is a fairly large control interval size of 18432 for 3390 DASD. Please refer to IBM APARs OY62871 and OW13537 for more information. If you want to speed up IPCS processing, I would recommend experimenting with the VSAM bufferspace (BUFSP) parameter on the IDCAMS DEFINE CLUSTER statement since TSO does not support the AMP parameter. At the end of the #IPCSTJB CLIST are certain IPCS SETDEF options I prefer to use. The LENGTH(200) tells IPCS that any LIST command should display 200 bytes unless a specific length is supplied. The FLAG(ERROR) tells IPCS to give me all messages except informational and warning messages. Non-error messages tend to make the first-time IPCS user scramble down many paths (most wrong), tracking down these messages. I activate the MACHINE keyword of the DISPLAY SETDEF keyword because I want to see the ASID, STORAGE KEY and ABSOLUTE ADDRESS OF AN AREA when listing storage. I also turn on the STORAGE Option to make the storage look like a printed dump. The IPCS SETDEF defaults for these are NOMACHINE and NOSTORAGE. I always turn on NOVERIFY since I don’t need confirmation messages for subsequent commands. I would also suggest setting NOCONFIRM to avoid the following irritating IPCS messages: BLS18168D PROCEED WITH COPY ENTER Y TO CONTINUE N TO TERMINATE BLS18160D MAY SUMMARY DATA BE USED BY DUMP ACCESS ENTER Y TO USE N TO BYPASS Specifying NOCONFIRM will default the answers of these prompts to Y. You want the summary data closest to the problem at hand. There are new GLOBAL/LOCAL values in IPCS. GLOBAL will set default values for the IPCS VSAM dump directory globally and LOCAL will set default values for a given dump. My global values equal my local values because I have yet to see a reason to set different values. 1. Before starting, I asked IBM why it wasn’t possible to use IBM local shared resources (LSR) to greatly speed up IPCS VSAM processing. The answer:Batch LSR is not supported for IPCS since TSO uses a single TCB for each call. SYSTEM STRATEGIES Figure 6: IPCS Option 3 Utility DAE Selection 5 ———————————————- DAE DISPLAY ——————————————— ENTER AN ACTION CODE NEXT TO AN ENTRY. ENTER / NEXT TO AN ENTRY TO CHOOSE FROM A LIST OF ACTION CODES. DATASET: ‘DCTOM.DAE’ DUMPS SINCE LAST DAE DISPLAY: 0 EVENTS SINCE LAST DAE DISPLAY: 0 TOTAL DUMPS SUPPRESSED:14557 SUPPRESSION RATE: 99% A LAST LAST TOTAL DATE OF SYMPTOM STRING INFORMATION: C DATE SYSTEM EVENTS DUMP ABEND REASON MODULE CSECT V 12/01/95 PT31 15 04/06/93 S00C4 00000011 NUCLEUS IOSPURGB 11/27/95 PT31 144 08/21/95 S0002 00000030 IFG0199B #UNKNOWN 11/27/95 PT31 12 10/05/95 S004E 00C90202 DSNIDM DSNIMS1W ——————————————— DAE ENTRY DETAILS ——————- ROW 1 TO 9 TOTAL EVENTS: 15 TYPE: SVC DUMP SYMPTOM STRING TRUNCATED DATE TIME SYSTEM NAME LAST (MOST RECENT) EVENT: 12/01/95 18:59:55 PT31 DUMP TAKEN: 04/06/93 23:58:31 PTIA SYMPTOMS USED FOR DUMP SUPPRESSION: MVS RETAIN KEY KEY SYMPTOM DATA EXPLANATION MOD/ RIDS/ NUCLEUS LOAD MODULE NAME CSECT/ RIDS/ IOSPURGB ASSEMBLY MODULE CSECT NAME PIDS/ PIDS/ 5752SC1C3 PRODUCT/COMPONENT IDENTIFIER AB/S AB/S 00C4 ABEND CODE-SYSTEM REXN/ RIDS/ IOSPURGA RECOVERY ROUTINE CSECT NAME FI/ VALU/H 41B000101F3BD500300D98F3 FAILING INSTRUCTION AREA REGS/ REGS/ 0E022 REG/PSW DIFFERENCE REGS/ REGS/ 09258 REG/PSW DIFFERENCE HRC1/ PRCS/ 00000011 ABEND REASON CODE ***************************** BOTTOM OF DATA ***************************** Each IPCS command creates symbol equates in the dump directory. Some commands create hundreds of these entries. All of this activity causes heavy control area/control interval split activity in the IPCS VSAM dump directory. That’s why I always recommend doing most of your IPCS processing in batch and only then using the ISPF interface. You will have already suffered the performance penalty for the VSAM split activity and the VSAM file will be “settled in” as such. The IPCS Primary Option Menu looks much the same as in previous MVS/ESA releases with the exception of Options 4 and 6. For those active IPCS users in MVS/ESA Version 4 you may find it irritating that the IPCS command Option 4 is now Option 6. Later, you will find Option 4 INVENTORY a useful tool to prevent excessive typing. If you use my #IPCSTJB CLIST, you may never have to go to IPCS Option 0, which is used to set dump processing information. If you decide to process a dump and enter information in the IPCS Option 0 screen, make sure you initiate dump processing by using a dialog Option 1 list or an IPCS command and IPCS will load the dump into the IPCS VSAM dump directory. IPCS Option 1 is the BROWSE panel. You will find this full-screen browse facility very helpful in working backward in storage for eyecatchers or running control block addresses. See Figure 5. The ADDRESS field can be an absolute address, such as 0000010, which will list storage at location 10. If I append a percent sign (%) to the end of the address 00000010.%, this means use this value as a 24-bit address pointer and list that storage area. If I use a question mark(?), this simply means use a 31-bit address. If I have a full-screen Option 1 display, I can place a % or ? at the end of an address and simply go there. It is a very handy facility! IPCS Option 1 has various commands that will allow you to manipulate the storage entries in this stack. If I enter the letter R over the address portion of the stack entry, IPCS will create another duplicate stack entry. I can also use the letter E to edit a stack entry to change the attributes from AREA to STRUCTURE(CVT) using my 00000010.% pr evious example. Other IPCS Option 1 stack commands include F, which will use the IPCS CBFORMAT command against this pointer (which must be an IPCS structure). Using F will allow you to format the control block with one letter. Using letters I and D will allow you to insert and delete Figure 7: IPCS VSAM Dump Directory Reorganization //* //*************************************************************** //* PERFORM TEMPORARY EXPORT OF CLUSTER BEFORE REORGANIZATION * //*************************************************************** //* //EXPORT EXEC PGM=IDCAMS, // REGION=5M //AMSDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //EXPOUT DD DSN=&&EXPOR T, // DISP=(,PASS,DELETE), // UNIT=(cart,,DEFER), // LABEL=(1,SL) //SYSIN DD * EXPORT DCTOM.DDIR.DUMP OUTFILE(EXPOUT) TEMPORARY /* //* //*************************************************************** //* DELETE EXISTING CLUSTER AFTER TEMPORARY EXPORT. * //*************************************************************** //* //DELETE EXEC PGM=IDCAMS,COND=(0,NE), // REGION=5M //AMSDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE DCTOM.DDIR.DUMP CLUSTER /* //* //*************************************************************** //* IMPORT CLUSTER BACK TO DASD TO REORGANIZE IT. * //*************************************************************** //* //IMPORT EXEC PGM=IDCAMS,COND=(0,NE), // REGION=5M //AMSDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //IMPDSN DD DSN=&&EXPOR T, // DISP=(OLD,DELETE,DELETE) //SYSIN DD * IMPORT INFILE(IMPDSN) OUTDATASET(DCTOM.DDIR.DUMP) /* stack pointers appropriately. Letters H and L will allow you to create 31-bit and 24-bit stack pointers respectively. The IPCS Option 2 menu lists the bulk of the online dialog functions you can use with IPCS. Selection 1 of SYMPTOMS will execute the VERBEXIT SYMPTOMS command, which I sometimes find useful. Selection 2 will perform a STATUS SYSTEM CONTENTION CPU FAILDATA REGS, which I like a lot, except for the CONTENTION which takes a long time to be processed. I would prefer the failure data and registers (FAILDATA and REGS) be reported along with the SYSTEM information. Be careful not to blindly enter commands that may take a lot of time and won’t solve your problem quickly. Selection 3 WORKSHEET will invoke a STATUS SYSTEM WORKSHEET which is critical to solving problems involving global system analysis (RSM dumps and standalone dumps in particular). You will see key system indicators side-by-side for analysis. Selection 4 is the SUMMARY of ADDRESS SPACE and STARTED tasks and invokes the SUMMARY KEYFIELD which is one of my favorite IPCS commands to use to see at a glance the important ASCB/TCB/RB/CDE fields of interest. Selection 5 invokes the ANALYZE CONTENTION IPCS command, which may run longer than most IPCS commands due to all of the symbol equates it must create. Selection 6 is COMPONENT which displays a panel of all the different component analysis and trace information you can do. There is an overwhelming temptation to just start doing component traces. Resist the urge, and read about the component trace in the IBM manual, MVS/ESA Diagnosis: Using Dumps and Traces (LY28-1845) before running these facilities. Selection 7 will show you a trace formatting panel which covers CTRACE (component trace),GTFTRACE,MTRACE (in storage syslog), SYSTRACE (system trace which used to be VERBEXIT TRACE),and MERGE (merge multiple traces). I would recommend using the IPCS SYSTEM TRACE (SYSTRACE) Option off of the Selection 7 panel SYSTEM STRATEGIES (actually it is Option 2 then 7 then 4). The SYSTRACE command will allow you to specify special criteria to the system to get only the trace records you need. A new facility in MVS/ESA Version 5 is the TIME format. Now LOCAL/GMT timestamps look like 14:32:52.977663 instead of a hex timestamp like AC24EEC-12787FE05. If you enter the IPCS command yourself, it would be SYSTRACE TIME(LOCAL). Of the items in the IPCS Option 3 Utility Menu, I only use Selection 5 (DAE processing). This online facility allows you to look at the dump analysis and elimination (DAE) dataset and (optionally) change entries in it (see Figure 6). The DAE information combined with in-storage LOGREC information (VERBEXIT LOGDATA) will provide just the right amount of diagnostic data to solve most problems. IPCS Option 4 is the new INVENTORY option. It will allow you to delete dump directory information with or without deleting the original dump dataset. I use this delete dump (DD) option the most, although some of the other things you can do are: ■ BR - activates the BROWSE option of the IPCS dialog for that source; ■ DD - deletes descriptions of the source and, optionally, the source dataset; ■ DT - deletes translation results for the source; ■ LA - lists dump description with storage attributes; ■ LB - lists dump description with record locations; ■ LD - lists dump description with dumped storage summary; ■ LT - lists dump description with translation results; ■ LZ - lists dump description with storage attributes, record locations, dumped storage summary and translation results; and ■ SD - established the source as both the local and global IPCS default. IPCS Option 5 SUBMIT allows you to submit IPCS batch jobs while under IPCS. My #IPCSTJB CLIST will not support this option and I don’t know why you would want to do such a thing. It is important to diagnose one problem at a time, and this option does not allow you to do that! IPCS Option 6 is the list of all the IPCS commands you can use. IPCS Option 6 is also my favorite, since I’ve learned all of these commands and usually know exactly what I want to do. If you spend a few minutes every other day learning my favorite IPCS commands (which I will cover later), in no time you will know enough to solve most problems. IPCS COMMANDS: AUTHOR’S FAVORITES The IPCS SELECT CURRENT ERROR command will display the ASID, JOBNAME, ASCBADDR and SELECTION CRITERIA for the appropriate address spaces. An example of SELECT CURRENT ERROR would be: ASID ———— 0001 00B2 JOBNAME ——————— *MASTER* TSOUSER ASCBADDR SELECTION CRITERIA ———————— ————————————————— 00FD5180 CURRENT 00F4FA00 ERROR The ERROR indicator is any ASCB/ASXB/TCB error indicator that indicates the address space is in error. It’s handy to issue the IPCS CBSTAT command to get this address space (ASCB) STATUS) as follows: ISSUE CBSTAT XXXXXXXX. STRUCTURE(ASCB) (where XXXXXXXX. is the ASCBADDR) The CBSTAT information is a summarized version of the VERBEXIT SRMDATA command which I will cover later. You can find out if a address space is swapped in or out and the reasons why such as input terminal wait (user hasn’t pressed enter) or detected wait (ENQ or DFHSM recall for example). You will also get information on address space status such as if the address space was forced out (S0A22 abend). IPCS stands for Interactive Problem Control System, although most people (myself included) use it just for looking at unformatted storage dumps. The IPCS STATUS SYSTEM command will provide you with pertinent information such as when the dump was taken. The field to note is the PROGRAM REQUESTING DUMP. The most common entries would be SVCDUMP for a synchronous dump (the current TCB/RP are in the failing task for the dump) or IEAVTSDT for a scheduled dump (system issued SDUMP or abend, and you must find failing TCB/RB in the dump). I usually issue the IPCS STATUS FAILDATA REGISTERS command to obtain the PSW and the general/access/control REGISTERS. The IPCS STATUS FAILDATA REGISTERS will do an implied IPCS WHERE command and tell you (if possible) the storage the PSW points to which can be very handy. The IPCS STATUS WORKSHEET command is most important in scheduled SVCDUMPs (IEAVSDT) for real storage manager (RSM) failures or standalone dumps. IPCS STATUS WORKSHEET will provide you critical data in the logical configuration communications area (LCCA) to determine if a processor is spinning (IHR1 offset X’208’), dispatcher flags are at offset X’21C’ and automatic CPU recovery [ACR] is at offset X’2B4’. The PSA fields of note are the current ASCB/TCB, supervisor bits (SUPER at X’228’ locks held CLHS at offset X’2F8’) and functional recovery routine (FRR) stack areas at offset X’380’. I would recommend you get comfortable with looking at these areas in a non-critical SVCDUMP other than a RSM problem or a standalone dump to get a feel for the data areas. The IPCS WHERE command will take an address and inspect the MVS/ESA link pack directory entries (LPDE) and contents directory entries (for non-LPA modules) to tell you what load module is at this address. It would be a nice IBM option to have a special overlay structure that would tell you the CSECT (SMP/E MOD entry) of the storage. You have to take the load module address and figure out the CSECT offset to determine the PTF level of the module. If you do a IPCS WHERE command for a NUCLEUS module, you will get the proper information for a IBMLINK search since the system nucleus is linkedited with the scatterload attribute. ACTIVE STORAGE is not supported for this command (which could be another IBM enhancement). The IPCS SUMMARY JOBSUMMARY will report on all system jobnames and completion codes at a single glance. Remember you may be dealing with more than one non-zero completion code. IPCS will internally invoke the IPCS CBSTAT facility for the address space which will give you information on whether the JOBNAME is in a long wait, swapped out or if another condition exists. The COMP field of the SUMMARY JOBSUMMARY is the most important field in this listing. For a COMP of 0405C000 the first byte indicates that a STEP abend has been requested. If it was a X’80’then a dump has been requested. To see the rest of the indicators for the COMP completion code, look at field TCPCMP in the SYS1.MACLIB macro IKJTCB. It is important to know the exact details of how the abend occur red. This additional information may help you solve the problem quicker. The IPCS SUMMARY KEYFIELD command will show the key ASCB fields (and corresponding IPCS CBSTAT information from SRM) that will let you see at a glance exactly what has happened. For the program request blocks (PRBs) listed under the task control blocks (TCBs) remember the TCBs are from oldest to newest but the PRBs are from newest to oldest in the IPCS SUMMARY KEYFIELD. In the report from the IPCS SUMMARY FORMAT the TCBs are oldest/newest and the PRBs SYSTEM STRATEGIES are also oldest/newest but you are presented with a great deal of information to absorb, and most times this will serve to confuse the problem solver. When you just need to take a quick look at some storage, nothing beats the IPCS LIST command. The LIST defaults are established in the IPCS SETDEF command (in our case listing 200 bytes). The IPCS list command output has a field called KEY(XY) where X is the storage protect key and Y is another indicator. If this KEY field is KEY(FF) then the stor age key is not known. Refer to SYS1.MACLIB member BLSRDRPX for more details on these storage key/reference bit settings. The IPCS LIST command also uses the 24-bit indicator (%) and the 31-bit indicator (?) as a pointer to storage listed. I have found it very useful to use the LIST xxxxxxxx. STRUCTURE command (where xxxxxxxx. is the address) because the STRUCTURE keyword will provide hex offsets from your address which can be useful for getting module offset information. I find myself issuing the SYSTRACE TIME(LOCAL) command to get the system trace table information (this was formerly executed as VERBEXIT TRACE). I usually perform a find for ‘ *’to see any event that was marked as an exception by IPCS. The good information is usually toward the back of the trace table. Make sure to back up a few entries and see what happened immediately before (let’s say) your SVC abend (indicator would be *SVC). If you had a control block chain of more than a few entries and suspected a broken chain entry, how would you solve this on a timely basis? The IPCS RUNCHAIN command will trace through control blocks that have pointers to other control blocks for a single chain. If you want the system to go through control block chains at many levels, then use the IPCS SCAN command (and prepare for a long wait). If I wanted to run through the MVS/ESA subsystem control blocks and create IPCS equate entries for SSCVT001, SSCVT002, etc., I would issue this command: NaSPA board member Tom Bryant has more than 18 years of experience in data processing, with 15 of those years as an MVS/XA/ESA systems programmer. ©1996 Technical Enterprises, Inc. Reprinted with permission of Technical Support magazine. For subscription information, email mbrship@naspa.net or call 414-768-8000, Ext. 116. RUNCHAIN ADDRESS(10.%+128?+18?) NAME(SSCVT) LINK(4) + LENGTH(32) EXEC((LIST X)) CHARACTER The address field takes the value (or generated values) from the ADDRESS field and creates a control block called SSCVTxxx (where xxx is a generated number). Our forward pointer is at X’4’ which is indicated by the LINK field. We know our SSCVT field entry is 32 bytes long, hence the LENGTH(32) field. For each time we invoke the control block equate routine, list the current SSCVTxxx created in character from the EXEC((LIST X)) CHARACTER. This command can save you hours of time going through control block chains. Try a variation of this command to go through the ASCB or TCB chains. The IPCS LPAMAP and IPCS VERBEXIT NUCMAP commands will present you information on the MVS/ESA link pack area and the nucleus respectively. I prefer to invoke both of these commands using EPA (entry point address) since I am more address-conscious in the dump than module-name-conscious. The last IPCS command I will examine is the VERBEXIT SRMDATA command. This output will present detailed SRM user control block (OUCB) information such as the existence of a PRIVILEGED PROGRAM, the SWAP OUT reason for a DETECTED WAIT, TERMINAL INPUT or other, where the user has been swapped (such as auxiliary storage). Additionally, for MVS/ESA Version 5 SRM goal mode environments you will see the SERVICE CLASS and WORKLOAD information. Since this is a large amount of output, I perform a FIND command for ASID in column 2 and continue the finds while I look at the data. See macro IRAOUCB in SYS1.MODGEN for more information on the SRM OUCB. Figure 7 is the JCL I use to periodically reorganize the IPCS VSAM dump directory which will become fragmented over time. I hope this article has given you a feel for IPCS in an MVS/ESA Version 5 environment, and provided shortcuts you can use to make your problem solving a brief encounter instead of a lifetime commitment. ts TECHNICAL SUPPORT OCTOBER 1996