hp.com home products and services support and drivers solutions how to buy
cd-rom home
End of Jump to page title
HP OpenVMS systems
documentation

Jump to content


HP OpenVMS System Analysis Tools Manual

HP OpenVMS System Analysis Tools Manual


Previous Contents Index


UNDEFINE

Removes the specified symbol from SDA's symbol table.

Format

UNDEFINE symbol


Parameter

symbol

The name of the symbol to be deleted from SDA's symbol table. A symbol name is required.

Qualifiers

None.

VALIDATE PFN_LIST

Validates that the page counts on lists are correct.

Format

VALIDATE PFN_LIST {/ALL (d)|[/BAD|/FREE|/MODIFIED|/PRIVATE| /UNTESTED|/ZERO]}


Parameters

None.

Qualifiers

/ALL

Validates all the PFN lists: bad, free, modified, zeroed free pages, and private pages.

/BAD

Validates the bad page list.

/FREE

Validates the free page list.

/MODIFIED

Validates the modified page list.

/PRIVATE

Validates all private page lists.

/UNTESTED

Validates the untested page list that was set up for deferred memory testing.

/ZERO

Validates the zeroed free page list.

Description

The VALIDATE PFN_LIST command validates the specified PFN list by counting the number of entries in the list and comparing that to the running count of entries for each list maintained by the system.

Examples

#1

SDA> VALIDATE PFN_LIST
Free page list validated: 1433 pages 
        (excluding zeroed free page list with expected size 103 pages) 
Zeroed free page list validated: 103 pages 
Modified page list validated: 55 pages 
Bad page list validated: 0 pages 
Untested page list validated: 0 pages 
Private page list at 81486340 validated: 2 pages
      

This example shows the default behavior of VALIDATE PFN_LIST, checking all lists.

#2

SDA> VALIDATE PFN_LIST/FREE
Free page list validated: 1433 pages 
        (excluding zeroed free page list with expected size 103 pages)
 
      

This example shows the validation of only the free list.


VALIDATE QUEUE

Validates the integrity of the specified queue by checking the pointers in the queue.

Format

VALIDATE QUEUE [address]
[/BACKLINK|/LIST|/PHYSICAL|
/QUADWORD|/SELF_RELATIVE|/SINGLY_LINKED]


Parameter

address

Address of an element in a queue.

If you specify the period (.) as the address, SDA uses the last evaluated expression as the queue element's address.

If you do not specify an address, the VALIDATE QUEUE command determines the address from the last issued VALIDATE QUEUE command in the current SDA session.

If you do not specify an address, and no queue has previously been specified, SDA displays the following error message:


%SDA-E-NOQUEUE, no queue has been specified for validation 


Qualifiers

/BACKLINK

Allows doubly linked lists to be validated from the tail of the queue. If the queue is found to be broken when validated from the head of the queue, you can use /BACKLINK to narrow the list of corrupted entries.

/LIST

Displays the address of each element in the queue.

/PHYSICAL

Allows validation of queues whose header and links are physical addresses.

/QUADWORD

Allows the validate operation to occur on queues with linked lists of quadword addresses.

/SELF_RELATIVE

Specifies that the selected queue is a self-relative queue.

/SINGLY_LINKED

Allows validation of queues that have no backward pointers.

Description

The VALIDATE QUEUE command uses the forward and, optionally, backward pointers in each element of the queue to make sure that all such pointers are valid and that the integrity of the queue is intact. If the queue is intact, SDA displays the following message:


Queue is complete, total of n elements in the queue 
In these messages, n represents the number of entries the VALIDATE QUEUE command has found in the queue.

If SDA discovers an error in the queue, it displays one of the following error messages:


Error in forward queue linkage at address nnnnnnnn after tracing x elements 
Error comparing backward link to previous structure address (nnnnnnnn) 
Error occurred in queue element at address oooooooo after tracing pppp elements 

These messages can appear frequently when you use the VALIDATE QUEUE command within an SDA session that is analyzing a running system. In a running system, the composition of a queue can change while the command is tracing its links, thus producing an error message.

If there are no entries in the queue, SDA displays this message:


The queue is empty 


Examples

#1

SDA>  VALIDATE QUEUE/SELF_RELATIVE IOC$GQ_POSTIQ
Queue is complete, total of 159 elements in the queue
      

This example validates the self-relative queue IOC$GQ_POSTIQ. The validation is successful and the system determines that there are 159 IRPs in the list.

#2

SDA> VALIDATE QUEUE/QUADWORD FFFFFFFF80D0E6CO/LIST
Entry      Address               Flink                   Blink
-----      -------               ------                  -----
Header     FFFFFFFF80D0E6CO      FFFFFFFF80D03780        FFFFFFFF80D0E800
    1.     FFFFFFFF80D0E790      FFFFFFFF80D0E7CO        FFFFFFFF80D0E6C0
    2.     FFFFFFFF80D0E800      FFFFFFFF80D0E6C0        FFFFFFFF80D0E7C0
Queue is complete, total of 3 elements in the queue
      

This example shows the validation of quadword elements in a list.

#3

SDA> VALIDATE QUEUE/SINGLY_LINKED EXE$GL_NONPAGED+4
Queue is zero-terminated, total of 95 elements in the queue
      

This example shows the validation of singly linked elements in the queue. The forward link of the final element is zero instead of being a pointer back to the queue header.


VALIDATE SHM_CPP

Validates all the shared memory common property partitions (CPPs) and the counts and ranges of attached PFNs; optionally, it can validate the contents of the database for each PFN.

Format

VALIDATE SHM_CPP [/QUALIFIERS]


Parameters

None.

Qualifiers

/ADDRESS=n

Validates the counts and ranges for a single shared memory CPP given the address of the SHM_CPP structure.

/ALL

Validates all the shared memory CPPs. This is the default.

/IDENT=n

Validates the counts and ranges for a single shared memory CPP.

/PFN

Validates the PFN database contents for each attached PFN. The default is all lists (free, bad, untested) plus the PFN database pages and the complete range of PFNs in the CPP.

To validate only the complete range of PFNs in the CPP, use the keyword ALL_FRAGMENTS with the /PFN qualifier:


     /PFN = ALL_FRAGMENTS 

To validate only the bad page list, use the keyword BAD with the /PFN qualifier:


     /PFN = BAD 

To validate only the free page list, use the keyword FREE with the /PFN qualifier:


     /PFN = FREE 

To validate the PFNs containing the PFN database, use the keyword PFNDB with the /PFN qualifier:


     /PFN = PFNDB 

To validate only the untested page list, use the keyword UNTESTED with the /PFN qualifier:


     /PFN = UNTESTED 

To validate multiple lists, you can combine keywords for use with the /PFN qualifier:


     /PFN = (x,y) 

If you specify the /PFN without /ALL, /IDENT, or /ADDRESS, then the system validates the PFN lists from the last shared memory CPP.


Example


SDA> VALIDATE SHM_CPP
Not validating SHM_CPP 0000 at FFFFFFFF.7F2BA140, VALID flag clear 
 
Not validating SHM_CPP 0001 at FFFFFFFF.7F2BA380, VALID flag clear 
 
Not validating SHM_CPP 0002 at FFFFFFFF.7F2BA5C0, VALID flag clear 
 
Validating SHM_CPP 0003 at FFFFFFFF.7F2BA800 ... 
 
    Validating counts and ranges in the free page list ... 
    ... o.k. 
 
    Not validating the bad page list, list is empty 
 
    Not validating the untested page list, list is empty 
 
Not validating SHM_CPP 0004 at FFFFFFFF.7F2BAA40, VALID flag clear 
 
Not validating SHM_CPP 0005 at FFFFFFFF.7F2BAC80, VALID flag clear 
 
Not validating SHM_CPP 0006 at FFFFFFFF.7F2BAEC0, VALID flag clear
 
      

This example shows the default output for the VALIDATE SHM_CPP command.


VALIDATE TQEIDX

Validates all the data structures associated with timer queue entry index (TQEIDX) structures.

Format

VALIDATE TQEIDX


Parameters

None.

Qualifiers

None.

Description

TQEs are linked together with index blocks that point to TQEs or to another level of index block. VALIDATE TQEIDX checks that all the index blocks are correctly linked together.

Example


SDA> VALIDATE TQEIDX
Validating time index buckets... 
    ... o.k. 
Validating ID index buckets... 
    ... o.k. 
Validating 1st time... 
    ... o.k. 
Validating counts... 
    ... o.k.
      

This example shows the output from a successful VALIDATE TQEIDX command.


WAIT

Causes SDA to wait for the specified length of time.

Format

WAIT [wait-time]


Parameters

wait-time

The wait time is given as a delta time: [[hh:]mm:]ss[.t[h]]. If omitted, the default wait time is one second.

Qualifiers

None.

Description

The WAIT command can be used in command procedures such as scripts collecting performance data. See Chapter 8 for a sample procedure.

Example


SDA> WAIT 00:00:15
      

SDA waits 15 seconds before accepting the next command.


Chapter 5
SDA CLUE Extension

This chapter presents an overview of the SDA CLUE (Crash Log Utility Extractor) extension commands, how to display information using these commands, and how to use SDA CLUE with DOSD. This chapter also describes the SDA CLUE commands.

5.1 Overview of SDA CLUE Extensions

SDA CLUE (Crash Log Utility Extractor) commands automate the analysis of crash dumps and maintain a history of all fatal bugchecks on either a standalone or cluster system. You can use SDA CLUE commands in conjunction with SDA to collect and decode additional dump file information not readily accessible through standard SDA commands. SDA CLUE extension commands can summarize information provided by certain standard SDA commands and provide additional detail for some SDA commands. For example, SDA CLUE extension commands can quickly provide detailed extended QIO processor (XQP) summaries. You can also use SDA CLUE commands interactively on a running system to help identify performance problems.

You can use all CLUE commands when analyzing crash dumps; the only CLUE commands that are not allowed when analyzing a running system are CLUE CRASH, CLUE ERRLOG, CLUE HISTORY, and CLUE STACK.

When you reboot the system after a system failure, you automatically invoke SDA by default. To facilitate better crash dump analysis, SDA CLUE commands automatically capture and archive summary dump file information in a CLUE listing file.

A startup command procedure initiates commands that do the following:

The CLUE HISTORY command adds a one-line summary entry to a history file and saves the following output from SDA CLUE commands in the listing file:

The contents of this CLUE list file can help you analyze a system failure. If these files accumulate more space than the threshold allows (default is 5000 blocks), the oldest files are deleted until the threshold limit is reached. You can also customize this threshold using the CLUE$MAX_BLOCKS logical name.

For additional information on the contents of the CLUE listing file, see the reference section on CLUE HISTORY.

It is important to remember that CLUE$nodename_ddmmyy_hhmm.LIS contains only an overview of the crash dump and does not always contain enough information to determine the cause of the crash. The dump itself should always be saved using the procedures described in Section 2.2.2 and Section 2.2.3.

To inhibit the running of CLUE at system startup, define the logical CLUE$INHIBIT in the SYLOGICALS.COM file as /SYS TRUE.

5.2 Displaying Data with CLUE

To invoke a CLUE command, enter the command at the SDA prompt. For example:


SDA> CLUE CONFIG

5.3 Using CLUE with DOSD

DOSD (Dump Off System Disk) allows you to write the system dump file to a device other than the system disk. For SDA CLUE to be able to correctly find the dump file to be analyzed after a system crash, you need to perform the following steps:

  1. Modify the command procedure SYS$MANAGER:SYCONFIG.COM to add the system logical name CLUE$DOSD_DEVICE to point to the device where the dump file resides. You need to supply only the physical or logical device name without a file specification.
  2. Modify the command procedure SYS$MANAGER:SYCONFIG.COM to mount systemwide the device where the dump file resides. Otherwise, SDA CLUE cannot access and analyze the dump file.

In the following example, the dump file has been placed on device $3$DUA25, which has the label DMP$DEV. You need to add the following commands to SYS$MANAGER:SYCONFIG.COM:


$mount/system/noassist $3$dua25: dmp$dev dmp$dev
$define/system clue$dosd_device dmp$dev

5.4 SDA CLUE Extension Commands

This section describes the following SDA CLUE extension commands:

CLUE CALL_FRAME
CLUE CLEANUP
CLUE CONFIG
CLUE CRASH
CLUE ERRLOG
CLUE FRU
CLUE HISTORY
CLUE MCHK
CLUE MEMORY
CLUE PROCESS
CLUE REGISTER
CLUE SG
CLUE STACK
CLUE SYSTEM
CLUE VCC
CLUE XQP

CLUE CALL_FRAME

For Alpha only, displays key information, such as the PC of the caller, from the active call frames at time of the crash.

Format

CLUE CALL_FRAME [/CPU [cpu-id|ALL]
|/PROCESS [/ADDRESS=n|INDEX=n
|/IDENTIFICATION=n|process-name|ALL]]


Parameters

ALL

When used with /CPU, it requests information about all CPUs in the system. When used with /PROCESS, it requests information about all processes that exist in the system.

cpu-id

When used with /CPU, it gives the number of the CPU for which information is to be displayed. Use of the cpu-id parameter causes the CLUE CALL_FRAME command to perform an implicit SET CPU command, making the indicated CPU the current CPU for subsequent SDA commands.

process-name

When used with /PROCESS, it gives the name of the process for which information is to be displayed. Use of the process-name parameter, the /ADDRESS qualifier, the /INDEX qualifier, or the /IDENTIFICATION qualifier causes the CLUE CALL_FRAME command to perform an implicit SET PROCESS command, making the indicated process the current process for subsequent SDA commands. You can determine the names of the processes in the system by issuing a SHOW SUMMARY command.

The process-name can contain up to 15 letters and numerals, including the underscore (_) and dollar sign ($). If it contains any other characters, you must enclose the process-name in quotation marks (" ").


Qualifiers

/ADDRESS=n

Specifies the PCB address of the desired process when used with CLUE CALL_FRAME/PROCESS.

/CPU [cpu-id|ALL]

Indicates that the call frame for a CPU is required. Specify the CPU by its number or use ALL to indicate all CPUs.

/IDENTIFICATION=n

Specifies the identification of the desired process when used with CLUE CALL_FRAME/PROCESS.

/INDEX=n

Specifies the index of the desired process when used with CLUE CALL_FRAME/PROCESS.

/PROCESS [process-name|ALL]

Indicates that the call frame for a process is required. The process should be specified with either one of the qualifiers /ADDRESS, /IDENTIFICATION, or /INDEX, or by its name, or by using ALL to indicate all processes.

Description

The CLUE CALL_FRAME command displays call chain information for a process or a CPU. The process context calls work on both the running system and dump file; the CPU context calls only on dump files.

If neither /CPU nor /PROCESS is specified, the parameter (CPU-id or process-name) is ignored and the call frame for the SDA current process is displayed.


Examples

#1

SDA>CLUE CALL/PROCESS IPCACP
Call Chain:   Process index: 000B   Process name: IPCACP  PCB: 8136EF00
-----------------------------------------------------------------------
Procedure Frame  Procedure Entry                          Return Address
---------------  ----------------------------------       ---------------------------
7FFA1CA0  Null   800C8C90  SCH$WAIT_PROC_C                 
7FFA1D00  Stack  800D9250  SYS$HIBER_C                    0003045C  IPCACP+0003045C
7FFA1D50  Stack  00030050  IPCACP+00030050                800D11C8  EXE$CMKRNL_C+000D8
7FFA1E60  Null   800B6120  EXE$BLDPKTSWPR_C                
7FFA1E78  Null   800B6120  EXE$BLDPKTSWPR_C                
7FFA1EC0  Null   80248120  NSA$CHECK_PRIVILEGE_C                      
7FFA1F00  Null   80084640  EXE$CMODEXECX_C                 
7FFA1F70  Stack  800D10F0  EXE$CMKRNL_C                   80084CC8  EXE$CMODKRNL_C+00198
7B01FAB0  Stack  00030010  IPCACP+00030010                83EA3454  SYS$IMGSTA_C+00154
7B01FB10  Stack  83EA3300  SYS$IMGSTA_C                   83D99CC4  EXE$PROC_IMGACT_C+00384
7B01FBA0  Stack  83D99BA0  EXE$PROC_IMGACT_C+00260        83D99B9C  EXE$PROC_IMGACT_C+0025C
      

In this example, the CLUE CALL_FRAME command displays the call frame from the process IPCACP.

#2

SDA>CLUE CALL/CPU ALL
Call Chain:   Process index: 0000   Process name: NULL    PCB: 827377C0   (CPU 0)
---------------------------------------------------------------------------------
Procedure Frame  Procedure Entry                          Return Address
---------------  ----------------------------------       ---------------------------
8F629D28  Null   80205E00  SYS$SCS+05E00                   
8F629D68  Null   8020A850  SCS$REC_MSGREC_C                
8F629D98  Null   914A5340  SYS$PBDRIVER+07340              
8F629DB8  Null   914A4FD0  SYS$PBDRIVER+06FD0              
8F629DE0  Stack  914AACF0  SYS$PBDRIVER+0CCF0             914AE5CC  SYS$PBDRIVER+105CC
8F629E50  Stack  914AE418  SYS$PBDRIVER+10418             800503B0  EXE_STD$QUEUE_FORK_C+00350
8F629F88  Null   800E95F4  SCH$WAIT_ANY_MODE_C             
8F629FD0  Stack  800D0F80  SCH$IDLE_C                     800E92D0  SCH$INTERRUPT+00BB0
Call Chain:   Process index: 0000   Process name: NULL    PCB: 827377C0   (CPU 2)
---------------------------------------------------------------------------------
Procedure Frame  Procedure Entry                          Return Address
---------------  --------------------------------         ---------------------------
90FCBF88  Null   800E95F4  SCH$WAIT_ANY_MODE_C             
90FCBFC8  Null   800E95F4  SCH$WAIT_ANY_MODE_C            
90FCBFD0  Stack  800D0F80  SCH$IDLE_C                     800E92D0  SCH$INTERRUPT+00BB0
Call Chain:   Process index: 0000   Process name: NULL    PCB: 827377C0   (CPU 6)
---------------------------------------------------------------------------------
Procedure Frame  Procedure Entry                          Return Address
---------------  ------------------------------           ---------------------------
90FCBF88  Null   800E95FA  SCH$WAIT_ANY_MORE_c             
90FD9F88  Null   800E95F4  SCH$WAIT_ANY_MODE_C             
90FD9FD0  Stack  800D0F80  SCH$IDLE_C                     800E92D0  SCH$INTERRUPT+00BB0
      

In this example, CLUE/CPU ALL shows the call frame for all CPUs.


Previous Next Contents Index