So, I learned something and now debate the value of this feature...
I first put together a test using an EXEC that did a REXX call to another
EXEC and ran it from batch. Basically there was no difference. In fact,
the SYSEXEC might have performance slightly better (results below). This
got me wondering if it even worked for batch. So, I read a little and found
a comment that it only works when a REXX EXEC or CLIST is launched from the
TSO EXEC command... So I wrote a new test driver to see that.
Here are my results from my first test using a REXX CALL of a second level
EXEC using traditional REXX methods (not TSO EXEC):
Non-VLF (from SYSEXEC)
STEPNAME PROCSTEP PROGRAM RC EXCP CPU SRB CLOCK SERV
NON0001 TESTVLF IKJEFT01 00 59 .01 .00 .19 542
NON0010 TESTVLF IKJEFT01 00 87 .01 .00 .08 718
NON0100 TESTVLF IKJEFT01 00 369 .04 .00 .30 2729
NON1000 TESTVLF IKJEFT01 00 3182 .37 .02 2.44 24035
VLF (from SYSPROC)
STEPNAME PROCSTEP PROGRAM RC EXCP CPU SRB CLOCK SERV
VLF0001 TESTVLF IKJEFT01 00 62 .01 .00 .07 644
VLF0010 TESTVLF IKJEFT01 00 104 .02 .00 .13 1301
VLF0100 TESTVLF IKJEFT01 00 567 .12 .00 .52 7290
VLF1000 TESTVLF IKJEFT01 00 5182 .92 .02 3.04 57679
I ran 4 SYSEXEC and 4 SYSPROC test and each did the exact same thing.
Loop once, loop 10 times, loop 100 times, loop 1000 times. Each loop did a
bunch of SAY's for SYSVAR stuff and called a second EXEC from the same PDS
that simply did a SAY and returned.
Here are the 2 EXEC's
TESTVLF
/* REXX */
arg loops
if loops = '' then loops = 1
do loops
say 'User Information:'
say 'SYSPREF:' SYSVAR('SYSPREF')
say 'SYSPROC:' SYSVAR('SYSPROC')
say 'SYSUID:' SYSVAR('SYSUID')
say 'SYSTERM:' SYSVAR('SYSTERMID')
say 'Exec Information:'
say 'SYSENV:' SYSVAR('SYSENV')
say 'SYSICMD:' SYSVAR('SYSICMD')
say 'SYSISPF:' SYSVAR('SYSISPF')
say 'SYSNEST:' SYSVAR('SYSNEST')
say 'SYSPCMD:' SYSVAR('SYSPCMD')
say 'SYSSCMD:' SYSVAR('SYSSCMD')
say 'System Information:'
say 'SYSHSM:' SYSVAR('SYSHSM')
say 'SYSLRACF:' SYSVAR('SYSLRACF')
say 'SYSRACF:' SYSVAR('SYSRACF')
say 'SYSTSOE:' SYSVAR('SYSTSOE')
say 'Timing Information:'
say 'SYSSRV:' SYSVAR('SYSSRV')
say 'SYSCPU:' SYSVAR('SYSCPU')
say 'ELAPSED:' TIME('E')
call testvlf2
end
say 'Final Timing Information:'
say 'SYSSRV:' SYSVAR('SYSSRV')
say 'SYSCPU:' SYSVAR('SYSCPU')
say 'ELAPSED:' TIME('E')
TESTVLF2
/* rexx */
say 'Made it here too'
Here is my test JCL:
//jobcard...
//***************************************************************
//* TSO BATCH JOB *
//***************************************************************
//SYSEXEC PROC LOOPS=1
//TESTVLF EXEC PGM=IKJEFT01,PARM='TESTVLF &LOOPS'
//SYSEXEC DD DSN=SYS0.REXX.USER.EXEC,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
// PEND
//SYSPROC PROC LOOPS=1
//TESTVLF EXEC PGM=IKJEFT01,PARM='TESTVLF &LOOPS'
//SYSPROC DD DSN=SYS0.REXX.USER.EXEC,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
// PEND
//***************************************************************
//* SYSEXEC TIMINGS *
//***************************************************************
//NON0001 EXEC SYSEXEC,LOOPS=1
//NON0010 EXEC SYSEXEC,LOOPS=10
//NON0100 EXEC SYSEXEC,LOOPS=100
//NON1000 EXEC SYSEXEC,LOOPS=1000
//***************************************************************
//* SYSPROC TIMINGS *
//***************************************************************
//VLF0001 EXEC SYSPROC,LOOPS=1
//VLF0010 EXEC SYSPROC,LOOPS=10
//VLF0100 EXEC SYSPROC,LOOPS=100
//VLF1000 EXEC SYSPROC,LOOPS=1000
Here is pertinent section of the COFVLF00 member:
.
.
CLASS NAME(CSVLLA) /* Class name for Library Lookaside @P2C*/
EMAJ(LLA) /* Major name for Library Lookaside @P2C*/
CLASS NAME(IKJEXEC) /* Class name for TSO CLISTs */
EDSN(SYS0.REXX.USER.EXEC)
EDSN(SYS0.REXX.IBM.EXEC)
MAXVIRT(512)
CLASS NAME(IGGCAS) /* Class name for catalogs */
.
.
So, I changed my first EXEC to TESTVLF1 and had it TSO EXEC the same TSTVLF2
from above...
TESTVLF1
/* rexx */
arg loops
if loops = '' then loops = 1
say 'Made it here'
do loops
"EXEC 'SYS0.REXX.USER.EXEC(TESTVLF2)'"
end
Here are the results using the same JCL (just changing the EXEC name from
TESTVLF to TESTVLF1)
STEPNAME PROCSTEP PROGRAM RC EXCP CPU SRB CLOCK SERV
NON0001 TESTVLF IKJEFT01 00 28 .01 .00 .22 575
NON0010 TESTVLF IKJEFT01 00 81 .03 .00 .41 1606
NON0100 TESTVLF IKJEFT01 00 624 .19 .01 4.22 11867
NON1000 TESTVLF IKJEFT01 00 5224 1.84 .05 42.56 113K
STEPNAME PROCSTEP PROGRAM RC EXCP CPU SRB CLOCK SERV
VLF0001 TESTVLF IKJEFT01 00 25 .01 .00 .12 568
VLF0010 TESTVLF IKJEFT01 00 59 .02 .00 .07 946
VLF0100 TESTVLF IKJEFT01 00 419 .09 .00 .24 5371
VLF1000 TESTVLF IKJEFT01 00 4028 .80 .03 2.15 50489
So, significant difference.
BUT, WHO DOES THIS? My conclusion is this is not a player for real REXX
applications that use real REXX subroutines and functions.
My two cents. Maybe I need to be educated... or go on vacation... I'm
actually gone for the next 3 weeks on vacation - one of the reasons I had
time to phutz with this stuff... Short timer attitude...
Rob
-----Original Message-----
From: Pinnacle [mailto:
pinn...@rochester.rr.com]
Sent: Wednesday, April 18, 2012 12:07 PM
To: TSO REXX Discussion List
Subject: Re: Distinguishing REXX and CLIST