微信订阅号二维码

本页内容二维码:

本栏目热门内容
  • Acrobat虚拟PDF打印机执行...
  • LINKSYS交换机登录WEB界面...
  • 又一次RAID 5阵列故障记录...
  • 解决VMware vSphere ESXi ...
  • 修改CentOS发行信息以绕过...
  • Windows Server 2008 重命...
  • 解决虚拟化运行的 Windows...
  • Intel Nehalem CPU Errata...
  • 某卢瑟装机搞得一踏糊涂,...
  • 解决MySQL Cluster 备份总...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的...
  • 解决 VMWare vSphere 6 客...
  • 解决Windows Server 2008 ...
  • 本站服务器RAID 5阵列双硬...
  • 网站数据库从MySQL 5.0升...
  • 解决MariaDB使用Percona X...
  • 修改arpwatch使通知邮件主...
  • Linux 下的分区调整工具GP...
  • DELL PowerEdge 820 报CPU...
  • 程序员漫画:如何用8种不...
  • 解决很好用的多合一即时通...
  • 使用 GParted 进行虚拟机...
  • 解决Samba WINS服务的错误...
  • 解决Squid代理HTTP时在浏...
  • 用Delphi编写使用到ADO的D...
  • 网站简单改版
  • 索尼系列手提电脑备份失败...
  • Dell R900服务器 BMC firm...
  • 更多...

    Linux Kernel 日志排错分析和处置三例

    作者:Sender  来源:WaveCN.com  发布日期:2022-12-12  最后修改日期:2022-12-12

    ​一台运行CentOS 7的物理服务器,启用了logwatch服务每天分析系统日志和发送邮件给管理员。在检查邮件内容时发现系统在启动时,会产生如下的疑似错误信息:

    1WARNING:  Kernel Errors Present
    2ACPI Error: Method parse/ex ...:  2 Time(s)
    3ACPI Error: No handler for  ...:  1 Time(s)
    4ACPI Error: Region IPMI (ID ...:  1 Time(s)
    5BERT: Boot Error Record Table sup ...:  1 Time(s)
    6bnxt_en 0000:3b:00.0: bnxt_re: probe error: RoCE is not sup ...:  1 Time(s)
    7bnxt_en 0000:3b:00.1: bnxt_re: probe error: RoCE is not sup ...:  1 Time(s)
    

    服务器本身运行正常,但本着不放过的态度,于是对以上错误信息进行挖掘。

    700

    一、首先处理ACPI Error。

    由于logwatch服务给出的是摘要信息,需要检查日志的具体内容:

    [root@SERVER ~]# grep "ACPI Error" /var/log/messages
    Dec  6 23:25:01 SERVER kernel: ACPI Error: No handler for Region [SYSI] (ffff90fb6c9dd798) [IPMI] (20130517/evregion-162)
    Dec  6 23:25:01 SERVER kernel: ACPI Error: Region IPMI (ID=7) has no handler (20130517/exfldio-305)
    Dec  6 23:25:01 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._GHL] (Node ffff90fb6c97e6f0), AE_NOT_EXIST (20130517/psparse-536)
    Dec  6 23:25:01 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMC] (Node ffff90fb6c97e630), AE_NOT_EXIST (20130517/psparse-536)
    

    出错日志显示是IPMI没有ACPI驱动支持。关于ACPI:高级配置和电源管理接口以及IPMI:智能平台管理接口这里不详细解释,简单说就是用于计算机的硬件管理用途。

    这个IPMI缺ACPI驱动,属于内核模块问题。于是找到下面这个相关的内核BUG报告:

    https://bugzilla.kernel.org/show_bug.cgi?id=46741

    按里面的讨论,解决问题的办法有两种:1、简单地禁用acpi_power_meter内核模块;2、调整模块加载顺序,先加载ipmi_si,再加载acpi_power_meter。

    觉得应该是后者比较科学,但需要进行测试。测试过程也不复杂,就是先卸载acpi_power_meter和ipmi_is模块,然后按先ipmi_si再acpi_power_meter的顺序加载模块,期间检查系统日志输出,如果加载acpi_power_meter模块时还是出现原来的错误提示,那么就是不支持,只能禁用。

    于是开两个PUTTY窗口,一个窗口操作,另一个窗口执行

    [root@SERVER log]# tail -f /var/log/messages
    

    持续观察日志输出。下面的测试过程为了方便阅读,已经把日志输出内容整合到测试过程中了:

    (1)检查确认当前环境内核模块是否有加载

    [root@SERVER log]# lsmod | grep acpi
    acpi_power_meter       18104  0 
    [root@SERVER log]# lsmod | grep ipmi
    ipmi_ssif              29595  0 
    ipmi_si                59965  0 
    ipmi_devintf           17459  0 
    ipmi_msghandler        56728  3 ipmi_ssif,ipmi_devintf,ipmi_si
    

    (2)卸载模块,检查卸载结果,确认已经卸载

    [root@SERVER log]# modprobe -r acpi_power_meter
    [root@SERVER log]# modprobe -r ipmi_si
    [root@SERVER log]# lsmod | grep acpi
    [root@SERVER log]# lsmod | grep ipmi
    ipmi_ssif              29595  0 
    ipmi_devintf           17459  0 
    ipmi_msghandler        56728  2 ipmi_ssif,ipmi_devintf
    

    (3)按设定的顺序,先加载模块ipmi_si,观察系统日志输出

    [root@SERVER log]# modprobe ipmi_si
    日志输出:
    Dec 11 18:01:37 SERVER kernel: ipmi_si: IPMI System Interface driver
    Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: probing via SMBIOS
    Dec 11 18:01:37 SERVER kernel: ipmi_platform: ipmi_si: SMBIOS: io 0xca8 regsize 1 spacing 4 irq 10
    Dec 11 18:01:37 SERVER kernel: ipmi_si: Adding SMBIOS-specified kcs state machine
    Dec 11 18:01:37 SERVER kernel: ipmi_si: Trying SMBIOS-specified kcs state machine at i/o address 0xca8, slave address 0x20, irq 10
    Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: The BMC does not support setting the recv irq bit, compensating, but the BMC needs to be fixed.
    Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: Using irq 10
    Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: Found new BMC (man_id: 0x0002a2, prod_id: 0x0100, dev_id: 0x20)
    Dec 11 18:01:37 SERVER kernel: ipmi_si dmi-ipmi-si.0: IPMI kcs interface initialized
    [root@SERVER log]# lsmod | grep ipmi
    ipmi_si                59965  0 
    ipmi_ssif              29595  0 
    ipmi_devintf           17459  0 
    ipmi_msghandler        56728  3 ipmi_ssif,ipmi_devintf,ipmi_si
    

    从输出看,正常加载了。

    (4)再加载模块acpi_power_meter

    [root@SERVER log]# modprobe acpi_power_meter
    日志输出:
    Dec 11 18:01:57 SERVER kernel: ACPI Error: No handler for Region [SYSI] (ffff9eb7bb09e870) [IPMI] (20130517/evregion-162)
    Dec 11 18:01:57 SERVER kernel: ACPI Error: Region IPMI (ID=7) has no handler (20130517/exfldio-305)
    Dec 11 18:01:57 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._GHL] (Node ffff9eb7bb063600), AE_NOT_EXIST (20130517/psparse-536)
    Dec 11 18:01:57 SERVER kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMC] (Node ffff9eb7bb063540), AE_NOT_EXIST (20130517/psparse-536)
    Dec 11 18:01:57 SERVER kernel: ACPI Exception: AE_NOT_EXIST, Evaluating _PMC (20130517/power_meter-753)
    [root@SERVER log]# lsmod | grep acpi_power_meter
    acpi_power_meter       18104  0 
    

    很显然,模块能加载,但错误信息依旧出现,于是继续找资料。

    除了停用acpi_power_meter这个内核模块并黑名单之的处理办法外,还应该在加载ipmp_si模块后,加载acpi_ipmi模块,也就是实际上是用acpi_ipmi模块取代acpi_power_meter模块。于是进行测试:

    [root@SERVER ~]# modprobe -r acpi_power_meter
    [root@SERVER ~]# lsmod | grep acpi
    acpi_pad              116316  0
    [root@SERVER ~]# modprobe acpi_ipmi
    [root@SERVER ~]# lsmod | grep acpi
    acpi_ipmi              13066  0
    ipmi_msghandler        56728  4 ipmi_ssif,acpi_ipmi,ipmi_devintf,ipmi_si
    acpi_pad              116316  0
    

    观察系统日志没有错误输出,估计是这样处理才对。于是:

    (1)添加acpi_ipmi模块加载设置,添加后具体设置应如下:

    [root@SERVER /]# ll /etc/sysconfig/modules/acpi_ipmi.modules
    -rwxr-xr-x. 1 root root 124 12月  7 16:30 /etc/sysconfig/modules/acpi_ipmi.modules
    [root@SERVER /]# ls -Z /etc/sysconfig/modules/acpi_ipmi.modules
    -rwxr-xr-x. root root system_u:object_r:etc_t:s0       /etc/sysconfig/modules/acpi_ipmi.modules
    [root@SERVER /]# cat /etc/sysconfig/modules/acpi_ipmi.modules
    #!/bin/sh
    
    /sbin/modinfo -F filename acpi_ipmi > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        /sbin/modprobe acpi_ipmi
    fi
    

    (2)黑名单acpi_power_meter模块:

    [root@SERVER ~]# ll /etc/modprobe.d/acpi_power_meter-backlist.conf
    -rw-r--r--. 1 root root 28 12月 11 22:53 /etc/modprobe.d/acpi_power_meter-backlist.conf
    [root@SERVER ~]# ls -Z /etc/modprobe.d/acpi_power_meter-backlist.conf
    -rw-r--r--. root root system_u:object_r:modules_conf_t:s0 /etc/modprobe.d/acpi_power_meter-backlist.conf
    [root@SERVER ~]# cat /etc/modprobe.d/acpi_power_meter-backlist.conf
    blacklist acpi_power_meter
    

    后来再查资料,也有说由于只是发行版内核版本没跟上硬件升级,不支持ACPI 4.0规范,但由于不会有实际功能损失,所以也可以直接忽略这一出错信息。

    我觉得,是否忽略,实际取决于系统管理员有无洁癖了。

    二、BERT是个什么鬼

    看看详细的日志信息:

    [root@SERVER ~]# grep "BERT" /var/log/messages
    Dec  6 23:24:52 KDSYS kernel: ACPI: BERT 000000006fc0e000 00030 (v01 DELL   PE_SC3   00000002 DELL 00000001)
    Dec  6 23:24:52 KDSYS kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
    

    然后关键字BERT找到这篇说明:

    https://access.redhat.com/solutions/5469081

    升级到RHEL 7.9之后,系统启动时就会出现关于BERT的提示信息。BERT是APEI(ACPI Platform Error Interface,ACPI 平台错误接口)的一张表,可以使固件向操作系统报告在操作系统启动之前发生的硬件错误。

    这个功能是从RHEL 7.9开始提供的,但默认禁用。更详细的信息可以参考以下核心补丁提交记录:

    https://access.redhat.com/labs/rhcb/RHEL-7.9/kernel-3.10.0-1160.el7/patches/blob/0545-acpi-ACPI-APEI-Add-Boot-Error-Record-Table-BERT-supp.patch

    如果系统支持BERT,驱动也启用了,就可以查看到以下的虚拟设备文件:

    /sys/firmware/acpi/tables/data/BERT
    

    既然如此,那么就启用BERT。方法就是增加内核启动参数bert_enabled,过程是:
    (1)修改/etc/sysconfig/grub配置文件,对GRUB_CMDLINE_LINUX参数加入bert_enabled;
    (2)重新生成GRUB启动配置。

    修改内容和配置过程如下:

    [root@SERVER ~]# grep bert_enabled /etc/sysconfig/grub
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet bert_enabled"
    
    [root@SERVER ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-3.10.0-1160.80.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-1160.80.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-1160.76.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-1160.76.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-1160.66.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-1160.66.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-3.10.0-1160.62.1.el7.x86_64
    Found initrd image: /boot/initramfs-3.10.0-1160.62.1.el7.x86_64.img
    Found linux image: /boot/vmlinuz-0-rescue-775c5564b74843a4a091c4f21ea74959
    Found initrd image: /boot/initramfs-0-rescue-775c5564b74843a4a091c4f21ea74959.img
    done
    

    这个问题解决得比较简单。

    三、驱动程序探测发现设备不支持RoCE的问题

    也是先看看详细的信息:

    [root@SERVER ~]# grep "bnxt_en" /var/log/messages
    Dec  6 23:24:53 KDSYS kernel: Broadcom NetXtreme-C/E driver bnxt_en v1.10.0
    Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.0 eth0: Broadcom BCM57412 NetXtreme-E 10Gb Ethernet found at mem ab210000, node addr b0:26:28:5f:8b:d0
    Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.0: 63.008 Gb/s available PCIe bandwidth (8 GT/s x8 link)
    Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.1 eth3: Broadcom BCM57412 NetXtreme-E 10Gb Ethernet found at mem ab200000, node addr b0:26:28:5f:8b:d1
    Dec  6 23:24:53 KDSYS kernel: bnxt_en 0000:3b:00.1: 63.008 Gb/s available PCIe bandwidth (8 GT/s x8 link)
    Dec  6 23:25:01 KDSYS kernel: bnxt_en 0000:3b:00.0: bnxt_re: probe error: RoCE is not supported on this device
    Dec  6 23:25:01 KDSYS kernel: bnxt_en 0000:3b:00.1: bnxt_re: probe error: RoCE is not supported on this device
    [root@SERVER ~]# lspci | grep 3b
    3b:00.0 Ethernet controller: Broadcom Inc. and subsidiaries BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (rev 01)
    3b:00.1 Ethernet controller: Broadcom Inc. and subsidiaries BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (rev 01)
    

    是和服务器上的万兆网卡有关的情况。

    RoCE是RDMA over Converged Ethernet的缩写,而RDMA是Remote Direct Memory Access,远程直接内存访问,一种为了能在主机之间加大网络吞吐量而实现的技术。RoCE即基于以太网实现的 RDMA。

    RoCE支持在标准以太网基础设施上使用RDMA技术,但是需要交换机支持无损以太网传输,以及需要服务器使用 RoCE 网卡。

    RoCE 与 InfiniBand 技术有相同的软件应用层及传输控制层,仅网络层及以太网链路层存在差异。应用 RoCE 可以使得基于以太网的数据传输能够达到以下效果:

        • 提高数据传输吞吐量。
        • 减少网络延时。
        • 降低 CPU 负载。

    OK,本文不打算在RoCE上继续讲解,这是另一个长篇大论的内容,而且实施起来有前提条件。和驱动相关的信息可以查看:

    https://lwn.net/Articles/714390/

    既然网络环境不支持部署RoCE,这个信息本质也只是一个探测结果,那么忽略掉就可以了。

    总结

    最后循例总结一下,我们修改了系统启动时的KERNEL参数,调整加载acpi_ipmi模块并禁用了acpi_power_meter模块。那么重启服务器后再检查日志,相关信息就不再出现了。

    本期题图:作品由无界版图AI绘制

    https://www.wujiebantu.com

    欢迎关注微信公众号后私信讨论文章内容!
    本栏目相关
  •  2020-02-27 服务器热加硬盘、热转RAID模式,配合LINUX卷操作实现不重启服务器完成扩容
  •  2022-02-24 如何安装使用 Broadcom RAID卡命令行管理工具 StorCLI(或称PercCLI)?
  •  2022-05-13 2022年甲方系统管理运维人员必备远程访问工具
  •  2022-05-20 内网DNS服务实现公网域名在内网转换解析
  •  2022-08-02 科幻感满分的终端模拟器eDEX-UI
  •  2022-10-17 安装 MegaRAID 存储管理器集中监控 DAS 存储状态
  •  2022-12-03 VMware vSphere Hypervisor 6.7 手动升级过程实例
  •  2022-12-12 Linux Kernel 日志排错分析和处置三例
  •  2023-01-11 网络安全运维必须掌握的Windows命令行工具
  • 返回页首