Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
IntelNIC 送受信を学ぶ
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
890
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
290
klab インターン成果物発表
khwarizmi
0
370
Z4「高速なFW/IDSの実装」
khwarizmi
0
210
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.9k
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
330
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
3
510
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
140
Deep dive into the select statement (GopherCon UK)
jespino
0
170
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
910
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
490
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
37k
業務時間外もAIに働いてもらう話
colorful12
3
10k
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
440
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
820
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
The Spectacular Lies of Maps
axbom
PRO
1
990
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
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をインクリするとハードウェアが検知して送信 処理を始める.