虛擬化 IO虛擬化基本原理

2022-03-30 03:43:03 字數 3166 閱讀 3152

本文話題:

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埠暫存器

mmio暫存器

中斷下面具體的描述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中的真實裝置的驅動程式需要同時接收並處理多個客戶或程序的請求,達到物理資源的復用。

例項化的基本原理

引言 最近剛好有個專案要用到這個技術,就學習了下dxsdk的sample裡面的instancing10。例項化的技術是利用多個頂點緩衝區有效的合併,減少draw call的次數,從而有效的提高程式的效能。例項化比較適合於相同物體的重複渲染,例如粒子系統,草被模擬等等。本文實現了乙個非常簡單,甚至簡陋...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...

8 2 1 基本原理

乙個舞台動畫物件在包含許多舞台資訊 出現在何處,佔多大面積,處在什麼角度,是否可見 這些資訊分別儲存在動畫物件的屬性中。在 中讀取這些屬性可以了解物件的位置 大小 角度等狀態資訊 修改這些屬性可以改變物件的位置 大小 角度等狀態。如果從資料的角度去理解,動畫就是在固定時間間隔點不斷修改動畫物件某項屬...