เป็นไปได้หรือไม่ที่จะหาช่วงที่อยู่ทางกายภาพของ DIMM?


17

ฉันทราบว่า SMBios Type 20 จะช่วยได้ที่นี่ แต่เป็นตัวเลือกของเวอร์ชัน2.5 (2006-09-05) หน้า 25, L796 และหน้า 131ในขณะที่ประเภท 16, 17 และ 19 เป็นข้อบังคับ แต่ไม่มาก ช่วยด้วย.

อาร์เรย์หน่วยความจำกายภาพ (ชนิด 16)

มีหนึ่งในโครงสร้างเหล่านี้สำหรับทั้งระบบอธิบายสิ่งที่เป็นไปได้ในบอร์ดนี้

Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: Multi-bit ECC
    Maximum Capacity: 768 GB
    Error Information Handle: Not Provided
    Number Of Devices: 24

อุปกรณ์หน่วยความจำ (ประเภท 17)

มีหนึ่งเร็กคอร์ดต่อ Dimm แต่ละตัวซึ่งจะบอกคุณเกี่ยวกับ Dimms แบบฟิสิคัลที่ติดตั้งบนกระดาน

Handle 0x1100, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x1000
    Error Information Handle: Not Provided
    Total Width: 72 bits
    Data Width: 64 bits
    Size: 2048 MB
    Form Factor: DIMM
    Set: 1
    Locator: DIMM_A1 
    Bank Locator: Not Specified
    Type: DDR3
    Type Detail: Synchronous Registered (Buffered)
    Speed: 1600 MHz
    Manufacturer: XXXX
    Serial Number: XXXX
    Asset Tag: XXXX
    Part Number: XXXX 
    Rank: 1
    Configured Clock Speed: 1333 MHz

ที่อยู่ที่แมปหน่วยความจำของอาร์เรย์ (ชนิด 19)

อาจมีหลายระเบียนเหล่านี้และแต่ละระเบียนแสดงช่วงของที่อยู่ทางกายภาพ

นี่คือเอาต์พุตที่มีสอง 2GB sticks:

Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000CFFFFFFF
    Range Size: 3328 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x0012FFFFFFF
    Range Size: 768 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

และนี่คือผลลัพธ์ที่มี 4 แท่ง 2 * 2GB และ 2 * 4GB:

Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000CFFFFFFF
    Range Size: 3328 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x0032FFFFFFF
    Range Size: 8960 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

โปรดทราบว่าในผลลัพธ์ตัวอย่างแรกด้านบนมี 2GB DIMM สองตัว แต่มีสองช่วงคือ 3.3GB และ 0.7GB ด้วย 4 Dimms ระบบจะรวมกันของส่วนที่อยู่ของหน่วยความจำที่แมปลงในพื้นที่สองชิ้นเพราะมันเป็นเพียงตัวแทนเช่นเดียวกับแผนที่ e820 นั่นคือช่วงที่อยู่ทางกายภาพของหน่วยความจำที่ถูกต้อง

ระเบียน 1 ถึงหลายระเบียน 20 เชื่อมโยงกับอุปกรณ์หน่วยความจำประเภท 17 เพียงหนึ่งเดียวซึ่งหมายความว่าสามารถทราบช่วงฟิสิคัลทั้งหมด:

ตัวอย่าง

$ sudo dmidecode -t 20
# dmidecode 2.12
SMBIOS 2.6 present.

Handle 0x002F, DMI type 20, 19 bytes
Memory Device Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000FFFFFFFF
    Range Size: 4 GB
    Physical Device Handle: 0x002B
    Memory Array Mapped Address Handle: 0x002E
    Partition Row Position: 1

Handle 0x0030, DMI type 20, 19 bytes
Memory Device Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x001FFFFFFFF
    Range Size: 4 GB
    Physical Device Handle: 0x002C
    Memory Array Mapped Address Handle: 0x002E
    Partition Row Position: 1

ดูเหมือนว่าจะเป็นไปได้จากที่อยู่ไปยัง DIMM สำหรับEDAC -วัตถุประสงค์ในการตรวจจับและแก้ไขข้อผิดพลาดแต่ไม่ใช่จาก DIMM ไปจนถึงช่วงทั้งหมด

ดูที่ซอร์สโค้ดของmcelogมันยังใช้ type 20 สำหรับการถอดรหัส


คุณช่วยอธิบายคำถามของคุณเพิ่มเติมได้ไหม? ฉันไม่ได้ติดตามสิ่งที่คุณถาม รายละเอียดเพิ่มเติมหรือตัวอย่างจะเป็นประโยชน์อย่างมาก 2 เครื่องมือที่ฉันจะเริ่มต้น w / มีdmidecodeและlshwแต่ฉันคิดว่าคุณกำลังมองหาข้อมูลเพิ่มเติมกว่าสิ่งเหล่านี้ให้?
slm

@slm: lshwใช้dmidecodeเป็นรหัสฐานและdmidecode -t 20ให้ข้อมูลที่ต้องการ แต่ตามที่ระบุไว้โดยรุ่น 2.5 ของ SMBIOS โครงสร้างที่เก็บข้อมูลนี้"ที่อยู่อุปกรณ์ที่แมปหน่วยความจำ"หรือที่รู้จักประเภท 20หรือที่ตั้งธนาคารเป็นทางเลือก - ดังนั้น Q คือถ้ามีวิธีอื่นในการดึงข้อมูลเดียวกัน - การเชื่อมโยงระหว่างtype 17's คุ้มค่าและช่วงที่อยู่ทางกายภาพ (ตามที่กำหนดไว้โดยเลือกType 20)
Runium

@Sukminder - ขอบคุณ ข้อมูลนี้น่าจะรวมอยู่ในคำถามที่ถามเนื่องจากคุณมีความรู้เกี่ยวกับมัน
slm

@Sukminder - ฉันเพิ่มตัวอย่างdmidecode -t 20ผลลัพธ์บางอย่างคุณสามารถอธิบายค่าตัวระบุตำแหน่งของประเภท 17 เทียบกับส่วนเสริมทางกายภาพ, ประเภท 20 ได้หรือไม่
slm

ฉันจะสมมติว่าคุณไม่ได้ทำงานให้กับหน่วยงานรัฐบาล 3 ตัวอักษรหรือมีระดับเงินทุน และถ้าคุณอยู่ที่นั่นคุณจะไม่ถามที่นี่ สำหรับพีซี / เซิร์ฟเวอร์ / MAC สมัยใหม่ช่วงหน่วยความจำกายภาพมักจะถูกแมปไปยังช่วงเสมือนจริงจากนั้นอาจได้รับการแมปใหม่โดยระบบปฏิบัติการคุณอาจไม่สามารถเข้าใจได้ แม้ว่ามันจะแมปลงใน 640k + Extended Memory ของ DOS วัน การใช้ระบบปฏิบัติการ 32 บิตอาจให้คำตอบที่แตกต่างจากระบบปฏิบัติการ 64 บิต เป้าหมายสุดท้ายของคุณคืออะไร
MikeP

คำตอบ:


1

เมื่อคุณมีหลาย DIMMS, ไบออสอาจกำหนดค่าให้เป็นบางอินเตอร์ลีฟ ดังนั้นคุณอาจมี 2G DIMM หนึ่งตัวเป็นกายภาพ 0G-> 4G, ไบต์ 0-7, กระโดด 8-15 (เช่นต่ำ -64 บิต) อีก 2G DIMM เป็นกายภาพ 0G-> 4G ไบต์ 8-15 ข้าม 0-7 (สูง -64 บิต) โปรดทราบว่าฉันคิดว่า interleave นั้นใหญ่กว่านั้นจริง ๆ เพราะฉันคิดว่าถ้าคุณมีหน่วยความจำ QDR ที่ระบบสามารถทำได้ 1 ที่อยู่วงจรข้อมูล 8x 64- บิตดังนั้นการแทรกโดยหน่วย 64- ไบต์จะดีกว่า

การจัดเตรียมทางกายภาพ 0.7G และ 3.3G ที่คุณเห็นเกี่ยวข้องกับการเปิด 4G บางอย่างสำหรับอุปกรณ์ PCI บัฟเฟอร์ VGA คลาสสิก <1M 8086 อึ ฯลฯ โดยสะพานเหนือ ดังนั้นคุณจะมีแผนที่เช่น: 0-> 640K, 1M-> 3.3G, 0.7G สำหรับ BIOS, PCI, ฯลฯ มากถึง 4G จากนั้น 4G-> 4.7G สำหรับ RAM


0

ดูเหมือนว่าทางออกของ Brute Force จะเป็นเช่นนั้น

  1. บันทึกช่วงหน่วยความจำของการกำหนดค่าปัจจุบัน
  2. ปิดเครื่องถอด DIMM ที่เป็นปัญหาและ DIMM ทั้งหมดด้านบน
  3. รีบูตตรวจสอบการกำหนดค่าใหม่

2
ไม่แน่ใจว่าช่วยได้ ... นั่นคือถ้าคุณมี 6 2GB DIMM และลบคู่ช่วงสูงสุดของคุณมีแนวโน้มที่จะหดตัวลง 4GB แต่นั่นไม่ได้บอกคุณว่าพวกเขาอยู่ที่ไหนในกรณีก่อนหน้า แต่ฉันจะทดสอบ สิ่งนี้และอัปเดต
Alun

".. และ DIMM ทั้งหมดที่อยู่ด้านบน" เช่นหาก DIMM ที่เป็นปัญหาอยู่ในช่องที่ 2 ให้ลบ DIMM ในช่องที่ 3 ด้วย ... n
K7AAY

0

คุณใช้ระบบปฏิบัติการใดอยู่ ถ้า Linux ใช้คำสั่งนี้อย่างไร

grep -i 'System RAM' /proc/iomem    

colomn แรกคือที่อยู่ทางกายภาพ

การอ้างอิง: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Reference_Guide/s2-proc-iomem.html /superuser/480451/what-kind-of หน่วยความจำที่อยู่-เป็นที่คน-แสดงโดย proc-ioports และ proc-iomem


-1

ทุกอย่างเสมือนจริงในปัจจุบัน

มีบางสิ่งที่เรียกว่าMMUในฮาร์ดแวร์ซึ่งแปลที่อยู่สำหรับระบบปฏิบัติการเป็นที่อยู่จริงจริงแล้ว นอกจากนี้ยังอาจกระจายโหลดระหว่าง DIMM และแมปส่วนอื่น ๆ ของฮาร์ดแวร์ลงในพื้นที่ที่อยู่ สิ่งที่เรียกว่าพื้นที่ที่อยู่ทางกายภาพที่ระดับ OS นั้นเป็นมุมมองที่ผ่านการแปลของTLBแล้ว

/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ramเป็นคำอธิบายที่ดี


1
เขาบอกว่าเขาต้องการทางกายภาพช่วงที่อยู่
dirkt

1
Intel ได้เพิ่ม MMU ลงใน 80286 และมันทำงานได้อย่างสมบูรณ์บน i386 ... นั่นคือ 30+ ปีที่ผ่านมา ... มากสำหรับ "ทุกสิ่งทุกอย่างเสมือนจริง" :)
Eric
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.