您的位置:首页 > 其它

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐