Jawaban:
Jawabannya adalah ya, dan itu dilakukan secara transparan (asalkan Anda memiliki memori ECC untuk mendeteksi kesalahan, dan versi kernel Anda setidaknya 2.6.30 untuk terus beroperasi dengan aman).
Pada dasarnya, memori Anda diperiksa pada setiap pembacaan dari prosesor, dan digosok secara berkala *, untuk memeriksa konsistensi dengan Error Correcting Codes (ECC). Jika kesalahan terjadi, Anda mendapatkan Pengecualian Pemeriksaan Mesin, yang kemudian dicatat dan diambil oleh mcelog ( http://www.mcelog.org/ ).
Jika kesalahan Anda dapat diperbaiki, itu menambah penghitung "leaky bucket", yang menyebabkan DIMM fisik yang gagal terlalu sering diganti secara transparan oleh yang lain. Dengan demikian halaman memori Anda disalin ke lokasi baru, alamat memori virtual Anda diperbarui untuk menunjuk ke halaman baru, dan halaman lama ditandai oleh OS karena tidak akan digunakan lagi.
Ini disebut "soft-offlining" di Linux (dan pensiunnya halaman memori di Solaris, saya tidak tahu tentang OS lain).
Namun jika kesalahan Anda tidak dapat diperbaiki, apa yang disebut "hard-offlining" terjadi, yaitu halaman memori Anda dihapus dari manajemen memori sistem operasi normal, dan aplikasi Anda terbunuh (NB: oleh beberapa sinyal SIGBUS yang dapat ditangkap yang memberi tahu Anda di mana kesalahan terjadi, tetapi cukup jarang untuk tidak peduli dan mencoba menangkapnya). Jika halaman memori Anda dipetakan dari file dan bersih, OS juga dapat memuat ulang secara transparan di lokasi fisik lain alih-alih mematikan proses.
Anda dapat membaca lebih lanjut tentang mcelog, ada banyak opsi konfigurasi, Anda bisa memicu perilaku lain, opsi, dan arahan lain tentang apa yang harus dibaca dan bagaimana memastikan mcelog berjalan di sistem Anda.
* Menggosok, atau "Menggosok Patroli" terdiri dari membaca memori, memeriksanya terhadap ECC untuk kesalahan, dan menimpa dengan kata-kata memori yang dikoreksi ketika kesalahan ditemukan. Istilah penggosokan patroli digunakan oleh oposisi untuk menimpa data yang salah tentang kesalahan dalam memori yang dibaca, yang kadang-kadang disebut "Permintaan Penggosokan". Scrubbing adalah prosedur perangkat keras yang dapat diaktifkan, biasanya melalui BIOS.
Ini sebenarnya ide yang buruk. Memori tidak dapat diuji secara andal dalam sapuan cepat. Inilah sebabnya mengapa perangkat lunak seperti memtest86 menggunakan banyak lintasan dengan patters bit yang berbeda untuk menguji memori. Larutan:
Tes memori dengan memtest86 , sebaiknya tes panjang, biarkan berjalan semalaman, itu akan memakan waktu lama.
Jika memori buruk terdeteksi, gunakan memmap
parameter kernel untuk memaksa kernel tidak menggunakan memori itu:
memmap = nn [KMG] $ ss [KMG] [KNL, ACPI] Tandai memori spesifik sebagai cadangan. Wilayah memori yang akan digunakan, dari ss ke ss + nn. Contoh: Kecualikan memori dari 0x18690000-0x1869ffff memmap = 64K $ 0x18690000 atau memmap = 0x10000 $ 0x18690000
Selain itu, Anda dapat menggunakan memori ECC yang akan memperbaiki kesalahan 1-bit dan mendeteksi kesalahan 2-bit di memori Anda secara otomatis (dan Anda akan mendapatkan pesan log dari kernel tentang masalah memori yang tidak dapat diperbaiki jika terjadi)
Posting dan jawaban salah paham masalah ini. Memory scrubbing dimaksudkan untuk menjaga kesalahan bit tunggal yang dapat diperbaiki agar tidak berubah menjadi kesalahan ganda yang tidak dapat diperbaiki. Scrubber hanya semua memori fisik (memaksa cache tidak melakukannya) sesekali. Jika ada kesalahan bit tunggal, mereka akan dikoreksi (dan koreksi harus menulis ulang nilai yang benar menggunakan perbandingan-dan-swap), sehingga menghapus kesalahan tersebut.
Kalau tidak, jika kesalahan kedua terjadi pada kata yang sudah memiliki satu kesalahan, seluruh kata tidak akan dapat diperbaiki dan OS harus melakukan sesuatu yang drastis.
Menggosok penting karena tanpa itu, memori yang dibaca tetapi tidak tertulis (seperti halaman kode) dapat mengakumulasi kesalahan dari waktu ke waktu.
Jika Anda memiliki memori ECC, Anda mungkin ingin melihat lebih dekat di https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac . (Saya menemukan "sdram_scrub_rate" sangat menarik.)
(Jika tautan ini rusak pada beberapa titik (sebenarnya tidak seharusnya) saya sarankan mengunduh dokumentasi Linux yang sesuai dan mencari "scrub".)