虛擬化--IO虛擬化基本原理

本文話題:
IO虛擬化概述
設備發現 訪問截獲 設備模擬 設備共享
基於軟件的IO虛擬化
基於前端後端的IO虛擬化
基於硬件的IO虛擬化前端

概述

從處理器的角度看,外設是經過一組I/O資源(端口I/O或者是MMIO)來進行訪問的,因此設備的相關虛擬化被稱爲I/O虛擬化。其思想就是 VMM截獲客戶操做系統對設備的訪問請求,而後經過軟件的方式來模擬真實設備的效果。基於設備類型的多樣化,I/O虛擬化的方式和特色紛繁複雜。後端

 

一個完整的系統虛擬化方案在I/O虛擬化方面須要處理如下幾塊框架

虛擬芯片組函數

虛擬PCI總線佈局,主要是經過虛擬化PCI配置空間,爲客戶機操做系統呈現虛擬的或是直接分配使用的設備。佈局

虛擬系統設備,例如PIC、IO-APIC、PIT和RTC等。性能

虛擬基本的輸入輸出設備,例如顯卡、網卡和硬盤等。優化

 

I/O虛擬化主要包含如下幾個方面的虛擬化編碼

I/O端口寄存器spa

MMIO寄存器操作系統

中斷

   

IO虛擬化

下面具體的描述IO虛擬化須要作的工做

 

設備發現

設備發現就是要讓VMM提供一種方式,來讓客戶機操做系統發現虛擬設備,這樣客戶機操做系統才能加載相關的驅動程序,這是IO虛擬化的第一步。設備發現取決於被虛擬的設備類型。

模擬一個所處物理總線的設備,這其中包含以下兩種類型。

1)模擬一個所處總線類型是不可枚舉的物理設備,並且該設備自己所屬的資源是硬編碼固定下來的。好比ISA設備、PS/2鍵盤、鼠標、RTC及傳統 IDE控制器。對於這類設備,驅動程序會經過設備特定的方式來檢測設備是否存在,例如讀取特定端口的狀態信息。對於這類設備的發現,VMM在給定端口進行 正確的模擬就能夠了,即截獲客戶機對該端口的訪問,模擬出結果交給客戶機。

2)模擬一個所處總線類型是可枚舉的物理設備,並且相關設備資源是軟件可配置的,好比PCI設備。因爲PCI總線是經過PCI配置空間定義一套完備 的設備發現方式,而且運行系統軟件經過PCI配置空間的一些字段對給定PCI設備進行資源的配置,例如容許或禁止I/O端口和MMIO,設置I/O和 MMIO的起始地址等。因此VMM僅模擬自身的邏輯是不夠的,必須進一步模擬PCI總線的行爲,包括拓撲關係和設備特定的配置空間內容,以便讓客戶機操做 系統發現這類虛擬設備。

模擬一個徹底虛擬的設備

這種狀況下,沒有一個現實中的規範與之對應,這種虛擬設備所處的總線類型徹底由VMM自行決定,VMM能夠選擇將虛擬設備掛在PCI總線上,也能夠徹底自定義一套新的虛擬總線協議,這樣的話客戶機操做系統必須加裝新的總線驅動。

 

訪問截獲

虛擬設備被客戶機操做系統發現後,客戶機操做系統中的驅動會按照接口定義訪問這個虛擬設備。此時VMM必須截獲驅動對虛擬設備的訪問,並進行模擬。

非直接分配給客戶機操做系統的設備

對於端口I/O,IO指令自己是特權指令,處於低特權的客戶機訪問端口I/O會拋出異常,從而陷入到VMM中,交給設備模擬器進行模擬。

對於MMIO,VMM把映射到該MMIO的頁表設爲無效,客戶機訪問MMIO時會拋出缺頁異常,從而陷入到VMM中,交給設備模擬器進行模擬。

對於中斷,VMM須要提供一種機制,供設備模擬器在 接收到物理中斷並須要觸發中斷時,能夠通知到虛擬中斷邏輯,而後由虛擬中斷邏輯模擬一個虛擬中斷的注入。

 直接分配給客戶機操做系統的設備

對於端口I/O,能夠直接讓客戶機訪問。

對於MMIO,也能夠直接讓客戶機進行映射訪問。

對於中斷,VMM物理中斷處理函數接收到物理中斷後,辨認出中斷源屬於哪一個客戶機,直接通知該客戶機的虛擬中斷邏輯。

  

設備模擬

上一步中咱們已經屢次提到,下面分類介紹下設備模擬。

基於軟件的全虛擬化

虛擬設備與現實設備具備徹底同樣的接口定義。這種狀況下,VMM的設備模擬器須要仔細研究現實設備的接口定義和內部設計規範,而後以軟件的方式模擬 真實邏輯電路來知足每一個接口的定義和效果。現實設備具備哪些資源,設備模擬器就須要呈現出一樣的資源。這種狀況下,客戶機操做系統原有的驅動程序無需修改 就能驅動虛擬設備。設備訪問過程當中,VMM經過截獲驅動程序對設備的訪問進行模擬。

舉例:qemu    VMware Workstation

 半虛擬化

給客戶機操做系統提供一個特定的驅動程序(稱爲前端),VMM中的模擬程序稱爲後端,前端將請求經過VMM提供的通訊機制直接發送給後端,後端處理 完請求後再發回通知給前者。與傳統設備驅動程序流程(前一種方式)比較,傳統設備程序爲了完成一次操做要涉及到多個寄存器的操做,使得VMM要截獲每一個寄 存器訪問並進行相應的模擬,就會致使屢次上下文切換。這種方式能很大程度的減小上下文切換的頻率,提供更大的優化空間。

舉例:xen   virtio (virtio接下來我會繼續研究,主要包括virtio框架、virtio前端驅動、後端實現方式及原理、前端後端共享內存的方式)

 基於硬件的直接分配(實際上已經不是設備模擬了)

直接將物理設備分配給客戶機操做系統,由客戶機操做系統直接訪問目標設備。這種狀況下實際上不存在設備模擬,客戶機直接經過原有的驅動操做真實硬件。這種方式從性能上說是最優的,但這種方式須要比較多的硬件資源。

基於硬件的直接分配還有一種方式,硬件自己支持虛擬化,自己能夠向不一樣的虛擬機提供獨立的硬件支持,設備自己支持多個虛擬機同時訪問。好比SR-IOV。(這種方式接下來我會繼續研究)

 舉例:intel vt-d      SR-IOV

一個VMM中,經常是多種虛擬化方式並存。

不一樣的IO虛擬化方式對比

 

設備共享

 設備虛擬化中,有些設備能夠被軟件模擬器徹底用軟件的方式模擬而不用接觸實際物理設備,好比CMOS,而有些設備須要設備模擬進一步請求物理硬件的幫助。通常輸入輸出類設備,如鼠標、鍵盤、顯卡、硬盤、網卡。這些設備都涉及到從真實設備上獲取輸入或者輸出到真實設備上。

對於多個客戶機,每一個客戶機擁有本身的設備模擬器,多個設備模擬器須要共享同一個物理設備,這種狀況下,VMM中的真實設備的驅動程序須要同時接收並處理多個客戶或進程的請求,達到物理資源的複用。

   

點擊下面的連接能夠進入我本身搭建的博客,查看更多關於虛擬化的文章。

原文連接:http://itblogs.ga/blog/20150111003133/  轉載請註明出處
相關文章
相關標籤/搜索