Memtest86 + kendisini çalıştırmak için kullanılan belleği sınar mı?


65

Yaygın sunucu arızası senaryolarından biri, bazen ECC belleği kullanılsa bile kötü DRAM'dir.

memtest86+DRAM sorunlarını teşhis etmek için en kullanışlı araçlardan biridir. Belleğin başlangıcında kendini yüklerken memtest86+, belleğin memtest86+yüklendiği kısmını kontrol edip etmediğini merak ediyorum .

Bellek memtest86+önemli değil ya da memtest86+DRAM'deki bir hatayı kaçırabilir çünkü içinde bulunduğu bellek konumlarını test edememesi mümkün mü?


8
Bu soru bir sunucu için de geçerliyse, sıradan bir bilgisayar için de geçerlidir, bu yüzden bu soruyu daha fazla kişiye ulaşabileceği Süper Kullanıcı'ya taşımak için oy kullandım .
Cristian Ciupitu,

Yanıtlar:


78

Açıkçası, memtest86 + şu anda memtest86 + çalıştırılabilir kodunu içeren bellek bölgesini test edemiyor (ancak eğer o bölgede bellek hataları varsa, testin kendisinin çökmesi olasıdır). Bununla birlikte, memtest86 + çalışma kodunda kendi kodunu çalışma zamanındaki farklı bir adrese yerleştirebilir ve bu numarayı kullanarak tek seferde değil, aygıt yazılımı (BIOS) tarafından kullanmasına izin verilen tüm belleği test edebilir.

Bu kod yer değiştirmesi, README.background adresinde memtest86 + kaynak kodu arşivi içinde (dosya biraz güncel değil - örneğin memtest86 + kodu için kullanılan adreslerin 0x2000 ve 0x200000 olduğunu, ancak kaynakta tanımlandığı gibi düşük adreslerin olduğunu belirtir. aslında 0x10000 ve yüksek adres, makinedeki bellek miktarına bağlı olarak ya 0x2000000 ya da 0x300000'dir).

Ancak bu yeniden yerleştirme numarasıyla bile memtest86 +, aşağıdaki nedenlerden dolayı tüm belleği test edemiyor:

  • Genellikle üretici yazılımı (BIOS), bazı RAM bölgelerini kendi kullanımı için ayırır (örneğin, ACPI tabloları). Bu RAM bölgelerine CPU tarafından erişilebilse de, bunlara bir şey yazmak öngörülemeyen davranışlara neden olabilir.

  • RAM'in bir kısmı Sistem Yönetim Modu için kullanılır ve ayrıcalıklı SMM kodu dışındaki CPU'dan bile erişilebilir değildir.

  • 640K ile 1M arasındaki RAM adres aralığına, eski PC bellek düzeninin tuhaflıkları nedeniyle erişilemiyor (bu RAM'in bir kısmı BIOS ROM ve SMM için bir gölge olarak kullanılabilir, diğer kısımlara tamamen erişilemeyebilir).


1
İlginç, yerini değiştirme yeteneğini özledim. Açıkçası, SMM ve beğenileri menzil dışındadır (özel BIOS desteği hariç).
shodanshok,

Bu haritalanmış bölgeler, DRAM'yi "kapalı modül" olarak adlandırılan başka bir şey olarak ele almıyor mu? ROM ve çevre birimler söylüyorlar.
mckenzm

3
eğer birkaç tane ram modülünüz varsa, değiştirdikten sonra ikinci bir test yapın ...
JFL

Hafızasının yanlış okunması, talimatlarını yeniden yazması nedeniyle en yanlış notun yanlış rapor edilmesini sağlaması mümkün müdür? Ya da daha çok kaç hata alıyor?
John Dvorak

3
@JanDvorak: Teoride elbette mümkündür. Uygulamada, kafanızı klavyeye vurmaktan ve rastgele bir Shakespearean sonnet yazmaktan biraz daha muhtemel olduğunu söyleyebilirim.
Ilmari Karonen

5

Hayır, memtest kendi hafızasını test edemez. Ancak, o kadar küçük ki (sadece bir KB) pek önemli değil. EDIT: bu ifade yanlıştır, çünkü seçilen cevapta da belirtildiği gibi memtest, kullanıcı tarafından adreslenebilen tüm hafızayı test etmek için kendisini dinamik olarak değiştirebilir .

-

Teorik olarak, modern işlemci, çizme anda çalıştırılabilir (MemTest gibi) çok küçük programlar içinde, programlanabilir bellek gibi onların önbellek bölümünü yapılandırabilirsiniz olmadan hiç DRAM dokunmadan.

Ancak, modele özgü bir özellik (BIOS desteği gerektirir) ve memtest'in onu kullandığını sanmıyorum.


Cevabınız için teşekkür ederim. memtestCPU önbelleğini de test ediyor. Öyleyse memtest, bu önbelleğe yüklenirse, önbelleğin bu kısmı test edilememiştir, bu daha problemlidir, çünkü bellekten çok daha küçüktür?
Robin

2
Besed memtest86 belgelerinde o mu değil en azından doğrudan bir biçimde, işlemci önbelleği test edin. Dahası, modern işlemciler ayrı talimatlara ve veri önbelleğine sahiptir (I $ ve D $). Yürütülebilir kod, talimat önbelleğine yüklenir ve doğrudan değiştirilemez / üzerine yazılamaz
shodanshok

1
memtest86 + kesinlikle CPU'ların veri önbelleğini test ediyor, ancak bu soru için önemli değil. Cevabınız için tekrar teşekkür ederim.
Robin

3
Bundan emin misin? Normalde yaşadığı hafızayı test ederken başka bir yere kopyaladığını düşünmüştüm. Bu yüzden her testin yavaş kısmı (hafızasının çoğunu) ve gerçekten hızlı kısmı (kodunun / verilerinin saklandığı küçük parça) vardır.
Peter Cordes

1
@DmitryGrigoryev: Ah tamam .. yani daha bir şey öğrendim :-) Harika teşekkürler!
Robin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.