Câu trả lời:
Câu trả lời là có, và nó được thực hiện một cách minh bạch (miễn là bạn có bộ nhớ ECC để phát hiện lỗi và phiên bản kernel của bạn ít nhất là 2.6.30 để tiếp tục hoạt động an toàn).
Về cơ bản, bộ nhớ của bạn được kiểm tra mỗi lần đọc từ bộ xử lý và được kiểm tra định kỳ *, để kiểm tra tính nhất quán với Mã sửa lỗi (ECC). Nếu xảy ra lỗi, bạn nhận được Ngoại lệ kiểm tra máy, sau đó được ghi lại và lấy bởi mcelog ( http://www.mcelog.org/ ).
Nếu lỗi của bạn có thể sửa được, nó sẽ tăng bộ đếm "thùng bị rò rỉ", điều này gây ra một DIMM vật lý không thường xuyên bị thay thế trong suốt bằng một bộ đếm khác. Do đó, trang bộ nhớ của bạn được sao chép sang một vị trí mới, địa chỉ bộ nhớ ảo của bạn được cập nhật để trỏ đến trang mới và trang cũ được HĐH đánh dấu là không sử dụng nữa.
Điều này được gọi là "mềm mại" trên Linux (và nghỉ hưu trang bộ nhớ trên Solaris, tôi không biết về các hệ điều hành khác).
Tuy nhiên, nếu lỗi của bạn không thể sửa được, thì cái gọi là "lỗi cứng" xảy ra, đó là trang bộ nhớ của bạn bị xóa khỏi quản lý bộ nhớ hệ điều hành bình thường và ứng dụng của bạn bị giết (NB: bởi một số tín hiệu SIGBUS có thể bắt được cho bạn biết lỗi đã xảy ra, nhưng hiếm khi không quan tâm và cố gắng bắt nó). Nếu trang bộ nhớ của bạn được ánh xạ từ một tệp và sạch, HĐH cũng có thể tải lại nó trong suốt tại một vị trí thực tế khác thay vì giết quá trình.
Bạn có thể đọc thêm trên mcelog, có nhiều tùy chọn cấu hình, bạn có thể kích hoạt các hành vi khác, tùy chọn và các hướng dẫn khác về những gì cần đọc và cách đảm bảo mcelog đang chạy trên hệ thống của bạn.
* Chà hoặc "Patrol Scrubbing" bao gồm đọc bộ nhớ, kiểm tra xem nó có lỗi với ECC không, và ghi đè bằng các từ bộ nhớ đã sửa khi phát hiện ra lỗi. Thuật ngữ chà tuần tra được sử dụng bởi phe đối lập để ghi đè dữ liệu không chính xác về lỗi trong các lần đọc bộ nhớ, đôi khi được gọi là "Xóa theo yêu cầu". Chà là một quy trình phần cứng có thể được kích hoạt, thường là thông qua BIOS.
Đây thực sự là một ý tưởng tồi. Bộ nhớ không thể được kiểm tra một cách đáng tin cậy trong một lần quét nhanh. Đây là lý do tại sao phần mềm như memtest86 sử dụng nhiều đường chuyền với các bit bit khác nhau để kiểm tra bộ nhớ. Giải pháp:
Kiểm tra bộ nhớ với memtest86 , tốt nhất là kiểm tra dài, để nó chạy qua đêm, sẽ mất nhiều thời gian.
Nếu phát hiện bộ nhớ xấu, sử dụng memmap
tham số kernel để buộc kernel không sử dụng bộ nhớ đó:
memmap = nn [KMG] $ ss [KMG] [KNL, ACPI] Đánh dấu bộ nhớ cụ thể là dành riêng. Vùng nhớ được sử dụng, từ ss đến ss + nn. Ví dụ: Loại trừ bộ nhớ từ 0x18690000-0x1869ffff bản đồ = 64K $ 0x18690000 hoặc là bản đồ = 0x10000 $ 0x18690000
Ngoài ra, bạn có thể sử dụng bộ nhớ ECC sẽ tự động sửa lỗi 1 bit và tự động phát hiện lỗi 2 bit trong bộ nhớ của bạn (và bạn sẽ nhận được thông báo nhật ký từ kernel về các sự cố bộ nhớ không chính xác nếu chúng xảy ra)
Các bài đăng và trả lời hiểu sai vấn đề. Việc xóa bộ nhớ nhằm mục đích giữ cho các lỗi bit đơn có thể sửa được biến thành các lỗi kép không chính xác. Thỉnh thoảng, bộ lọc chỉ đơn thuần là tất cả bộ nhớ vật lý (buộc bộ nhớ cache bị mất). Nếu có bất kỳ lỗi bit đơn nào, chúng sẽ được sửa chữa (và việc hiệu chỉnh phải ghi lại giá trị chính xác bằng cách sử dụng so sánh và trao đổi), do đó sẽ xóa lỗi.
Mặt khác, nếu một lỗi thứ hai xảy ra trong một từ đã có một lỗi, toàn bộ từ đó sẽ không chính xác và HĐH sẽ phải làm một cái gì đó quyết liệt.
Chà là rất quan trọng vì không có nó, bộ nhớ được đọc nhưng không được ghi (như các trang mã) có thể tích lũy lỗi theo thời gian.
Nếu bạn có bộ nhớ ECC, bạn có thể muốn xem kỹ hơn https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac . (Tôi thấy "sdram_scrub_rate" đặc biệt thú vị.)
(Nếu liên kết này bị hỏng tại một số điểm (thực sự không nên) Tôi khuyên bạn nên tải xuống tài liệu Linux phù hợp và tìm kiếm "chà".)