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
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
250
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.4k
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
240
今さら聞けない .NET CLI
htkym
0
170
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
130
Foundation Models frameworkで画像分析
ryodeveloper
1
380
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
460
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
290
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
130
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
620
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
570
Featured
See All Featured
Paper Plane
katiecoart
PRO
2
52k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
How to make the Groovebox
asonas
2
2.3k
The SEO identity crisis: Don't let AI make you average
varn
0
520
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Facilitating Awesome Meetings
lara
57
7k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
190
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Discover your Explorer Soul
emna__ayadi
2
1.2k
Building an army of robots
kneath
306
46k
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をインクリするとハードウェアが検知して送信 処理を始める.