ทำไมระบบของฉันแสดง RAM เพียง 3.2 GiB เมื่อฉันมี 4.0 GiB


12

ฉันติดตั้ง RAM 2x2 GiB แล้ว
การรันmemtest86จากเมนูการบู๊ตด้วงยืนยันว่า .. memtest86 รายงานว่าไม่มีข้อผิดพลาด

อย่างไรก็ตามทุก ๆ วิธีที่ฉันตรวจสอบหน่วยความจำที่มีอยู่ของฉันในระบบ Ubuntu 10.04 ที่ใช้งานอยู่นั้นรายงานเพียงประมาณ 3.2 GiB

  • cat /proc/meminfo == 3320132 kB
  • System Monitor == 3.2 GiB
  • htop == 3242 MB
  • free -m == 3242 MB

ใครมีRAM ขาดหายไปของฉัน

อัปเดตข้อมูล: ตอนนี้ฉันเพิ่งบูตคู่เข้ากับ Ubuntu 10.04 รุ่นอื่นบนฮาร์ดแวร์เดียวกัน (ฉันลืมว่าฉันติดตั้งไปหลายเดือนแล้วสำหรับกรณีฉุกเฉิน):) .... รายงาน 3.9 GiB ผ่านSystem Monitor...

ฉันโพสต์/var/log/messagesข้อมูลล่าสุดของฉันที่http://pastebin.ubuntu.com/629246/


คุณใช้เคอร์เนลชนิดใด ถ้าคุณใช้ 'bigmem' หรือ 'x86-64' คุณอาจไม่เห็น RAM ทั้งหมดในระบบ นอกจากนี้ตัวเลือก BIOS บางตัวยังส่งผลต่อการมองเห็น RAM ทั้งหมด ใช้ / var / log / Messages log (ที่จุดเริ่มต้น) เพื่อดูว่าพื้นที่หน่วยความจำถูกแมปอย่างไร
mbaitoff

ผมไม่ทราบว่าวิธีการตีความ/var/log/messagesแต่ฉันได้โพสต์ข้อมูลล่าสุดของฉันที่นี่: pastebin.ubuntu.com/629246 .. อาจจะมีคนที่สามารถทำให้หัวหรือหางของมัน :)
Peter.O

บันทึกนั้นจากระบบรายงาน 3.2Gb หรือจากรายงาน 3.9Gb หรือไม่
mbaitoff

บรรทัด 61,62 จากบันทึกของคุณแสดงว่ามี 3.2Gb
mbaitoff

ฉันติดตั้ง Ubuntu 10.04 พร้อม x86-64 (64 บิต) บนเครื่อง 4Gb รายงาน 3964 Mb ('free -m') ดังนั้นการตั้งค่าที่สองของคุณจะตรวจจับปริมาณ RAM ของคุณอย่างถูกต้อง โปรดตรวจสอบประเภทของเคอร์เนลที่ติดตั้งในระบบที่ 2 ของคุณ
mbaitoff

คำตอบ:


19

พื้นที่ที่อยู่แบบ 32 บิตหมายความว่าคุณมีที่ว่างสำหรับที่อยู่ 4GB ในอุดมคติเคอร์เนลชอบที่จะสามารถแมปหน่วยความจำกายภาพทั้งหมดหน่วยความจำทั้งหมดของงานปัจจุบันและหน่วยความจำของตัวเองทั้งหมด หากหน่วยความจำกายภาพใช้หน่วยความจำ 4GB เพียงอย่างเดียวนั่นจะไม่ทำงาน ดังนั้นหน่วยความจำกายภาพจะถูกแบ่งออกเป็นหน่วยความจำต่ำซึ่งถูกแมปตลอดเวลาและหน่วยความจำสูงซึ่งจะต้องถูกแมปเมื่อใช้งาน ยกเว้นว่าคุณกำลังใช้เคอร์เนลที่มีการแพตช์บนสถาปัตยกรรม ix86 พื้นที่แอดเดรส 128MB นั้นใช้สำหรับเคอร์เนลโค้ดและโครงสร้างข้อมูลและ 896MB ใช้สำหรับการแมปหน่วยความจำกายภาพ (รวม 1GB)

การอ่านพื้นหลังเกี่ยวกับความซับซ้อนของการจัดการหน่วยความจำเมื่อพื้นที่ที่อยู่ของคุณไม่ใหญ่กว่าหน่วยความจำทั้งหมด:

ข้อความที่ตัดตอนมาจากบันทึกเคอร์เนลของคุณ:

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA      0x00000000 -> 0x00001000
Normal   0x00001000 -> 0x000377fe
HighMem  0x000377fe -> 0x000cdce0

ที่นี่คุณมีหน่วยความจำต่ำ 887MB: สูงสุดทางทฤษฎี 896MB ลบบัฟเฟอร์ DMA ไม่กี่ MB (โซนหน่วยความจำที่ใช้ในการสื่อสารกับอุปกรณ์ฮาร์ดแวร์)

หน่วยความจำกายภาพของคุณ 3328MB ถูกแมปที่ที่อยู่ด้านล่าง 4GB และ 768MB ถูกแมปที่ที่อยู่เหนือ 4GB (ช่วง 0x100000000–0x130000000) คุณไม่ได้รับการเข้าถึง 768MB เหล่านี้ซึ่งอธิบายว่าทำไมคุณมี 3242MB เท่านั้น (RAM 4096MB ลบ 768MB ไม่สามารถเข้าถึงได้ลบด้วยบัฟเฟอร์ DMA 9MB 9MB ลบโดยเคอร์เนลใช้สำหรับรหัสและข้อมูล) ฉันไม่รู้ว่าทำไม BIOS แมป RAM บางตัวเหนือเครื่องหมาย 4GB แต่เป็นจุดข้อมูลฉันโพสต์สิ่งนี้จากพีซีที่มี RAM 4GB ที่คล้ายกับมีการแมป RAM ที่ 0x100000000–0x130000000

การทำแผนที่หน่วยความจำกายภาพเหนือ 4GB ต้องใช้PAE PAE มีค่าใช้จ่ายเล็ก ๆ น้อย ๆ (โดยเฉพาะมันต้องการโครงสร้างข้อมูลที่ใหญ่กว่าในตัวจัดการหน่วยความจำ) ดังนั้นจึงไม่ได้เปิดใช้งานอย่างเป็นระบบ เคอร์เนล Ubuntu เริ่มต้นถูกคอมไพล์โดยไม่มีการสนับสนุน PAE รับ-generic-paeเคอร์เนล ติดตั้ง linux-image-generic-paeเพื่อให้สามารถเข้าถึง RAM ได้สูงสุด 64GB

TL, DR: Linux ทำงานได้ตามที่คาดไว้ เฟิร์มแวร์ไม่เป็นประโยชน์ รับเคอร์เนลที่เปิดใช้งาน PAE


นั่นเป็นเรื่องง่าย ... ขอบคุณ Gilles :) ... การทำความเข้าใจบันทึกเป็นเรื่องยากแน่นอน! ... ฉันได้ติดตั้งlinux-image-2.6.32-32-generic-paeแล้วและhtopตอนนี้รายงาน3990 MiB
Peter.O

1
เครื่องแมปหน่วยความจำเหนือเครื่องหมาย 4gb เพื่อให้สามารถใส่หน่วยความจำฮาร์ดแวร์เช่นหน่วยความจำวิดีโอของคุณภายใต้เครื่องหมาย 4gb เพื่อให้สามารถใช้งานได้โดยไม่เปิดใช้งานเคอร์เนล 32 บิต
psusi

ฉันคิดว่า GB ทั้งหมดของคุณควรเป็น GiB?
weynhamz

@TechliveZheng นี่คือเว็บไซต์เทคโนโลยีคอมพิวเตอร์ไม่ใช่ไซต์ฟิสิกส์ MB, GB และอื่น ๆ ทั้งหมดของฉันเป็น MiB, GiB และอื่น ๆ
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

1

อาจเป็นเพราะสถาปัตยกรรมของ Ubuntu ของคุณคือ i386 (รุ่น 32 บิต) ผลลัพธ์เมื่อคุณเรียกใช้uname -aคืออะไร


uname -a... Linux DT9400 2.6.32-32-generic # 62-Ubuntu SMP พุธ 20 เม.ย. 21:54:21 UTC 2011 i686 GNU / Linux ... อย่างไรก็ตามในขณะที่ฉัน metioned ใน "ข้อมูลล่าสุด:" ในภารกิจของฉัน อีก 10.04 32 บิตการติดตั้งดูอัลบูทแสดง 3.9 กิบ .. ระบบดูอัลบูตทั้งสองเครื่องได้รับการติดตั้งจากซีดีเดียวกัน แต่กำลังเรียกใช้เคอร์เนลที่ต่างกันและมีการติดตั้งโปรแกรมที่แตกต่างกัน ... BTW นี่ไม่ใช่เหตุการณ์ล่าสุด มันแสดงให้เห็นถึง 3.2 GiB เป็นเวลาหลายเดือน ..
Peter.O

เห็นได้ชัดว่าคุณกำลังใช้เคอร์เนล 32 บิต ('i686') โดยวิธีการที่ 3.9Gb แล้วหมายถึง 4Gb เนื่องจากพื้นที่ที่อยู่บางส่วนถูกสงวนไว้โดยฮาร์ดแวร์
mbaitoff

ใช่ขอบคุณ mbaitoff ฉันคาดหวังว่าจะมีหน่วยความจำนิดหน่อย แต่ฉันคิดว่า 0.8 GiB มากเกินไปดังนั้นฉันอยากรู้ว่าเกิดอะไรขึ้นที่นี่
Peter.O

AFAIK Ubuntu สามารถติดตั้งเคอร์เนล PAE ซึ่งสามารถใช้ RAM จำนวนมากแม้ใน x86
Anton Barkovsky

3
ฉันคิดว่าคุณเพียงแค่ต้องติดตั้งเคอร์เนล pae (linux-generic-pae และ linux-headers-generic-pae) และถ้าคุณต้องการให้ลบเคอร์เนลทั่วไป
Anton Barkovsky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.