GNU/Linux >> Znalost Linux >  >> Linux

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

Vím o swapu – o tom tato otázka není. V dmesg mi linuxové (x86-64) jádro říká toto o tom, kolik paměti mám:

[    0.000000] Memory: 3890880k/4915200k available (6073k kernel code, 861160k absent, 163160k reserved, 5015k data, 1596k init)

cat /proc/meminfo říká mi, že mám

MemTotal:        3910472 kB

A podle mých výpočtů si myslím, že bych měl mít přesně 4*1024*1024=4194304k RAM. Což je způsob menší než druhé číslo v řádku dmesg výše!

Co je se všemi těmito různými figurami?

Mimochodem, uname -a výstupy:

Linux pavilion 3.2.2-1.fc16.x86_64 #1 SMP Thu Jan 26 03:21:58 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Přijatá odpověď:

Měli byste si přečíst dmesg hodnoty „Memory Akb/Bkb available“ jako:

Právě teď je k dispozici A a nejvyšší číslo rámce stránky systému vynásobené velikostí stránky je B.

Toto je z arch/x86/mm/init_64.c :

printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
                 "%ldk absent, %ldk reserved, %ldk data, %ldk init)n",
                 nr_free_pages() << (PAGE_SHIFT-10),
                 max_pfn << (PAGE_SHIFT-10),
                 codesize >> 10,
                 absent_pages << (PAGE_SHIFT-10),
                 reservedpages << (PAGE_SHIFT-10),
                 datasize >> 10,
                 initsize >> 10);

nr_free_pages() vrací množství fyzické paměti spravované jádrem, která se aktuálně nepoužívá. max_pfn je nejvyšší číslo rámce stránky (PAGE_SHIFT shift to převede na kb). Nejvyšší číslo rámce stránky může být (mnohem) vyšší, než byste mohli očekávat – mapování paměti provedené systémem BIOS může obsahovat díry.
Jak moc tyto díry zabírají, sledují absent_pages proměnná, zobrazena jako kB absent . To by mělo vysvětlit většinu rozdílu mezi druhým číslem v „dostupném“ výstupu a vaší skutečnou nainstalovanou RAM.

Můžete sáhnout po BIOS-e820 v dmesg „vidět“ tyto díry. Zde se zobrazí mapa paměti (vpravo v horní části dmesg výstup po spuštění). Měli byste být schopni vidět, na jakých fyzických adresách máte skutečnou, použitelnou RAM.
(Zbytek pravděpodobně tvoří jiné x86 vrtochy a vyhrazené oblasti paměti – tam podrobnosti neznám.)

MemTotal v /proc/meminfo označuje RAM dostupnou k použití. Hned na konci zaváděcí sekvence jádro uvolní init data, která už nepotřebuje, takže hodnota uvedená v /proc/meminfo může být o něco vyšší než to, co jádro vytiskne během počátečních částí zaváděcí sekvence.

Související:Seznam signálů generovaných terminálem (např. Ctrl-C -> SIGINT)?

(meminfo nepřímo používá totalram_pages pro ten displej. Pro x86_64 se toto vypočítá v arch/x86/mm/init_64.c také pomocí free_all_bootmem() který je sám o sobě v mm/bootmem.c pro jádra jiná než NUMA.)


Linux
  1. Df říká, že mám o 20 g více místa na disku než Du. Proč??

  2. Linux – Co je velká a nízká paměť v Linuxu?

  3. Linux – Co znamená rozložení paměti virtuálního jádra v Dmesg?

  1. Virtuální počítač s 32bitovým OS CentOS 5 neřeší fyzickou paměť větší než 3 GB

  2. Má jádro Linuxu hlavní funkci?

  3. Co je to Matrox GPU a proč ho má UNIX server mé univerzity?

  1. Proč Linux používá odkládací oddíl místo souboru?

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

  3. Proč Linux potřebuje mít `/dev/cdrom` i `/media/cdrom`?