64 bit Debian'da yalnızca 3,2 GB 4 GB RAM algılandı


9

Debian Squeeze (x64) kullanıyorum:

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

G31M-S anakartımda 2 adet uyumlu 2 GB DDR2 çubuk var . 8GB'a kadar destekler:

resim açıklamasını buraya girin

Bu bir sunucu olduğu için grafikleri gerçekten umursamıyorum. Bu yüzden en düşük seviyeye ayarladım.

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

resim açıklamasını buraya girin

Ancak, Linux sadece 3.19GiB belleği tespit ediyor:

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

E820 haritasına bakarken :

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

Ve biraz matematik yapıyoruz:

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

Hemen hemen aynı cevabı alıyoruz.

Neyi kaçırıyorum?


"PCI adres alanı" argümanını tamamen satın almıyorum. İki 2GB'lık çubuktan birini alarak kurulum ekranında 2048MB gösterilir.

# cat /proc/meminfo
MemTotal:        2058432 kB

Bu 1,96 GB.

Tekrar E820 haritası :

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

Ve matematik ...

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

2GB / 2GB aldım. /proc/cpuinfoişlemcimin 36 bit fiziksel adreslemeyi desteklediğini gösterir. 2 ^ 36 = 64GB, ki buna yakın bile değilim.


# ./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'ta bellek yeniden eşlemenin AÇIK olduğundan emin olun .
David Schwartz

@DavidSchwartz Bunu açmayı denedim ve çekirdek önyüklemeye panikledi. Bunu canlı bir CD ile deneyebilirim.
Jonathon Reinhart

@DavidSchwartz Kesinlikle haklısın. Bellek yeniden eşlemeyi açmak hile yapmış gibi görünüyor. Açılmadan, Memtest86 + ~ 3300 MB bildirir. Açıkken, 4086 MB bildirir. Eğer bir cevap verirsen, memnuniyetle kabul edeceğim.
Jonathon Reinhart

Yanıtlar:


5

Sen Bellek Tekrar Eşleştirme'yi açmanız gerekir ON BIOS içinde. Aksi takdirde, belleği 4GB sınırının üzerinde yeniden eşleştirmez ve bazı bellekler donanım eşlemeleri tarafından kaplanır.


Sorun buydu. Bellek yeniden eşlemeyi açmak hile yapmış gibi görünüyor. Açılmadan, Memtest86 + ~ 3300 MB bildirir. Açıkken, 4086 MB bildirir.
Jonathon Reinhart

Aynı şekilde, Memory Hole Remapping(AMIBIOS) etkinleştirilmeden önce POST yaklaşık 3.3 GiB rapor ederken, DMI yine de her biri 2 GiB'lik iki modül listeleyecektir.
njsg

5

PCI ayrıca adres alanının bir kısmını kullanır. Hem PCI kartlar hem de PCI cihazlar anakarta (yonga seti gibi) yerleştirilmiştir.

Genellikle bu, çok fazla dahili RAM içeren modern bir GPU kullanmasanız bile, 4GB'den sadece 3¼ ila 3½ GB'ın kullanılabileceği anlamına geliyordu.


Bu gerçeği neredeyse görmezden geldim ... Yani 0.8GB mı? Ancak, e820 haritasının üstü 0x100000000 == 1<<32ilginçtir. Öyleyse BIOS neden RAM'in geri kalanını 1 << 32'den eşlemiyor? Bu bir Celeron E3400 ve 64GB için iyi olması gerektiğini /proc/cpuinfosöylüyor address sizes : 36 bits physical, 48 bits virtual. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart

Eski Tyan anakartım için el kitabı, 4GB RAM'i desteklese de, bunların hepsini işletim sistemine maruz bırakmayacağı konusunda beni uyardı. Kullanılan genişletme kartlarına (düz eski PCI, 66Mhz, 64bit) bağlı olarak, yaklaşık 3,3 GB kullanılabilir alan açığa çıkarır. Bunu asla test edemedim, 512MB RAM alabileceğim tek şeydi. (Bu çift CPU anakart hala iki fiziksel CPU kullanmak istediğinde geri döndü. O zamandan beri işler değişmiş olabilir ve PCIe aynı limite sahip olmayabilir. Ancak çoğu anakart hala hem PCI hem de PCIe'ye sahip olabilir).
Hennes

Düzenlememe bakın. Sorun, ya BIOS'un herhangi bir belleği rapor etmeyi reddetmesi 1<<32ya da bu çekirdeğin bunu nasıl anlayacağını bilmemesi.
Jonathon Reinhart

Dahili grafikleriniz tarafından kullanılan paylaşılan belleği düşündünüz mü? Eğer varsa smemkurulu, denemek smem -R 4G -wkullanılabilir / kullanılan belleğin genel bir bakış için.
Izzy

1
@Hennes 32-bit bir sistem olsaydı bu cevap mükemmel olurdu. Ancak 64 bit için değil (36 bit fiziksel bellek adresleme ile).
Jonathon Reinhart

2

Eksik RAM'iniz bellenim tarafından kullanılır:

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

Özetliyor:

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

Görüyorsunuz, 4GB'a kadar çıkıyor. Ve işte eksik bildirdiğiniz ~ 800M:

firmware/hardware            843592          0     843592

Evet, buna şaşırmadım. Soru şu: BIOS neden 800MB ram olduğunu bildirmiyor 0x100000000 (1<<32)? 32 bitlik bir sistemmiş gibi davranıyor.
Jonathon Reinhart

Evet, bu cevabın geçerli olduğunu düşünüyorum, ancak bu son soru hala devam ediyor :-)
Jonathon Reinhart

Peki smem -R 2G -wmakinede sadece 2G ile ne diyor (özellikle "800M" eksik 4G ile bölüm gibi görünüyor), firmware / donanım ile ilgili? Bellenim aniden bu 800M'ye ihtiyaç duymazsa oldukça komik olurdu ...
Izzy

O ilgisi var Could AMI BIOS detected: BIOS may corrupt low RAM, working around it."Bazen BIOS arabası ve yanlış ayrılmış bellek bildiriyor Bu rapor hataları, Memtest gibi hafıza testi yazılımı neden olabilir.". (Sizin e820link itibaren) ve Wikipedia sözler - ? DÜZENLEME: Ah, hayır - bu sadece 800M değil, 64k için hesaplar ...
Izzy

Eve geldiğimde kontrol edebilirim, ama aynı şeyi söyleyeceğini varsayıyorum. 2GB için E820 haritasına bakın. Gözlem yoluyla, ayrılmış / ACPI aralıkları addr alanında (bazıları) daha düşük olması dışında, kabaca aynı görünüyor.
Jonathon Reinhart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.