Linux 4.19 kernel releases with open arms and AIO-based polling interface; Linus back to managing the Linux kernel

4 min read

It was last month when Linus Torvalds took a break from kernel development. During his break, he had assigned Greg Kroah-Hartman as Linux’s temporary leader, who went ahead and released the Linux 4.19 today at the ongoing Linux Foundation Open Source Summit in Edinburg, after eight release candidates.

The new release includes features such as new AIO-based polling interface, L1TF vulnerability mitigations, the block I/O latency controller, time-based packet transmission, and the CAKE queuing discipline, among other minor changes.

The Linux 4.19 kernel release announcement is slightly different and longer than usual as apart from mentioning major changes, it also talks about welcoming newcomers by helping them learn things with ease. “By providing a document in the kernel source tree that shows that all people, developers, and maintainers alike, will be treated with respect and dignity while working together, we help to create a more welcome community to those newcomers, which our very future depends on if we all wish to see this project succeed at its goals”, mentions Hartman.

Moreover, Hartman also welcomed Linus back into the game as he wrote, “And with that, Linus, I’m handing the kernel tree back to you.  You can have the joy of dealing with the merge window”.

Let’s discuss the features in Linux 4.19 Kernel.

AIO-based polling interface

A new polling API based on the asynchronous I/O (AIO) mechanism was posted by Christoph Hellwig, earlier this year.  AIO enables submission of I/O operations without waiting for their completion. Polling is a natural addition to AIO and point of polling is to avoid waiting for operations to get completed. Linux 4.19 kernel release comes with AIO poll operations that operate in the “one-shot” mode. So, once a poll notification gets generated, a new IOCB_CMD_POLL IOCB is submitted for that file descriptor.

To provide support for AIO-based polling, two functions, namely,  poll() method in struct file_operations:  int (*poll) (struct file *file, struct poll_table_struct *table) (supports the polling system calls in previous kernels), are split into separate file_operations methods. Hence, it then adds these two new entries to that structure:

   struct wait_queue_head *(*get_poll_head)(struct file *file, int mask);

   int (*poll_mask) (struct file *file, int mask);

L1 terminal fault vulnerability mitigations

The Meltdown CPU vulnerability was first disclosed earlier this year and allowed unprivileged attackers to easily read the arbitrary memory in systems. Then, “L1 terminal fault” (L1TF) vulnerability (also going by the name Foreshadow) was disclosed which brought back both threats, namely, easy attacks against host memory from inside a guest.

Mitigations are available in Linux 4.19 kernel and have been merged into the mainline kernel. However, they can be expensive for some users.

The block I/O latency controller

Large data centers make use of control groups that help them balance the use of the available computing resources among competing users. Block I/O bandwidth can be considered .as one of the most important resources for specific types of workloads. However, kernel’s I/O controller was not a complete solution to the problem. This is where block I/O latency controller comes into the picture.

Linux 4.19 kernel has a block I/O latency controller now.  It regulates latency (instead of bandwidth) at a relatively low level in the block layer. When in use, each control group directory comprises an io.latency file that sets the parameters for that group. A line is written to that file following this pattern:

major:minor target=target-time

Here major and minor are used to identify the specific block device of interest. Target-time is the maximum latency that this group should be experiencing (in milliseconds).

Time-based packet transmission

The time-based packet transmission comes with a new socket option, and a new qdisc, which is designed so that it can buffer the packets until a configurable time before their deadline (tx times).

Packets intended for timed transmission should be sent with sendmsg(), with a control-message header (of type SCM_TXTIME) which indicates the transmission deadline as a 64-bit nanoseconds value.

CAKE queuing discipline

“Common Applications Kept Enhanced” (CAKE) queuing discipline in Linux 4.19 exists between the higher-level protocol code and the network interface. It decides which packets need to be dispatched at any given time. It also comprises four different components that are designed to make things work on home links.

It prevents the overfilling of buffers along with improving various aspects of networking performance such as bufferbloat reduction and queue management.

For more information, check out the official announcement.

Read Next

The kernel community attempting to make Linux more secure

KUnit: A new unit testing framework for Linux Kernel

Introducing Wasmjit: A kernel mode WebAssembly runtime for Linux