IBM Mainframe Assembler程序显示了CPU时间的极端跳跃,并在COBOL呼叫后的运行时间显示.为什么



一个IBM Mainframe Assembler程序,该程序读取一个非常大的文件已被修改以调用COBOL" stub" stub"程序,每次记录一次。COBOL调用是必不可少的,但是程序本身几乎没有工作。自然会预计CPU的略有增加,但是测试表明CPU使用率和运行时间的增加很高。为什么?可以做些什么来加快速度?

示例源代码足以再现问题:

(1)汇编程序,该程序致电IEFBR14 8192次:

SAMPLE CSECT
       LR    12,15
       USING SAMPLE,12
       LHI   9,8192
LOOP   CALL  IEFBR14
       BCT   9,LOOP
       SR    15,15
       SVC   3
       END

日志显示出非常低的资源消耗,在调用无用的程序时合理。

EXCP    CPU    SRB  CLOCK   SERV  PG 
  11    .00    .00    .00    603   0

(2)现在编码一个简单的COBOL程序,该程序除了回击外什么都不做:

标识部门。
程序-ID。Cobol。
程序部门。回去。

...也从同一循环中称为8192次:

SAMPLE CSECT              
       LR    12,15        
       USING CALLCOB,12   
       LHI   9,8192       
LOOP   CALL  IEFBR14         
       CALL  COBOL        
       BCT   9,LOOP       
       SVC   3            
       END

是的!现在,根据比较,资源消耗是可怕的:

 EXCP    CPU    SRB  CLOCK   SERV  PG 
65552    .16    .00    .19  3980K   0 

至少自1990年代以来,标准IBM COBOL,PL/I和FORTRAN包含了一个名为" Language Environment"(LE)的内置功能,该功能提供了一套标准的运行时可可Callable Services所有人共有。在运行时,该"环境"是通过旨在在所有后续中间语言呼叫中提供持久服务的初始化例程来建立的。但是,虽然汇编器支持 le,但它是不是自动内置的。因此,当汇编器调用诸如COBOL之类的"符合LE的"语言时,这些初始化例程将使用调用每个调用,从而大大减慢了过程。解决方案是让汇编程序"驱动程序"程序建立LE运行时环境,因此它在所有后续的呼叫中持续存在,并且仅发生一次。值得庆幸的是,这很容易通过向汇编程序源添加一些简单的语句来完成。虽然很少而且很简单,但放置至关重要。这是一些可以用作模板的示例" shell"代码:

SHELL CEEENTRY AUTO=DSALEN 
* COBOL CALL can be anywhere after CEEENTRY and before CEETERM 
       CEETERM ,
* declare constants here: 
CONSTANT DC    CL8'CONSTANT'
PPA    CEEPPA  ,  (P)rogram (P)rolog (A)rea
       CEEDSA  ,  (D)ynamic (S)torage (A)rea
* declare variables here: 
VARIABLE DS    CL8
DSALEN EQU     *-CEEDSA
       CEECAA ,
       END

还有其他与LE相关的汇编器宏(请参见下面的链接),但是上面的源是简单,有效的COBOL调用所需的所有内容。

将基本语句添加到示例程序之后,以使其"符合LE",但保持相同的IEFBR14/COBOL调用循环:

SAMPLE CEEENTRY AUTO=DSALEN                    
       LHI   9,8192                            
LOOP   CALL  IEFBR14                           
       CALL  COBOL                             
       BCT   9,LOOP                            
       CEETERM ,                               
PPA    CEEPPA  ,  (P)ROGRAM (P)ROLOG (A)REA    
       CEEDSA  ,  (D)YNAMIC (S)TORAGE (A)REA   
DSALEN EQU     *-CEEDSA                        
       CEECAA ,                                
       END                                     

...现在,资源消耗再次是合理的,用于调用一个无用的程序:

 EXCP    CPU    SRB  CLOCK   SERV  PG 
   23    .00    .00    .00   1814   0 

Z/OS语言环境编程指南...专业编程任务...汇编器的注意事项...汇编器宏:

http://www.ibm.com/support/knowledgecenter/en/ssltbw_2.2.0/com.ibm.zos.v2r2.ceea200/clcasm5.htm5.htm5.htm

最新更新