Contrail vRouter と統合されたデータ プレーン開発キット(DPDK)の設定
Contrail での DPDK サポート
Contrail Networkingは、データプレーン開発キット(DPDK)をサポートしています。DPDKは、高速パケット処理のためのライブラリとドライバーのオープンソースセットです。DPDK は、ネットワーク インターフェイス カード (NIC) がダイレクト メモリ アクセス (DMA) パケットをアプリケーションのアドレス空間に直接送信できるようにすることで、アプリケーションがパケットをポーリングできるようにすることで、高速パケット処理を可能にし、NIC からの割り込みのオーバーヘッドを回避します。
DPDK との統合により、Contrail vRouter はカーネル モジュールとして実行している場合よりも多くのパケット/秒を処理できます。
Contrail Networkingでは、DPDKを使用する前に、Ansibleベースのプロビジョニングの場合は で、Helmベースのプロビジョニング
の場合は でDPDK設定を定義するhost.yaml
必要があります。AGENT_MODE設定では、ハイパーバイザーを DPDK モードの動作でプロビジョニングするかどうかを指定します。instances.yaml
Contrail コンピューティング ノードが DPDK でプロビジョニングされると、対応する yaml ファイルに、パケットの転送に使用する CPU コアの数、DPDK に割り当てるヒュージ ページの数、DPDK に使用する UIO ドライバーが指定されます。
DPDKを使用してクラスタノードをプロビジョニングするための環境ファイルの準備
環境ファイルは、DPDKを使用するようにノードを設定する必要があるかどうかなど、Contrailクラスターのインストールに必要なすべてのオプションを指定するためにプロビジョニング時に使用されます。
DPDK vRouter を使用して構成する各ノードは、DPDK ヒュージ ページのメモリの割合と使用する CPU と共に、ディクショナリ エントリとともにプロビジョニング ファイルにリストされている必要があります。
次に、サーバー構成に必要なエントリについて説明します。:
HUGE_PAGES
- DPDK ヒュージ ページ用に予約するホスト メモリの割合を指定します。予約済みメモリは、そのホストで生成された仮想マシン(VM)にメモリリソースを割り当てるために、vRouter とクイックエミュレータ(QEMU)によって使用されます。メモ:ホストLinuxカーネルにもメモリが必要なため、割り当てる
HUGE_PAGES
割合は高すぎないようにする必要があります。CPU_CORE_MASK
- vRouter を実行する CPU アフィニティ マスクを指定します。vRouter は、その実行スレッドに指定された CPU のみを使用します。これらのCPUコアは常にパケットをポーリングし、「top」の出力では100%ビジーとして表示されます。サポートされている形式は 16 進数 (0xf など) です。
DPDK_UIO_DRIVER
- DPDK で使用する UIO ドライバを指定します。サポートされている値は次のとおりです。
vfio-pci
- uio の代わりに Linux カーネルの vfio モジュールを使用することを指定します。SR-IOV 仮想関数が vrouter の物理インターフェイスとして使用されている場合、vfio モジュールは IOMMU を使用してメモリ アクセスを保護します。uio_pci_generic
- Linux カーネルに組み込まれている UIO ドライバーを使用することを指定します。このオプションでは、SR-IOV VF の使用はサポートされていません。これは、DPDK_UIO_DRIVERが指定されていない場合の既定のオプションです。mlnx
– Mellanox ConnectX-4 および Mellanox ConnectX-5 NIC 用。
RHEL および Intel x710 フォートビル ベースの NIC の場合は、既定のuio_pci_genericの代わりに を使用します vfio-pci
。
標準の Ansible または helm ベースのプロビジョニング手順を使用します。完了すると、DPDK vRouter 実装を使用する指定されたノードを含むクラスターを使用できるようになります。
ansibleベースのプロビジョニングのためのinstances.ymlの設定例
Bms1: provider: bms ip: ip-address roles: vrouter: AGENT_MODE: dpdk CPU_CORE_MASK: “0xff” DPDK_UIO_DRIVER: uio_pci_generic HUGE_PAGES: 32000
helm ベースのプロビジョニングのための host.yml での設定例
... AGENT_MODE: dpdk CPU_CORE_MASK: “0xff” DPDK_UIO_DRIVER: uio_pci_generic HUGE_PAGES: 32000
DPDK のフレーバーの作成
DPDK 対応の vRouter ハイパーバイザーで VM を起動するには、VM のフレーバーをヒュージ ページを使用するように設定する必要があります。ヒュージ ページの使用は、DPDK vRouter を使用するための要件です。
次のコマンドを使用してフレーバーを追加します。はフレーバーの名前です。 m1.large
このフレーバーを使用して VM が作成されると、OpenStack は、ヒュージ・ページが有効になっているコンピュート・ノードでのみ VM が生成されるようにします。
# openstack flavor set m1.large --property hw:mem_page_size=large
ヒュージ ページは、vRouter が DPDK でプロビジョニングされているコンピューティング ノードで有効になります。
ヒュージ ページが有効になっていないフレーバーを使用して VM を生成する場合は、vRouter が DPDK でプロビジョニングされているコンピューティング ノードに VM を作成しないでください。
OpenStack アベイラビリティーゾーンまたはホストアグリゲートを使用して、vRouter が DPDK でプロビジョニングされているホストを除外できます。
注: デフォルトでは、2MB のヒュージ・ページがプロビジョニングされます。1GBの巨大なページが必要な場合は、管理者が行う必要があります。
DPDK vRouter の MTU の設定と検証
このセクションでは、DPDK vRouter の最大送信単位(MTU)を設定する方法について説明します。MTU を設定するには、contrail_vrouter_dpdk_bond.yaml ファイルで目的の値mtu
を指定する必要があります。
network_config: - type: contrail_vrouter_dpdk name: vhost0 members: - type: interface name: em3 - type: interface name: em1 mtu: 9100 bond_mode: 2 bond_policy: 802.3ad
ハイパーバイザーから設定された値を確認するには、次のコマンドを実行します。
$ ip link list vhost0 39: vhost0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9100 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 98:03:9b:a7:3b:a0 brd ff:ff:ff:ff:ff:ff
vif -g
または vif --get
コマンドを使用して、DPDK vRouter のボンディング インターフェイスのステータスを表示できます。
例えば
# vif --get 0 Vrouter Interface Table [...] vif0/0 PCI: 0000:00:00.0 (Speed 20000, Duplex 1) NH: 4 Type:Physical HWaddr:00:1b:21:bb:f9:48 IPaddr:0.0.0.0 Vrf:0 Mcast Vrf:65535 Flags:TcL3L2VpEr QOS:-1 Ref:26 RX device packets:668852 bytes:110173140 errors:0 RX port packets:207344 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Fabric Interface: eth_bond_bond0 Status: UP Driver: net_bonding Slave Interface(o): 0000:02:00.0 Status: UP Driver: net_ixgbe Slave Interface(1): 0000:02:00.1 Status: UP Driver: net_ixgbe Vlan Id: 101 VLAN fwd Interface: bond RX packets:207344 bytes:45239337 errors:0 TX packets:326159 bytes:237905360 errors:4 Drops:0 TX port packets:326145 errors:10 TX device packets:915402 bytes:511551768 errors:0
vRouter コマンド ライン ユーティリティのリストについては、 vRouter コマンド ライン ユーティリティ を参照してください。