Memtest86 and Memtest86+ are memory test software programs designed to test and stress test an x86 architecture computer’s random access memory (RAM) for errors. Each tries to verify that the RAM will accept and correctly retain arbitrary patterns of data written to it, that there are no errors where different bits of memory interact, and that there are no conflicts between memory addresses.
Memtest86 was developed by Chris Brady. After Memtest86 remained at v3.0 (2002 release) for two years, the Memtest86+ fork was created by Samuel Demeulemeester to add support for newer CPUs and chipsets. As of March 2016
the latest version of Memtest86+ is 5.01.
Memtest86 is written in C and x86 assembly. The source code is released under the GNU General Public License (GPL). The bootloading code was originally derived from Linux 1.2.1. Both versions now support current dual- and quad-core-CPUs and the corresponding chipsets. The latest release of Memtest86+ supports Intel-based Macintosh computers.
Starting from Memtest86 2.3 and Memtest86+ 1.60, the program can output a list of bad RAM regions in the format expected by the BadRAM patch for the Linux kernel; using this information, a Linux system can reliably use a RAM module even if it has a few bad bits.
Grub2 is able to supply this same information to an unpatched kernel, making the BadRAM patch unnecessary.
At some point the original memtest86 was sold to PassMark who continued to improve it through version four. Version five was rewritten and released under another license. Version six provides support for DDR4 RAM, UEFI secure boot, plus a new „row hammer test“ based on research from Yoongu Kim et al.
There are two versions (or development streams) of Memtest86. The original is simply known as Memtest86. The other, known as Memtest86+, is a development fork of the original Memtest86 (see history). Their on-screen appearance and functionality were almost identical up until the V4 releases. However the current V6 release of MemTest86 now makes use of the UEFI graphical user interface and the mouse.
These programs work with nearly all PC compatible computers from 80386 and 80486 based systems to the latest systems with 64-bit processors. Each new release adds support for newer processors and chipsets.
Memtest86 is designed to run as a stand-alone, self-contained program from a bootable floppy disk, CD-ROM, USB flash drive, or from a suitable bootmanager without an operating system present. This is because the program must directly control the hardware being tested and leave as much of the RAM space as possible for examination. It is also a quick and convenient way to start the program, and avoids running a complex operating system/application which could be endangered by hardware with memory problems (e.g. a hard disk file system can be corrupted by writing erroneous data from faulty RAM.)
Memtest86’s testing is very comprehensive so it can find otherwise hidden problems on machines that appear to work normally. With many chipsets, Memtest86 allows counting of failures even in error-correcting ECC DRAM (without special handling, error correcting memory circuits can mask problems with the underlying memory chips).
Some errors manifest intermittently or depend on the precise bits being stored, and do not occur on each pass; such errors may be revealed by running many passes over an extended period. Some tests use different data each pass to reveal data-dependent errors.
The programs were first made available on the Internet as small downloadable diskette image files, and included a small Windows program to make the floppy disk. Under Linux, the standard dd utility command was used to make the floppy disk. The floppy was then used to boot the computer whose RAM is to be tested.
Distribution now includes a USB image and a bootable CD ISO image which the user must burn to a writeable optical disc, such as a CD-R, before using. The easiest way for a beginner to access the programs may be as part of a bootable LiveCD. Popular Linux distributions such as Knoppix and Ubuntu offer an option, when the CD starts, to run Memtest instead of booting Linux. Memtest86 and Memtest86+ are included in rescue sets of utilities, such as the Ultimate Boot CD, which contains both.
Additionally, some high-end computer motherboards come with MemTest86 integrated into the BIOS. The user runs Memtest86 by pressing a certain key during boot.
Memtest86 writes a series of test patterns to most memory addresses, reads back the data written, and compares it for errors.
The default pass does 13 different tests, varying in access patterns and test data. A tenth test, bit fade, is selectable from the menu. It writes all memory with zeroes, then sleeps for 90 minutes before checking to see if bits have changed (perhaps because of refresh problems). This is repeated with all ones for a total time of at least three hours per pass.
Memory cache (such as cache on board the CPU chip) is not disabled. However, access patterns are designed to keep most cache organizations flushed so that memory accesses are actually seen to the RAM.
Many chipsets can report RAM speeds and timings via SPD (Serial Presence Detect) or EPP (Enhanced Performance Profiles), and some support changing the expected memory speed. In this case, if memory is overclocked and the expected memory speed is changed to match, Memtest86 can test whether memory performance is error-free with the faster settings.
Some hardware is able to report the „PAT status“ (PAT: enabled or PAT: disabled). This is a reference to Intel Performance acceleration technology; there may be BIOS settings which affect this aspect of memory timing.
This information, if available to the program, can be displayed via a menu option.
On some machines with the newer UEFI instead of BIOS, the Memtest86 Web site warns that PS2 keyboard input is no longer emulated, which can cause the keyboard to be completely or intermittently unresponsive. In these cases it is suggested to leave the tests to run automatically.
MemTest86+ V5.01 has a known problem with Test #7 (Block move).