आपको dmesg
"मेमोरी अकब / बीएक्सबी उपलब्ध" मूल्यों को पढ़ना चाहिए :
अभी उपयोग के लिए ए उपलब्ध है, और सिस्टम का उच्चतम पृष्ठ फ़्रेम संख्या पृष्ठ आकार से गुणा किया जाता है।
यह इस प्रकार है 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()
कर्नेल द्वारा प्रबंधित भौतिक मेमोरी की मात्रा लौटाता है, जो वर्तमान में उपयोग में नहीं है। max_pfn
उच्चतम पृष्ठ फ़्रेम संख्या है (यह PAGE_SHIFT
शिफ्ट को kb में परिवर्तित करता है)। उच्चतम पृष्ठ फ़्रेम संख्या आपकी अपेक्षा से बहुत अधिक हो सकती है - BIOS द्वारा की गई मेमोरी मैपिंग में छेद हो सकते हैं।
इन छिद्रों को कितना ऊपर ले जाया जाता है absent_pages
, यह चर द्वारा ट्रैक किया जाता है, जैसा कि प्रदर्शित किया गया है kB absent
। यह "उपलब्ध" आउटपुट में दूसरे नंबर और आपके वास्तविक, स्थापित रैम के बीच के अंतर को स्पष्ट करना चाहिए।
आप के लिए grep सकते BIOS-e820
में dmesg
करने के लिए "देख" इन छिद्रों। मेमोरी मैप वहां प्रदर्शित होता है ( dmesg
बूट के बाद आउटपुट के शीर्ष पर )। आपको यह देखने में सक्षम होना चाहिए कि आपके पास वास्तविक, उपयोग करने योग्य रैम में कौन से पते हैं।
(अन्य x86 quirks और आरक्षित मेमोरी क्षेत्र संभवतः बाकी के लिए जिम्मेदार हैं - मुझे वहां विवरण नहीं पता है।)
MemTotal
/proc/meminfo
इंगित करता है कि RAM उपयोग के लिए उपलब्ध है। बूट अनुक्रम के अंत में, कर्नेल init
डेटा को मुक्त करता है, उसे किसी भी अधिक की आवश्यकता नहीं होती है, इसलिए /proc/meminfo
बूट अनुक्रम के प्रारंभिक भागों के दौरान कर्नेल प्रिंट करता है, की तुलना में रिपोर्ट किया गया मान थोड़ा अधिक हो सकता है।
( उस प्रदर्शन के लिए meminfo
अप्रत्यक्ष रूप से उपयोग करता है totalram_pages
। x86_64 के लिए, यह उस गणना के arch/x86/mm/init_64.c
माध्यम free_all_bootmem()
से होता है, जिसके माध्यम से स्वयं mm/bootmem.c
गैर-एनयूएमए कर्नेल के लिए है।)