第 10 章 内核

AMD64 和 Intel 64 系统的 kdump 支持多个 CPU

在 AMD64 和 Intel 64 系统中,kdump 内核崩溃转储机制现在可启用多个 CPU 时进行引导。这样就解决了在有些系统中创建内核崩溃转储时的高输入和输出问题,当使用 maxcpus=1 或者 nr_cpus=1 内核选项只启用一个 CPU 时,Linux 无法为设备分配中断。之前,这个功能是作为技术预览,现在可提供全面支持。
要启用崩溃内核中的多个 CPU,请在内核命令行中提供 nr_cpus=X 选项(其中 X 是处理器数目)。

支持 kpatch

kpatch 工具允许用户管理二进制内核补丁集合,可使用该工具动态为内核安装补丁而无需重启。kpatch 是作为技术预览支持的,且只适用于 AMD64 和 Intel 64 架构。
有关即时内核安装补丁支持的详情,请参考 https://access.redhat.com/solutions/2206511

SHMMAX 和 SHMALL 内核参数恢复至默认值

之前,在 /usr/lib/sysctl.d/00-system.conf 中设置的 kernel.shmmaxkernel.shmall 参数值太低。因此某些应用程序,如 SAP,无法正常运行。在此版本中已删除了不合适的覆盖值,使用的内核默认值已足够高。

透明的巨型页面不再导致内存崩溃

以前在读和写操作期间没有正确地同步透明的巨型页面。在某些情况下,这会导致启用巨型页面时内存崩溃。我们现在在处理透明巨型页面时添加了内存屏障,所以不会再出现内存崩溃了。

SCSI LIO 复位

SCSI 内核目标 LIO 已恢复为 Linux-4.0.stable 版本。这包括许多程序错误修复(多数对 iSER 是至关重要的),也包括对 XCOPY、WRITE SAME 和 ATS 的支持,以及对 DIF 数据完整性的支持。

makedumpfile 现在支持代表最多 16TB 物理内存的新 sadump 格式

makedumpfile 命令现在支持代表 16TB 以上物理内存空间的 sadump 格式。这样 makedumpfile 用户就可以读取由 sadump 在某些即将发布的服务器型号中生成的超过 16TB 大小的转储文件。

删除或升级内核时不再显示警告

之前,kmod 用来管理 kAB 兼容模块符号链接的 weak-modules 脚本,在删除和内核相关联的文件时会删除 /lib/modules/<version>/weak-updates 目录。这个目录是 kernel 软件包所有的,删除它会导致文件系统和 rpm 期望的状态不一致。所以在每次升级或删除内核时都会显示警告信息。
在这个版本中更新了这个脚本,即删除 weak-updates 目录中的内容,但会保留这个目录,所以不会再出现警告信息。

新的软件包:libevdev

Libevdev 是用于 Linux 内核输入事件设备接口的低层库。它为查询设备能力和处理设备事件提供了安全接口。目前的 xorg-x11-drv-evdev 和 xorg-x11-drv-synaptics 版本都依赖于这个库。

Tuned 现在可以在非守护进程模式中运行

Tuned 以前只能作为守护进程运行,因为占用内存,对于小型系统这可能造成性能问题。在这次更新中,Tuned 添加了不需要驻留内存的非守护进程(一次完成)模式。默认是禁用非守护进程模式,因为在这个模式下 Tuned 的大部分功能无法实现。

新软件包:tuned-profiles-realtime

在 Red Hat Enterprise Linux Server 和 Red Hat Enterprise Linux for Real Time 中添加了 tuned-profiles-realtime 软件包。它包含 tuned 程序用来执行 CPU 隔离和 IRQ 调优的一个实时配置文档。当激活这个配置文档时,它会读取其中一个变量部分,这些内容指定要隔离的 CPU,并移走所有可以从这些 CPU 内核移走的线程。

正确解析 SCSI 错误信息

之前对内核 printk() 函数的修改导致小型计算机系统接口(Small Computer System Interface,SCSI)的错误信息记录在多行上。因此,如果不同设备发生了多个错误,正确解析错误信息就变得很困难。这次更新修改了记录 SCSI 错误消息的代码,用 dev_printk() 选项来登记错误信息,将每条错误信息和产生错误的设备关联起来。

更新 libATA 子系统和驱动

本次更新提供了 libATA 子系统和驱动的大量程序错误修复和改进。

FCoE 和 DCB 已升级

Fibre Channel over Ethernet (FCoE) 和 Data Center Bridging (DCB) 内核组件已升级至最新的上游版本,相比之前的版本,它提供了大量的程序错误修复和改进。

perf 已恢复至版本 4.1

perf 软件包已升级至上游版本 4.1,相比之前的版本,它提供了大量的性能和稳定性修复和增强。值得注意的是,这个版本添加了 Intel Cache QoS Monitoring 和 AMD IBS Ops 功能,以及对 Intel Xeon v4、压缩的内核模块、参数化事件和指定断点长度的支持。此外,perf 工具还添加了大量的选项,如:--system-widetop -ztop -wtrace --filter-pidstrace --event

对 TPM 2.0 的支持

这次更新添加了对兼容 2.0 版本的可信平台模块(Trusted Platform Module,TPM)设备的驱动级别的支持。

turbostat 现可提供正确输出结果

turbostat 以前通过读取 cpu0 而不是 cpu 的 /dev/cpu/0/msr 文件来检测系统是否支持 MSR 设备。因此,禁用某个 CPU 会导致在 turbostat 输出中删除这些 CPU。已修复了这个程序错误,运行 turbostat ls 命令现在可以返回正确的输出。

turbostat 现在支持 Intel Xeon v5 处理器

本次更新在 turbostat 工具中添加了对 Intel Xeon v5 处理器的支持。

zswap 工具开始使用 zpool API

之前,zswap 工具直接使用 zbud,后者是一个保存压缩页面(满时比例为 2:1)的存储池。这个更新引进了 zpool API,该工具可提供 zbud或者 zsmalloc 池访问:zsmalloc 能够以较高的密度保存压缩页面,这样就能够为高度可压缩页面提供更多回收的内存。在这个更新中已将 zsmalloc 推广至 /mm 驱动程序,以便 zpool 可以如预期工作。

/proc/pid/cmdline 文件的长度现在是无限制的

ps 命令对 /proc/pid/cmdline 的长度限制以前在内核中硬编码为 4096 字节。这次更新确保了 /proc/pid/cmdline 的长度是无限制的,对列出具有较长命令行参数的进程来说,这特别有用。

现在提供了对 dma_rmb 和 dma_wmb 的支持

这次更新引入了用于同步缓存连续内存写和读的两个新的原始操作:dma_wmb() 和 dma_rmb()。这个功能将用于驱动程序。

qib HCA 驱动程序连接

由于 SRP LOGIN ID 不匹配,SRP 目标之前无法通过 qib HCA 设备驱动程序连接。这个更新修复了这个程序错误,现在可以成功建立上述连接。

增加内存限制

从 Red Hat Enterprise Linux 7.2 开始,AMD64 和 Intel 64 的最高支持内存已从 6TB 增加至 12TB。

dracut 的新变量

这个更新为 dracut initramfs 生成器引入以下变量,以便在内核命令行中使用:
  • rd.net.dhcp.retry=cnt – 如果设定这个选项,dracut 程序会在确定失败前尝试通过 DHCP cnt 连接的次数。默认为 1。
  • rd.net.timeout.dhcp=arg – 如果设定这个选项,则会调用附带 -timeout arg 选项的 dhclient 命令。
  • rd.net.timeout.iflink=seconds – 链接出现前要等待的数。默认为 60 秒。
  • rd.net.timeout.ifup=seconds – 链接出现 UP 状态前要等待的数。默认为 20 秒。
  • rd.net.timeout.route=seconds – 显示路由前等待的数。默认为 20 秒。
  • rd.net.timeout.ipv6dad=seconds – IPv6 DAD 完成前要等待的数。默认为 50 秒。
  • rd.net.timeout.ipv6auto=seconds – 分配 IPv6 自动地址前要等待的数。默认为 40 秒。
  • rd.net.timeout.carrier=seconds – 识别运营商前要等待的数。默认为 5 秒。