PDA

View Full Version : Schlechte Cobol Performance bei CALL PROCEDURE



schatte
07-11-09, 21:31
Hallo,

ich habe ein RPG Modul welches mir die Programmbibliothek zurück liefert:
Name: RPGACTLIB

D SDS
D LIBNAME 81 90
*
C *ENTRY PLIST
C PARM X_LIBNAME 10
C EVAL X_LIBNAME=LIBNAME
C EVAL *INLR=*ON
Nun habe ich jeweils ein RPG, CL und Cobol Programm welche dieses Modul 1000 mal aufrufen (Performance Test). Dabei fällt auf, dass das Cobol Programm wesentlich mehr CPU Zeit benötigt als das CL/RPG Programm. Die folgenden Auswertungen wurden durch das Journal QACGJRN aufgezeichnet:


JOB- CPU ZEIT
NAME AKTIV
ILE_RPG 638 819
ILE_COBOL 3.663 4.386
ILE_CL 655 825
RPG Code:

D CALLRPG PR ExtProc('RPGACTLIB')
D LIBNAME 10A
D
D LIBNAM S 10A
*
c do 1000
C callp CALLRPG(LIBNAM)
c enddo
C EVAL *INLR=*ON
CL Code:

PGM

DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&ZAEHLER) TYPE(*DEC) LEN(5)

CHGVAR VAR(&ZAEHLER) VALUE(0)
ANF010:
CHGVAR VAR(&ZAEHLER) VALUE(&ZAEHLER + 1)
CALLPRC PRC(RPGACTLIB) PARM(&LIB)
IF COND(&ZAEHLER *NE 1000) THEN(GOTO +
CMDLBL(ANF010))

ENDPGM
Cobol Code:

WORKING-STORAGE SECTION.
01 LIB-WRK PIC X(10).
*-------------------------------------------------------
LINKAGE SECTION.
*-------------------------------------------------------
*-------------------------------------------------------
PROCEDURE DIVISION.
*-------------------------------------------------------
STEUER SECTION.
ANFANG.

PERFORM 1000 TIMES
CALL PROCEDURE "RPGACTLIB" USING LIB-WRK
END-PERFORM.

ENDE.
GOBACK.
Der Test wurde unter V4R5 als auch unter V5R2 ausgeführt.

Kann mir jemand erklären, warum das Cobol Programm in diesem Fall so viel mehr CPU Zeit verbraucht?

Gruß
Matthias

Fuerchau
08-11-09, 18:46
Ich vermute mal, dass das COBOL-Programm in einer anderen Aktivierungsgruppe als das ILERPG läuft.
Wandle das ILERPG mal mit
H DFTACTGRP(*NO) ACTGRP(*CALLER)
um und verlasse das RPG-Programm ggf. mit *INLR = *OFF.

Wenn das COBOL in einer anderen ACTGRP läuft muss durch den CALL des ILRPG eine neue ACTGRP erzeugt werden. Durch *INLR=*ON wird diese dann wieder aufgelöst, und das kann schon mal dauern.

Ich denke, den selben Effekt bekommst du, wenn du ein 2. ILERPG mit eigener ACTGRP schreibst, dass dein anderes ILERPG aufruft.

schatte
08-11-09, 21:10
Hallo,

aber es handelt sich doch um ein Modul und nicht um ein Programm, welches aufgerufen wird (Modul RPGACTLIB). Da gibt es doch keine Aktivierungsgruppe, weil das Modul doch beim Compilieren in das Programm (z.B. das Cobol Programm) gebunden wird. Bei allen 3 *PGMs wurde die Aktivierungsgruppe QILE verwendet.

Gruß
Matthias