xm list和xl list显示内存不一致的问题
2012-04-13 17:16
405 查看
xm list和xl list显示内存不一致的问题
在xen4.1.2上一台windows虚机碰到这个问题:
# xm list test6
Name ID Mem VCPUs State Time(s)
test6 16 512 2 -b---- 158.0
# xl list test6
Name ID Mem VCPUs State Time(s)
test6 16 2048 2 -b---- 158.6
同一台虚机,用两个不同的工具查看,内存居然差了将近2GB。
由于xm和xl的实现机制不同,所以从源码分析开始,分别查看xm list和xl list的源码
xm list:
前文(http://www.cnblogs.com/feisky/archive/2011/11/27/2265053.html)已经分析过xm list的源码,它得到的内存是xend和xenstore中的内存(两者总是保持一致)
xenstore中的内存可以通过下面的命令读出:
xenstore-read /vm/[uuid]/memory
xl list:
==> xl.c::main() --> cmdtable_lookup() --> main_list()
==> xl_cmdimpl.c::main_list()
==> libxl_domain_info(&ctx, &info_buf, domid);
==> xc_domain_getinfolist(ctx->xch, domid, 1, &xcinfo)
==> xcinfo2xlinfo(&xcinfo, info_r)
==> xlinfo->current_memkb = PAGE_TO_MEMKB(xcinfo->tot_pages);
==> xc_domain_getinfolist(ctx->xch, domid, 1, &xcinfo);
可以看到xl list最终是通过XEN_SYSCTL_getdomaininfolist超级调用实现的
==> xen/common/sysctl.c::do_sysctl()
==> xen/common/domctl.c::getdomaininfo(d, &info)
info->tot_pages = d->tot_pages;
info->max_pages = d->max_pages;
info->shr_pages = atomic_read(&d->shr_pages);
info->shared_info_frame = mfn_to_gmfn(d, __pa(d->shared_info)>>PAGE_SHIFT);
可以看出,xl list得到的是hypervisor为该domain分配的内存。
通常情况下hypervisor为该domain分配的内存比xend传进去的内存多2MB(在xen3.4.3上也有同样的问题,多余的2MB应该是hypervisor占用)
[root@localhost ~]# xm li test6
Name ID Mem VCPUs State Time(s)
test6 21 512 2 -b---- 79.4
[root@localhost ~]# xl list test6
Name ID Mem VCPUs State Time(s)
test6 21 514 2 -b---- 79.4
上面碰到的问题是由于虽然通过xm mem-set为虚机重新调整了内存,新的内存值写入到了xend和xenstore中,但hypervisor并没有立即为该虚机ballon内存。此时,如果多次执行xl list可以看到test6虚机的内存一点点减少,直至514MB。
在xen4.1.2上一台windows虚机碰到这个问题:
# xm list test6
Name ID Mem VCPUs State Time(s)
test6 16 512 2 -b---- 158.0
# xl list test6
Name ID Mem VCPUs State Time(s)
test6 16 2048 2 -b---- 158.6
同一台虚机,用两个不同的工具查看,内存居然差了将近2GB。
由于xm和xl的实现机制不同,所以从源码分析开始,分别查看xm list和xl list的源码
xm list:
前文(http://www.cnblogs.com/feisky/archive/2011/11/27/2265053.html)已经分析过xm list的源码,它得到的内存是xend和xenstore中的内存(两者总是保持一致)
xenstore中的内存可以通过下面的命令读出:
xenstore-read /vm/[uuid]/memory
xl list:
==> xl.c::main() --> cmdtable_lookup() --> main_list()
==> xl_cmdimpl.c::main_list()
==> libxl_domain_info(&ctx, &info_buf, domid);
==> xc_domain_getinfolist(ctx->xch, domid, 1, &xcinfo)
==> xcinfo2xlinfo(&xcinfo, info_r)
==> xlinfo->current_memkb = PAGE_TO_MEMKB(xcinfo->tot_pages);
==> xc_domain_getinfolist(ctx->xch, domid, 1, &xcinfo);
可以看到xl list最终是通过XEN_SYSCTL_getdomaininfolist超级调用实现的
==> xen/common/sysctl.c::do_sysctl()
==> xen/common/domctl.c::getdomaininfo(d, &info)
info->tot_pages = d->tot_pages;
info->max_pages = d->max_pages;
info->shr_pages = atomic_read(&d->shr_pages);
info->shared_info_frame = mfn_to_gmfn(d, __pa(d->shared_info)>>PAGE_SHIFT);
可以看出,xl list得到的是hypervisor为该domain分配的内存。
通常情况下hypervisor为该domain分配的内存比xend传进去的内存多2MB(在xen3.4.3上也有同样的问题,多余的2MB应该是hypervisor占用)
[root@localhost ~]# xm li test6
Name ID Mem VCPUs State Time(s)
test6 21 512 2 -b---- 79.4
[root@localhost ~]# xl list test6
Name ID Mem VCPUs State Time(s)
test6 21 514 2 -b---- 79.4
上面碰到的问题是由于虽然通过xm mem-set为虚机重新调整了内存,新的内存值写入到了xend和xenstore中,但hypervisor并没有立即为该虚机ballon内存。此时,如果多次执行xl list可以看到test6虚机的内存一点点减少,直至514MB。
相关文章推荐
- xm list和xl list显示内存不一致的问题
- 解决UIImage显示方向和内存方向不一致的问题
- php,session验证码不一致,慢半拍,老显示上次验证码问题之完美解决(共享验证码代码)
- 解决ListView1的界面数据与内存不一致问题,将内存数据更新到界面上
- Android中dumpsys meminfo与/proc/meminfo获取空闲内存不一致的问题
- 空格&nbsp在不同浏览器中显示距离不一致问题解决方法
- SenchaTouch2中list组件无法绑定存储或者绑定后仍旧无法显示数据问题解决
- Excel2013 打开文档 显示 内存或磁盘空间不足 无法再次打开或保存 的问题
- 每日一发Python---python list转字符串会显示u'的问题
- 解决 WinForm 中 TreeView 的 StateImageList 实际显示大小无法改变的问题
- 空格 在不同浏览器中显示距离不一致问题解决方法
- Android 有录音文件,卸载SD卡后,手机内存中的录音文件不显示问题分析与修改
- 斯坦福课程之storyboard与模拟器显示不一致的问题
- linux显示git commit id,同时解决insmod模块时版本不一致导致无法加载问题
- qml中图片格式和后缀不一致时导致图片不显示的问题(ios and android)
- 如何使用 BindingSource 绑定 ListBox,同时解决绑定 List<T> 后修改数据源不能同时刷新界面显示的问题
- 关于list control不显示数据或数据显示不全问题
- ListView加载list集合中数据从后到前显示问题
- 通用解决方案:解决NHibernate SELECT 多表查询结果List绑定控件显示问题。
- list-style样式不显示问题