Sie sollten die dmesg
Werte "Speicher Akb / Bkb verfügbar" wie folgt lesen :
Derzeit steht A zur Verfügung, und die höchste Seitenrahmennummer des Systems multipliziert mit der Seitengröße ist B.
Dies ist von 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()
Gibt die Menge an physischem Speicher zurück, die vom Kernel verwaltet wird und derzeit nicht verwendet wird. max_pfn
ist die höchste Seitenrahmennummer (die PAGE_SHIFT
Verschiebung konvertiert diese in kb). Die höchste Seitenrahmennummer kann (viel) höher sein als erwartet - die vom BIOS durchgeführte Speicherzuordnung kann Lücken enthalten.
Wie viel diese Löcher aufnehmen, wird von der absent_pages
Variablen verfolgt, die als angezeigt wird kB absent
. Dies sollte den größten Unterschied zwischen der zweiten Nummer in der "verfügbaren" Ausgabe und Ihrem tatsächlich installierten RAM erklären.
Sie können für grep BIOS-e820
in dmesg
„sehen“ diese Löcher. Dort wird die Speicherzuordnung angezeigt (ganz oben in der dmesg
Ausgabe nach dem Start). Sie sollten in der Lage sein zu sehen, an welchen physischen Adressen Sie über echten, verwendbaren RAM verfügen.
(Andere x86-Macken und reservierte Speicherbereiche machen wahrscheinlich den Rest aus - ich kenne die Details dort nicht.)
MemTotal
in /proc/meminfo
zeigt an, dass RAM zur Verwendung verfügbar ist. Gleich am Ende der Startsequenz gibt der Kernel init
Daten frei, die er nicht mehr benötigt, sodass der gemeldete Wert /proc/meminfo
etwas höher sein kann als der Wert, den der Kernel während der ersten Teile der Startsequenz ausgibt.
( meminfo
Wird indirekt totalram_pages
für diese Anzeige verwendet. Für x86_64 wird dies ebenfalls berechnet, arch/x86/mm/init_64.c
über free_all_bootmem()
das sich selbst mm/bootmem.c
Nicht-NUMA-Kernel befinden.)