1. 程式人生 > >虛擬機器之間的資訊通訊機制

虛擬機器之間的資訊通訊機制

授權表(Grant Table)

各個虛擬機器並不是孤立存在的,很多情況下,它們需要相互通訊,典型的例子就是訪問硬體。Xen使用了一種稱為授權表(grant table)機制,來實現VM之間的記憶體頁面傳遞和共享。

共享記憶體是最早出現的程序間通訊機制之一,由於所有程序的地址空間都是公共記憶體池,因此通過重複對映的方式,可以簡單的實現程序間的記憶體共享,並且共享記憶體是最快的通訊機制,而對於Xen來說,這時不錯的選擇。
多程序共享記憶體
Hypervisor提供記憶體頁面共享機制,各個Domain可以在此之上建立更高層次的抽象,該方法進行Domain間通訊,功能類似於傳統的IPC。(IPC三種通訊機制是指:訊號量、共享記憶體、訊息佇列)。
記憶體空想機制有兩種實現機制,system v中使用的較老的機制, 每塊記憶體都與一個key值對應,其他程序獲得這個key,並將這塊記憶體對映到自己的map中。POSIX採用Unix系統的理念,所有資料都是檔案的思想,記憶體頁面以檔案的形式進行共享,如果沒有合適的檔案可供使用過,那麼就是/dev/null來顯示一個匿名記憶體給記憶體區域。這裡注意部分操作細節不會暴露給使用者,首先、就是共享的粒度,通常情況空想記憶體是以頁面為單位進行的,第二、不會向用戶提供實際地址,只是提供抽象的記憶體地址。
Xen的記憶體共享機制更加靠近底層,並且只能以頁面為單位進行,一個共享區域都是用一個唯一的正數來進行標識,稱grant reference,類似於system v的方法。
這裡寫圖片描述


Grant table支援的記憶體共享的操作包含兩類:對映(Mapping)和傳遞(Transferring)。執行Mapping操作後,被共享的記憶體依然保持在原來的domain地址空間,而Tansferring操作則是把共享的記憶體從頁面一個domain到另一個domain。Transferring 通常用於儲存氣球驅動(balloon driver)
儲存氣球驅動程式(vmmemctl)與伺服器協作回收被認為是最有價值的客戶機作業系統的網頁。該驅動程式使用專用伸縮技術,提供可預測的效能緊密匹配本地系統在類似的記憶體限制的行為。 這種技術可以提高或降低記憶體的壓力,客戶作業系統,導致使用自己的本機記憶體管理演算法的客人。 當記憶體很緊張時,客戶機作業系統決定哪些頁面回收,如果有必要,換到自己的虛擬磁碟。 直到記憶體釋放在客戶作業系統 。
這裡寫圖片描述

頁面傳遞近似與頁表更新,因此其效能開銷接近常數,這種方法非常適合大規模的資料傳遞。由於頁表更新的開銷其實很大,因此對於小規模的資料傳遞,使用複製的方式更加有效。
裝置I/O環
這種共享記憶體的機制的一個主要的應用就是I/O環,I/O環為半虛擬化的裝置提供同行手段,是建立在記憶體共享機制的一層抽象,他提供了簡單的訊息傳遞機制。I/O 環提供了一種domain間一步通訊的方法,一個domain在環上放置I/O請求,而負責驅動的domain則響應請求,取走請求處理並且在完成操作會插入一個響應,應為請求和響應幾乎是以相同的速率產生的,所以一個簡單的環就可以滿足通訊需求。
每個I/O環都由5個部分組成:生產者和消費者的起始指標、結束指標以及緩衝區本身,所有緩衝區的大小都是2的正數次冪。