Running Unix Memory Test

What is RUMT?

The goal of RUMT is to check the memory of a computer over a long period of time and almost-real load conditions without having to interrupt the services.

RUMT exploits the possibility of some Unix kernels to selectivly disable some memory areas while still accessing them through the /dev/mem device. The principle of RUMT is to write pseudo-random data in these disabled memory areas, and later check them. This principle and the original code for the deterministic pseudo-random generator are from David Madore.

How to use RUMT?

rumt_trymem

The core of RUMT is rumt_trymem, which accepts the following options:

The remaining arguments are memory areas, with one of the syntax start+length or start-end (where end is excluded). Values can be suffixed with k, M or p for kilobytes, megabytes or pages (usually 4kB). All values must be multiples of the page size.

The normal way to use RUMT is to call rumt_trymem -o some_seed on the disabled memory areas, wait some time and then call rumt_trymem -i with the same seed on the same memory areas. If nothing has changed, rumt_trymem will be silent. If something has changed, the detected bad bits will be printed as 0xAAAAAAAAAAAA.b± with AAAAAAAAAAAA the address, b the bit, and ± the direction (+ for a bit that should be 0 and is 1, - else).

Beware! Calling rumt_trymem -o on memory areas used by the system will likely cause crashes or data loss. Triple check your arguments.

rumt_daemon

rumt_daemon is a shell script that calls rumt_trymem, keeps track of the seed, and keeps a nice table of detected bad bits. It can be configured using the rumt.conf auxiliary script. See the comments in this script for options.

rumt_fusion

This is a perl script used by rumt_daemon to beautify the list of bad bits.

highmem.o

On Linux, for those who have more than 960MB of memory and so enabled the CONFIG_HIGHMEM option, /dev/mem gives access to only the first 768MB. This kernel module creates /dev/misc/highmem which does not have this limit.

Beware. This code has been tested on my box without crashing it. It has also been posted on LKML, but got no answer. I do not know if it is compatible with the CONFIG_HIGHMEM64G option. Use at your own risks.

print_holes_linux

This perl script will parse the boot messages of a Linux kernel to guess its command lines options and disabled memory areas. It prints one line with the mem= arguments to the kernel, and one line with the disabled areas in a format suitable for rumt_trymem.

You should double-check the former with your Grub/LILO/whatever configuration and your /proc/cmdline before using the later.

What is the status of RUMT?

RUMT works for me at home with a 2.4.20 Linux kernel; rumt_trymem and the shell scripts should be quite portable. There is no installation procedure: is started from its compilation directory; anyway, RUMT is not a program that one wants to use now and then.

Since I do not have bogus memory any more, I do not intend to keep working on it. I give it to the comunity as is, and whoever wants to enhance it is welcome.

Author

Nicolas George