MainframeSupports
tip uge 21/2015:

På min installation er vi tvunget til at benytte SDSF og har ikke adgang til SYSVIEW, som på mange punkter er et langt bedre produkt end SDSF. En af de ting, jeg virkelig savner i SDSF er muligheden for at se jobs med forskellige prefix'er på samme display. Hvis du ikke ved det, så kan man i SYSVIEW for eksempel udstede kommandoen PRE MYUSER* DSN* hvorefter jobs med begge disse prefix'er vises på de forskellige oversigter.

Der findes faktisk et REXX interface til SDSF og dermed har du mulighed for at lave din egen SDSF, så det har jeg gjort. Den er meget simpel, fordi den er designet til at løse mit særlige behov for at kunne se forskellige jobs på samme tid:

/* REXX */
address ispexec "CONTROL ERRORS RETURN"
address isredit "MACRO (PARM)"
address isredit "RESET SPECIAL"
address isredit "(LINENO) = LINENUM .ZF"

header='Jobname CPU-Usage CPU% ECPU-Usage ECPU%'
address isredit "LINE_BEFORE "lineno" = MSGLINE (HEADER)"

rc=isfcalls('ON')
DO wordno = 1 to words(parm)
  isfprefix=word(parm,wordno)
  Address SDSF "ISFEXEC DA"
  do ix=1 to JNAME.0
    line=left(jname.ix,8)''right(cpu.ix,9)' 'right(cpupr.ix,5)
    line=line'  'right(ecpu.ix,9)' 'right(cpupr.ix,5)
    address isredit "LINE_BEFORE "lineno" = MSGLINE (LINE)"
  END
END
rc=isfcalls('OFF')

exit 0

Jeg har designet REXX'en som en EDIT MACRO, da jeg jo alligevel er i EDIT, når jeg submitter jobs. Den første linie sørger for, at REXX'en ikke stoppes af utidig indblanding fra de forskellige ADDRESS kommandoer. RESET SPECIAL fjerner de MSG-linier, som REXX'en danner efterfølgende, hvis nu REXX'en eksekveres en ekstra gang eller mere. Output placeres over den første linie i EDIT, og jeg har valgt at lave en header, der passer til de kolonner, jeg har valgt at vise.

Det interessante starter med RC=ISFCALLS('ON'), som aktiverer SDSF-interfacet. Så loop'er programmet en gang for hver parameter, der er angivet i kaldet til EDIT macro'en. Hver parameter assignes til variablen ISFPREFIX, som er en del af SDSF-interfacet og svarer til PREFIX-kommandoen. Så eksekveres DA kommandoen (Display Active) i SDSF og resultatet returneres i en række stem-variable, en for hver kolonne i DA display'et. Hvilke kolonner, der er til rådighed, kan du læse om i SDSF manualen. Afslutningsvis loop'er programmet hen over de forskellige jobs, der opfylder det angive prefix i ISFPREFIX.

Resultatet af en eksekvering af ovenstående REXX program kan se således ud:

Command ===> &MYSDSF MYUSER* DSN*MSTR
****** ***************************** Top of Data ******************************
==MSG> Jobname CPU-Usage  CPU% ECPU-Usage ECPU%
==MSG> MYUSER       2.43  3.37       2.43  3.37
==MSG> DSNTMSTR   139.83  0.00     149.73  0.00
==MSG> DSNPMSTR   189.98  0.00     228.40  0.00

Jeg har i dette eksempel kaldt REXX'en MYSDSF. Jeg har skrevet en & foran kommandoen, fordi det bevirker, at kommandoen bliver stående i kommando-linien (dette er generel ISPF-funktionalitet). Når kommandoen bliver stående, kan jeg jo bare trykke Enter for at gentage kommandoen. Jeg har angivet to parametre/prefix'er som input, og de vises i toppen af min EDIT-session. Ja, så let er det. Og hvis du ikke lige ved det, så er CPU-usage forbruget, som din installation typisk betaler software licenser ud fra. ECPU-usage er det samlede forbrug for jobbet inklusive CPU-forbrug på såkaldte ZIIP-processorer. Forbrug på ZIIP-processorer og lignende betales der ikke software licens af. Du kan altså beregne forbruget på ZIIP-processorer ved at trække CPU-usage fra ECPU-usage. I langt de fleste tilfælde vil resultatet være nul, da normale jobs ikke kan udnytte ZIIP-processorer (desværre).

Og lige en sidste kommentar, når nu vi snakker CPU-forbrug. REXX-interfacet til SDSF bruger ret meget CPU. Måske er det faktisk billigere i CPU at lade være med at bruge ISFPREFIX variablen og i stedet loop'e gennem JNAME stem-variablen og finde de ønskede jobs på den måde. Det kræver selvfølgelig mere programmering, og som sagt ved jeg ikke, om det er mere effektivt, men jeg har en mistanke.

Forrige danske tip        Last tip in english        Tip oversigten