![Linux 2.6.18 和 2.6.32 的 xen 客户机中分配的内存差异](https://linux22.com/image/614653/Linux%202.6.18%20%E5%92%8C%202.6.32%20%E7%9A%84%20xen%20%E5%AE%A2%E6%88%B7%E6%9C%BA%E4%B8%AD%E5%88%86%E9%85%8D%E7%9A%84%E5%86%85%E5%AD%98%E5%B7%AE%E5%BC%82.png)
有人可以解释一下为什么相同配置的 Guest 上的可用内存存在差异:
虚拟机管理程序:xen 4.2 64 位
VM1:Centos 5.7 带有 2.6.18-274.el5xen,
xen 分配的内存与客户机内部的内存完全相同 524288k (512m)
free -k
total used free shared buffers cached
Mem: 524288 445004 79284 0 18040 182652
-/+ buffers/cache: 244312 279976
Swap: 524280 0 524280
尽管表现出
" Memory: 500984k/524288k available (2533k kernel code, 23212k reserved, 1746k data, 196k init) "
dmesg:http://pastebin.com/FmVRniLJ
问题1:
这里的为什么 free 显示了精确的内存,而 dmesg clear 显示内核代码为 2.5mb,保留为 23mb。
VM2:redhat6.0 带2.6.32
free -k
total used free shared buffers cached
502224 122064 380160 0 7636 32648
对于相同资源,带有 pvopskernel 的 RHEl6.0 显示 502224k。
问题2:
造成这种现象的原因可能与 pvops 内核(支持 xen 的 linux 内核)有关吗?
答案1
Q1:可能被崩溃内核使用(?)
Q2:我没有在 SLES11 SP2 DomU(也是 Linux 3.0 内核,没有 pvops)上看到这种行为。
我从 dmesg 中看到的是 Ubuntu 上的 RAM 磁盘 - 这个磁盘以后可能不会被释放?
这里不确定,因为您的dmesg
输出仅显示启动过程的 XEN 部分,而不是操作系统以下的“正常”启动过程。
答案2
问题 1:
为什么 free 显示了精确的内存,而 dmesg clear 显示内核代码为 2.5mb,保留为 23mb。
我不确定你的解释是否正确。free
显示总共 524288k, 也是如此dmesg
。dmesg
显示在启动时,内核和相关预留已使用大约 25m,剩余 500984k 可用。稍后,当您运行 时free
,还有其他程序正在运行,因此可用内存较少。但两者在 VM1 中报告的总数相同。
问题2:
造成这种行为的原因可能是什么?这与 pvops 内核(支持 xen 的 linux 内核)有关,还是因为 Linux 3.0+ 内存管理中的任何变化。
我思考你问的是这两个虚拟机为何不同?我的答案是:“信息不足”。两台虚拟机报告不同信息的原因有很多,但都不一定是因为它们是 Xen 中的 DomU(我怀疑您在裸机或 VMware 等上也会遇到类似的差异):
- 它们有不同数量的 CPU
- 它们使用不同的启动字符串(VM1 有
ro root=/dev/VolGroup00/LogVol00 console=xvc0 graphical utf8
,VM2 有root=UUID=ef8a64ee-140d-46b5-8061-231d81e1c7a0 ro console=hvc0 quiet splash $vt_handoff
- 内核可能使用截然不同的默认值进行编译(而且很可能如此,因为 VM1 基于 RedHat,而 VM2 基于 Debian)
答案3
我不知道你是否这样做了,但如果你没有尝试检查你的虚拟机内存参数,并使用“xl list”检查你的虚拟机的内存预留
http://xenbits.xen.org/docs/4.2-testing/man/xl.cfg.5.html
谢谢
答案4
是的,正如我所猜测的,这是 Linux 的 xen 客户机的限制。到目前为止,您使用的内核似乎只能检测到 dom0 的 32 GB 内存。