Exemple : activation de SR-IOV sur des instances vMX sur KVM
vMX sur KVM prend en charge les types d’interfaces de virtualisation des E/S à racine unique (SR-IOV). La virtualisation des E/S à racine unique (SR-IOV) permet à une fonction physique d’apparaître sous la forme de plusieurs vNIC distinctes. SR-IOV permet à un périphérique, tel qu’une carte réseau, d’avoir un accès séparé à ses ressources entre les différentes fonctions matérielles. Si vous disposez d’une carte réseau physique prenant en charge SR-IOV, vous pouvez attacher des vNIC compatibles SR-IOV ou des fonctions virtuelles (VF) à l’instance vMX pour améliorer les performances.
Configuration système requise :
Junos OS version 18.4 ou ultérieure.
SR-IOV sur le VMX pour KVM nécessite l’un des pilotes de carte réseau Intel suivants :
Intel X520 ou X540 utilisant des ports 10G et un pilote ixgbe
Intel X710 ou XL710 utilisant des ports 10G et pilote i40e
À partir de Junos OS version 19.1R1-S1 et de Junos OS version 19.2R1, la prise en charge des ports 40G avec des cartes réseau Intel XL710-QDA2 est disponible pour les instances VMX. Lors de l’utilisation de ports 40G, le vMX détecte automatiquement la vitesse du port et attribue deux vCPU d’E/S.
Pour activer SR-IOV sur les instances VMX, vous devez effectuer les tâches suivantes :
Préparez une carte réseau pour utiliser SR-IOV en mode système (/sys/).
Installez le pilote à partir d’Intel, vous devez compiler le pilote, désinstaller l’ancien pilote et installer le nouveau pilote compilé
Note:Le programme d’installation de vMX fournit également un pilote d’intel modifié. Vous pouvez utiliser les pilotes natifs d’Intel ou utiliser le pilote modifié vMX.
Préparer le fichier vmx.conf
Utiliser l’interface de ligne de commande Junos pour configurer le pilote natif
Configuration requise du BIOS pour activer SR-IOV - Assurez-vous que Intel VT-d ou AMD IOMMU sont activés dans les paramètres du BIOS du système.
Procédure d’identification des adresses PCI et du nom du noyau pour la carte réseau
Téléchargez et installez le dernier pilote logiciel d’Intel
Vous pouvez télécharger le dernier logiciel pilote d’Intel et remplacer le logiciel pilote existant fourni par Ubuntu.
Dans cet exemple, téléchargez le logiciel à partir du pilote de carte réseau Intel pour PCIe * Connexions réseau Intel®® 10 Gigabit Ethernet sous Linux et enregistrez-le dans le répertoire de votre choix et suivez les instructions README pour continuer.
Pour installer le pilote logiciel d’Intel :
Préparer la carte réseau à utiliser SR-IOV en mode système
L’hôte doit être informé pour chaque carte réseau dédiée en définissant la valeur, le nombre de VF qui vont utiliser SR-IOV pour la sriov_numvfs carte réseau donnée. Le script vmx.sh n’a aucune information sur le nombre de VF qui utiliseront la carte réseau partagée. Pour cette raison, vous devez configurer le en sriov_numvfs conséquence.
Cette valeur peut être définie comme une option de démarrage pour être persistante après un redémarrage et peut être modifiée à la volée qui ne serait pas persistante après un redémarrage.
La procédure donnée dans cet exemple est une solution temporaire pour la configuration à l’aide de /sys Tout paramètre sur /sys/class/net//device/interface-namesriov_numvfs n’est pas permanent, donc la configuration sriov_numvfs ne survit pas à un redémarrage.
Pour préparer la carte réseau à utiliser le SR-IOV, procédez comme suit :
# echo num_of_vf > /sys/class/net/interface-name/device/sriov_numvfs
La commande ci-dessous permet à 4 VNF d’utiliser la carte réseau partagée ens8f1 pour SR-IOV. Vous devez utiliser sudo ou vous devez vous connecter en tant qu’utilisateur 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
L’option sriov_numvfs
accepte uniquement les valeurs 0-n, où n est le nombre maximal de VF prises en charge par le SR-IOV.
Configuration de SR-IOV au démarrage
Les procédures suivantes fournissent d’autres méthodes pour configurer SR-IOV lorsque la configuration persiste un redémarrage de l’hôte.
Les options suivantes sont disponibles pour définir la valeur pendant le processus de démarrage de l’hôte :
Utilisation de rc.local
Définition des options de modprobe
Définition de kernel-paramater à l’aide de grub
L’exemple ci-dessous montre une méthode pour configurer la valeur à l’aide de la sriov_numvfs commande grub kernel
Pour plus d’informations sur hugepages, consultez Préparation de l’hôte Ubuntu pour l’installation de vMX.
Editez le fichier « /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"
Après modification, mettez à jour les éléments suivants :
sudo update-grub
Écrivez un nouveau chargeur de démarrage pour activer les modifications au prochain redémarrage.
sudo grub-install /dev/sda
Redémarrez l’hôte pour activer les paramètres.
sudo reboot
Vérifier les paramètres sriov_numvfs
But
Pour vérifier la configuration à l’aide sriov_numvfs de l’interface de ligne de commande. Dans cet exemple, la carte réseau à utiliser avec SR-IOV est ens8f1 à l’adresse PCI 85 :00.0. Veuillez noter la « Fonction virtuelle » dans la sortie.
Action
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)
Le /sys/class/net/ens8f1/device/sriov_numvfs
contient également la valeur souhaitée de sriov_numvfs.
lab@ubuntu2:~$ cat /sys/class/net/ens8f1/device/sriov_numvfs
8
Pour les tests, le sriov_numvfs peut être modifié rapidement en écrivant directement dans /sys/class/net/interface-name/device/sriov_numvfs
.
Modification du nombre de sriov_numvfs
Nous vous recommandons de créer sriov_numvfs à l’avance (exemple : en utilisant la commande grub au démarrage), car il n’est pas permis de modifier le numéro du VF après le déploiement de la 1ère instance vMX qui utilise une carte réseau donnée avec SR-IOV. Si vous devez modifier le numéro du VF, vous devez arrêter le vMX en cours d’exécution. Nous vous recommandons de définir l’option sriov_numvfs sur une valeur plus élevée pour éviter de changer le numéro de sriov_numvfs par la suite.
Pour modifier une valeur déjà configurée de VF, vous devez d’abord modifier sa valeur en 0, puis la remplacer par la valeur entière requise.
Si aucune VF n’est attribuée, le nombre de VF peut être modifié en n’importe quelle valeur valide (0 - n, où n est le nombre maximal de VF prises en charge par le SR-IOV)
Vous devez effectuer les étapes suivantes pour modifier le nombre de VF :
Arrêtez d’exécuter des VNF à l’aide de la carte réseau SR-IOV partagée.
Désactivez la carte réseau SR-IOV en définissant le nombre de foncteurs virtuels (VF) sur 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
Modifiez le nombre requis de VF (vous en utilisez six dans cet exemple)
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs
Note:Si le message d’erreur suivant s’affiche, définissez d’abord la valeur sur zéro comme décrit à l’étape 2 avant d’effectuer l’étape 3
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs bash: echo: write error: Device or resource busy
Vérifiez votre configuration à l’aide de la commande suivante :
root@ubuntu2:~# cat /sys/class/net/ens8f1/device/sriov_numvfs
Avant de redémarrer le vMX, adoptez le fichier vmx.conf pour l’utilisation de SR-IOV.
Mise à jour des paramètres du fichier de configuration VMX (vmx.conf)
Les paramètres requis pour configurer vMX sont définis dans le fichier de configuration de démarrage. Le fichier de configuration est au format YAML. Le fichier par défaut est config/vmx.conf. Vous pouvez enregistrer votre fichier de configuration sous un nom différent pour différentes instances.
Pour configurer des interfaces pour les types d’équipements SR-IOV, vous devez spécifier l’interface, la carte réseau et l’adresse MAC. Le tableau 1 fournit les détails des paramètres de configuration que nous utilisons pour modifier le fichier vmx.conf.
Composants |
Paramètres de la machine virtuelle |
Description |
---|---|---|
vPFE |
|
Utiliser |
|
Défini sur |
|
Interfaces |
|
Si type est défini sur |
|
Réglez-le sur |
|
|
nom_noyau de l’interface à utiliser. |
|
|
Définissez sur |
|
|
Assurez-vous que chaque instance VF utilisant la carte réseau partagée utilise une adresse MAC unique ou différente. |
Exemple de fichier 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"
Démarrez vmx-install
lab@ubuntu2:~/vmx$ sudo ./vmx.sh --install --cfg ./config/vmx.conf.sriov
Modifications requises pour l’utilisation du pilote Intel ixgbe
Lorsque vous essayez de déplacer un déploiement existant d’un pilote IXGBE modifié vers un pilote IXGBE non modifié, passez en mode édition dans Junos CLI et utilisez la commande suivante lorsque vous utilisez des pilotes « natifs ».
user@host# set interfaces vlan-offload
Pour plus d’informations, consultez Pilote IXGBE modifié et non modifié.