xm list源码分析

简介:

xm list源码分析

XenAPI.py:442 parseServer():


从/etc/xen/xm-config.xml读取配置,得到
serverType: Xen-API
serverURI: http://localhost:9363/
username: me
password: mypassword

python\xen\xm\main.py:2979
    2979: main() 判断是否打印help
    2956: xm_lookup_cmd() 查找命令对应的函数-->xm_list()
    3003:_run_cmd 根据serverType:
        如果Xen-API:
             server = XenAPI.Session(serverURI)
            parseAuthentication()
            *server.login_with_password()
        如果XMLRPC:
                      server = ServerProxy(serverURI) <------  xmlrpclib.ServerProxy
        跳到xm_list()执行
       
python\xen\xm\main.py:853 xm_list()
    命令行参数解析
    如果show_vcpus --> 跳到xm_vcpu_list()
    801:getDomains()
       如果 Xen-API:
            *所有虚机: server.xenapi.VM.get_all_records()
            *所有虚机的Metrics: server.xenapi.VM_metrics.get_all_records()
            根据二者得到所有虚机的信息
            根据参数中的虚机名称过滤并转换为sxp格式 map2sxp
       如果 XMLRPC:
            server.xend.domain(dom, full)
            或者server.xend.domains_with_state(True, state, full)
    如果--long参数 map(PrettyPrint.prettyprint, doms)
    如果--label参数
             xm_label_list->parse_doms_info->server.xend.security.get_domain_label->输出
            否则:xm_brief_list->parse_doms_info->输出

*server.login_with_password()登陆的过程:           
    getattr(self, 'session.%s' % method)(*params) --> __getattr__ --> xmlrpcclient.ServerProxy.__getattr__(self, name)-->xmlprc服务器执行
   
*所有虚机:server.xenapi.VM.get_all_records()的过程
    通过xm.XenAPI(xmlrpcclient)向服务器发送RPC请求
    XMLPRCServer.py服务器端注册的处理函数server.register_instance(XendAPI.XendAPIAsyncProxy(self.xenapi)) ----->  同步接口??
    通过XendTaskManager创建task并启动,具体的处理在XendAPI中
   
    VM.get_all_records通过_get_all_records():通过VM_get_all()得到所有UUID,再根据UUID和VM_get_record()得到最终的信息  O(N*N)
        VM_get_all():XendDomain.instance().list('all')得到所有UUID
                  更新domains(需要更新Xen Store Daemon中的数据)
                  循环遍历domains和managed_domains,得到所有虚机的UUID
        VM_get_record(): XendDomain.instance().get_vm_by_uuid()
                  循环遍历domains和managed_domains,如果uuid一致,则输出
    注: domains和managed_domains信息有重合,这儿本可以直接用uuid作为key来得到字典的values,但是程序里面却用循环遍历values再比较uuid。难道values中存放的uuid与作为key的uuid不一致??
   
*VM_metrics类的请求被转发给XendVMMetrics
    调用XendVMMetrics的所有get_*方法合并得到Metrics

相关类:
    VM: A virtual machine (or ’guest’)
    VM metrics:The metrics associated with a VM

libxc
libxc(libxenctrl):libxc是一个C语言库,它提供了一些简单易用的API,使用户程序可以方便的和Hypervisor进行通信。主要封装了dom0中的/proc/xen/privcmd,/dev/xen/evtchn以及/dev/xen/gntdev提供的IOCTL接口。
本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2011/11/27/2265053.html,如需转载请自行联系原作者

相关文章
|
C语言 C++
【C++从0到王者】第十五站:list源码分析及手把手教你写一个list(下)
【C++从0到王者】第十五站:list源码分析及手把手教你写一个list
89 0
|
存储 编译器 C语言
【C++从0到王者】第十五站:list源码分析及手把手教你写一个list(上)
【C++从0到王者】第十五站:list源码分析及手把手教你写一个list
76 0
|
安全 Java 索引
源码分析系列教程(09) - 手写List框架
源码分析系列教程(09) - 手写List框架
47 0
|
Java
java读源码 之 list源码分析(LinkedList)
java读源码 之 list源码分析(LinkedList)
115 0
java读源码 之 list源码分析(LinkedList)
|
存储 安全 Java
Java容器 | 基于源码分析List集合体系
List集合体系应该是日常开发中最常用的API,而且通常是作为面试压轴问题(JVM、集合、并发),集合这块代码的整体设计也是融合很多编程思想,对于程序员来说具有很高的参考和借鉴价值。
103 0
Java容器 | 基于源码分析List集合体系
|
存储 缓存 Java
java读源码 之 list源码分析(ArrayList)---JDK1.8
java读源码 之 list源码分析(ArrayList)---JDK1.8
76 0
|
消息中间件 设计模式 NoSQL
Redis 源码分析列表对象(z_list)
Redis 源码分析列表对象(z_list)
305 0
Redis 源码分析列表对象(z_list)
|
NoSQL Redis
Redis 源码分析链表(list)
Redis 源码分析链表(list)
154 0
Redis 源码分析链表(list)
|
存储 Java 索引
List集合源码分析
  ArrayList底层数据结构是一个数组,查询元素速度快,增删速度稍慢   (1)DEFAULT_CAPACITY: 表示数组的初始大小,默认10   (2)size: 表示当前数组的大小
105 0
|
存储 安全
List中的ArrayList和LinkedList源码分析(二)
List是在面试中经常会问的一点,在我们面试中知道的仅仅是List是单列集合Collection下的一个实现类, List的实现接口又有几个,一个是ArrayList,还有一个是LinkedList,还有Vector。这次我们就来看看这三个类的源码。
List中的ArrayList和LinkedList源码分析(二)