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:
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
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/cpuinfo
menunjukkan 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
sumber
Jawaban:
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.
sumber
Memory Hole Remapping
(AMIBIOS), POST akan melaporkan sekitar 3,3 GiB, sementara DMI masih akan mendaftarkan dua modul masing-masing 2 GiB.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.
sumber
0x100000000 == 1<<32
, yang menarik. Jadi mengapa BIOS tidak memetakan sisa RAM di atas 1 << 32? Ini adalah Celeron E3400, dan/proc/cpuinfo
mengatakanaddress sizes : 36 bits physical, 48 bits virtual
Itu seharusnya bagus untuk 64GB. ((1<<36) / (1024*1024*1024) == 64
)1<<32
, atau kernel ini tidak tahu bagaimana memahaminya.smem
menginstal, cobasmem -R 4G -w
untuk gambaran umum umum dari memori yang tersedia / digunakan.RAM Anda yang hilang digunakan oleh firmware:
Menyimpulkan:
Jadi Anda lihat, jumlahnya hingga 4GB. Dan inilah ~ 800 juta yang Anda laporkan hilang:
sumber
0x100000000 (1<<32)
? Berperilaku seolah-olah itu adalah sistem 32 bit.smem -R 2G -w
dikatakan 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 ...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 ...