際際滷

際際滷Share a Scribd company logo
サイボウズ?ラボユ`ス及6豚
嶄g鷂
@slankdev
7/15/16 ラボユ`ス及6豚 嶄g鷂 1
徭失B初
oすらんく
oTwitter: @slankdev
oGitHub: slankdev
o脅坪の尖垢僥何3定
oセキュリティ?キャンプ2015俐阻, 2016チュ`タ`
oパケットとか_kとかが挫きです
o恷除HWにもd龍がイい討ました
7/15/16 ラボユ`ス及6豚 嶄g鷂 2
Agenda
1. 書豚のラボユ`スのテ`マ
2. とりあえずここまでやったこと
3. 書瘁にやるべきこと
ここまでは茶のrgがほとんどになってしまい、
畠隼かたちに火ることができていないので、
どんなことをしたのかを鷂罎靴泙后
7/15/16 ラボユ`ス及6豚 嶄g鷂 3
書豚のラボユ`スのテ`マ
oTCP/IPのプロトコルスタックの_k
ohttp://github.com/slankdev/stcp.git
7/15/16 ラボユ`ス及6豚 嶄g鷂 4
stcpについて
oユ`ザランドで咾TCP/IPプロトコルスタック
oゼロコピ`
oマルチインタ`フェ`スをサポ`ト
oIOエンジンはDPDKを聞喘
oC++11で_k
7/15/16 ラボユ`ス及6豚 嶄g鷂 5
朕盆_撹のために
oTCP/IPのプロトコルスタックの蚕y議Oの岑R
o屡贋のOSSを歌深
これらのことを匯にMめるための圭隈とかを
茶していました
7/15/16 ラボユ`ス及6豚 嶄g鷂 6
とりあえずここまでやったこと
oDPDKの聞い圭をまなぶ
oプロトコルスタックのOg廾をみる
o_kツ`ルを僥ぶ
侘にのこるものが採もない!!!
7/15/16 ラボユ`ス及6豚 嶄g鷂 7
DPDK (Data Plane Developing Kit)
oIntelが_kしていた階互堀パケットIOの
ユ`ザランドドライバ
oいまだにうまく咾ないとこがあります。。
oIntelNICを嶄伉にサポ`ト (なくても_kはできます!)
晩云Zの猟廚曚箸鵑匹覆
7/15/16 ラボユ`ス及6豚 嶄g鷂 8
DPDKとは
7/15/16 ラボユ`ス及6豚 嶄g鷂 9
レイテンシ曳^
okernelとDPDKの堀業曳^をしてみました
ohttp://blog.slankdev.net/2016/05/25/dpdk-latency/
oCPUが3GHzで64byteのショ`トパケットで堀業y
oKernel: s3000clock -> s0.5Gbps
oDPDK: s30clock -> s50Gbps
7/15/16 ラボユ`ス及6豚 嶄g鷂 10
書指これを
ostcpではパケットの秘竃薦でDPDKを聞喘して_k
oC++で_kをするので、ラップ恬I
oそのままC++でコンパイルすると鏑られる
-> OSvの_kチ`ムが掲巷塀なpatchを..
oDPDKがr侘Makefileを喘吭していてそれもなんとか
7/15/16 ラボユ`ス及6豚 嶄g鷂 11
C++で聞うために
oOSvのpatchを輝てた
7/15/16 ラボユ`ス及6豚 嶄g鷂 12
DPDK 秘圭隈
1. IntelNICが\ったPCを喘吭
2. 駅勣なパッケ`ジをインスト`ル
3. カ`ネルコンフィグを{べる
4. Hugepagesを嗤浸
5. HugepagesをDPDKから乾れるようにする
ohttp://blog.slankdev.net/2016/05/08/dpdk-setup/
ohttps://github.com/slankdev/dpdk/
7/15/16 ラボユ`ス及6豚 嶄g鷂 13
DPDKの聞い圭
o光v方をラップ->I尖の払rは箭翌を誘げるように
oDPDKのC嬬はOS慌嗤なので、DPDKを砿尖するクラスをシ
ングルトンとしてクラスO
oInitI尖とかをまとめる -> Yたくさんある
oリングバッファのサイズとかをある殻業O協辛嬬に
7/15/16 ラボユ`ス及6豚 嶄g鷂 14
蚕y議なプロトコルスタック
oBSDのg廾嶄伉に歌深
oLinuxカ`ネルとFreeBSDのg廾を曳^
7/15/16 ラボユ`ス及6豚 嶄g鷂 15
ハイレイヤなg廾
oメッセ`ジバッファの侘リストを喘いて、
パケットを砿尖している。
? Linux: skbuff夛悶
? BSD: mbuf夛悶
? DPDK: rte_mbuf夛悶
o光プロトコルモジュ`ルごとにそれを喘吭しているっぽい
7/15/16 ラボユ`ス及6豚 嶄g鷂 16
mbufについて
oDPDKでもmbufをgFした夛悶を喘吭されている。
orte_mbuf夛悶
7/15/16 ラボユ`ス及6豚 嶄g鷂 17
灸侏議なmbufの箭
7/15/16 ラボユ`ス及6豚 嶄g鷂 18
こんなFIFOデ`タ夛
7/15/16 ラボユ`ス及6豚 嶄g鷂 19
ここからとりだし
ここについか
ゼロコピ`でデ`タ卞
7/15/16 ラボユ`ス及6豚 嶄g鷂 20
ゼロコピ`でデ`タ卞
7/15/16 ラボユ`ス及6豚 嶄g鷂 21
mbufの聞われ圭
7/15/16 ラボユ`ス及6豚 嶄g鷂 22
DPDKでのパケット僕佚
7/15/16 ラボユ`ス及6豚 嶄g鷂 23
_kツ`ル
oSystemtapやvalgrindとかの聞い圭をすこし茶しました。
o云晩はsystemtapについて鷂
7/15/16 ラボユ`ス及6豚 嶄g鷂 24
Systemtap
og佩嶄のカ`ネルの叟秤鵑魍gに
フックすることができるツ`ル
oカ`ネルのv方の柵び竃しなどを啜弔縫侫奪する
oパケット僕佚何蛍でどのようなコ`ドでg廾されているか
7/15/16 ラボユ`ス及6豚 嶄g鷂 25
net/packet/af_packet.cのv方をフック
o參和のようなスクリプト
7/15/16 ラボユ`ス及6豚 嶄g鷂 26
net/packet/af_packet.cのv方をフック
o書指聞喘するサンプルコ`ド
7/15/16 ラボユ`ス及6豚 嶄g鷂 27
fd.open_if(dev) の嶄附
7/15/16 ラボユ`ス及6豚 嶄g鷂 28
socket fd の恬撹r
osocket()
oioctl()
obind()
oioctl()
oioctr()
7/15/16 ラボユ`ス及6豚 嶄g鷂 29
write()でのパケット僕佚r
owrite(fd, buf, sendlen);
7/15/16 ラボユ`ス及6豚 嶄g鷂 30
Systemtapの聞い祇
osocketのY箸鰔ていきたい
oいろいろなMみ栽わせがある
? AF_INET, SOCK_STREAM
? AF_INET, SOCK_RAW
? AF_PACKET, SOCK_RAW
? etc ´
o光プロトコルのモジュ`ルのつながりを湖じ函る
7/15/16 ラボユ`ス及6豚 嶄g鷂 31
Systemtap 秘圭隈
oデバッグ秤鵑根まれるカ`ネルを喘吭する
? コンパイルされたイメ`ジをaptやyumでインスト`ル
? 徭薦でビルドする
? 蚕y議圭隈
? ディストリビュ`ションの廁けを処りる
ohttps://github.com/slankdev/documents/blob/master/wiki/
systemtap/install.md
7/15/16 ラボユ`ス及6豚 嶄g鷂 32
書瘁にやるべきこと
o[除い朕] IPプロトコルをたたく何蛍をg廾
? IP
? ARP
? Ethernet
oRaw socketをsystemtapでフックしていろいろてみたい
o屡贋のカ`ネルと堀業曳^
oRdtscで屎_にy
7/15/16 ラボユ`ス及6豚 嶄g鷂 33
DPDKがうまく咾い討れない}
7/15/16 ラボユ`ス及6豚 嶄g鷂 34
ここでstepg佩しないと
パケットが僕られないクソ}
_kでは岷俊HWにバインドしないで、
libpcapを宥して乾っているので恬Iは}なくMみます

More Related Content

サイボウズ?ラボユ`ス嶄寂烏御氏