SR-IOV: Mellanox OFED v5.0 用戶手冊(cè)【譯】

前言

本文是摘抄翻譯自MLNX_OFED Documentation Rev 5.0-2.1.8.0手冊(cè)中的SRIOV配置文檔
翻譯中刪去了InfiniBand相關(guān)內(nèi)容。

簡(jiǎn)介

Single Root IO虛擬化(SR-IOV)是一種使一個(gè)物理PCIe設(shè)備通過(guò)PCIe總線(bus)多次呈現(xiàn)的技術(shù)徐紧。這項(xiàng)技術(shù)使設(shè)備的多個(gè)虛擬實(shí)例擁有獨(dú)立的資源。Mellanox適配器能夠在ConnectX?-3網(wǎng)卡中暴露出多達(dá)126個(gè)虛擬實(shí)例横殴,稱為虛擬功能(Virtual Functions (VFs)),ConnectX-4/Connect-IB網(wǎng)卡多達(dá)62個(gè)虛擬實(shí)例。然后,這些虛擬功能(virtual function)可以被單獨(dú)配置罕伯。每個(gè)VF可以被看作是一個(gè)連接到Physical Function的額外設(shè)備。它與Physical Function共享相同的資源惋耙,其端口數(shù)量等于物理功能的端口數(shù)量捣炬。

SR-IOV通常與支持SR-IOV的虛擬機(jī)監(jiān)視器(hypervisor)一起使用,為虛擬機(jī)直接提供硬件來(lái)訪問(wèn)網(wǎng)絡(luò)資源绽榛,從而提高其性能。
在本章中婿屹,我們將演示在Red Hat Linux環(huán)境中使用Mellanox ConnectX? VPI網(wǎng)卡系列進(jìn)行SR-IOV的設(shè)置和配置灭美。

系統(tǒng)要求

要建立一個(gè)SR-IOV環(huán)境,需要以下條件:

  • MLNX_OFED驅(qū)動(dòng)程序
  • 服務(wù)器主板BIOS支持SR-IOV能力
  • 支持SR-IOV的Hypervisor昂利,例如:Red Hat Enterprise Linux Server Version 6
  • 具有SR-IOV功能的Mellanox ConnectX? VPI網(wǎng)卡系列

啟用SR-IOV

根據(jù)你的系統(tǒng)届腐,執(zhí)行下面的步驟來(lái)設(shè)置你的BIOS铁坎。本節(jié)中使用的插圖僅用于示例。更多信息犁苏,請(qǐng)參考相應(yīng)的BIOS用戶手冊(cè)硬萍。

  1. 在系統(tǒng)BIOS中啟用 "SR-IOV":


    20220326190106
  2. 啟用"Intel Virtualization Technology".


    20220326190243
  3. 安裝一個(gè)支持SR-IOV的虛擬化管理器(Hypervisor)
  4. 根據(jù)你的系統(tǒng),更新 /boot/grub/grub.conf 文件围详,為L(zhǎng)inux內(nèi)核加入一個(gè)類似的命令行加載參數(shù)朴乖。
    例如,對(duì)于Intel systems助赞,添加:
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title Red Hat Enterprise Linux Server (2.6.32-36.x86-645)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-36.x86-64 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            intel_iommu=on        initrd /initrd-2.6.32-36.x86-64.img
    

    在更新/boot/grub/grub.conf文件時(shí)买羞,請(qǐng)確保參數(shù) "intel_iommu=on "存在,否則SR-IOV不能被加載雹食。
    一些操作系統(tǒng)使用/boot/grub2/grub.cfg畜普。如果你的服務(wù)器使用這樣的文件,請(qǐng)編輯這個(gè)文件來(lái)代替(在以 "linux16 "開(kāi)頭的一行的末尾群叶,添加 "intel_iommu=on")

配置CX-3

  1. 安裝支持SR-IOV的Linux的MLNX_OFED驅(qū)動(dòng)

    通過(guò)運(yùn)行mlxconfig工具并將SRIOV_EN參數(shù)設(shè)置為 "1"吃挑,可以啟用和管理SR-IOV,而無(wú)需重新燒錄固件街立。
    要找到mst設(shè)備舶衬,請(qǐng)運(yùn)行。"mst start "和 "mst status"

    mlxconfig -d <mst_device> s SRIOV_EN=1
    

    更多信息几晤,請(qǐng)參考MFT用戶手冊(cè)(www.mellanox.com > 產(chǎn)品 > 軟件 > 固件工具)中的 "mlxconfig-ChangingDeviceConfigurationTool "部分约炎。

  2. 確認(rèn)HCA[1]被配置為支持SR-IOV

    # mstflint -dev <PCI Device> dc
    

    HCA顯示以下字段:

    [HCA]
    num_pfs = 1
    total_vfs = <0-126>
    sriov_en = true
    
    參數(shù) 推薦值
    num_pfs 1
    total_vfs 固件2.31.5000以上,推薦126. 固件2.30.8000以下蟹瘾,推薦63
    sriov_en true
    • 要確保系統(tǒng)支持這個(gè)數(shù)量的VFs圾浅,過(guò)大的話,可能導(dǎo)致系統(tǒng)停止工作
    • 如果缺少上述字段憾朴,請(qǐng)將它們添加到INI中狸捕。
    • 如果你需要改變總VF的數(shù)量,將total_vfs參數(shù)設(shè)置為所需的數(shù)字众雷。
    • 如果上述字段被添加到INI中灸拍,或total_vfs參數(shù)被修改,請(qǐng)使用mlxburn工具燒錄固件砾省。如果沒(méi)有安裝mlxburn鸡岗,請(qǐng)從Mellanox網(wǎng)站下載:http://www.mellanox.com→產(chǎn)品→固件工具
    mlxburn -fw ./fw-ConnectX3-rel.mlx -dev /dev/mst/mt4099_pci_cr0 -conf ./MCX341A-XCG_Ax.ini
    
  3. 創(chuàng)建文本文件/etc/modprobe.d/mlx4_core.conf

  4. 在/etc/modprobe.d/mlx4_core.conf文件中插入一個(gè) "options "行,以設(shè)置VF的數(shù)量编兄,每個(gè)端口的協(xié)議類型轩性,以及物理函數(shù)驅(qū)動(dòng)(probe_vf)允許使用的虛擬函數(shù)的數(shù)量。
    For example:

    options mlx4_core num_vfs=5 port_type_array=1,2 probe_vf=1
    

    參數(shù)推薦值:
    num_vfs:

    • 如果沒(méi)有狠鸳,或?yàn)榱悖簩](méi)有VF可用揣苏。
    • 如果它的值是0-63范圍內(nèi)的單個(gè)數(shù)字悯嗓。驅(qū)動(dòng)程序?qū)⒂肏CA上的num_vfs VFs,這將應(yīng)用于主機(jī)上的所有ConnectX? HCAs卸察。
      • 如果是三元組 x,y,z(只適用于所有端口都配置為以太網(wǎng)的情況)脯厨,驅(qū)動(dòng)程序會(huì)創(chuàng)建。
        • x 物理端口1上的單端口VF
        • y 物理端口2上的單端口VF(只適用于存在這樣一個(gè)端口的情況下)
        • z n個(gè)端口的VF(其中n是設(shè)備上物理端口的數(shù)量)坑质。這適用于主機(jī)上的所有ConnectX? HCAs
    • 如果是格式字符串合武。該字符串對(duì)每個(gè)安裝的HCA分別指定num_vfs參數(shù)。
      字符串的格式是洪乍。"bb:dd.f-v,bb:dd.f-v, ..."
      • bb:dd.f = HCA的PF的總線:設(shè)備.功能
      • v = 為該HCA啟用的VF數(shù)量眯杏,如上所述,可以是一個(gè)單一的數(shù)值壳澳,也可以是一個(gè)三元組岂贩。

    例如:

    • num_vfs=5 - 驅(qū)動(dòng)程序?qū)⒃贖CA上啟用5個(gè)VF,這將應(yīng)用于主機(jī)上的所有ConnectX? HCA巷波。
    • num_vfs=00:04.0-5,00:07.0-8 - 驅(qū)動(dòng)程序?qū)⒃贐DF 00:04.0的HCA上啟用5個(gè)VF萎津,在00:07.0的HCA上啟用8個(gè)VF
    • num_vfs=1,2,3 - 驅(qū)動(dòng)程序?qū)⒃谖锢矶丝?上啟用1個(gè)VF,在物理端口2上啟用2個(gè)VF抹镊,在雙端口上啟用3個(gè)VF(僅適用于所有端口都是以太網(wǎng)端口時(shí)的雙端口HCA)锉屈。
    • num_vfs=00:04.0-5;6;7,00:07.0-8;9;10 - 驅(qū)動(dòng)程序?qū)⒂谩?
      • 位于BDF 00:04.0的HCA
        • 在端口1上有5個(gè)單一的VF
        • 6個(gè)端口2的單VF
        • 7個(gè)雙端口VF
      • 位于BDF 00:07.0的HCA
        • 8 端口1上的單VFs
        • 9 端口2上的單VFs
        • 10 雙端口VFs

    注:
    不包括在上述列表中的PF將不會(huì)啟用SR-IOV。
    三元組和單端口VF只有在所有端口都配置為以太網(wǎng)時(shí)才有效垮耳。當(dāng)InfiniBand端口存在時(shí)颈渊,只有num_vfs=a語(yǔ)法有效,其中"a"是一個(gè)代表VF數(shù)量的單一值终佛。
    三元組中的第二個(gè)參數(shù)只有在有1個(gè)以上的物理端口時(shí)才有效俊嗽。
    在一個(gè)三元組中,x+z<=63和y+z<=63铃彰,每個(gè)物理端口上的最大VF數(shù)量必須是63绍豁。

    port_type_array:
    指定端口的協(xié)議類型。它是所有設(shè)備的2個(gè)端口類型't1,t2'的一個(gè)數(shù)組牙捉,或者是BDF到port_type_array的列表'bb:dd.f-t1;t2,...'竹揍。
    有效的端口類型。1-ib, 2-eth, 3-auto, 4-N/A
    如果只有一個(gè)端口可用邪铲,則對(duì)端口2使用N/A端口類型(例如'1,4')芬位。
    注意,這個(gè)參數(shù)只有在num_vfs不為零時(shí)才有效(即带到,SRIOV被啟用)晶衷。否則,它將被忽略阴孟。

    probe_vf: 同num_vfs

  5. 重啟服務(wù)

  6. 加載驅(qū)動(dòng)校驗(yàn) sr-iov已加載:

    lspci | grep Mellanox
    03:00.0 InfiniBand: Mellanox Technologies MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE] (rev b0)
    03:00.1 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.2 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.3 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.4 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    03:00.5 InfiniBand: Mellanox Technologies MT27500 Family [ConnectX-3 Virtual Function] (rev b0)
    
    • "03:00" 表示Physical Function
    • "03:00.X" 表示連接到PF的Virtual Function

配置CX-4/CX-5/CX-6

配置包括如下步驟:

  1. 啟用 SR-IOV在BIOS中
  2. 在固件中啟用SR-IOV
  3. 在驅(qū)動(dòng)中配置啟用SR-IOV

配置

1. 固件啟用SR-IOV

MST: (Mellanox Software Tools) service

mst start:
創(chuàng)建代表Mellanox設(shè)備的特殊文件,放在/dev/mst/目錄中。加載適當(dāng)?shù)膬?nèi)核模塊并將PCI配置頭文件保存在temp-directory中蚂夕。
啟動(dòng)后胆屿,可以使用其他工具或更改配置文件來(lái)對(duì)固件進(jìn)行操作和配置。

  1. Run MST
# mst start

Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices
  1. 查看PCI插槽對(duì)應(yīng)的設(shè)備名
# mst status

MST modules:
------------

MST PCI module loaded
MST PCI configuration module loaded

MST devices:
------------

/dev/mst/mt4103_pciconf0 - PCI configuration cycles access.
domain{?:}bus:dev.fn=0000:81:00.0 addr.reg=88 data.reg=92
Chip revision is: 00

/dev/mst/mt4103_pci_cr0 - PCI direct access.
domain: bus:dev.fn=0000:81:00.0 bar=0xc8000000 size=0x100000
Chip revision is: 00

/dev/mst/mt4115_pciconf0 - PCI configuration cycles access.
domain: bus:dev.fn=0000:05:00.0 addr.reg=88 data.reg=92
Chip revision is: 00
  1. 查詢?cè)O(shè)備狀態(tài)
# mlxconfig -d /dev/mst/mt4115_pciconf0 q
Device #1:
----------

Device type:    ConnectX4LX
Name:           N/A
Description:    N/A
Device:         /dev/mst/mt4117_pciconf0

Configurations:                              Next Boot
         MEMIC_BAR_SIZE                      0
         MEMIC_SIZE_LIMIT                    _256KB(1)
         ROCE_NEXT_PROTOCOL                  254
         NON_PREFETCHABLE_PF_BAR             False(0)
         NUM_PF_MSIX_VALID                   True(1)
         NUM_OF_VFS                          0
         SRIOV_EN                            False(0)
         PF_LOG_BAR_SIZE                     5
         VF_LOG_BAR_SIZE                     0
         NUM_PF_MSIX                         63
         NUM_VF_MSIX                         11
         ...
  1. 啟用SR-IOV慕嚷,設(shè)置VF數(shù)量
    • SRIOV_EN=1
    • NUM_OF_VFS=4
# mlxconfig -d /dev/mst/mt4115_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4

Device #1:
----------
Device type: ConnectX4
PCI device: /dev/mst/mt4115_pciconf0
 
Configurations: Current New
SRIOV_EN 0 1
NUM_OF_VFS 0 4
LINK_TYPE_P1 2 2
LINK_TYPE_P2 2 2
INT_LOG_MAX_PAYLOAD_SIZE 0 0
LOG_DCR_HASH_TABLE_SIZE 14 14
DCR_LIFO_SIZE 16384 16384
...

Apply new Configuration? ? (y/n) [n] : y
Applying... Done!

-I- Please reboot machine to load new configurations.
  1. 重啟系統(tǒng)

2. 配置MLNX_OFED驅(qū)動(dòng)啟用SR-IOV

  1. 找到主網(wǎng)卡設(shè)備

ibstat: 查看IB設(shè)備狀態(tài)

# ibstat
CA 'mlx5_0'
        CA type: MT4117
        Number of ports: 1
        Firmware version: 14.21.2010
        Hardware version: 0
        Node GUID: 0xXXXX
        System image GUID: 0xXXXX
        Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 25
                Base lid: 0
                LMC: 0
                SM lid: 0
                Capability mask: 0x00010000
                Port GUID: 0xXXXX
                Link layer: Ethernet

ibdev2netdev: 查詢物理設(shè)備對(duì)應(yīng)的linux網(wǎng)絡(luò)設(shè)備

# ibdev2netdev
mlx5_0 port 1 ==> ens785f1 (Up)
  1. 獲取固件允許配置的最大VFs數(shù)量
# cat /sys/class/net/ens785f1/device/sriov_totalvfs
4

注: 這是一個(gè)只讀參數(shù)哥牍,應(yīng)該與上面命令中固件中配置的數(shù)字一致。
mlxconfig -d /dev/mst/mt4115_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4
注:如果看不到這個(gè)參數(shù)喝检,說(shuō)明 intel_iommu=on 沒(méi)有被正確的配置到grub中

  1. 獲取設(shè)備當(dāng)前VF數(shù)量

以下幾種方式都可以:

# cat /sys/class/net/ens785f1/device/sriov_numvfs
0

# cat /sys/class/net/ens785f1/device/mlx5_num_vfs
0

注:如果命令失敗嗅辣,可能意味著驅(qū)動(dòng)沒(méi)有被加載。

注: mlx5_num_vfs參數(shù)和sriov_numvfs的區(qū)別是mlx5_num_vfs總是存在的挠说,即使操作系統(tǒng)沒(méi)有加載虛擬化模塊(在grub文件中添加intel_iommu支持)澡谭。sriov_numvfs只有在intel_iommu被添加到grub文件時(shí)才顯示。所以损俭,如果你沒(méi)有看到sriov_numvfs文件蛙奖,請(qǐng)重新檢查intel_iommu是否被添加到上述的grub文件中。

注:不同的內(nèi)核版本可能沒(méi)有上述所有選項(xiàng)杆兵。

  1. 設(shè)置所需的VFs數(shù)量雁仲。

VF的數(shù)量可以通過(guò)兩個(gè)參數(shù)來(lái)設(shè)置,取決于內(nèi)核的版本琐脏。

有幾種方法可以做到這一點(diǎn)攒砖。

# option 1:
$ echo 4 > /sys/class/net/ens785f1/device/sriov_numvfs

# option 2:
$ echo 4 > /sys/class/net/ens785f1/device/mlx5_num_vfs
4

# check numvfs
$ cat /sys/class/net/ens785f1/device/sriov_numvfs
4
  1. 改變VF的數(shù)量是不持久的,在服務(wù)器重啟后就不存在了
  2. 寫入sysfs文件來(lái)配置numvfs時(shí)適用以下規(guī)則:
    • 如果沒(méi)有分配VF日裙,VF的數(shù)量可以改變?yōu)槿魏斡行У闹担?-FW刻錄期間設(shè)置的最大#VF)吹艇。
    • 如果有分配給虛擬機(jī)的VF,就不可能改變VF的數(shù)量阅签。
    • 如果管理員在沒(méi)有分配VF的情況下卸載PF上的驅(qū)動(dòng)程序掐暮,驅(qū)動(dòng)程序?qū)⒈恍遁d,SRI-OV將被禁用政钟。
    • 如果在PF的驅(qū)動(dòng)器被卸載時(shí)有分配的VF路克,SR-IOV將不會(huì)被禁用。這意味著VF將在虛擬機(jī)上可見(jiàn)养交。但是它們將不可操作精算。這適用于使用pci_stub而不是vfio的內(nèi)核的操作系統(tǒng)。
  • VF驅(qū)動(dòng)會(huì)發(fā)現(xiàn)這種情況并關(guān)閉其資源
  • 當(dāng)PF上的驅(qū)動(dòng)程序被重新加載時(shí)碎连,VF就變得可操作了灰羽。VF的管理員將需要重新啟動(dòng)驅(qū)動(dòng)程序,以便恢復(fù)與VF的工作。
  1. 檢查PCI bus:
# lspci -D | grep Mellanox
0000:05:00.0 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4]
0000:05:00.1 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4]
0000:05:00.6 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:05:00.7 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:05:01.0 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:05:01.1 Ethernet controller: Mellanox Technologies MT27700 Family [ConnectX-4 Virtual Function]
0000:81:00.0 Network controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]

# ibdev2netdev -v
0000:81:00.0 mlx4_0 (MT4103 - MT1521X02584) CX354A - ConnectX-3 Pro QSFP fw 2.33.5100 port 1 (ACTIVE) ==> ens817 (Up)
0000:81:00.0 mlx4_0 (MT4103 - MT1521X02584) CX354A - ConnectX-3 Pro QSFP fw 2.33.5100 port 2 (ACTIVE) ==> ens817d1 (Up)
0000:05:00.0 mlx5_0 (MT4115 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (DOWN ) ==> ens785f0 (Down)
0000:05:00.1 mlx5_1 (MT4115 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> ens785f1 (Up)
0000:05:00.6 mlx5_2 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> ens785f6 (Up)
0000:05:00.7 mlx5_3 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> ens785f7 (Up)
0000:05:01.0 mlx5_4 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> enp5s1 (Up)
0000:05:01.1 mlx5_5 (MT4116 - MT1530X08465) CX456A - ConnectX-4 QSFP fw 12.12.0780 port 1 (ACTIVE) ==> enp5s1f1 (Up)

可以看到4個(gè)VFs和1個(gè)PF

PCI Function VF number
0000:05:00.6 0
0000:05:00.7 1
0000:05:01.0 2
0000:05:01.1 3

注: Functions 05:00:2, 05:00:3, 05:00:4, 05:00:5 給mlx5_0設(shè)備保留著

  1. 用ip工具檢查VFs配置
$ ip link show
...
9: ens785f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP mode DEFAULT qlen 1000
link/ether e4:1d:2d:f2:a4:89 brd ff:ff:ff:ff:ff:ff
vf 0 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 1 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 2 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 3 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
...
  1. 給VF設(shè)置 mac 地址
$ echo 0000:05:00.6 > /sys/bus/pci/drivers/mlx5_core/unbind
$ ip link set ens785f1 vf 0 mac 00:22:33:44:55:66

$ echo 0000:05:00.6 > /sys/bus/pci/drivers/mlx5_core/bind
$ ip link show
...
9: ens785f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP mode DEFAULT qlen 1000
link/ether e4:1d:2d:f2:a4:89 brd ff:ff:ff:ff:ff:ff
vf 0 MAC 00:22:33:44:55:66, spoof checking off, link-state auto
vf 1 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 2 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
vf 3 MAC 00:00:00:00:00:00, spoof checking off, link-state auto
...

通過(guò)lspci -D 來(lái)獲取完整的PCI地址

  1. 更多配置:
    更多配置詳見(jiàn): HowTo Set Virtual Network Attributes on a Virtual Function (SR-IOV)

SR-IOV功能配置

配置以太網(wǎng)Virtual Function

SR-IOV虛擬功能配置可以通過(guò)Hypervisor iprout2/netlink工具完成廉嚼。沒(méi)有的話玫镐,可以通過(guò)sysfs完成。

ip link:

ip link set { dev DEVICE | group DEVGROUP } [ { up | down } ]
...
[ vf NUM [ mac LLADDR ] [ vlan VLANID [ qos VLAN-QOS ] ]
...
[ spoofchk { on | off} ] ]
...

sysfs:

sysfs configuration (ConnectX-4):
/sys/class/net/enp8s0f0/device/sriov/[VF]
 
+-- [VF]
| +-- config
| +-- link_state
| +-- mac
| +-- mac_list
| +-- max_tx_rate
| +-- min_tx_rate
| +-- spoofcheck
| +-- stats
| +-- trunk
| +-- trust
| +-- vlan

VLAN訪客標(biāo)簽(VGT)和VLAN交換機(jī)標(biāo)簽(VST)

當(dāng)eth端口運(yùn)行在VGT(VLAN Guest Tagging)模式時(shí)怠噪,端口會(huì)直接透?jìng)鱽?lái)自VF的數(shù)據(jù)包(包括VLAN標(biāo)記)恐似,或者管理員可以配置Hypervisor將端口的數(shù)據(jù)包靜默強(qiáng)制的與VLAN/Qos相關(guān)聯(lián)(VLAN Switch Tagging)。
在后一種情況下傍念,從訪客發(fā)出的無(wú)標(biāo)記或優(yōu)先級(jí)標(biāo)記的數(shù)據(jù)包將被插入VLAN標(biāo)記矫夷,而傳入的數(shù)據(jù)包將被移除VLAN標(biāo)記。
默認(rèn)行為是VGT憋槐。

要配置 VF 成 VST模式双藕,運(yùn)行:

ip link set dev <PF device> vf <NUM> vlan <vlan_id> [qos <qos>]
where:
NUM = 0..max-vf-num
vlan_id = 0..4095
qos = 0..7

For example:
# sets VST mode for VF #2 belonging to PF eth2, with vlan_id = 10 and qos = 3
ip link set dev eth2 vf 2 vlan 10 qos 3 
# sets mode for VF 2 back to VGT
ip link set dev eth2 vf 2 vlan 0 

注:在ConnectX-3網(wǎng)卡系列中,切換到VGT模式也可以通過(guò)設(shè)置vlan_id為4095來(lái)完成阳仔。

其他以太網(wǎng)VF配置選項(xiàng)

訪客MAC配置
默認(rèn)情況下忧陪,訪客MAC地址被配置為全部為零。如果希望Guest總是以相同的MAC啟動(dòng)驳概,應(yīng)該在來(lái)Guest動(dòng)啟動(dòng)前配置MAC赤嚼。
通過(guò)以下方式進(jìn)行配置:

ip link set dev <PF device> vf <NUM> mac <LLADDR>

對(duì)于CX-4和傳統(tǒng)Guest,他們不會(huì)生成隨機(jī)的mac地址顺又,管理員應(yīng)該總是配置他們的 mac 地址更卒。

Spoof checking
目前只適用于3.1以上的內(nèi)核。

ip link set dev <PF device> vf <NUM> spoofchk [on | off]

**Guest Link State **

ip link set dev <PF device> vf <UM> state [enable| disable| auto]

VF統(tǒng)計(jì)

VF統(tǒng)計(jì)數(shù)據(jù)可以通過(guò)sysfs查詢到:

cat /sys/class/infiniband/mlx5_2/device/sriov/2/stats
tx_packets : 5011
tx_bytes : 4450870
tx_dropped : 0
rx_packets : 5003
rx_bytes : 4450222
rx_broadcast : 0
rx_multicast : 0
tx_broadcast : 0
tx_multicast : 8
rx_dropped : 0

MAC轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)(FDB)管理

FDB也被稱為轉(zhuǎn)發(fā)信息庫(kù)(FIB)或轉(zhuǎn)發(fā)表稚照,最常用于網(wǎng)絡(luò)橋接(bridging)蹂空、路由和類似的功能,以找到輸入接口應(yīng)轉(zhuǎn)發(fā)數(shù)據(jù)包到適當(dāng)出口果录。
以太網(wǎng)驅(qū)動(dòng)程序在VF和PF之間共享一個(gè)表上枕,可以存儲(chǔ)128個(gè)MAC:

  • 每個(gè)VF得到2個(gè)預(yù)留的MAC(從128個(gè)MAC的總池中抽取)弱恒。
  • 每個(gè)VF/PF最多可以申請(qǐng)128個(gè)MAC辨萍,采用先申請(qǐng)先得的政策(除了每個(gè)VF預(yù)留的2個(gè)MAC,池子里的其他MAC可以自由申請(qǐng))返弹。

查看接口可用的MAC數(shù)量:

cat /sys/class/net/eth2/fdb_det
device eth2: max: 112, used: 2, free macs: 110

添加新的MAC到接口:

echo +<MAC> > /sys/class/net/eth<X>/fdb

一旦運(yùn)行上述命令锈玉,接口(VF/PF)將驗(yàn)證是否存在空閑的MAC。如果有空閑的MAC义起,VF/PF會(huì)從全局池中獲取并分配它拉背。如果沒(méi)有空閑的MAC,就會(huì)返回一個(gè)錯(cuò)誤默终,通知用戶池中MAC已滿椅棺。

從接口中刪除MAC:

echo -<MAC> > /sys/class/net/eth<X>/fdb

如果 /sys/class/net/eth<X>/fdb 不存在犁罩,使用ip-route2中的bridge工具,它包含管理FDB表的功能两疚,因?yàn)閮?nèi)核支持FDB回掉床估。

bridge fdb add 00:01:02:03:04:05 permanent self dev p3p1
bridge fdb del 00:01:02:03:04:05 permanent self dev p3p1
bridge fdb show dev p3p1

如果添加mac地址時(shí),內(nèi)核函數(shù)返回失敗鬼雀,因?yàn)槌刈又蠱AC地址已滿顷窒,將會(huì)發(fā)生以下錯(cuò)誤:

  • 如果該接口是PF,它將自動(dòng)進(jìn)入混雜模式
  • 如果接口是VF源哩,它將嘗試進(jìn)入混雜模式,如果它不支持混雜模式鸦做,該操作將失敗励烦,并在內(nèi)核的日志中打印出一個(gè)錯(cuò)誤。

虛擬客戶標(biāo)記(VGT+)

VGT+是虛擬客戶標(biāo)記(VGT)的高級(jí)模式泼诱,允許VF像VGT那樣標(biāo)記自己的數(shù)據(jù)包坛掠,但受到VLAN trunk策略的約束。該策略決定了哪些VLAN ID被允許被傳輸或接收治筒。該策略不決定用戶優(yōu)先級(jí)屉栓,用戶優(yōu)先級(jí)保持不變。
數(shù)據(jù)包可以以下列模式之一發(fā)送:要么允許VF發(fā)送/接收無(wú)標(biāo)記的流量耸袜,要沒(méi)不允許友多。
VGT+模式,不會(huì)為端口定義默認(rèn)VLAN堤框。發(fā)送的數(shù)據(jù)包只有在與集合相匹配時(shí)才會(huì)傳給eSwitch域滥,而接收的數(shù)據(jù)包只有在與集合相匹配時(shí)才會(huì)轉(zhuǎn)發(fā)給VF。

為CX-3配置VGT+

以下是目前VGT+的限制:

  • VLAN集合的大小被定義為最多10個(gè)VLAN蜈抓,包括為無(wú)標(biāo)記/優(yōu)先級(jí)標(biāo)記的流量添加的VLAN 0启绰。
  • 這種行為適用于所有VF流量:普通以太網(wǎng)和所有RoCE傳輸。
  • VGT+允許的VLAN集合只有在VF激活時(shí)才能擴(kuò)展
  • 只有在VF重置后沟使,配置的集合才會(huì)生效
  • VGT+僅在DMFS模式下可用

默認(rèn)的模式是VGT:

cat /sys/class/net/eth5/vf0/vlan_set
oper:
admin:

啟用VGT+模式:

  1. 設(shè)置相應(yīng)的端口及VF(在下面的例子中委可,是端口eth5 VF0)允許的VLANs列表。

    echo 0 1 2 3 4 5 6 7 8 9 > /sys/class/net/eth5/vf0/vlan_set
    

    其中0指定是否允許無(wú)標(biāo)記/優(yōu)先級(jí)標(biāo)記的流量腊嗡。

  2. 重新啟動(dòng)相關(guān)的虛擬機(jī)以使更改生效着倾,或者運(yùn)行:/etc/init.d/openibd重新啟動(dòng)

禁用VGT+模式:

  1. 設(shè)置VLAN為空

    echo > /sys/class/net/eth5/vf0/vlan_set
    
  2. 重新啟動(dòng)相關(guān)的虛擬機(jī)以使更改生效,或者運(yùn)行:/etc/init.d/openibd重新啟動(dòng)

為CX-4/CX-5配置VGT+

配置允許的VLANs到對(duì)應(yīng)的端口及VF下(例中是端口 eth5叽唱,vf 0):

echo "<add> <start_vid> <end_vid>" > /sys/class/net/eth5/device/sriov/0/trunk

# 添加 4-15 VLAN到trunk
echo add 4 15 > /sys/class/net/eth5/device/sriov/0/trunk

# 添加單個(gè)VLAN到trunk
echo add 17 17 > /sys/class/net/eth5/device/sriov/0/trunk

當(dāng)VLAN ID=0時(shí)屈呕,允許無(wú)VLAN和無(wú)QOS的流量通過(guò)

禁用VGT+模式,刪除所有的VLANs:

echo rem 0 4095 > /sys/class/net/eth5/device/sriov/0/trunk

刪除指定的VLANs棺亭,同添加虎眨,add改為rem


  1. Host Channel Adapter(HCA)一詞通常用于描述InfiniBand接口卡。 ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嗽桩,隨后出現(xiàn)的幾起案子岳守,更是在濱河造成了極大的恐慌,老刑警劉巖碌冶,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湿痢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡扑庞,警方通過(guò)查閱死者的電腦和手機(jī)譬重,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)罐氨,“玉大人臀规,你說(shuō)我怎么就攤上這事≌ひ” “怎么了塔嬉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)租悄。 經(jīng)常有香客問(wèn)我谨究,道長(zhǎng),這世上最難降的妖魔是什么泣棋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任胶哲,我火速辦了婚禮,結(jié)果婚禮上外傅,老公的妹妹穿的比我還像新娘纪吮。我一直安慰自己,他們只是感情好萎胰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布碾盟。 她就那樣靜靜地躺著,像睡著了一般技竟。 火紅的嫁衣襯著肌膚如雪冰肴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天榔组,我揣著相機(jī)與錄音熙尉,去河邊找鬼。 笑死搓扯,一個(gè)胖子當(dāng)著我的面吹牛检痰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锨推,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼铅歼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼公壤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起椎椰,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厦幅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后慨飘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體确憨,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年瓤的,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了休弃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堤瘤,死狀恐怖玫芦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情本辐,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布医增,位于F島的核電站慎皱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叶骨。R本人自食惡果不足惜茫多,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忽刽。 院中可真熱鬧天揖,春花似錦、人聲如沸跪帝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伞剑。三九已至斑唬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間黎泣,已是汗流浹背恕刘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抒倚,地道東北人褐着。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像托呕,于是被迫代替她去往敵國(guó)和親含蓉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子频敛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容