KernelNewbies:

Linux 6.3 was released on Sunday, 23 Apr 2023.

Summary: This release includes improved Btrfs performance and fragmentation improvements, support for non-executable memfds, eBPF support for HID devices, support for IPv4 Big TCP, new ids to the rseq system call, support AMD QoS new features, specifications for the netlink protocol, more secure NFS encryption, and multi-actuator support in the BFQ I/O sched. As always, there are many other features, new drivers, improvements and fixes.

1. Prominent features

1.1. Btrfs performance and fragmentation improvements

This release places a number of heuristics in the block allocator to place files with different fragmentation characteristics together and separated from other types. This can help to avoid fragmentation in some cases, in particular this may help during balance.

There are also a few notable performance improvements: the send functionality now caches caches directory utimes and only emit the command when necessary, which can speed up send up to 10x. The fiemap ioctl can be now up to 3x faster when extents are shared, and there are some microoptimizations that can speed up file creation in synthetic benchmarks up to 10%.

1.2. eBPF support for HID devices, and other BPF enhancements

As usual, this release includes a number of enhancements, like a rbtree data structure that follows the recently-added linked-list. Because of previous limitation, BPF users had to use the BPF map structures (hash, array) for data structures that don't fit well in these structures. With the introduction of kfuncs, kptrs, and the any-context BPF allocator, it is now possible to implement this rbtree data structure that can expose red-black tree structures inside the kernel more naturally.

This release also includes a somewhat exotic use of BPF: using eBPF programs as a way to add small features and tweaks to existing Input HID drivers. For example, as joystick gets older, it is common to see it wobbling around its neutral point. This is usually filtered at the application level by adding a dead zone for this specific axis. With HID-BPF, it is possible to add a filter in the kernel directly so userspace does not get woken up when nothing else is happening on the input controller.

Another use would be to add a feature that requires a new kernel API, morph a device into something else and control that from userspace, or prevent users from accessing a feature (eg. broken firmware feature), or simply tracing HID events.

Recommended LWN article: [[|https://lwn.net/Articles/909109/BPF for HID drivers]]

1.3. Non-executable memfds

memfds (which are file descriptors that just refer to an area of anonymous process memory, instead of a file system). This release adds some flags to allow disabling the executability of these files, and it's also possible to seal them.

Recommended LWN article: Enabling non-executable memfds

1.4. Support IPv4 big TCP (TSO frames larger than 64kB)

This is an IPv4 implementation of BIG TCP, which allow biggers TSO/GRO packet sizes for IPv4 traffic. Reducing number of packets traversing networking stack usually improves performance. This is similar to the IPv6 BIG TCP feature but for the v4 family.

Recommended LWN article: Going big with TCP packets

1.5. Add new ids to the rseq system call for faster and more efficient memory allocators

The rseq(2) system call (alias for "restartable sequences") was added in Linux 4.18 to provide a safe way to do concurrency updates without using locks or atomic instructions. But it also provided a method for a thread to get the CPU id number where it runs, in a way that is faster than getcpu(2).

This release extends the rseq(2) system call to also expose other identification numbers that provide some heavy-lifting needed by eg. memory allocators to allow them to use per-cpu data structures more efficiently:

1.6. Support AMD QoS new features

Support for AMD QoS new features: Slow Memory Bandwidth Allocation (SMBA) and Bandwidth Monitoring Event Configuration (BMEC). These extensions are intended to provide for the monitoring of the usage of certain system resources by one or more processors and for the separate allocation and enforcement of use limits:

  1. Slow Memory Bandwidth Allocation (SMBA): With this feature, the QOS enforcement policies can be applied to the external slow memory connected to the host. Currently, CXL.memory is the only supported "slow" memory device.
  2. Bandwidth Monitoring Event Configuration (BMEC). The bandwidth monitoring events mbm_total_event and mbm_local_event are set to count all the total and local reads/writes respectively.

Official site: AMD64 Technology Platform Quality of Service Extensions

The netlink protocol is a networking protocol used to communicate user space programs with the kernel. For example, it is used to configure and gather information about wireless devices. Adding new communication endpoints require manually adding them to userspace libraries. This release adds machine readable netlink protocol descriptions in YAML. The expectation is that the spec can be used to either dynamically translate between whatever types the high level language likes. Currently only genetlink is supported.

1.8. More secure NFS encryption

This release improve/harden the security provided by the Linux kernel's RPCSEC GSS Kerberos 5 mechanism (used by NFS). This release disables DES-based enctypes by default, provides a mechanism for disabling SHA1-based enctypes, and introduces two modern AES-SHA2-based enctypes that do not use deprecated crypto algorithms.

1.9. Multi-actuator support in the BFQ I/O scheduler

Some traditional hard drives have more than one arm. In order to optimize performance, the I/O scheduler must attempt to keep both arms busy. This release adds some support for such multi-actuator drives to the BFQ I/O scheduler.

2. Core

3. File systems

4. Memory management

5. Block layer

6. Tracing, perf and BPF

7. Virtualization

8. Security

9. Networking

10. Architectures

10.1. ARM

10.2. x86

10.3. LoongArch

10.4. RISC-V

10.5. PowerPC

10.6. S390

10.7. Alpha

10.8. IA-64

10.9. M68k

10.10. MIPS

10.11. UM

11. Drivers

11.1. Graphics

11.2. Power Management

11.3. Storage

11.4. Drivers in the Staging area

11.5. Networking

11.6. Audio

11.7. Tablets, touch screens, keyboards, mouses

11.8. TV tuners, webcams, video capturers

11.9. Serial

11.10. Universal Serial Bus

11.11. Serial Peripheral Interface (SPI)

11.12. Watchdog

11.13. CPU Frequency scaling

11.14. Voltage, current regulators, power capping, power supply

11.15. Real Time Clock (RTC)

11.16. Pin Controllers (pinctrl)

11.17. Multi Media Card (MMC)

11.18. Memory Technology Devices (MTD)

11.19. Industrial I/O (iio)

11.20. Multi Function Devices (MFD)

11.21. Inter-Integrated Circuit (I2C + I3C)

11.22. Hardware monitoring (hwmon)

11.23. General Purpose I/O (gpio)

11.24. Leds

11.25. DMA engines

11.26. Hardware Random Number Generator (hwrng)

11.27. Cryptography hardware acceleration

11.28. PCI

11.29. Thunderbolt

11.30. Clock

11.31. PHY ("physical layer" framework)

11.32. EDAC (Error Detection And Correction)

11.33. Various

12. List of Pull Requests

13. Other news sites

KernelNewbies: Linux_6.3 (last edited 2023-05-31 08:05:36 by diegocalleja)