MemTest86 Version History
On this page you can find a summary of all the changes that have been made in each version of MemTest86.
Version 5.0 release for UEFI 3/Dec/2013
- Completely re-written to work under UEFI.
- Native 64-bit support
- No longer requires the use of the PAE workaround to access more than 4GB of memory. (PAE = Physical Address Extension)
- Mouse support, where supported by the underlying UEFI system. On older systems a keyboard is still required.
- Improved USB keyboard support. The keyboard now works on systems that fail to emulate IO Port 64/60 correctly. So Mac USB keyboards are now supported.
- Improved multi-threading support, where supported by the underlying UEFI system.
- Dual boot with Memtest version 4 for supporting older systems without UEFI. So with a single USB or CD drive both UEFI systems and BIOS systems can be supported.
- Reporting of detailed RAM SPD information. Timings, clock speeds, vendor names and much more.
- Support to writing to the USB drive that Memtest is running from for logging and report generation. In all prior MemTest releases there was no disk support.
- Use of GPT. (GUID Partition Table)
- ECC RAM support (limited hardware support, ongoing development)
- Detection of ECC support in both the RAM and memory controller
- Polling for ECC errors
- Injection of ECC errors for test purposes. (limited hardware only)
- Option to disable CPU caching for all tests
- Support for reading parameters from a configuration file to allow settings to be predefined without the need for keyboard input. This can help with automation.
- Support for Secure Boot
- Speed improvements of between 10% and 30%+. Especially for tests, #5, #8 & #9. This is the result more moving to native 64bit code, removing the PAE paging hack, switching compilers and using faster random number generation algorithms.
- Addition of 2 new memory tests to take advantage of 64bit data and SIMD instructions.
Version 4.3.6 14/Nov/2013
- Fixed crash (particularly for AMD machines) that is seemingly resolved by adding CPU synchronication barriers before and after performing the memory speed test
- Fixed an error in setting the barrier structure's base address, preventing a possible crash or freeze of the system.
- Added a check to perform a spin lock only when more than 1 CPUs are detected
Version 4.3.5 24/Oct/2013
- Fixed potential error due to barrier structure located at fixed memory location
- Fixed block move test freeze on higher memory addresses
Version 4.3.4 2/Oct/2013
- Fixed incorrect progress calculation for test 0
- Fixed incorrect memory size due to bug with memory map when the e820 entry size member is 0
- Fixed incorrect number of CPU's found due to duplicate entries in the MADT
- Changed the method used to search for processors to searching the APIC MADT first, then search the MP spec table (as opposed to vice versa). The MP spec table has largely been deprecated.
Version 4.3.3 11/Sept/2013
- Fixed incorrect progress calculation for test 4
- Fixed potential false positives in parallel mode caused by overlapped/unaligned memory chunk allocations per CPU
- Fixed program freeze when selecting test 0 or 1 when running in non-parallel mode
Version 4.3.2 22/Aug/2013
- Memory bandwidth is now measured for one CPU (as opposed to being a total for all CPUs & Cores). This will lower the reported bandwidth for multi-core machines. But we think it makes more sense this way.
- Fixed crash when attempting to boot on older single core machines with hyperthreading. Only effects old machines, from around the early Pentium 4 era, that didn't have a MP (Multi-Processor) Spec table defined but did have both a MADT (Multiple APIC Description Table) defined and hyperthreading enabled.
- Restored the "Start only one CPU" boot option. This option should not be required in normal use, but might be useful for debugging purposes.
- Updates to the included help file
Version 4.3.1 8/Aug/2013
- Fixed bug with Test 6 (Block Move Test) not testing the end of a memory segment correctly. This bug could have resulted in false errors being reported in Test #6. The false errors were rare in normal use, but could be provoked more easily by running the tests out of order. e.g. running Test #1, then Test #6.
- Removed unnecessary boot options in menu
Version 4.3.0 10/Jul/2013
- Changed default CPU selection mode to round robin. Running all CPUs at once has been shown to cause false positives on a number of systems.
- Fixed a bug that could cause the program to go into a tight loop that could not be escaped when setting certain memory ranges to test.
- Fixed a bug displaying the memory location of individual errors. The values after the decimal point in the MB readout were incorrect.
- Fixed a bug in configuring upper and lower memory limits, previously lower limits equal or grater than 2gb would not work, as well as some other more obsucre configurations.
- Added a misc option to display the systems memory map.
- Fixed a bug that would cause the number of passes to not correctly reset after changing the selected tests.
- Added missing source code to some of the download packages.
- Fixed a bug in test 8 causing a single error to cascade into multiple errors.
- Fixed a bug causing the average error bits to be incorrect once the errors had maxed out at 65k
- Fixeda bug preventing test 10 to be selected as a single test to run.
- Fixed bug displaying individual test error counts.
- Fixed bug making overall errors 10x what they should be.
Version 4.2.0 18/Mar/2013
- Fixed issues with USB keyboards. The USB keyboard functionality is memory mapped into a portion of low memory on some (maybe many) machines, typing on a USB keyboard changes some values in RAM as the key presses are stored in memory as you type. This can cause the keyboard to become unresponsive during testing or input from the keyboard to generate errors in the tests.
- Fixed crash when configuring memory ranges. Changing the meory range during the first test, or changing the memory range multiple times during later tests could cause the current test number to become negative, triggering a crash.
- Fixed highest error address not reporting correctly on error.
- Fixed error counters overflowing and reseting to 0 after too many errors.
- Fixed max contiguous error reporting.
- Cleaned up some UI text.
- The Windows USB package now includes ImageUSB to make creating Memtest86 USB drives easier.
Version 4.1.0 Jan/2013
Added a new boot trace option that single steps through the testing process
and displays messages and data that is valuable in diagnosing problems with
test execution. A large number of trace points have been added in key portions
of the code (in particular SMP startup routines) to provide visibility of
obscure failures. This feature will allow non-technical users to provide
troubleshooting data for better test stability.
Added a new One Pass feature. This feature runs the complete test once and
then exits, but only if there were no errors. This provides a convenient
method for unattended testing. One Pass may be enabled via a boot option or
via an on-line command.
Images for CD, USB key and Floppy disks now use Syslinux for booting and
include a variety of standard options and two previous versions of MemTest86.
The new boot time options may be specified at the boot prompt.
A feature has been added to allow customization of the list of tests to be
run. The test list may be specified via a boot option or via an on-line
A feature has been added to restrict specific CPUs that are to be used for
testing. The maximum number of CPUs may be specified or a 32 bit CPU mask may
be specified. These are enabled with boot options.
A number of problem with use of on-line commands when testing with more
than one CPU have been fixed.
A selection of boot time parameters are were added. These options enable
boot tracing, the One Pass feature, limit the maximum number of CPUs to use,
specify a CPU mask to select CPUs to be used and setup serial console
Improved and extended CPU identification routines. Newer CPUID based
method is now used to determine cache sizes for Intel CPUs for better accuracy
Routines for calculating cache and memory speeds have been reworked for
better accuracy. An overflow problem has been fixed that resulted in no memory
speed being reported for CPUs with large L3 caches.
- Fixed some errors in the crash reporting routines.
- Misc minor fixes and code cleanup.
Version 4.0 28/Mar/2011
- Support for testing with multiple CPUs. All tests except for #11 (Bit Fade) have been multi-threaded. A maximum of 16 CPUs will be used for testing.
- CPU detection has been completely re-written to use the brand ID string rather than the cumbersome, difficult to maintain and often out of date CPUID family information.
All new processors will now be correctly identified without requiring code support.
- All code related to controller identification, PCI and DMI has been removed. This may be a controversial decision and was not made lightly. The following
are justifications for the decision:
Removing this code also had the unfortunate effect of removing reporting of
correctable ECC errors. The code to support ECC was hopelessly intertwined
the controller identification code. A fresh, streamlined implementation of
ECC reporting is planned for a future release.
- Controller identification has nothing to do with actual testing of memory, the core purpose of MemTest86.
This code needed to be updated with every new chipset. With the ever growing number of chip-sets it is not possible to keep up with the
changes. The result is that new chipsets were more often than not reported in-correctly. In the authors opinion incorrect information is
worse than no information.
- Probing for chipset information carries the risk of making the program crash.
- The amount of code involved with controller identification was quite large, making support more difficult.
- A surprising number of conditions existed that potentially cause problems when testing more than 4 GB of memory. Most if not all of these conditions have been identified and corrected.
- A number of cases were corrected where not all of memory was being tested. For most tests the last word of each test block was not tested. In addition an error in the paging code was fixed
that omitted from testing the last 256 bytes of each block above 2 GB.
- The information display has been simplified and a number of details that were not relevant to testing were removed.
- Memory speed measurement has been parallelized for more accurate reporting.
- This is a major re-write of the MemTest86 with a large number of minor
bug-fixes and substantial cleanup and re-organization of the code.
Version 3.5 3/Jan/2009
- Limited support for execution with multiple CPUs. CPUs are selected round-robin or sequential for each test.
- Support for detection of additional chipsets. (from MemTest86+ v2.11).
- Additions and corrections for CPU detection including reporting of L3 cache.
- Reworked information display for better readability and new information.
- Abbreviated iterations for first pass.
- Enhancements to memory sizing.
- Misc bug fixes.
Version 3.4 (2/Aug/2007)
- Added an error summary display.
- Added support for additional chipsets. (from MemTest86+ v1.70).
- Additions and corrections for CPU detection.
- Support for memory module information reporting.
- Misc bug fixes.
Version 3.3 (12/Jan/2007)
- Added support for additional chipsets. (from MemTest86+ v1.60)
- Changed Modulo 20 test (#8) to use a more effective random pattern rather than simple ones and zeros.
- Fixed a bug that prevented testing of low memory.
- Added an advanced menu option to display SPD info (only for selected chipsets).
- Updated CPU detection for new CPUs and corrected some bugs.
- Reworked online command text for better clarity.
- Added a fix to correct a Badram pattern bug.
Version 3.2 (11/Nov/2004)
- Added two new, highly effective tests that use random number patterns (tests 4 and 6)
- Reworked the online commands:
- Changed wording for better clarity
- Dropped Cache Mode menu
- Updated CPU detection for newer AMD, Intel and Cyrix CPUs
- Reworked test sequence:
- Dropped ineffective non cached tests (Numbers 7-11)
- Changed cache mode to "cached" for test 2
- Fixed a bug that did not allow some tests to be skipped
- Added bailout for Bit fade test
- Error reports are highlighted in red to provide a more vivid error indication
- Added support for a large number of additional chipsets (from MemTest86+ v1.30)
- Added an advanced setup feature that with new chipset allows memory timings to be altered from inside MemTest86. (from MemTest86+ v1.30)
- Misc bug-fixes and code cleanup.
Version 3.1a (11/Mar/2004)
- Added processor detection for newer AMD processors
- Added new "Bit Fade" extended test
- Fixed a compile time bug with gcc version 3.x.
- E7500 memory controller ECC support
- Added support for 16bit ECC syndromes
- Option to keep the serial port baud rate of the boot loader
Version 3.0 (22/May/2002) - Provided by Eric Biederman
- Testing of more than 2gb of memory is at last fixed (tested with 6Gb)
- The infrastructure is to poll ecc error reporting chipset registers, and the support has been done for some chipsets.
- Uses dynamic relocation information records to make itself PIC instead of requiring 2 copies of MemTest86 in the binary.
- The serial console code does not do redundant writes to the serial port. Very little slow down at 9600 baud.
- You can press ^l or just l to get a screen refresh, when you are connecting and unconnecting a serial cable.
- Net-booting is working again
- Linux-BIOS support (To get the memory size)
- Many bug-fixes and code cleanup
Version 2.9 (29/Feb/2002)
- The memory sizing code has been completely rewritten. By default MemTest86 gets a memory map from the BIOS that is now used to find available memory. A new online configuration option provides three choices for how memory will be sized, including the old "probe" method. The default mode generally will not test all of memory, but should be more stable. See the Memory Sizing section for details.
- Testing of more than 2gb of memory should now work. A number of bugs were found and corrected that prevented testing above 2gb. Testing with more than 2gb has been limited and there could be problems with a full 4gb of memory.
- Memory is divided into segments for testing. This allow for frequent progress updates and responsiveness to interactive commands. The memory segment size has been increased from 8 to 32mb. This should improve testing effectiveness but progress reports will be less frequent.
- Minor bug fixes
Version 2.8 (18/Oct/2001)
- Eric Biederman reworked the build process making it far simpler and also to produce a network boot-able ELF image.
- Re-wrote the memory and cache speed detection code. Previously the reported numbers were inaccurate for Intel CPU's and completely wrong for the Athlon and Duron.
- Disabled the serial console by default since it was slowing down testing.
- Added CPU detection for Pentium 4
- Minor bug fixes
Version 2.7 (12/Jul/2001)
- Expanded workaround for errors caused by BIOS USB keyboard support to include test #5.
- Re-worked L1 / L2 cache detection code to provide clearer reporting.
- Fixed an obvious bug in the computation of cache and memory speeds.
- Added a menu option to disable the serial console.
- Changed on-line menu to stay in the menu between option selections.
- Fixed bugs in the test restart and redraw code.
- Adjusted code size to fix compilation problems with RedHat 7.1.
- Misc updates to the documentation.
Version 2.6 (25/May/2001)
- Added workaround for errors caused by BIOS USB keyboard support.
- Fixed problems with reporting of 1 GHZ + processor speeds.
- Fixed Duron cache detection.
- Added screen buffer so that menus will work correctly from a serial console. (Code provided by Jani Averbach.)
- The MemTest86 image is now built in ELF format.
Version 2.5 (13/Dec/00)
- Enhanced CPU and cache detection to correctly identify Duron CPU and K6-III 1mb cache.
- Added code to report cache-able memory size.
- Added limited support for parity memory.
- Support was added to allow use of on-line commands from a serial port.
- Dropped option for changing refresh rates. This was not useful and did not work on newer motherboards.
- Improved fatal exception reporting to include a register and stack dump.
- The pass number is now displayed in the error report.
- Fixed a bug that crashed the test when selecting one of the extended tests.
- The error report format was reworked for better clarity and now includes a decimal address in megabytes.
- A new memory move test was added (from Robert Redelmeier's CPU-Burn)
- The test sequence and iterations were modified.
- Fixed scrolling problems with the BadRAM patterns.
- Updated and improved CPU and cache detection.
- Measurement and reporting of memory and cache performance was added.
- All of the test routines were rewritten in assembler to improve both error detection and speed.
- A progress meter was added to show pass and test completion.
- The screen layout was reworked to hopefully be more readable.
- Support for creating BadRAM patterns was added. (Code was provided by Rick van Rein.)
- An error summary option was added to the online commands.
- Added two new address tests.
- Added an on-line command for setting test address range.
- Optimized test code for faster execution (-O3, -funroll-loops and -fomit-frame-pointer).
- Added and elapsed time counter.
- Adjusted menu options for better consistency.
- Fixed a bug in the CPU detection that caused the test to hang or crash with some 486 and Cryrix CPU's
- Added CPU detection for Cyrix CPU's
- Extended and improved CPU detection for Intel and AMD CPU's
- Added a compile time option (BIOS_MEMSZ) for obtaining the last memory address from the BIOS. This should fix problems with memory sizing on certain motherboards. This option is not enabled by default. It may be enabled by default in a future release.
- Added new Modulo-20 test algorithm.
- Added a 32 bit shifting pattern to the moving inversions algorithm.
- Created test sections to specify algorithm, pattern, cache and refresh rate.
- Improved test progress indicators.
- Created pop-up menus for configuration.
- Added menu for test selection.
- Added CPU and cache identification.
- Added a "bail out" feature to quit the current test when it does not fit the test selection parameters.
- Re-arranged the screen layout and colors.
- Created local include files for I/O and serial interface definitions rather than using the sometimes incompatible system include files.
- Broke up the "C" source code into four separate source modules.
- Some additional changes were made to fix obscure memory sizing problems.
- The 4 bit wide data pattern was increased to 8 bits since 8 bit wide memory chips are becoming more common.
- A new test algorithm was added to improve detection of data pattern sensitive errors.
- Changes to the memory sizing code to avoid problems with some motherboards where MemTest86 would find more memory than actually exists.
- Added support for a console serial port. (Thanks to Doug Sisk)
- On-line commands are now available for configuring MemTest86 on the fly (see On-line Commands).
- Scrolling of memory errors is now provided. Previously, only one screen of error information was displayed.
- MemTest86 can now be booted from any disk via lilo.
- Detection of up to 4gb of memory has been fixed is now enabled by default. This capability was clearly broken in v1.2a and should work correctly now but has not been fully tested (4gb PC's are a bit rare).
- The maximum memory size supported by the motherboard is now being calculated correctly. In previous versions there were cases where not all of memory would be tested and the maximum memory size supported was incorrect.
- For some types of failures the good and bad values were reported to be same with an Xor value of 0. This has been fixed by retaining the data read from memory and not re-reading the bad data in the error reporting routine.
- APM (advanced power management) is now disabled by MemTest86. This keeps the screen from blanking while the test is running.
- Problems with enabling & disabling cache on some motherboards have been corrected.