Hanya 3.2GB dari 4GB RAM terdeteksi pada 64-bit Debian

9

Saya menjalankan 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

Saya memiliki 2 stick DDR2 2 GB yang kompatibel di motherboard G31M-S saya . Ini mendukung hingga 8GB:

masukkan deskripsi gambar di sini

Karena ini adalah server, saya tidak terlalu peduli dengan grafis. Jadi saya mengaturnya ke yang terendah.

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

masukkan deskripsi gambar di sini

Namun, Linux hanya mendeteksi memori 3,19GiB:

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

Melihat peta 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)

Dan melakukan sedikit matematika:

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

Kami mendapatkan jawaban yang hampir sama.

Apa yang saya lewatkan?


Saya tidak sepenuhnya membeli argumen "ruang alamat PCI". Mengambil salah satu dari dua 2GB yang menonjol, layar pengaturan menunjukkan 2048MB.

# cat /proc/meminfo
MemTotal:        2058432 kB

Itu 1.96GB.

Peta E820 lagi:

[    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)

Dan matematika ...

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

Jadi saya mendapat 2GB / 2GB. /proc/cpuinfomenunjukkan bahwa prosesor saya mendukung pengalamatan fisik 36-bit. 2 ^ 36 = 64GB, yang saya bahkan tidak dekat.


# ./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
Jonathon Reinhart
sumber
Pastikan memetakan memori HIDUP di BIOS.
David Schwartz
@ DavidSchwartz Saya mencoba menyalakannya, dan kernel panik saat boot. Saya dapat mencobanya dengan live CD.
Jonathon Reinhart
@ DavidSchwartz Anda benar sekali. Mengaktifkan pemetaan ulang memori tampaknya telah berhasil. Tanpa dihidupkan, Memtest86 + melaporkan ~ 3300 MB. Dengan dihidupkan, ia melaporkan 4086 MB. Jika Anda menjawabnya, saya dengan senang hati akan menerimanya.
Jonathon Reinhart

Jawaban:

5

Anda harus mengaktifkan Memory Remapping ON di BIOS. Jika tidak, itu tidak akan memetakan kembali memori di atas batas 4GB dan sebagian memori akan ditutup oleh pemetaan perangkat keras.

David Schwartz
sumber
Ini masalahnya. Mengaktifkan pemetaan ulang memori tampaknya telah berhasil. Tanpa dihidupkan, Memtest86 + melaporkan ~ 3300 MB. Dengan dihidupkan, ia melaporkan 4086 MB.
Jonathon Reinhart
Sama, sebelum mengaktifkan Memory Hole Remapping(AMIBIOS), POST akan melaporkan sekitar 3,3 GiB, sementara DMI masih akan mendaftarkan dua modul masing-masing 2 GiB.
njsg
5

PCI juga menggunakan beberapa ruang alamat. Baik kartu PCI dan perangkat PCI terpasang ke motherboard (seperti chipset).

Biasanya ini berarti bahwa dari 4GB hanya tersedia 3¼ hingga 3½ GB, bahkan jika Anda tidak menggunakan GPU modern dengan banyak onboard RAM.

Hennes
sumber
Saya cukup mengabaikan fakta itu ... Maksud saya 0.8GB? Namun, bagian atas peta e820 adalah 0x100000000 == 1<<32, yang menarik. Jadi mengapa BIOS tidak memetakan sisa RAM di atas 1 << 32? Ini adalah Celeron E3400, dan /proc/cpuinfomengatakan address sizes : 36 bits physical, 48 bits virtualItu seharusnya bagus untuk 64GB. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart
Manual untuk motherboard Tyan lama saya adalah satu-satunya yang tampaknya memperingatkan saya bahwa meskipun mendukung RAM 4GB, itu tidak akan pernah memaparkan semua itu ke OS. Bergantung pada kartu ekspansi yang digunakan (PCI lama, 66Mhz, 64bit) akan memaparkan ruang yang dapat digunakan sekitar 3,3GB. Saya tidak pernah mengujinya, RAM 512MB yang saya mampu. (Ini kembali ketika motherboard dual CPU ini masih berarti menggunakan dua CPU fisik. Hal-hal mungkin telah berubah sejak saat itu dan PCIe mungkin tidak memiliki batas yang sama. Tetapi kebanyakan motherboard masih memiliki PCI dan PCIe).
Hennes
Lihat hasil edit saya. Saya pikir masalahnya adalah BIOS menolak untuk melaporkan memori apa pun 1<<32, atau kernel ini tidak tahu bagaimana memahaminya.
Jonathon Reinhart
Apakah Anda mempertimbangkan memori bersama yang digunakan oleh grafik internal Anda? Jika Anda telah smemmenginstal, coba smem -R 4G -wuntuk gambaran umum umum dari memori yang tersedia / digunakan.
Izzy
1
@ Hennes Jawaban ini akan sangat masuk akal jika ini adalah sistem 32-bit. Tetapi tidak untuk 64-bit (dengan pengalamatan memori fisik 36-bit).
Jonathon Reinhart
2

RAM Anda yang hilang digunakan oleh firmware:

# ./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

Menyimpulkan:

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

Jadi Anda lihat, jumlahnya hingga 4GB. Dan inilah ~ 800 juta yang Anda laporkan hilang:

firmware/hardware            843592          0     843592
Izzy
sumber
Ya, dan saya tidak terkejut dengan itu. Pertanyaannya adalah, mengapa BIOS tidak melaporkan ram sebesar 800MB di atas 0x100000000 (1<<32)? Berperilaku seolah-olah itu adalah sistem 32 bit.
Jonathon Reinhart
Ya, saya pikir jawaban ini valid, tetapi pertanyaan terakhir tetap :-)
Jonathon Reinhart
Jadi apa yang smem -R 2G -wdikatakan dengan hanya 2G di mesin (terutama yang berkaitan dengan firmware / perangkat keras, seperti yang tampaknya menjadi bagian di mana "800M hilang" pergi dengan 4G)? Akan sangat lucu jika firmware tiba-tiba tidak lagi membutuhkan 800M itu ...
Izzy
Mungkinkah itu berkaitan dengan AMI BIOS detected: BIOS may corrupt low RAM, working around it.- dan komentar Wikipedia (dari tautan e820 Anda) "Kadang-kadang BIOS bermasalah dan salah melaporkan memori yang disimpan. Ini dapat menyebabkan perangkat lunak pengujian memori, seperti Memtest, melaporkan kesalahan." ? EDIT: Ah, tidak - itu hanya akan menjelaskan 64k , bukan 800M ...
Izzy
Saya dapat memeriksa ketika saya sampai di rumah, tetapi saya berasumsi itu akan mengatakan hal yang sama. Lihatlah peta E820 untuk 2GB. Dengan pengamatan, tampilannya kira-kira sama, kecuali rentang yang disediakan / ACPI lebih rendah di ruang addr (beberapa di antaranya).
Jonathon Reinhart