IO虛擬化之裝置透傳

2022-06-10 17:51:12 字數 1858 閱讀 7073

io虛擬化實現的方式有很多種,有軟體模擬、半虛擬化、裝置直接分配、單根io虛擬化。

pci裝置直接分配

裝置直接分配 (device assignment)也稱為 device pass-through。就是將宿主機host中的物理 pci 裝置直接分配給客戶機guest使用,虛擬機器獨佔這個pci裝置。在guest進行對應的io操作時,避免 了vm exit 陷入vmm 中,極大提高了效能。

在intel平台上的device assignment技術是vt-d(intel virtualization technology for directed i/o),是在vt-x的基礎上對硬體輔助虛擬化的擴充套件。

下圖(來自intel《vt-directed-io-spec》)是軟體模擬io虛擬化和intel的vt-d的對比原理圖: 

pci裝置直接分配實踐

下面的例子是把host主機中個乙個網絡卡透傳給虛擬機器使用。

(在intel平台上要開啟vt-d,核心要設定intel_iommu=on。)

1.在host上檢視網絡卡資訊

# lspci

00:19.0 ethernet controller: intel corporation ethernet connection i217-lm (rev 04

)04:00.0 ethernet controller: intel corporation 82541pi gigabit ethernet controller (rev 05

)# ls /sys/bus/pci/devices/0000\:04\:00.0/net/eth1

# cat /sys/class/net/eth1/address

90:e2:ba:9f:7c:5a

2.把pci裝置從host中分離

# virsh nodedev-list

pci_0000_04_00_0

# virsh nodedev-dettach pci_0000_04_00_0

device pci_0000_04_00_0 detached

3.把pci裝置分配給虛擬機器

虛擬機器xml:

'

subsystem

' type='

pci' managed='

yes'>

'0x0000

' bus='

0x04

' slot='

0x00

' function='

0x0'/>

'pci

' domain='

0x0000

' bus='

0x00

' slot='

0x10

' function='

0x0'/>

4.進入虛擬機器檢視pci是否進入

# lspci

00:10.0 ethernet controller: intel corporation 82541pi gigabit ethernet controller (rev 05

)# cat /sys/class/net/eth1/address

90:e2:ba:9f:7c:5a

可以看出虛擬機器中的網絡卡就是原來host中的網絡卡。並且此時在host的/sys/class/net/中已經看不到這個網絡卡了。

5.把pci裝置還給host:

# virsh nodedev-reattach pci_0000_04_00_0

虛擬化 IO虛擬化基本原理

本文話題 io虛擬化概述 裝置發現 訪問截獲 裝置模擬 裝置共享 基於軟體的io虛擬化 基於前端後端的io虛擬化 基於硬體的io虛擬化 從處理器的角度看,外設是通過一組i o資源 埠i o或者是mmio 來進行訪問的,所以裝置的相關虛擬化被稱為i o虛擬化。其思想就是 vmm截獲客戶作業系統對裝置的...

藍芽透傳實驗 USB鍵盤轉藍芽鍵盤的裝置

鍵盤可以算作pc上最古老的裝置了,它的出現使得人類可以用非常簡單的方法與電腦進行互動。同樣的,由於各種歷史原因,鍵盤也是pc上最複雜,相容性問題最多的裝置之一 類似的還有硬碟,不過從ide到sata的進化過程中,標準明確,相容性問題少多了 硬體部分arduino uno usb host shiel...

裝置I O之OVERLAPPED IO重疊

似乎在win32的programming中沒有這個概念呀?要討論這個問題就要追溯到對裝置i o的訪問中.在win32中,使用者不能象以前那樣直接對硬體進行訪問,使得這一層 對開發者而言是個 黑盒 而是提供了一組對應的api的介面.讓開發者 基於提供的介面進行開發,而把低層的訪問交給了driver或者...