1 of 39

DPDK実験環境を

組んでみた話

Dec 29, 2013

Masaru OKI (@masaru0714)

2 of 39

Intel DPDKすごい!

  • Data Plane Development Kit
  • Linux用パケット処理ソフトウェアライブラリ
  • 10GbE short packetでwire rate出る (Xeonで)
  • packetはkernelをすっとばしてuserlandで処理
  • BSDライセンスで配布されている

もうなにも怖くない!

3 of 39

自宅でいじくりまわしてみたい

でも

  • DPDKはIntel NICじゃないと動かない
    • 3rd partyのドライバ(6WINDとか)は有償だったりして
  • VMware上じゃ面白くない

だったら、

新しく組むしかないじゃない!

あなたも! わたしも!

4 of 39

気になるあの製品

Atom C2758

  • サーバー向け8コア Atom (Rangeley) SoC
  • Intel QAT (Quick Assist Technology)搭載
  • ファンレス可能、TDP20W

こいつを載せたマザーボードが秋葉原にある!

SUPERMICRO A1SRi-2758F-O 51,680円

5 of 39

A1SRi-2758F-Oすごい!

  • Mini-ITX form factor, fanless
  • オンボード 4x Intel GbE
  • SO-DIMMスロット4本、最大32GB (DDR3L)
  • シリアルポートあり、BIOSリダイレクト可能
  • IPMI搭載

お小遣いを握り締めて秋葉原へGO!

6 of 39

買おうとしてみた

  • Intel NUCと同じくDDR3Lじゃないとだめらしい
  • DDR3L SO-DIMMを安いところで買ってみる
  • そしていざ、パソコンハウス東映へ!
  • 「このマザーボードいただけますか」

ECC必須(買ったメモリ使えない orz)

メモリの在庫が切れていた orz

7 of 39

結果

  • いったん購入回避。
  • 買い損ねて、微妙な気分でアキバをうろうろ。
  • Miix 2.8 64GBモデル在庫あり……だと……

Miix 2.8買いました(46,800円)

lenovoの8インチWindows8.1タブレット

DPDKまったく関係なし。提督

8 of 39

もとい、結果

  • 翌週、入荷したメモリと一緒に買いました。
  • SSDも別途購入。
  • ビデオはオンボードだし、なくてもいい。
  • 円盤系はあまってるのを一時的につける。

ここからが本番です

9 of 39

IPMIViewすごい!

  • SUPREMICROのサイトから拾える管理ソフト
  • Javaで書かれていてWin,Mac,Linuxで動く
  • マザボのIPMI用RJ45をLANにつないで制御
  • 電源ON/OFF、リセット、温度監視もできる
  • ビデオコンソールをLANにリダイレクトできる

もうなにも怖くない!! (7枚ぶり2回目)

10 of 39

IPMIView動作画面の例

  • センサー画面。
  • 1分で自動更新。
  • 手動更新可。

電圧センサ

温度センサ

11 of 39

組み立てて起動

  • メモリ挿して、電源つなぎ、IPMI LANつなぎ
  • お試しでNetBSD入りUSBメモリぶっ挿して
  • これだけでいいのかな?
  • IPMIViewから電源オン

起動した!

12 of 39

起動したけど

13 of 39

NetBSDはどうだったのか

  • ddbに落としてdmesgを確認したところ
  • 起動したストレージが見えてない
  • ブートできなかったのは当たり前か
  • SATA SSDに入れれば動きそうな気配

とりあえずNetBSDはあとまわし。

14 of 39

あらためて、組み立てと起動

  • 電源を切って、SSDをつなぐ。
  • デスクトップ用DVDドライブをつなぐ。
  • 電源オンしてF2でブートデバイス調整して。
  • CentOSはいろいろ面倒なのでUbuntuで。
  • Ubuntu 12.04 LTSのメディアをブートさせて。

Ethernetが見えないとか不気味なメッセージ。

15 of 39

Ubuntu 13.10を使う

  • 調べる時間を惜しんで、最新バージョンを使う。
  • あっさり起動。あっさりインストール完了。
  • Ubuntu 13.10、日本語入力腐ってるとか?
    • 日本語入力することはないだろうし、いいや。
  • IPMIViewがASCIIキーボード前提らしい。
    • 中カッコやバッククオートの入力でハマる。

JISキーボードの人は気をつけましょう。

16 of 39

DPDK入れてみる

Intelのサイトから入手。unzipで展開。

cd DPDK-1.5.2; ./tools/setup でメニュー選択。

3. 64bit版をgccでコンパイル

5. PMD(DPDK用NICドライバ)の組み込み

6. KNI(DPDK用tapドライバ)の組み込み

7. hugepagesの確保

9. DPDKで使うNICの選択

17 of 39

hugepages?

  • 仮想記憶はページ単位で管理。1ページ4KB。
  • 割当なしのアドレスにアクセスすると例外発生。
  • 例外処理の中でページを割り当て処理続行。
  • これをオンデマンドページングという。

hugepagesは2MB/pageや1GB/page

オンデマンドページングの回数を減らし速度向上

18 of 39

hugepagesの設定

  • DPDKで使う前に、下準備の設定が必要
  • カーネルでサポートしていること
    • Ubuntuは標準カーネルでサポート、作業不要
  • 起動前に領域が予約されていること
    • GRUBの設定を編集して起動パラメータを追加

編集したら再起動が必要。

19 of 39

GRUBでhugepages領域予約

  • /etc/default/grubをテキストエディタで編集

GRUB_CMDLINE_LINUX=”hugepages=1024”

上記は「2MBページを1024ページ予約」

  • 編集後 sudo update-grub を実行し再起動。
  • あらためてDPDKのsetup.shで7を選び1024。
    • 2socketのときは7じゃなく8を選ぶ。

DPDK利用準備完了!

20 of 39

DPDKサンプルアプリいろいろ

examplesにいろいろ置いてあります

  • l2fwd: L2転送のサンプル
  • l3fwd: L3転送のサンプル(arpはstatic)
  • load_balancer: 負荷分散のサンプル

などなど。さて、どれを試すかな。

あっ。

相手(対向)がいない!

21 of 39

対向マシンを考える

  • さすがに同じのもう一枚はちょっとなあ。
  • トラフィックジェネレータ的に使えるのを想定。
  • Dual GbE、小さくまとめたいのでMini-ITXで。
  • 候補
    • N70E-DR V2 16,680円
    • GA-C1037UN-EU 10,980円くらい

ケースも買うぜ!

22 of 39

製品の選択

  • GIGABYTE安いしDIMMのほうがいいかな。
  • CPUのスペック一段下げたら1万円切るしな。
  • と思ったらオンボードNICがRealtek……
  • DPDK動かしたいのでN70E-DR V2に決定。

危うくまた散財するところだった。

23 of 39

N70E-DR V2

  • オンボード Celeron 1037U
    • IvyBridge 1.8GHz, 2コア, GPU内蔵
  • SO-DIMMスロット1本
    • Atom板で使えなかったメモリの再利用
  • Intel 82574 Gigabit Ethernet Controller x2
  • 元々はNAS用の板らしい

Atom板を買った翌日、東映さんで買いました。

24 of 39

その他買ったもの

  • Mini-ITXケース
    • IN WIN BQ656
  • 8インチサイズ液晶モニター
    • CENTURY LCD-8000VH
  • Low Profile PCIeなIntel NIC
  • 爪の折れないLANケーブルを数本

USBキーボードはあるし、マウスもあるはず。

25 of 39

対向機の組み立て

  • 紙の説明書が説明少なくて悩む。
  • ケースがスリムすぎてNICささらない(誤算)。
    • ひとまずあきらめ。NIC散財か……orz
  • ケースのSATA電源コネクタ1つ。
    • 臨時でつなぐDVDドライブの電源どうしよう。
    • 過去散財した、USB接続DVDドライブを発掘して接続。

結果オーライ。散財は未来につながった!

26 of 39

OS入れて、DPDK入れて

  • 最初からUbuntu 13.10を入れる。
    • sshdは sudo apt-get install openssh-server
  • DPDKも入れる。hugepagesも設定して。
  • Pktgen-DPDKも入れる。
    • Atom機にも入れるか。
    • Atom機で2ポートを直接つなげば限界速度わかる?
    • ってことはつまり

対向機の出番はまだよ! orz

27 of 39

とりあえずAtom機でPktgen

  • DPDKからは0~2の3ポートが見える。
  • Port0とPort1を結線してみた。

IPMI用LAN

通信用eth0

Port0

Port1

28 of 39

Pktgen-DPDK動かし方

  • sudo ./app/build/pktgen パラメータ
  • パラメータ
    • -cff
      • Core0~7を使用する
    • -n2 -- -p 0xe
      • -pはPortを3つ(eth1~3)利用する指定
    • -m ’[1-3:4-7].[0-2:0-2]’
      • Port0~2受信にCore1~3を使う
      • Port0~2送信にCore4~7を使う

29 of 39

Atom機でPktgen結果

  • start 0あるいはstart 0,1を実行
  • リアルタイム表示の結果

測定種別

Port0

Port1

Total

送信

受信

送信

受信

送信

受信

P0→P1�単方向

1000Mbps

1488200pps

-

-

976Mbps

1452641pps

1000Mbps

1488200pps

976Mbps

1452641pps

P0←→P1�両方向

1000Mbps

1488203pps

955Mbps

1422553pps

1000Mbps

1488203pps

972Mbps

1447173pps

2000Mbps

2976406pps

1928Mbps

2869726pps

30 of 39

パラメータを変えて試してみる

  • -m ’[1-3:4-6].[0-2:0-2]’
  • Core7を使わない設定

測定種別

Port0

Port1

Total

送信

受信

送信

受信

送信

受信

P0→P1�単方向

900Mbps

1340008pps

-

-

857Mbps

1275961pps

900Mbps

1340008pps

857Mbps

1275961pps

P0←→P1�両方向

900Mbps

1340005pps

872Mbps

1298955pps

900Mbps

1340003pps

868Mbps

1292383pps

1800Mbps

2680008pps

1741Mbps

2591338pps

31 of 39

パラメータを変える その2

  • -m ’1.[0-2]’ Core1だけで送受信すべて処理
  • 結果: ぴったり99Mbpsで頭打ち(なぜ!?)
  • Pktgenのバグか? 性能限界か?

測定種別

Port0

Port1

Total

送信

受信

送信

受信

送信

受信

P0→P1�単方向

99Mbps

148768pps

-

-

99Mbps

148784pps

99Mbps

148768pps

99Mbps

148784pps

P0←→P1�両方向

99Mbps

148784pps

99Mbps

148784pps

99Mbps

148784pps

99Mbps

148784pps

199Mbps

297568pps

199Mbps

297568pps

32 of 39

対向用Celeron機で試してみた

  • Celeron機はDual Core。
  • Core0は制御用としてキープする必要がある。
  • よって転送にはCore1のみを使う。
  • いやな予感。
  • 結果

100Mbpsしか出ませんでしたぁっ!!

33 of 39

どうしてくれよう

このままではAtom機をいじめられない。

とりうる選択肢を考えてみた。

  • Pktgen 100Mbps頭打ちの謎を解く。
  • 自分で送受信プログラムを書く。(同じかも)
  • netmap, PF_RINGなど別実装を試す。
  • 違うハードを用意する。(散財)
  • いじめかっこ悪い。やめる。(完全敗北)

34 of 39

まとめ

  • サーバー用マザーボードとIPMIViewすごい。
  • AtomでGbE wire rateをほぼ出せた。
  • Pktgenは若干怪しい。(たまにバグでこけるし)
  • Celeron機は、散財に終わる可能性が……

それはさておき、

DPDKいじり楽しいですー!(コード書けよ)

35 of 39

謝辞

  • 本当いろいろ置いてくださっている�パソコンハウス東映さんに感謝!
  • マザボの在庫状況を電話してくれた�@gussunoyoyoさんに感謝!
  • だらだらと書いたスライドを読んでいただいた�皆様にも感謝!

ありがとうございました!

36 of 39

おまけ: Etherを増やす

  • Celeron機はDual GbE。
  • 両方をDPDKで使うと通常の通信ができない。
  • 買ってきたケースに入れるとNICがささらない。
  • でも大きいケースはいやだー。
  • あ。

ライザーカードみたく横向きにできれば!

37 of 39

おまけ: Etherを増やす 2

買ってきた。

またしても東映さんにて。

38 of 39

おまけ: Etherを増やす 3

  • 無理やり押し込んでみた。
  • バックパネルはなしで。
  • ケースの蓋は無事閉まった。
  • Ubuntuでeth2として認識。

結果: 勝利!

39 of 39

おしまい。