Chapter 10. Kernel

Multiple CPU support in kdump on AMD64 and Intel 64 systems

On AMD64 and Intel 64 systems, the kdump kernel crash dumping mechanism can now boot with more than one CPU enabled. This solves a problem on some systems where, due to high input and output when creating a kernel crash dump, Linux could fail to allocate interrupts for devices when only one CPU was enabled using the maxcpus=1 or nr_cpus=1 kernel options. This feature, previously available as a Technology Preview, is now fully supported.
To enable multiple CPUs in the crash kernel, provide the nr_cpus=X option (where X is the number of processors) on the kernel command line.

Support for kpatch

The kpatch utility allows users to manage a collection of binary kernel patches which can be used to dynamically patch the kernel without rebooting. Previously, kpatch was included as a Technology Preview, and it is now fully supported when used under the direction of Red Hat Customer Experience and Engagement team.
For complete details on live kernel patching support, refer to https://access.redhat.com/solutions/2206511.

The SHMMAX and SHMALL kernel parameters returned to default values

Previously, the values of the kernel.shmmax and kernel.shmall parameters, which were set in the /usr/lib/sysctl.d/00-system.conf file, were too low. As a consequence, some applications, such as SAP, could not function properly. The unsuitable overrides have been removed, and the kernel defaults, which are sufficiently high, are now used.

Transparent huge pages no longer cause memory corruption

Transparent huge pages were not being correctly synchronized during read and write operations. In some circumstances, this resulted in memory corruption when transparent huge pages were enabled. Memory barriers have been added to transparent huge page handling so that this memory corruption no longer occurs.

SCSI LIO rebase

The SCSI kernel target, LIO, has been rebased from Linux-4.0.stable. This includes many bug fixes, most critically for iSER, but also includes added support for the XCOPY, WRITE SAME, and ATS commands; and DIF data integrity support.

makedumpfile now supports the new sadump format representing up to 16 TB of physical memory

The makedumpfile command now supports the new sadump format that can represent more than 16 TB of physical memory space. This allows users of makedumpfile to read dump files over 16 TB, generated by sadump on certain upcoming server models.

Removing or upgrading kernel no longer displays a warning

The weak-modules script, which is used by kmod to manage kABI-compatible module symbolic links, was previously removing the /lib/modules/<version>/weak-updates directory when removing files associated with a kernel. This directory is owned by the kernel package and removing it caused inconsistency between the file system and the state expected by rpm. This caused a warning to be displayed every time a kernel was upgraded or removed.
The script has been updated to remove the contents of the weak-updates directory but leave the directory itself, and warnings are no longer being displayed.

New package: libevdev

Libevdev is a low-level library for the Linux kernel input event device interface. It provides safe interfaces to query device capabilities and process events from devices. Current versions of xorg-x11-drv-evdev and xorg-x11-drv-synaptics require this library as a dependency.

Tuned can now run in no-daemon mode

Previously, Tuned could run only as a daemon, which could affect performance of small systems because of the memory footprint of the Tuned daemon. With this update, a no-daemon (one shot) mode, which does not require any resident memory, has been added into Tuned. The no-daemon mode is disabled by default because much of Tuned functionality is missing in this mode.

New package: tuned-profiles-realtime

The tuned-profiles-realtime package has been added to Red Hat Enterprise Linux Server and Red Hat Enterprise Linux for Real Time. It contains a realtime profile used by the tuned utility to perform CPU isolation and IRQ tuning. When the profile is activated, it reads its variable section, which specifies the CPUs to be isolated, and moves all threads that may be moved off those CPU cores.

SCSI error messages can now be interpreted comfortably

Previous kernel changes to the printk() function had resulted in Small Computer System Interface (SCSI) error messages being logged across multiple lines. As a consequence, if multiple errors occurred across different devices, it could become difficult to interpret the error messages correctly. This update changes the SCSI error logging code to log error messages using the dev_printk() option, which associates each error message with the device that generated the error.

libATA subsystem and drivers updated

This enhancement update provides number of bug fixes and enhancements of the libATA subsystem and drivers.

FCoE and DCB have been upgraded

Fibre Channel over Ethernet (FCoE) and Data Center Bridging (DCB) kernel components have been upgraded to the latest upstream versions, which provides a number of bug fixes and enhancements over the previous versions.

perf rebase to version 4.1

The perf packages have been upgraded to upstream version 4.1, which provides a number of performance and stability fixes and enhancements over the previous version. Notably, this rebase adds the Intel Cache QoS Monitoring and AMD IBS Ops features and provides support for Intel Xeon v4 for compressed kernel modules, for parametrized events and support to specify breakpoint length. In addition, a number of options have been added to the perf tool, such as the --system-wide, top -z, top -w, trace --filter-pids, and trace --event options.

Support for TPM 2.0

This update adds driver-level support for version 2.0 compliant Trusted Platform Module (TPM) devices.

turbostat now provides correct output

Previously, the turbostat tool detected if system had the MSR device support by reading the /dev/cpu/0/msr file for cpu0 instead of cpu. As a consequence, disabling a CPU caused the CPUs to be deleted from turbostat output. This bug has been fixed, and running the turbostat ls command now returns correct output.

turbostat now supports Intel Xeon v5 processors

This enhancement adds Intel Xeon v5 processor support to the turbostat tool.

the zswap tool makes use of the zpool API

Previously, the zswap tool directly used zbud, a storage pool that stores compressed pages at a ratio of 2:1 (when full). This update introduces the zpool API that provides access to either the zbud or zsmalloc pools: zsmalloc stores compressed pages at a potential higher density, resulting in more reclaimed memory for highly compressible pages. Within this update, zsmalloc has been promoted to the /mm drivers so that zpool works as intended.

The /proc/pid/cmdline file length is now unlimited

The /proc/pid/cmdline file length limit for the ps command was previously hard-coded in the kernel to 4096 characters. This update makes sure the length of /proc/pid/cmdline is unlimited, which is especially useful for listing processes with long command line arguments.

Support for dma_rmb and dma_wmb now provided

This update introduces two new primitives for synchronizing cache coherent memory writes and reads, dma_wmb() and dma_rmb(). This feature will be available for appropriate use in drivers.

qib HCA driver connection

Due to a mismatch in SRP LOGIN ID, the SRP target previously failed to connect over the qib HCA device driver. This update fixes the bug, and the aforementioned connection can now be established successfully.

Increase in memory limit

Starting with Red Hat Enterprise Linux 7.2, maximum supported memory limit on AMD64 and Intel 64 systems has been increased from 6 TB to 12 TB.

New variables for dracut

This update introduces the following variables for the dracut initramfs generator for use in the kernel command line:
  • rd.net.dhcp.retry=cnt – If this option is set, the dracut utility will try to connect through DHCP cnt times before failing. The default is 1.
  • rd.net.timeout.dhcp=arg – If this option is set, the dhclient command is called with the -timeout arg option.
  • rd.net.timeout.iflink=seconds – Wait the number of seconds until the link appears. The default is 60 seconds.
  • rd.net.timeout.ifup=seconds – Wait the number of seconds until link has the UP state. The default is 20 seconds.
  • rd.net.timeout.route=seconds – Wait the number of seconds until the route shows up. The default is 20 seconds.
  • rd.net.timeout.ipv6dad=seconds – Wait the number of seconds until IPv6 DAD is finished. The default is 50 seconds.
  • rd.net.timeout.ipv6auto=seconds – Wait the number of seconds until IPv6 automatic addresses are assigned. The default is 40 seconds.
  • rd.net.timeout.carrier=seconds – Wait the number of seconds until the carrier is recognized. The default is 5 seconds.