xen的網絡設備機制-I/O環

note:此文描述了xen半虛擬化網卡的VIF機制。


Xen的塊設備驅動使用了XEN IO環的機制。

對於IO子系統而言,xen hyprevisor的作用就是在虛擬機和IObackend設備之間提供一層保護層,然而對於數據傳輸機制,要使得數據在系統之間移動的同時帶來比較小的開銷。兩個主要的數據傳輸機制影響I/O數據傳輸。一方面是資源管理,另外一方面是數據傳輸過程。Xen使用了最小化開銷的兩種機制:IO描述符環和事件通道,授權表機制。

對於網絡設備是這樣的,Xen給虛擬機提供了虛擬網橋,每一個Domain都有一個或者多個虛擬接口VIFs邏輯上連接到了虛擬網橋,一個VIF看起來就像是一個物理網絡接口卡NIC一樣,但是有兩個buffer描述符環,一個是接收的,另外一個是發送的。這兩個方向都有各自的rule形式(也就是網卡的rule),如果滿足的話,相應的動作就會實施(就相當於物理網卡可能會執行的過濾功能那樣)。


發送過程

虛擬機操作系統直接把一個buffer 描述符(是對應的(vif driver的)TX buffer?的buffer描述符)放到發送環中(描述符的請求producer)。XEN複製這個描述符並且保證安全性,然後複製數據包的頭部進行一些過濾規則(請求 consumer )。(數據包的payload並不複雜,因爲我們使用共享內存機制)

這就相當於xen接管了物理網卡部分,但是同時讓這個虛擬機的內存buffer和物理網卡buffer是共享的內存,於是減小了開銷。


接收過程

當包從虛擬網橋到來的時候,guest OS會使用一個沒有用的頁面去來交換到來的包,這避免了在XEN和guest OS之間複製包的開銷,雖然這需要guest OS的接收buffers在網絡接口處排隊。當包接收到後,XEN會很快的去查詢rules,來決定相應的vif,並且用接收環上的page frame的packet buffer來交換這個數據包。

"if no frame is available,the packet is dropped。" 所以在接收的過程中很可能會丟包,這也就是說如果接收環滿了,那麼就丟包了。


注意,這個講的和netmap和vale對比,原理有相似之處,但是vale工作在網橋層面,而IO環工作在網卡和網卡驅動層(XEN的)。


參考文獻:

xen and the art of virtualization


p.s.有空再補充


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章