Konfigurieren einer NetScaler VPX-Instanz auf KVM zur Verwendung von OVS DPDK-basierten Host-Schnittstellen
Sie können eine NetScaler VPX-Instanz, die auf KVM (Fedora und RHOS) ausgeführt wird, so konfigurieren, dass sie Open vSwitch (OVS) mit dem Data Plane Development Kit (DPDK) für eine bessere Netzwerkleistung verwendet. Dieses Dokument beschreibt, wie die NetScaler VPX-Instanz konfiguriert wird, um auf den vhost-user Ports zu arbeiten, die von OVS-DPDK auf dem KVM-Host bereitgestellt werden.
OVS ist ein mehrschichtiger virtueller Switch, der unter der Open-Source-Lizenz Apache 2.0 lizenziert ist. DPDK ist eine Sammlung von Bibliotheken und Treibern für die schnelle Paketverarbeitung.
Die folgenden Fedora-, RHOS-, OVS- und DPDK-Versionen sind für die Konfiguration einer NetScaler 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
Bevor Sie DPDK installieren, stellen Sie sicher, dass der Host über 1 GB Huge Pages verfügt.
Weitere Informationen finden Sie in dieser DPDK-Systemanforderungsdokumentation. Hier ist eine Zusammenfassung der Schritte, die zur Konfiguration einer NetScaler VPX-Instanz auf KVM zur Verwendung von OVS DPDK-basierten Host-Schnittstellen erforderlich sind:
- DPDK installieren.
- OVS erstellen und installieren.
- Eine OVS-Bridge erstellen.
- Eine physische Schnittstelle an die OVS-Bridge anfügen.
-
vhost-userPorts an den OVS-Datenpfad anfügen. - Eine KVM-VPX mit OVS-DPDK-basierten
vhost-userPorts bereitstellen.
DPDK installieren
Um DPDK zu installieren, befolgen Sie die Anweisungen in diesem Open vSwitch mit DPDK Dokument.
OVS erstellen und installieren
Laden Sie OVS von der OVS Download-Seite herunter. Erstellen und installieren Sie anschließend OVS mithilfe eines DPDK-Datenpfads. Befolgen Sie die Anweisungen im Dokument Installing Open vSwitch.
Weitere detaillierte Informationen finden Sie unter DPDK Getting Started Guide for Linux.
Eine OVS-Bridge erstellen
Geben Sie je nach Bedarf den Fedora- oder RHOS-Befehl 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-->
Die physische Schnittstelle an die OVS-Bridge anbinden
Binden Sie die Ports an DPDK und hängen Sie sie dann an die OVS-Bridge 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
<!--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-->
Der dpdk-devargs, der als Teil der Optionen angezeigt wird, gibt den PCI-BDF der jeweiligen physischen NIC an.
vhost-user Ports an den OVS-Datenpfad anbinden
Geben Sie die folgenden Fedora- oder RHOS-Befehle ein, um vhost-user Ports an den OVS-Datenpfad anzubinden:
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-->
KVM-VPX mit OVS-DPDK-basierten vhost-user Ports bereitstellen
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-->
Für RHOS verwenden Sie die folgende Beispiel-XML-Datei, um die NetScaler 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
<!--NeedCopy-->
Hinweise
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-->
Auch in der Beispieldatei ist vhost-user1 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 zu starten, verwenden Sie den Befehl virsh.