Seccamp 2016 チューター成果報告
Transcript of Seccamp 2016 チューター成果報告
自己紹介
oすらんくでぶ(slankdev)◦ Twitterとか:slankdev◦学部 3年◦サイボウズ・ラボユース第5,6期生◦ 2015キャンプ修了生
oパケットの世界から一歩一歩レイヤを下げて生活
oタイヤを再発明するのがとっても得意
2016.8 seccamp2016 2
Agenda1. なぜプロトコルスタック開発なのか2. 開発物の概要3. 開発の流れ、出来事、知見、現状4. 今後の展望
細かく説明する時間がないので、気になった方は直接お話を!!!
2016.8 seccamp2016 7
なぜプロトコルスタック
o昨年度はパケット解析ツール
oパケット屋さんになるはずが…oLinuxカーネルのプロトコルスタックは遅いo研究に使いたい(夢)
oオレオレ物が大好き
o高速化など今の僕にはいい勉強になる
oサイボウズラボユース
2016.8 seccamp2016 8
パケット処理高速化の手法
oLRO (LargeReceiveOffload)◦デフラグメントをHW処理
oLSO(LargeSegmentOffload)◦フラグメントをHW処理
oチェックサムをOffloading
2016.8 seccamp2016 9
パケット処理高速化の手法
oLRO (LargeReceiveOffload)◦デフラグメントをHW処理
oLSO(LargeSegmentOffload)◦フラグメントをHW処理
oチェックサムをOffloading
2016.8 seccamp2016 10
Segmentation Offloadとの出会いoNICに癖があってルータ自作で死んだことがあって
oreadでLROされてるけど、owriteでLSOされないから
2016.8 seccamp2016 11
プロトコルスタック開発概要
o名前 stcp (slankdev’s tcp/ip) ->名前未定ohttp://github.com/slankdev/stcp
oユーザランドで動作
o極力ゼロコピー
oマルチインターフェースをサポート
oIOエンジンはDPDKを使用oC++11で開発
2016.8 seccamp2016 12
開発手法
oBSD,Linuxから勉強oC++でまとめるoDPDKを使いこなす
o読書->ソース確認->実装->テスト->読書->…o開発にかける時間の9割が読書とソースリード
2016.8 seccamp2016 13
情報収集の方法
oBSDの黄色い本
oBSD>>>Linux
o動的解析はLinuxでSystemTapoBSD版のSystemTapみたいなのあれば教えてください
2016.8 seccamp2016 14
DPDK(DataPlaneDevelopmentKit)o (ほぼIntelNICのみサポート)ユーザランド高速パケットIOドライバoカーネル処理より相当早い
2016.8 seccamp2016 15
パケットの管理
ombufを使用して実装 (Linuxだとskb)->DPDKにもmbuf相当のものがあるよ!
o線形リストになっている
oパケットの先頭や末尾にデータを追加、消去しやすいデータ構造
o参照数とかのカウントや受信ポート情報とかの情報も持つ
2016.8 seccamp2016 18
ただのNWプログラミングだとouint8_t[1600]みたいなのに先頭から詰めるのがよくある
oでも先頭にヘッダを追加したりしたい時は?
oいちいちコピーし直さないといけない!!
2016.8 seccamp2016 20
パケット
「C++でまとめる」..とはo伝統 ->リンクリストo今回 ->Vector
oリサイズでメモリ解放してくれなかったりもっといい手法があるかもだけどとりあえずこれで
oなるべくシンプルにすることが目標
2016.8 seccamp2016 23
ゼロコピーを実現
o各プロトコルモジュール間のデータ移動は線形リスト
oパケット管理はDPDKがある程度束縛するのでSTLと相性悪い
2016.8 seccamp2016 24
私
DPDKC++11
感想
oさらに知りたいことがたくさん見つかる
o昔は(使いやすい?)車輪を。今度は早くする工夫を
oパケット処理の高速化はたくさん方法がある◦処理を早くする◦ オフローディング◦ メモリアクセスを賢く◦ etc..
oどんどんレイヤが下がる一方
2016.8 seccamp2016 27