seccamp 2018卒業生です。
趣味で作っているDPDK FWの進捗報告をさせていただきます。
よろしくお願いします。
DPDKとは
パケット処理に特化したライブラリのことです。
- kernel bypassしてUser landから直接NICをたたくことができる
- PMD(Poll Mode Driver)でCPUを占有(Polling)してパケットに関する処理に全リソースを割くことができる
- hugepageの利用で、一ページあたりの大きさを大きくして、ページ数を少なくして、高速化ができる
以上のようなメリットがあり、パケットを高速で送受信することができます。
進捗
以上のことをしました。
それぞれについて説明していきます。
フィルタリング設定json読み込み化
まず、今までdropする5tuple(ip dst/ ip src/ ip proto/ src port/ dst port)フィルターの情報を標準入力で受けつけるように実装していました。
しかし、それは非常に面倒だと普通は思うのでjsonを読み込んでフィルターするように実装しました。
これを実装した後に改めて計測をしました。
その際、janssonというライブラリを使いました。
Jansson — C library for working with JSON data
Jansson Documentation — Jansson 2.11 documentation
また、Log出力のOn/Offもここで切り替えられるようにしました。
FW性能測定
環境
上のような環境で実験しました。
Host 1側でIntel DPDK pkt-genを走らせてパケットを送信して、Host 2側で今回作成したFWを走らせてパケットをフィルタリングして、Host 1側に送信する、という形で測定しました。
githubリンク
パケットと戯れた結果
自分で作ったパケットを自分で作ったFWでdropするという謎の遊びができるようになった
— アゴドリル (@AG0D0R1RV) 2018年12月1日
Todo
フロント側との結合
もっと低レイヤー的なことをして、パケットロスを減らしたい。
(どうすれば性能が向上するか全くわからないが、、、)
これを今後取り組みます。
最後に
自分はDPDKの開発環境を持っておらず、seccampでお世話になったsyuu先生のマシンを借りて開発をしています。
また、技術的な質問にも答えていただいて非常に感謝しています。
ありがとうございます。
最後の最後に
まだまだやることがあるので頑張りたい