示例:在 KVM 上的多个实例vMX SR-IOV
vMX KVM 上的交换机支持单根 I/O 虚拟化 (SR-IOV) 接口类型。单根 I/O 虚拟化 (SR-IOV) 允许物理功能显示为多个独立的 vNIC。SR-IOV 允许设备(例如网络适配器)独立访问其各种硬件功能之间的资源。如果有支持 SR-IOV NIC物理设备,可以将支持 SR-IOV 的 vNIC 或虚拟功能 (VF) 连接到 vMX 实例,以提高性能。
系统要求:
Junos OS 18.4 或更高版本。
VMX for KVM 上的 SR-IOV 需要以下 Intel NIC驱动程序:
使用 10G 端口和 ixgbe 驱动程序的 Intel X520 或 X540
使用 10G 端口和 i40e 驱动程序的 Intel X710 或 XL710
从 Junos OS 19.1R1-S1 版和 Junos OS 版本 19.2R1 开始,VMX 实例支持具有 Intel XL710-QDA2 NIC 的 40G 端口。使用 40G 端口时,vMX自动检查端口速度并分配两个 I/O v CPU。
要启用 VMX 实例上的 SR-IOV,必须完成以下任务:
准备NIC SR-IOV 在系统 (/sys/) 模式下使用 SR-IOV。
从 Intel 安装驱动程序,必须编译驱动程序,卸载旧驱动程序,以及安装新的编译驱动程序
注意:智能vMX也提供修改的 intel 驱动程序。您可以使用 Intel 的本机驱动程序或使用已vMX驱动程序。
准备 vmx.conf 文件
使用Junos CLI配置本机驱动程序
启用 SR-IOV 的 BIOS 要求 - 确保系统 BIOS 设置中已启用 Intel VT-d 或 AMD 的MU。
识别此接口的 PCI 地址和内核NIC
从 Intel 下载和安装最新的驱动程序软件
您可从 Intel 下载最新的驱动程序软件并更换 Ubuntu 提供的现有驱动程序软件。
在此例中®从 Intel ® 网络适配器驱动程序 for PCIe* Intel® 10 千兆位以太网网络连接 在 Linux 下下载该软件,并将其保存至您选择的任何目录中,然后按照 README 说明继续下一步操作。
要安装 Intel 的驱动程序软件:
准备NIC在系统模式下使用 SR-IOV
主机需要通过设置值NIC每个专用主机,以及有多少 VF 会为给定的网络使用 sriov_numvfs SR-IOV,NIC。该vmx.sh脚本未了解多少 VF 将使用共享NIC。因此,您必须相应 sriov_numvfs 配置 。
该值可设置为在重新启动后永久使用,并可在重新启动后不永久更改的启动选项。
此示例中提供的过程是使用 sriov_numvfs /sys配置的临时解决方案 对 /sys/class/net/ interface-name /device/ 的任何设置都是非永久性的,因此配置不会在重新启动后继续运行。 sriov_numvfs
要NIC使用 SR-IOV,请完成以下步骤:
# echo num_of_vf > /sys/class/net/interface-name/device/sriov_numvfs
以下命令允许 4 个 VNF 对 SR-IOV 使用共享NIC ens8f1。您必须使用 sudo,或者需要作为 root 用户登录。
As sudo user:
root@ubuntu2:~# echo 4 | sudo tee -a /sys/class/net/ens8f1/device/sriov_numvfs
As root user
root@ubuntu2:~# echo 4 > /sys/class/net/ens8f1/device/sriov_numvfs
选项 sriov_numvfs
仅接受值 0-n,其中 n 是 SR-IOV 支持的最大 VF 数。
在启动时设置 SR-IOV
以下过程提供了一些替代方法来配置 SR-IOV,其中配置仍然会重新启动主机。
以下选项可用于在主机的启动过程中设置值:
使用 rc.local
设置调制选项
使用 grub 设置内核 paramater
下例显示一种使用 sriov_numvfs grub 内核命令配置值的方法
有关巨大页面的信息,请参阅 准备 Ubuntu 主机以安装 vMX。
编辑文件"/etc/default/grub":
lab@ubuntu2:~$ cat /etc/default/grub | grep -i cmd
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"
GRUB_CMDLINE_LINUX="isolcpus=34-41,48-55 default_hugepagesz=1G
hugepagesz=1G hugepages=120 ixgbe.max_vfs=8"
编辑后,更新以下更新:
sudo update-grub
编写新的启动加载程序以在下次重新启动时使更改处于活动状态。
sudo grub-install /dev/sda
重新启动主机以让设置处于活动状态。
sudo reboot
验证sriov_numvfs设置
目的
要验证 sriov_numvfs 配置,请CLI。此示例中,与 SR-IOV NIC要求在 PCI 地址 85:00.0 时为 ens8f1。请注意输出中的"虚拟功能"。
行动
lab@ubuntu2:~$ lspci | grep 85
85:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 85:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 85:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.1 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.3 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.4 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.5 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.6 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.7 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.1 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.3 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.4 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.5 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.6 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.7 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
/sys/class/net/ens8f1/device/sriov_numvfs
还包含所需的值 sriov_numvfs。
lab@ubuntu2:~$ cat /sys/class/net/ens8f1/device/sriov_numvfs
8
对于测试,sriov_numvfs直接编写 为 来快速更改 /sys/class/net/interface-name/device/sriov_numvfs
。
更改服务sriov_numvfs
我们建议提前sriov_numvfs创建 sriov_numvfs(例如:在启动时使用 grub 命令),因为在部署第 1 个使用给定 NIC 与 SR-IOV 的 vMX 实例之后,不允许更改 VF 编号。如果您必须更改 VF 的编号,则必须停止运行vMX。我们建议将sriov_numvfs选项设置为更高的值,以避免更改数字sriov_numvfs。
要更改 VF 的已配置值,必须先将该值更改为 0,然后再更改为所需的整数值。
如果未分配 VF,则 VF 数量可更改为任何有效值(0 - n,其中 n 是 SR-IOV 支持的最大 VF 数)
您必须执行以下步骤才能修改 VF 数量:
使用共享 SR-IOV 服务停止运行 VNF NIC。
将虚拟 Functor (VF) 编号设置为 0 ,以禁用 SR-IOV 网络适配器。
As root:
root@ubuntu2:~# echo 0 > /sys/class/net/ens8f1/device/sriov_numvfs
As sudo:
lab@ubuntu2:~$ echo 0 | sudo tee -a /sys/class/net/ens8f1/device/sriov_numvfs
更改所需 VF 数(此示例使用六个)
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs
注意:如果显示以下错误消息,则首先将值设置为步骤 2 中所述的值,然后再执行步骤 3
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs bash: echo: write error: Device or resource busy
使用以下命令验证您的配置:
root@ubuntu2:~# cat /sys/class/net/ens8f1/device/sriov_numvfs
重新启动服务vMX,对 SR-IOV 使用 vmx.conf 文件。
更新 VMX 配置文件 (vmx.conf) 参数
配置 vMX 所需的参数在启动配置文件中定义。配置文件采用 YAML 格式。默认文件为 config/vmx.conf 。您可以将配置文件保存为不同实例的不同名称。
要配置 SR-IOV 设备类型的接口,必须指定接口、NIC 和 MAC 地址。 表 1 提供了用于更改 vmx.conf 文件的配置参数的详细信息。
组件 |
VM 参数 |
描述 |
---|---|---|
vPFE |
|
用于使用 SR-IOV 的所有接口,或用于允许混合使用 |
|
设置为 |
|
接口 |
|
如果 类型 设置为 |
|
设置为 用于 |
|
|
要使用的接口的内核名称。 |
|
|
使用 |
|
|
确保使用共享密钥的每个 VF NIC使用唯一或不同的MAC 地址。 |
示例 vmx.conf 文件:
lab@ubuntu2:~/vmx/config$ cat vmx.conf.sriov
############################################################## # # vmx.conf # Config file for vmx on the hypervisor. # Uses YAML syntax. # Leave a space after ":" to specify the parameter value. # ############################################################## --- #Configuration on the host side - management interface, VM images etc. HOST: identifier : vmx1 # Maximum 6 characters host-management-interface : ens4f0 routing-engine-image : "/home/lab/vmx/images/junos-vmx-x86-64-18.1R3-S2.5.qcow2" routing-engine-hdd : "/home/lab/vmx/images/vmxhdd.img" forwarding-engine-image : "/home/lab/vmx/images/vFPC-20181023.img" --- #External bridge configuration BRIDGES: - type : external name : br-ext # Max 10 characters --- #vRE VM parameters CONTROL_PLANE: vcpus : 1 memory-mb : 1024 console_port: 8601 interfaces : - type : static ipaddr : 10.102.144.94 macaddr : "0A:00:DD:C0:DE:0E" --- #vPFE VM parameters FORWARDING_PLANE: memory-mb : 8192 vcpus : 4 console_port: 8602 device-type : mixed <<<< sriov or mixed use_native_drivers : true <<<< use drivers as provided by the host interfaces : - type : static ipaddr : 10.102.144.98 macaddr : "0A:00:DD:C0:DE:10" --- #Interfaces JUNOS_DEVICES: - interface : ge-0/0/0 type : virtio <<< required mac-address : "02:06:0A:0E:FF:F0" description : "ge-0/0/0 interface" - interface : ge-0/0/1 type : sriov <<< required mtu : 9192 <<< required port-speed-mbps : 10000 <<< required nic : ens8f1 <<< required virtual-function : 0 <<< use consecutive / unique numbers for each vMX instance mac-address : "02:06:0A:0E:FF:F1" <<< make sure that each vNF is using a DIFFERENT MAC-address description : "ge-0/0/1 interface"
开始 vmx-install
lab@ubuntu2:~/vmx$ sudo ./vmx.sh --install --cfg ./config/vmx.conf.sriov
使用 Intel ixgbe 驱动程序所需的更改
当您尝试将现有部署从修改的 IXGBE 驱动程序移动到未修改的 IXGBE 驱动程序时,请在 Junos CLI 中进入编辑模式,并使用以下命令(使用"本机"驱动程序)。
user@host# set interfaces vlan-offload
有关详细信息,请参阅 修改和未修改的 IXGBE 驱动程序。