dpdk環境の話
DESCRIPTION
About my DPDK running envonment. (In Japanese)TRANSCRIPT
DPDK実験環境を組んでみた話
Dec 29, 2013Masaru OKI (@masaru0714)
Intel DPDKすごい!● Data Plane Development Kit● Linux用パケット処理ソフトウェアライブラリ● 10GbE short packetでwire rate出る (Xeonで)● packetはkernelをすっとばしてuserlandで処理● BSDライセンスで配布されている
もうなにも怖くない!
自宅でいじくりまわしてみたい
でも
● DPDKはIntel NICじゃないと動かない○ 3rd partyのドライバ(6WINDとか)は有償だったりして
● VMware上じゃ面白くない
だったら、
新しく組むしかないじゃない!あなたも! わたしも!
気になるあの製品
Atom C2758● サーバー向け8コア Atom (Rangeley) SoC● Intel QAT (Quick Assist Technology)搭載● ファンレス可能、TDP20Wこいつを載せたマザーボードが秋葉原にある!
SUPERMICRO A1SRi-2758F-O 51,680円
A1SRi-2758F-Oすごい!● Mini-ITX form factor, fanless● オンボード 4x Intel GbE● SO-DIMMスロット4本、最大32GB (DDR3L)● シリアルポートあり、BIOSリダイレクト可能● IPMI搭載
お小遣いを握り締めて秋葉原へGO!
買おうとしてみた
● Intel NUCと同じくDDR3Lじゃないとだめらしい● DDR3L SO-DIMMを安いところで買ってみる● そしていざ、パソコンハウス東映へ!● 「このマザーボードいただけますか」
ECC必須(買ったメモリ使えない orz)メモリの在庫が切れていた orz
結果
● いったん購入回避。● 買い損ねて、微妙な気分でアキバをうろうろ。● Miix 2.8 64GBモデル在庫あり……だと……
Miix 2.8買いました(46,800円)lenovoの8インチWindows8.1タブレット
DPDKまったく関係なし。提督
もとい、結果
● 翌週、入荷したメモリと一緒に買いました。● SSDも別途購入。● ビデオはオンボードだし、なくてもいい。● 円盤系はあまってるのを一時的につける。
ここからが本番です
IPMIViewすごい!● SUPREMICROのサイトから拾える管理ソフト● Javaで書かれていてWin,Mac,Linuxで動く● マザボのIPMI用RJ45をLANにつないで制御● 電源ON/OFF、リセット、温度監視もできる● ビデオコンソールをLANにリダイレクトできる
もうなにも怖くない!! (7枚ぶり2回目)
IPMIView動作画面の例
● センサー画面。● 1分で自動更新。● 手動更新可。
電圧センサ
温度センサ
組み立てて起動
● メモリ挿して、電源つなぎ、IPMI LANつなぎ● お試しでNetBSD入りUSBメモリぶっ挿して● これだけでいいのかな?● IPMIViewから電源オン
起動した!
起動したけど
NetBSDはどうだったのか
● ddbに落としてdmesgを確認したところ● 起動したストレージが見えてない● ブートできなかったのは当たり前か● SATA SSDに入れれば動きそうな気配
とりあえずNetBSDはあとまわし。
あらためて、組み立てと起動
● 電源を切って、SSDをつなぐ。● デスクトップ用DVDドライブをつなぐ。● 電源オンしてF2でブートデバイス調整して。● CentOSはいろいろ面倒なのでUbuntuで。● Ubuntu 12.04 LTSのメディアをブートさせて。
Ethernetが見えないとか不気味なメッセージ。
Ubuntu 13.10を使う
● 調べる時間を惜しんで、最新バージョンを使う。● あっさり起動。あっさりインストール完了。● Ubuntu 13.10、日本語入力腐ってるとか?
○ 日本語入力することはないだろうし、いいや。
● IPMIViewがASCIIキーボード前提らしい。○ 中カッコやバッククオートの入力でハマる。
JISキーボードの人は気をつけましょう。
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の選択
hugepages?● 仮想記憶はページ単位で管理。1ページ4KB。● 割当なしのアドレスにアクセスすると例外発生。● 例外処理の中でページを割り当て処理続行。● これをオンデマンドページングという。
hugepagesは2MB/pageや1GB/pageオンデマンドページングの回数を減らし速度向上
hugepagesの設定
● DPDKで使う前に、下準備の設定が必要● カーネルでサポートしていること
○ Ubuntuは標準カーネルでサポート、作業不要
● 起動前に領域が予約されていること○ GRUBの設定を編集して起動パラメータを追加
編集したら再起動が必要。
GRUBでhugepages領域予約
● /etc/default/grubをテキストエディタで編集GRUB_CMDLINE_LINUX=”hugepages=1024”上記は「2MBページを1024ページ予約」
● 編集後 sudo update-grub を実行し再起動。● あらためてDPDKのsetup.shで7を選び1024。
○ 2socketのときは7じゃなく8を選ぶ。
DPDK利用準備完了!
DPDKサンプルアプリいろいろ
examplesにいろいろ置いてあります
● l2fwd: L2転送のサンプル● l3fwd: L3転送のサンプル(arpはstatic)● load_balancer: 負荷分散のサンプル
などなど。さて、どれを試すかな。
あっ。
相手(対向)がいない!
対向マシンを考える
● さすがに同じのもう一枚はちょっとなあ。● トラフィックジェネレータ的に使えるのを想定。● Dual GbE、小さくまとめたいのでMini-ITXで。● 候補
○ N70E-DR V2 16,680円○ GA-C1037UN-EU 10,980円くらい
ケースも買うぜ!
製品の選択
● GIGABYTE安いしDIMMのほうがいいかな。● CPUのスペック一段下げたら1万円切るしな。● と思ったらオンボードNICがRealtek……● DPDK動かしたいのでN70E-DR V2に決定。
危うくまた散財するところだった。
N70E-DR V2● オンボード Celeron 1037U
○ IvyBridge 1.8GHz, 2コア, GPU内蔵
● SO-DIMMスロット1本○ Atom板で使えなかったメモリの再利用
● Intel 82574 Gigabit Ethernet Controller x2● 元々はNAS用の板らしい
Atom板を買った翌日、東映さんで買いました。
その他買ったもの
● Mini-ITXケース○ IN WIN BQ656
● 8インチサイズ液晶モニター○ CENTURY LCD-8000VH
● Low Profile PCIeなIntel NIC● 爪の折れないLANケーブルを数本
USBキーボードはあるし、マウスもあるはず。
対向機の組み立て
● 紙の説明書が説明少なくて悩む。● ケースがスリムすぎてNICささらない(誤算)。
○ ひとまずあきらめ。NIC散財か……orz● ケースのSATA電源コネクタ1つ。
○ 臨時でつなぐDVDドライブの電源どうしよう。○ 過去散財した、USB接続DVDドライブを発掘して接続。
結果オーライ。散財は未来につながった!
OS入れて、DPDK入れて
● 最初からUbuntu 13.10を入れる。○ sshdは sudo apt-get install openssh-server
● DPDKも入れる。hugepagesも設定して。● Pktgen-DPDKも入れる。
○ Atom機にも入れるか。○ Atom機で2ポートを直接つなげば限界速度わかる?○ ってことはつまり
対向機の出番はまだよ! orz
とりあえずAtom機でPktgen● DPDKからは0~2の3ポートが見える。● Port0とPort1を結線してみた。
IPMI用LAN
通信用eth0
Port0
Port1
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を使う
Atom機でPktgen結果
● start 0あるいはstart 0,1を実行● リアルタイム表示の結果
測定種別Port0 Port1 Total
送信 受信 送信 受信 送信 受信
P0→P1単方向
1000Mbps1488200pps
- - 976Mbps1452641pps
1000Mbps1488200pps
976Mbps1452641pps
P0←→P1両方向
1000Mbps1488203pps
955Mbps1422553pps
1000Mbps1488203pps
972Mbps1447173pps
2000Mbps2976406pps
1928Mbps2869726pps
パラメータを変えて試してみる
● -m ’[1-3:4-6].[0-2:0-2]’● Core7を使わない設定
測定種別Port0 Port1 Total
送信 受信 送信 受信 送信 受信
P0→P1単方向
900Mbps1340008pps
- - 857Mbps1275961pps
900Mbps1340008pps
857Mbps1275961pps
P0←→P1両方向
900Mbps1340005pps
872Mbps1298955pps
900Mbps1340003pps
868Mbps1292383pps
1800Mbps2680008pps
1741Mbps2591338pps
パラメータを変える その2● -m ’1.[0-2]’ Core1だけで送受信すべて処理● 結果: ぴったり99Mbpsで頭打ち(なぜ!?)● Pktgenのバグか? 性能限界か?
測定種別Port0 Port1 Total
送信 受信 送信 受信 送信 受信
P0→P1単方向
99Mbps148768pps
- - 99Mbps148784pps
99Mbps148768pps
99Mbps148784pps
P0←→P1両方向
99Mbps148784pps
99Mbps148784pps
99Mbps148784pps
99Mbps148784pps
199Mbps297568pps
199Mbps297568pps
対向用Celeron機で試してみた
● Celeron機はDual Core。● Core0は制御用としてキープする必要がある。● よって転送にはCore1のみを使う。● いやな予感。● 結果
100Mbpsしか出ませんでしたぁっ!!
どうしてくれよう
このままではAtom機をいじめられない。
とりうる選択肢を考えてみた。
1. Pktgen 100Mbps頭打ちの謎を解く。2. 自分で送受信プログラムを書く。(同じかも)3. netmap, PF_RINGなど別実装を試す。4. 違うハードを用意する。(散財)5. いじめかっこ悪い。やめる。(完全敗北)
まとめ
● サーバー用マザーボードとIPMIViewすごい。● AtomでGbE wire rateをほぼ出せた。● Pktgenは若干怪しい。(たまにバグでこけるし)● Celeron機は、散財に終わる可能性が……
それはさておき、
DPDKいじり楽しいですー!(コード書けよ)
謝辞
● 本当いろいろ置いてくださっているパソコンハウス東映さんに感謝!
● マザボの在庫状況を電話してくれた@gussunoyoyoさんに感謝!
● だらだらと書いたスライドを読んでいただいた皆様にも感謝!
ありがとうございました!
おまけ: Etherを増やす
● Celeron機はDual GbE。● 両方をDPDKで使うと通常の通信ができない。● 買ってきたケースに入れるとNICがささらない。● でも大きいケースはいやだー。● あ。
ライザーカードみたく横向きにできれば!
おまけ: Etherを増やす 2買ってきた。
またしても東映さんにて。
おまけ: Etherを増やす 3● 無理やり押し込んでみた。● バックパネルはなしで。● ケースの蓋は無事閉まった。● Ubuntuでeth2として認識。
結果: 勝利!
おしまい。