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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
890
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
290
Z4「高速なFW/IDSの実装」
khwarizmi
0
210
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
200
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
300
自分的「カンファレンスの楽しみ方」
syumai
0
190
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
560
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
810
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
110
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
Oxlintはいいぞ(続)
yug1224
1
540
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
290
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
0
160
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
330
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.7k
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Balancing Empowerment & Direction
lara
6
1.3k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
Music & Morning Musume
bryan
47
7.4k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building AI with AI
inesmontani
PRO
1
1.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
260
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
510
How to Ace a Technical Interview
jacobian
281
24k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
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)の検討
まとめ ・僕はネットワークのことを全くわかっていなかった ・しかしこのインターンでネットワークの入門ができた気がする ・ただ手を動かしているだけではダメだということを実感し, 考えてコードを書くことを学べた