$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NICのデバドラ開発
Search
khwarizmi
March 22, 2019
Programming
0
190
NICのデバドラ開発
khwarizmi
March 22, 2019
Tweet
Share
More Decks by khwarizmi
See All by khwarizmi
IntelNIC 送受信を学ぶ
khwarizmi
3
980
ハードウェア乱数を用いた謝辞代表者の決定
khwarizmi
0
100
僕はDPDKをやっている人ではありません(XDP・netmap入門)
khwarizmi
1
820
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
240
klab インターン成果物発表
khwarizmi
0
330
Z4「高速なFW/IDSの実装」
khwarizmi
0
190
HIGHSPEED PACKET IO
khwarizmi
0
120
Other Decks in Programming
See All in Programming
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.2k
スタートアップを支える技術戦略と組織づくり
pospome
8
13k
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
120
2025 컴포즈 마법사
jisungbin
0
160
データファイルをAWSのDWHサービスに格納する / 20251115jawsug-tochigi
kasacchiful
2
100
Feature Flags Suck! - KubeCon Atlanta 2025
phodgson
1
190
アーキテクチャと考える迷子にならない開発者テスト
irof
9
3.4k
『実践MLOps』から学ぶ DevOps for ML
nsakki55
2
490
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
4
350
GraalVM Native Image トラブルシューティング機能の最新状況(2025年版)
ntt_dsol_java
0
170
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
4
1.2k
分散DBって何者なんだ... Spannerから学ぶRDBとの違い
iwashi623
0
140
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
527
40k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
GitHub's CSS Performance
jonrohan
1032
470k
RailsConf 2023
tenderlove
30
1.3k
Code Review Best Practice
trishagee
72
19k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
67k
Six Lessons from altMBA
skipperchong
29
4.1k
Faster Mobile Websites
deanohume
310
31k
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機器自作