Memtest86+는 x86 및 x86-64 아키텍처 컴퓨터를 위한 무료 오픈 소스 독립형 메모리 테스터입니다. BIOS 메모리 테스트에서 제공하는 것보다 훨씬 더 철저한 메모리 검사를 제공합니다.
또한 운영 체제에서 사용하는 메모리에 의해 제한되지 않고 UEFI 라이브러리와 같은 기본 소프트웨어에 의존하지 않고 컴퓨터의 거의 모든 메모리에 액세스할 수 있습니다.
Memtest86+는 PC BIOS(레거시 또는 UEFI)에서 직접 로드하거나 Linux 16비트, 32비트, 64비트 또는 EFI 핸드오버 부팅 프로토콜을 지원하는 중간 부트로더를 통해 로드하고 실행할 수 있습니다. Pentium 클래스 이상의 32비트 또는 64비트 CPU에서 작동해야 합니다.
바이너리 릴리스(안정적 및 야간 개발 빌드 모두)는 memtest.org에서 사용할 수 있습니다.
Memtest86+ v6.00은 MemTest-86의 포크였던 이전 Memtest86+ v5를 포크하고 다시 작성한 PCMemTest를 기반으로 했습니다. PCMemTest 재작성의 목적은 다음과 같습니다.
PCMemTest를 생성하는 과정에서 시스템 메모리 테스트에 꼭 필요하지 않은 Memtest86+ v5의 여러 기능이 삭제되었습니다. 특히 캐시와 메인 메모리 속도를 측정하거나 DRAM 유형을 식별하고 보고하려는 시도는 이루어지지 않았습니다. 이러한 기능은 Memtest86+ v6.0에 다시 추가되고 확장되어 모든 기능을 갖춘 통합 릴리스를 만들었습니다.
Memtest86+는 GNU General Public License 버전 2(GPLv2)의 조건에 따라 릴리스됩니다. GPL 조항 외에는 개인용 또는 상업용 사용에 대한 제한이 없습니다. 자세한 내용은 LICENSE 파일을 참조하세요.
빌드는 Linux 시스템에서만 테스트되지만 GNU 도구 체인 및 ELF 파일 형식을 사용하는 모든 시스템에서 가능해야 합니다. 필요한 도구는 다음과 같습니다.
32비트 이미지를 빌드하려면 디렉터리를 build32
디렉터리로 변경하고 make
입력하세요. 결과는 레거시 BIOS(플로피 모드) 또는 Linux 16비트 부팅 프로토콜을 사용하는 중간 부트로더로 직접 부팅할 수 있는 memtest.bin
바이너리 이미지 파일과 직접 부팅할 수 있는 memtest.efi
바이너리 이미지 파일입니다. 32비트 UEFI BIOS를 통해. 두 이미지 모두 Linux 32비트 또는 32비트 EFI 핸드오버 부팅 프로토콜을 사용하는 중간 부트로더로 부팅될 수 있습니다.
64비트 이미지를 빌드하려면 디렉터리를 build64
디렉터리로 변경하고 make
입력하세요. 결과는 레거시 BIOS(플로피 모드) 또는 Linux 16비트 부팅 프로토콜을 사용하는 중간 부트로더로 직접 부팅할 수 있는 memtest.bin
바이너리 이미지 파일과 직접 부팅할 수 있는 memtest.efi
바이너리 이미지 파일입니다. 64비트 UEFI BIOS를 통해. 두 이미지 모두 Linux 32비트, 64비트 또는 64비트 EFI 핸드오버 부팅 프로토콜을 사용하는 중간 부트로더로 부팅될 수 있습니다.
두 경우 모두 부팅 가능한 CD, DVD 또는 USB 플래시 드라이브를 만드는 데 사용할 수 있는 ISO 이미지를 만들려면 make iso
입력하세요. 결과는 memtest.iso
ISO 이미지 파일입니다. 그런 다음 빈 CD나 DVD 또는 USB 플래시 드라이브에 직접 쓸 수 있으며 레거시 또는 UEFI PC BIOS로 직접 부팅할 수 있습니다.
USB 플래시 드라이브에 쓸 때 ISO 이미지는 dd
명령을 사용하거나 동일한 기능을 제공하는 유틸리티를 사용하여 원시 장치에 직접 기록('덤프')되어야 합니다.
중간 부트로더를 사용할 때 memtest.bin
파일이나 memtest.efi
파일은 부트로더가 액세스할 수 있는 디스크 파티션에 저장되어야 하며 부트로더 구성은 마치 Linux 커널인 것처럼 해당 파일에서 부팅하도록 업데이트되어야 합니다. 초기 RAM 디스크가 없습니다. 아래 설명과 같이 여러 가지 부팅 명령줄 옵션이 인식됩니다. 16비트 부팅 프로토콜을 사용하는 경우 Memtest86+는 텍스트 모드(640x400)의 디스플레이를 사용합니다. 32비트 또는 64비트 부팅 프로토콜을 사용하는 경우 Memtest86+는 부트로더가 전달한 boot_params
구조체에 지정된 대로 텍스트 모드 또는 그래픽 모드의 디스플레이를 사용합니다. 그래픽 모드인 경우 제공된 프레임 버퍼는 최소 640x400픽셀이어야 합니다. 더 크면 디스플레이가 중앙에 위치합니다. 시스템이 UEFI 모드에서 부팅된 경우 그래픽 모드를 사용해야 합니다.
테스트 목적으로 GRUB를 중간 부트로더로 사용하는 ISO 이미지를 빌드하는 옵션도 있습니다. 자세한 내용은 build32
또는 build64
디렉터리의 Makefile
참조하세요. ISO 이미지는 레거시 및 UEFI 부팅이 가능하므로 빌드 시스템에 설치된 레거시 및 EFI 부팅용 GRUB 모듈이 필요합니다(예: Debian의 경우 필수 GRUB 모듈은 grub-pc-bin
, grub-efi-ia32-bin
패키지에 있습니다) grub-efi-ia32-bin
및 grub-efi-amd64-bin
). 시스템의 이름과 일치하도록 Makefile의 일부 경로와 파일 이름을 조정해야 할 수도 있습니다.
grub
디렉토리에 포함된 GRUB 구성 파일은 테스트 ISO에서 사용하기 위한 것이지만 GRUB에서 Memtest86+를 부팅하는 방법의 예로도 사용됩니다.
중간 부트로더는 부팅 명령줄을 Memtest86+에 전달할 수 있습니다. 명령줄에는 공백으로 구분된 하나 이상의 옵션이 포함될 수 있습니다. 각 옵션은 옵션 이름, 선택적으로 =
기호, 쉼표로 구분된 하나 이상의 매개변수로 구성됩니다. 다음 옵션이 인식됩니다.
0x
접두사 사용(예: 0xFEDC9000) Memtest86+는 레거시 키보드 인터페이스(I/O 포트 0x60 및 0x64 사용)와 USB 키보드(자체 USB 장치 드라이버 사용)를 모두 지원합니다. 둘 중 하나 또는 둘 다를 부팅 명령줄을 통해 선택할 수 있습니다. 명령줄에 지정하지 않은 경우 기본값은 시스템이 UEFI 모드에서 부팅된 경우 둘 다 사용하고, 그렇지 않으면 레거시 인터페이스만 사용하는 것입니다.
이전 BIOS는 일반적으로 USB 레거시 키보드 에뮬레이션을 지원하므로 USB 키보드가 포트 0x60 및 0x64에 연결된 레거시 키보드처럼 작동합니다. 이는 종종 BIOS 설정 메뉴에서 활성화하거나 비활성화할 수 있습니다. Memtest86+의 USB 장치 드라이버가 활성화된 경우 이를 무시하고 USB 키보드에 직접 액세스합니다. 단점은 USB 컨트롤러와 장치 드라이버가 개인 용도로 일부 메모리를 예약해야 한다는 것입니다. 즉, 메모리 테스트에서 메모리를 다룰 수 없다는 의미입니다. 따라서 테스트 적용 범위를 최대화하려면 지원되는 경우 USB 레거시 키보드 에뮬레이션을 활성화하고 UEFI 모드로 부팅하는 경우 부팅 명령줄에 keyboard=legacy
추가하세요.
참고 : 일부 UEFI BIOS는 BIOS 설정에서 CSM(호환성 시스템 모듈)을 활성화한 경우 USB 레거시 키보드 에뮬레이션만 지원합니다. 다른 것들은 실제로 레거시 모드로 부팅할 때만 지원합니다.
많은 USB 장치는 USB 사양을 완전히 준수하지 않습니다. USB 키보드 프로브가 멈추거나 키보드를 감지하지 못하는 경우 "usbinit" 부팅 옵션이 제공하는 다양한 해결 방법을 시도해 보십시오.
참고 : 현재 Memtest86+ USB 드라이버에서는 핫 플러그 기능을 지원하지 않습니다. 이를 사용할 때는 Memtest86+를 실행하기 전에 USB 키보드를 연결해야 하며 테스트 내내 연결된 상태를 유지해야 합니다.
일부 2-in-1 시스템은 기본적으로 세로 모드 디스플레이이지만 키보드에 부착할 때 측면에 장착되는 LCD 패널을 사용합니다. 그래픽 모드에서 디스플레이를 사용할 때 Memtest86+는 일치하도록 디스플레이를 회전할 수 있습니다. LCD 패널의 방향에 따라 부팅 명령줄에 "screen.rhs-up" 또는 "screen.lhs-up" 옵션을 추가합니다. 디스플레이를 텍스트 모드로 사용하는 경우 BIOS가 이를 자동으로 처리할 것으로 예상됩니다.
레거시 모드로 부팅하면 Memtest86+는 BIOS 또는 중간 부트로더에 의해 설정된 화면 해상도를 사용합니다. UEFI 모드로 부팅하면 Memtest86+는 일반적으로 640x400 픽셀 디스플레이를 포함하는 사용 가능한 가장 작은 화면 해상도를 선택합니다. 일부 BIOS는 사용 가능한 디스플레이 모드에 대해 잘못된 정보를 반환하므로 부팅 명령줄에 "screen.mode=" 옵션을 추가하여 이를 무시할 수 있습니다.
디스플레이 회전을 사용할 때 지정된 화면 해상도는 회전되지 않은 디스플레이에 대한 것입니다.
부팅되면 Memtest86+는 디스플레이를 초기화한 다음 사용자가 작업을 구성할 수 있도록 몇 초 동안 일시 중지합니다. 아무 키도 누르지 않으면 단일 CPU 코어를 사용하여 모든 테스트 실행이 자동으로 시작되며 사용자가 시스템을 재부팅하거나 중지할 때까지 무기한 계속됩니다.
시작 시 및 테스트 실행 시 Memtest86+는 다음 키에 응답합니다.
스크롤 잠금이 활성화되고 스크롤 영역이 가득 차면 테스트가 중단됩니다.
구성 메뉴를 통해 사용자는 다음을 수행할 수 있습니다.
모든 경우에 숫자 키는 기능 키(1 = F1, 2 = F2, ... 0 = F10) 대신 사용할 수 있습니다.
오류 보고 모드는 현재 테스트 시퀀스를 중단하지 않고 언제든지 변경할 수 있습니다. 오류 통계는 현재 오류 보고 모드와 관계없이 수집됩니다. 따라서 오류 요약 모드로 전환하면 현재 테스트 시퀀스가 시작된 이후 누적된 통계가 표시됩니다. BadRAM 패턴은 BadRAM 모드에서만 누적됩니다. Linux memmap 영역은 memmap 모드에 있을 때만 누적됩니다. 잘못된 페이지 번호는 잘못된 페이지 모드에서만 누적됩니다.
선택한 테스트, 주소 범위 또는 CPU 시퀀싱 모드를 변경하면 새 테스트 시퀀스가 시작되고 오류 통계가 재설정됩니다.
오류 계산 전용 모드는 현재 테스트 시퀀스가 시작된 이후 발견된 총 오류 수를 표시합니다.
오류 요약 모드에는 다음 정보가 표시됩니다.
개별 오류 모드는 각 오류 인스턴스에 대해 다음 정보를 표시합니다.
BadRAM 패턴 모드는 Linux BadRAM 기능 또는 GRUB badram 명령과 함께 사용할 오류 패턴을 누적하고 표시합니다. 행은 badram=F1,M1,F2,M2...
형식으로 인쇄됩니다. 각 F,M
쌍에서 F
오류 주소를 나타내고 M
은 해당 주소에 대한 비트마스크입니다. 이러한 패턴은 M의 모든 1
비트에서 F와 동일한 주소에서 오류가 발생했음을 나타냅니다. 이러한 패턴은 실제 존재하는 것보다 더 많은 오류를 캡처할 수 있지만 적어도 모든 오류가 캡처됩니다. 이러한 패턴은 하드웨어 구조로 인해 발생하는 일반적인 오류 패턴을 간결한 구문으로 캡처하도록 설계되었습니다.
BadRAM 패턴은 모든 오류의 개요에서 계산되지 않고 점진적으로 증가합니다. 여러 가지 실제적인 이유로 쌍의 수는 20개로 제한됩니다. 결과적으로 주소 인쇄 모드의 출력에서 패턴을 직접 작성하면 예외적인 경우 더 나은 결과를 얻을 수 있습니다.
참고 개별 테스트 설명에서 언급했듯이 Walking-Ones 주소 테스트(테스트 0) 및 블록 이동 테스트(테스트 7)는 BadRAM 패턴에 기여하지 않습니다. 이러한 테스트에서는 오류의 정확한 주소를 확인할 수 없기 때문입니다. .
Linux memmap 모드는 [Linux memmap 부팅 명령줄 옵션](https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt)과 함께 사용하기 위해 잘못된 메모리 영역을 축적하고 표시합니다. 행은 memmap=S1$A1,S2,A2...
형식으로 인쇄됩니다. 각 S,A
쌍에서 A
영역의 첫 번째 주소를 나타내고 S
영역의 크기(바이트)를 나타냅니다. 결함이 있는 메모리 영역은 최대 20개까지 기록됩니다. 연속된 결함 위치가 20개가 넘는 지역이 발견되면 지역이 병합됩니다. 즉, 일부 지역에는 결함이 없는 위치가 포함됩니다. 프로그램은 포함된 결함이 없는 위치의 수를 최소화하려고 시도합니다.
참고 개별 테스트 설명에서 언급한 바와 같이, 워킹-원 주소 테스트(테스트 0) 및 블록 이동 테스트(테스트 7)는 오류의 정확한 주소를 허용하지 않기 때문에 오류 메모리 영역에 기여하지 않습니다. 단호한.
불량 페이지 모드는 잘못된 메모리 페이지 번호를 누적하여 표시합니다. 이는 Windows bcdedit 명령과 함께 사용되어 해당 페이지를 Windows PFA 메모리 목록에 추가할 수 있습니다. 페이지 번호는 단일 16진수 숫자(예: 0x20
) 또는 16진수 페이지 번호 범위(예: 0x20..0x2a
)로 표시됩니다. 최대 20개 범위의 잘못된 페이지가 기록됩니다. 20개 이상의 연속된 결함 페이지 범위가 발견되면 범위가 병합됩니다. 이는 일부 범위에 결함이 없는 페이지가 포함된다는 의미입니다. 프로그램은 포함된 결함이 없는 페이지 수를 최소화하려고 시도합니다.
참고 개별 테스트 설명에서 언급한 바와 같이, Walking-Ones 주소 테스트(테스트 0) 및 블록 이동 테스트(테스트 7)는 오류의 정확한 주소를 허용하지 않기 때문에 잘못된 페이지 번호에 기여하지 않습니다. 단호한.
Memtest86+에서 보고된 모든 오류가 메모리 불량으로 인한 것은 아닙니다. 테스트에서는 CPU, 캐시 및 마더보드를 암시적으로 테스트합니다. 테스트를 통해 오류 발생 원인을 파악하는 것은 불가능합니다. 대부분의 실패는 메모리 문제로 인해 발생합니다. 그렇지 않은 경우 유일한 옵션은 오류가 수정될 때까지 부품을 교체하는 것입니다.
메모리 오류가 감지되면 오류가 있는 모듈을 확인하는 것이 명확한 절차가 아닙니다. 마더보드 공급업체 수가 많고 메모리 슬롯 조합이 가능하기 때문에 특정 오류가 고장난 메모리 모듈에 어떻게 매핑되는지에 대한 완전한 정보를 모으는 것이 불가능하지는 않더라도 어렵습니다. 그러나 결함이 있는 모듈을 확인하기 위해 취할 수 있는 단계가 있습니다. 다음은 귀하가 사용할 수 있는 몇 가지 기술입니다.
모듈 제거
회전 모듈
모듈 교체
구성 요소 비호환으로 인해 메모리 오류가 나타나는 경우가 있습니다. 메모리 모듈은 한 시스템에서는 제대로 작동하지만 다른 시스템에서는 작동하지 않을 수 있습니다. 이는 드문 일이 아니며 혼란의 원인입니다. 구성 요소가 반드시 나쁜 것은 아니지만 특정 조합을 피해야 할 수도 있습니다.
대부분의 경우 Memtest86+에서 보고된 오류는 유효합니다. Memtest86+가 메모리 크기에 대해 혼동을 일으키고 존재하지 않는 메모리를 테스트하려고 시도하는 일부 시스템이 있습니다. 이로 인해 다수의 연속 주소가 불량으로 보고되고 일반적으로 많은 비트에 오류가 발생하게 됩니다. 실패한 주소 수가 상대적으로 적고 오류가 1~2비트만 있는 경우 오류가 유효하다고 확신할 수 있습니다. 또한 간헐적인 오류는 항상 유효합니다.
유효한 메모리 오류는 모두 수정되어야 합니다. 정상적인 작동에서는 특정 오류가 전혀 나타나지 않을 수도 있습니다. 그러나 한계 메모리를 사용하여 작업하는 것은 위험하며 데이터 손실은 물론 디스크 손상까지 초래할 수 있습니다.
Memtest86+는 다양한 유형의 PC 오류를 진단할 수 없습니다. 예를 들어, OS 충돌을 일으키는 CPU 결함으로 인해 Memtest86+도 같은 방식으로 충돌할 가능성이 높습니다.
Memtest86+를 완전히 통과하는 데 필요한 시간은 CPU 속도, 메모리 속도 및 메모리 크기에 따라 크게 달라집니다. Memtest86+는 무기한 실행됩니다. 통과 카운터는 선택한 테스트가 모두 실행될 때마다 증가합니다. 일반적으로 단일 패스는 가장 모호한 오류를 제외한 모든 오류를 포착하는 데 충분합니다. 그러나 간헐적인 오류가 의심되는 경우 완전한 신뢰를 얻으려면 장기간 테스트하는 것이 좋습니다.
메모리 테스트에는 좋은 접근 방식이 많이 있습니다. 그러나 많은 테스트에서는 메모리 아키텍처나 오류를 가장 잘 감지하는 방법에 대한 많은 생각이나 지식 없이 단순히 메모리에 일부 패턴을 던집니다. 이는 하드 메모리 오류에는 잘 작동하지만 간헐적인 오류를 찾는 데는 거의 도움이 되지 않습니다. BIOS 기반 메모리 테스트는 간헐적인 메모리 오류를 찾는 데 쓸모가 없습니다.
메모리 칩은 각 데이터 비트마다 하나씩 빽빽하게 들어찬 메모리 셀의 대규모 배열로 구성됩니다. 간헐적인 오류의 대부분은 이러한 메모리 셀 간의 상호 작용으로 인해 발생합니다. 종종 메모리 셀을 쓰면 인접한 셀 중 하나에 동일한 데이터가 기록될 수 있습니다. 효과적인 기억력 테스트는 이 상태를 테스트하려고 시도합니다. 따라서 메모리 테스트를 위한 이상적인 전략은 다음과 같습니다.
이 전략을 위해서는 메모리 셀이 칩에 어떻게 배치되어 있는지에 대한 정확한 지식이 필요하다는 점은 분명합니다. 또한 다양한 칩 유형과 제조업체에 대해 가능한 칩 레이아웃이 끝없이 많아 이 전략을 비현실적으로 만듭니다. 그러나 이러한 이상적인 전략에 근접할 수 있는 테스트 알고리즘이 있습니다.
Memtest86+는 위의 이상적인 테스트 전략에 대한 합리적인 근사치를 제공하는 두 가지 알고리즘을 사용합니다. 이러한 전략 중 첫 번째 전략을 이동 반전(Moving Inversion)이라고 합니다. 이동 반전 테스트는 다음과 같이 작동합니다.
이 알고리즘은 이상적인 메모리 테스트에 대한 좋은 근사치이지만 몇 가지 제한 사항이 있습니다. 오늘날 대부분의 고밀도 칩은 4~16비트 폭의 데이터를 저장합니다. 폭이 1비트 이상인 칩에서는 단 1비트만 선택적으로 읽거나 쓰는 것이 불가능합니다. 이는 인접한 모든 셀의 상호 작용 테스트를 보장할 수 없음을 의미합니다. 이 경우 우리가 할 수 있는 최선의 방법은 일부 패턴을 사용하여 모든 인접한 셀이 최소한 가능한 모든 1과 0 조합으로 작성되었는지 확인하는 것입니다.
또한 캐싱, 버퍼링 및 잘못된 실행이 이동 반전 알고리즘을 방해하고 효율성을 떨어뜨리는 것을 볼 수 있습니다. 캐싱을 끌 수는 있지만 새로운 고성능 칩의 메모리 버퍼링은 비활성화할 수 없습니다. 이 제한 사항을 해결하기 위해 Modulo-20이라는 새로운 알고리즘이 만들어졌습니다. 이 알고리즘은 캐싱이나 버퍼링의 영향을 받지 않습니다. 알고리즘은 다음과 같이 작동합니다.
이 알고리즘은 이동 반전과 거의 동일한 수준의 인접성 테스트를 수행하지만 캐싱이나 버퍼링의 영향을 받지 않습니다. 별도의 쓰기 패스(1.1, 1.2)와 읽기 패스(1.4)가 모든 메모리에 대해 수행되므로 모든 버퍼와 캐시가 패스 사이에 플러시되었음을 확신할 수 있습니다. 보폭 크기로 20을 선택한 것은 다소 임의적이었습니다. 더 큰 보폭은 더 효과적일 수 있지만 실행하는 데 더 오랜 시간이 걸립니다. 20의 선택은 속도와 철저함 사이에서 합리적인 절충안인 것 같았습니다.
Memtest86+는 일련의 번호가 매겨진 테스트를 실행하여 오류를 확인합니다. 이러한 테스트는 테스트 알고리즘, 데이터 패턴 및 캐싱의 조합으로 구성됩니다. 이러한 테스트의 실행 순서는 가능한 한 빨리 오류를 감지할 수 있도록 배열되었습니다. 각 테스트에 대한 설명은 다음과 같습니다.
32비트 CPU에서 4GB 이상의 메모리를 테스트할 수 있도록 물리적 주소 범위는 한 번에 하나씩 가상 메모리 창에 매핑되는 1GB 창으로 분할됩니다. 각 1GB 창에는 하나 이상의 연속 메모리 영역이 포함될 수 있습니다. 대부분의 테스트에서는 각 메모리 영역에 대해 차례로 테스트가 수행됩니다. 캐싱은 첫 번째 테스트를 제외한 모든 테스트에 대해 활성화됩니다.
각 메모리 영역에서는 순회 주소 패턴을 사용하여 모든 주소 비트를 차례로 테스트합니다. 이 테스트의 오류는 BadRAM 패턴, memmap 영역 또는 불량 페이지 영역에 영향을 미치지 않습니다.
각 메모리 영역에서는 각 주소가 자신의 주소로 차례로 기록된 다음 각 주소의 일관성이 검사됩니다. 이 테스트는 사용자가 선택한 CPU 시퀀싱 모드에 관계없이 사용 가능한 각 CPU에 대해 순차적으로 수행됩니다.
모든 메모리 영역에서 각 주소는 자체 가상 주소와 창 번호(32비트 이미지의 경우) 또는 자체 물리적 주소(64비트 이미지의 경우)를 더하여 기록된 다음 각 주소의 일관성이 검사됩니다. 이는 각 창을 차례로 테스트할 때 놓칠 수 있는 상위 주소 비트의 오류를 포착합니다. 이 테스트는 사용자가 선택한 CPU 시퀀싱 모드에 관계없이 사용 가능한 각 CPU에 대해 순차적으로 수행됩니다.
각 메모리 영역에서 차례로 각 패턴에 대해 모두 1과 모두 0의 패턴으로 이동 반전 알고리즘을 사용합니다.
각 메모리 영역에서 차례로 각 패턴에 대해 8비트 폭의 워킹 1과 워킹 0의 패턴이 있는 이동 반전 알고리즘을 사용합니다.
각 메모리 영역에서 차례로 각 패턴에 대해 난수와 그 보수의 패턴이 포함된 이동 반전 알고리즘을 사용합니다. 각 테스트 통과마다 난수가 다르기 때문에 여러 번 통과하면 효율성이 높아집니다.
각 메모리 영역에서 차례로 각 패턴에 대해 32비트 폭(32비트 빌드) 또는 64비트 폭(64비트 빌드)의 패턴이 있는 이동 반전 알고리즘을 사용합니다. . 이전 테스트와 달리 패턴은 각 연속 주소에서 1비트씩 회전됩니다.
이 테스트는 블록 이동(movs) 명령을 사용하여 메모리에 스트레스를 주며 Robert Redelmeier의 burnBX 테스트를 기반으로 합니다.
각 메모리 영역에서는 8바이트마다 반전되는 이동 패턴으로 메모리가 차례로 초기화됩니다. 그런 다음 movs 명령을 사용하여 메모리 블록을 이동합니다. 이동이 완료된 후 데이터 패턴이 확인됩니다. 메모리 이동이 완료된 후에만 데이터를 확인하기 때문에 어디서 오류가 발생했는지 알 수 없습니다. 보고된 주소는 잘못된 패턴이 발견된 주소에만 적용됩니다. 결과적으로 이 테스트의 오류는 BadRAM 패턴, memmap 영역 또는 불량 페이지 영역에 영향을 미치지 않습니다.
각 메모리 영역에는 차례로 각 주소가 임의의 숫자로 기록되고, 각 주소의 일관성을 검사하고 원래 데이터의 보수로 쓴 다음, 각 주소의 일관성을 다시 검사합니다.
각 메모리 영역에서 차례로 각 패턴에 대해 난수와 그 보수 패턴이 포함된 Modulo-20 알고리즘을 사용합니다. 각 테스트 통과마다 난수가 다르기 때문에 여러 번 통과하면 효율성이 높아집니다.
모든 메모리 영역에서 각 패턴에 대해 차례로 각 메모리 위치를 패턴으로 초기화하고 일정 시간 동안 휴면 상태를 유지한 다음 각 메모리 위치의 일관성을 확인합니다. 테스트는 모두 0과 모두 1의 패턴으로 수행됩니다.
GitHub에서 미해결 문제 및 개선 요청 목록을 확인하세요.
자유롭게 버그 보고서를 제출해 주세요!
버그 수정이나 개선을 위한 코드 기여를 환영합니다. 몇 가지 기본 지침은 doc 디렉토리의 README_DEVEL.md를 참조하세요.
Memtest86+ v6.0은 Martin Whitaker가 개발한 PCMemTest를 기반으로 하며, 이는 Samuel Demeulemeester가 개발한 Memtest86+ v5.01을 기반으로 하며, 이는 Chris Brady가 아래 나열된 리소스와 지원을 통해 개발한 Memtest86을 기반으로 합니다.
소스 파일 bootsect.S, setup.S, head.S 및 build.c의 초기 버전은 Linux 1.2.1 커널에서 왔으며 크게 수정되었습니다.
Doug Sisk는 직렬 포트를 통해 연결된 콘솔을 지원하는 코드를 제공했습니다. (현재는 사용되지 않음)
BadRAM 패턴을 생성하는 코드는 Rick van Rein이 제공했습니다.
블록 이동 테스트는 Robert Redelmeier의 burnBX 테스트를 기반으로 합니다.
화면 버퍼 코드는 Jani Averbach에서 제공되었습니다. (Memtest86+ v6.0에서는 사용되지 않음)
Eric Biederman은 버전 3.0의 모든 기능 콘텐츠와 더불어 많은 버그 수정 및 중요한 코드 정리를 제공했습니다.
Samuel Demeulemeester(Memtest86+ v1.11, v1.60 및 v1.70)에서 제공하는 버전 3.2, 3.3 및 3.4의 하드웨어 감지 및 보고에 대한 주요 개선 사항입니다.
또한 Memtest86+에 대한 여러 버그 수정 사항을 anphsw/memtest86에서 가져왔습니다.