xm list源碼分析

來源:互聯網
上載者:User

xm list源碼分析

XenAPI.py:442 parseServer():


從/etc/xen/xm-config.xml讀取配置,得到
serverType: Xen-APIserverURI: http://localhost:9363/username: mepassword: 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介面。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.