オンボード+外部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
ベンチマークは,またいずれ.えへ.