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
IntelNIC 送受信を学ぶ
Search
khwarizmi
June 08, 2019
Programming
1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
IntelNIC 送受信を学ぶ
khwarizmi
June 08, 2019
More Decks by khwarizmi
See All by khwarizmi
NICのデバドラ開発
khwarizmi
0
210
ハードウェア乱数を用いた謝辞代表者の決定
khwarizmi
0
130
僕はDPDKをやっている人ではありません(XDP・netmap入門)
khwarizmi
1
880
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
280
klab インターン成果物発表
khwarizmi
0
370
Z4「高速なFW/IDSの実装」
khwarizmi
0
210
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
430
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
350
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Creating Composable Callables in Contemporary C++
rollbear
0
190
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
240
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
410
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
1.8k
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
360
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.7k
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.9k
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.5k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
230
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Unsuck your backbone
ammeep
672
58k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Transcript
IntelNIC の送受信を学ぶ 河原颯太(@khwarizmi6514) @6/8CpawLT
自己紹介 - 河原颯太(かわはらそうた) @khwarizmi6514 - 法政大学大学院応用情報工学専攻 1年 金井(ネットワークセキュリティ)研究室所 属 -
小学5年から野球を初めて高校3年までやっていた. - 春日部高校出身です! (これを言うといろんなところで先輩後輩が釣れることに最近 気が付いた) - パソコンとは無縁の生活だったが, 大学入学時, 気が付いたらパソコンをやらなけ ればいけなくなっていた. - 一緒に研究をしてくれる後輩募集中 (一人で研究をしていて寂しい)
最近やってること - NICのデバドラ開発 - NICのハードウェア機能活用による性能比較調査 - Linuxネットワークパフォーマンス調査 - VMネットワークパケットIO *最近やりたいこと*
- FreeBSDで性能調査(ネットワークスタック参照したりしときながら触ったことがな い) - FPGA(購入してLEDチカチカまでしてそのままタンスの奥にいる) - ネットワークがまじわからん
今日の内容 82574Lのデータシートの主に,7.1.8 Receive Descriptor Queue Structure と 7.2.4 Transmit Descriptor
Ring Structure を参照し,デスクリプタリング(キュー)から送受信 の仕組みを学びます. リンクは↓ https://www.intel.com/content/dam/doc/datasheet/82574l-gbe-controller-datasheet.pdf 本スライドで出てくる図は全て上記リンクからの出典です. 82574L datasheetとかググれば出てくる.
受信
Receive Descripter Ring - NICはHeadをインクリしてデスクリプ タを追加. - ソフトウェアが参照すべきポインタは Tailが保持. -
Tail ~ Headの間(図中の影付き部 分)がまだソフトウェアに処理されて いない部分. - HeadとTailが等しい場合は受信 キューが空.
レジスタ群 - RDBA(Receive Descriptor Base Address register) ホストメモリ上でのデスクリプタリングの開始位置 offset:↓ -
RDBAL(Receive Descriptor Base Address LOW): 0x2800 - RDBAH(Receive Descriptor Base Address HIGH): 0x2804 - RDLEN(Receive Descriptor Length register) リングのメモリの長さ offset:0x2808 - RDH(Receive Descriptor Head register) NICによって処理されるべきデスクリプタの head offset:0x2810 - RDT(Receive Descriptor Tail register) NICによって処理されるべきデスクリプタの tail offset:0x2818
デスクリプタのフィールド Legacy Rx Descripter
デスクリプタのフィールド Extended Descripter
デスクリプタのフィールド Extended Descripter
パケット受信 受信は割り込みでカーネルに知らされ,デバイスドライバにハンドルされている受信処 理に基づいて処理がなされる. 以下では受信の割り込みについて述べる.
delay timer - 新しいパケット受信時(メモリにデータが渡された時)にタイマが初期化される. - 新しいパケットが受信されず,タイマーが切れる前にホストメモリに転送されない場 合,タイマーはカウントダウンして割り込みをトリガーする. - 割り込みが生成されると初期化され,新たなパケットを受信するまで無効. -
後述する absolute timer の expiration や small packet-detection による割り込み でも初期化される
absolute timer - 新しいパケット受信時(メモリにデータが渡された時)にタイマが初期化される. - 割り込みが生成されると初期化され,新たなパケットを受信するまで無効. - expiration や small
packet-detection による割り込みでも初期化される.
delay timer と absolute timer
delay timer と absolute timer
Small Receive Packet Detect - スモールパケット検出が有効になっていて,指定サイズ未満のパケットがホストメモ リに転送された時に割り込みを発生させる. - この割り込みも受信タイマ割り込みとして扱われる.
ACK frame Detection ? - ACKフレームを受信すると割り込みを起こすやつがあるらしい. - パケット分割に設定されているか,拡張ステータス機能が有効になっている場合に のみアクティブになる.
Receive Descriptor Minimum Threshold - 受信デスクリプタの空き数が最小(全体の割合として測定される?)より少なくなった 時に割り込みを発生させる. - デスクリプタのアンダーランを防ぐ. -
この割り込みは,新しいパケットが検出されるまで,アクティブな遅延受信割り込み タイマー全体を停止して再初期化する.
Receiver FIFO Overrun - FIFOをオーバーランするパケットはドロップされる. - この割り込みはアクティブな遅延受信割り込み全体を停止して再初期化します.
送信
Transmit Descriptor Ring - 基本的には受信と変わらない.レジスタも 4種類 - HeadとTailの使い方に注意する. - HeadはNICが次に送信すべきデス
クリプタ. - Tailはソフトウェアが次に追加する デスクリプタ. - Head ~ Tail が送信待ちのデスクリ プタ. - (Headはハードウェア,Tailはソフト ウェアが扱うものと分けると同じと 解釈できそう)
レジスタ群 - TDBA(Transmit Descriptor Base Address register) ホストメモリ上でのデスクリプタリングの開始位置 offset:↓ -
TDBAL(Transmit Descriptor Base Address LOW): 0x3800 - TDBAH(Transmit Descriptor Base Address HIGH): 0x3804 - TDLEN(Transmit Descriptor Length register) リングのメモリの長さ offset:0x3808 - TDH(Transmit Descriptor Head register) NICによって処理されるべきデスクリプタの head offset:0x3810 - TDT(Transmit Descriptor Tail register) NICによって処理されるべきデスクリプタの tail offset:0x3818
デスクリプタのフィールド
パケット送信 送信は丁寧に手順が書かれています.
ソフトウェアがやること 1. デスクリプタに buffer address と length を書き込む. 2. Tailポインタをインクリしてハードウェアに転送の準備が整ったことを知らせる.
3. (パケットの内容がハードウェアに渡った後,バッファの解放のためにソフトウェアに 通知が行く場合がある.)
まとめ - デスクリプタリングは4種類のレジスタをおさえる. - 受信は割り込み駆動.Tailを辿ってパケットを受信する. - 送信はデスクリプタを更新した後,Tailをインクリするとハードウェアが検知して送信 処理を始める.