HP OpenVMS System Analysis Tools Manual
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:
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:
To validate only the bad page list, use the keyword BAD with
the /PFN qualifier:
To validate only the free page list, use the keyword FREE with
the /PFN qualifier:
To validate the PFNs containing the PFN database, use the keyword
PFNDB with the /PFN qualifier:
To validate only the untested page list, use the keyword
UNTESTED with the /PFN qualifier:
To validate multiple lists, you can combine keywords for use with the
/PFN qualifier:
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 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:
- Invoke SDA
- Issue an SDA CLUE HISTORY command
- Create a listing file called CLUE$nodename_ddmmyy_hhmm.LIS
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:
- Crash dump summary information
- System configuration
- Stack decoder
- Page and swap files
- Memory management statistics
- Process DCL recall buffer
- Active XQP processes
- XQP cache header
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:
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:
- 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.
- 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.
|