ตรวจพบ RAM 4GB ขนาด 3.2GB เท่านั้นใน Debian 64 บิต


9

ฉันใช้ Debian Squeeze (x64):

# uname -srvmo
Linux 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux

ฉันมี 2 เข้ากันได้ 2 GB DDR2 แท่งในของฉันG31M-S เมนบอร์ด รองรับสูงสุด 8GB:

ป้อนคำอธิบายรูปภาพที่นี่

เนื่องจากนี่เป็นเซิร์ฟเวอร์ฉันไม่สนใจเรื่องกราฟิกจริงๆ ดังนั้นฉันตั้งไว้ที่ต่ำสุด

Internal Graphics Mode Select: Auto
                               Enabled, 1MB   <--
                               Enabled, 8MB
DVMT Mode Select:              Fixed Mode     <--
                               Auto
    DVMT/FIXED Memory:         128MB          <--
                               256MV

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตาม Linux ตรวจพบหน่วยความจำ 3.19GiB เท่านั้น:

# cat /proc/meminfo
MemTotal:        3350712 kB
...

ดูแผนที่ E820 :

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cfdb0000 (usable)
[    0.000000]  BIOS-e820: 00000000cfdb0000 - 00000000cfdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cfdc0000 - 00000000cfdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cfdf0000 - 00000000cfe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

และทำคณิตศาสตร์เล็กน้อย:

>>> ((0x9F800 - 0x10000) + (0xCF6B0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
3.240476608276367

เราได้คำตอบที่เหมือนกัน

ฉันพลาดอะไรไป


ฉันไม่ได้ซื้ออาร์กิวเมนต์ "พื้นที่ที่อยู่ PCI" อย่างสมบูรณ์ ดึงหนึ่งในสอง 2GB ออกมาหน้าจอตั้งค่าแสดง 2048MB

# cat /proc/meminfo
MemTotal:        2058432 kB

นั่นคือ 1.96GB

แผนที่ E820อีกครั้ง:

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000007fdb0000 (usable)
[    0.000000]  BIOS-e820: 000000007fdb0000 - 000000007fdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 000000007fdc0000 - 000000007fdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000007fdf0000 - 000000007fe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

และคณิตศาสตร์ ...

>>> ((0x9F800 - 0x10000) + (0x7fdb0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
1.9973125457763672

ดังนั้นฉันจึงได้ 2GB / 2GB /proc/cpuinfoแสดงให้เห็นว่าโปรเซสเซอร์ของฉันรองรับการกำหนดที่อยู่จริงแบบ 36 บิต 2 ^ 36 = 64GB ซึ่งฉันไม่ได้อยู่ใกล้กับเหตุการณ์


# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

ตรวจสอบให้แน่ใจว่าการแมปหน่วยความจำเปิดอยู่ใน BIOS
David Schwartz

@DavidSchwartz ฉันพยายามเปิดใช้งานแล้วและเคอร์เนล panicked ในการบูต ฉันอาจลองกับซีดีสดแม้ว่า
Jonathon Reinhart

@DavidSchwartz คุณถูกต้องจริงๆ การเปิดใช้การแมปหน่วยความจำใหม่ดูเหมือนจะเป็นการหลอกลวง หากไม่เปิดเครื่อง Memtest86 + จะรายงาน ~ 3300 MB เมื่อเปิดใช้งานจะรายงาน 4086 MB หากคุณตอบคำถามนี้ฉันยินดีที่จะยอมรับ
Jonathon Reinhart

คำตอบ:


5

คุณต้องเปิด Memory Remapping ONใน BIOS มิฉะนั้นจะไม่ทำการแมปหน่วยความจำใหม่เหนือขอบเขต 4GB และหน่วยความจำบางส่วนจะถูกครอบคลุมโดยการแมปฮาร์ดแวร์


นี่เป็นปัญหา การเปิดใช้การแมปหน่วยความจำใหม่ดูเหมือนจะเป็นการหลอกลวง หากไม่เปิดเครื่อง Memtest86 + จะรายงาน ~ 3300 MB เมื่อเปิดใช้งานจะรายงาน 4086 MB
Jonathon Reinhart

เหมือนกันก่อนเปิดใช้งานMemory Hole Remapping(AMIBIOS) POST จะรายงานประมาณ 3.3 GiB ในขณะที่ DMI จะยังคงแสดงรายการโมดูลสองโมดูลละ 2 GiB
njsg

5

PCI ยังใช้พื้นที่ที่อยู่บางส่วน ทั้งการ์ด PCI และอุปกรณ์ PCI สร้างขึ้นในเมนบอร์ด (เช่นชิปเซ็ต)

โดยทั่วไปแล้วสิ่งนี้หมายความว่ามีเพียง 4GB จาก3¼ถึง3½ GB เท่านั้นถึงแม้ว่าคุณจะไม่ได้ใช้ GPU ที่ทันสมัยพร้อม RAM ออนบอร์ดจำนวนมาก


ฉันไม่สนใจความจริงนั้น ... ฉันหมายถึง 0.8GB? อย่างไรก็ตามแผนที่ด้านบนของ e820 0x100000000 == 1<<32นั้นน่าสนใจมาก เหตุใด BIOS จึงไม่แมปส่วนที่เหลือของ RAM ด้านบน 1 << 32 มันคือ Celeron E3400 และ/proc/cpuinfoบอกaddress sizes : 36 bits physical, 48 bits virtualว่าควรจะดีสำหรับ 64GB ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart

คู่มือสำหรับเมนบอร์ด Tyan รุ่นเก่าของฉันเป็นคู่มือเดียวที่ดูเหมือนจะเตือนฉันว่าถึงแม้ว่ามันจะรองรับ 4GB RAM แต่ก็ไม่เคยเปิดเผยสิ่งเหล่านั้นทั้งหมดกับระบบปฏิบัติการ ขึ้นอยู่กับการ์ดเอ็กซ์แพนชันที่ใช้ (PCI แบบเก่าธรรมดา 66Mhz, 64 บิต) มันจะแสดงพื้นที่ใช้งานประมาณ 3.3GB ฉันไม่เคยทดสอบเลยว่า RAM 512MB เป็นสิ่งที่ฉันสามารถจ่ายได้ (นี่กลับมาเมื่อมาเธอร์บอร์ด CPU คู่ยังคงใช้ CPU จริงสองตัวสิ่งต่าง ๆ อาจเปลี่ยนแปลงไปตั้งแต่นั้นมาและ PCIe อาจไม่มีขีด จำกัด เท่าเดิม แต่มาเธอร์บอร์ดส่วนใหญ่ยังคงมีทั้ง PCI และ PCIe)
Hennes

ดูการแก้ไขของฉัน ฉันคิดว่าปัญหาคือ BIOS ไม่ยอมรายงานหน่วยความจำใด ๆ1<<32หรือเคอร์เนลนี้ไม่รู้วิธีที่จะเข้าใจ
Jonathon Reinhart

คุณพิจารณาถึงหน่วยความจำที่ใช้ร่วมกันของกราฟิกภายในหรือไม่ หากคุณsmemติดตั้งแล้วให้ลองดูsmem -R 4G -wภาพรวมทั่วไปของหน่วยความจำที่มี / ใช้แล้ว
Izzy

1
@Hennes คำตอบนี้จะเหมาะสมอย่างยิ่งหากเป็นระบบ 32 บิต แต่ไม่ใช่สำหรับ 64- บิต (ด้วยการกำหนดแอดเดรสหน่วยความจำฟิสิคัล 36 บิต)
Jonathon Reinhart

2

RAM ที่หายไปของคุณถูกใช้โดยเฟิร์มแวร์:

# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

สรุป:

echo $((181116 + 287784 + 2881812 + 843592))
4194304

คุณจะเห็นว่ามันรวมกันได้มากถึง 4GB และนี่คือ ~ 800M ที่คุณรายงานว่าหายไป:

firmware/hardware            843592          0     843592

ใช่และฉันก็ไม่แปลกใจกับเรื่องนั้น คำถามคือทำไมไม่ได้เป็น BIOS รายงานว่า 800MB of RAM ข้างต้น0x100000000 (1<<32)? มันทำตัวเหมือนเป็นระบบ 32 บิต
Jonathon Reinhart

ใช่ฉันคิดว่าคำตอบนี้ถูกต้อง แต่คำถามสุดท้ายยังคงอยู่ :-)
Jonathon Reinhart

ดังนั้นสิ่งที่จะsmem -R 2G -wพูดด้วยเพียง 2G ในเครื่อง (โดยเฉพาะเกี่ยวกับเฟิร์มแวร์ / ฮาร์ดแวร์เช่นที่ดูเหมือนว่าจะเป็นส่วนที่ "หายไป 800M" ไปกับ 4G)? จะค่อนข้างตลกถ้าเฟิร์มก็ไม่จำเป็นเหล่านั้น 800M ...
อิซซี่

มันอาจจะเกี่ยวกับAMI BIOS detected: BIOS may corrupt low RAM, working around it.- และหมายเหตุของ Wikipedia (จาก e820link ของคุณ) "บางครั้ง BIOS เป็นบั๊กและรายงานหน่วยความจำที่สำรองไว้อย่างไม่ถูกต้องซึ่งอาจทำให้ซอฟต์แวร์ทดสอบหน่วยความจำเช่น Memtest รายงานข้อผิดพลาด" ? แก้ไข: Ah, no - ที่เพิ่งจะคิดเป็น 64kไม่ใช่ 800M ...
Izzy

ฉันสามารถตรวจสอบได้เมื่อฉันกลับถึงบ้าน แต่ฉันคิดว่ามันจะพูดแบบเดียวกัน ดูแผนที่ E820 สำหรับ 2GB โดยการสังเกตมันดูเหมือนกันโดยประมาณยกเว้นช่วงสงวน / ACPI จะต่ำกว่าในพื้นที่ addr (บางส่วน)
Jonathon Reinhart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.