On 12/09/2018 3:42 PM, Mike Shorkend wrote:
Out of curiosity, I ran this as interpreted  REXX and then as compiled
REXX.
The REXX compiler does not like SYSVAR

That's curious! SYSVAR works fine for me with the REXX compiler.

I have found that the compiled REXX runtime memory management is flawed. It does a GETMAIN every time it needs dynamic memory instead of using cell-pools or a heap. Try the following snippet both interpreted and compiled.

/* REXX */
start = sysvar('SYSCPU')
s = copies('0',1024)
do i = 1 to 500000
  a.i = s
end
say 'CPU time = 'sysvar('SYSCPU') - start

so I just ran them both as batch
jobs  and looked at the IEF032I message in JES SYSTEM MESSAGES:

Interpreted (Non-compiled )
IEF032I STEP/STEP010 /STOP
2018255.1024
         CPU:     0 HR  00 MIN  *13.10 *SEC    SRB:     0 HR  00 MIN  00.00
SEC

Compiled

IEF032I STEP/GO      /STOP
2018255.1023
         CPU:     0 HR  00 MIN  *00.25* SEC    SRB:     0 HR  00 MIN  00.00
SEC


Very dramatic improvement - approx 50 times faster.


This was on a zPDT

The code I used:

/* REXX */
I = 0
DO 9999999
    I = I + 1
END
EXIT 0





On Wed, 12 Sep 2018 at 06:55, David Crayford <[email protected]> wrote:

We're running a 2965-N10 and your snippet took a gargantuan 19.33 CPU
seconds on our machine. I was curious as to what it was doing to take up
so much time so I profiled it.
Astonishingly, it's spending most of the time moving data! The REXX
implementation on z/OS predates modern scripting language design which
generally compile to bytecode for processing in a VM.

   Address    Module   AM S/P AS ASID   Percent of CPU Time * 10.00% ±1.7%
*....1....2....3....4....5....6....7....8....9....*
   0D5ABC50 - IRXINIT  31  P8          21.73 OOOOOOOOOOO

   > IXXRCN+0C4C       46F0 CC1C        BCT R15,3100(,R12)
   > IXXRCN+0C50       D200 F000 3000   MVC 0(1,R15),0(R3)

   0D5ABC56 - IRXINIT  31  P8          21.22 OOOOOOOOOOO

   > IXXRCN+0C50       D200 F000 3000   MVC 0(1,R15),0(R3)
   > IXXRCN+0C56       1B3B             SR R3,R11
   > IXXRCN+0C58       1BFB             SR R15,R11
   > IXXRCN+0C5A       1932             CR R3,R2
    Alternate Disassembly
   > IXXRCN+0C54       3000             LPER R0,R0
   > IXXRCN+0C56       1B3B             SR R3,R11
   > IXXRCN+0C58       1BFB             SR R15,R11
   > IXXRCN+0C5A       1932             CR R3,R2

   0D5B1D46 - IRXINIT  31  P8           4.92 OO

   > IXXRIN+0432       1853             LR R5,R3
   > IXXRIN+0434       0E24             MVCL R2,R4
   > IXXRIN+0436       0620             BCTR R2,R0
   > IXXRIN+0438       952A 2000        CLI 0(R2),42

On 12/09/2018 9:53 AM, Jackson, Rob wrote:
Hah, indeed it did.  I was surprised too.  I added in the redundant
count in the first place simply because I assumed a simple loop might not
cause even a hundredth of a second CPU usage.  I was astonished, even
knowing REXX is inherently a pig, albeit a generally pretty pig (yeah,
yeah, Python is pretty too).
We are on a baby machine, a 2965-Txx, so that accounts for some of it,
but still, yes, REXX is indeed expensive.
First Tennessee Bank
Mainframe Technical Support

-----Original Message-----
From: IBM Mainframe Discussion List <[email protected]> On
Behalf Of David Crayford
Sent: Tuesday, September 11, 2018 9:44 PM
To: [email protected]
Subject: Re: Co-posted: Rexx performance measures

[External Email]

Crikey! Did it really take REXX a whopping 7.7 CPU seconds to count to
ten million?

On 12/09/2018 3:52 AM, Jackson, Rob wrote:
Works for me just fine.  Looping ten million times and incrementing a
counter by one resulted in this:
Bgn CPU:      68.66
Bgn SRV:  2447864
End CPU:      76.36
End SRV:  2721588

First Tennessee Bank
Mainframe Technical Support


-----Original Message-----
From: IBM Mainframe Discussion List <[email protected]> On
Behalf Of ITschak Mugzach
Sent: Tuesday, September 11, 2018 3:36 PM
To: [email protected]
Subject: Co-posted: Rexx performance measures

[External Email]

I am trying to measure Rexx exec performance metrics. Elapse is easy
Time('R') at start exec resets the counter and the second one reports
the value. But how to measure CPU or service units?  I tried SYSVAR('CPU')
at beginning of exec and at end, thinking to do the calculation myself, but
both returns the same value ... same behevior with SYSVAR('SYSSRV').
I am a good developer, but i am not fooling my self I am SO good. what
is the trick to return the service units consumed by the exec?
ITschak

--
ITschak Mugzach
*|** IronSphere Platform* *|* *Information Security Contiguous
Monitoring for Legacy **|  *

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send
email to [email protected] with the message: INFO IBM-MAIN
FIRST TENNESSEE

Confidentiality notice:
This e-mail message, including any attachments, may contain legally
privileged and/or confidential information. If you are not the intended
recipient(s), or the employee or agent responsible for delivery of this
message to the intended recipient(s), you are hereby notified that any
dissemination, distribution, or copying of this e-mail message is strictly
prohibited. If you have received this message in error, please immediately
notify the sender and delete this e-mail message from your computer.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send
email to [email protected] with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send
email to [email protected] with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN



----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to