Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
klab インターン成果物発表
Search
khwarizmi
August 31, 2018
Programming
0
340
klab インターン成果物発表
khwarizmi
August 31, 2018
Tweet
Share
More Decks by khwarizmi
See All by khwarizmi
IntelNIC 送受信を学ぶ
khwarizmi
3
1k
NICのデバドラ開発
khwarizmi
0
200
ハードウェア乱数を用いた謝辞代表者の決定
khwarizmi
0
120
僕はDPDKをやっている人ではありません(XDP・netmap入門)
khwarizmi
1
840
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
260
Z4「高速なFW/IDSの実装」
khwarizmi
0
200
HIGHSPEED PACKET IO
khwarizmi
0
130
Other Decks in Programming
See All in Programming
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
680
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
190
Windows on Ryzen and I
seosoft
0
220
TipKitTips
ktcryomm
0
160
株式会社 Sun terras カンパニーデック
sunterras
0
2k
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
470
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
15
8.3k
Ruby x Terminal
a_matsuda
7
590
15年目のiOSアプリを1から作り直す技術
teakun
1
610
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
170
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
210
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Designing for humans not robots
tammielis
254
26k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
100
The Cult of Friendly URLs
andyhume
79
6.8k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
150
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
Exploring anti-patterns in Rails
aemeredith
2
280
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Transcript
インターン成果物発表 河原 颯太
自己紹介 ・河原颯太(かわはらそうた) @khwarizmi6514 ・法政大学応用情報工学科 学部4年 金井(ネットワークセキュリティ)研究室所属 ・小学5年から野球を初めて高校3年までやっていた. ・春日部高校出身です! (これを言うといろんなところで先輩後輩が釣れることに最近気 が付いた)
・パソコンとは無縁の生活だったが, 大学入学時, 気が付いたらパソコンをやらなければ いけなくなっていた. ・元は数学が少しだけ好きだっただけの人. 最近非古典論理学に興味あるけどあんまり やってない. 今は数学嫌いだし全くできないです.
今までやってきたこと ・(大学)1年次, なんとなくプログラミング入門する. (C, C++) ・2年進学前, サーバ保守管理みたいなお仕事のインターンを始める. linuxに初めて触っ た! そのままアルバイトに.
・3年春, 今の研究室に配属. @slankdevにタゲられる. ・3年秋, ゲーム会社のインフラ部 dockerをやる. ・3年秋-冬, @slankdevにパケットを食べさせられる. ・4年, DPDKをやる.
インターンの課題 DPDK環境に向けた ネットワークスタックの実装
テーマの経緯 学部の研究テーマがDPDKを用いたネットワークスタック実装に決定 ↓ ネットワークスタックとかよくわかんねえしとりあえずDPDKいじいじ ↓
DPDKとは ・Data Plane Development Kit ・Intel が公開した高速なパケットIOを提供するライブラリ ・6WING が dpdk.org
を立ち上げ, 高性能化. Intel が dpdk.org が公式と認定. ・BSDライセンス. バージョンは最新が18.08, stableが18.02.2 ・公称、”Over 160Mpps” (64byte(ショート)パケットで約80Gbps 1024byteパケットで約1300Gbps)
DPDKの高速化のポイント ・メモリコピー → カーネルバイパス ・割り込み → ポーリング ・コンテキストスイッチ → コアを占有
・TLBミス → hugepagesの利用 ・キャッシュミス → 独自のメモリ管理機構
実は夏休み前に.. micropsのDPDK対応をやりました.
実は夏休み前に.. ethernetとarpは(とりあえず機能的には)動いていました. が ・パケットIOにメモリリークがあってすぐ死ぬ ・抽象化ってなんですか グローバルに全体のコンフィグを持ったデータ構造ドカン できてる部分も再実装し直す.
具体的にやったこと ethernet, arp, ip , icmp, udpの機能実装 実装はmicrops(https://github.com/pandax381/microps)の参照実装 リポジトリはこれ (https://github.com/kawaharasouta/k_lunetta)
処理の流れ NIC rx_pkt rx_ether rx_ip rx_arp send_rep rx_udp rx_icmp echo_rep
tx_ip API (ソケット) echo_rep tx_ether tx_pkt
スレッド設計 NIC rx_pkt rx_ether rx_ip rx_arp send_rep rx_udp rx_icmp echo_rep
tx_ip API (ソケット) echo_rep tx_ether tx_pkt
スレッド設計 メインスレッド on master(0)core (network app) プロトコル関数群 受信スレッド on 1core
launch API(ソケット)
各プロトコルの抽象化 いつも通り行き当たりばったりなコードの書き方をしていたら そのインタフェース情報 どこにおくつもりなの? えっと... なんか... グローバルにいる気がします...
ethernet が持つ情報 struct ether_port { uint16_t port_num; ethernet_addr mac_addr; };
struct ether_port ports[ETHER_PORT_MAX_NUM]; 物理層の情報(今回はDPDKしか選択肢がないので 実体を入れてる ethernetが持つべき情報 ethernetのインタフェーステーブルみたいなもの
IPが持つ情報 struct ip_interface { struct ether_port *port; uint32_t addr; ...
}; struct ip_interface interfaces[IP_INTERFACE_NUM]; ethernetのインタフェース情報のポインタを持つ. 具体的に中の情報を知っている必要はない. IPが持つべき情報 IPのインタフェーステーブル
より高度な抽象化 (ex. IP struct ip_interface { void *link_port; void *tx_funk(void
*link_port, ...); void *rx_funk(void *link_port, ...); ... } IPは, リンク層の情報をほぼ持ってい なくて良い. 起動時に各ポインタをIPに渡すだけで 良い.
デモ lunettaのUDPのAPIで実装したechoサーバ
None
今後の課題 機能面 ・IPフラグメンテーション ・arp_reply受信前のarp_request要求があった時のブロック ・なんかバグってるところ絶対あるよね... (arpはすでに一個存在 ・TCPまだ実装してない
今後の課題 高速化面 ・パケットIOのメモリリークを早く取り除かないと... ・ソケットの部分でメモリコピーを減らしたい ・ロックレスキューの利用 ・ハードウェアオフローディングの利用 ・RSS(Receive Side Scaling)の検討
まとめ ・僕はネットワークのことを全くわかっていなかった ・しかしこのインターンでネットワークの入門ができた気がする ・ただ手を動かしているだけではダメだということを実感し, 考えてコードを書くことを学べた