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
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
900
ネットワーク性能調査ちょっとやってみる
khwarizmi
0
290
klab インターン成果物発表
khwarizmi
0
380
Z4「高速なFW/IDSの実装」
khwarizmi
0
220
HIGHSPEED PACKET IO
khwarizmi
0
140
Other Decks in Programming
See All in Programming
Intent as Code
shoppingjaws
6
1.1k
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
320
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
150
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
560
Security issues being discussed on Web Platforms
petamoriken
0
1.3k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
140
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
2
310
Agents on Rails - Rails at Scale 2026
irinanazarova
0
280
MCP Appsでつくるチャット駆動な地図アプリ
nakamori1024
0
110
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
320
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
520
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Agile that works and the tools we love
rasmusluckow
331
22k
Statistics for Hackers
jakevdp
799
230k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
Building an army of robots
kneath
307
47k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
540
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
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をインクリするとハードウェアが検知して送信 処理を始める.