5.7.6. 内核

意外删除补丁会导致 huge_page_setup_helper.py 显示错误

更新 huge_page_setup_helper.py 脚本的补丁被意外删除。因此,执行 huge_page_setup_helper.py 脚本后会出现以下出错信息:

SyntaxError: Missing parentheses in call to 'print'

要临时解决这个问题,从 RHEL 8.1 中复制 huge_page_setup_helper.py 脚本并将其安装到 /usr/bin/ 目录中:

  1. 从 RHEL-8.1.0 安装介质或从 红帽客户门户网站 下载 libhugetlbfs-utils-2.21-3.el8.x86_64.rpm 软件包。
  2. 执行 rpm2cpio 命令:

    # rpm2cpio libhugetlbfs-utils-2.21-3.el8.x86_64.rpm | cpio -D / -iduv '*/huge_page_setup_helper.py'

    该命令从 RHEL 8.1 RPM 中提取 huge_page_setup_helper.py 脚本并将其保存到 /usr/bin/ 目录中。

因此,huge_page_setup_helper.py 脚本可以正常工作。

(BZ#1823398)

有大量持久内存的系统在引导过程中出现延迟

有大量持久内存的系统需要很长时间才能引导,因为初始化内存是序列化的。因此,如果 /etc/fstab 文件中列出了持久的内存文件系统,系统在等待设备可用时可能会超时。要临时解决这个问题,请将 /etc/systemd/system.conf 文件中的 DefaultTimeoutStartSec 选项配置为足够大的值。

(BZ#1666538)

KSM 有时会忽略 NUMA 内存策略

当内核共享内存(KSM)功能通过 merge_across_nodes=1 参数启用时,KSM 会忽略 mbind()函数设置的内存策略,并且可能会将某些内存区域的页面合并到与策略不匹配的非一致性内存访问(NUMA)节点。

要临时解决这个问题,如果使用 NUMA 内存与 QEMU 绑定,请禁用 KSM 或将 merge_across_nodes 参数设置为 0。因此,为 KVM 虚拟机配置的 NUMA 内存策略可以正常工作。

(BZ#1153521)

Debug 内核无法在 RHEL 8 的崩溃捕获环境中引导

由于 debug 内核的内存需求特性,会在使用 debug 内核并触发内核 panic 时出现问题。因此,调试内核无法作为捕获内核引导,而是生成一个堆栈追踪。要临时解决这个问题,相应地增大崩溃内核内存。因此,debug 内核可以在崩溃捕获环境中成功引导。

(BZ#1659609)

zlib 可能会在某些压缩功能中减慢 vmcore 捕获速度

kdump 配置文件默认使用 lzo 压缩格式(makedumpfile -l)。当您修改使用 zlib 压缩格式(makedumpfile -c)的配置文件时,可能会带来更好的压缩效果,但会牺牲 vmcore 捕获过程的速度。因此,与 lzo 相比,捕获有 zlibvmcore 文件所需的时间最多可能比使用 kdump 要长四倍。

因此,如果速度对您非常重要,红帽推荐使用默认的 lzo。但是,如果目标机器在可用空间中较低, zlib 就是一个更好的选项。

(BZ#1790635)

在内存热插拔或拔出操作后,vmcore 捕获失败

执行内存 hot-plug 或 hot-unplug 操作后,会更新包含内存布局信息的设备树。因此,makedumpfile 实用程序会尝试访问不存在的物理地址。如果以下条件都满足,就会出现问题:

  • IBM Power System 的 little-endian 变体运行 RHEL 8。
  • 在系统中启用了 kdump 或者 fadump 服务。

因此,如果在内存 hot-plug 或 hot-unplug 操作后触发了内核崩溃,捕获内核将无法保存 vmcore

要临时解决这个问题,在 hot-plug 或 hot-unplug 后重启 kdump 服务:

# systemctl restart kdump.service

因此,vmcore 在上述场景中被成功保存。

(BZ#1793389)

fadump 转储机制将网络接口重命名为 kdump-<interface-name>

当使用固件辅助转储(fadump)捕获 vmcore 并使用 SSH 或 NFS 协议将其保存到远程机器时,请将网络接口重命名为 kdump-<interface-name>。当 <interface-name> 为通用时(如 *eth# 或 net# 等等)进行重命名。这是因为初始 RAM 磁盘(initrd)中的 vmcore 捕获脚本在网络接口名称中添加 kdump- 前缀来保护持久性命名。由于同一 initrd 也用于常规启动,因此生产内核的接口名称也会更改。

(BZ#1745507)

启用 fadump 时,系统在引导时进入紧急模式

initramfs 方案中启用了 fadump( kdump)or dracut squash 模块时,系统进入紧急模式,因为 systemd Manager 无法获取挂载信息并将 LV 分区配置为挂载。要临时解决这个问题,请添加以下内核命令行参数 rd.lvm.lv=<VG>/<LV> 以正确发现并挂载失败的 LV 分区。因此,系统将在上述场景中成功引导。

(BZ#1750278)

使用 irqpoll 会导致 vmcore 生成失败

由于在 Amazon Web Services(AWS)云平台上运行的 64 位 ARM 架构中的 nvme 驱动程序存在问题,在第一个内核提供了 irqpoll 内核命令行参数时 vmcore 生成会失败。因此,在内核崩溃后,/var/crash/ 目录中不会转储 vmcore 文件。要临时解决这个问题:

  1. /etc/sysconfig/kdump 文件的 KDUMP_COMMANDLINE_REMOVE 键里添加 irqpoll
  2. 运行 systemctl restart kdump 命令重启 kdump 服务。

因此,第一个内核会正确引导,在内核崩溃时可以捕获 vmcore 文件。

请注意,kdump 服务可能会使用大量崩溃内核内存转储 vmcore 文件。确定捕获内核有足够的内存可用于 kdump 服务。

(BZ#1654962)

使用 vPMEM 内存作为转储目标会延迟内核崩溃捕获过程

当您将 Virtual Persistent Memory(vPEM)命名空间用作 kdumpfadump 目标时,papr_scm 模块必须取消 map 并重新 map 由 vPMEM 支持的内存,并将内存重新添加到其线性映射中。因此,这个行为会向 POWER Hypervisor(HCalls)触发 Hypervisor(HCalls),从而大大缩短捕获内核引导的速度。因此,建议您不要将 vPMEM 命名空间用作 kdump 或 fadump 的转储目标。

如果您必须使用 vPMEM,要解决这个问题请执行以下命令:

  1. 创建 /etc/dracut.conf.d/99-pmem-workaround.conf 文件并添加:

    add_drivers+="nd_pmem nd_btt libnvdimm papr_scm"
  2. 重建初始 RAM 磁盘(initrd)文件系统:

    # touch /etc/kdump.conf
    # systemctl restart kdump.service

(BZ#1792125)

HP NMI 监视器并不总是生成崩溃转储

在某些情况下,HP NMI watchdog 的 hpwdt 驱动无法声明一个由 HPE watchdog timer 生成的不可屏蔽中断(NMI),因为 NMI 被 perfmon 驱动所消耗。

缺少的 NMI 是由以下两个条件之一引发的:

  1. Integrated Lights-Out (iLO) 服务器管理软件中的 Generate NMI 按钮。这个按钮由用户触发。
  2. hpwdt watchdog。默认过期会向服务器发送一个 NMI。

在系统无响应时通常会出现这两个序列。在一般情况下,用于这两种情况的 NMI 处理程序调用 kernel panic() 功能,如果配置了, kdump 服务会生成 vmcore 文件。

由于缺少 NMI,没有调用 kernel panic() 且不收集 vmcore

第一种情况(1.),如果系统不响应,它会一直处于这个状态。要临时解决这种情况,请使用虚拟 Power 按钮来重置或者启用服务器。

在第二个示例中(2.),缺少的 NMI 之后会在 9 秒后被自动系统恢复(ASR)重置。

HPE Gen9 服务器行以单位数字显示这个问题。Gen10 频率更小。

(BZ#1602962)

tuned-adm profile powerave 命令会导致系统变得无响应

执行 tuned-adm 配置集 powersave 命令会导致 Penguin Valkyrie 2000 2-socket 系统具有较旧 Thunderx(CN88x)处理器的无响应状态。因此,需要重启系统以便恢复工作。要临时解决这个问题,如果您的系统符合上述说明,请避免使用 powersave 配置集。

(BZ#1609288)

cxgb4 驱动会导致 kdump 内核崩溃

vmcore 文件中保存信息时 kdump 内核会崩溃。因此,cxgb4 驱动程序可防止 kdump 内核保存内核以便稍后进行分析。要临时解决这个问题,在 kdump 内核命令行中添加 novmcoredd 参数以便保存核心文件。

(BZ#1708456)

尝试将 ICE 驱动程序 NIC 端口添加到模式 5(balance-tlb)绑定 master 接口可能会导致失败

尝试将 ICE 驱动程序 NIC 端口添加到模式 5(balance-tlb)绑定 master 接口可能会导致失败,并显示 Master 'bond0', Slave 'ens1f0': Error: Enslave failed。因此,您会出现将 NIC 端口添加到绑定 master 接口的间歇性失败的情况。要解决这个问题,请尝试重试添加接口。

(BZ#1791664)

将虚拟功能附加到接口 type='hostdev' 可能会有时失败

使用 .XML 文件将虚拟功能(VF)附加到虚拟机时,可能会按照 带有 <interface type='hostdev'> 方法的 Assignment 方法失败。这是因为,使用带有 <interface type='hostdev'> 方法的 Assignment 可以防止虚拟机附加到显示在此虚拟机的 VF NIC 中。要解决这个问题,请使用 Assignment with <hostdev> 方法使用 .XML 文件将 VF 附加到虚拟机。因此,vir sh attach-device 命令可以 成功且没有错误。有关使用 < hostdev> 的 Assignment 和 < interface type='hostdev'> (仅限 SRIOV 设备)之间的不同详情,请参阅 主机网络设备的 PCI Passthrough

(BZ#1792691)