memtest86 +는 자체 실행에 사용되는 메모리를 테스트합니까?


65

일반적인 서버 오류 시나리오 중 하나는 ECC 메모리를 사용하는 경우에도 불량 DRAM입니다.

memtest86+DRAM 문제를 진단하는 데 가장 유용한 도구 중 하나입니다. 메모리가 시작될 때 자체 로드 될 때로 드되는 memtest86+메모리 부분을 확인 하는지 궁금합니다 memtest86+.

메모리가 memtest86+너무 작아서 중요하지 않거나 memtest86+DRAM에있는 메모리 위치를 테스트 할 수 없기 때문에 결함을 놓칠 수 있습니까?


8
이 질문은 서버와 관련이 있지만 일반적인 PC 와도 관련이 있으므로 더 많은 사람들에게 다가 갈 수있는 수퍼 유저 에게이 질문을 옮겼습니다.
Cristian Ciupitu

답변:


78

분명히 memtest86 +는 현재 memtest86 + 실행 코드가 포함 된 메모리 영역을 테스트 할 수 없습니다 (하지만 해당 영역에 메모리 오류가 있으면 테스트 자체가 중단 될 가능성이 큽니다). 그러나 memtest86 +는 런타임에 자체 코드를 다른 주소로 재배치 할 수 있으며이 트릭을 사용하면 펌웨어 (BIOS)에서 사용할 수있는 모든 메모리를 한 번에 모두 테스트 할 수 있습니다.

이 코드 재배치는 memtest86 + 소스 코드 아카이브 내부의 README.background에 설명되어 있습니다 (파일이 약간 오래된 것입니다. 예를 들어 memtest86 + 코드에 사용 된 주소는 0x2000 및 0x200000이지만 소스에 정의 된 낮은 주소는 실제로 0x10000이고 상위 주소는 시스템의 메모리 양에 따라 0x2000000 또는 0x300000입니다.

그러나이 재배치 트릭을 사용하더라도 memtest86 +는 다음과 같은 이유로 모든 메모리를 테스트 할 수 없습니다.

  • 일반적으로 펌웨어 (BIOS)는 자체 사용을 위해 일부 RAM 영역 (예 : ACPI 테이블)을 예약합니다. 이러한 RAM 영역은 CPU에 의해 액세스 될 수 있지만,이 영역에 아무것도 쓰면 예기치 않은 동작이 발생할 수 있습니다.

  • RAM의 일부는 시스템 관리 모드 에 사용되며 권한있는 SMM 코드 외부의 CPU에서는 액세스 할 수 없습니다.

  • 레거시 PC 메모리 레이아웃으로 인해 640K에서 1M 사이의 RAM 주소 범위에 액세스 할 수 없습니다 (이 RAM 중 일부는 BIOS ROM의 그림자로 사용될 수 있으며 SMM의 경우 다른 부분은 완전히 액세스 할 수 없음).


1
흥미롭게도 재배치 기능을 놓쳤습니다. 분명히 SMM 등은 범위를 벗어납니다 (구체적인 BIOS 지원 제외).
shodanshok

이러한 매핑 된 영역은 일반적으로 "off 모듈"이 해결 될 때 DRAM을 제외합니다. ROM과 주변 장치는 말합니다.
mckenzm

3
여러 개의 램 모듈이있는 경우 교체 한 후 두 번째 테스트를 수행하십시오.
JFL

지침을 다시 작성하여 memtest가 성공을 잘못보고하도록 올바른 방법으로 메모리가 실패 할 수 있습니까? 아니면 오히려 얼마나 많은 결함이 있습니까?
John Dvorak

3
@ JanDvorak : 이론적으로는 물론 가능합니다. 실제로, 나는 키보드에서 머리를 두드리고 셰익스피어 소네트를 무작위로 입력하는 것보다 약간 더 가능성이 있다고 말합니다.
Ilmari Karonen

5

아니요, memtest는 자체 메모리를 테스트 할 수 없습니다. 그러나 크기가 너무 작아서 거의 KB가 아닙니다. 편집 : 이 답변은 선택한 답변에 명시된 바와 같이 memtest가 동적으로 자신을 재배치하여 모든 사용자 주소 지정 가능 메모리 를 테스트 할 수 있기 때문에 잘못되었습니다 .

-

이론적으로 최신 프로세서는 부팅시 캐시의 일부를 프로그래머블 메모리로 구성 할 수 있으며, DRAM을 전혀 건드리지 않고 아주 작은 프로그램 (memtest) 에서 실행할 수 있습니다 .

그러나 모델 별 기능 (BIOS 지원이 필요함)이며 memtest가 사용하고 있다고 생각하지 않습니다.


답변 주셔서 감사합니다. memtestCPU 캐시도 테스트 중입니다. 따라서이 memtest캐시에로드 되면 캐시 의이 부분을 테스트 할 수 없었습니다. 메모리보다 훨씬 작기 때문에 더 문제가 있습니까?
Robin

2
memtest86 문서 에 따르면 최소한 직접적인 방식으로 프로세서 캐시를 테스트 하지 않습니다 . 또한 최신 프로세서에는 별도의 명령과 데이터 캐시 (I $ 및 D $)가 있습니다. 실행 코드는 명령 캐시에로드되며 직접 수정 / 덮어 쓸 수 없습니다
shodanshok

1
memtest86 +는 CPU 데이터 캐시를 확실히 테스트하지만이 질문에는 문제가되지 않습니다. 답변 감사합니다.
Robin

3
이거 확실하니? 나는 그것이 일반적으로 사는 메모리를 테스트하는 동안 다른 곳으로 복사되었다고 생각했습니다. 모든 테스트에는 느린 부분 (대부분의 메모리)과 정말 빠른 부분 (코드 / 데이터가 저장되는 작은 비트)이 있습니다.
Peter Cordes

1
@DmitryGrigoryev : 아 알았어 .. 그래서 나는 더 많은 것을 배웠다 :-) 감사합니다!
Robin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.