簡單地說,SR-IOV是一種讓一臺主機上的多臺虛擬機和主機系統(tǒng)本身合用同一張物理網(wǎng)卡的技術(shù),每臺虛擬機都認為自己擁有一張獨立的網(wǎng)卡(即一個VF),而其實它們都被騙了~~
由于手上只有一臺Linux主機和一張Mellanox ConnectX-4 LX 10G網(wǎng)卡(雙物理網(wǎng)口),為了研究SR-IOV,我只能搭建了如下圖所示的極簡測試環(huán)境。這塊網(wǎng)卡支持RoCE(RDMA),但在這里只使用它的以太網(wǎng)功能。
對于宿主機的操作系統(tǒng)來說,這塊網(wǎng)卡的兩個物理網(wǎng)口可以看作兩個獨立的網(wǎng)卡/網(wǎng)絡(luò)接口。如果運行ifconfig,可以看到系統(tǒng)中存在enp6s0f0np0和enp6s0f1np1兩個網(wǎng)口。
之所以會這樣,是因為硬件向系統(tǒng)展現(xiàn)了兩個PCIe設(shè)備,準確地說是兩個功能號。
比如用下面這個命令,可以看到這兩個PCIe設(shè)備的"bus:slot.func",即"總線號:設(shè)備號:功能號"。
$ lspci -D | grep Mellanox
0000:06:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
0000:06:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
一旦網(wǎng)卡被插在PCIe插槽上,它的bus和slot就確定了,并且是唯一的。但硬件只要提供兩個獨立的func,就會被Linux檢測為兩個獨立的PCIe設(shè)備,從而對應(yīng)兩個獨立的網(wǎng)口。
準備好上述硬件連接和操作系統(tǒng)(Ubuntu 20.04.6)后,我們需要做如下幾件事才能使用SR-IOV功能。此處主要的參考文獻為《HOWTO CONFIGURE SR-IOV FOR CONNECTX-4/CONNECTX-5/CONNECTX-6 WITH KVM (ETHERNET)》。本文并非操作手冊,所以一些網(wǎng)上可以很容易搜到的東西我就不詳細說明了。
- 在BIOS中打開SR-IOV功能,一般位于PCI配置中。
- 在Linux啟動命令行中添加“intel_iommu=on iommu=pt”(對于Intel CPU)。
- 在Ubuntu中安裝虛擬機(只安裝virt-manager就幾乎把所有組件都安裝了)。
- 在宿主機安裝Mellanox網(wǎng)卡驅(qū)動。
安裝文件為MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu20.04-x86_64.tgz,需要從NVIDIA網(wǎng)站下載。
如果以后要看代碼還需要下載MLNX_OFED_SRC-debian-5.8-2.0.3.0.tgz 。
- 設(shè)置網(wǎng)卡的固件,使其支持SR-IOV。比如運行如下命令,將網(wǎng)卡最大支持的VF數(shù)量設(shè)置為8個。
*sudo mlxconfig -d /dev/mst/mt4117_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8*
- 設(shè)置MLNX_OFED驅(qū)動(最終也會設(shè)置硬件),打開SR-IOV功能。
比如運行如下命令,使能4個VF。
echo 4 > /sys/class/net/enp6s0f1np1/device/sriov_numvfs
此時系統(tǒng)中會呈現(xiàn)4個VFs(每個都是一個PCIe設(shè)備),分別對應(yīng)下面的后四行,即0000:06:00.2(后三個數(shù)就是"bus:slot.func")、0000:06:00.3、0000:06:00.4和0000:06:00.5。
$ lspci -D | grep Mellanox
0000:06:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
0000:06:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
0000:06:01.2 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]
0000:06:01.3 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]
0000:06:01.4 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]
0000:06:01.5 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function]
- 把第一個VF添加到虛擬機中,虛擬機會把它認做一個獨立的PCIe設(shè)備。
這里給一個配置虛擬機的參考圖。
- 在虛擬機中安裝MLNX_OFED驅(qū)動。
此時我們會得到如下圖所示的測試環(huán)境。
如果我們在虛擬機里把enp6s0的IP設(shè)置為192.168.8.1。
然后在宿主機里把兩個原有的非VF的系統(tǒng)網(wǎng)口的IP設(shè)置為192.168.8.2(enp6s0f0np0)和192.168.8.3(enp6s0f1np1),并把VF3(在宿主機中)對應(yīng)的網(wǎng)口enp6s0f1v3的IP設(shè)置為192.168.8.4。
在虛擬機中是可以ping通上述后三個IP的。
當然在這三種情況下數(shù)據(jù)走的物理通路是不同的。
按照我淺薄的認識,我認為從虛擬機中ping后面三個IP時,應(yīng)該對應(yīng)下圖中三條彩色虛線所示的數(shù)據(jù)通路。
對于不同的物理網(wǎng)口,數(shù)據(jù)肯定會通過光纖。
對于屬于相同物理網(wǎng)口的PF(對應(yīng)原系統(tǒng)網(wǎng)口)和VFs,我認為網(wǎng)卡硬件中存在一個內(nèi)部的交換機機制,使得所有PF和VFs之間都可以轉(zhuǎn)發(fā)數(shù)據(jù)包。之所以這樣想,是由于做了如下測試:
①在虛擬機中連續(xù)地ping 192.168.8.5,這是一個并不存在的地址。
②同時在宿主機上依次用“tcpdump -i enpXXXX”命令監(jiān)視每個網(wǎng)口,包括未配置IP的VF。
可以發(fā)現(xiàn)每個網(wǎng)口都會持續(xù)收到ARP報文。如果數(shù)據(jù)沒有經(jīng)過硬件而是在操作系統(tǒng)內(nèi)部直接處理掉了,那這么做是完全沒必要的,因為系統(tǒng)知道每個網(wǎng)口的IP。并且ifconfig命令輸出中也會顯示每個網(wǎng)口的RX計數(shù)在持續(xù)增加,這種計數(shù)一般在驅(qū)動中實現(xiàn),而且只有驅(qū)動真正從硬件收到包時才會增加計數(shù)。
在今后閱讀相關(guān)驅(qū)動代碼時我還會關(guān)注這一點。歡迎高手來拍磚。
本文只是搭建了一個簡單的測試環(huán)境,嘗試使用SR-IOV功能。接下來我會研究Linux系統(tǒng)和Mellanox驅(qū)動中做了哪些事情支持SR-IOV功能,以及猜測需要硬件做哪些工作。
-
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
5632瀏覽量
175887 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
605瀏覽量
28584 -
虛擬機
+關(guān)注
關(guān)注
1文章
966瀏覽量
29348 -
RDMA
+關(guān)注
關(guān)注
0文章
85瀏覽量
9290 -
PCIe接口
+關(guān)注
關(guān)注
0文章
121瀏覽量
10130
發(fā)布評論請先 登錄
GPU虛擬化在哪里發(fā)生?
正在使用SR-IOV功能,請問能不能再VF端口中啟動MAC學習?
基于PCI Express SR-IOV的大量虛擬化功能
如何將Virtex 7 PCI Express Gen3集成模塊遷移到Kintex 7
Intel圖形SR-IOV增強工具箱使用指南
PXIe萬兆網(wǎng)卡資料 雙路
用SR-IOV創(chuàng)建虛擬函數(shù)
SR-IOV在云計算數(shù)據(jù)中心的應(yīng)用方法、價值和前景

如何使用STM32 MDK開發(fā)環(huán)境建立一個最簡單工程

Switchtec PAX網(wǎng)絡(luò)互聯(lián)Gen 4 PCIe交換機系列現(xiàn)已投產(chǎn)
什么是SR-IOV呢?SR-IOV技術(shù)的優(yōu)缺點及應(yīng)用場景
慧榮科技于FMS 2023展出企業(yè)級和即將上市的消費級PCIe Gen5 SSD主控,以及全球首款支持SR-IOV的車用級SSD主控

憶聯(lián)多項存儲產(chǎn)品通過Intel VROC技術(shù)認證

如何將HC-SR04連接到Arduino并編寫一個簡單的程序來測量距離

如何設(shè)計一個簡單且高度集成的電池測試系統(tǒng)

評論