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, thedracut
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, thedhclient
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 theUP
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.