Exemplo: habilitar o SR-IOV em instâncias vMX no KVM
O vMX no KVM oferece suporte a tipos de interface de virtualização de E/S de raiz única (SR-IOV). A virtualização de E/S de raiz única (SR-IOV) permite que uma função física apareçam como vNICs múltiplos e separados. O SR-IOV permite que um dispositivo, como um adaptador de rede, tenha acesso separado aos seus recursos entre várias funções de hardware. Se você tiver uma NIC física que ofereça suporte ao SR-IOV, você pode anexar vNICs habilitados para SR-IOV ou funções virtuais (VFs) à instância vMX para melhorar o desempenho.
Requisitos do sistema:
Junos OS Versão 18.4 ou posterior.
O SR-IOV no VMX para KVM requer um dos seguintes drivers intel NIC:
Intel X520 ou X540 usando portas 10G e driver ixgbe
Intel X710 ou XL710 usando portas 10G e driver i40e
A partir do Junos OS Release 19.1R1-S1 e do Junos OS Release 19.2R1, o suporte para portas 40G com NICs Intel XL710-QDA2 está disponível para instâncias VMX. Ao usar portas 40G, o vMX automatiza a velocidade da porta e atribui duas vCPUs de E/S.
Para habilitar o SR-IOV em instâncias VMX, você deve concluir as seguintes tarefas:
Prepare uma NIC para usar o modo SR-IOV no sistema (/sys/)
Instale o driver da Intel, você deve compilar o driver, desinstalar o driver antigo e instalar um novo driver compilado
Nota:O instalador vMX também oferece um controlador de inteligência modificado. Você pode usar os drivers nativos da Intel ou usar o driver modificado vMX.
Prepare o arquivo vmx.conf
Use o Junos CLI para configurar o driver nativo
Requisito de BIOS para habilitar o SR-IOV- Garanta que o Intel VT-d ou o AMD IOMMU sejam habilitados nas configurações de BIOS do sistema.
Procedimento para identificar endereços PCI e nome do kernel para a NIC
Baixe e instale o software de driver mais recente da Intel
Você pode baixar o software de driver mais recente da Intel e substituir o software de driver existente fornecido pelo Ubuntu.
Neste exemplo, baixe o software do Adaptador de rede Intel® para PCIe* Conexões de rede Ethernet Intel® 10 Gigabit sob Linux e reserve-o em qualquer diretório de sua escolha e siga as instruções do README para seguir a seguir.
Para instalar software de driver a partir da Intel:
Prepare a NIC para usar o SR-IOV no modo sistema
O host precisa ser informado para cada NIC dedicado definindo o sriov_numvfs valor, quantos VFs usarão SR-IOV para a determinada NIC. O script vmx.sh não tem informações de quantos VFs usarão a NIC compartilhada. Por causa disso, você deve configurar o sriov_numvfs de acordo.
Esse valor pode ser definido como uma opção de inicialização para ser persistente após uma reinicialização e pode ser alterado em tempo real, o que não seria persistente após uma reinicialização.
O procedimento dado neste exemplo é uma solução temporária para configurar sriov_numvfs usando /sys Qualquer configuração para /sys/class/net/interface-name/dispositivo/sriov_numvfs não é permanente, portanto a configuração não sobrevive a uma reinicialização.
Para preparar a NIC para usar o SR-IOV, preencha as seguintes etapas:
# echo num_of_vf > /sys/class/net/interface-name/device/sriov_numvfs
O comando abaixo permite que 4 VNFs usem NIC compartilhado ens8f1 para SR-IOV. Você deve usar o sudo ou precisar de login como usuário raiz.
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
A opção sriov_numvfs
só aceita valores de 0-n, onde n é o número máximo de VFs que são suportados pelo SR-IOV.
Configuração do SR-IOV no boot-time
Os procedimentos a seguir fornecem alguns métodos alternativos para configurar o SR-IOV, onde a configuração persiste em uma reinicialização do host.
Estão disponíveis opções a seguir para definir o valor durante o processo de inicialização do host:
Usando rc.local
Configuração de opções de modprobe
Configuração do kernel-paramater usando o kernel
Abaixo, exemplo mostra um método para configurar o valor usando o sriov_numvfs comando kernel de kernel
Para obter mais informações sobre páginas enormes, consulte Prepare o host do Ubuntu para instalar o vMX.
Edite o arquivo "/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"
Após a edição, atualize o seguinte:
sudo update-grub
Escreva um novo boot-loader para tornar as mudanças ativas na próxima reinicialização.
sudo grub-install /dev/sda
Reinicialize o host para ativar as configurações.
sudo reboot
Verifique sriov_numvfs configurações
Propósito
Para verificar a sriov_numvfs configuração usando a CLI. Neste exemplo, a NIC necessária para usar com SR-IOV é ens8f1 no endereço PCI 85:00.0. Observe a "Função Virtual" na saída.
Ação
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)
O /sys/class/net/ens8f1/device/sriov_numvfs
também contém o valor desejado de sriov_numvfs.
lab@ubuntu2:~$ cat /sys/class/net/ens8f1/device/sriov_numvfs
8
Para testes, a sriov_numvfs pode ser alterada rapidamente escrevendo diretamente em /sys/class/net/interface-name/device/sriov_numvfs
.
Mudando o número de sriov_numvfs
Recomendamos a criação de sriov_numvfs com antecedência (exemplo: usando o comando de grub no boot-time), porque a alteração do número do VF não é permitida após a implantação da 1ª instância vMX que usa a NIC com SR-IOV. Se você precisa alterar o número do VF, então você deve parar o vMX em execução. Recomendamos definir a opção sriov_numvfs a um valor mais alto para evitar alterar o número de sriov_numvfs depois.
Para alterar um valor já configurado de VFs, você deve primeiro alterá-lo como 0 e depois alterá-lo para um valor inteiro necessário.
Se não houver VFs atribuídos, o número de VFs pode ser alterado para qualquer valor válido (0 - n, onde n é o número máximo de VFs suportados pelo SR-IOV)
Você deve executar as seguintes etapas para modificar o número de VFs:
Pare de executar VNFs usando o NIC SR-IOV compartilhado.
Desativar o adaptador de rede SR-IOV definindo o número de Functors Virtuais (VFs) para 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
Altere o número necessário de VF (você está usando seis neste exemplo)
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs
Nota:Se você vir a mensagem de erro a seguir, primeiro defina o valor para zero, conforme descrito na etapa 2 antes de realizar a etapa 3
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs bash: echo: write error: Device or resource busy
Verifique sua configuração usando o seguinte comando:
root@ubuntu2:~# cat /sys/class/net/ens8f1/device/sriov_numvfs
Antes de reiniciar o vMX, adote o arquivo vmx.conf para uso do SR-IOV.
Atualização dos parâmetros do arquivo de configuração VMX (vmx.conf)
Os parâmetros necessários para configurar o vMX são definidos no arquivo de configuração da startup. O arquivo de configuração está no formato YAML. O arquivo padrão é config/vmx.conf. Você pode salvar seu arquivo de configuração para um nome diferente para diferentes instâncias.
Para configurar interfaces para tipos de dispositivo SR-IOV, você deve especificar a interface, a NIC e o endereço MAC. A Tabela 1 fornece os detalhes dos parâmetros de configuração que estamos usando para alterar o arquivo vmx.conf.
Componentes |
Parâmetros de VM |
Descrição |
---|---|---|
vPFE |
|
Use |
|
Definido para |
|
Interfaces |
|
Se o tipo for definido para |
|
Configurá-lo para |
|
|
O nome do kernel para a interface usar. |
|
|
Definir para a |
|
|
Garanta que cada instância VF usando a NIC compartilhada esteja usando um endereço MAC único ou diferente. |
Um arquivo vmx.conf amostra:
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 a instalação do vmx
lab@ubuntu2:~/vmx$ sudo ./vmx.sh --install --cfg ./config/vmx.conf.sriov
Mudanças necessárias para o uso do driver Intel ixgbe
Quando você tenta mover uma implantação existente do driver IXGBE modificado para o driver IXGBE não modificado, entre em modo de edição no Junos CLI e use o seguinte comando ao usar drivers "nativos".
user@host# set interfaces vlan-offload
Para obter mais informações, consulte o Driver IXGBE modificado e não modificado.