NIC - oraccha/omicron GitHub Wiki
Network Interface Card
ここでは断りがなければ EtherNet (IEEE802.3).
-
FastEthernet (IEEE802.3u)
-
無線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 コントローラ.
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 で規格化されている?