APAR status
Closed as program error.
Error description
See Problem Summary.
Local fix
na
Problem summary
APAR NUMBER: PM77843 PRODUCT: z/TPFDF FUNCTIONAL AREA: TPFDF CENTRAL DATABASE ROUTINES SHIPPED IN PUT: 10 ABSTRACT: The accuracy of several z/TPF macro counts in z/TPFDF data collection could be improved. PACKAGE CONTENTS: Source Segments: (C) tpfdf/include/i_btcod.c (C) tpfdf/include/i_dfdc.h (N) tpfdf/macro/dfdcol.mac (C) tpfdf/macro/dflnk.mac (C) tpfdf/macro/ifl0df.mac (C) tpfdf/rt/uaa0.asm (C) tpfdf/rt/uab0.asm (C) tpfdf/rt/uac0.asm (C) tpfdf/rt/uad0.asm (C) tpfdf/rt/uae0.asm (C) tpfdf/rt/uaf0.asm (C) tpfdf/rt/uag0.asm (C) tpfdf/rt/uah0.asm (C) tpfdf/rt/uai0.asm (C) tpfdf/rt/uaj0.asm (C) tpfdf/rt/ual0.asm (C) tpfdf/rt/uam0.asm (C) tpfdf/rt/uan0.asm (C) tpfdf/rt/uap0.asm (C) tpfdf/rt/uaq0.asm (C) tpfdf/rt/uar0.asm (C) tpfdf/rt/uas0.asm (C) tpfdf/rt/uat0.asm (C) tpfdf/rt/uau0.asm (C) tpfdf/rt/uav0.asm (C) tpfdf/rt/uaw0.asm (C) tpfdf/rt/uax0.asm (C) tpfdf/rt/uay0.asm (C) tpfdf/rt/ub00.asm (C) tpfdf/rt/ub10.asm (C) tpfdf/rt/ub20.asm (C) tpfdf/rt/ub30.asm (C) tpfdf/rt/ub40.asm (C) tpfdf/rt/ub50.asm (C) tpfdf/rt/ub60.asm (C) tpfdf/rt/ub80.asm (C) tpfdf/rt/ub90.asm (C) tpfdf/rt/ubc0.asm (C) tpfdf/rt/ube0.asm (C) tpfdf/rt/ubf0.asm (C) tpfdf/rt/ubg0.asm (C) tpfdf/rt/ubi0.asm (C) tpfdf/rt/ubl0.asm (C) tpfdf/rt/ubm0.asm (C) tpfdf/rt/ubn0.asm (C) tpfdf/rt/ubo0.asm (C) tpfdf/rt/ubp0.asm (C) tpfdf/rt/ubq0.asm (C) tpfdf/rt/ufao.asm (C) tpfdf/rt/ufe3.asm (C) tpfdf/rt/ufec.asm (C) tpfdf/rt/ufka00.cpp (C) tpfdf/rt/ufka01.cpp (C) tpfdf/rt/ufka02.cpp (C) tpfdf/rt/ufka03.cpp (C) tpfdf/rt/ufka04.cpp (C) tpfdf/rt/uft1.cpp (C) tpfdf/rt/uft5.cpp (C) tpfdf/rt/uft6.cpp (C) tpfdf/rt/uft7.cpp (C) tpfdf/rt/ufta.cpp (C) tpfdf/rt/uftb.cpp (C) tpfdf/rt/uftg.cpp (C) tpfdf/rt/ufth.cpp (C) tpfdf/rt/uftk.cpp Object Only Binaries: None. Configuration Independent Binaries: None. Support Files: None. OTHER BINARIES TO BUILD: YES (C) <sys>/lib/libUTDF.so (C) <sys>/load/UFAO.so (C) <sys>/load/UFE3.so (C) <sys>/load/UFEC.so (C) <sys>/load/UFKA.so (C) <sys>/load/UFTH.so (C) <sys>/load/UTDF.so (C) <sys>/obj/uaa0.o (C) <sys>/obj/uab0.o (C) <sys>/obj/uac0.o (C) <sys>/obj/uad0.o (C) <sys>/obj/uae0.o (C) <sys>/obj/uaf0.o (C) <sys>/obj/uag0.o (C) <sys>/obj/uah0.o (C) <sys>/obj/uai0.o (C) <sys>/obj/uaj0.o (C) <sys>/obj/ual0.o (C) <sys>/obj/uam0.o (C) <sys>/obj/uan0.o (C) <sys>/obj/uap0.o (C) <sys>/obj/uaq0.o (C) <sys>/obj/uar0.o (C) <sys>/obj/uas0.o (C) <sys>/obj/uat0.o (C) <sys>/obj/uau0.o (C) <sys>/obj/uav0.o (C) <sys>/obj/uaw0.o (C) <sys>/obj/uax0.o (C) <sys>/obj/uay0.o (C) <sys>/obj/ub00.o (C) <sys>/obj/ub10.o (C) <sys>/obj/ub20.o (C) <sys>/obj/ub30.o (C) <sys>/obj/ub40.o (C) <sys>/obj/ub50.o (C) <sys>/obj/ub60.o (C) <sys>/obj/ub80.o (C) <sys>/obj/ub90.o (C) <sys>/obj/ubc0.o (C) <sys>/obj/ube0.o (C) <sys>/obj/ubf0.o (C) <sys>/obj/ubg0.o (C) <sys>/obj/ubi0.o (C) <sys>/obj/ubl0.o (C) <sys>/obj/ubm0.o (C) <sys>/obj/ubn0.o (C) <sys>/obj/ubo0.o (C) <sys>/obj/ubp0.o (C) <sys>/obj/ubq0.o (C) <sys>/obj/ufao.o (C) <sys>/obj/ufe3.o (C) <sys>/obj/ufec.o (C) <sys>/obj/ufka00.o (C) <sys>/obj/ufka01.o (C) <sys>/obj/ufka02.o (C) <sys>/obj/ufka03.o (C) <sys>/obj/ufka04.o (C) <sys>/obj/uft1.o (C) <sys>/obj/uft5.o (C) <sys>/obj/uft6.o (C) <sys>/obj/uft7.o (C) <sys>/obj/ufta.o (C) <sys>/obj/uftb.o (C) <sys>/obj/uftg.o (C) <sys>/obj/ufth.o (C) <sys>/obj/uftk.o COMMENTS: z/TPFDF data collection counters were originally designed to track the calls to specific z/TPFDF central database routines. Each of these routines had a specific task, such as obtaining a core block or releasing a record. These counts generally reflected the number of calls to z/TPF macros, such as GETCC and RELFC. However, this approach results in several inaccuracies. For example, when a DBDEL ALL,NOKEY or DBCLS RELFC is issued in the application while z/TPFDF data collection is running, the DFLNK START macro at the beginning of the central database routine that releases the records and forward chains increases the RELFC count by one, but multiple RELFC calls will potentially be made in the routine. Similarly, many other z/TPF macro calls within the central database routines are not counted, or the data collection counters are unconditionally updated when a routine is called even though the actual macro was conditionally skipped in the routine. In addition, all data collection rates (per second) reported are approximately 5% higher than the actual values. This is because the data collection routines use the leftmost fullword of the TOD clock value for the start and stop time to calculate the run time. In reality, 1.048576 seconds has passed for every second counted. For example, if data collection runs for exactly 5 minutes, the internal routines will calculate the runtime as 286 seconds instead of 300 seconds. This inaccuracy results in the data collection "per second" rates being about 5% too high. Even though this discrepancy is consistent across all rates, the numbers reported should be accurate.
Problem conclusion
SOLUTION: The following changes are made to ensure the validity of the z/TPFDF data collection counts: 1) Macro dfdcol.mac was created to allow updating one or more z/TPFDF data collection from counts anywhere in the z/TPFDF central database routines. 2) Macro ifl0df.mac was updated to change the z/TPFDF data collection equates from case-releated equates to self-explanatory names. 3) Header i_dfdc.h was updated to add and change defines for z/TPFDF data collection count fields to match ifl0df.mac and to modify the datacollection_multiple() macro to process up to 3 data collection counts at once. 4) Macro dflnk.mac was adjusted to allow the same equate to be used on more than one DFLNK START call in the same segment. 5) All central database routines (ua*.asm and ub*.asm segments) were updated as follows: a) All case-related data collection equates in the DFLNK START macro were replaced with the new command/macro-related equates (for example, COLLECT=#UAA1 is replaced with COLLECT=#DFDC_DBADD). b) A call to the new DFDCOL macro was inserted whenever one of the following macros is issued to increment the z/TPFDF data collection count for that macro (if z/TPFDF data collection is active): ATTAC, DETAC, GETCC, RELCC, GETFC, RELFC, FINWC, FIWHC, FILEC, FILUC, FILNC c) In segments uam0.asm, uas0.asm, uaw0.asm, ub00.asm, ub20.asm, ub60.asm, ub80.asm, ub90.asm, and ubf0.asm, all occurrences of CRUSA macros were replaced with a LEVTA/RELCC/DFDCOL sequence to ensure the validity of the z/TPFDF data collection counts. In segment ub50.asm, some of the collection hooks are removed from DFLNK START and moved to the correct place within the code to ensure the validity of the count as these macros are issued conditionally. d) Segments ub10.asm and ub20.asm were optimized by accumulating the count for some macro calls that are issued in a loop and updating the respective z/TPFDF data collection counts only once at the end of the loop. e) Code cleanup was done in segments ubc0.asm, ube0.asm and ubi0.asm to move back to the main path some macro calls that were unnecessarily moved to and then issued from SW00SR (SW00IN1), which saves several instructions. A similar change was made in ub50.asm for a FINWC macro that was unnecessarily issued at the end of the segment. Furthermore, segment ub40.asm was updated to remove superfluous GETFC prototype instructions that were unnecessarily moved to SW00SR (SW00IN1) but never issued from there. 6) C language segments that handle B+tree (uft*.cpp, i_btcod.c) and large logical record (LLR) processing (ufka*.cpp) were updated as follows: a) A call to the datacollection() or datacollection_multiple() function was inserted whenever one of the following functions is issued to increment the z/TPFDF data collection count for that function: attac(), detac(), getcc(), relcc(), find_record(), file_record(), relfc(), getfc() . b) In segments i_btcod.c, ufka00.cpp, ufka01.cpp, ufka02.cpp, ufka03.cpp, ufka04.cpp, uft6.cpp, ufth.cpp, and uftk.cpp all occurrences of crusa() functions were replaced with a levtest()/relcc()/data_collection() sequence to ensure the validity of the z/TPFDF data collection counts. Similarly, segment uftk.cpp was updated to replace a rlcha() call with a find/relfc/relcc loop to be able to count the actual number of relfc calls. A new system error (OPR-DB0189) is issued in this new loop. c) Segments ufka01.cpp, ufka02.cpp, ufka03.cpp, ufka04.cpp, uft6.cpp, and uftk.cpp were optimized by accumulating the count for some function calls that are issued in a loop and updating the respective z/TPFDF data collection counts only once at the end of the loop. In addition, segemnts ufe3.asm and ufec.asm were updated to more accurately calculate the data collection run time. COREQS: NO None. MIGRATION CONSIDERATIONS: YES Functional, automation, and operation changes: Changed commands: ZUDFC DISPLAY Changed messages: DB0168, DB0169 Application programming interface (API) changes: New system (restricted) macro: DFDCOL Coexistence, migration, and fallback considerations: Additional Information: When running a z/TPFDF data collection after the APAR is loaded, several data collection counts may experience (potentially significantly) different values compared to a similar data collection taken before the APAR is loaded. The following counts may be higher: CFILE, PFILE, RELFC, DETAC, ATTAC, GETCC, RELCC, CFIND, PFIND, BTFND, LRFIL, LRFND The following counts may be higher or lower, depending on the application profile: GETFC The following counts may be lower because some of the application programming interface (API) calls previously included in these counts are now included in one of the previously listed counts: FILNC, FILEC This should be taken into account when comparing results from a data collection run that was done before this APAR is applied to results from a run that was done after this APAR is applied. BUILD COMMANDS AND INSTRUCTIONS: YES #maketpf commands for linux maketpf -f UTDF uaa0.o uab0.o uac0.o uad0.o uae0.o uaf0.o uag0.o uah0.o uai0.o uaj0.o ual0.o uam0.o uan0.o uap0.o uaq0.o uar0.o uas0.o uat0.o uau0.o uav0.o uaw0.o uax0.o uay0.o ub00.o ub10.o ub20.o ub30.o ub40.o ub50.o ub60.o ub80.o ub90.o ubc0.o ube0.o ubf0.o ubg0.o ubi0.o ubl0.o ubm0.o ubn0.o ubo0.o ubp0.o ubq0.o maketpf -f UFAO ufao.o maketpf -f UFEC ufec.o maketpf -f UFE3 ufe3.o maketpf -f UFKA ufka00.o ufka01.o ufka02.o ufka03.o ufka04.o maketpf -f UFTH uft1.o uft5.o uft6.o uft7.o ufta.o uftb.o uftg.o ufth.o uftk.o maketpf UTDF link maketpf UFAO link maketpf UFEC link maketpf UFE3 link maketpf UFKA link maketpf UFTH link UPDATED INFORMATION UNITS: YES z/TPFDF Commands z/TPFDF Messages (System Error, Online, Offline) z/TPFDF Programming Concepts and Reference See your IBM representative if you need additional information. DOWNLOAD INSTRUCTIONS: http://www.ibm.com/software/htp/tpf/maint/maintztpf.html APAR URL: http://www.ibm.com/software/htp/tpf/ztpfmaint/put10/PM77843.htm
Temporary fix
Comments
APAR Information
APAR number
PM77843
Reported component name
ZTPFDF
Reported component ID
5748F1501
Reported release
110
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2012-11-27
Closed date
2013-03-19
Last modified date
2013-03-19
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
| SK2T8062 |
Fix information
Fixed component name
ZTPFDF
Fixed component ID
5748F1501
Applicable component levels
R110 PSY
UP
Rate this page:
Average rating
Copyright and trademark information
IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at www.ibm.com/legal/copytrade.shtml.