ADC

Configurer une instance NetScaler VPX sur KVM pour utiliser les interfaces hôtes basées sur OVS DPDK

Vous pouvez configurer une instance NetScaler VPX exécutée sur KVM (Fedora et RHOS) pour utiliser Open vSwitch (OVS) avec le kit de développement Data Plane (DPDK) afin d’améliorer les performances du réseau. Ce document explique comment configurer l’instance NetScaler VPX pour qu’elle fonctionne sur les vhost-user ports exposés par OVS-DPDK sur l’hôte KVM.

OVS est un commutateur virtuel multicouche sous licence Apache 2.0 open source. 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 configurer une instance NetScaler VPX :

Fedora RHOS
Fedora 25 RHOS 7,4
OVS 2.7.0 OVS 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 pages gigantesques de 1 Go.

Pour plus d’informations, consultez cette documentation relative à la configuration système requise pour DPDK. Voici un résumé des étapes requises pour configurer une instance NetScaler VPX sur KVM afin d’utiliser des 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 Open vSwitch with DPDK .

Construire et installer OVS

Téléchargez OVS depuis la page de téléchargementd’OVS. Ensuite, créez et installez OVS à l’aide d’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-->

Raccorder 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 indiqué dans les options spécifie le BDF PCI 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 vhost-user ports OVS-DPDK uniquement à partir de l’interface de ligne de commande à l’aide des 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 NetScaler VPX, en utilisant. 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
<!--NeedCopy-->

Points à noter

Dans le fichier XML, la hugepage taille doit être de 1 Go, comme indiqué dans le fichier exemple.

<memoryBacking>

    <hugepages>

      <page size='1048576' unit='KiB'/>

    </hugepages>
<!--NeedCopy-->

En outre, dans le fichier exemple, vhost-user1 est le port vhost utilisateur lié à 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 faire apparaître l’instance NetScaler VPX, commencez à utiliser la commande. virsh

Configurer une instance NetScaler VPX sur KVM pour utiliser les interfaces hôtes basées sur OVS DPDK