第4章 DPDK で高速化した Open vSwitch (OVS) のネットワーク設定
本章では、Red Hat OpenStack Platform 環境内で DPDK を Open vSwitch とともにインストールしてチューニングする方法について説明します。
OVS-DPDK を設定するのに使用されるパラメーターについて理解するには、「OVS-DPDK デプロイメントのプランニング」を参照してください。
本ガイドでは、CPU の割り当て、メモリーの確保、NIC の設定の例を紹介します。これらは、トポロジーとユースケースによって異なる場合があります。ハードウェアと設定のオプションについて理解するには、『ネットワーク機能仮想化 (NFV) の製品ガイド』および『ネットワーク機能仮想化 (NFV) のプランニングガイド』を参照してください。
etc/tuned/cpu-partitioning-variables.conf の isolated_cores や他の値を編集または変更しないでください。これらは、ここで説明する director の heat テンプレートにより変更されます。
以降の手順で、以下の設定を行う必要があります。
-
適切な
network-environment.yamlファイルを更新して、カーネル引数と DPDK 引数のパラメーターを追加する。 -
compute.yamlファイルを更新して、DPDK インターフェース用のブリッジを追加する。 -
controller.yamlファイルを更新して、DPDK インターフェースパラメーター用の同じブリッジ情報を追加する。 -
overcloud_deploy.shスクリプトを実行して、DPDK パラメーターを使用してオーバークラウドをデプロイする。
デプロイメントでヒュージページが使用される場合は、reserved_huge_pages を設定する必要もあります。詳しくは、「How to set reserved_huge_pages in /etc/nova/nova.conf in Red Hat OpenStack Platform」を参照してください。
手順を開始する前に、以下の項目が揃っていることを確認します。
- Red Hat Enterprise Linux 7.5 上で動作している Red Hat OpenStack Platform 10
- OVS-DPDK 2.9
- テスト済み NIC。NFV 向けのテスト済み NIC の一覧は、「テスト済み NIC」を参照してください。
OVS-DPDK デプロイメントでは、Red Hat OpenStack Platform 10 と OVS 2.9 の組み合わせは、OVS クライアントモードで稼働します。
4.1. 命名規則 リンクのコピーリンクがクリップボードにコピーされました!
OpenStack デプロイメントでカスタムロールを使用する場合、特にノードが複数あるケースでは、一貫性のある命名規則に従うことを推奨します。この命名規則は、以下のファイルおよび設定を作成する際に役立ちます。
instackenv.json: ハードウェアまたは NIC 機能が異なるノードを区別する。"name":"computeovsdpdk-0"
"name":"computeovsdpdk-0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow roles_data.yaml: DPDK をサポートする Compute ベースのロールを区別する。`ComputeOvsDpdk`
`ComputeOvsDpdk`Copy to Clipboard Copied! Toggle word wrap Toggle overflow network-environment.yaml: カスタムロールを正しいフレーバー名に一致させる。`OvercloudComputeOvsDpdkFlavor: computeovsdpdk`
`OvercloudComputeOvsDpdkFlavor: computeovsdpdk`Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
nic-configのファイル名: DPDK インターフェースをサポートするコンピュートノードの NIC yaml ファイルを区別する。 フレーバー作成: フレーバーおよび
capabilities:profileの値を適切なベアメタルノードおよびカスタムロールに容易に一致させる。openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 4 computeovsdpdk openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="computeovsdpdk" computeovsdpdk
# openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 4 computeovsdpdk # openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="computeovsdpdk" computeovsdpdkCopy to Clipboard Copied! Toggle word wrap Toggle overflow ベアメタルノード: ベアメタルノードを適切なハードウェアおよび
capability:profileの値に一致させる。openstack baremetal node update computeovsdpdk-0 add properties/capabilities='profile:computeovsdpdk,boot_option:local'
# openstack baremetal node update computeovsdpdk-0 add properties/capabilities='profile:computeovsdpdk,boot_option:local'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
フレーバー名をフレーバーの capabilities:profile の値に一致させる必要はありませんが、フレーバーの capabilities:profile の値をベアメタルノードの properties/capabilities='profile の値に一致させる必要があります。上記の例では、3 つすべてに computeovsdpdk が使用されています。
カスタムロールおよびプロファイルに使用するすべてのノードの CPU、RAM、および PCI ハードウェアトポロジーが、同じになるようにしてください。
4.2. VLAN トンネリングを使用する 2 ポート OVS-DPDK データプレーンボンディングの設定 リンクのコピーリンクがクリップボードにコピーされました!
本項では、OpenStack 環境用に、コントロールプレーンの Linux ボンディングと共に、OVS-DPDK ボンディングの 2 つのデータプレーンポートを持つ OVS-DPDK を設定およびデプロイする手順について説明します。
4.2.1. first-boot.yaml の変更 リンクのコピーリンクがクリップボードにコピーされました!
first-boot.yaml ファイルを変更し、OVS および DPDK パラメーターを設定し、CPU アフィニティー用に tuned を設定します。
以前のデプロイメントで first-boot.yaml ファイルに以下の行を追加している場合、Open vSwitch 2.9 を使用する Red Hat OpenStack Platform 10 ではこれらの行を削除してください。
新たなリソースを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DPDK パラメーターを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow tuned設定を定義して CPU アフィニティーを提供します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルの引数を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2. network-environment.yaml の変更 リンクのコピーリンクがクリップボードにコピーされました!
resource_registryセクションに OVS-DPDK 用のカスタムリソースを追加します。resource_registry: # Specify the relative/absolute path to the config files you want to use for override the default. OS::TripleO::Compute::Net::SoftwareConfig: nic-configs/compute.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yaml OS::TripleO::NodeUserData: first-boot.yamlresource_registry: # Specify the relative/absolute path to the config files you want to use for override the default. OS::TripleO::Compute::Net::SoftwareConfig: nic-configs/compute.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yaml OS::TripleO::NodeUserData: first-boot.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、トンネル種別を無効にし (値を""に設定)、ネットワーク種別をvlanに設定します。NeutronTunnelTypes: '' NeutronNetworkType: 'vlan'
NeutronTunnelTypes: '' NeutronNetworkType: 'vlan'Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、物理ネットワークを仮想ブリッジにマッピングします。NeutronBridgeMappings: 'tenant:br-link0'
NeutronBridgeMappings: 'tenant:br-link0'Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、OpenStack Networking ML2 および Open vSwitch VLAN のマッピング範囲を設定します。NeutronNetworkVLANRanges: 'tenant:22:22,tenant:25:25'
NeutronNetworkVLANRanges: 'tenant:22:22,tenant:25:25'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、物理ネットワーク上の VLAN 範囲を設定しています。
parameter_defaultsセクションにおいて、OVS-DPDK の設定パラメーターを定義します。注記NeutronDPDKCoreListとNeutronDPDKMemoryChannelsは、本手順では 必須の 設定です。適切な値を設定せずに DPDK のデプロイメントを試みると、デプロイメントが失敗したり、不安定なデプロイメントになったりします。DPDK Poll Mode Driver (PMD) として使用することのできる CPU コアの一覧を、
[allowed_pattern: "'[0-9,-]+'"]の形式で指定します。NeutronDpdkCoreList: "'2,22,3,23'"
NeutronDpdkCoreList: "'2,22,3,23'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ゲストインスタンス作成の失敗を避けるために、DPDK PMD 用の DPDK NIC の有無にかかわらず、各 NUMA ノード上で少なくとも 1 つの CPU を (シブリングスレッドと共に) 割り当てる必要があります。
OVS-DPDK のパフォーマンスを最適化するために、以下のオプションを検討してください。
-
DPDK インターフェースの NUMA ノードに関連付けられた CPU を選択する。インターフェースに関連付けられた NUMA ノードを一覧表示するには、
cat /sys/class/net/<interface>/device/numa_nodeを使用します。その NUMA ノードに関連付けられた CPU を一覧表示するには、lscpuを使用します。 -
CPU シブリングをまとめてグループ化する (ハイパースレッディングの場合)。CPU のシブリングを確認するには、
cat /sys/devices/system/cpu/<cpu>/topology/thread_siblings_listを使用します。 - ホストプロセス用に CPU 0 を確保する。
- ホストプロセスが PMD に割り当てられた CPU を使用しないように、これらの CPU を分離する。
NovaVcpuPinsetを使用して、PMD に割り当てられた CPU を Compute のスケジューリングから除外する。メモリーチャネルの数を、
[allowed_pattern: "[0-9]+"]の形式で指定します。NeutronDpdkMemoryChannels: "4"
NeutronDpdkMemoryChannels: "4"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソケットごとに、ヒュージページプールから事前に割り当てられたメモリーを設定します。
NeutronDpdkSocketMemory: "'3072,1024'"
NeutronDpdkSocketMemory: "'3072,1024'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CPU ソケットの降順で、形式はコンマ区切り文字列です。上記の例は 2 つの NUMA ノード構成を前提とし、ソケット 0 およびソケット 1 を設定してそれぞれ 1024 MB のヒュージページを事前割り当てします。NUMA ノードが 1 つのシステムでは、この値を 1024,0 に設定します。
OVS ブリッジの DPDK ドライバーの種別を設定します。
NeutronDpdkDriverType: "vfio-pci"
NeutronDpdkDriverType: "vfio-pci"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
parameter_defaultsセクションにおいて、OVS 用の vhost-user ソケットディレクトリーを設定します。NeutronVhostuserSocketDir: "/var/lib/vhost_sockets"
NeutronVhostuserSocketDir: "/var/lib/vhost_sockets"Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、ホストプロセス用の RAM を確保します。NovaReservedHostMemory: 4096
NovaReservedHostMemory: 4096Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、仮想マシンプロセス用に確保する物理 CPU コアのコンマ区切りリストまたは範囲を設定します。NovaVcpuPinSet: "4-19,24-39"
NovaVcpuPinSet: "4-19,24-39"Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、適用可能なフィルターの一覧を設定します。Nova スケジューラーは、ここで指定するリスト順にこれらのフィルターを適用します。ノードに対するフィルタリングのプロセスがより効率的になるように、最も制限の厳しいフィルターを最初に設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、ComputeKernelArgsパラメーターを追加して、初回ブート時にこれらのパラメーターをデフォルトのgrubファイルに追加します。ComputeKernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on"
ComputeKernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記これらのヒュージページは仮想マシンよって消費されると共に、本手順に示すように
NeutronDpdkSocketMemoryパラメーターを使用して OVS-DPDK によって消費されます。仮想マシンが利用可能なヒュージページの数は、bootパラメーターからNeutronDpdkSocketMemoryを減算した値です。DPDK インスタンスに関連付けるフレーバーに
hw:mem_page_size=1GBを追加する必要があります。追加しない場合、DHCP による割り当てがインスタンスに適用されません。parameter_defaultsセクションにおいて、チューニングする物理 CPU コアの一覧または範囲を設定します。指定した引数がチューニングされた
cpu-partitioningプロファイルに追加されます。HostIsolatedCoreList: "2-19,22-39"
HostIsolatedCoreList: "2-19,22-39"Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameters_defaultセクションにおいて、論理 OVS-DPDK コアの一覧を設定します。これらのコアは、NeutronDpdkCoreListおよびNovaVcpuPinSetのコアの一覧と相互に排他的でなければなりません。HostCpusList: "'0,20,1,21'"
HostCpusList: "'0,20,1,21'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3. controller.yaml の変更 リンクのコピーリンクがクリップボードにコピーされました!
独立したプロビジョニングインターフェースを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分離ネットワーク用のコントロールプレーンの Linux ボンディングを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Linux ボンディングに VLAN を割り当てます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow neutron-dhcp-agent および neutron-metadata-agent サービスにアクセスするための OVS ブリッジを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4. compute.yaml の変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの compute.yaml ファイルを編集し、以下のように変更します。
独立したプロビジョニングインターフェースを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分離ネットワーク用のコントロールプレーンの Linux ボンディングを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Linux ボンディングに VLAN を割り当てます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OVS-DPDK データプレーンボンディングの 2 つの DPDK ポートを持つ構成されるブリッジを設定し、コントローラーにリンクします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記複数の DPDK デバイスを含めるには、追加する DPDK デバイスごとに
typeのコードセクションを繰り返します。注記OVS-DPDK を使用する場合には、同じコンピュートノード上の 全 ブリッジが
ovs_user_bridgeの種別である必要があります。同じノード上でovs_bridgeとovs_user_bridgeが混在する構成は、director では受け入れ可能ですが、Red Hat OpenStack Platform ではサポートされていません。
4.2.5. overcloud_deploy.sh スクリプトを実行します。 リンクのコピーリンクがクリップボードにコピーされました!
bash スクリプトに記述した OVS-DPDK 環境用の openstack overcloud deploy コマンドの例を以下に示します。
-
/usr/share/openstack-tripleo-heat-templates/environments/neutron-ovs-dpdk.yamlはデフォルトのneutron-ovs-dpdk.yamlファイルの場所です。これにより Compute ロールの OVS-DPDK パラメーターを有効にします。 -
/home/stack/<relative-directory>/network-environment.yamlはnetwork-environment.yamlファイルへのパスです。このファイルを使用して、neutron-ovs-dpdk.yamlファイルからのデフォルト値を上書きします。
この構成の OVS-DPDK は、セキュリティーグループおよびライブマイグレーションをサポートしません。
4.3. VXLAN トンネリングを使用する単一ポート OVS-DPDK の設定 リンクのコピーリンクがクリップボードにコピーされました!
本項では、OpenStack 環境用に、コントロールプレーンの Linux ボンディングおよび VXLAN トンネリングと共に、単一ポートの OVS-DPDK を設定する手順について説明します。
4.3.1. Modify first-boot.yaml リンクのコピーリンクがクリップボードにコピーされました!
first-boot.yaml ファイルを変更し、OVS および DPDK パラメーターを設定し、CPU アフィニティー用に tuned を設定します。
以前のデプロイメントで first-boot.yaml ファイルに以下の行を追加している場合、Open vSwitch 2.9 を使用する Red Hat OpenStack Platform 10 ではこれらの行を削除してください。
新たなリソースを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DPDK パラメーターを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow tuned設定を定義して CPU アフィニティーを提供します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルの引数を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.2. network-environment.yaml の変更 リンクのコピーリンクがクリップボードにコピーされました!
resource_registryセクションに OVS-DPDK 用のカスタムリソースを追加します。resource_registry: # Specify the relative/absolute path to the config files you want to use for override the default. OS::TripleO::Compute::Net::SoftwareConfig: nic-configs/compute.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yaml OS::TripleO::NodeUserData: first-boot.yamlresource_registry: # Specify the relative/absolute path to the config files you want to use for override the default. OS::TripleO::Compute::Net::SoftwareConfig: nic-configs/compute.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yaml OS::TripleO::NodeUserData: first-boot.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、トンネルの種別とテナントの種別をvxlanに設定します。NeutronTunnelTypes: 'vxlan' NeutronNetworkType: 'vxlan'
NeutronTunnelTypes: 'vxlan' NeutronNetworkType: 'vxlan'Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、OVS-DPDK の設定パラメーターを定義します。注記NeutronDPDKCoreListとNeutronDPDKMemoryChannelsは、本手順では 必須の 設定です。適切な値を設定せずに DPDK のデプロイメントを試みると、デプロイメントが失敗したり、不安定なデプロイメントになったりします。DPDK Poll Mode Driver (PMD) として使用することのできる CPU コアの一覧を、
[allowed_pattern: "'[0-9,-]+'"]の形式で指定します。NeutronDpdkCoreList: "'2,22,3,23'"
NeutronDpdkCoreList: "'2,22,3,23'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ゲストインスタンス作成の失敗を避けるために、DPDK PMD 用の DPDK NIC の有無にかかわらず、各 NUMA ノード上で少なくとも 1 つの CPU を (シブリングスレッドと共に) 割り当てる必要があります。
OVS-DPDK のパフォーマンスを最適化するために、以下のオプションを検討してください。
-
DPDK インターフェースの NUMA ノードに関連付けられた CPU を選択する。インターフェースに関連付けられた NUMA ノードを一覧表示するには、
cat /sys/class/net/<interface>/device/numa_nodeを使用します。その NUMA ノードに関連付けられた CPU を一覧表示するには、lscpuを使用します。 -
CPU シブリングをまとめてグループ化する (ハイパースレッディングの場合)。CPU のシブリングを確認するには、
cat /sys/devices/system/cpu/<cpu>/topology/thread_siblings_listを使用します。 - ホストプロセス用に CPU 0 を確保する。
- ホストプロセスが PMD に割り当てられた CPU を使用しないように、これらの CPU を分離する。
NovaVcpuPinsetを使用して、PMD に割り当てられた CPU を Compute のスケジューリングから除外する。メモリーチャネルの数を、
[allowed_pattern: "[0-9]+"]の形式で指定します。NeutronDpdkMemoryChannels: "4"
NeutronDpdkMemoryChannels: "4"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソケットごとに、ヒュージページプールから事前に割り当てられたメモリーを設定します。
NeutronDpdkSocketMemory: "'3072,1024'"
NeutronDpdkSocketMemory: "'3072,1024'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CPU ソケットの降順で、形式はコンマ区切り文字列です。NUMA ノードが 1 つのシステムでは、この値を 3072,0 に設定します。
OVS ブリッジの DPDK ドライバーの種別を設定します。
NeutronDpdkDriverType: "vfio-pci"
NeutronDpdkDriverType: "vfio-pci"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
parameter_defaultsセクションにおいて、OVS 用の vhost-user ソケットディレクトリーを設定します。NeutronVhostuserSocketDir: "/var/lib/vhost_sockets"
NeutronVhostuserSocketDir: "/var/lib/vhost_sockets"Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、ホストプロセス用の RAM を確保します。NovaReservedHostMemory: 4096
NovaReservedHostMemory: 4096Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、仮想マシンプロセス用に確保する物理 CPU コアのコンマ区切りリストまたは範囲を設定します。NovaVcpuPinSet: "4-19,24-39"
NovaVcpuPinSet: "4-19,24-39"Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、適用可能なフィルターの一覧を設定します。Nova スケジューラーは、ここで指定するリスト順にこれらのフィルターを適用します。ノードに対するフィルタリングのプロセスがより効率的になるように、最も制限の厳しいフィルターを最初に設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsセクションにおいて、ComputeKernelArgsパラメーターを追加して、初回ブート時にこれらのパラメーターをデフォルトのgrubファイルに追加します。ComputeKernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on"
ComputeKernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記これらのヒュージページは仮想マシンよって消費されると共に、本手順に示すように
NeutronDpdkSocketMemoryパラメーターを使用して OVS-DPDK によって消費されます。仮想マシンが利用可能なヒュージページの数は、bootパラメーターからNeutronDpdkSocketMemoryを減算した値です。DPDK インスタンスに関連付けるフレーバーに
hw:mem_page_size=1GBを追加する必要があります。追加しない場合、DHCP による割り当てがインスタンスに適用されません。parameter_defaultsセクションにおいて、チューニングする物理 CPU コアの一覧または範囲を設定します。指定した引数がチューニングされた
cpu-partitioningプロファイルに追加されます。HostIsolatedCoreList: "2-19,22-39"
HostIsolatedCoreList: "2-19,22-39"Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameters_defaultセクションにおいて、論理 OVS-DPDK コアの一覧を設定します。これらのコアは、NeutronDpdkCoreListおよびNovaVcpuPinSetのコアの一覧と相互に排他的でなければなりません。HostCpusList: "'0,20,22-39'"
HostCpusList: "'0,20,22-39'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.3. controller.yaml の変更 リンクのコピーリンクがクリップボードにコピーされました!
独立したプロビジョニングインターフェースを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分離ネットワーク用のコントロールプレーンの Linux ボンディングを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Linux ボンディングに VLAN を割り当てます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow neutron-dhcp-agent および neutron-metadata-agent サービスにアクセスするための OVS ブリッジを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.4. compute.yaml の変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの compute.yaml ファイルから compute-ovs-dpdk.yaml ファイルを作成し、次のように変更します。
独立したプロビジョニングインターフェースを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分離ネットワーク用のコントロールプレーンの Linux ボンディングを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Linux ボンディングに VLAN を割り当てます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントローラーにリンクする DPDK ポートを備えたブリッジを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記複数の DPDK デバイスを含めるには、追加する DPDK デバイスごとに
typeのコードセクションを繰り返します。注記OVS-DPDK を使用する場合には、同じコンピュートノード上の 全 ブリッジが
ovs_user_bridgeの種別である必要があります。同じノード上でovs_bridgeとovs_user_bridgeが混在する構成は、director では受け入れ可能ですが、Red Hat OpenStack Platform ではサポートされていません。
4.3.5. overcloud_deploy.sh スクリプトを実行します。 リンクのコピーリンクがクリップボードにコピーされました!
bash スクリプトに記述した OVS-DPDK 環境用の openstack overcloud deploy コマンドの例を以下に示します。
-
/usr/share/openstack-tripleo-heat-templates/environments/neutron-ovs-dpdk.yamlはデフォルトのneutron-ovs-dpdk.yamlファイルの場所です。これにより Compute ロールの OVS-DPDK パラメーターを有効にします。 -
/home/stack/<relative-directory>/network-environment.yamlはnetwork-environment.yamlファイルへのパスです。このファイルを使用して、neutron-ovs-dpdk.yamlファイルからのデフォルト値を上書きします。
この構成の OVS-DPDK は、セキュリティーグループおよびライブマイグレーションをサポートしません。
4.4. OVS-DPDK インターフェースの MTU 値の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenStack Platform は OVS-DPDK 向けにジャンボフレームをサポートしています。ジャンボフレーム用の MTU 値を設定するには、以下の操作を行う必要があります。
-
network-environment.yamlファイルで、ネットワークのグローバル MTU 値を設定する。 -
compute.yamlファイルで、物理 DPDK ポートの MTU 値を設定する。この値は、vhost のユーザーインターフェースでも使用されます。 - コンピュートノード上の任意のゲストインスタンスで MTU 値を設定し、設定内でエンドツーエンドに同等の MTU 値が設定されるようにする。
VXLAN パケットには追加で 50 バイトがヘッダーに含まれます。MTU の必要値は、ヘッダーの追加バイト値に基づいて計算してください。たとえば、MTU 値 が 9000 の場合には、これらの追加バイト値を計算に入れると、VXLAN トンネルの MTU 値は 8950 となります。
物理 NIC は DPDK PMD によって制御され、compute.yaml ファイルで設定されているのを同じ MTU 値が適用されるので、特別な設定は必要ありません。MTU 値には、物理 NIC でサポートされているよりも高い値を設定することはできません。
OVS-DPDK インターフェースの MTU 値を設定するには、以下の手順を実行します。
network-environment.yamlファイルでNeutronGlobalPhysnetMtuパラメーターを設定します。parameter_defaults: # Global MTU configuration on Neutron NeutronGlobalPhysnetMtu: 9000
parameter_defaults: # Global MTU configuration on Neutron NeutronGlobalPhysnetMtu: 9000Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記network-environment.yamlファイルの NeutronDpdkSocketMemory の値がジャンボフレームをサポートするのに十分な容量であることを確認します。詳しくは、「メモリーパラメーター」を参照してください。controller.yamlファイルでコンピュートノードへのブリッジ上の MTU 値を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
compute.yaml ファイルで OVS-DPDK インターフェースおよびボンディング用の MTU 値を定義するには、以下のように設定します。
4.5. OVS-DPDK インターフェース向けのマルチキューの設定 リンクのコピーリンクがクリップボードにコピーされました!
コンピュートノード上の OVS-DPDK ポートのキューの数を設定するには、compute.yaml ファイルを以下のように変更します。
4.6. 既知の制限事項 リンクのコピーリンクがクリップボードにコピーされました!
NFV のユースケース向けに Red Hat OpenStack Platform 10 で OVS-DPDK を設定する場合には特定の制限事項があります。
- コントロールプレーンのネットワークには、Linux ボンディングを使用します。最大限のパフォーマンスを得るために、ボンディングに使用されている両方の PCI デバイスが同じ NUMA ノード上に設定されるようにしてください。Red Hat では、Neutron の Linux ブリッジ構成はサポートしていません。
- ヒュージページは OVS-DPDK を使用するホスト上で実行される全インスタンスに必要です。ゲストのヒュージページがない場合には、インターフェースは表示されても機能しません。
TAP デバイスは DPDK をサポートしないため、これらのデバイスを使用するサービスのパフォーマンスが低下します。TAP デバイスを使用するサービスの例としては、DVR、FWaaS、および LBaaS 等が挙げられます。
-
OVS-DPDK を使用する場合、
netdev datapathにより DVR を有効にすることができますが、そのパフォーマンスは低く、実稼働環境に適するものではありません。DVR は カーネル名前空間および TAP デバイスを使用してルーティングを行います。 - OVS-DPDK との組み合わせで DVR のルーティングが適切に機能するためには、OpenFlow ルールとしてルーティングを実装する ODL 等のコントローラーを使用する必要があります。OVS-DPDK を使用する場合、OpenFlow のルーティングが Linux カーネルインターフェースに起因するボトルネックを排除するので、データパスの完全なパフォーマンスが維持されます。
-
OVS-DPDK を使用する場合、
-
OVS-DPDK を使用する場合には、コンピュートノード上の 全 ブリッジの種別が
ovs_user_bridgeでなければなりません。ovs_bridgeとovs_user_bridgeが混在する構成は、director では受け入れ可能ですが、Red Hat OpenStack Platform ではサポートされていません。
4.7. OVS-DPDK 用フレーバーの作成とインスタンスのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
NFV を実装する Red Hat OpenStack Platform デプロイメントの OVS-DPDK の設定を完了した後には、以下の手順に従ってフレーバーを作成してインスタンスをデプロイすることができます。
OVS-DPDK 用にアグリゲートグループを作成し、ホストを追加します。フレーバーメタデータに一致するメタデータを定義します (例:
"aggregate_instance_extra_specs:dpdk"="true")。openstack aggregate create dpdk_group # openstack aggregate set --property \ "aggregate_instance_extra_specs:dpdk"="true" dpdk_group # openstack aggregate add host dpdk compute-ovs-dpdk-0.localdomain
# openstack aggregate create dpdk_group # openstack aggregate set --property \ "aggregate_instance_extra_specs:dpdk"="true" dpdk_group # openstack aggregate add host dpdk compute-ovs-dpdk-0.localdomainCopy to Clipboard Copied! Toggle word wrap Toggle overflow フレーバーを作成します。
openstack flavor create <flavor --ram <MB> --disk <GB> --vcpus <#>
# openstack flavor create <flavor --ram <MB> --disk <GB> --vcpus <#>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 追加のフレーバー属性を設定します。定義したメタデータ (
"aggregate_instance_extra_specs:dpdk"=true") と DPDK アグリゲートで定義したメタデータが一致している点に注意してください。openstack flavor set --property "aggregate_instance_extra_specs:dpdk"="true" \ --property hw:cpu_policy=dedicated \ --property hw:mem_page_size=large <flavor>
# openstack flavor set --property "aggregate_instance_extra_specs:dpdk"="true" \ --property hw:cpu_policy=dedicated \ --property hw:mem_page_size=large <flavor>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークを作成します。
openstack network create net1 --provider-physical-network tenant --provider-network-type vlan --provider-segment <VLAN-ID>
# openstack network create net1 --provider-physical-network tenant --provider-network-type vlan --provider-segment <VLAN-ID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow サブネットを作成します。
openstack subnet create subnet1 --network net1 --subnet-range 192.0.2.0/24 --dhcp
# openstack subnet create subnet1 --network net1 --subnet-range 192.0.2.0/24 --dhcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow インスタンスをデプロイします。
openstack server create --flavor <flavor> --image <glance_image> --nic net-id=net1 <name>
# openstack server create --flavor <flavor> --image <glance_image> --nic net-id=net1 <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これで、NFV ユースケースで OVS-DPDK 用インスタンスがデプロイされました。
4.7.1. エミュレータースレッドの固定によるパフォーマンスの最適化 リンクのコピーリンクがクリップボードにコピーされました!
パフォーマンスを改善するために、Qemu エミュレータースレッドを代替のコアに固定することができます。
インスタンスの仮想 CPU として使用されているコアを把握します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow エミュレータースレッドを固定するコアを選択します。選択したコアが NovaVcpuPinSet の一覧に含まれることを確認します。
#virsh emulatorpin <vm-name> --cpulist 2
#virsh emulatorpin <vm-name> --cpulist 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記エミュレーター固定スレッドに関連付けられる物理 CPU は、
NovaVcpuPinSetの一覧に含まれる仮想 CPU の 1 つ (ハイパースレッディングが有効な場合は 2 つのスレッド) を使用します。
4.8. 設定のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
本項では、DPDK-OVS 設定のトラブルシューティングの手順を説明します。
ブリッジの設定を見直して、ブリッジが
datapath_type=netdevで作成されたことを確認します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow neutron-ovs-agentが自動的に起動するように設定されていることを確認して、OVS サービスを見直します。systemctl status neutron-openvswitch-agent.service neutron-openvswitch-agent.service - OpenStack Neutron Open vSwitch Agent Loaded: loaded (/usr/lib/systemd/system/neutron-openvswitch-agent.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2015-11-23 14:49:31 AEST; 25min ago
# systemctl status neutron-openvswitch-agent.service neutron-openvswitch-agent.service - OpenStack Neutron Open vSwitch Agent Loaded: loaded (/usr/lib/systemd/system/neutron-openvswitch-agent.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2015-11-23 14:49:31 AEST; 25min agoCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが起動しない場合には、関連する何らかのメッセージが表示されるはずです。
journalctl -t neutron-openvswitch-agent.service
# journalctl -t neutron-openvswitch-agent.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow ovs-dpdkの PMD CPU マスクが CPU にピニングされていることを確認します。HT の場合には、シブリング CPU を使用します。CPU4の例を以下に示します。cat /sys/devices/system/cpu/cpu4/topology/thread_siblings_list 4,20
# cat /sys/devices/system/cpu/cpu4/topology/thread_siblings_list 4,20Copy to Clipboard Copied! Toggle word wrap Toggle overflow CPU 4 と 20 を使用します。
ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x100010
# ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x100010Copy to Clipboard Copied! Toggle word wrap Toggle overflow ステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow