Memtest86+
# Memtest86+

Memtest86+ es un programa informático para ordenadores compatibles con x86. Su finalidad es pasar una prueba de stress a la memoria RAM del ordenador para encontrar errores en los módulos propiamente dichos o en los datapaths (chipset, controladoras de memoria).

## Descripción

Memtest86+ está diseñado para arrancar desde un disquete, CD-ROM, o memoria USB sin que sea necesario que el ordenador tenga instalado un sistema operativo. Las pruebas que aplica son lo suficientemente severas como para encontrar problemas en ordenadores que aparentemente funcionan bien. Con soporte para múltiples chipsets, Memtest86+ permite encontrar errores incluso en memoria con sistemas de corrección de errores.

Además, desde la versión 1.60 puede generar una lista de regiones de RAM defectuosa en el formato esperado por el patch BadRAM para el núcleo Linux; usando esta información, un sistema Linux puede usar con seguridad un módulo de RAM incluso aunque tenga algunos bits defectuosos.

Diseñado por Samuel Demeulemeester, Memtest86+ deriva de Memtest86 cuyo desarrollo se había estancado, aunque después de varios años de falta de nuevas versiones ambos están otra vez activos. Escrito en C y ensamblador, el código fuente está liberado bajo la GNU GPL. La versión actual de Memtest86 es la 4.0a liberada el 20 de agosto de 2011, y la de Memtest86+ es la 6.20, liberada el 7 de mayo de 2023. Ambas versiones soportan los procesadores actuales dual y quad core y sus correspondientes chipsets.

## Cómo funciona

Memtest86+ escribe una serie de patrones de prueba a cada dirección de memoria, y luego lee los datos comparándolos a la búsqueda de errores.

La información acerca del chipset se puede usar para mejorar estas pruebas, especialmente en sistemas que utilizan overclock. Muchos chipsets pueden informar acerca de la velocidad de la RAM, y alguno permite el cambio de esta velocidad dinámicamente; de esta manera, con Memtest86+ se puede comprobar hasta qué punto la memoria continúa sin errores si subimos la velocidad.

## Tests

* Test 0: [Address test, walking ones, no cache]. Test de todos los bits direccionables en todos los bancos de memoria usando un patrón de acceso "walking ones".
* Test 1: [Address test, own address]. Cada dirección es escrita con el valor de su propia dirección y luego es probada para detectar diferencias. Este test es complementario y más estricto que el Test 0 y debería detectar todos los errores de direccionamiento.
* Test 2: [Moving inversions, ones&zeros]. Este test utiliza el algoritmo Moving inversions con patrones de unos y ceros. Es un test rápido que solamente da errores en subsistemas de memoria muy dañados.
* Test 3: [Moving inversions, 8 bit pattern]. Utiliza el algoritmo Moving Inversions diseñado para detectar fallos producidos por interferencia con las células de memoria adyacentes.
* Test 4: [Moving inversions, random pattern]. Se utiliza el mismo algoritmo del paso 3 pero el patrón es un número aleatorio (más bien pseudoaleatorio) y su complemento. Es un test muy efectivo para detectar errores de datos, utilizando 60 patrones aleatorios cambiando en cada pasada del test. Por ello múltiples pasadas aumentan la eficacia.
* Test 5: [Block move, 64 moves]. Este test prueba la memoria utilizando la instrucción [movsl] y está basado en un antiguo test llamado burnBX de Robert Redelmeier. Experimentalmente es de los test que revelan errores más sutiles.
* Test 6: [Moving inversions, 32 bit pat]. Es un test bastante lento pero muy efectivo para detectar errores de datos, ya que hace 32 pasadas para probar todos los patrones.
* Test 7: [Random number sequence]. Se escribe una serie de números aleatorios en memoria. Es comprobado y complementado y vuelto a comprobar.
* Test 8: [Módulo 20, ones&zeros]. Utiliza el algoritmo Módulo-X, diseñado para evitar interferencia del subsistema de caché que podrían enmascarar algunos errores en tests anteriores. Utiliza patrones de unos y ceros.
* Test 9: [Bit fade test, 90 min, 2 patterns]. Se inicializa toda la RAM con un patrón y se deja inactiva 90 minutos, entonces se examina en busca de alguna variación. Se pasa dos veces, una con ceros y otra con unos. Dura 3 horas y no forma parte del test estándar, hay que seleccionarlo a mano en el menú.
