CentOS에 포함된 기본 e1000e 드라이버 버그문제로 인해,
CentOS 6.2 kernel 2.6.32-220.el6 기반 시스템에서 Intel 82574L NiC에서 문제가 발생하는 경우가 있다.
본인은 Supermicro X9SCL-F 메인보드 기반 시스템 운영 중 내장형 NIC에서 문제를 경험해 봤다.
-> 해당 메인보드 내장형 NIC는 각각 82574L(eth1으로 잡힘)과 82579ML(eth0으로 잡힘)으로 다른 칩셋의 NIC가 달려있다.

문제 발생시 Link는 Speed: 1000Mb/s로 되어 있으나 통신이 안된다. 그리고 아래처럼 errors와 dropped, frame 패킷이 발생한게 보인다.
eth1     Link encap:Ethernet  HWaddr 00:25:90:71:A6:08
          inet addr:192.168.100.100  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::225:90ff:fe71:708/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:71808126 errors:162555922181160 dropped:27092653696860 overruns:0 frame:108370614787440
          TX packets:21267266 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:25952462528 (24.1 GiB)  TX bytes:20341982992 (18.9 GiB)
          Interrupt:16 Memory:fb900000-fb920000

문제 발생 시 Link Speed: 100Mb/s 로 붙은 내장형의 또 다른 NIC는 문제가 발생하지 않고 패킷이 이상없이 흐른다.
--> 이것은 내장형 NIC가 한개는 82579ML 이라서 그런거 였다.
해당 문제는 82574L NIC에 Link Speed: 100Mb/s 에서도 발생을 하고, 실제 문제를 경험했다.

해결방법 :
버그질라 사이트를 참조하니 2.6.32-279.11.1 까지도 해결이 안되었다고 한다.
What a timing! A kernel update released upstream ( 2.6.32-279.11.1.el6 ). The e1000e patch is not there yet.
따라서 커널 업데이트를 하여 2.6.32-313.el6 이상의 커널로 업데이트를 한다.
다른 어플리케이션 등의 의존성 때문에 커널을 올리기 어렵다면 인텔 사이트에서 최신 드라이버 소스를 다운받아 컴파일해서 드라이버를 새로 만든 후 문제를 해결해 본다. -> 나중에 알게된 사실이지만, 드라이버만 바꿔서는 해결이 안된다.

아래는 문제 발생시 커널 메시지이다.

------------[ cut here ]------------
WARNING: at net/sched/sch_generic.c:261 dev_watchdog+0x26d/0x280() (Not tainted)
Hardware name: X9SCL/X9SCM
NETDEV WATCHDOG: eth1 (e1000e): transmit queue 0 timed out
Modules linked in: mpt2sas scsi_transport_sas raid_class mptctl mptbase xt_TCPMSS iptable_filter ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack nf_defrag_ipv4 ip_tables nfsd lockd nfs_acl auth_rpcgss sunrpc xfs exportfs iTCO_wdt iTCO_vendor_support serio_raw i2c_i801 i2c_core ses enclosure sg ext4 mbcache jbd2 sd_mod crc_t10dif megaraid_sas ahci e1000e dm_mirror dm_region_hash dm_log dm_mod be2iscsi bnx2i cnic uio ipv6 cxgb4i cxgb4 cxgb3i libcxgbi cxgb3 mdio libiscsi_tcp qla4xxx iscsi_boot_sysfs libiscsi scsi_transport_iscsi [last unloaded: scsi_wait_scan]
Pid: 0, comm: swapper Not tainted 2.6.32-220.el6.x86_64 #1
Call Trace:
 <IRQ>  [<ffffffff81069b77>] ? warn_slowpath_common+0x87/0xc0
 [<ffffffff8101bd86>] ? intel_pmu_enable_all+0xa6/0x150
 [<ffffffff81069c66>] ? warn_slowpath_fmt+0x46/0x50
 [<ffffffff8144a54d>] ? dev_watchdog+0x26d/0x280
 [<ffffffff8144a2e0>] ? dev_watchdog+0x0/0x280
 [<ffffffff8107c957>] ? run_timer_softirq+0x197/0x340
 [<ffffffff810a0b70>] ? tick_sched_timer+0x0/0xc0
 [<ffffffff8102ad2d>] ? lapic_next_event+0x1d/0x30
 [<ffffffff81072161>] ? __do_softirq+0xc1/0x1d0
 [<ffffffff81095770>] ? hrtimer_interrupt+0x140/0x250
 [<ffffffff8100c24c>] ? call_softirq+0x1c/0x30
 [<ffffffff8100de85>] ? do_softirq+0x65/0xa0
 [<ffffffff81071f45>] ? irq_exit+0x85/0x90
 [<ffffffff814f4de0>] ? smp_apic_timer_interrupt+0x70/0x9b
 [<ffffffff8100bc13>] ? apic_timer_interrupt+0x13/0x20
 <EOI>  [<ffffffff812c4a5e>] ? intel_idle+0xde/0x170
 [<ffffffff812c4a41>] ? intel_idle+0xc1/0x170
 [<ffffffff813f9f47>] ? cpuidle_idle_call+0xa7/0x140
 [<ffffffff81009e06>] ? cpu_idle+0xb6/0x110
 [<ffffffff814d411a>] ? rest_init+0x7a/0x80
 [<ffffffff81c1ff76>] ? start_kernel+0x424/0x430
 [<ffffffff81c1f33a>] ? x86_64_start_reservations+0x125/0x129
 [<ffffffff81c1f438>] ? x86_64_start_kernel+0xfa/0x109
---[ end trace 90b0cecde294b586 ]---
e1000e 0000:04:00.0: eth1: Reset adapter
e1000e 0000:04:00.0: eth1: Error reading PHY register
e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
e1000e 0000:04:00.0: eth1: Reset adapter
e1000e 0000:04:00.0: eth1: Error reading PHY register
e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
e1000e 0000:04:00.0: eth1: Reset adapter
e1000e 0000:04:00.0: eth1: Error reading PHY register
e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
e1000e 0000:04:00.0: eth1: Reset adapter
e1000e 0000:04:00.0: eth1: Error reading PHY register
e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
e1000e 0000:04:00.0: eth1: Reset adapter
e1000e 0000:04:00.0: eth1: Error reading PHY register
e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
e1000e 0000:04:00.0: eth1: Reset adapter
e1000e 0000:04:00.0: eth1: Error reading PHY register
e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
e1000e 0000:04:00.0: eth1: Reset adapter
e1000e 0000:04:00.0: eth1: Error reading PHY register
e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx

* 2013-05-20 추가 내용
확인 결과 The patches are in the 6.4 kernel(2.6.32-358.el6)에서 패치가 되었다고 한다. 정확히 말하면 2.6.32-313.el6에서 패치됨.
인텔 사이트에서 받은 82574L 리눅스 드라이버(2013-03-11 날짜)로 e1000e 드라이버를 바꿨는데도 같은 문제가 발생하였다.
아래는 임시 해결 방법인데, 근본적으로 해결하려면 2.6.32-358.el6 커널로 업데이트를 해야 한다.
http://www.doxer.org/learn-linux/resolved-intel-e1000e-driver-bug-on-82574l-ethernet-controller-causing-network-blipping/

아래는 Centos 버그 리포트 사이트 내용
http://bugs.centos.org/view.php?id=6018

아래는 해당 버그를 [2.6.32-313.el6] 커널에서 수정했다고 표기되어있다. (82574 로 찾기를 하면 볼 수 있음)
https://oss.oracle.com/pipermail/el-errata/2013-February/003297.html
해당 문제는 ASPM과 negotiation 관련된 것으로 인해 발생됨을 위 사이트에서 확인 가능하다.

또한 해당 문제는 CentOS 6.0 ~ 6.3 (커널기준)에서만 발생되는 문제로 판단된다.

CentOS e1000e 드라이버 문제

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다