2011/05/21

libvirt指令同步、非同步問題

簡介:libvirt是一個對各品牌hypervisor(如Xen、VMWare、KVM等)抽象化的wrapper,比如xen可以透過xm指令來操作hypervisor,但是一旦底層hypervisor從xen改變成其他品牌(如:KVM),那xm指令就不再適用,所以使用libvirt就可以達到抽象畫的目的。

rhel5-virt

libvirt提供一套介面操作各種hypervisor ()

如果我們透過直接使用virsh(libvirt的shell)分成2個視窗執行create/destroy和list的結果,認為virsh command是使用同步執行的方式,也就是動作執行完畢才會返回。

我們先執行create後,馬上執行list,發現create domain-U的結束時間,還比list晚1秒鐘,因使可以推論create時會建立好vm後,就可以讓list去取得列表,但create domain-U後可能還會做一些其他事情,所以回來的時間稍微比list晚一點。因此,可以判斷virsh command應該是同步執行完後才返回。

[root@hyperimagestoreageweb tmp]# virsh create centos1.xml && date

Domain centos1 created from centos1.xml

Fri May 20 16:35:30 UTC 2011

[root@hyperimagestoreageweb ~]# virsh list && date

Id Name State

----------------------------------------------------

0 Domain-0 running

59 centos1 paused

Fri May 20 16:35:29 UTC 2011

但是如果我們使用Python-libvirt這個binding,就會發現有些指令如delete,在指令下去後,馬上就會返回,但是Python-libvirt卻沒有馬上做delete的動作,這是因為我們馬上做list的動作,還是可以看到預計被delete的domain-U一樣存在,所以可以判斷Python-libvirt有些動作是非同步執行,所以要獲得最新的domain-U資料,就必須使用polling反覆詢問。

沒有留言:

2024年React state management趨勢

輕量化 在過去Redux 是 React 狀態管理的首選函式庫。 Redux 提供了強大的功能和靈活性,但也帶來了一定的學習成本和複雜度。 隨著 React 生態的不斷發展,越來越多的開發者開始追求輕量化的狀態管理函式庫。 Zustand 和 Recoil 等庫以其簡單易用、性...