現在位置: ホーム / みらくるブログ / #6 LinuxカーネルのBridgeとDPDK (testpmd) の性能比較

#6 LinuxカーネルのBridgeとDPDK (testpmd) の性能比較

今回は、パケット転送をLinuxカーネルのBridgeを使って行い、前回までで測定したDPDKを用いた結果とを比較します。

はじめに

これまでは以下の図のようにNICをDPDKで制御して、パケットを転送しました。

06-testpmd.png

今回は同じことを次の図のようにLinuxカーネルを使って行ってみます。

06-Linux-bridge.png

Linuxカーネルを使う設定

これまでの方法でNICをDPDKにバインドしていたのであれば、再起動するとNIC(X540-AT2)用のカーネルドライバがロードされます。再起動せずに、コマンドラインで行う場合、以下のように入力します。

/usr/local/sbin/dpdk-devbind -b ixgbe 0000:01:00.0 0000:01:00.1

引数最後のPCIバスアドレスの部分は必要に応じて適宜変更してください。NICの状態を確認すると、以下のようにNetwork devices using kernel driverに変更されたことが分かります。また、水色にしたInterface名を後で使います。

# /usr/local/sbin/dpdk-devbind -s                                

Network devices using DPDK-compatible driver
============================================
<none>

Network devices using kernel driver
===================================
0000:01:00.0 'Ethernet Controller 10-Gigabit X540-AT2' if=enp1s0f0 drv=ixgbe unused=igb_uio
0000:01:00.1 'Ethernet Controller 10-Gigabit X540-AT2' if=enp1s0f1 drv=ixgbe unused=igb_uio
0000:03:00.0 'RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller' if=enp3s0 drv=r8169 unused=igb_uio *Active*
(省略)

これでNIC (X540-AT2)がLinuxの管理下になったので、次のようにブリッジを作成できます。ブリッジ名をここではbrtestにします。

# brctl addbr brtest
# brctl addif brtest enp1s0f0
# brctl addif brtest enp1s0f1

成功すれば下記のように表示されるはずです。

# brctl show
bridge name     bridge id               STP enabled     interfaces
brtest          8000.a0369f64cc84       no              enp1s0f0
                                                        enp1s0f1

NICとブリッジを有効にします。

[opy6]~ # ip link set enp1s0f0 up
[opy6]~ # ip link set enp1s0f1 up
[opy6]~ # ip link set brtest up

評価結果

それでは、ホスト1でpktgenを動作させてます。方法は第5回のそれと同じでrangeモードを使用します。以下に結果を記載します。一番右のDPDK (2Q1P)列は、第5回の結果を転載しています。

パケットサイズ
(B)

Gbps Mpps
Linux Bridge DPDK (2Q1P) Linux Bridge DPDK (2Q1P)
64 2.98 15.2 4.43 22.6
128 5.61 19.4 4.74 16.4
256 9.16 20.0 4.15 9.06
512 16.4 未計測 3.85 未計測
1024 20.0 未計測 2.39 未計測

パケットサイズが小さい時、Linux Bridgeを用いた構成より、DPDKを使ったほうが数倍も性能が高いことが分かりました。一方でパケットサイズ1024バイトになると、Linux Bridgeでもラインレートに達しています。

なお、GbpsからMppsへの変換は次のように行いました。PktSizeに加えている20は、Ethernetフレームのプリアンブルとインターフーレムギャップのサイズです。

Mpps = Gbps / ((PktSize + 20) * 8) * 1000

次回は、DPDKを使ったOpen vSwitchを試してみます。