RHEL/CentOSでネットワークインタフェースの起動が遅い原因を調べてみた
RHELやCentOSのネットワークインタフェースって静的IPアドレスを付与するときでもやたら起動が遅くないですか。
ネットワークインタフェースが2,3個程度なら大した問題ではないのですが、例えばVLANをたくさん食わせている場合などはやたら遅くて話にならんレベルです。
Bringing up loopback interface: [ OK ] ←loは早い Bringing up interface eth0: [ OK ] ←遅い Bringing up interface eth0.1: [ OK ] ←VLANも遅い Bringing up interface eth0.2: [ OK ] ←遅いよ Bringing up interface eth0.3: [ OK ] ←遅いってば
ifupコマンドでかかる時間を確認したところ、1ネットワークインタフェースあたり約5秒。ネットワークインタフェースが20個あるとそれだけで1分40秒かかる計算。まじかよ。
# ifdown eth0 # time ifup eth0 real 0m5.029s user 0m0.285s sys 0m0.610s
ネットワークインタフェースの起動スクリプトを追ったところ、/etc/sysconfig/network-scripts/ifup-ethの以下の部分が原因でした。CentOS6は253行から257行あたり。CentOS5は267行から270行あたり。
# vi /etc/sysconfig/network-scripts/ifup-eth ... [ "${REALDEVICE}" != "lo" ] && \ if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then net_log $"Error, some other host already uses address ${ipaddr[$idx]}." exit 1 fi
このarpingで約4秒待機してる!!なんじゃこりゃ。
arpingについて
arpingはARPリクエストを送信するコマンドで、-Dオプションは重複チェックを行うオプション。
$ man arping ARPING(8) System Manager’s Manual: iputils ARPING(8) NAME arping - send ARP REQUEST to a neighbour host SYNOPSIS arping [ -AbDfhqUV] [ -c count] [ -w deadline] [ -s source] -I inter- face destination DESCRIPTION Ping destination on device interface by ARP packets, using source address source. OPTIONS (中略) -D Duplicate address detection mode (DAD). See RFC2131, 4.4.1. Returns 0, if DAD succeeded i.e. no replies are received
設定しようとしたIPアドレスが既に使われているかを調べているわけですが、有線LANで接続されたサーバ間であればチェックは1回だけ十分だと思います。
@@ -251,7 +251,7 @@ if ! LC_ALL=C ip addr ls ${REALDEVICE} | LC_ALL=C grep -q "${ipaddr[$idx]}/${prefix[$idx]}" ; then [ "${REALDEVICE}" != "lo" ] && \ - if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then + if ! /sbin/arping -q -c 1 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then net_log $"Error, some other host already uses address ${ipaddr[$idx]}." exit 1 fi
これで、2秒弱にまで短縮されました。やったね。
# time ifup eth0 real 0m1.810s user 0m0.172s sys 0m0.487s
または、IPアドレスが重複しないことが保証できるのであれば、該当部分をコメントにしてしまっても良いと思います。その場合は1秒を切ります。