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
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
klab インターン成果物発表
khwarizmi
August 31, 2018
More Decks by khwarizmi
See All by khwarizmi
IntelNIC 送受信を学ぶ
khwarizmi
3
1k
NICのデバドラ開発
khwarizmi
0
210
ハードウェア乱数を用いた謝辞代表者の決定
khwarizmi
0
130
僕はDPDKをやっている人ではありません(XDP・netmap入門)
khwarizmi
1
880
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
280
Z4「高速なFW/IDSの実装」
khwarizmi
0
210
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
symfony/aiとlaravel/boost
77web
0
120
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
390
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
210
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
200
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
110
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
130
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
370
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
4.9k
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
480
Vite+ Unified Toolchain for the Web
naokihaba
0
710
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
So, you think you're a good person
axbom
PRO
2
2.1k
Music & Morning Musume
bryan
47
7.3k
Are puppies a ranking factor?
jonoalderson
1
3.7k
The Spectacular Lies of Maps
axbom
PRO
1
850
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Fireside Chat
paigeccino
42
4k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
390
Typedesign – Prime Four
hannesfritz
42
3.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
230
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)の検討
まとめ ・僕はネットワークのことを全くわかっていなかった ・しかしこのインターンでネットワークの入門ができた気がする ・ただ手を動かしているだけではダメだということを実感し, 考えてコードを書くことを学べた