Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

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.



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026