Có bộ nhớ kiểm tra memtest86 + được sử dụng để tự chạy không?


65

Một trong những tình huống lỗi máy chủ phổ biến là DRAM xấu, đôi khi ngay cả khi sử dụng bộ nhớ ECC.

memtest86+là một trong những công cụ hữu ích nhất để chẩn đoán các vấn đề về DRAM. Khi nó tự tải vào lúc bắt đầu bộ nhớ, tôi đã tự hỏi nếu memtest86+kiểm tra phần bộ nhớ memtest86+được tải vào.

Bộ nhớ được phân bổ memtest86+quá nhỏ đến mức không thành vấn đề, hoặc có memtest86+thể có thể bỏ sót một khiếm khuyết trong DRAM vì nó không thể kiểm tra các vị trí bộ nhớ mà nó cư trú?


8
Mặc dù câu hỏi này có liên quan đến một máy chủ, nhưng nó cũng phù hợp với một PC thông thường, vì vậy tôi đã bỏ phiếu để chuyển câu hỏi này sang Super User nơi nó có thể tiếp cận nhiều người hơn.
Cristian Ciupitu

Câu trả lời:


78

Rõ ràng, memtest86 + không thể kiểm tra vùng bộ nhớ hiện đang chứa mã thực thi memtest86 + (nhưng nếu có lỗi bộ nhớ trong vùng đó, rất có khả năng bản thân thử nghiệm sẽ bị sập). Tuy nhiên, memtest86 + có thể di chuyển mã của chính nó sang một địa chỉ khác trong thời gian chạy và bằng cách sử dụng thủ thuật này, nó có thể kiểm tra tất cả bộ nhớ mà phần mềm (BIOS) cho phép sử dụng - không phải tất cả cùng một lúc.

Việc di chuyển mã này được mô tả trong README.background bên trong kho lưu trữ mã nguồn memtest86 + (tệp hơi lỗi thời - ví dụ: địa chỉ được sử dụng cho mã memtest86 + là 0x2000 và 0x200000, nhưng địa chỉ thấp như được xác định trong nguồn là thực tế là 0x10000 và địa chỉ cao là 0x2000000 hoặc 0x300000 tùy thuộc vào dung lượng bộ nhớ trong máy).

Nhưng ngay cả với thủ thuật di chuyển này, memtest86 + không thể kiểm tra tất cả bộ nhớ vì những lý do sau:

  • Thông thường phần sụn (BIOS) dành một số vùng RAM để sử dụng riêng (ví dụ: bảng ACPI). Mặc dù các vùng RAM này có thể được truy cập bởi CPU, nhưng việc ghi bất cứ điều gì vào chúng có thể dẫn đến hành vi không thể đoán trước.

  • Một số phần của RAM được sử dụng cho Chế độ quản lý hệ thống và thậm chí không thể truy cập được từ CPU bên ngoài mã SMM đặc quyền.

  • Phạm vi địa chỉ RAM trong khoảng từ 640K đến 1M không thể truy cập được do các bố cục bộ nhớ PC kế thừa (một số RAM này có thể được sử dụng làm bóng cho ROM ROM và đối với SMM, các phần khác có thể không truy cập được).


1
Thú vị, tôi đã bỏ lỡ khả năng di dời của nó. Rõ ràng SMM và các lượt thích nằm ngoài phạm vi (ngoài hỗ trợ BIOS cụ thể).
shodanshok

Các khu vực được ánh xạ đó thường loại trừ DRAM vì một cái gì đó "mô-đun tắt" đang được giải quyết? ROM và các thiết bị ngoại vi nói.
mckenzm

3
nếu bạn có một vài mô-đun ram, hãy thực hiện thử nghiệm thứ hai sau khi đổi chúng ...
JFL

Có thể có bộ nhớ bị lỗi theo đúng cách để memtest báo cáo thành công không chính xác do có các hướng dẫn của nó được viết lại? Hay đúng hơn, có bao nhiêu lỗi?
John Dvorak

3
@JanDvorak: Về lý thuyết, tất nhiên là có thể. Trong thực tế, tôi muốn nói rằng nó chỉ có khả năng hơn một chút so với đập đầu vào bàn phím và gõ ngẫu nhiên một sonnet Shakespearean.
Ilmari Karonen

5

Không, memtest không thể kiểm tra bộ nhớ của chính nó. Tuy nhiên, nó quá nhỏ (chỉ một số KB) nên hầu như không quan trọng. EDIT: tuyên bố này là sai vì, như đã nêu trong câu trả lời đã chọn, memtest có thể tự động di chuyển để kiểm tra tất cả bộ nhớ có thể đánh địa chỉ của người dùng.

-

Về lý thuyết, bộ xử lý hiện đại có thể, trong thời gian khởi động, cấu hình một phần bộ nhớ cache của chúng thành bộ nhớ lập trình, từ bên trong các chương trình rất nhỏ (như memtest) có thể chạy mà không cần chạm vào DRAM.

Tuy nhiên, đây là một tính năng dành riêng cho mô hình (yêu cầu hỗ trợ BIOS) và tôi không nghĩ memtest đang sử dụng nó.


Cảm ơn bạn vì câu trả lời. memtestđang kiểm tra bộ đệm CPU. Vì vậy, nếu memtestsẽ được tải vào bộ đệm này, thì phần này của bộ đệm không thể được kiểm tra, điều này có vấn đề hơn, vì nó nhỏ hơn nhiều so với bộ nhớ?
Robin

2
Ngoài tài liệu memtest86,không kiểm tra bộ đệm của bộ xử lý, ít nhất là theo cách trực tiếp. Hơn nữa, các bộ xử lý hiện đại có các hướng dẫn và bộ đệm dữ liệu riêng biệt (I $ và D $). Mã thực thi được tải vào bộ đệm hướng dẫn và nó không thể được sửa đổi / ghi đè trực tiếp
shodanshok

1
memtest86 + chắc chắn kiểm tra bộ đệm dữ liệu của CPU, nhưng điều đó không quan trọng đối với câu hỏi này. Cảm ơn bạn một lần nữa cho câu trả lời của bạn.
Robin

3
Bạn có chắc về điều này? Tôi nghĩ rằng nó đã sao chép chính nó ở một nơi khác trong khi kiểm tra bộ nhớ mà nó thường sống. Đó là lý do tại sao mọi thử nghiệm đều có phần chậm (phần lớn bộ nhớ) và phần rất nhanh (bit nhỏ nơi lưu trữ mã / dữ liệu của nó).
Peter Cordes

1
@DmitryGrigoryev: Ah được rồi .. vì vậy tôi đã học được nhiều điều hơn :-) Cảm ơn tuyệt vời!
Robin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.