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