# Memtest86

Memtest86 en Memtest86+ zijn opensourceprogramma's ontworpen om het werkgeheugen (RAM) van een x86-computer te controleren op fouten. De test controleert of het werkgeheugen de willekeurige patronen van gegevens die naar het geheugen worden geschreven correct zijn terug te lezen uit dit geheugen.

## Beschrijving

Er bestaan twee versies (of ontwikkelingsstromen) van Memtest86. Het origineel is bekend als Memtest86, de andere als Memtest86+. Memtest+ werd ontwikkeld om nieuwere chipsets te ondersteunen. Beide versies zien er hetzelfde uit.
Beide programma's werken met zo goed als alle computers, van oude 80386- (i386) en 80486- (i486) systemen, tot de nieuwste systemen met 64-bit processoren en nieuwere chipsets. Ze worden regelmatig bijgewerkt met nieuwe functionaliteiten.
Memtest86 kan gestart worden vanaf een opstartbare harde schijf, diskette, cd-rom of USB-stick met een geschikte bootloader zonder dat er een besturingssysteem aanwezig is. De reden hiervoor is dat het programma de hardware die getest wordt direct moet kunnen aanspreken en zo veel mogelijk RAM moet vrijhouden. Het is een snelle en makkelijk manier om het programma op te starten. Het voorkomt het draaien van een complex besturingssysteem of programma waardoor de geheugentest kan worden beïnvloed. Een defecte harde schijf kan bijvoorbeeld een vertekend beeld geven over de staat van het werkgeheugen.
De geheugentesten zijn zeer uitgebreid, waardoor het problemen vindt op systemen die normaal lijken te werken.
De tijd die het programma nodig heeft om alle tests eenmaal uit te voeren kan variëren van een paar minuten tot enkele uren. Dit hangt af de snelheid en de grootte van het geheugen en de snelheid van de processor (cpu). Bepaalde fouten in het geheugen zijn zo subtiel dat Memtest86 deze niet bij elke test opmerkt. Om er zeker van te zijn dat alle in het geheugen aanwezige fouten worden gedetecteerd is het van belang om de test meerdere keren achter elkaar uit te voeren. De test gebruikt namelijk bij elke test andere data. Ook worden fouten soms pas opgemerkt nadat het geheugen door het gebruik warm geworden is. Daarom zal het programma blijven draaien totdat de gebruiker het systeem opnieuw opstart.

## Distributie

Oorspronkelijk waren de programma's beschikbaar op het internet als kleine imagebestanden, bedoeld voor diskettes. Het bevatte ook een klein Windowsprogramma om een diskette opstartbaar te maken. Onder Linux en Unix kan het standaard dd-commando worden gebruikt om een opstartbare diskette aan te maken. De diskette kan vervolgens direct opgestart worden op de computer zonder een besturingssysteem.
Aangezien diskettes verouderd zijn en zelden nog gebruikt worden, bevatten de distributies nu images voor USB-sticks en cd-roms, waarmee opstartbare USB-sticks of cd-roms kunnen worden gebrand. Veel LiveCD's van Linuxdistributies (zoals Knoppix en Ubuntu) bevatten standaard een optie om bij het opstarten van de CD Memtest86 de laden, in plaats van het opstarten van Linux.
Daarnaast worden bepaalde moederborden standaard geleverd met MemTest86 geïntegreerd in het BIOS. De gebruiker kan bij het opstarten dan vaak een bepaalde toets op het toetsenbord aanslaan om MemTest86 op te starten. De gebruiker hoeft dan geen opstartschijf te gebruiken.

## Geschiedenis

Memtest86 is ontwikkeld door Chris Brady. Nadat versie 3.0 (uitgebracht in 2002) van Memtest86 na twee jaar nog niet opgevolgd was door een nieuwe versie, creëerde Samuel Demeulemeester Memtest86+ om nieuwe CPU's en chipsets te ondersteunen. Vanaf 2009 worden beide actief bijgehouden.
Memtest86 is geschreven in C en x86-assembly. De broncode wordt uitgebracht onder de GNU General Public License (GPL). De bootloading code kwam oorspronkelijk uit de Linux 1.2.1. Beide versies, Memtest86 en Memtest86+, ondersteunen momenteel dual- en quad-core-CPU's en de daarbij behorende chipsets. De laatste uitgebrachte versie van Memtest86+ ondersteunt Intel-gebaseerde Macintosh-computers.
Vanaf Memtest86 versie 2.3 en Memtest86+ versie 1.60 kan de Linuxkernel een lijst van slechte RAM-gebieden in het formaat van verwachte BadRAM (slechte RAM) patch gebruiken. Het Linuxsysteem kan dan veilig een RAM-module gebruiken als deze een paar slechte bits bevat. GRUB 2 is in staat om deze informatie te leveren aan een kernel die deze patch niet bevat. Hierdoor is deze BadRAM-patch bij het gebruik van GRUB niet nodig.

## Werking

Memtest86 schrijft series van testpatronen naar geheugenadressen, leest deze geschreven data terug en vergelijkt deze vervolgens op fouten.
De standaard procedure doet negen verschillende tests, variërend in toegangspatronen en testgegevens. Een tiende test, bit fade genoemd, kan worden geselecteerd vanuit het menu. Deze beschrijft het totale geheugen met nullen. Hierna pauzeert het programma voor 90 minuten, waarna het controleert of de bits veranderd zijn. Dit wordt herhaald met enen voor een totaal van drie uur per test.
Het cachegeheugen (zoals aanwezig op processorchips) wordt niet uitgeschakeld tijdens de tests. Toch worden toegangspatronen zodanig ontworpen, dat de meeste cachegeheugens geleegd worden. Dit gebeurt om ervoor te zorgen dat geheugentoegang gezien kan worden door het RAM.
Veel chipsets kunnen RAM-snelheden en timing rapporteren via Serial Presence Detect (SPD) of Enhanced Performance Profiles (EPP), en sommige kunnen zelfs de snelheid van het geheugen veranderen, als de verwachte geheugensnelheid hoger is dan standaard bedoeld is (overklokken). Memtest86 kan testen of het geheugen vrij is van fouten met de snellere instellingen.
Sommige hardware kan de "PAT status" (PAT: ingeschakeld of PAT: uitgeschakeld) rapporteren. Dit betreft een verwijzing naar Intel Performance acceleration technology; er kunnen BIOS-instellingen bestaan die dit aspect van geheugentiming beïnvloeden.
Deze informatie kan, indien ze toegankelijk is voor het programma, weergegeven worden via de menuopties.