Sono stati rilevati solo 3,2 GB di RAM da 4 GB su Debian a 64 bit


9

Sto eseguendo 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

Ho 2 stick compatibili da 2 GB di DDR2 nella mia scheda madre G31M-S . Supporta fino a 8 GB:

inserisci qui la descrizione dell'immagine

Dato che questo è un server, non mi interessa molto la grafica. Quindi l'ho impostato sul più basso.

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

inserisci qui la descrizione dell'immagine

Tuttavia, Linux rileva solo 3,19GiB di memoria:

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

Guardando la mappa 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)

E facendo un po 'di matematica:

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

Abbiamo quasi la stessa risposta.

Cosa mi sto perdendo?


Non sto comprando completamente l'argomento "PCI address space". Prendendo uno dei due 2GB sporgenti, la schermata di configurazione mostra 2048 MB.

# cat /proc/meminfo
MemTotal:        2058432 kB

Sono 1,96 GB.

Mappa E820 di nuovo:

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

E la matematica ...

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

Quindi ho ottenuto 2 GB / 2 GB. /proc/cpuinfomostra che il mio processore supporta l'indirizzamento fisico a 36 bit. 2 ^ 36 = 64 GB, a cui non sono nemmeno vicino.


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

Assicurarsi che il remapping della memoria sia attivo nel BIOS.
David Schwartz,

@DavidSchwartz Ho provato ad accenderlo e il kernel è andato nel panico all'avvio. Potrei provarlo con un CD live però.
Jonathon Reinhart,

@DavidSchwartz Hai assolutamente ragione. L'attivazione del remapping della memoria sembra aver fatto il trucco. Senza l'accensione, Memtest86 + riporta ~ 3300 MB. Quando è acceso, riporta 4086 MB. Se darai una risposta, accetterò volentieri.
Jonathon Reinhart,

Risposte:


5

È necessario attivare Memoria rimappatura ON nel BIOS. Altrimenti, non rimappa la memoria oltre il limite di 4 GB e parte della memoria sarà coperta da mappature hardware.


Questo era il problema. L'attivazione del remapping della memoria sembra aver fatto il trucco. Senza l'accensione, Memtest86 + riporta ~ 3300 MB. Quando è acceso, riporta 4086 MB.
Jonathon Reinhart,

Lo stesso, prima di abilitare Memory Hole Remapping(AMIBIOS), il POST riportava circa 3,3 GiB, mentre DMI elencava ancora due moduli da 2 GiB ciascuno.
njsg,

5

PCI utilizza anche parte dello spazio degli indirizzi. Entrambe le schede PCI e i dispositivi PCI sono integrati nella scheda madre (come il chipset).

Di solito questo significava che su 4 GB erano disponibili solo da 3¼ a 3½ GB, anche se non si utilizzava una GPU moderna con molta RAM integrata.


Ho praticamente ignorato questo fatto ... intendo 0,8 GB? Tuttavia, la parte superiore della mappa e820 è 0x100000000 == 1<<32, che è interessante. Quindi perché il BIOS non sta mappando il resto della RAM sopra 1 << 32? È un Celeron E3400 e /proc/cpuinfodice address sizes : 36 bits physical, 48 bits virtualche dovrebbe essere buono per 64 GB. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart il

Il manuale della mia vecchia scheda madre Tyan è l'unico che sembrava avvertirmi che sebbene supportasse 4 GB di RAM, non avrebbe mai esposto tutto ciò al sistema operativo. A seconda delle schede di espansione utilizzate (semplicemente vecchio PCI, 66Mhz, 64 bit) esporrà circa 3,3 GB di spazio utilizzabile. Non ho mai potuto provarlo, 512 MB di RAM erano tutto ciò che potevo permettermi. (Questo era quando questa scheda madre a doppia CPU significava ancora usare due CPU fisiche. Le cose potrebbero essere cambiate da allora e PCIe potrebbe non avere lo stesso limite. Ma la maggior parte delle schede madri ha ancora sia PCI che PCIe).
Hennes,

Vedi la mia modifica. Penso che il problema sia che il BIOS si rifiuta di segnalare qualsiasi memoria 1<<32, o questo kernel non sa come capirlo.
Jonathon Reinhart,

Hai considerato la memoria condivisa utilizzata dalla tua grafica interna? Se haismem installato, provare smem -R 4G -wper una panoramica generale della memoria disponibile / utilizzata.
Izzy,

1
@Hennes Questa risposta avrebbe perfettamente senso se si trattasse di un sistema a 32 bit. Ma non per 64 bit (con indirizzamento della memoria fisica a 36 bit).
Jonathon Reinhart

2

La RAM mancante viene utilizzata dal 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

Riassumendo:

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

Quindi vedi, somma fino a 4 GB. Ed ecco i ~ 800 M che ritieni mancanti:

firmware/hardware            843592          0     843592

Sì, e non ne sono sorpreso. La domanda è: perché il BIOS non riporta 800 MB di RAM sopra 0x100000000 (1<<32)? Si comporta come se fosse un sistema a 32 bit.
Jonathon Reinhart,

Sì, penso che questa risposta sia valida, ma l'ultima domanda rimane :-)
Jonathon Reinhart il

Quindi cosa smem -R 2G -wdice con solo 2G nella macchina (soprattutto per quanto riguarda il firmware / hardware, in quanto quella sembra essere la sezione in cui la "800M mancante" è andata con 4G)? Sarebbe abbastanza divertente se all'improvviso il firmware non avesse più bisogno di quegli 800M ...
Izzy,

Potrebbe avere a che fare con AMI BIOS detected: BIOS may corrupt low RAM, working around it.- e l'osservazione di Wikipedia (dal tuo e820link) "A volte il BIOS è difettoso e riporta erroneamente la memoria riservata. Ciò può causare la segnalazione di errori da parte di software di test della memoria, come Memtest." ? EDIT: Ah, no - ciò rappresenterebbe solo 64k , non 800M ...
Izzy

Posso controllare quando torno a casa, ma suppongo che dirà la stessa cosa. Guarda la mappa E820 per 2 GB. Per osservazione, sembra più o meno lo stesso, tranne che gli intervalli riservati / ACPI sono più bassi nello spazio addr (alcuni di essi).
Jonathon Reinhart,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.