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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
khwarizmi
March 22, 2019
Programming
200
0
Share
NICのデバドラ開発
khwarizmi
March 22, 2019
More Decks by khwarizmi
See All by khwarizmi
IntelNIC 送受信を学ぶ
khwarizmi
3
1k
ハードウェア乱数を用いた謝辞代表者の決定
khwarizmi
0
120
僕はDPDKをやっている人ではありません(XDP・netmap入門)
khwarizmi
1
850
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
270
klab インターン成果物発表
khwarizmi
0
350
Z4「高速なFW/IDSの実装」
khwarizmi
0
200
HIGHSPEED PACKET IO
khwarizmi
0
130
Other Decks in Programming
See All in Programming
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
460
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
180
PHPで TLSのプロトコルを実装してみる
higaki_program
0
600
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
160
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.6k
AI活用のコスパを最大化する方法
ochtum
0
360
Ruby and LLM Ecosystem 2nd
koic
1
1.4k
Rethinking API Platform Filters
vinceamstoutz
0
4.2k
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
260
Coding as Prompting Since 2025
ragingwind
0
550
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
240
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
40
2.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
sira's awesome portfolio website redesign presentation
elsirapls
0
200
The World Runs on Bad Software
bkeepers
PRO
72
12k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
440
A better future with KSS
kneath
240
18k
Side Projects
sachag
455
43k
Context Engineering - Making Every Token Count
addyosmani
9
780
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
240
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機器自作