[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2006
    Beiträge
    348

    Schlechte Cobol Performance bei CALL PROCEDURE

    Hallo,

    ich habe ein RPG Modul welches mir die Programmbibliothek zurück liefert:
    Name: RPGACTLIB
    Code:
    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:
    Code:
    JOB-                CPU            ZEIT
    NAME                              AKTIV
    ILE_RPG             638             819
    ILE_COBOL         3.663           4.386
    ILE_CL              655             825
    RPG Code:
    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:
    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:
    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2006
    Beiträge
    348
    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

Similar Threads

  1. sql call procedure
    By Xanas in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 10-02-10, 15:03
  2. Performance call / Subroutine
    By ILEMax in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 07-11-09, 17:14
  3. "remote" - call
    By hh-mi in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 15-11-06, 12:23
  4. Berechtigung für Stored Procedure
    By rebe in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 12-10-06, 11:22
  5. Gigabit Ethernetkarte 5701 schlechte Performance
    By TARASIK in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 26-10-04, 10:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •