memmap
มีบทช่วยสอนนี้: Bad Memory HowToซึ่งกล่าวถึงการปิดใช้งานหน่วยความจำผ่านเคอร์เนลโดยใช้memmap
อาร์กิวเมนต์ไปยังเคอร์เนล ตามวิธีการที่คุณมี 2 ตัวเลือกเมื่อมันมาถึงmemmap
:
- ปิดทุกอย่างหลังจากหน่วยความจำไม่ดี -
(mem=###M option)
- ปิดหน่วยความจำรอบหน่วยความจำไม่ดี -
(memmap=#M$###M option)
ด้วยตัวเลือกแรกหาก memtest รายงานว่ามีหน่วยความจำไม่ดีที่ 600M คุณสามารถปิดการใช้งาน RAM จากจุดนั้นจนถึงจุดสิ้นสุดของ RAM ด้วยวิธีนี้:
mem=595M
หากมี RAM ไม่ดีที่ 802M และ 807M คุณสามารถปิดการใช้งานส่วน 10M ของ RAM เริ่มต้นที่ 800M ดังนี้:
memmap=10M$800M
หมายเหตุ:นี่จะขึ้นบัญชีดำ 10M หลังจากที่อยู่พื้นฐาน 800M คุณควรรันmemtest86+
หลังจากนั้นเพื่อยืนยันว่าอาร์กิวเมนต์นี้ถูกต้อง
BadRAM
มีโปรแกรมแก้ไขสำหรับ Ubuntu ที่เรียกว่า BadRam มันครอบคลุมเป็นอย่างดีที่นี่ในโพสต์นี้ชื่อ: BadRAMบนเว็บไซต์ชุมชนอูบุนตู
หลังจากใช้แพตช์กับเคอร์เนลโดยใช้รายละเอียดจากหน้านั้นคุณทำการแก้ไขการตั้งค่า Grub2 ของคุณ:
ตัดตอนมาจากไซต์นั้นสำหรับ Grub2
ไฟล์กำหนดค่า GRUB2 ใน Natty มีบรรทัดสำหรับการกำหนดค่าการยกเว้น ram ของเคอร์เนล ดังนั้นฉันจะสมมติว่าเป็นวิธีที่ต้องการในการแมปส่วนของหน่วยความจำที่แสดงข้อผิดพลาด บรรทัดที่ฉันตั้งไว้คือ
GRUB_BADRAM = "0x7DDF0000,0xffffc000"
วิธีที่แนะนำในทุกเว็บไซต์ที่ฉันพบคือการตั้งค่านี้คือการเรียกใช้ memtest86 และให้มันแสดงการตั้งค่า BadRAM memtest86 ให้หน้าฉันกับของที่ฉันต้องเข้าไป ฉันเห็นว่าที่อยู่ทั้งหมดนั้นอยู่ในบล็อก 16K บล็อกเดียวดังนั้นฉันแค่ต้องการทำแผนที่บล็อก 16K ที่ไม่ทำงาน นี่คือวิธีที่ฉันสร้างรายการที่ถูกต้อง
พารามิเตอร์แรกนั้นง่าย นั่นคือที่อยู่ฐานของหน่วยความจำไม่ดี ในกรณีของฉันฉันเห็นว่าที่อยู่ไม่ถูกต้องทั้งหมดมีค่ามากกว่า 0x7DDF0000 และน้อยกว่า 0x7DDF4000 ดังนั้นฉันจึงเริ่มต้นบล็อก 16K เป็นที่อยู่เริ่มต้นของฉัน
พารามิเตอร์ที่สองคือมาสก์ คุณใส่ 1s โดยที่ช่วงที่อยู่ที่คุณต้องการแบ่งปันค่าเดียวกันและ 0s ซึ่งจะแตกต่างกันไป ซึ่งหมายความว่าคุณต้องเลือกช่วงที่อยู่ของคุณซึ่งจะแตกต่างกันไปเฉพาะบิตบิตต่ำ ดูที่อยู่ของฉันส่วนแรกของหน้ากากนั้นง่าย คุณต้องการเริ่มต้นด้วย 0xffff สำหรับแทะต่อไปฉันจะอธิบายด้วยบิตแมป ฉันต้องการช่วงจาก 0000 ถึง 0011 ดังนั้นหน้ากากสำหรับ badram จะเป็น 1100 หรือ hex c 3 nibbles สุดท้ายจะต้องมี 0 ทั้งหมดในรูปแบบเนื่องจากเราต้องการให้ช่วงทั้งหมดถูกแมป ดังนั้นเราจึงได้ผลลัพธ์ทั้งหมด 0xffffc000
หลังจากตั้งค่าบรรทัดนี้ใน / etc / default / grub ฉันใช้ sudo update-grub และเริ่มระบบใหม่และหน่วยความจำไม่ดีของฉันก็ไม่ได้ถูกใช้งานอีกต่อไป ไม่จำเป็นต้องใช้แพตช์เคอร์เนลในการแมปหน่วยความจำไม่ดีโดยใช้วิธีนี้
ติดตาม # 1
มองผ่านหน้าวิกิพีเดียเพื่อ memtest86 + มันระบุดังนี้
ตัดตอนมาจากหน้า Memtest86 วิกิพีเดีย
เริ่มจาก Memtest86 2.3 และ Memtest86 + 1.60 โปรแกรมสามารถแสดงรายการของขอบเขต RAM ที่ไม่ดีในรูปแบบที่คาดไว้โดยแพทช์ BadRAM สำหรับเคอร์เนล Linux; การใช้ข้อมูลนี้ระบบ Linux สามารถใช้โมดูล RAM ได้อย่างน่าเชื่อถือแม้ว่าจะมีบิตที่ไม่ดีเล็กน้อย Grub2 สามารถส่งข้อมูลเดียวกันนี้ไปยังเคอร์เนลที่ไม่ได้รับการคัดค้านทำให้ไม่ต้องใช้แพตช์ BadRAM
ฉันเจอหน้า Gentoo นี้ซึ่งระบุการmemmap=...
ใช้เลขฐานสิบหกดังนั้นคุณสามารถระบุได้ดังนี้:
memmap=5M$0x2f796c48
5M เป็นเพียงการคาดเดาอย่างชัดเจนว่าคุณสามารถปรับได้ต่ำกว่าหรือสูงกว่าขึ้นอยู่กับจำนวน RAM ในพื้นที่นั้นที่คุณต้องการ / ไม่ต้องการ
ในที่สุดคุณสามารถระบุขนาดเป็น hex ได้เช่นกัน:
memmap=0x10000$0x2f796c48
จะเพิกเฉยต่อการเริ่มต้นของ 64KB ตามที่อยู่ 0x2f796c48
อ้างอิง