Anda harus membaca dmesg
nilai "Memory Akb / Bkb available" sebagai:
Ada A yang tersedia untuk digunakan sekarang, dan nomor bingkai halaman sistem tertinggi dikalikan dengan ukuran halaman adalah B.
Ini dari 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()
mengembalikan jumlah memori fisik, yang dikelola oleh kernel, yang saat ini tidak digunakan. max_pfn
adalah nomor bingkai halaman tertinggi ( PAGE_SHIFT
pergeseran mengubahnya menjadi kb). Nomor bingkai halaman tertinggi dapat (jauh) lebih tinggi dari yang Anda harapkan - pemetaan memori yang dilakukan oleh BIOS dapat berisi lubang.
Berapa banyak lubang ini diambil dilacak oleh absent_pages
variabel, ditampilkan sebagai kB absent
. Ini seharusnya menjelaskan sebagian besar perbedaan antara angka kedua dalam output "tersedia" dan RAM Anda yang sebenarnya terpasang.
Anda dapat BIOS-e820
masuk dmesg
untuk "melihat" lubang ini. Peta memori ditampilkan di sana (tepat di atas dmesg
output setelah boot). Anda harus dapat melihat pada alamat fisik apa Anda memiliki RAM yang nyata dan dapat digunakan.
(Keanehan x86 lainnya dan area memori yang dicadangkan mungkin merupakan penyebab sisanya - saya tidak tahu detailnya di sana.)
MemTotal
dalam /proc/meminfo
menunjukkan RAM tersedia untuk digunakan. Tepat di akhir urutan boot, kernel membebaskan init
data yang tidak diperlukan lagi, sehingga nilai yang dilaporkan /proc/meminfo
bisa sedikit lebih tinggi daripada apa yang dicetak oleh kernel selama bagian awal dari urutan boot.
( meminfo
Menggunakan secara tidak langsung totalram_pages
untuk tampilan itu. Untuk x86_64, ini dihitung arch/x86/mm/init_64.c
juga melalui free_all_bootmem()
yang digunakan mm/bootmem.c
untuk kernel non-NUMA.)