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.
rumt_trymem
The core of RUMT is rumt_trymem
, which accepts the following
options:
-d device
: use device instead of
/dev/mem
.-i input seed
: check the memory areas according to
input seed.-i output seed
: prepare the memory areas according
to output seed.
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.
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.