memtest86 + ทดสอบหน่วยความจำที่ใช้ในการรันเองหรือไม่?


65

หนึ่งในสถานการณ์ความล้มเหลวของเซิร์ฟเวอร์ทั่วไปคือ DRAM ที่ไม่ดีบางครั้งแม้เมื่อใช้หน่วยความจำ ECC

memtest86+เป็นหนึ่งในเครื่องมือที่มีประโยชน์ที่สุดในการวินิจฉัยปัญหา DRAM ขณะที่มันโหลดตัวเองเมื่อเริ่มต้นหน่วยความจำฉันสงสัยว่าmemtest86+ตรวจสอบส่วนของหน่วยความจำที่memtest86+โหลดเข้าไปหรือไม่

หน่วยความจำถูกจัดสรรmemtest86+ให้มีขนาดเล็กจนไม่สำคัญหรือเป็นไปได้ที่memtest86+จะพลาดข้อบกพร่องใน DRAM เพราะไม่สามารถทดสอบตำแหน่งหน่วยความจำที่อยู่ในนั้นได้หรือไม่


8
ในขณะที่คำถามนี้เกี่ยวข้องกับเซิร์ฟเวอร์ แต่ก็มีความเกี่ยวข้องกับพีซีทั่วไปดังนั้นฉันจึงโหวตให้ย้ายคำถามนี้ไปยังผู้ใช้ขั้นสูงที่สามารถเข้าถึงผู้คนได้มากขึ้น
Cristian Ciupitu

คำตอบ:


78

เห็นได้ชัดว่า memtest86 + ไม่สามารถทดสอบขอบเขตหน่วยความจำซึ่งขณะนี้มีรหัสปฏิบัติการ memtest86 + (แต่ถ้ามีข้อผิดพลาดของหน่วยความจำในภูมิภาคนั้นมีโอกาสมากที่การทดสอบตัวเองจะผิดพลาด) อย่างไรก็ตาม memtest86 + สามารถย้ายรหัสของตัวเองไปยังที่อยู่อื่นในขณะรันไทม์และด้วยการใช้เล่ห์เหลี่ยมนี้จะสามารถทดสอบหน่วยความจำทั้งหมดที่ได้รับอนุญาตให้ใช้งานโดยเฟิร์มแวร์ (BIOS) - ไม่ใช่ทั้งหมดในครั้งเดียว

การย้ายรหัสนี้มีการอธิบายไว้ใน README.background ภายใน memtest86 + ไฟล์เก็บถาวรซอร์สโค้ด (ไฟล์ล้าสมัยเล็กน้อย - เช่นระบุว่าที่อยู่ที่ใช้สำหรับรหัส memtest86 + คือ 0x2000 และ 0x200000 แต่ที่อยู่ต่ำตามที่กำหนดในแหล่งที่มาคือ จริง 0x10000 และที่อยู่สูงเป็น 0x2000000 หรือ 0x300000 ขึ้นอยู่กับจำนวนหน่วยความจำในเครื่อง)

แต่ถึงแม้จะมีการย้ายเคล็ดลับ memtest86 + นี้ไม่สามารถทดสอบหน่วยความจำทั้งหมดด้วยเหตุผลดังต่อไปนี้:

  • โดยปกติเฟิร์มแวร์ (BIOS) จะสงวนพื้นที่ของ RAM บางส่วนไว้ใช้เอง (เช่นตาราง ACPI) ในขณะที่ซีพียูสามารถเข้าถึงส่วนของ RAM เหล่านี้ได้การเขียนอะไรก็ตามลงไปอาจทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้

  • RAM บางส่วนใช้สำหรับโหมดการจัดการระบบและไม่สามารถเข้าถึงได้จาก CPU นอกรหัส SMM ที่มีสิทธิ์

  • ช่วงที่อยู่ RAM ระหว่าง 640K และ 1M ไม่สามารถเข้าถึงได้เนื่องจากความผิดปกติของรูปแบบหน่วยความจำ PC แบบดั้งเดิม (RAM บางส่วนนี้อาจใช้เป็นเงาสำหรับ BIOS ROM และ SMM ส่วนอื่นอาจไม่สามารถเข้าถึงได้อย่างสมบูรณ์)


1
น่าสนใจฉันพลาดความสามารถในการขนย้าย เห็นได้ชัดว่า SMM และไลค์นั้นอยู่นอกขอบเขต (นอกเหนือจากการรองรับ BIOS โดยเฉพาะ)
shodanshok

ภูมิภาคที่แมปเหล่านั้นไม่รวม DRAM เนื่องจากมีสิ่งใดที่ "ปิดโมดูล" กำลังได้รับการแก้ไข ROM และอุปกรณ์ต่อพ่วงบอกว่า
mckenzm

3
ถ้าคุณมีโมดูลหน่วยความจำหลายตัวให้ทำการทดสอบครั้งที่สองหลังจากเปลี่ยนเป็น ...
JFL

เป็นไปได้หรือไม่ที่มีหน่วยความจำล้มเหลวในวิธีที่ถูกต้องในการบันทึกรายงานความสำเร็จอย่างไม่ถูกต้องเนื่องจากมีการเขียนคำแนะนำใหม่ หรือมากกว่านั้นมีข้อบกพร่องกี่ข้อ?
John Dvorak

3
@JanDvorak: ในทางทฤษฎีเป็นไปได้แน่นอน ในทางปฏิบัติฉันจะบอกว่ามันมีโอกาสมากกว่าที่คุณจะกระแทกหัวบนคีย์บอร์ดและพิมพ์โคลง Shakespearean แบบสุ่ม
Ilmari Karonen

5

ไม่ memtest ไม่สามารถทดสอบหน่วยความจำของตัวเองได้ อย่างไรก็ตามมันมีขนาดเล็กมาก (บาง KB เท่านั้น) ที่แทบไม่มีความสำคัญ แก้ไข:คำสั่งนี้ไม่ถูกต้องเนื่องจากตามที่ระบุไว้ในคำตอบที่เลือก MemTest แบบไดนามิกสามารถย้ายตัวเองไปทดสอบทั้งหมดใช้หน่วยความจำแอดเดรส

-

ในทางทฤษฎีการประมวลผลที่ทันสมัยสามารถในเวลาบูตกำหนดค่าส่วนหนึ่งของแคชเป็นหน่วยความจำโปรแกรมจากภายในโปรแกรมมีขนาดเล็กมาก (ตาม MemTest) สามารถทำงานได้โดยไม่ต้องสัมผัส DRAM ที่ทั้งหมด

อย่างไรก็ตามมันเป็นคุณสมบัติเฉพาะรุ่น (ซึ่งต้องการการสนับสนุน BIOS) และฉันไม่คิดว่า memtest กำลังใช้งานอยู่


ขอบคุณสำหรับคำตอบ. memtestกำลังทดสอบแคชของ CPU เช่นกัน ดังนั้นหากmemtestจะโหลดลงในแคชนี้ส่วนนั้นของแคชนี้จะไม่สามารถทดสอบได้ซึ่งเป็นปัญหามากกว่าเพราะมีขนาดเล็กกว่าหน่วยความจำมาก?
Robin

2
ข้างบนเอกสาร memtest86มันไม่ได้ทดสอบแคชโปรเซสเซอร์อย่างน้อยก็ในลักษณะโดยตรง ยิ่งไปกว่านั้นโปรเซสเซอร์ที่ทันสมัยมีคำแนะนำและแคชข้อมูลแยกต่างหาก (I $ และ D $) โหลดรหัสปฏิบัติการลงในแคชคำสั่งและไม่สามารถแก้ไข / เขียนทับได้โดยตรง
shodanshok

1
memtest86 + ทดสอบแคชข้อมูลของ CPU อย่างแน่นอน แต่นั่นไม่สำคัญสำหรับคำถามนี้ ขอบคุณอีกครั้งสำหรับคำตอบของคุณ
Robin

3
คุณแน่ใจเกี่ยวกับเรื่องนี้? ฉันคิดว่ามันคัดลอกตัวเองที่อื่นในขณะที่ทดสอบหน่วยความจำที่ปกติอาศัยอยู่นั่นคือเหตุผลที่การทดสอบทุกครั้งมีส่วนที่ช้า (หน่วยความจำส่วนใหญ่) และส่วนที่รวดเร็วมาก
Peter Cordes

1
@DmitryGrigoryev: อ่า .. ฉันเลยได้เรียนรู้อะไรเพิ่มเติม :-) เยี่ยมมากขอบคุณ!
Robin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.