Làm cách nào để đưa vào danh sách đen một khu vực RAM xấu chính xác theo chỉ báo lỗi MemTest86 +?


28

MemTest86 + (phiên bản đi kèm với Ubuntu 13.04) cho biết

Failing address: 002f796c48 -    759.5 MB

Tôi nên chỉ định những gì trong memmaptham số kernel để bỏ qua khu vực này?

Tôi đã thử chạy memtester 770MBvà thông báo mọi thứ đều ổn vì vậy có vẻ như các chỉ dẫn của MemTest có nghĩa là lỗi trong 759,5 MB từ đầu.

Làm thế nào để giải thích chỉ dẫn MemTest này để cấu hình memmap?

Tôi không có tiền để mua RAM mới bây giờ và lỗi dường như là độc thân vì vậy tôi hy vọng tôi có thể ghi đè lên nó.


FWIW, kernel sẽ đánh dấu một số trang nhất định là "dành riêng" nếu phát hiện phân đoạn xấu nhưng có thể khôi phục. Có phải đầu ra của "free -m" cho thấy sức mạnh của hai cho tổng số không? Tôi đề cập đến điều này như một cách giải thích tại sao memtester không thể thấy RAM xấu nhưng memtest86 + có thể.
Bratchley

Không giống như sức mạnh của hai hành động: i.stack.imgur.com/l86L1.png
Ivan

Vào thời điểm phát hiện ra lỗi (nếu bạn thậm chí có ram ecc), thì nói chung là quá muộn. Ngoài ra miễn phí -m không bao giờ báo cáo sức mạnh chẵn của hai vì cả bios và kernel đều dự trữ một số ram.
psusi

1
Tôi mơ ước mua một máy tính xách tay ECC nhưng không bao giờ có thể tìm thấy bất kỳ ưu đãi nào, có vẻ như chúng không tồn tại.
Ivan

Có vẻ như kernel cũng in ra khi nó tìm thấy một trang xấu (dòng 264-265).
Bratchley

Câu trả lời:


26

bản đồ

Có hướng dẫn này có tiêu đề: Bad Memory HowTo thảo luận về việc vô hiệu hóa bộ nhớ thông qua kernel bằng cách sử dụng memmapđối số cho kernel. Theo hướng dẫn, bạn có 2 tùy chọn khi nói đến memmap:

  • Tắt tất cả mọi thứ sau khi bộ nhớ xấu - (mem=###M option)
  • Tắt chỉ bộ nhớ xung quanh bộ nhớ xấu - (memmap=#M$###M option)

Với tùy chọn đầu tiên, nếu memtest báo cáo rằng có bộ nhớ kém ở mức 600M thì bạn có thể vô hiệu hóa RAM từ thời điểm đó cho đến khi hết RAM với điều này:

 mem=595M

Nếu có RAM xấu ở mức 802M và 807M, bạn có thể vô hiệu hóa phần RAM 10M bắt đầu từ 800M như thế này:

memmap=10M$800M

LƯU Ý: Điều này sẽ đưa vào danh sách đen 10M sau địa chỉ cơ sở 800M. Bạn nên chạy memtest86+sau đó để xác nhận rằng đối số này là chính xác.

BadRAM

Có một bản vá có sẵn cho Ubuntu được gọi là BadRam. Nó được trình bày rất tốt ở đây trong bài đăng này có tiêu đề: BadRAM trên trang web Cộng đồng Ubuntu.

Sau khi áp dụng bản vá cho kernel bằng các chi tiết từ trang đó, bạn thực hiện sửa đổi cho thiết lập Grub2 của mình:

trích từ trang web đó cho Grub2

Tệp cấu hình GRUB2 trong Natty có một dòng để định cấu hình loại trừ ram xấu kernel. Vì vậy, tôi sẽ cho rằng đó là cách ưa thích để ánh xạ ra một phần của bộ nhớ đang hiển thị lỗi. Dòng tôi đặt là

GRUB_BADRAM = "0x7DDF0000,0xffffc000"

Cách được đề xuất trên mọi trang web tôi có thể tìm thấy là thiết lập điều này là chạy memtest86 và để nó hiển thị cho bạn các cài đặt BadRAM. memtest86 đã cho tôi một trang những thứ tôi sẽ phải nhập. Tôi có thể thấy rằng tất cả các địa chỉ nằm trong một khối 16K, vì vậy tôi chỉ muốn lập bản đồ cho khối 16K đó. Đây là cách tôi tạo ra mục chính xác.

Tham số đầu tiên là dễ dàng. Đó là địa chỉ cơ sở của bộ nhớ xấu. Trong trường hợp của tôi, tôi có thể thấy rằng tất cả các địa chỉ xấu đều lớn hơn 0x7DDF0000 và nhỏ hơn 0x7DDF4000. Vì vậy, tôi đã bắt đầu khối 16K làm địa chỉ bắt đầu của mình.

Tham số thứ hai là mặt nạ. Bạn đặt 1s trong đó phạm vi địa chỉ bạn muốn chia sẻ cùng giá trị và 0s sẽ thay đổi. Điều này có nghĩa là bạn cần chọn phạm vi địa chỉ của mình sao cho chỉ các bit thứ tự thấp khác nhau. Nhìn vào địa chỉ của tôi, phần đầu tiên của mặt nạ rất dễ dàng. Bạn muốn bắt đầu với 0xffff. Đối với nibble tiếp theo, tôi sẽ giải thích với bản đồ bit. Tôi muốn trong khoảng từ 0000 đến 0011. Vì vậy, mặt nạ cho badram sẽ là 1100 hoặc hex c. 3 ngòi cuối cùng cần phải là tất cả 0 trong mặt nạ, vì chúng tôi muốn toàn bộ phạm vi được ánh xạ. Vì vậy, chúng tôi nhận được tổng kết quả là 0xffffc000.

Sau khi đặt dòng này trong / etc / default / grub, tôi đã chạy sudo update-grub và khởi động lại và bộ nhớ xấu của tôi không còn được sử dụng. Không có bản vá kernel nào là cần thiết để vạch ra bộ nhớ xấu bằng phương pháp này.

Theo dõi # 1

Nhìn qua trang wikipedia cho memtest86 + có ghi như sau:

trích từ trang wikipedia Memtest86

Bắt đầu từ Memtest86 2.3 và Memtest86 + 1.60, chương trình có thể xuất ra một danh sách các vùng RAM xấu theo định dạng mà bản vá BadRAM mong đợi cho nhân Linux; sử dụng thông tin này, một hệ thống Linux có thể sử dụng mô-đun RAM một cách đáng tin cậy ngay cả khi nó có một vài bit xấu. Grub2 có thể cung cấp thông tin tương tự này cho một kernel chưa được vá, phủ nhận sự cần thiết của bản vá BadRAM.

Ngoài ra tôi đã xem qua trang Gentoo này chỉ định memmap=...sử dụng địa chỉ hex, vì vậy bạn có thể chỉ định nó như thế này:

memmap=5M$0x2f796c48

5M chỉ là dự đoán, rõ ràng bạn có thể điều chỉnh nó thấp hơn hoặc cao hơn tùy thuộc vào lượng RAM xung quanh khu vực bạn muốn / cần bỏ qua.

Cuối cùng, bạn cũng có thể chỉ định kích thước trong hex:

memmap=0x10000$0x2f796c48

Sẽ bỏ qua 64KB bắt đầu tại địa chỉ 0x2f796c48.

Tài liệu tham khảo


"800M đến 804M" được cho là "800M đến 810M" Tôi giả sử ...
Hauke ​​Laging

Có thể là vậy nhưng những gì tôi viết cũng ổn, mặc dù nó làm mất bộ nhớ nhiều hơn 4M trong khoảng từ 800M đến 810M.
slm

1
1. Tôi biết về memmaptùy chọn nhưng câu hỏi là về cách diễn giải đầu ra memtest86 +. Tôi đã đưa ra một ví dụ cụ thể về đầu ra memtest86 + và yêu cầu trợ giúp trong việc cấu hình memmap phù hợp trong trường hợp cụ thể này. 2. "Bạn nên chạy memtest86 + sau đó để xác nhận rằng đối số này là chính xác." - memtest86 + chạy trước kernel OS nên tôi thực sự nghi ngờ memmaptùy chọn kernel Linux có thể ảnh hưởng đến nó.
Ivan

@Ivan, 1. Tôi nghĩ rõ ràng đã đưa ra các ví dụ tôi đưa vào, nhưng bạn cần nói điều gì đó như: memmap=5M$759Mđối với trường hợp cụ thể của bạn, đã cho memtest86 + không thành công ở mức 759,5 MB. 2. Ý tôi là bạn cũng nên chuyển memmap=...tùy chọn sang memtest86 +. Điều đó chưa được kiểm chứng / chưa được tôi xác nhận nhưng điều gì đó mà bạn có thể làm được với memtest86 +.
slm

1
Được rồi cảm ơn. Tôi không chắc "002f796c48 - 759,5 MB" nghĩa là gì làm với Linux).
Ivan

14

Memtest86 + (Tôi đã sử dụng 4.20) có thể xuất định dạng badram trực tiếp.

  1. Nhấn 'c' để đến đoạn hội thoại cấu hình đối thoại cấu hình memtest

  2. Sau đó, '4' cho "Chế độ báo cáo lỗi"

    đối thoại chế độ báo cáo lỗi memtest

  3. Sau đó, '3' cho "Mẫu BadRAM"

Đầu ra sẽ thay đổi từ một danh sách các lỗi thử nghiệm riêng lẻ thành một chuỗi badram = dòng, mỗi dòng chứa thêm một khu vực xấu mới. Bởi vì các dòng nối thêm và kết hợp các phân đoạn liền kề, bạn chỉ có thể chạy thử nghiệm không đầu qua đêm và sử dụng dòng in cuối cùng (mặc dù nếu bạn có độ mờ thực sự xấu, định dạng "5 megs quanh điểm này" kém chính xác hơn sẽ có thể ngắn hơn một chút ).

Kết quả cuối cùng:

Memtest86 + hiển thị đầu ra badram


4
Bây giờ nếu tôi không phải sao chép nó bằng tay và thay vào đó giao nó cho GRUB mà không cần gõ lại lỗi, điều đó thật tuyệt vời.
Ehtesh Choudhury

8
Những gì tôi đã làm là chụp ảnh nó (camera phone), tải nó lên GIMP, => grayscale => invert => tương phản / gamma sau đó đưa nó cho tesseract ${IMG} stdout.. sau đó xác minh và sửa dòng trước khi chèn vào / etc / default / grub ... Có thể mất nhiều thời gian chỉ cần nhập thủ công ngay lập tức ^^
eMPee584

3
Chắc chắn sẽ vui hơn là làm bằng tay
cừu bay
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.