| Line 1: |
Line 1: |
| − | Restartable sequences (<code>rseq</code>) are short, carefully defined sections of user-space code that enable efficient access to per-CPU data structures without relying on heavyweight synchronization primitives such as mutexes or atomic operations. | + | Restartable sequences (aka RSEQ) are short, carefully defined sections of user-space code that enable efficient access to per-CPU data structures without relying on heavyweight synchronization primitives such as mutexes or atomic operations. |
| | | | |
| − | Support for <code>rseq</code> was introduced in the Linux kernel in version 4.18, allowing user-space programs to register critical code paths that the kernel can safely restart when a CPU migration or preemption occurs. This mechanism enables high-performance, scalable data access patterns while preserving correctness. [https://www.efficios.com/blog/2019/02/08/linux-restartable-sequences/ The 5-year journey to bring restartable sequences to Linux] article provides more information about how restartable sequences work, their design, use cases, and kernel integration. | + | Support for RSEQ was introduced in the Linux kernel in version 4.18, allowing user-space programs to register critical code paths that the kernel can safely restart when a CPU migration or preemption occurs. This mechanism enables high-performance, scalable data access patterns while preserving correctness. [https://www.efficios.com/blog/2019/02/08/linux-restartable-sequences/ The 5-year journey to bring restartable sequences to Linux] article provides more information about how restartable sequences work, their design, use cases, and kernel integration. |
| | | | |
| | == Linux Kernel Interface for Restartable Sequences == | | == Linux Kernel Interface for Restartable Sequences == |
| | | | |
| − | The Linux kernel interface for <code>rseq</code> is intentionally minimal. It consists of a single system call: | + | The Linux kernel interface for RSEQ is intentionally minimal. It consists of a single system call: |
| | <code>sys_rseq(struct rseq *rseq, uint32_t rseq_len, int flags, uint32_t sig)</code> | | <code>sys_rseq(struct rseq *rseq, uint32_t rseq_len, int flags, uint32_t sig)</code> |
| | | | |
| − | The full definition of the <code>rseq</code> data structures and related flags is provided in [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/rseq.h include/uapi/linux/rseq.h]: | + | The full definition of the RSEQ data structures and related flags is provided in [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/rseq.h include/uapi/linux/rseq.h]: |
| | | | |
| | <pre> | | <pre> |