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 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 Citrix ADC 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 Citrix ADC 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.
vhost-user
Ports an den OVS-Datenpfad
Anhängen von 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-->
vhost-user
Ports bereit
Stellen Sie einen KVM-VPX mit OVS-DPDK-basierten 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 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 Citrix ADC VPX-Instanz aufzurufen, verwenden Sie den virsh
Befehl.