NetScaler VPX

Konfigurieren Sie eine NetScaler VPX-Instanz auf KVM für die Verwendung von OVS-DPDK-basierten Hostschnittstellen

Sie können eine NetScaler 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 NetScaler VPX-Instanz so konfiguriert wird, dass sie an den vhost-user Ports arbeitet, die von OVS-DPDK auf dem KVM-Host bereitgestellt werden.

OVS ist ein Multilayer-Virtual Switch, der unter der Open-Source-Apache 2.0-Lizenz lizenziert DPDK ist eine Reihe von Bibliotheken und Treibern für die schnelle Paketverarbeitung. DPDK ist ein Satz von Bibliotheken und Treibern für die schnelle Paketverarbeitung.

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

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 Seiten verfügt.

Weitere Informationen finden Sie in dieser Dokumentation zu den DPDK-Systemanforderungen. Es folgt eine Zusammenfassung der Schritte, die erforderlich sind, um eine NetScaler VPX-Instanz auf KVM für die Verwendung von OVS DPDK-basierten Host-Interfaces zu konfigurieren:

  • 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.
  • Hängen 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 Open vSwitch mit DPDK-Dokument .

Erstellen und Installieren von OVS

Laden Sie OVS von der OVS-Downloadseite herunter. Erstellen und installieren Sie als Nächstes OVS mit einem DPDK-Datapath. 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-->

Verbinden Sie die physische Schnittstelle mit der OVS-Brücke

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 dpdk-devargs gezeigte gibt den PCI-BDF der jeweiligen physikalischen NIC an.

Anhängen 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*
<!--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-->

Stellen Sie einen KVM-VPX mit OVS-DPDK-basierten vhost-user Ports bereit

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 NetScaler VPX-Instanz mithilfe von bereitzustellen 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-->

Punkte zu beachten

In der XML-Datei muss die hugepage Größe 1 GB betragen, wie in der Beispieldatei gezeigt.

  <memoryBacking>

      <hugepages>

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

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

In der Beispieldatei ist vhost-user1 auch der vhost Benutzerport, der an ovs-br0 gebunden ist.

  <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 NetScaler VPX-Instanz aufzurufen, verwenden Sie den virsh Befehl.

Konfigurieren Sie eine NetScaler VPX-Instanz auf KVM für die Verwendung von OVS-DPDK-basierten Hostschnittstellen