blob: 3acaff1e7520e78068514874e2e55b33652b0c92 [file] [log] [blame]
memtester
Utility to test for faulty memory subsystem.
by Charles Cazabon <charlesc-memtester@pyropus.ca>
Copyright 1999 Simon Kirby.
Version 2 Copyright 1999 Charles Cazabon.
Version 3 not publicly released.
Version 4 rewrite:
Copyright 2004-2010 Charles Cazabon.
Licensed under the terms of the GNU General Public License version 2 (only).
See the file COPYING for details.
About memtester
memtester is a utility for testing the memory subsystem in a computer to
determine if it is faulty. The original source was by Simon Kirby
<sim@stormix.com>. I have by this time completely rewritten the
original source, and added many additional tests to help catch
borderline memory. I also rewrote the original tests (which catch
mainly memory bits which are stuck permanently high or low) so that
they run approximately an order of magnitude faster.
The version 4 rewrite was mainly to accomplish three things:
(1) the previous code was basically a hack, and was ugly.
(2) to make the code more portable. The previous version required some
hackery to compile on some systems.
(3) to make the code fully 64-bit aware. The previous version worked
on 64-bit systems, but did not fully stress the memory subsystems
on them -- this version should be better at stress-testing 64-bit
systems.
Building memtester
memtester is currently only distributed in source-code form. Building
it, however, is simple -- just type `make`. There's no `configure` script
or anything like that.
If you have a really strange system/toolchain, you might need to edit the
conf-cc or conf-ld files, but try to build it without changes first.
For example, if you want to cross-compile with `armgcc`, you would edit
conf-cc and conf-ld to use `armgcc` instead of `cc`. You can also change
the contents of these files for other reasons; for example, if your
compiler isn't in your PATH, you could change it to use `/path/to/cc` or
similar.
You can run the resulting binary from anywhere, but if you want to install
it and the manpage to /usr/local/, `make install` will do that. Edit
INSTALLPATH in the makefile if you prefer a different location.
I've successfully built and run memtester 4 on the following systems:
HP Tru64 Unix 4.0g (Alpha)
HP Tru64 Unix 5.1b (Alpha)
HP-UX 11i 11.11 (PA-RISC)
HP-UX 11i 11.23 (64-bit Itanium)
Debian GNU/Linux 3.0 (various)
other 32-bit Linux (RedHat, SuSE, Ubuntu, etc) (various)
RedHat Enterprise Linux/CentOS (64-bit AMD Opteron)
FreeBSD 4.9 (32-bit Intel)
FreeBSD 5.1 (64-bit Alpha)
NetBSD 1.6 (32-bit Intel)
Darwin (OS X) 7.5.0 (32-bit PowerPC)
OS X Leopard/Panther/whatever -- 32- or 64-bit, PPC or x86
It should, however, work on other Unix-like systems -- I simply don't
have access to systems running Solaris, AIX, etc. at the moment.
If you have trouble building memtester on your system, please report it
to me so I can fix this.
Using memtester
Usage is simple for the basic case. As root, run the resulting memtester
binary with the following commandline:
memtester <memory> [runs]
where <memory> is the amount of memory to test, in megabytes by default.
You can optionally include a suffix of B, K, M, or G (for bytes,
kilobytes, megabytes, and gigabytes respectively).
[runs] is an optional limit to the number of runs through all tests.
An optional "-p physaddr" argument available to cause memtester to test
memory starting at a specific physical memory address (by mmap'ing
/dev/mem starting at an offset of `physaddr`, which is given in hex).
Note: the memory specified will be overwritten during testing; you
therefore *cannot* specify a region belonging to the kernel or other
applications without causing the other process or entire system to
crash). If you use this option, it is up to you to ensure the specified
memory is safe to overwrite. That makes this option mostly of use for
testing memory-mapped I/O devices and similar. Thanks to Allon Stern
for the idea behind this feature. For example, if you want to test a
bank of RAM or device which is 64kbytes in size and starts at physical
address 0x0C0000, you would run memtester as follows:
memtester -p 0x0c0000 64k [runs]
memtester must run as user root so that it can lock its pages into
memory. If memtester fails to lock its pages, it will issue a warning and
continue regardless. Testing without the memory being locked is generally
very slow and not particularly accurate, as you'll end up testing the same
memory over and over as the system swaps the larger region.
Current Version
The current version of memtester should be available at
http://pyropus.ca/software/memtester/
Questions, comments, and feature requests should be
directed to me at <charlesc-memtester@pyropus.ca>. Read BUGS to report
bugs found in memtester.