Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IntelNIC 送受信を学ぶ

IntelNIC 送受信を学ぶ

khwarizmi

June 08, 2019
Tweet

More Decks by khwarizmi

Other Decks in Programming

Transcript

  1. 自己紹介 - 河原颯太(かわはらそうた) @khwarizmi6514 - 法政大学大学院応用情報工学専攻 1年 金井(ネットワークセキュリティ)研究室所 属 -

    小学5年から野球を初めて高校3年までやっていた. - 春日部高校出身です! (これを言うといろんなところで先輩後輩が釣れることに最近 気が付いた) - パソコンとは無縁の生活だったが, 大学入学時, 気が付いたらパソコンをやらなけ ればいけなくなっていた. - 一緒に研究をしてくれる後輩募集中 (一人で研究をしていて寂しい)
  2. 最近やってること - NICのデバドラ開発 - NICのハードウェア機能活用による性能比較調査 - Linuxネットワークパフォーマンス調査 - VMネットワークパケットIO *最近やりたいこと*

    - FreeBSDで性能調査(ネットワークスタック参照したりしときながら触ったことがな い) - FPGA(購入してLEDチカチカまでしてそのままタンスの奥にいる) - ネットワークがまじわからん
  3. 今日の内容 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とかググれば出てくる.
  4. Receive Descripter Ring - NICはHeadをインクリしてデスクリプ タを追加. - ソフトウェアが参照すべきポインタは Tailが保持. -

    Tail ~ Headの間(図中の影付き部 分)がまだソフトウェアに処理されて いない部分. - HeadとTailが等しい場合は受信 キューが空.
  5. レジスタ群 - 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
  6. Receive Descriptor Minimum Threshold - 受信デスクリプタの空き数が最小(全体の割合として測定される?)より少なくなった 時に割り込みを発生させる. - デスクリプタのアンダーランを防ぐ. -

    この割り込みは,新しいパケットが検出されるまで,アクティブな遅延受信割り込み タイマー全体を停止して再初期化する.
  7. Transmit Descriptor Ring - 基本的には受信と変わらない.レジスタも 4種類 - HeadとTailの使い方に注意する. - HeadはNICが次に送信すべきデス

    クリプタ. - Tailはソフトウェアが次に追加する デスクリプタ. - Head ~ Tail が送信待ちのデスクリ プタ. - (Headはハードウェア,Tailはソフト ウェアが扱うものと分けると同じと 解釈できそう)
  8. レジスタ群 - 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
  9. ソフトウェアがやること 1. デスクリプタに buffer address と length を書き込む. 2. Tailポインタをインクリしてハードウェアに転送の準備が整ったことを知らせる.

    3. (パケットの内容がハードウェアに渡った後,バッファの解放のためにソフトウェアに 通知が行く場合がある.)