Skip to content
oraccha edited this page Jan 14, 2013 · 1 revision

Network Interface Card

ここでは断りがなければ EtherNet (IEEE802.3).

  • FastEthernet (IEEE802.3u)

  • ./GbE

  • ./10GbE

  • 無線LAN (IEEE802.11)

  • [http://www.bi.a.u-tokyo.ac.jp/~uaa/gomitext/2001/20010807.html ネットワークコントローラ雑考] . 内容は多少古いかもしれないが,非常に参考になる.

  • [http://pc.2ch.net/test/read.cgi/network/996829229/ ★LANカードのチップについて語る★] (2ちゃんねる)

  • [http://www.scyld.com/network/eepro100.html Linux and the Intel PCI EtherExpress Pro 100 series] ([http://www.scyld.com/network/ Linux Network Drivers]) . i82557/8/9 (YLab:SSS/don)../e100

    • [http://www.intel.com/design/network/products/lan/controllers/82558.htm 82558 32-bit PCI Bus LAN Controller] (Intel)
    • [http://www.scyld.com/pipermail/eepro100/ eepro100 ML アーカイブ]
  • [http://www.scyld.com/network/tulip.html Linux and the DEC "Tulip" Chip] (Linux Network Drivers) . DEC 21140A,いわゆる ./Tulip.今は Intel の傘下.

    • [http://www.intel.com/design/network/products/lan/controllers/21143.htm 21143 PCI/CardBus LAN Controller] (Intel)
    • 2104x は 10Base-T.2114x は 10/100Base-T.
  • RealTek 8139 . RealTek の 100Base-T コントローラ.

  • RealTek 8019AS (PICNIC) . いわゆる NE2000 互換(ISA).


NIC と Scatter/Gather DMA

  • どのくらいの NIC が対応しているのか? 少なくとも 21140A は対応している.おそらく最近の NIC はどれも対応してそうな気はするが.
  • Linux ではソケットのバッファなどには struct iovec を使っているが,この辺が対応するのかな?
  • 例えば,sendfilev を使って,RTP ヘッダはユーザランドからコピー,ペイロードはページキャッシュをゼロコピーというのができないか?

ちょっと調査.

DMA 転送するときに,バッファはロングワードアライメントが必要なのか.

  • 必要ならコピーする必要がある.これはちょっと困る.
  • NIC によっては必要みたい../Tulip は問題なし.

ヘッダとペイロード部を gather DMA で一つのパケットとして送信できるか.

  • Tulip で skbuff の内容を二つのディスクリプタに分けて送信してみる.とりあえず問題なさそう.

Tulip のマニュアルを眺めてみたところ,

  • デスクリプタは最大二つのデータバッファを持つことができる.一つのデータバッファには1フレーム,もしくはフレームの一部を格納できる.

  • データバッファはアライメントの制限がない.

  • デスクリプタリストのベースアドレスを格納する CSR3/4 の値はロングワードアライメントが必要である.

  • デスクリプタリストは物理メモリ上に用意する.

  • デスクリプタ数に上限はあるのか?

    • tulip.h には次のようにある. {{{ Making the Tx ring too large decreases the effectiveness of channel bonding and packet priority. There are no ill effects from too-large receive rings. }}}

NIC と割込みのオーバヘッド

  • [http://info.iet.unipi.it/~luigi/polling/ Device Polling support for FreeBSD] (FreeBSD)

複数の NIC を束ねて使う

  • Trunking,Ethercannel とか呼ばれるが,Linux では Bonding.
  • 802.3ad で規格化されている?
Clone this wiki locally