GNU/Linux >> Znalost Linux >  >> Linux

Proč můj systém ukazuje jen 3,2 GiB RAM, když mám určitě 4,0 GiB

32bitový adresní prostor znamená, že máte prostor pro 4 GB adres. V ideálním případě by jádro rádo mohlo mapovat veškerou fyzickou paměť, veškerou paměť aktuální úlohy a veškerou svou vlastní paměť. Pokud samotná fyzická paměť zabere všechny dostupné 4 GB, nebude to fungovat. Fyzická paměť je tedy rozdělena na nízkou paměť, která je mapována neustále, a vysokou paměť, která musí být mapována, když se používá. Pokud nepoužíváte opravené jádro, na architektuře ix86 je 128 MB adresního prostoru věnováno kódu jádra a datovým strukturám a 896 MB je věnováno mapování fyzické paměti (celkem 1 GB).

Čtení na pozadí o složitosti správy paměti, když váš adresní prostor není pohodlně větší než celková paměť:

  • Velká paměť na wiki správce paměti Linux
  • Velká paměť v linuxovém jádře na Kernel Trap
  • Kapitola mapování paměti v LDD3

Výňatky z vašich protokolů 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

Zde máte 887 MB nízké paměti:teoretické maximum 896 MB mínus několik MB vyrovnávací paměti DMA (zóny paměti používané ke komunikaci s hardwarovými zařízeními).

Z vaší fyzické paměti je 3328 MB mapováno na adresy pod 4 GB a 768 MB je mapováno na adresy nad 4 GB (rozsah 0x100000000–0x130000000). Nedostanete přístup k těmto 768 MB, což vysvětluje, proč máte k dispozici pouze 3 242 MB (4 096 MB RAM minus 768 MB nepřístupných minus 9 MB vyrovnávací paměti DMA minus 75 MB, které používá samotné jádro pro kód a data). Nevím, proč BIOS mapuje nějakou RAM nad 4GB, ale jako datový bod to posílám z PC se 4GB RAM, který má podobně RAM mapovanou na 0x100000000–0x130000000.

Mapování fyzické paměti nad 4 GB vyžaduje použití PAE. PAE představuje malou výkonovou režii (zejména vyžaduje větší datové struktury ve správci paměti), takže není systematicky povolen. Výchozí jádro Ubuntu je zkompilováno bez podpory PAE. Získejte -generic-pae jádro pro přístup až k 64 GB paměti RAM.

TL,DR:Linux funguje podle očekávání. Firmware není tak užitečný. Získejte jádro s podporou PAE.


Linux
  1. Co je POSIX? Proč je to pro uživatele Linuxu/UNIXu důležité?

  2. Linux – Proč Linux ukazuje více i méně paměti, než jsem fyzicky nainstaloval?

  3. Linux – Proč Linux umožňuje „init=/bin/bash“?

  1. Linux – systém zamrzne, když mu dojde paměť?

  2. Proč příkaz free a dmidecode ukazují různé hodnoty pro RAM?

  3. Systém zamrzne, když mu dojde paměť

  1. Kolik RAM používá jádro?

  2. Proč se MemTotal v /proc/meminfo mění?

  3. Proč slabtop -o vrací pouze prvních 23 řádků, když je příkaz rourou?