[FYI] ネットワークのリンク速度

完全自分用メモ。

LinuxやFreeBSD等において、思ったほどパフォーマンスが出ないといった事があります。
大体は設定ミスとかそんなもんなんですが、こんなところにも落とし穴があったりします。
それは、ネットワークのリンクが正常に確立されているか?という事です。
殆どのユーザーがオートネゴシエーションで運用されていると思いますが、実はこれ意外と落とし穴で正常なリンクが確立されていない事があります。

例えば、100Base-TXでリンクしたいのに10Base-TXで接続されていたり、Full-Duplex(全二重)のつもりが、Half-Duplex(半二重)になっていたりする事が稀にあります。
全二重とか半二重なんてモデム時代の人なら判るかも知れませんが、普通気が付きませんよね。
(ymodem-gとかMLINKの話なんて殆どの方が知らないでしょう)
ま、それはいいとしてリンクが正常に行われない事があるという事も知っておいた方がいいと思います。
Autonegotiationって、機器との相性次第で不安定になる事もあります。

さて、その調整方法ですが、FreeBSDとLinuxで違うので2通り説明します。
Linuxはethtoolを利用する方法なので、入っていない場合にはrpmで入れてください。
CentOS4には普通に入っているので、RHEL4にもあると思います。


- Linuxの場合 -
# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: Not reported
Advertised auto-negotiation: YES 【ここを確認!】
Speed: 100Mb/s 【ここを確認!】
Duplex: Half 【ここを確認!】
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: umbg
Wake-on: g
Current message level: 0x00000007 (7)
Link detected: yes

これをethtoolで編集してあげます。
ちなみに、設定時にはリンクが切断される可能性が高いので、
冗長性のあるサーバ以外では安易に実行しないでください。
設定のキモはAutonegotiationを切る事です。

# ethtool -s eth0 autoneg off speed 100 duplex full
# ethtool eth0

Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: Not reported
Advertised auto-negotiation: No 【ここを確認!】
Speed: 100Mb/s 【ここを確認!】
Duplex: Full 【ここを確認!】
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: umbg
Wake-on: g
Current message level: 0x00000007 (7)
Link detected: yes

これでFullになりました。
後は再起動時の話ですが、これはifcfg-eth* に記載します。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.2
NETMASK=255.255.255.0
ETHTOOL_OPTS="autoneg off speed 100 duplex full"   【ここを追記】

後は保存してあげれば再起動時にも設定が反映されます。

Linuxは以上です。
freebsdは以下の様に設定します。


- freebsdの場合 -
# ifconfig
em0: flags=8843<up ,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<rxcsum ,TXCSUM>
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe00::111:111:1111:1111%em0 prefixlen 64 scopeid 0x1
ether 00:00:00:00:00:00
media: Ethernet 100baseTX <Half-duplex>   【ここを確認】
status: active
lo0: flags=8049<up ,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
ppp0: flags=8010<pointopoint ,MULTICAST> mtu 1500
sl0: flags=c010<pointopoint ,LINK2,MULTICAST> mtu 552
faith0: flags=8002<broadcast ,MULTICAST> mtu 1500

# ifconfig em0 media 100baseTX mediaopt full-duplex
# ifconfig
em0: flags=8843<up ,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<rxcsum ,TXCSUM>
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe00::111:111:1111:1111%em0 prefixlen 64 scopeid 0x1
ether 00:00:00:00:00:00
media: Ethernet 100baseTX <full-duplex>   【ここを確認】
status: active
lo0: flags=8049<up ,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
ppp0: flags=8010<pointopoint ,MULTICAST> mtu 1500
sl0: flags=c010<pointopoint ,LINK2,MULTICAST> mtu 552
faith0: flags=8002<broadcast ,MULTICAST> mtu 1500

ifconfig の オプションですが、ここではNICがem0なので、em0と指定しています。
実際は各機種によって変更になるので注意が必要です。
後は再起動時の話ですが、これはrc.conf に記載します。

# vi /etc/rc.conf
ifconfig_em0="inet 192.168.0.2 netmask 255.255.255.0 media 100baseTX mediaopt full-duplex"

上記の様に追記してあげてください。
これで再起動時にも設定が反映されます。

以上です。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください