【渠道服务大比武】RH2285由于RedHat_CentOS与Broadcom 5709兼容性问题导致业务网络中断

发布时间:  2014-09-04 浏览次数:  156 下载次数:  0
问题描述
RH2285部分机器在使用过程中不定期出现eth0网口不通导致业务中断,重启OS后可以恢复正常。
(1)机器使用的开源CentOS操作系统对网卡存在兼容性问题。通过现场反馈回来的信息了解到,现场使用的操作系统如下:CentOS 5.4 64位操作系统,内核版本为2.6.18-164.el5。
Linux version2.6.18-164.el5(mockbuild@builder10.centos.org)(gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Thu Sep 3 03:28:30 EDT 2009。
CentOS是RedHat OS的免费编译版本,和RedHat OS基本等同。经过和RedHat操作系统厂商以及网卡厂商的多次确认,了解到RedHat OS在5.3及以上版本在对Broadcom 5709网卡的驱动bnx2支持上存在一个兼容性bug----在某种特殊场合当业务数据流量过大时(即网口负荷过大时),小概率会导致网卡不通导致业务中断,参见RedHat厂商网站对该问题的描述(如图1-1所示),具体链接为http://kbase.redhat.com/faq/docs/DOC-26837(因链接需要注册Redhat账号,也可以参考附录“Redhat官网对Broadcom5709驱动兼容性bug描述”)。

图1-1 RHEL5.3与BCM5709不兼容issue


告警信息
RH2285部分机器在使用过程中不定期出现eth0网口不通导致业务中断
处理过程
关闭BIOS的P状态、C状态和bnx2的MSI功能,详细步骤如下。
1、关闭BIOS的P状态和C状态(操作步骤如下)。
(1)在系统POST(Power-on Self Test)阶段按“Delete”进入BIOS;
(2)选择“Advanced”→“CPU Configuration”,在CPU Configuration界面最下面将“Intel (R)SpeedStep(tm) tech”(即P状态)和“Intel (R) C-STATE tech”(即C状态)均设置为“Disabled” ,修改之后按下F10保存退出。
2、禁用Broadcom 5709网卡驱动bnx2的MSI功能(操作系统为CentOS 5.4 64位系统,kernel版本为2.6.18-164.el5),操作步骤如下。
(1)登录服务器操作系统打开终端,输入“vi /etc/modprobe.conf”进入文本编辑模式。
(2)在文本结尾处添加一行“options bnx2 disable_msi=1”,保存退出并重启系统。
(3)系统重启后在终端输入“grep –i eth /proc/interrupts”,通过返回结果查看MSI是否已被禁掉(MSI禁用后将不会显示PCI-MSI-X的字样)
根因
通过该issue描述可以看到,在kernel-2.6.18-194.3.1.el5版本以下的Redhat以及CentOS操作系统,使用Broadcom 5709网卡芯片的服务器上都会存在此问题。
MSI(Message Signalled Interrupts)是一种PCI设备使用的中断机制,多用于网卡且不适用多核;MSI-X是MSI的提升版,开启网卡驱动的MSI-X功能可以提升网络性能,但是会对OS增加负荷,OS若是无法适应网卡运行状况,无法处理数据(尤其是异常大的流量),就会出现异常状况,关闭MSI-X功能之后网卡会以网卡的普通性能(IO-APIC-level)工作,就不会使OS负荷过重,从而避免发生异常。
“Message signalled interrupts (MSI) is an optional feature that enables PCI devices to request service by writing a system-specified message to a system-specified address (PCI DWORD memory write transaction). The transaction address specifies the message destination while the transaction data specifies the message. System software is expected to initialize the message destination and message during device configuration, allocating one or more non-shared messages to each MSI capable function.”
(1)从Redhat官方给出的solution中也包括“Disable C-state in BIOS”(如图1-1中红色矩形框所示),另外从网上看到案例IBM X3652 M2和Dell R710安装Redhat5.4 64位操作系统使用默认的Broadcom5709驱动,也存在该问题,案例中提到Redhat工程师的回复为“RHEL 5.3/5.4自带的Broadcom NetXtreme II BCM5709网卡驱动有BUG,涉及到 ACPI 电源管理的问题。所以当网卡在正常工作的时候,会被ACPI误以为他闲着,从而把它给关闭掉。”
具体IBM和Dell故障信息描述请参考以下链接
http://sa.028life.com/?p=209#more-209
http://www.sealinger.com/archives/194
(2)因此需要禁用ACPI电源管理系统,即关闭C状态,为确保电源管理模块不会错误地关闭网卡,同时关闭P状态。
建议与总结
在实际项目的POC测试中,一定要做好前期兼容性测试工作,避免因为前期POC测试不过关导致后期业务系统出现宕机现象,给客户造成损失。

END