Linux Support For Sapphire Rapids’ User Interrupts Still Awaiting Mainline


A new feature with Intel 4th Gen Xeon Scalable «Sapphire Rapids» that hasn’t been talked about too much is the new User Interrupts (UNITR) functionality. The Linux kernel support for it still also hasn’t been merged but has shown promising results in patch form.

Intel previously — all the way back in 2020 — documented User Interrupts within their ISA programming reference manual. In late 2021 Intel began posting Linux kernel patches for User Interrupts.

The X86_USER_INTERRUPTS Kconfig description on this new CPU feature comes down to:

User Interrupts are events that can be delivered directly to userspace without a transition through the kernel. The interrupts could be generated by another userspace application, kernel or a device.

And from the original RFC patch series on implementing User Interrupts:

Today, virtually all communication across privilege boundaries happens by going through the kernel. These include signals, pipes, remote procedure calls and hardware interrupt based notifications. User interrupts provide the foundation for more efficient (low latency and low CPU utilization) versions of these common operations by avoiding transitions through the kernel.

In the User Interrupts hardware architecture, a receiver is always expected to be a user space task. However, a user interrupt can be sent by another user space task, kernel or an external source (like a device).

The performance results with Intel’s patched kernel for User Interrupts have been very promising. Early performance numbers on Sapphire Rapids showed a ~9x or higher performance improvement by using User Interrupts over other IPC mechanisms for event signaling. User Interrupts look great for faster IPC but over the course of 2022 didn’t see much more form Intel on this new Sapphire Rapids feature.

As of writing the User Interrupts support for the Linux kernel has not been merged but Intel is still working on the kernel code. They have been queuing their work via intel/uintr-linux-kernel on GitHub. The latest uintr-next patches were updated as of mid-October. The patches introduce the new uintr_wait() system call, add UINTR support to IO_uring, and other infrastructure around this user event signaling support.

Hopefully we’ll see this User Interrupts support for Sapphire Rapids reach the mainline Linux kernel this year as a feature sadly not merged in time for launch day and so far haven’t heard any further backstory or information on its delay.