xm list原始碼分析

2021-07-09 02:11:52 字數 2980 閱讀 3906

xm list原始碼分析

xenapi.py:442 parseserver():

從/etc/xen/xm-config.xml讀取配置,得到

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

libxclibxc(libxenctrl):libxc是乙個c語言庫,它提供了一些簡單易用的api,使使用者程式可以方便的和hypervisor進行通訊。主要封裝了dom0中的/proc/xen/privcmd,/dev/xen/evtchn以及/dev/xen/gntdev提供的ioctl介面。

xm list原始碼分析

xenapi.py 442 parseserver 從 etc xen xm config.xml讀取配置,得到 2979 main 判斷是否列印help 2956 xm lookup cmd 查詢命令對應的函式 xm list 3003 run cmd 根據servertype 如果xen api...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...