10.0;VMTEST (Virtual Memory Test), revision 10.0, 87/01/22
VMTEST -- Perform Virtual Memory Test
usage: vmtest [-PASs count] [-PAGes count] [-TIMe|-Mean] [-DELete] [-ERRlim count]
[-ABORT_on_error] [-DEV {W | F | S | N | MT | CT}] [-DADDR daddr]
[-FMT] [-TAC <n>] [-TOUch] [-RO] [-EVEN|-ODD]
[-NET <n>] [-NODE <n>] [-SOCK <s>] [-TRAP] [-BS <pathname>]
[[-DATA <value>] | -MARCH0 | -MARCH1 | -SEQB | -RANDOM] [-MASK value]
[-REtry <n>] [-STOPFile <pathname>] [-Verbose]
VMTEST (Virtual Memory Test) is a general-purpose diagnostic tool
that is used to test the hardware and software that supports virtual
memory on Domain systems. In particular, it can be used to check
-the functioning of the MMU and related OS
software (correct processing of page faults, paging in
and installation in the mmu of correct pages);
-disk and/or network hardware and software (reading and
writing correct sectors, undetected hardware errors,
disk or network performance);
-bus behavior (non-interference of multiple devices).
VMTEST Algorithm
================
VMTEST operates on a backing store file -- vmtest_bs --
in the working directory (or the pathname given with the
-bs option is used). The size of the file, which is
created if necessary, is determined by the -pag command
line option. (Each page is 1024 bytes.) VMTEST maps
vmtest_bs into its address space and performs the following
operations for the requested number of passes.
1. The file is filled by longword writes using address as
data, where address is the offset from the start of the
file. For example, the first page of the file will
contain 00000000, 000000004, ..., 000003FC. Page F of
the file will contain 00003C00, 00003C04, ..., 00003FFC,
2. When the requested number of pages has been filled,
VMTEST starts at the beginning of the file and verifies
the correctness of the data. If a mismatch occurs, an
error message is printed of the form
error: page pppp lword wwww sb xxxxxxxx is yyyyyyyy (va=aaaaaaaa)
'pppp' identifies the page of the file (0 - #pages-1) in
which the error occurred. 'wwww' is the longword within
the page (0-FF). 'xxxxxxxx' and 'yyyyyyyy' are what the
data should have been and what is was. 'aaaaaaaa' is the
virtual address of the longword in error.
3. At the end of the pass, VMTEST prints the cumulative error
count and starts the next pass. For even-numbered passes,
the data used is complemented, so the first page will appear
as 00000000, FFFFFFFC, FFFFFFF8, ...; page F will appear as
FFFFC400, FFFFC3FC, ...
4. VMTEST returns TRUE if no errors were found, FALSE if errors
were found.
Basic VMTEST Options
====================
-bs <pathname>
Used to name the backing store file to be used.
If not specified, "./vmtest_bs" is used.
-pag[es] <decimal_number>
Used to specify the size of the file VMTEST is to
operate on. The number of pages should be an integer
between 1 and 16384. In general, the number of pages
specified should be enough to cause paging activity
to occur, e.g., at least the number of pages of physical
memory on the machine.
-pas[s] <decimal_number>
Used to specify the number of passes VMTEST makes over
the backing store file. Each pass consists of a write
phase and a read phase as described above.
-stopf[ile] <pathname>
Exit VMTEST when "pathname" exists.
-tim[e]
Causes VMTEST to print the CPU and elapsed times used for
each pass.
-v[erbose]
Print a progress message every 1024 pages read or written, and on the
last page read or written.
-mean
Causes VMTEST to print the total CPU and elapsed times at
the end of the last pass.
-tac <decimal_number>
Set touch-ahead count to the specified value -- a number between
1 and 32. This overrides the default paging behavior of Aegis,
which, when a page fault occurs, will read into memory not only
the faulted virtual page, but the next 3 pages also. (This corresponds
to a touch-ahead count of 4.) "-tac 1" will cause aegis to read in
only the faulting page; "-tac 32" will cause up to 32 page reads
per fault. (Note: normally, the touch-ahead count is varied to
investigate disk or network performance under various conditions.
It may also be required if you want more precise control over paging
activity.)
-del[ete]
Instructs vmtest to delete vmtest_bs at the end of the last pass.
-h[elp], -us[age]
Prints a complete list of VMTEST options.
Error Reporting Options
=======================
-err[lim] <decimal_number>
Limits the number of consecutive errors displayed by VMTEST
for a given page. For example, if the error limit is set to
3, after encountering 3 consecutive errors on a page, VMTEST
will print "etc..." and turn off error reporting until the
next page is started. (This option is useful if entire pages
are uniformly wrong, e.g., an incorrect page was read from
the disk.)
-abort
This will cause VMTEST to exit immediately as soon as any
error is reported. This should be used if you want to manually
examine a page on the backing store before the page has been
modified again and purified back to the disk.
-trap
As soon as any error is encountered, VMTEST will execute a
TRAP F instruction, thereby halting all further system activity
(except any DMA currently in progress). At the trap, d0-d4 contain
information on the error as follows:
D0 - page number
D1 - longword number
D2 - what the data should have been
D3 - what the data is
D4 - virtual address of the longword in error
To continue, type G, G *+2.
Data Pattern & Access Controls
==============================
-data <hex_value>
<hex_value> replaces address-as-data. If no mask is specified
(see next option), VMTEST uses the constant value specified
as the test data.
-mask <hex_value>
This option, which requires -data to be specified, allows a
combination of address and data to be used as test data.
Given a data value of 'data' and as mask of 'mask' the following
operations are performed:
if "-mask" not specified then mask := FFFFFFFF; { default mask }
data := data & mask; { data used is masked }
addr_mask := mask xor FFFFFFFF; { mask for address }
test_data := address & addr_mask + data;
As in the default case, address is incremented/decremented
by 4 for each longword.
-seqb
Generate byte sequential data. This switch may not be used with the
-data switch.
-march0
Generate marching 0's data pattern. This switch may not be used with the
-data switch.
-march1
Generate marching 1's data pattern. This switch may not be used with the
-data switch.
-random
Generate a random data pattern. This switch may not be used with the
-data switch.
-odd, -even
Instruct VMTEST to perform only odd (positive data) or
even (negative data) passes.
-ro
This puts VMTEST into read-only mode. The first half of
each pass (in which the test data is written to the backing
store file) is omitted. To use this option, the backing store
must first be initialized by runing 1 or 2 passes of VMTEST.
In addition, to avoid continual errors on every other pass,
-odd or -even must be specified.
-touch
VMTEST will perform no data tests at all, but will just
reference each page in the backing store file (thus paging
it into memory).
-retry <n>
Retry network and disk errors <n> times.
Running VMTEST To Other Devices
===============================
-dev {W | F | S | N | MT | CT}
The -dev option allows you to use VMTEST to generate I/O to
a non-file system device or to a disk that has not been INVOLed.
Several VMTESTs can be run to different devices to generate
concurrent device and bus activity. -dev takes a controller
specification as follows:
W - winchester
F - floppy
S - storage module
N - network
MT - 1/2" magtape
CT - cartridge tape
In the case of disks, the disk must be an assignable drive
(i.e., not the boot device). If -dev is specified, the behavior
of VMTEST is modified as follows.
Disk
A single page of the backing store is used (the first page)
The page is filled with test data and written out to the
specified disk. The page is then filled the data that would
normally be put in the second page and is written to the
next higher disk address. After the requested number of pages
have been written, they are read and checked one by one.
The starting disk address defaults to the start of the
diagnostic cylinder or can be specified with the -daddr option.
Note that since only a single page is being used to generate
and check the test patterns, very little paging activity
will be generated by VMTEST.
Magtape
Operation is similar to that of the disk, except that
pages are written and read in blocks of 8 pages.
Network
Operation is similar to that of the disk, except that
each page is filled, sent, received, and checked in
order (i.e., there aren't separate write and read phases).
If -socket is not specified, pages are sent to the paging
server on the specified node. The status of any transmit
that was retried because of network error is displayed.
Transmit or receive failures or retried the specified
number of retries are performed (default = none). If the
transmit or receive fails completely, then an error is
declared. If -abort was specified, then VMTEST exits
with a status of FALSE; else, VMTEST goes on to the next
page.
If you want the data checked on both ends of the link,
specify -sock 3 and run netman in a window on the remote
node. netman will then report on any data errors it sees
from pages received from vmtest.
Cartridge tape
Operation is similar to that of the magtape, except that
pages are written and read in batches of 128 blocks
(64 pages).
-daddr <hex_value>
If a disk device is being used, -daddr can be used to
specify the starting disk address for the "backing store
file". If -daddr is not specified, the diagnostic cylinder
will be used. (If the diagnostic cylinder is used, the number
of pages is limited to the number of sectors on the diagnostic
cylinder.)
-fmt
Tells VMTEST that the area to be used on an assigned disk
needs to be formatted.
-net <hex_value>
If "-dev n" was specified, then this option specifies the network ID
of the partner node. If n = 0 or the switch is omitted, then the local
network is used.
-node <hex_value>
If "-dev n" was specified, this option is required to identify
the ID of the node that is to echo the messages.
-sock <decimal_value>
If -dev n was specified, this identifies the socket to which
the echoing agent is listening. If n = 0, or -sock is not specified,
then the remote paging server is employed.
CHKPAG
======
CHKPAG is a utility that can be used to verify the contents of
a page in VMTEST's backing store file. For example, VMTEST
reports an error, but you don't know if error was generated
by a write to disk or the read. To determine this, first ensure
that the page in question isn't in main memory (run something
that flushes memory, like a vmtest to another backing store
file, or reboot the system). Then type
chkpag [<pathname>] -p <hex_page_number> [-data... -mask...]
where the page number is the one reported by VMTEST.
<pathname> is the pathname of the backing store file. If
omitted, ./vmtest_bs is used.
CHKPAG will map the page in question and perform the same
verification as used by VMTEST.