Yanıtlar:
Yanıt evettir ve şeffaf bir şekilde yapılır (hataları algılamak için ECC belleğiniz varsa ve çekirdek sürümünüz güvenli bir şekilde çalışmaya devam etmek için en az 2.6.30'dur).
Temel olarak, belleğiniz işlemciden her okumada kontrol edilir ve Hata Düzeltme Kodları (ECC) ile tutarlılığı kontrol etmek için periyodik olarak * temizlenir. Bir hata meydana geldiğinde, daha sonra mcelog ( http://www.mcelog.org/ ) tarafından kaydedilip tutulan bir Makine Kontrolü İstisnası alırsınız .
Hatanız düzeltilebilirse, "sızdıran kova" sayacını arttırır, bu da çok sık başarısız olan fiziksel bir DIMM'nin şeffaf bir şekilde başka bir tanesiyle değiştirilmesine neden olur. Böylece bellek sayfanız yeni bir konuma kopyalanır, sanal bellek adresiniz yeni sayfayı gösterecek şekilde güncellenir ve eski sayfa artık OS tarafından artık kullanılmayacak şekilde işaretlenir.
Buna Linux'ta "yumuşak çizgi" denir (ve Solaris'te bellek sayfası emekliliği, diğer işletim sistemlerini bilmiyorum).
Ancak hatanız düzeltilemediyse, "sabit hat" olarak adlandırılan şey gerçekleşir, yani bellek sayfanız normal işletim sistemi bellek yönetiminden kaldırılır ve uygulamanız öldürülür (NB: size nerede olduğunu söyleyen bazı catchable SIGBUS sinyali ile) hata oldu, ancak umursamaya ve yakalamaya çalışamayacak kadar nadir). Bellek sayfanız bir dosyadan eşlenir ve temizlenirse, işletim sistemi de işlemi öldürmek yerine sayfayı başka bir fiziksel konuma yeniden yükleyebilir.
Mcelog hakkında daha fazla bilgi edinebilir, birçok yapılandırma seçeneği vardır, tetiklenecek başka davranışlar, seçenekler ve mcelog'un sisteminizde çalıştığından nasıl emin olacağınıza dair seçenekler ve diğer ipuçlarını alabilirsiniz.
* Fýrçalama veya "Devriye Fýrçalama", hafýza okuma, hatalar için ECC'ye karţý kontrol etme ve bir hata bulunduðunda düzeltilmiþ hafýza kelimelerle üzerine yazmayý içerir. Devriye ovma terimi, bazen "Talep Ovma" olarak adlandırılan bellek okumalarındaki hatalar üzerine yanlış verilerin üzerine yazılmasına karşıdır. Ovma, genellikle BIOS üzerinden etkinleştirilebilen bir donanım prosedürüdür.
Bu aslında kötü bir fikir. Bellek hızlı bir taramada güvenilir bir şekilde test edilemez. Bu nedenle memtest86 gibi yazılımlar, belleği test etmek için farklı bit desenleri ile birden fazla geçiş kullanır. Çözüm:
Memtest86 ile hafızayı test edin , tercihen uzun test edin, bir gece çalışmasını bekleyin , uzun zaman alacaktır.
Bozuk bellek algılanırsa, memmap
çekirdeği bu belleği kullanmaya zorlamak için çekirdek parametresini kullanın:
memmap = nn [KMG] $ ss [KMG] [KNL, ACPI] Belirli bir belleği ayrılmış olarak işaretleyin. Kullanılacak bellek bölgesi, ss'den ss + nn'ye. Örnek: Belleği 0x18690000-0x1869ffff'den hariç tutma memmap = 64K $ 0x18690000 veya memmap = 0x10000 $ 0x18690000
Buna ek olarak, 1 bit hataları düzeltecek ve belleğinizdeki 2 bit hataları otomatik olarak algılayacak ECC belleği kullanabilirsiniz (ve eğer meydana gelirse düzeltilemez bellek sorunları hakkında çekirdekten günlük mesajları alırsınız)
Gönderi ve cevap sorunu yanlış anlıyor. Bellek fırçalama, düzeltilebilir tek bit hatalarının düzeltilemez çift hatalara dönüşmesini önlemek içindir. Yıkayıcı yalnızca tüm fiziksel belleği (önbelleği zorlamayı kaçırır) zaman zaman. Herhangi bir tek bit hatası varsa, bunlar düzeltilecektir (ve düzeltme bir karşılaştırma ve takas kullanarak doğru değeri yeniden yazmalıdır), böylece hatayı temizler.
Aksi takdirde, zaten bir hata içeren bir sözcükte ikinci bir hata oluşursa, tüm sözcük düzeltilemez ve işletim sisteminin sert bir şey yapması gerekir.
Fırçalama önemlidir, çünkü onsuz okunan ancak yazılmayan bellek (kod sayfaları gibi) zaman içinde hatalar biriktirebilir.
ECC belleğiniz varsa, https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac adresine daha yakından bakmak isteyebilirsiniz . ("Sdram_scrub_rate" i özellikle ilginç buldum.)
(Bu bağlantı bir noktada koparsa (gerçekten olmamalıdır) uygun Linux belgelerini indirmenizi ve "fırçalama" yı aramanızı öneririm.)