为什么Linux显示的内存比我实际安装的内存多?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么Linux显示的内存比我实际安装的内存多?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1845字,纯文字阅读大概需要3分钟。
内容图文
![为什么Linux显示的内存比我实际安装的内存多?](/upload/InfoBanner/zyjiaocheng/959/d43a6e8dec5148eda6d57703537e4b08.jpg)
我知道交换 – 这个问题与此无关.在dmesg中,Linux(x86-64)内核告诉我这个内存有多少:
[ 0.000000] Memory: 3890880k/4915200k available (6073k kernel code, 861160k absent, 163160k reserved, 5015k data, 1596k init)
cat / proc / meminfo告诉我,我有
MemTotal: 3910472 kB
根据我的计算,我认为我应该有4 * 1024 * 1024 = 4194304k RAM.这比上面的dmesg线中的第二个数字要小!
这些不同的数据有什么关系?
顺便说一句,uname -a输出:
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
解决方法:
你应该读取dmesg值“Memory Akb / Bkb available”:
There is A available for use right now, and the system’s highest page frame number multiplied by the page size is B.
这是来自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.这应解释“可用”输出中的第二个数字与实际安装的RAM之间的大部分差异.
您可以在dmesg中使用BIOS-e820来“看到”这些漏洞.存储器映射显示在那里(启动后在dmesg输出的顶部).您应该能够看到您拥有真实可用RAM的物理地址.
(其他x86怪癖和保留的内存区域可能占其余部分 – 我不知道那里的细节.)
/ proc / meminfo中的MemTotal表示可以使用的RAM.在引导序列结束时,内核释放它不再需要的init数据,因此/ proc / meminfo中报告的值可能比内核在引导序列的初始部分打印出的值高一点.
(meminfo间接使用totalram_pages作为该显示.对于x86_64,这也是通过free_all_bootmem()在arch / x86 / mm / init_64.c中计算的,对于非NUMA内核,它本身在mm / bootmem.c中.)
内容总结
以上是互联网集市为您收集整理的为什么Linux显示的内存比我实际安装的内存多?全部内容,希望文章能够帮你解决为什么Linux显示的内存比我实际安装的内存多?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。