CONTENTS Title Page Copyright Page Preface 1 Introduction 1.1 Overview 1.2 The Collector 1.3 The Analyzer 1.4 Getting Started 1.4.1 Using the Collector 1.4.1.1 Invoking the Collector 1.4.1.2 Collecting the Data 1.4.1.3 Exiting the Collector 1.4.2 Using the Analyzer 1.4.2.1 Invoking the Analyzer 1.4.2.2 Creating the Default Plot 1.4.2.3 Scrolling Through the Display on Your Terminal 1.4.2.4 Interpreting the Summary Page 1.4.2.5 Viewing the Currently Active Plot 1.4.2.6 Printing, Filing and Appending Analyzer Output 1.4.2.7 Stopping Terminal Output or Exiting the Analyzer Session 2 Using the Collector 2.1 Overview 2.2 Invoking the Collector 2.3 Specifying the Performance Data File 2.4 Specifying Data Collection 2.4.1 Program Counter Sampling Data: System Time 2.4.1.1 PC Sampling Data Distortion 2.4.1.2 Interpreting System Service Wait Times 2.4.1.3 Interpreting I/O Services Wait Times 2.4.1.4 Interpreting Page-Faulting Data 2.4.1.5 Collecting PC Sampling Data and Other Data in the Same Run 2.4.2 Program Counter Sampling Data: CPU Time 2.4.3 Test Coverage Data 2.4.3.1 Codepaths 2.4.3.2 Modules 2.4.3.3 Routines 2.4.3.4 Lines 2.4.3.5 Path-Name Qualification 2.4.3.6 Collecting Coverage Data from Multiple Test Runs 2.4.3.7 Gathering Test Coverage Without Optimization 2.4.4 Execution Count Data 2.4.5 Page Fault Data 2.4.6 System Services Data 2.4.7 Input/Output Data 2.4.8 Tasking Data 2.4.9 Events Data 2.4.10 Collecting Vector Instruction Data 2.4.10.1 Vector Program Counter Sampling Data 2.4.10.2 Vector CPU Time Data 2.4.10.3 Vector Instruction Execution Count Data 2.4.11 Collecting PC Values from the VAX Call Stack 2.4.11.1 Collecting Stack PCs by Data Kind 2.5 Selecting the Language of Your Application 2.6 Naming the Collection Run 2.7 Starting and Terminating Data Collection 2.8 Using Collector Command Procedures 2.9 Using Collector Logical Names 2.10 Gathering Shareable Image Data 3 Using the Analyzer 3.1 Overview 3.2 Invoking the Analyzer 3.3 Generating Histograms and Tables 3.3.1 Specifying the Kind of Data to Tally in the Histogram or Table 3.3.2 Partitioning Histograms into Buckets 3.3.2.1 Filtering Performance Data 3.3.2.2 Specifying Modules and Routines 3.3.2.3 Specifying Individual Buckets 3.3.2.4 Specifying a Set of Buckets 3.3.2.5 Specifying Lines 3.3.2.6 Specifying Codepaths 3.3.2.7 Specifying Bytes 3.3.2.8 Omitting Node Specifications 3.3.3 Using Nonaddress Domains 3.3.3.1 File Name Domain 3.3.3.2 File Key Domain 3.3.3.3 File Virtual Block Number Domain 3.3.3.4 I/O System Services Domain 3.3.3.5 Physical Read Count Domain 3.3.3.6 Physical Write Count Domain 3.3.3.7 Total Physical I/O Count Domain 3.3.3.8 Record Size Domain 3.3.3.9 System Services Domain 3.3.3.10 Task Domains 3.3.3.11 Time Domain 3.3.4 Sorting the Histogram or Table 3.3.5 Omitting Buckets of Certain Values 3.3.6 Showing Source Code in BY LINE and BY CODEPATH Histograms and Tables 3.3.7 Using CALL_TREE Node Specifications 3.3.8 Specifying Which Program Counter Values to Tally 3.3.8.1 Performing Call Stack Analysis 3.3.8.2 Defining the Program Unit as the Main Image 3.3.8.3 Performing Specific Call Stack Analysis 3.3.8.4 Tallying Program Counter Values 3.3.8.5 Using Program Address Selection Qualifiers 3.3.9 Filling and Scaling the Histogram 3.3.9.1 Defining the Character String for the Histogram Bar 3.3.9.2 Setting the Range for the Histogram Bar 3.3.10 Performing Multi-tasking Analysis 3.3.11 Interpreting TABULATE Confidence Intervals 3.4 Creating a Multiple Data-Kind Plot 3.4.1 Merging PCA Performance and Software Performance Monitor (SPM) Files 3.5 Listing the Raw Performance Data 3.6 Using Acceptable Noncoverage (ANC) 3.7 Editing Source Code from Within the Analyzer 3.8 Using Initialization Files and Command Procedures 3.8.1 Using Analyzer Logical Names 4 Productivity Enhancements with PCA 4.1 Example 1: Reducing Execution Time 4.2 Example 2: Analyzing Call Stack Data 4.3 Example 3: Using Multiple Data Kinds 4.4 Example 4: Using Event Markers for Selective Analysis 4.5 Determining Acceptable Noncoverage (ANC) 4.6 Example 6: Measuring Ada Tasking Data 4.7 Using PCA in Screen Mode 4.7.1 Concepts and Terms 4.7.2 Defining Windows 4.7.3 Screen Displays 4.7.3.1 Default Displays 4.7.3.2 User-Defined Displays 4.7.3.3 Pseudo-Display Names 4.7.4 Selecting Displays for Output or Scrolling 4.7.4.1 Viewing Displays with TYPE and SEARCH Commands 4.7.4.2 Setting the Directory Search List 4.7.5 Manipulating Displays 4.7.6 Saving and Extracting Displays 4.7.7 Keypad Key Functions 4.7.8 Defining Keys 5 Using VAX Vectors with PCA 5.1 Analyzing the Vector Instructions in Your Program-an Overview 5.2 Finding Where Your Application Uses Vector Processing 5.2.1 Collecting Concurrent Scalar and Vector Sampling 5.2.2 Gathering Scalar PC Sampling Within the Vector Instruction Emulator Only 5.3 Counting Vector Processor Instructions 5.4 Analyzing Vector Processor Data 5.4.1 Finding the Most-Used Vector Instructions 5.4.2 Finding the Locations of Vector Instructions 5.4.3 Finding if the Vector Processor is Optimally Used 5.4.4 Finding How Well the Use of Vector Registers Is Distributed 5.4.5 Vectors Special Considerations A Sample Programs B PCA Reference Tables B.1 Collector Reference Tables B.2 Analyzer Reference Tables B.2.1 Analyzer Node Specification Summary B.3 Screen Displays C Questions and Answers