Configurer une instance Citrix ADC VPX sur KVM pour utiliser les interfaces hôtes OVS DPDK
Vous pouvez configurer une instance Citrix ADC VPX exécutée sur KVM (Fedora et RHOS) pour utiliser Open vSwitch (OVS) avec Data Plane Development Kit (DPDK) pour de meilleures performances réseau. Ce document décrit comment configurer l’instance Citrix ADC VPX pour fonctionner sur les ports vhost-user exposés par OVS-DPDK sur l’hôte KVM.
OVSest un commutateur virtuel multicouche sous licence open source Apache 2.0. DPDK est un ensemble de bibliothèques et de pilotes permettant un traitement rapide des paquets.
Les versions suivantes de Fedora, RHOS, OVS et DPDK sont qualifiées pour la configuration d’une instance Citrix ADC VPX :
Fedora | RHOS |
---|---|
Fedora 25 | RHOS 7,4 |
OS 2.7.0 | VERSION 2.6.1 |
DPDK 16.11.12 | DPDK 16.11.12 |
Conditions préalables
Avant d’installer DPDK, assurez-vous que l’hôte dispose de 1 Go de pages géantes.
Pour plus d’informations, consultez cettedocumentation sur la configuration système requise pour DPDK. Voici le résumé des étapes nécessaires à la configuration d’une instance Citrix ADC VPX sur KVM pour utiliser les interfaces hôtes basées sur OVS DPDK :
- Installez DPDK.
- Créez et installez OVS.
- Créez un pont OVS.
- Attachez une interface physique au pont OVS.
- Connectez des vhost-user ports au chemin de données OVS.
- Provisionnez un KVM-VPX avec des vhost-user ports OVS-DPDK.
Installer DPDK
Pour installer DPDK, suivez les instructions données dans ce document Ouvrir vSwitch avec DPDK.
Construire et installer OVS
Téléchargez OVS depuis la page de téléchargementd’OVS. Ensuite, créez et installez OVS en utilisant un chemin de données DPDK. Suivez les instructions fournies dans le document Installer Open vSwitch .
Pour plus d’informations, consultez DPDK Getting Started Guide for Linux.
Créer un pont OVS
Selon vos besoins, tapez la commande Fedora ou RHOS pour créer un pont OVS :
Commande Fedora :
> $OVS_DIR/utilities/ovs-vsctl add-br ovs-br0 -- set bridge ovs-br0 datapath_type=netdev
<!--NeedCopy-->
Commande RHOS :
ovs-vsctl add-br ovs-br0 -- set bridge ovs-br0 datapath_type=netdev
<!--NeedCopy-->
Connecter l’interface physique au pont OVS
Liez les ports à DPDK, puis connectez-les au pont OVS en saisissant les commandes Fedora ou RHOS suivantes :
Commande Fedora :
> $OVS_DIR/utilities/ovs-vsctl add-port ovs-br0 dpdk0 -- set Interface dpdk0 type=dpdk options:dpdk-devargs=0000:03:00.0
> $OVS_DIR/utilities/ovs-vsctl add-port ovs-br0 dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=0000:03:00.1
<!--NeedCopy-->
Commande RHOS :
ovs-vsctl add-port ovs-br0 dpdk0 -- set Interface dpdk0 type=dpdk options:dpdk-devargs=0000:03:00.0
ovs-vsctl add-port ovs-br0 dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=0000:03:00.1
<!--NeedCopy-->
Le dpdk-devargs affiché dans le cadre des options spécifie le PCI BDF de la carte réseau physique respective.
Connectez des vhost-user ports au chemin de données OVS
Tapez les commandes Fedora ou RHOS suivantes pour attacher des vhost-user ports au chemin de données OVS :
Commande Fedora :
> $OVS_DIR/utilities/ovs-vsctl add-port ovs-br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser -- set Interface vhost-user1 mtu_request=9000
> $OVS_DIR/utilities/ovs-vsctl add-port ovs-br0 vhost-user2 -- set Interface vhost-user2 type=dpdkvhostuser -- set Interface vhost-user2 mtu_request=9000
chmod g+w /usr/local/var/run/openvswitch/vhost*
<!--NeedCopy-->
Commande RHOS :
ovs-vsctl add-port ovs-br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser -- set Interface vhost-user1 mtu_request=9000
ovs-vsctl add-port ovs-br0 vhost-user2 -- set Interface vhost-user2 type=dpdkvhostuser -- set Interface vhost-user2 mtu_request=9000
chmod g+w /var/run/openvswitch/vhost*
<!--NeedCopy-->
Provisionner un KVM-VPX avec des vhost-user ports OVS-DPDK
Vous pouvez provisionner une instance VPX sur Fedora KVM avec des ports vhost-user basés sur OVS-DPDK uniquement à partir de la CLI en utilisant les commandes QEMU suivantes : Commande Fedora :
qemu-system-x86_64 -name KVM-VPX -cpu host -enable-kvm -m 4096M \
-object memory-backend-file,id=mem,size=4096M,mem-path=/dev/hugepages,share=on -numa node,memdev=mem \
-mem-prealloc -smp sockets=1,cores=2 -drive file=<absolute-path-to-disc-image-file>,if=none,id=drive-ide0-0-0,format=<disc-image-format> \
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-netdev type=tap,id=hostnet0,script=no,downscript=no,vhost=on \
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:3c:d1:ae,bus=pci.0,addr=0x3 \
-chardev socket,id=char0,path=</usr/local/var/run/openvswitch/vhost-user1> \
-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce -device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1,mrg_rxbuf=on \
-chardev socket,id=char1,path=</usr/local/var/run/openvswitch/vhost-user2> \
-netdev type=vhost-user,id=mynet2,chardev=char1,vhostforce -device virtio-net
pci,mac=00:00:00:00:00:02,netdev=mynet2,mrg_rxbuf=on \
--nographic
<!--NeedCopy-->
Pour RHOS, utilisez l’exemple de fichier XML suivant pour provisionner l’instance Citrix ADC VPX, à l’aide de virsh.
<domain type='kvm'\>
<name\>dpdk-vpx1\</name\>
<uuid\>aedb844b-f6bc-48e6-a4c6-36577f2d68d6\</uuid\>
<memory unit='KiB'\>16777216\</memory\>
<currentMemory unit='KiB'\>16777216\</currentMemory\>
<memoryBacking\>
<hugepages\>
<page size='1048576' unit='KiB'/\>
</hugepages\>
</memoryBacking\>
<vcpu placement='static'\>6\</vcpu\>
<cputune\>
<shares\>4096\</shares\>
<vcpupin vcpu='0' cpuset='0'/\>
<vcpupin vcpu='1' cpuset='2'/\>
<vcpupin vcpu='2' cpuset='4'/\>
<vcpupin vcpu='3' cpuset='6'/\>
<emulatorpin cpuset='0,2,4,6'/\>
</cputune\>
<numatune\>
<memory mode='strict' nodeset='0'/\>
</numatune\>
<resource\>
<partition\>/machine\</partition\>
</resource\>
<os\>
<type arch='x86\_64' machine='pc-i440fx-rhel7.0.0'\>hvm\</type\>
<boot dev='hd'/\>
</os\>
<features\>
<acpi/\>
<apic/\>
</features\>
<cpu mode='custom' match='minimum' check='full'\>
<model fallback='allow'\>Haswell-noTSX\</model\>
<vendor\>Intel\</vendor\>
<topology sockets='1' cores='6' threads='1'/\>
<feature policy='require' name='ss'/\>
<feature policy='require' name='pcid'/\>
<feature policy='require' name='hypervisor'/\>
<feature policy='require' name='arat'/\>
<domain type='kvm'\>
<name\>dpdk-vpx1\</name\>
<uuid\>aedb844b-f6bc-48e6-a4c6-36577f2d68d6\</uuid\>
<memory unit='KiB'\>16777216\</memory\>
<currentMemory unit='KiB'\>16777216\</currentMemory\>
<memoryBacking\>
<hugepages\>
<page size='1048576' unit='KiB'/\>
</hugepages\>
</memoryBacking\>
<vcpu placement='static'\>6\</vcpu\>
<cputune\>
<shares\>4096\</shares\>
<vcpupin vcpu='0' cpuset='0'/\>
<vcpupin vcpu='1' cpuset='2'/\>
<vcpupin vcpu='2' cpuset='4'/\>
<vcpupin vcpu='3' cpuset='6'/\>
<emulatorpin cpuset='0,2,4,6'/\>
</cputune\>
<numatune\>
<memory mode='strict' nodeset='0'/\>
</numatune\>
<resource\>
<partition\>/machine\</partition\>
</resource\>
<os\>
<type arch='x86\_64' machine='pc-i440fx-rhel7.0.0'\>hvm\</type\>
<boot dev='hd'/\>
</os\>
<features\>
<acpi/\>
<apic/\>
</features\>
<cpu mode='custom' match='minimum' check='full'\>
<model fallback='allow'\>Haswell-noTSX\</model\>
<vendor\>Intel\</vendor\>
<topology sockets='1' cores='6' threads='1'/\>
<feature policy='require' name='ss'/\>
<feature policy='require' name='pcid'/\>
<feature policy='require' name='hypervisor'/\>
<feature policy='require' name='arat'/\>
<feature policy='require' name='tsc\_adjust'/\>
<feature policy='require' name='xsaveopt'/\>
<feature policy='require' name='pdpe1gb'/\>
<numa\>
<cell id='0' cpus='0-5' memory='16777216' unit='KiB' memAccess='shared'/\>
</numa\>
</cpu\>
<clock offset='utc'/\>
<on\_poweroff\>destroy\</on\_poweroff\>
<on\_reboot\>restart\</on\_reboot\>
<on\_crash\>destroy\</on\_crash\>
<devices\>
<emulator\>/usr/libexec/qemu-kvm\</emulator\>
<disk type='file' device='disk'\>
<driver name='qemu' type='qcow2' cache='none'/\>
<source file='/home/NSVPX-KVM-12.0-52.18\_nc.qcow2'/\>
<target dev='vda' bus='virtio'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/\>
</disk\>
<controller type='ide' index='0'\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/\>
</controller\>
<controller type='usb' index='0' model='piix3-uhci'\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/\>
</controller\>
<controller type='pci' index='0' model='pci-root'/\>
<interface type='direct'\>
<mac address='52:54:00:bb:ac:05'/\>
<source dev='enp129s0f0' mode='bridge'/\>
<model type='virtio'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/\>
</interface\>
<interface type='vhostuser'\>
<mac address='52:54:00:55:55:56'/\>
<source type='unix' path='/var/run/openvswitch/vhost-user1' mode='client'/\>
<model type='virtio'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/\>
</interface\>
<interface type='vhostuser'\>
<mac address='52:54:00:2a:32:64'/\>
<source type='unix' path='/var/run/openvswitch/vhost-user2' mode='client'/\>
<model type='virtio'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/\>
</interface\>
<interface type='vhostuser'\>
<mac address='52:54:00:2a:32:74'/\>
<source type='unix' path='/var/run/openvswitch/vhost-user3' mode='client'/\>
<model type='virtio'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/\>
</interface\>
<interface type='vhostuser'\>
<mac address='52:54:00:2a:32:84'/\>
<source type='unix' path='/var/run/openvswitch/vhost-user4' mode='client'/\>
<model type='virtio'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/\>
</interface\>
<serial type='pty'\>
<target port='0'/\>
</serial\>
<console type='pty'\>
<target type='serial' port='0'/\>
</console\>
<input type='mouse' bus='ps2'/\>
<input type='keyboard' bus='ps2'/\>
<graphics type='vnc' port='-1' autoport='yes'\>
<listen type='address'/\>
</graphics\>
<video\>
<model type='cirrus' vram='16384' heads='1' primary='yes'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/\>
</video\>
<memballoon model='virtio'\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/\>
</memballoon\>
</devices\>
</domain
## Points to note
In the XML file, the hugepage size must be 1 GB, as shown in the sample file.
<memoryBacking\>
<hugepages\>
<page size='1048576' unit='KiB'/\>
</hugepages\>
Also, in the sample file vhost-user1 is the vhostuser port bound to ovs-br0.
<interface type='vhostuser'\>
<mac address='52:54:00:55:55:56'/\>
<source type='unix' path='/var/run/openvswitch/vhost-user1' mode='client'/\>
<model type='virtio'/\>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/\>
</interface\>
<!--NeedCopy-->
Pour afficher l’instance Citrix ADC VPX, commencez par utiliser la commande virsh.