Dlaczego mój system pokazuje tylko 3,2 GiB pamięci RAM, skoro zdecydowanie mam 4.0 GiB


12

Mam zainstalowane 2x2 pamięci RAM GiB.
Uruchomienie memtest86z menu rozruchowego grub potwierdza to .. memtest86 nie zgłasza błędów.

Jednak w każdy sposób sprawdzam moją dostępną pamięć w działającym systemie Ubuntu 10.04, zgłasza ona jedynie około 3,2 GiB.

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

Kto ma moją brakującą pamięć RAM?

Zaktualizowano informacje: Właśnie teraz uruchomiłem podwójnie w innej wersji Ubuntu 10.04 na tym samym sprzęcie (zapomniałem, że zainstalowałem go wiele miesięcy temu, na wypadek awarii):) .... Zgłasza 3.9 GiB, przez System Monitor...

Moje najnowsze /var/log/messagesinformacje zamieściłem na stronie http://pastebin.ubuntu.com/629246/


Jakiego jądra używasz? O ile nie użyjesz „bigmem” lub „x86-64”, możesz nie mieć całej pamięci RAM widocznej dla systemu. Ponadto niektóre opcje systemu BIOS wpływają na widoczność całkowitej pamięci RAM. Skorzystaj z dziennika / var / log / messages (na samym początku), aby zobaczyć, jak zostały zmapowane regiony pamięci.
mbaitoff,

Nie wiem, jak interpretować /var/log/messages, ale zamieściłem tutaj moje najnowsze informacje: pastebin.ubuntu.com/629246 .. może ktoś może zrobić z tego
łeb w łeb

Czy ten dziennik pochodzi z systemu zgłoszonego w wersji 3.2 Gb, czy w systemie zgłoszonym w wersji 3.9 Gb?
mbaitoff,

Linie 61,62 z dziennika pokazują dostępne 3,2 GB.
mbaitoff,

Mam Ubuntu 10.04 z x86-64 (64-bitowy) zainstalowany na maszynie 4Gb. Zgłasza 3964 Mb („free-m”), więc druga konfiguracja poprawnie wykrywa ilość pamięci RAM. Sprawdź, jaki rodzaj jądra jest zainstalowany w drugim systemie.
mbaitoff,

Odpowiedzi:


19

32-bitowa przestrzeń adresowa oznacza, że ​​masz miejsce na 4 GB adresów. Idealnie, jądro lubi mapować całą pamięć fizyczną, całą pamięć bieżącego zadania i całą własną pamięć. Jeśli sama pamięć fizyczna zajmuje wszystkie dostępne 4 GB, to nie zadziała. Tak więc pamięć fizyczna jest podzielona na niską pamięć, która jest cały czas mapowana, i pamięć wysoką, którą należy mapować podczas używania. O ile nie korzystasz z łatanego jądra, w architekturze ix86 128 MB przestrzeni adresowej jest przeznaczone na kod jądra i struktury danych, a 896 MB jest przeznaczone na mapowanie pamięci fizycznej (łącznie 1 GB).

Czytanie w tle na temat złożoności zarządzania pamięcią, gdy przestrzeń adresowa nie jest wygodnie większa niż całkowita pamięć:

Fragmenty dzienników jądra:

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

Tutaj masz 887 MB wolnej pamięci: teoretycznie maksymalnie 896 MB minus kilka MB buforów DMA (strefy pamięci używane do komunikacji z urządzeniami sprzętowymi).

Z Twojej pamięci fizycznej 3328 MB jest mapowane na adresy poniżej 4 GB, a 768 MB jest mapowane na adresy powyżej 4 GB (zakres 0x100000000–0x130000000). Nie dostajesz dostępu do tych 768 MB, co wyjaśnia, dlaczego masz tylko 3242 MB (4096 MB pamięci RAM minus 768 MB niedostępne minus 9 MB buforów DMA minus 75 MB używanych przez samo jądro dla kodu i danych). Nie wiem, dlaczego BIOS mapuje część pamięci RAM powyżej znaku 4 GB, ale jako punkt danych przesyłam to z komputera z 4 GB pamięci RAM, która podobnie ma pamięć RAM zamapowaną na 0x100000000–0x130000000.

Mapowanie pamięci fizycznej powyżej 4 GB wymaga użycia PAE . PAE wiąże się z niewielkim narzutem wydajności (w szczególności wymaga większych struktur danych w menedżerze pamięci), więc nie jest systematycznie włączany. Domyślne jądro Ubuntu jest kompilowane bez obsługi PAE. Uzyskaj -generic-paejądro, Zainstaluj linux-image-generic-pae aby mieć dostęp do 64 GB pamięci RAM.

TL, DR: Linux działa zgodnie z oczekiwaniami. Oprogramowanie układowe nie jest tak pomocne. Uzyskaj jądro z obsługą PAE.


Cóż, to było łatwe ... Dzięki Gilles :) ... zrozumienie dziennika jest zdecydowanie trudniejsze! ... Zainstalowałem linux-image-2.6.32-32-generic-pae, a htopteraz raporty3990 MiB
Peter.O

1
Maszyna mapuje pamięci RAM powyżej znaku 4 GB, dzięki czemu może umieścić pamięć sprzętową, podobnie jak ram wideo, poniżej znaku 4 GB, dzięki czemu mogą być używane przez jądra 32 bitowe bez obsługi pae.
psusi

Przypuszczam, że cała twoja GB powinna być GiB?
weynhamz

@TechliveZheng To jest strona poświęcona technice komputerowej, a nie strona fizyki. Wszystkie moje MB, GB itp. Są rzeczywiście MiB, GiB itp.
Gilles „SO- przestańcie być źli”

1

Być może dzieje się tak, ponieważ architektura twojego Ubuntu to i386 (wersja 32-bitowa). Jaki jest wynik po uruchomieniu uname -a?


uname -a... Linux DT9400 2.6.32-32-generic # 62-Ubuntu SMP Środa 20 kwietnia 21:54:21 UTC 2011 i686 GNU / Linux ... Jednakże, jak wspomniałem w „Zaktualizowanych informacjach:” w moim queston, kolejna 10.04 32-bitowa instalacja z podwójnym uruchomieniem pokazuje 3,9 Gib. Oba systemy z podwójnym uruchomieniem zostały zainstalowane z tej samej płyty CD, ale obecnie działają różne jądra i mają zainstalowane inne programy ... BTW, to nie jest niedawne, Od wielu miesięcy pokazuje 3,2 GiB.
Peter.O,

Oczywiście używasz 32-bitowego jądra („i686”). Nawiasem mówiąc, 3,9 Gb już oznacza 4 Gb, ponieważ część przestrzeni adresowej jest zarezerwowana przez sprzęt.
mbaitoff,

Tak, dzięki mbaitoff, spodziewałbym się trochę pamięci, ale myślę, że 0,8 GiB to za dużo, więc chciałbym się dowiedzieć, co się tutaj dzieje.
Peter.O,

AFAIK Ubuntu może zainstalować jądro PAE, które może używać dużej ilości pamięci RAM nawet na x86
Anton Barkovsky

3
Myślę, że wystarczy zainstalować jądro pae (linux-generic-pae i linux-headers-generic-pae), a jeśli chcesz, usuń ogólne jądro.
Anton Barkovsky,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.