NetScaler VPX 12-1

Configurar una instancia de Citrix ADC VPX en KVM para utilizar interfaces de host basadas en OVS DPDK

Puede configurar una instancia de Citrix ADC VPX que se ejecute en KVM (Fedora y RHOS) para utilizar Open vSwitch (OVS) con el Kit de desarrollo de planos de datos (DPDK) para un mejor rendimiento de la red. Este documento describe cómo configurar la instancia de Citrix ADC VPX para que funcione en los puertos vhost-user expuestos por OVS-DPDK en el host KVM.

OVSes un conmutador virtual multicapa con licencia Apache 2.0 de código abierto. DPDK es un conjunto de bibliotecas y controladores para un procesamiento rápido de paquetes.

Las siguientes versiones de Fedora, RHOS, OVS y DPDK están calificadas para configurar una instancia de Citrix ADC VPX:

Fedora RHOS
Fedora 25 RHOS 7,4
OVS 2.7.0 OVS 2.6.1
DPDK 16.11.12 DPDK 16.11.12

Requisitos previos

Antes de instalar DPDK, asegúrese de que el host tenga 1 GB hugepages.

Para obtener más información, consulte estoDocumentación de requisitos del sistema DPDK. Este es el resumen de los pasos necesarios para configurar una instancia de Citrix ADC VPX en KVM para utilizar interfaces de host basadas en OVS DPDK:

  • Instale DPDK.
  • Construir e instalar OVS.
  • Cree un puente OVS.
  • Conecte una interfaz física al puente OVS.
  • Adjunte los puertos vhost-user a la ruta de datos de OVS.
  • Aprovisione un KVM-VPX con puertos de usuario vhost basados en OVS-DPDK.

Instalar DPDK

Para instalar DPDK, siga las instrucciones que se dan en este Abrir vSwitch con DPDKdocumento.

Crear e instalar OVS

Descargue OVS desde la página de descargasde OVS. A continuación, compile e instale OVS mediante una ruta de datos de DPDK. Siga las instrucciones que figuran en el documento Instalación de Open vSwitch .

Para obtener información más detallada, Guía de introducción de DPDK para Linux.

Creación de un puente OVS

Dependiendo de su necesidad, escriba el comando Fedora o RHOS para crear un puente OVS:

Comando de Fedora:

  > $OVS_DIR/utilities/ovs-vsctl add-br ovs-br0 -- set bridge ovs-br0 datapath_type=netdev
<!--NeedCopy-->

Comando RHOS:

  ovs-vsctl add-br ovs-br0 -- set bridge ovs-br0 datapath_type=netdev
<!--NeedCopy-->

Conexión de la interfaz física al puente OVS

Enlace los puertos a DPDK y luego conéctelos al puente OVS escribiendo los siguientes comandos de Fedora o RHOS:

Comando de 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-->

Comando 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-->

El dpdk-devargs que se muestra como parte de las opciones especifica el PCI BDF de la NIC física respectiva.

Adjuntar puertos vhost-user a la ruta de datos de OVS

Escriba los siguientes comandos de Fedora o RHOS para adjuntar puertos vhost-user a la ruta de datos de OVS:

Comando de 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-->

Comando 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-->

Aprovisionamiento de un KVM-VPX con puertos vhost-user basados en OVS-DPDK

Puede aprovisionar una instancia VPX en Fedora KVM con puertos vhost-user basados en OVS-DPDK solo desde CLI mediante el uso de los siguientes comandos QEMU: Comando de 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-->

Para RHOS, utilice el siguiente archivo XML de ejemplo para aprovisionar la instancia de Citrix ADC VPX, mediante 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-->

Para abrir la instancia de Citrix ADC VPX, comience a usar el comando virsh.

Configurar una instancia de Citrix ADC VPX en KVM para utilizar interfaces de host basadas en OVS DPDK