ネットスケーラーVPX12-1

OVS DPDKベースのホストインターフェイスを使用するように、KVM上のCitrix ADC VPXインスタンスを構成する

KVM(Fedora および RHOS)で実行されているCitrix ADC VPXインスタンスを、データプレーン開発キット(DPDK)とともにOpen vSwitch(OVS)を使用するように設定することで、ネットワークパフォーマンスを向上させることができます。 このドキュメントでは、KVM ホスト上の OVS-DPDK によって公開される vhost-user ポートで動作するように Citrix ADC VPX インスタンスを構成する方法について説明します。

OVSは、オープンソースの Apache 2.0 ライセンスに基づいてライセンスされる多層仮想スイッチです。 DPDK は、高速パケット処理のためのライブラリとドライバのセットです。

Citrix ADC VPX インスタンスを構成するには、次の Fedora、RHOS、OVS、および DPDK バージョンが適しています。

Fedora RHOS
Fedora 25 RHOS 7.4
OVS 2.7.0 OVS 2.6.1
DPDK 16.11.12 DPDK 16.11.12

前提条件

DPDK をインストールする前に、ホストに 1 GB の hugepages があることを確認してください。

詳細については、こちらのDPDK システム要件ドキュメントを参照してください。 OVS DPDK ベースのホスト インターフェイスを使用するために KVM 上の Citrix ADC VPX インスタンスを構成するために必要な手順の概要は次のとおりです。

  • DPDKをインストールします。
  • OVSを構築し、インストールします。
  • OVSブリッジを作成します。
  • OVSブリッジに物理インターフェイスを接続します。
  • vhost-user ポートを OVS データ パスに接続します。
  • OVS-DPDK ベースの vhost-user ポートを使用して KVM-VPX をプロビジョニングします。

DPDK のインストール

DPDK をインストールするには、この Open vSwitch with DPDKドキュメントに記載されている手順に従ってください。

OVS のビルドとインストール

OVS のダウンロードページから OVS をダウンロードします。 次に、DPDK データパスを使用して OVS をビルドしてインストールします。 「 Open vSwitch のインストール 」ドキュメントに記載されている手順に従います。

詳細については、「 DPDK 入門ガイド for Linux」を参照してください。

OVS ブリッジの作成

必要に応じて、FedoraコマンドかRHOSコマンドを入力して、OVSブリッジを作成します。

Fedora コマンド:

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

RHOS コマンド:

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

OVSブリッジに物理インターフェースを接続する

ポートを DPDK にバインドし、次の Fedora または RHOS コマンドを入力して OVS ブリッジにアタッチします。

Fedora コマンド:


  > $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 コマンド:

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

オプションの一部として表示される dpdk-devargs は、それぞれの物理 NIC の PCI BDF を指定します。

vhost-user ポートを OVS データ パスに接続する

次の Fedora または RHOS コマンドを入力して、vhost-user ポートを OVS データ パスに接続します。

Fedora コマンド:

  > $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 コマンド:

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

OVS-DPDKベースのvhost-userポートを使用してKVM-VPXをプロビジョニングする

次の QEMU コマンドを使用して、CLI からのみ、OVS-DPDK ベースの vhost-user ポートを持つ Fedora KVM 上の VPX インスタンスをプロビジョニングできます。 Fedora コマンド:

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

RHOS の場合、virsh を使用して Citrix ADC VPX インスタンスをプロビジョニングするには、次のサンプル XML ファイルを使用します。


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

Citrix ADC VPX インスタンスを起動するには、virsh コマンドを使用します。

OVS DPDKベースのホストインターフェイスを使用するように、KVM上のCitrix ADC VPXインスタンスを構成する