io_uring_set_iowait(3) liburing Manual io_uring_set_iowait(3)

io_uring_set_iowait - toggle of iowait usage when waiting on CQEs

#include <liburing.h>
int io_uring_set_iowait(struct io_uring *ring,
                        bool enable_iowait);

By default, io_uring marks a waiting task as being in iowait if it's sleeping waiting on events and there are pending requests. This isn't necessarily always useful, and may be confusing on non-storage setups where iowait isn't expected. It can also cause extra power usage by preventing the CPU from entering lower sleep states.

The io_uring_set_iowait(3) function allows the user to toggle this behavior. If enable_iowait is set to true, the iowait behavior is enabled. If it is set to false, the iowait behavior is disabled. The iowait behavior is enabled by default when a ring is created.

If the iowait is disabled, the submit functions will set IORING_ENTER_NO_IOWAIT in the flags argument to io_uring_enter(2).

If the kernel supports this feature, it will be marked by having the IORING_FEAT_NO_IOWAIT feature flag set.

Available since kernel 6.15.

On success, io_uring_set_iowait(3) returns 0. On failure, it returns -EOPNOTSUPP.

io_uring_enter(2), io_uring_submit(3), io_uring_submit_and_wait(3)

July 27, 2025 liburing-2.12