オンボード+外部NICのbonding

Cent OS 5.2で,大量のNICを束ねるbondingにチャレンジしてみました.
結果は,こんな感じです.

bond0     Link encap:Ethernet  HWaddr 00:21:9B:FB:7A:32
          inet addr:192.168.1.83  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:415873917 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1283992487 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1705754810 (1.5 GiB)  TX bytes:511088761 (487.4 MiB)

eth0      Link encap:Ethernet  HWaddr 00:21:9B:FB:7A:32
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:298777 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256812343 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:66543746 (63.4 MiB)  TX bytes:3554664647 (3.3 GiB)
          Interrupt:16

eth1      Link encap:Ethernet  HWaddr 00:21:9B:FB:7A:32
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:132580396 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256795072 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:961043296 (916.5 MiB)  TX bytes:3537142636 (3.2 GiB)
          Interrupt:17

eth2      Link encap:Ethernet  HWaddr 00:21:9B:FB:7A:32
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:84132670 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256795705 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:527203464 (502.7 MiB)  TX bytes:3554105959 (3.3 GiB)
          Base address:0xdcc0 Memory:dfc80000-dfca0000

eth3      Link encap:Ethernet  HWaddr 00:21:9B:FB:7A:32
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:198862067 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256797662 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:150963722 (143.9 MiB)  TX bytes:3529029884 (3.2 GiB)
          Base address:0xdce0 Memory:dfcc0000-dfce0000

eth4      Link encap:Ethernet  HWaddr 00:21:9B:FB:7A:32
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:256791705 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:582 (582.0 b)  TX bytes:3516014819 (3.2 GiB)
          Base address:0xece0 Memory:dfbc0000-dfbe0000

受信・送信を見るとまだまだチューニングの余地はありそうですが,とにかくイーサネットのポートを5個束ねることはできました.
5個のうち,eth0とeth1のドライバは普通にtg3なので,何の問題もありませんでした.ところが,拡張ボードとして付けた追加NICについて,eth2とeth3はe1000e,eth4はe1000なので,ちょっとだけトラブりました.bondドライバが,ギガポートだと認識してくれず,100Mbpsポートと勝手に設定しちゃうのです.

kernel: bonding: bond0: Warning: failed to get speed and duplex from eth4, assumed to be 100Mb/sec and Full.

グーグル先生に聞くと対処方法はすぐに分かりまして,例えば上記のeth4に関しては,/etc/sysconfig/network-scripts/ifcfg-eth4の記述を次のように変更することで対処できました.

DEVICE=eth4
ONBOOT=yes
HWADDR=00:15:17:86:ca:1f
MASTER=bond0
SLAVE=yes

DEVICE=eth4
ONBOOT=yes
HWADDR=00:15:17:86:ca:1f
MASTER=bond0
SLAVE=yes
ETHTOOL_OPTS="autoneg off speed 1000 duplex full"

なお,この設定をする前に,一度モジュールをアンロードする方が良いようです.

# rmmod tg3
# rmmod e1000
# rmmod e1000e
# rmmod bonding

ベンチマークは,またいずれ.えへ.