天天看點

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

1.關于SR-IOV

        SR-IOV是Single Root I/O Virtualization的縮寫,對于網卡來說,就是一個實體網卡可以虛拟出來多個輕量化的PCI-e實體裝置,進而配置設定給不同的虛拟機使用(每個虛拟機就像擁有單獨的實體網卡一樣)。其性能結餘純虛拟網卡和實體網卡之間——純虛拟性能 < SR-IOV虛拟性能 < 實體直通性能。

2.前提條件

        2.1.軟體系統要支援(比如esxi、pve、unraid……)

        2.2.主機闆要支援、cpu要支援(在bios設定中要有vt-d選項且必須打開,有的文章說還要有SR-IOV設定選項,經我測試,sr-iov這個不是必備項——我的華擎B365M-Pro4沒有這個選項也是可以成功開啟的,但如果主機闆bios有單獨的SR-IOV選項,也必須要打開。),對于unraid系統,進入web-gui界面右上角“顯示器”圖示檢視系統資訊,如果HVM、IOMMU均顯示為“已啟用”則可以支援。

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

        2.3.網卡要支援,比如intel的i350-T4千兆網卡(但網上寨卡比較多,原裝的又比較貴),還有我最近買的X550-T2(萬兆、5千兆、2.5千兆、千兆、百兆之間自适應)、X540-T2(隻能在萬兆、千兆之間切換)等網卡都可以。在unraid中可以通過如下方法檢視你的網卡是否支援sr-iov:

①.如果是6.9x版本(我在試用階段也完全沒問題),可在【工具】→【系統裝置】頁面直接将滑鼠放在欲查詢的網卡,在彈出的資訊框中如果出現sr-iov字樣則支援,否則不支援(下圖中8086:1563】 01:00.0對應的X550T這個網口是支援sr-iov的):

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

 ②.或者shell視窗輸入(所有版本通用)cat /sys/bus/pci/devices/0000:裝置ID/sriov_totalvfs 可以檢視最大虛拟裝置數,如果該數值大于0,則支援。裝置ID可參照上圖了解:【8086:1563】 01:00.0的對應裝置ID為01:00.0,則cat /sys/bus/pci/devices/0000:01:00.0/sriov_totalvfs,我的顯示為63,表示支援sr-iov且可虛拟出63個網卡。而我的另外一張網卡RTL8125 2.5GbE([10ec:8125] 04:00.0) ,運作cat /sys/bus/pci/devices/0000:04:00.0/sriov_totalvfs後輸出No such file or directory,則該網卡不支援sr-iov。

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

 3.開啟網卡的sr-iov:

3.1.修改【Main】→【Flash】→【Syslinux 配置】→【Unraid OS】及【Unraid OS GUI Mode】,在append與 initrd=/bzroot之間添加如下代碼(需要儲存并重新開機系統):

pcie_acs_override=downstream,multifunction vfio_iommu_type1.allow_unsafe_interrupts=1 intel_iommu=on iommu=pt pci_pt_e820_access=on pci=assign-busses

3.2.虛拟出網卡,還是以前述的X550第1個網口為例,假如我要虛拟3個網卡,則輸入如下指令即可:

echo 3 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs

現在去【工具】→【系統裝置】中就可以看到新增的3張虛拟網卡了(同時記住該虛拟網卡的群組ID【8086:1565】,在後續屏蔽後直通時有用)

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

 如果需要取消,則輸入echo 0 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs即可。

由于unraid系統的特殊性,在shell視窗輸入的指令重新開機後就失效了,是以在測試成功後可以通過CA Config Editor插件在go檔案添加echo 3 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs就可以每次啟動時均自動加載虛拟網卡了。

3.4.固定虛拟網卡的mac位址:(此步驟非必須,我隻是為了綁定虛拟網卡的ip以便于管理——SR-IOV虛拟出來的網卡mac位址會随着虛拟機開關發生變化)

這步的關鍵是要搞清楚開啟SR-IOV功能的網卡在unraid系統中的網絡接口編号,是以在所有的開啟SR-IOV動作之前,必須先進行unraid的網絡設定,并記錄好。我的系統主機闆自帶2個網卡,再添加了一張支援SR-IOV的X550-T2網卡,現在的【設定】→【網絡設定】如下

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法
UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

 因為我是在eth2上開啟的sr-iov,為了确認一下,還可以用如下指令核實一下:

ip link show dev eth2

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

确實有3張虛拟網卡(第一行為對應的實體網卡資訊,最後3行vf 0,vf 1,vf 2為虛拟出來的網卡,由于我已經設定了固定mac,是以顯示了不同的mac位址,否則mac位址全是0) 

接下來就可以輸入如下指令将虛拟網卡的mac位址固定了:

ip link set eth接口名 vf vf序号 mac MAC位址

對應我的則是:

ip link set eth2 vf 0 mac 00:55:01:00:00:00

ip link set eth2 vf 1 mac 00:55:01:00:00:01

ip link set eth2 vf 2 mac 00:55:01:00:00:02

說明:我的Z490-itx之X550-T2是将第1個口進行虛拟化,由于490闆載2個網卡,是以X550-T2第1個網口在unraid中為eth2,為了便于了解和記憶,我将其mac位址按如下規則重新命名:(:55:01代表X550第1個網口,:00代表第0個虛拟網卡,:01代表第1個虛拟網卡……),你可以根據自己喜好自行發揮——比如350網卡第2個口的第10個虛拟網卡改成00:35:02:00:00:10

(測試成功後将前述語句寫入go檔案,就不用每次重新開機unraid後再手工敲入指令來寫mac了)

4.屏蔽并直通虛拟網卡

4.1.屏蔽虛拟網卡:不能在【系統裝置】或【vfio-pci cfg插件】中進行屏蔽!不能在【系統裝置】或【vfio-pci cfg插件】中進行屏蔽!不能在【系統裝置】或【vfio-pci cfg插件】中進行屏蔽!隻能在【Main→Flash】中添加代碼屏蔽——在系統裝置中檢視虛拟網卡的群組ID(參照3.2步驟圖檔顯示),我的為8086:1565,則将其加入到【Main】→【Flash】→【Syslinux 配置】→【Unraid OS】及【Unraid OS GUI Mode】的append與 initrd=/bzroot之間,加上之前的代碼,合并後完整代碼為:append pcie_acs_override=downstream,multifunction vfio_iommu_type1.allow_unsafe_interrupts=1 intel_iommu=on iommu=pt pci_pt_e820_access=on pci=assign-busses vfio-pci.ids=8086:1565 initrd=/bzroot

重新開機unraid。

4.2.直通虛拟網卡:在添加虛拟機或虛拟機編輯時最末端的其他PCI裝置中就可以找到剛虛拟出來的網卡了。選中,更新即可。

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

我是把它直通給windows10虛拟機的(當然你也可以虛拟給openwrt等軟路由、其它nas系統作為WAN使用),開啟windows虛拟機等待安裝虛拟網卡驅動(如果windows不能自動安裝驅動,可以通過第三方驅動安裝工具軟體來安裝)後即可正常使用。 

UnRaid開啟網卡SR-IOV并直通給虛拟機的方法

繼續閱讀