NetScaler VPX 12-1

Konfigurieren einer Citrix ADC VPX-Instanz auf KVM für die Verwendung von OVS-DPDK-basierten Hostschnittstellen

Sie können eine Citrix ADC VPX-Instanz konfigurieren, die auf KVM (Fedora und RHOS) ausgeführt wird, um Open vSwitch (OVS) mit Data Plane Development Kit (DPDK) für eine bessere Netzwerkleistung zu verwenden. In diesem Dokument wird beschrieben, wie die Citrix ADC VPX-Instanz für den Betrieb auf den von OVS-DPDK auf dem KVM-Host bereitgestellten VHost-Benutzerports konfiguriert wird.

OVSist ein mehrschichtiger virtueller Switch, der unter der Open-Source-Lizenz Apache 2.0 lizenziert ist. DPDK ist ein Satz von Bibliotheken und Treibern für die schnelle Paketverarbeitung.

Die folgenden Fedora-, RHOS-, OVS- und DPDK-Versionen sind für die Konfiguration einer Citrix ADC VPX-Instanz geeignet:

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

Voraussetzungen

Stellen Sie vor der Installation von DPDK sicher, dass der Host über 1 GB große Hugepages verfügt.

Weitere Informationen finden Sie in dieserDokumentation zu den DPDK-Systemanforderungen. Hier ist die Zusammenfassung der Schritte, die zum Konfigurieren einer Citrix ADC VPX-Instanz auf KVM zur Verwendung von OVS DPDK-basierten Hostschnittstellen erforderlich sind:

  • Installieren Sie DPDK.
  • Erstellen und installieren Sie OVS.
  • Erstellen Sie eine OVS-Brücke.
  • Schließen Sie eine physikalische Schnittstelle an die OVS-Brücke an.
  • Fügen Sie Vhost-Benutzerports an den OVS-Datenpfad an.
  • Stellen Sie einen KVM-VPX mit OVS-DPDK-basierten Vhost-Benutzerports bereit.

DPDK installieren

Um DPDK zu installieren, befolgen Sie die Anweisungen in diesem Dokument „ Öffnen Sie vSwitch mit DPDK“.

Erstellen und Installieren von OVS

Laden Sie OVS von der OVS-Downloadseite herunter. Erstellen und installieren Sie als Nächstes OVS mithilfe eines DPDK-Datenpfads. Folgen Sie den Anweisungen im Dokument Installieren von Open vSwitch .

Ausführlichere Informationen finden Sie im DPDK Getting Started Guide für Linux.

Erstellen einer OVS-Brücke

Geben Sie je nach Bedarf den Befehl Fedora oder RHOS ein, um eine OVS-Bridge zu erstellen:

Fedora-Befehl:

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

RHOS-Befehl:

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

Physische Schnittstelle an die OVS-Brücke anschließen

Binden Sie die Ports an DPDK und verbinden Sie sie dann mit der OVS-Bridge, indem Sie die folgenden Fedora- oder RHOS-Befehle eingeben:

Fedora-Befehl:


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

RHOS-Befehl:

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

Die als Teil der Optionen angezeigten dpdk-devargs geben den PCI-BDF der jeweiligen physischen Netzwerkkarte an.

Vhost-User-Ports an den OVS-Datenpfad anhängen

Geben Sie die folgenden Fedora- oder RHOS-Befehle ein, um Vhost-Benutzerports an den OVS-Datenpfad anzuhängen:

Fedora-Befehl:

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

RHOS-Befehl:

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

Bereitstellen eines KVM-VPX mit OVS-DPDK-basierten vhost-user-Ports

Sie können eine VPX-Instanz auf Fedora KVM mit OVS-DPDK-basierten Vhost-User-Ports nur über die CLI bereitstellen, indem Sie die folgenden QEMU-Befehle verwenden: Fedora-Befehl:

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

Verwenden Sie für RHOS die folgende XML-Beispieldatei, um die Citrix ADC VPX-Instanz mithilfe von virsh bereitzustellen.


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

Um die Citrix ADC VPX-Instanz aufzurufen, verwenden Sie den Befehl virsh.

Konfigurieren einer Citrix ADC VPX-Instanz auf KVM für die Verwendung von OVS-DPDK-basierten Hostschnittstellen