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
NICのデバドラ開発
Search
khwarizmi
March 22, 2019
Programming
0
180
NICのデバドラ開発
khwarizmi
March 22, 2019
Tweet
Share
More Decks by khwarizmi
See All by khwarizmi
IntelNIC 送受信を学ぶ
khwarizmi
3
970
ハードウェア乱数を用いた謝辞代表者の決定
khwarizmi
0
96
僕はDPDKをやっている人ではありません(XDP・netmap入門)
khwarizmi
1
790
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
230
klab インターン成果物発表
khwarizmi
0
320
Z4「高速なFW/IDSの実装」
khwarizmi
0
190
HIGHSPEED PACKET IO
khwarizmi
0
110
Other Decks in Programming
See All in Programming
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
22
11k
ProxyによるWindow間RPC機構の構築
syumai
3
1.1k
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
250
RDoc meets YARD
okuramasafumi
4
170
AWS発のAIエディタKiroを使ってみた
iriikeita
1
180
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
830
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
320
為你自己學 Python - 冷知識篇
eddie
1
350
時間軸から考えるTerraformを使う理由と留意点
fufuhu
15
4.6k
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
210
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
480
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
0
170
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
55
13k
Statistics for Hackers
jakevdp
799
220k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
RailsConf 2023
tenderlove
30
1.2k
Side Projects
sachag
455
43k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Code Review Best Practice
trishagee
70
19k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Why Our Code Smells
bkeepers
PRO
339
57k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Balancing Empowerment & Direction
lara
3
620
Transcript
NICデバドラ開発 ド入門からの開発
自己紹介 - 河原颯太(かわはらそうた) @khwarizmi6514 - 法政大学応用情報工学科 学部4年(春からM1) 金井(ネットワークセキュリティ)研 究室所属 -
小学5年から野球を初めて高校3年までやっていた. - 春日部高校出身です! (これを言うといろんなところで先輩後輩が釣れることに最近 気が付いた) - パソコンとは無縁の生活だったが, 大学入学時, 気が付いたらパソコンをやらなけ ればいけなくなっていた. - 一緒に研究をしてくれる後輩募集中 (一人で研究をしていて寂しい)
最近やってた(やってる)こと - ネットワークスタック実装 - DPDK・netmap・XDP (XDPが激アツ) - NICのハードウェア機能活用による性能比較調査 - Linuxネットワークパフォーマンス調査
*最近やりたいこと* - FreeBSDで性能調査(ネットワークスタック参照したりしときながら触ったことがな い) - FPGA(購入してLEDチカチカまでしてそのままタンスの奥にいる) - EDM作りたみがある(動画音楽編集全般
採択からテーマ決めまでの経緯 何をもってネットワーク入門とするか
何を持ってネットワーク入門とするか - WEB系 - ルーティング・ネットワーク構築 - ネットワークプログラミング - ネットワークスタック -
ソフト的パケットIO - ハード的パケットIO - NW機器自作
僕の考えるネットワーク入門 - WEB系 - ルーティング・ネットワーク構築 - ネットワークプログラミング - ネットワークスタック -
ソフト的パケットIO - ハード的パケットIO - NW機器自作
採択からテーマ決めまでの経緯 当時ネットワークスタック実装初期で, それをテーマに応募. ↓ 採択後間が空いてしまいその間にUDPまで動いてかつTCPも目処が立っていた. ↓ パケットIOの勉強がしたく, NICのデバドラの開発を希望した.
ここまでで学習したことをざっと
STEP1 カーネルに機能追加をする Linuxはカーネルモジュールをロードすることで機能追加が可能. ↓ デバイス固有の動作を定義するデバイスドライバもこれで実現されることが多い. ↓ カーネルモジュール開発入門
STEP1 カーネルに機能追加をする サイボウズ技術顧問の @satoru_takeuchi さんの入門記事 https://qiita.com/satoru_takeuchi/items/83c8e2f38176d2724f48 電子書籍もあった https://windhole.booth.pm/items/1169009
STEP2 デバイスファイル Linuxの主要機能ファイルシステム. デバイスもファイルとして扱われる. 「キャラクタデバイス」「ブロックデバイス」がある. ↓ キャラクタデバイスを実装してみる
STEP2 デバイスファイル *ポイントっぽいところ* - メジャー番号の動的割り当て - alloc_chrdev_regionを使う. - デバイスメソッド -
struct file_operations という構造体を初期化することで動作を定義できる . - デバイスの登録 - void cdev_init(struct cdev *cdev, struct file_operations *fops); - int cdev_add(struct cdev *dev, dev_t num, unsigned int count);
STEP3 ネットワークデバイス ネットワークデバイスはブロックデバイスと似ているが, - デバイスファイルを持たない - インタフェースが異なる - デバイスからの非同期アクセスがある(パケットの受信) といった相違点がある.
STEP4 物理NICを操作する - PCI操作等のインタフェースの操作 - ハードウェア固有の操作を理解しなければならない
初めてのカーネル空間で大変なこと デバッグが超大変
デバッグ手法 - kgdb, kdb gbdサーバ的なものがカーネル内 にいるような使い方 - kprobes カーネル空間にブレークポイント を仕込める
今後やっていくこと - まだ物理 NICを相手にちゃんと動いていないので動かす - 高速なパケットIOを目指す - NAPI (ポーリング) -
カーネルバイパスなメモリアクセスの実装 将来的に趣味でできたらいいなと思うこと - FPGAで自作NICして自作ドライバでパケットIOする
何を持ってネットワーク入門とするか - WEB系 - ルーティング・ネットワーク構築 - ネットワークプログラミング - ネットワークスタック -
ソフト的パケットIO - ハード的パケットIO - NW機器自作