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
910
ネットワーク性能調査ちょっとやってみる
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
Event is what happens
moro
2
670
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
Workers Cache を知る
syumai
0
360
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
990
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
780
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
150
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
150
残高管理から台帳サービスへの進化
artoy
1
200
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
110
Agents on Rails - Rails at Scale 2026
irinanazarova
0
540
Featured
See All Featured
Docker and Python
trallard
47
4.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Designing for humans not robots
tammielis
254
26k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
GraphQLとの向き合い方2022年版
quramy
50
15k
What's in a price? How to price your products and services
michaelherold
247
13k
Raft: Consensus for Rubyists
vanstee
142
7.8k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Side Projects
sachag
456
43k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
430
Agile that works and the tools we love
rasmusluckow
331
22k
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をインクリするとハードウェアが検知して送信 処理を始める.