Citrix ADC

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. Für bestimmte Citrix ADC VPX Bereitstellungen ist außerdem erforderlich, dass der VPX-Host auf KVM auf den vhost-user-Ports betrieben wird, die von OVS bereitgestellt werden, anstatt auf MacVTAP-basierten vhost-Schnittstellen.

OVSist ein virtueller Multilayer Switch, der unter der Open-Source Apache 2.0 Lizenz lizenziert ist. DPDKist eine Reihe von Bibliotheken und Treibern für eine schnelle Paketverarbeitung.

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

Fedora RHOS
Fedora 25 RHOS 7,4
OVS 2.7.0 OVS 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 Seiten verfügt.

Weitere Informationen, siehe Dokumentation zu DPDK-Systemanforderungen. Im Folgenden finden Sie eine Zusammenfassung der Schritte, die erforderlich sind, um eine Citrix ADC VPX Instanz auf KVM für die Verwendung von OVS DPDK-basierten Hostschnittstellen zu konfigurieren:

  • Installieren Sie DPDK.
  • Erstellen und Installieren von OVS.
  • Erstellen Sie eine OVS-Brücke.
  • Schließen Sie eine physikalische Schnittstelle an die OVS-Brücke an.
  • Fügen Sie vhost-user-Ports an den OVS-Datenpfad an.
  • Stellen Sie einen KVM-VPX mit OVS-DPDK-basierten vhost-User-Ports bereit.

DPDK installieren

Um DPDK zu installieren, folgen Sie den Anweisungen in diesemÖffnen Sie vSwitch mit DPDKDokument.

Erstellen und Installieren von OVS

Laden Sie OVS herunter: Downloadseite Als Nächstes erstellen und installieren Sie OVS mit DPDK datapath. Folgen Sie den Anweisungen im Dokument Installieren von Open vSwitch.

Ausführlichere Informationen finden Sie unterDPDK Handbuch Erste Schritte für Linux.

Erstellen einer OVS-Brücke

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

Fedora-Befehl:

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

RHOS-Befehl:

ovs-vsctl add-br ovs-br0 -- set bridge ovs-br0 datapath_type=netdev

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

Binden Sie die Ports an DPDK und fügen Sie sie dann an die OVS-Brücke an, 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

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

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

Anfügen von vhost-user-Ports an den OVS-Datenpfad

Geben Sie die folgenden Fedora- oder RHOS-Befehle ein, um vhost-user-Ports 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*

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*

Bereitstellen eines KVM-VPX mit OVS-DPDK-basierten vhost-Benutzerports

Sie können eine VPX-Instanz auf Fedora KVM mit OVS-DPDK-basierten vhost-user-Ports nur über 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

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

Punkte zu beachten

In der XML-Datei muss die große Seitengröße 1 GB sein, wie in der Beispieldatei gezeigt.

<memoryBacking>

    <hugepages>

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

    </hugepages>

Außerdem ist vhost-user1 in der Beispieldatei der vhostuser-Port an ovs-br0 gebunden.

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

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