CentOS6.2を使っていて突然ネットワークがダウンした話

CentOS 6.2 + e1000eでうまくいかなかった話
ほぼ↑に記載ある通りなんですが、同様の事象が発生した為、メモしておきます。

OS

OS CentOS 6.2
カーネル 2.6.32-220.el6.x86_64


事象

上記OS環境でbonding(active-backup)環境を組んでいたところ、
突然、backup側のeth1がdownしました。
downするまではしばらく問題なく使えているのですが、急にダウンしてしまいます。
active側のeth0は問題ありません。

インターフェース名 MACアドレス bonding設定 事象
eth0 00:25:90:xx:xx:xa avtive 問題なし
eth1 00:25:90:xx:xx:xb backup 突然ダウン



突然ダウンするという事象が発生するとdmesgに

bonding: bond0: link status definitely down for interface eth1, disabling it

こんな表記が出ます。


bondig状態を確認する為、

cat /proc/net/bonding/bond0

を見ると、↓のようにeth1がdown状態になっているのが分かります。

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
ARP Polling Interval (ms): 1000
ARP IP target/s (n.n.n.n form): 10.0.0.254

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:25:90:xx:xx:xa
Slave queue ID: 0

Slave Interface: eth1
MII Status: down
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:25:90:xx:xx:xb
Slave queue ID: 0


/var/log/messagesには

Sep 11 00:00:01 test kernel: e1000e 0000:05:00.0: eth1: Error reading PHY register

こんなメッセージも出ています。

手掛かり

eth1が突然ダウンするのも当然不可解だったのですが、事象がeth1だけで発生してeth0は問題ないのが疑問でした。
が、どうもマザーボードに載っているネットワークコントローラのチップがeth0とeth1とで別という情報を同僚より入手。


マジすかと調べてみると、確かに違ってました。

上記の表にチップ名を追記してまとめてみると以下のようになりました。

インターフェース名 MACアドレス bonding設定 事象 ネットワークコントローラチップ名
eth0 00:25:90:xx:xx:xa avtive 問題なし 82579LM
eth1 00:25:90:xx:xx:xb backup 突然ダウン 82574L


調べ方

lspciでPCIデバイス情報を確認

[root@test ~]# lspci -tvv
-[0000:00]-+-00.0  Intel Corporation Xeon E3-1200 Processor Family DRAM Controller
           +-01.0-[01]--
           +-01.1-[02]--
           +-06.0-[03]--
           +-19.0  Intel Corporation 82579LM Gigabit Network Connection
           +-1a.0  Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2
           +-1c.0-[04]--
           +-1c.4-[05]----00.0  Intel Corporation 82574L Gigabit Network Connection
           +-1d.0  Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1
           +-1e.0-[06]----03.0  Matrox Graphics, Inc. MGA G200eW WPCM450
           +-1f.0  Intel Corporation C204 Chipset Family LPC Controller
           +-1f.2  Intel Corporation 6 Series/C200 Series Chipset Family 6 port SATA AHCI Controller
           \-1f.3  Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller


dmesgからeth0,eth1のioポートアドレスを確認

[root@test ~]# dmesg | grep -i eth
e1000e 0000:00:19.0: eth0: (PCI Express:2.5GT/s:Width x1) 00:25:90:xx:xx:xa
e1000e 0000:00:19.0: eth0: Intel(R) PRO/1000 Network Connection
e1000e 0000:00:19.0: eth0: MAC: 10, PHY: 11, PBA No: FFFFFF-0FF
e1000e 0000:05:00.0: eth1: (PCI Express:2.5GT/s:Width x1) 00:25:90:xx:xx:xb
e1000e 0000:05:00.0: eth1: Intel(R) PRO/1000 Network Connection
e1000e 0000:05:00.0: eth1: MAC: 3, PHY: 8, PBA No: FFFFFF-0FF


マザーボードの型番も確認

[root@test ~]# dmidecode -s baseboard-product-name
X9SCL/X9SCM

型番からオンラインマニュアルを落としてきてチップ情報等を確認。

対策

CentOS 6.2 + e1000eでうまくいかなかった話
こちらを参考にさせて頂きました。


/etc/grub.conf

kernelパラメータに

pcie_aspm=off

を追加して以下のようにしました。

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=3e1127e2-c328-4487-b49c-d1e95e9adf39 console=tty0 console=ttyS1,115200n8 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_NO_LVM rd_NO_DM pcie_aspm=off

これでOS再起動。

確認

再起動後、

dmesg | grep -i pcie

とコマンドを打ってみると、
PCIe ASPM is disabled
と表示されるのが分かります。

再起動後はeth1はダウンすることなく、動作し続けています。

原因

最初はbondingの設定に原因があるのかと思ってましたが、どうもそうではなく、ASPM(Active-State Power Management)が、この問題に関係している模様。

bondingのbackup側のインターフェースが基本使われないからASPM機能が働いてダウンに繋がったのかな?とも思いましたが、
http://bugs.centos.org/view.php?id=5614
ここを見ると同一のチップで同様の事象の報告が上がってました。


http://docs.fedoraproject.org/ja-JP/Fedora/15/html/Power_Management_Guide/ASPM.html
ここ曰く、

pcie_aspm=force はシステムが反応しない原因になる可能性があります。
pcie_aspm=force がセットされると、ASPM をサポートしていないハードウェアではシステムが反応しない原因になる 可能性があります。
pcie_aspm=force をセットする前にシステム上の全ての PCIe ハードウェアが ASPM を サポートすることを確認して下さい。


『radserv ZR1 モデル』という製品でも同様の対処をしていました。
http://online.atworks.co.jp/product/server/1u/radserv_zr1/index.html

※オンボード Intel 82574L LAN × 2
■CentOS 6.2 x86_64 (注*2)
(注*2) OSインストール後に「pcie_aspm=off」をカーネルパラメータに追記する必要があります。