3.5. OVS-DPDK 対応の OpenDaylight のインストール
OpenDaylight は、director を使用して Open vSwitch Data Plane Development Kit (DPDK) アクセラレーションに対応するようにデプロイすることができます。このデプロイメントでは、カーネル空間ではなくユーザー空間でパケットが処理されるために、データプレーンパフォーマンスが向上します。OVS-DPDK 対応のデプロイメントには、潜在的なパフォーマンスを引き出すために、各コンピュートノードのハードウェア物理レイアウトに関する知識が必要です。
特に次の点を考慮すべきです。
- ホスト上のネットワークインターフェイスが DPDK をサポートしていること
- コンピュートノードの NUMA ノードのトポロジー (ソケット数、CPU コア、1 ソケットあたりのメモリー容量)
- DPDK NIC PCI バスが各 NUMA ノードに近いこと
- コンピュートノード上で使用可能な RAM 容量
- ネットワーク機能仮想化 (NFV) のプランニングおよび設定ガイド を参照してください。
3.5.1. OVS-DPDK デプロイメントファイルの準備 リンクのコピーリンクがクリップボードにコピーされました!
OVS-DPDK をデプロイするには、異なる環境ファイルを使用します。そのファイルは、/usr/share/openstack-tripleo-heat-templates/environments/services-docker ディレクトリーにある neutron-opendaylight.yaml 環境ファイルで設定されている一部のパラメーターを上書きします。元の環境ファイルは変更しないでください。代わりに、必要なパラメーターが含まれた新しい環境ファイルを作成します (例: neutron-opendaylight-dpdk.yaml)。
OVS-DPDK を実装する OpenDaylight をデフォルトの設定でデプロイするには、/usr/share/openstack-tripleo-heat-templates/environments/services-docker ディレクトリーにあるデフォルトの neutron-opendaylight-dpdk.yaml 環境ファイルを使用します。
デフォルトのファイルには、以下の値が含まれます。
3.5.2. OVS-DPDK デプロイメントの設定 リンクのコピーリンクがクリップボードにコピーされました!
neutron-opendaylight-dpdk.yaml の値を変更して、OVS-DPDK サービスを設定することができます。
|
|
IRQ のピニングを有効化して、OVS-DPDK で使用する CPU コアから分離します。デフォルトプロファイル: |
|
|
CPU コアの一覧を指定し、カーネルスケジューラーがそれらのコアを使用しないようにして、代わりに OVS-DPDK に割り当てて専用にすることができます。書式は、個々のコアのコンマ区切りリストまたは範囲で指定します (例: |
|
|
ブート時にカーネルに渡す引数をリストします。OVS-DPDK の場合は、
---- 指定されている RAM の容量はヒュージページ用の 60 GB であることに注意してください。この値を設定する場合には、コンピュートノードで利用可能な RAM 容量を考慮することが重要です。 |
|
| 各 NUMA ノードに割り当てるヒュージページメモリーの容量を (MB 単位で) 指定します。パフォーマンスを最大限にするには、DPDK NIC に最も近いソケットにメモリーを割り当てます。ソケットあたりのメモリーをリストする形式は以下のようになります。 ---- "<socket 0 mem MB>,<socket 1 mem MB>" ---- 例: "1024,0" |
|
|
PMD スレッドで使用する UIO ドライバー種別を指定します。DPDK NIC は指定したドライバーをサポートする必要があります。Red Hat OpenStack Platform のデプロイメントでは、 |
|
|
PMD スレッドのピニング先となる個々のコアまたは範囲をリストします。ここで指定するコアは、 |
|
| ソケットあたりのメモリーチャネルの数を指定します。 |
|
| libvirtd で nova インスタンスをピニングするコア。パフォーマンスを最適にするには、OVS PMD コアがピニングされているのと同じソケット上のコアを使用してください。 |
3.5.3. OVS-DPDK を実装する OpenDaylight のインストール リンクのコピーリンクがクリップボードにコピーされました!
作業を開始する前に
- アンダークラウドをインストールします。詳しくは、アンダークラウドのインストール を参照してください。
- オーバークラウドコンテナーイメージへのリンクのある環境ファイルを作成します。詳しくは、オーバークラウド用の OpenDaylight 環境ファイルの準備 を参照してください。
- カスタムロールで SR-IOV 対応の OpenDaylight を設定するためのロールファイルを作成します。詳しくは、OVS-DPDK デプロイメントファイルの準備 を参照してください。
手順
- OpenDaylight で DPDK 機能を有効化するのに必要な環境ファイルを使用してデプロイメントコマンドを実行します。
デプロイのコマンドで先に指定する環境ファイルは、そのコマンドで後に指定する環境ファイルによって上書きされます。指定する環境ファイルの順序に注意を払って、パラメーターが誤って上書きされないようにする必要があります。
変更するパラメーターのみの設定する最小限の環境ファイルを作成して、デフォルトの環境ファイルと組み合わせることにより、一部のパラメーターを上書きすることができます。
3.5.4. 例: ODL と VXLAN トンネリングを使用する OVS-DPDK の設定 リンクのコピーリンクがクリップボードにコピーされました!
このセクションには、ODL と VXLAN トンネリングを使用する OVS-DPDK の設定例を記載しています。
OVS-DPDK 用の OpenStack を最適化するには、network-environment.yaml ファイルに設定する OVS-DPDK パラメーターの最適な値を判断する必要があります。詳しくは、ワークフローを使用した DPDK パラメーターの算出 を参照してください。
3.5.4.1. ComputeOvsDpdk コンポーザブルロールの生成 リンクのコピーリンクがクリップボードにコピーされました!
ComputeOvsDpdk ロール用の roles_data.yaml を生成します。
openstack overcloud roles generate --roles-path templates/openstack-tripleo-heat-templates/roles -o roles_data.yaml Controller ComputeOvsDpdk
# openstack overcloud roles generate --roles-path templates/openstack-tripleo-heat-templates/roles -o roles_data.yaml Controller ComputeOvsDpdk
3.5.4.2. OVS-DPDK パラメーターの設定 リンクのコピーリンクがクリップボードにコピーされました!
OVS-DPDK 用の OpenStack を最適化するには、network-environment.yaml ファイルに設定する OVS-DPDK パラメーターの最適な値を判断する必要があります。詳しくは、ワークフローを使用した DPDK パラメーターの算出 を参照してください。
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::ComputeOvsDpdk::Net::SoftwareConfig: nic-configs/computeovsdpdk.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yamlresource_registry: # Specify the relative/absolute path to the config files you want to use for override the default. OS::TripleO::ComputeOvsDpdk::Net::SoftwareConfig: nic-configs/computeovsdpdk.yaml OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.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 parameters_defaultsの下にブリッジのマッピングを設定します。# The OVS logical->physical bridge mappings to use. NeutronBridgeMappings: 'tenant:br-link0' OpenDaylightProviderMappings: 'tenant:br-link0'
# The OVS logical->physical bridge mappings to use. NeutronBridgeMappings: 'tenant:br-link0' OpenDaylightProviderMappings: 'tenant:br-link0'Copy to Clipboard Copied! Toggle word wrap Toggle overflow parameter_defaultsの下に、ComputeOvsDpdkロール向けのロール固有パラメーターを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ゲストインスタンス作成の失敗を避けるために、DPDK PMD 用の DPDK NIC の有無にかかわらず、各 NUMA ノード上で少なくとも 1 つの CPU を (シブリングスレッドと共に) 割り当てる必要があります。
注記本手順に示したとおり、これらのヒュージページは仮想マシンと、
OvsDpdkSocketMemoryパラメーターを使用する OVS-DPDK によって消費されます。仮想マシンが利用可能なヒュージページの数は、bootパラメーターからOvsDpdkSocketMemoryを減算した値です。DPDK インスタンスに関連付けるフレーバーに
hw:mem_page_size=1GBも追加する必要があります。注記OvsDPDKCoreListとOvsDpdkMemoryChannelsは、本手順では 必須 の設定です。適切な値を設定せずに DPDK のデプロイメントを試みると、デプロイメントが失敗したり、不安定なデプロイメントになったりします。
3.5.4.3. コントローラーノードの設定 リンクのコピーリンクがクリップボードにコピーされました!
分離ネットワーク用のコントロールプレーンの Linux ボンディングを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Linux ボンディングに VLAN を割り当てます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラウドネットワークへの Floating IP アドレスにアクセスするための OVS ブリッジを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.4.4. DPDK インターフェイスのコンピュートノードの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの compute.yaml ファイルから compute-ovs-dpdk.yaml ファイルを作成し、次のように変更します。
分離ネットワーク用のコントロールプレーンの 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 ではサポートされていません。
3.5.4.5. オーバークラウドのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
overcloud_deploy.sh スクリプトを実行してオーバークラウドをデプロイします。