zoukankan      html  css  js  c++  java
  • 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接口。
  • 相关阅读:
    Maven3路程(五)用Maven创建Hibernate项目
    Eclipse中通过Hibernate Tools插件实现从数据库逆向生成Hibernate带注解的实体类
    Maven3路程(三)用Maven创建第一个web项目(1)
    jquery下载所有版本(实时更新)
    Oracle读取Blob数据-通过hibernate
    使用以下代码可以插入BLOB类型的图片或pdf文档到Oracle数据库中:
    Intellij IDEA系列 --GIT的初步使用
    java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案
    idea如何安装使用jetty runner
    IntelliJ IDEA下SVN的配置及使用说明
  • 原文地址:https://www.cnblogs.com/feisky/p/2265053.html
Copyright © 2011-2022 走看看