Ejemplo: Habilitación de SR-IOV en instancias de vMX en KVM
El vMX en KVM admite tipos de interfaz de virtualización de E/S de raíz única (SR-IOV). La virtualización de E/S de una sola raíz (SR-IOV) permite que una función física aparezca como varios vNIC independientes. SR-IOV permite que un dispositivo, como un adaptador de red, tenga acceso independiente a sus recursos entre varias funciones de hardware. Si tiene una NIC física compatible con SR-IOV, puede adjuntar vNICs o funciones virtuales (VF) habilitados para SR-IOV a la instancia de vMX para mejorar el rendimiento.
Requisitos del sistema:
Junos OS versión 18.4 o posterior.
SR-IOV en el VMX para KVM requiere uno de los siguientes controladores NIC Intel:
Intel X520 o X540 con puertos de 10 G y controlador ixgbe
Intel X710 o XL710 con puertos 10G y controlador i40e
A partir de Junos OS versión 19.1R1-S1 y junos OS versión 19.2R1, la compatibilidad con puertos 40G con NIC Intel XL710-QDA2 está disponible para instancias de VMX. Cuando se utilizan puertos 40G, el vMX detecta automáticamente la velocidad del puerto y asigna dos vCPU de E/S.
Para habilitar SR-IOV en instancias de VMX, debe completar las siguientes tareas:
Prepare una NIC para usar SR-IOV en modo sistema (/sys/).
Instalar controlador de Intel, debe compilar el controlador, desinstalar el controlador antiguo e instalar el nuevo controlador compilado
Nota:El instalador de vMX también proporciona un controlador intel modificado. Puede usar los controladores nativos de Intel o el controlador modificado del vMX.
Preparar el archivo vmx.conf
Usar la CLI de Junos para configurar el controlador nativo
Requisito del BIOS para habilitar el SR-IOV: asegúrese de que Intel VT-d o AMD IOMMU estén habilitados en la configuración del BIOS del sistema.
Procedimiento para identificar direcciones PCI y nombre de kernel para la NIC
Descargue e instale el software de controlador más reciente de Intel
Puede descargar el software de controlador más reciente de Intel y reemplazar el software de controlador existente proporcionado por Ubuntu.
En este ejemplo, descargue el software del controlador de adaptador de red Intel® para PCIe* Conexiones de red Intel® 10 Gigabit Ethernet en Linux y guárdlo en cualquier directorio de su elección y siga las instrucciones de README para continuar.
Para instalar el software del controlador desde Intel:
Preparación de la NIC para usar SR-IOV en modo sistema
El host debe estar informado para cada NIC dedicada estableciendo el sriov_numvfs valor, cuántos VF usarán SR-IOV para la NIC dada. El vmx.sh script no tiene información de cuántos VF usarán la NIC compartida. Debido a esto, debe configurar la sriov_numvfs opción correspondiente.
Este valor se puede establecer como una opción de arranque persistente después de un reinicio y se puede cambiar sobre la marcha, lo que no sería persistente después de un reinicio.
El procedimiento que se da en este ejemplo es una solución temporal para configurar sriov_numvfs mediante /sys Cualquier configuración de /sys/class/net/interface-name/device/sriov_numvfs no es permanente, por lo tanto, la configuración no puede sobrevivir a un reinicio.
Para preparar la NIC para usar SR-IOV, complete los siguientes pasos:
# echo num_of_vf > /sys/class/net/interface-name/device/sriov_numvfs
El comando a continuación permite que 4 VNF usen NIC compartida ens8f1 para SR-IOV. Debe usar sudo o necesita iniciar sesión como usuario raíz.
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
La sriov_numvfs
opción solo acepta valores 0-n, donde n es el número máximo de VF compatibles con el SR-IOV.
Configuración de SR-IOV en tiempo de arranque
Los procedimientos siguientes proporcionan algunos métodos alternativos para configurar SR-IOV en los que la configuración persiste un reinicio del host.
Las siguientes opciones están disponibles para establecer el valor durante el proceso de arranque del host:
Uso de rc.local
Configuración de opciones de modprobe
Establecer kernel-paramater mediante grub
A continuación, se muestra un método para configurar el valor mediante el sriov_numvfs comando grub kernel
Para obtener más información sobre enormes páginas, consulte Preparación del host de Ubuntu para instalar vMX.
Edite el archivo "/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"
Después de la edición, actualice lo siguiente:
sudo update-grub
Escriba el cargador de arranque nuevo para activar los cambios durante el próximo reinicio.
sudo grub-install /dev/sda
Reinicie el host para activar la configuración.
sudo reboot
Verificar la configuración sriov_numvfs
Propósito
Para comprobar la sriov_numvfs configuración mediante la CLI. En este ejemplo, la NIC necesaria para usar con SR-IOV es ens8f1 en la dirección PCI 85:00.0. Tenga en cuenta la "función virtual" en la salida.
Acción
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)
El /sys/class/net/ens8f1/device/sriov_numvfs
también contiene el valor deseado de sriov_numvfs.
lab@ubuntu2:~$ cat /sys/class/net/ens8f1/device/sriov_numvfs
8
En el caso de las pruebas, el sriov_numvfs se puede cambiar rápidamente escribiendo directamente en /sys/class/net/interface-name/device/sriov_numvfs
.
Cambiar la cantidad de sriov_numvfs
Recomendamos crear sriov_numvfs de antemano (por ejemplo, mediante el uso del comando grub en tiempo de arranque), ya que no se permite cambiar el número de VF después de implementar la primera instancia de vMX que usa NIC dada con SR-IOV. Si debe cambiar el número del VF, debe detener el vMX en ejecución. Recomendamos establecer la opción de sriov_numvfs en un valor más alto para evitar cambiar el número de sriov_numvfs después.
Para cambiar un valor ya configurado de VF, primero debe cambiar su valor como 0 y, luego, cambiarlo al valor entero necesario.
Si no se asignan VF, el número de VF se puede cambiar a cualquier valor válido (0 - n, donde n es la cantidad máxima de VF compatibles con el SR-IOV)
Debe realizar los siguientes pasos para modificar el número de VF:
Deje de ejecutar VNF mediante la NIC SR-IOV compartida.
Desactive el adaptador de red SR-IOV estableciendo el número de functores virtuales (VF) en 0.
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
Cambie el número necesario de VF (está usando seis en este ejemplo)
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs
Nota:Si ve el siguiente mensaje de error, primero establezca el valor en cero como se describe en el paso 2 antes de realizar el paso 3
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs bash: echo: write error: Device or resource busy
Verifique su configuración mediante el siguiente comando:
root@ubuntu2:~# cat /sys/class/net/ens8f1/device/sriov_numvfs
Antes de reiniciar el vMX, adopte el archivo vmx.conf para el uso de SR-IOV.
Actualización de los parámetros del archivo de configuración VMX (vmx.conf)
Los parámetros necesarios para configurar vMX se definen en el archivo de configuración de inicio. El archivo de configuración está en formato YAML. El archivo predeterminado es config/vmx.conf. Puede guardar el archivo de configuración en un nombre diferente para diferentes instancias.
Para configurar interfaces para tipos de dispositivo SR-IOV, debe especificar la interfaz, la NIC y la dirección MAC. La tabla 1 proporciona los detalles de los parámetros de configuración que estamos usando para cambiar el archivo vmx.conf.
Componentes |
Parámetros de VM |
Descripción |
---|---|---|
vPFE |
|
Usar |
|
Establecer para |
|
Interfaces |
|
Si el tipo está establecido en |
|
Establecerlo para |
|
|
El nombre del kernel que se utilizará en la interfaz. |
|
|
Establecer en |
|
|
Asegúrese de que cada instancia de VF que usa la NIC compartida usa una dirección MAC única o diferente. |
Un archivo vmx.conf de ejemplo:
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"
Inicie vmx-install
lab@ubuntu2:~/vmx$ sudo ./vmx.sh --install --cfg ./config/vmx.conf.sriov
Cambios necesarios para usar el controlador intel ixgbe
Cuando intente mover una implementación existente del controlador IXGBE modificado al controlador IXGBE no modificado, ingrese al modo de edición en Junos CLI y utilice el siguiente comando cuando utilice controladores "nativos".
user@host# set interfaces vlan-offload
Para obtener más información, consulte Controlador IXGBE modificado y no modificado.