Virtio 是半虛拟化 hypervisor 中位于裝置之上的抽象層。virtio 由 Rusty Russell 開發,他當時的目的是支援自己的虛拟化解決方案 lguest。
virtio 是對半虛拟化 hypervisor 中的一組通用模拟裝置的抽象。該設定還允許 hypervisor 導出一組通用的模拟裝置,并通過一個通用的應用程式設計接口(API)讓它們變得可用。下圖展示了為什麼這很重要。有了半虛拟化 hypervisor 之後,來賓作業系統能夠實作一組通用的接口,在一組後端驅動程式之後采用特定的裝置模拟。後端驅動程式不需要是通用的,因為它們隻實作前端所需的行為。
virtio 提供了一套有效,易維護、易開發、易擴充的中間層 API。virtio 使用 Feature Bits 來進行功能擴充,使用 vring buffer 傳輸資料。使用 virtio 的裝置在配置上于其他 PCI 裝置沒有太多不同,隻不過它隻應用于虛拟化環境。
Virtio 裝置具備以下特點:
1. 簡單易開發
virtio PCI 裝置使用通用的 PCI 的中斷和 DMA 機制,對于裝置驅動開發者來說不會帶來困難。
2. 高效
virtio PCI 裝置使用針對輸入和輸出使用不同的 vring,規避了可能的由高速緩存帶來的影響。
3. 标準
virtio PCI 不假定其所處的環境一定需要對 PCI 的支援,實際上目前很多 virtio 裝置已經在非 PCI 總線上實作了,這些裝置根本不需要 PCI。
4. 可擴充
virtio PCI 裝置包含一組 Feature Bits,在裝置安裝過程中,可以告知 guest OS。裝置和驅動之間互相協調,驅動可以根據裝置提供的特性以及驅動自身能夠支援的特性來最終确定在 guest OS 裡面能夠使用的裝置特性。這樣可以顧及到裝置的前後相容性。
是以,對與 guest OS 來說,隻需要添加一個 PCI 裝置驅動,然後 Hypervisor 添加裝置的 vring 支援即可以添加一個 virtio 裝置。