Citrix ADC

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

KVM(Fedora および RHOS)で実行されているCitrix ADC VPXインスタンスを、データプレーン開発キット(DPDK)とともにOpen vSwitch(OVS)を使用するように設定することで、ネットワークパフォーマンスを向上させることができます。また、特定のCitrix ADC VPXデプロイメントでは、KVM上のVPXホストが、MacVTapベースの仮想ホストインターフェイスではなく、OVSによって公開される仮想ホストユーザーポート上で動作する必要があります。

OVSは、オープンソースの Apache 2.0 ライセンスでライセンスされたマルチレイヤー仮想スイッチです。DPDKかは、高速パケット処理のためのライブラリとドライバのセットです。

以下のバージョンの Fedora、RHOS、OVS、および DPDK は、Citrix ADC VPX インスタンスを設定するために認定されています。

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ブリッジに物理インターフェイスを接続します。
  • OVSデータパスにvhostユーザーポートを接続します。
  • KVM-VPXにOVS-DPDKベースのvhostユーザーポートをプロビジョニングします。

DPDK のインストール

DPDK をインストールするには、この仮想スイッチをDPDKで開くドキュメントの指示に従ってください。

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

OVSダウンロードページから OVS をダウンロードします。次に、DPDKデータパスを使用してOVSを構築し、インストールします。オープンvSwitchのインストール文書に記載されている指示に従ってください。

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

OVS ブリッジの作成

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

Fedora コマンド:

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

RHOS コマンド:

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

物理インターフェイスを 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

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

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

仮想ホストユーザーポートを 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*

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*

OVS-DPDK ベースの仮想ホストユーザーポートを使用した KVM-VPX のプロビジョニング

以下のQEMUコマンドを使用して、CLI からのみOVS-DPDKベースの仮想ホストユーザーポートを使用して、 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

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

<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

注意点

XML ファイルでは、サンプルファイルに示されているように、hugepage サイズは 1 GB である必要があります。

<memoryBacking>

    <hugepages>

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

    </hugepages>

また、サンプルファイルでは、vhost-user1 は 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>

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

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