データプレーン開発キット(DPDK):はじめに

パケット処理を高速化するには、ビットパターンを検出し、使用可能なビットパターンに基づいて必要なアクションを(チャネルの速度で)迅速に決定する必要があります。 これらのビットパターンは、パケットに存在するいくつかのヘッダーの1つに属することができます。ヘッダーは、たとえば、イーサネット、VLAN、IP、MPLS、TCP / UDPなど、いくつかのレベルのいずれかに配置できます。 ビットパターンによって決定されるアクションは、パケットの別のポートへの単純なリダイレクトから、あるプロトコルセットから別のプロトコルセットへのパケットヘッダーのマッピングを必要とする複雑な書き換え操作までさまざまです。 これに、トラフィック管理とトラフィックポリシー、ファイアウォール、仮想プライベートネットワークなどの機能を追加する必要があります。その結果、各パケットで実行する必要がある操作の複雑さが何度も増加します。



10 Gb / sのチャネル速度と84バイトのパケットサイズで期待されるパフォーマンスレベルでパフォーマンスを達成するには、プロセッサーは毎秒1,488万パケットを処理する必要があります。 汎用機器は、その速度でパケットを処理するほど強力ではありませんでした。 したがって、ほとんどの稼働中のネットワークシステムでは、データチャネルでのパケット処理はASICおよびNPUネットワークプロセッサによって処理されます。 このアプローチの明らかな欠点には、柔軟性の欠如、高コスト、長い開発サイクル、特定のサプライヤーへの依存が含まれます。 ただし、高速で安価なCPUとデータプレーン開発キット(DPDK)などのソフトウェアアクセラレータが利用できるため、この負荷は汎用機器にシフトできます。



データプレーン開発キットとは何ですか?



DPDKは、パッケージを迅速に処理するためのライブラリとドライバーのセットです。 高価なスイッチやルーターを購入することなく、汎用プロセッサを独自のパケット転送サーバーに変えることができます。



通常、DPDKはLinux *を実行しますが、FreeBSD *用の一部のDPDKコンポーネントのバージョンがあります。 DPDKは、BSDの下でライセンスされているオープンソースプロジェクトです 。 最新のコミュニティの修正と追加は、メインブランチで利用可能です。



DPDKはネットワークプロトコルのセットではなく、レイヤー3リダイレクション、IPsec、ファイアウォールなどの機能を実装していません。さらに、このようなコンポーネントの開発に役立つさまざまなサンプルアプリケーションがツリーに含まれています。

サポートとサービスは、Intelを含む複数の企業によって提供されています。

DPDKにより、次のことが可能になります。



一部のパケット処理機能のパフォーマンスは、PCIe *ネットワークカードで64バイトのパケットを使用する場合、1秒あたり数百万フレームです。



データプレーン開発キットの使用



DPDKを開始するには、次の手順を実行します。

1. Linuxがない場合は、仮想ボックスをダウンロードしてLinuxマシンインストールします。

2.使用するLinuxカーネルに応じて、いずれかのコマンドを使用して最新のDPDKをダウンロードします。

wget www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
      
      



または

 sudo apt-get www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
      
      



または

 yum install www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
      
      



3. DPDK ZIPファイルを解凍します。

 tar zxvf dpdk-2.1.0.tar.gz
      
      



4.ソースコードを調べます。

 cd dpdk-2.1.0
      
      



ディレクトリの内容を表示するには、Network Builder UniversityコースのDPDK入門のビデオ第1章:DPDKディレクトリ構造、スクリプト、およびDPDKセットアップをご覧ください。

5. CPU構成を確認します。

 cd tools ./cpu_layout.py
      
      





サンプル出力





6.ネットワークアダプターの構成を確認します。

 stack@nde01 tools]$ ./dpdk_nic_bind.py --status Network devices using DPDK-compatible driver ============================================ 0000:03:00.0 'Ethernet Connection X552/X557-AT 10GBASE-T' drv=igb_uio unused= 0000:03:00.1 'Ethernet Connection X552/X557-AT 10GBASE-T' drv=igb_uio unused= Network devices using kernel driver =================================== 0000:05:00.0 'Ethernet Controller XL710 for 40GbE QSFP+' if=ens2f0 drv=i40e unused=igb_uio 0000:05:00.1 'Ethernet Controller XL710 for 40GbE QSFP+' if=ens2f1 drv=i40e unused=igb_uio 0000:07:00.0 'I350 Gigabit Network Connection' if=eno1 drv=igb unused=igb_uio *Active* 0000:07:00.1 'I350 Gigabit Network Connection' if=eno2 drv=igb unused=igb_uio Other network devices ===================== <none>
      
      





7. DPDKを構成します。

setup.shは、DPDKをコンパイルしてシステムを構成するのに役立つ便利なプログラムです。 このプログラムを実行するには、root権限が必要です。 toolsディレクトリで、次のように入力します。

 ./setup.sh
      
      



その結果、次のようなものが得られます。

 [stack@nde01 tools]$ ./setup.sh ------------------------------------------------------------------------------ RTE_SDK exported as /admin/software_installfiles/dpdk-2.1.0 ------------------------------------------------------------------------------ ---------------------------------------------------------- Step 1: Select the DPDK environment to build ---------------------------------------------------------- [1] i686-native-linuxapp-gcc [2] i686-native-linuxapp-icc [3] ppc_64-power8-linuxapp-gcc [4] tile-tilegx-linuxapp-gcc [5] x86_64-ivshmem-linuxapp-gcc [6] x86_64-ivshmem-linuxapp-icc [7] x86_64-native-bsdapp-clang [8] x86_64-native-bsdapp-gcc [9] x86_64-native-linuxapp-clang [10] x86_64-native-linuxapp-gcc [11] x86_64-native-linuxapp-icc [12] x86_x32-native-linuxapp-gcc ---------------------------------------------------------- Step 2: Setup linuxapp environment ---------------------------------------------------------- [13] Insert IGB UIO module [14] Insert VFIO module [15] Insert KNI module [16] Setup hugepage mappings for non-NUMA systems [17] Setup hugepage mappings for NUMA systems [18] Display current Ethernet device settings [19] Bind Ethernet device to IGB UIO module [20] Bind Ethernet device to VFIO module [21] Setup VFIO permissions ---------------------------------------------------------- Step 3: Run test application for linuxapp environment ---------------------------------------------------------- [22] Run test application ($RTE_TARGET/app/test) [23] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd) ---------------------------------------------------------- Step 4: Other tools ---------------------------------------------------------- [24] List hugepage info from /proc/meminfo ---------------------------------------------------------- Step 5: Uninstall and system cleanup ---------------------------------------------------------- [25] Uninstall all targets [26] Unbind NICs from IGB UIO or VFIO driver [27] Remove IGB UIO module [28] Remove VFIO module [29] Remove KNI module [30] Remove hugepage mappings [31] Exit Script Option:
      
      



オプションを選択して構成する必要があります。

1.ステップ1では、DPDK環境アセンブリを選択する必要があります。 x86_64-native-linuxapp-gccを選択できます。 これはオプション10です。

2.ステップ2では、Linuxアプリケーション環境を構成する必要があります。 パラメーター13-IGB UIOモジュールの最新バージョンをダウンロードし、IGB UIOドライバーの最新バージョンをコンパイルします。 IGB UIOは、PCI列挙で動作し、ユーザーモードで(カーネルの代わりに)リンク状態の中断を処理するDPDKカーネルモジュールです。 NUMA用の2 MBページ、パラメーター17など、特大ページの割り当てにもサポートが必要です。パラメーター18-上記の手順6のように、現在のイーサネットパラメーターを表示します。 パラメーター19を使用して、必要なネットワークアダプターをLinuxカーネルドライバーからリンク解除し、パラメーター13を使用してインストール済みのIGB UIOモジュールにバインドします。



注意! 外部接続に使用されるネットワークアダプターをDPDKにバインドしないでください。この場合、デバイスへの接続が失われます。



インストール情報については、 第2章:ネットワークビルダー大学 DPDK入門コースの 一部としてのDPDKの構成のビデオを参照してください。

8.サンプルのl2fwdアプリケーションをコンパイルします。 これはレイヤ2リダイレクトアプリケーションであり、IPアドレスではなくMACアドレスに基づいてパケットをリダイレクトします。

 cd examples cd l2fwd export RTE_SDK=<  dpdk> make
      
      



9.サンプルアプリケーションを実行します。



構文: ./build / l2fwd -c COREMASK | -l CORELIST -n CHANNELS [オプション]



 ./build/l2fwd –c 0x3 –n 4 -- -p 0x3
      
      



-c(カーネルの16進ビットマスク、1つを実行する必要があります)。たとえば、-c Ox3は、バイナリ11 = 0x3であるため、両方のカーネルで実行することを意味します。



-n(メモリチャネルの数)、たとえば-n 4は、Intel Xeonプロセッサで使用可能な4つのチャネルすべてで開始することを意味します



-p(ポートマスク)

-p 0x3は、バイナリ11 = 0x3であるため、dpdkにバインドされた両方のポートで開始することを意味します



テストでは、このサンプルアプリケーションはポート0に到着するすべてのパケットをポート1にリダイレクトし、その逆も同様です。 開始後、ポーリングサイクルに切り替わり、両方のポートをポーリングして、たとえば10秒ごとに受信パケットと送信パケットの数などの統計を更新します(下の最後のスクリーンショットを参照)。 最初のスクリーンショットは、物理コアに関連付けられているすべての論理コアを通過するEALレベル(環境抽象化のレベル)を示しています。 2番目のスクリーンショットは、DPDKに接続されたPCIデバイス/ネットワークカード(IGB UIOドライバー、上記の手順7-> 2を参照)と、この理由のためにrte_ixgbe_pmdドライバー(これはDPDK問い合わせドライバーです) DPDKを実行します。 スクリーンショット3は、各物理ポートに割り当てられた1つの論理コアを示しています。















実行オプションの詳細については、 第3章「Network Builder Universityでのサンプルアプリケーションのコンパイルと起動 」を参照してください



サンプルアプリケーションは、基本的なレイヤー2リダイレクト機能を示しています。DPDKパフォーマンスを測定する必要がある場合は、 DPPD PROXを使用したIntel Network Builder Universityのコース確認してください。 Plane Performance Demonstrator)Proxは、ソフトウェア開発者がこれらのツールを理解して使用するのを支援します。



おわりに



DPDKは、Linuxカーネルをバイパスしてユーザー空間で実行されるソフトウェアアクセラレータであり、パケット処理アプリケーションのネットワークアダプター、CPU、およびメモリへのアクセスを提供します。 この記事では、サンプルアプリケーションをコンパイル、構成、実行するLinuxプラットフォームでDPDK 2.1.0をダウンロードするための手順を説明します。



上記のビデオで使用されている用語の理解を深め、DPDKの機能とプログラムを調べるには、次のリソースを確認してください。





質問がありますか? SDN / NFVフォーラムに投稿してください



All Articles