簡單地說,SR-IOV是一種讓一臺主機(jī)上的多臺虛擬機(jī)和主機(jī)系統(tǒng)本身合用同一張物理網(wǎng)卡的技術(shù),每臺虛擬機(jī)都認(rèn)為自己擁有一張獨(dú)立的網(wǎng)卡(即一個(gè)VF),而其實(shí)它們都被騙了~~
由于手上只有一臺Linux主機(jī)和一張Mellanox ConnectX-4 LX 10G網(wǎng)卡(雙物理網(wǎng)口),為了研究SR-IOV,我只能搭建了如下圖所示的極簡測試環(huán)境。這塊網(wǎng)卡支持RoCE(RDMA),但在這里只使用它的以太網(wǎng)功能。
對于宿主機(jī)的操作系統(tǒng)來說,這塊網(wǎng)卡的兩個(gè)物理網(wǎng)口可以看作兩個(gè)獨(dú)立的網(wǎng)卡/網(wǎng)絡(luò)接口。如果運(yùn)行ifconfig,可以看到系統(tǒng)中存在enp6s0f0np0和enp6s0f1np1兩個(gè)網(wǎng)口。
之所以會這樣,是因?yàn)?a href="http://www.nxhydt.com/v/tag/1751/" target="_blank">硬件向系統(tǒng)展現(xiàn)了兩個(gè)PCIe設(shè)備,準(zhǔn)確地說是兩個(gè)功能號。
比如用下面這個(gè)命令,可以看到這兩個(gè)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就確定了,并且是唯一的。但硬件只要提供兩個(gè)獨(dú)立的func,就會被Linux檢測為兩個(gè)獨(dú)立的PCIe設(shè)備,從而對應(yīng)兩個(gè)獨(dú)立的網(wǎng)口。
準(zhǔn)備好上述硬件連接和操作系統(tǒng)(Ubuntu 20.04.6)后,我們需要做如下幾件事才能使用SR-IOV功能。此處主要的參考文獻(xiàn)為《HOWTO CONFIGURE SR-IOV FOR CONNECTX-4/CONNECTX-5/CONNECTX-6 WITH KVM (ETHERNET)》。本文并非操作手冊,所以一些網(wǎng)上可以很容易搜到的東西我就不詳細(xì)說明了。
- 在BIOS中打開SR-IOV功能,一般位于PCI配置中。
- 在Linux啟動命令行中添加“intel_iommu=on iommu=pt”(對于Intel CPU)。
- 在Ubuntu中安裝虛擬機(jī)(只安裝virt-manager就幾乎把所有組件都安裝了)。
- 在宿主機(jī)安裝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。比如運(yùn)行如下命令,將網(wǎng)卡最大支持的VF數(shù)量設(shè)置為8個(gè)。
*sudo mlxconfig -d /dev/mst/mt4117_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8*
- 設(shè)置MLNX_OFED驅(qū)動(最終也會設(shè)置硬件),打開SR-IOV功能。
比如運(yùn)行如下命令,使能4個(gè)VF。
echo 4 > /sys/class/net/enp6s0f1np1/device/sriov_numvfs
此時(shí)系統(tǒng)中會呈現(xiàn)4個(gè)VFs(每個(gè)都是一個(gè)PCIe設(shè)備),分別對應(yīng)下面的后四行,即0000:06:00.2(后三個(gè)數(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]
- 把第一個(gè)VF添加到虛擬機(jī)中,虛擬機(jī)會把它認(rèn)做一個(gè)獨(dú)立的PCIe設(shè)備。
這里給一個(gè)配置虛擬機(jī)的參考圖。
- 在虛擬機(jī)中安裝MLNX_OFED驅(qū)動。
此時(shí)我們會得到如下圖所示的測試環(huán)境。
如果我們在虛擬機(jī)里把enp6s0的IP設(shè)置為192.168.8.1。
然后在宿主機(jī)里把兩個(gè)原有的非VF的系統(tǒng)網(wǎng)口的IP設(shè)置為192.168.8.2(enp6s0f0np0)和192.168.8.3(enp6s0f1np1),并把VF3(在宿主機(jī)中)對應(yīng)的網(wǎng)口enp6s0f1v3的IP設(shè)置為192.168.8.4。
在虛擬機(jī)中是可以ping通上述后三個(gè)IP的。
當(dāng)然在這三種情況下數(shù)據(jù)走的物理通路是不同的。
按照我淺薄的認(rèn)識,我認(rèn)為從虛擬機(jī)中ping后面三個(gè)IP時(shí),應(yīng)該對應(yīng)下圖中三條彩色虛線所示的數(shù)據(jù)通路。
對于不同的物理網(wǎng)口,數(shù)據(jù)肯定會通過光纖。
對于屬于相同物理網(wǎng)口的PF(對應(yīng)原系統(tǒng)網(wǎng)口)和VFs,我認(rèn)為網(wǎng)卡硬件中存在一個(gè)內(nèi)部的交換機(jī)機(jī)制,使得所有PF和VFs之間都可以轉(zhuǎn)發(fā)數(shù)據(jù)包。之所以這樣想,是由于做了如下測試:
①在虛擬機(jī)中連續(xù)地ping 192.168.8.5,這是一個(gè)并不存在的地址。
②同時(shí)在宿主機(jī)上依次用“tcpdump -i enpXXXX”命令監(jiān)視每個(gè)網(wǎng)口,包括未配置IP的VF。
可以發(fā)現(xiàn)每個(gè)網(wǎng)口都會持續(xù)收到ARP報(bào)文。如果數(shù)據(jù)沒有經(jīng)過硬件而是在操作系統(tǒng)內(nèi)部直接處理掉了,那這么做是完全沒必要的,因?yàn)橄到y(tǒng)知道每個(gè)網(wǎng)口的IP。并且ifconfig命令輸出中也會顯示每個(gè)網(wǎng)口的RX計(jì)數(shù)在持續(xù)增加,這種計(jì)數(shù)一般在驅(qū)動中實(shí)現(xiàn),而且只有驅(qū)動真正從硬件收到包時(shí)才會增加計(jì)數(shù)。
在今后閱讀相關(guān)驅(qū)動代碼時(shí)我還會關(guān)注這一點(diǎn)。歡迎高手來拍磚。
本文只是搭建了一個(gè)簡單的測試環(huán)境,嘗試使用SR-IOV功能。接下來我會研究Linux系統(tǒng)和Mellanox驅(qū)動中做了哪些事情支持SR-IOV功能,以及猜測需要硬件做哪些工作。
-
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5383瀏覽量
171151 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
591瀏覽量
27357 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
908瀏覽量
28109 -
RDMA
+關(guān)注
關(guān)注
0文章
76瀏覽量
8928 -
PCIe接口
+關(guān)注
關(guān)注
0文章
120瀏覽量
9680
發(fā)布評論請先 登錄
相關(guān)推薦
評論