いい感じになってきますた(`・ω・´)
表の訂正。
| chip | 通信 | Jumbo Frame |
|---|---|---|
| 82530GC | ×(すぐに通信できなくなる) | o |
| 82540EM | ○ | ○ |
| 82546EB | ○ | o |
Jumbo Frame は、/kernel/drv/e1000g.conf で設定するのですが、82546EB は dual port もので、きちんと設定できていなかっただけでした。
default は、こんな感じになっています。
( 0 = mtu 1500)
--
MaxFrameSize=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
# 0 is for normal ethernet frames.
# 1 is for upto 4k size frames.
# 2 is for upto 8k size frames.
# 3 is for upto 16k size frames.
# These are maximum frame limits, not the actual ethernet frame
# size. Your actual ethernet frame size would be determined by
# protocol stack configuration (please refer to ndd command man pages)
# For Jumbo Frame Support (9k ethernet packet)
# use 3 (upto 16k size frames)
--
0 の羅列がよくわからなかったので、
--
MaxFrameSize=3;
--
としたのが、敗因でした。
これを、以下のようにすることで、e1000g0, e1000g1 両方で Jumbo Frame が設定できるようになりました。
--
MaxFrameSize=3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3;
--
たぶん、この羅列は instance number (e1000g0 とか e1000g1 の 0 や 1 の部分)と対応するかと思うのですが、これをミスっていたようです。(たぶん、MaxFrameSize=3,3; でもいけるかと。Quad なら、3,3,3,3; になるということ)
3 is for upto 16k size frames. ということで、この設定が有効になると、ifconfig e1000g0 plumb したときには mtu 16128 で interface が作成されます。
こんな感じ。
--
e1000g0: flags=1000842
inet 0.0.0.0 netmask 0
ether 0:e:c:2c:30:c
e1000g1: flags=1000802
inet 0.0.0.0 netmask 0
ether 0:3:47:ad:2a:e9
--
あとは、switch が対応している frame size に ifconfig e1000g0 mtu xxxx で調整してあげれば良いですね。
うちでは、C5e cable で直結なので mtu 16128 のままにしてあります。
この状態で netperf を使って転送速度を見ると、mtu 1500 のときとほとんど変わらず 400Mbit/sec いかないくらいです(´・ω・`)
ただし、mtu 1500 のときと比べて CPU の使用量が低くなるとこは確認しました。
