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. | |