Xen前後端分離設備驅動模型通信過程分析(包括事件通道、授權表、環緩衝區)

首先,在Xen分離設備驅動模型中,前端驅動通過事件通道環緩衝區授權表來和後端進行交互;

       “事件通道”是類似於中斷的一種機制,用於通知虛擬機對事件進行處理。當有請求等待處理,或者請求已經完成需要查收時,前端或者後端使用事件通道來通知對方。

        “環緩衝區”,環狀緩衝區,按頁分配,裏面放置請求和應答。環緩衝區採用生產者消費者模式,甲方首先放置請求,乙方獲取並處理完請求後,將處理結果再次防置迴環緩衝區中,甲方最後獲取處理結果。甲乙方一次可以放置和處理多個請求,只要環狀緩衝區還有空間。

       “授權表”是一種頁面訪問授權機制。DomainA通過授權表操作,授權DomainB可以讀寫A的指定頁面,授權表主要作用於前端與後端的大塊數據傳輸。

       “Xenstore”本質上是一個小的樹狀數據庫,類似於windows中的註冊表,主要用於存放各個虛擬機的配置數據。數據庫存放在Domain0中,由一個守護進程負責對它操作(讀、寫、事件觸發等等),前後端通信連接建立的過程中,使用Xenstore來傳遞授權表和事件通道。。

以網卡爲例

一、前端網卡驅動建立通信連接步驟

       1、分配一個空閒頁面作爲設備IO環(環緩衝區)的共享頁面

         2、初始化設備IO環請求端

         3、分配授權引用,授權後端驅動映射共享頁面

         4、分配一個未綁定的事件通道允許後端進行連接

         5、將共享頁對應的授權引用和事件通道寫入Xenstore,傳遞給後端驅動(先在前端設備所在Xenstore中創建2個鍵,然後將授權引用和事件通道寫入到2個鍵中,後端聲卡驅動再讀取Xenstore即獲得前端提供的授權引用和事件通道)

         6、前端驅動初始化完成   

二、後端網卡驅動建立通信鏈接步驟

        1、從Xenstore讀取前端授權引用和事件通道

        2、映射設備IO環的共享頁面,並初始化設備IO環的響應端

        3、分配事件通道與前端事件通道建立連接

        4、後端設備連接完成

三、前端收包和發包過程

       發包過程(中斷方式):

      1、發包函數接收到上層協議(TCP、IP等)封裝後的數據包後,首先申請授權表項,然後調用授權表操作賦予後端讀數據包的數據頁權限

      2、發包函數申請環緩衝區的表項,在裏面放置發包請求,發包請求包含了上一步申請的授權表表項的索引,後端將使用該索引來找到數據包數據頁

      3、發包函數發事件通道通知後端有發包請求需要處理

      4、後端會異步處理該請求

      5、請求處理後,發包函數回收分配的環緩衝區和授權表

      收包過程(輪詢方式):

      1、首先在環緩衝區放置一定量空的數據頁,通過授權表允許後端讀寫或者頁交換

      2、當後端發現包到達時,會將包的數據放置到環緩衝區中的空頁中,這裏可以採用讀寫複製或頁交換的方式來傳輸包數據

      3、收包函數輪詢時,如果在環緩衝區中發現已經收到的包,就將數據封裝傳遞給上層協議,同時繼續分配空的數據頁到環緩衝區中。

四、後端收包和發包過程

       發包過程

       1、後端得到前端發來的事件通道通知:環緩衝區有包要發

       2、後端從環緩衝區中得到包請求

       3、後端通過授權表獲得包數據的讀權限,並將數據拷貝到dom0內存中

       4、後端將拷貝過來的數據包向網橋發,網橋負責轉發到物理設備上

       收包流程

      1、後端從網橋那邊接收到數據包

      2、後端從環緩衝區中取出前端預先放置的收包請求

      3、後端根據收包請求,通過授權表獲得數據頁的控制權確定是拷貝數據包還是數據包頁交換

      4、通過事件通道通知前端有數據包

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