io/uring/Ring: add method SetMaxWorkers()

This commit is contained in:
Max Kellermann 2025-01-27 12:49:25 +01:00 committed by Max Kellermann
parent c644b7616a
commit 7c9a460786
3 changed files with 33 additions and 0 deletions

@ -30,6 +30,14 @@ public:
return ring.GetFileDescriptor();
}
void SetMaxWorkers(unsigned values[2]) {
ring.SetMaxWorkers(values);
}
void SetMaxWorkers(unsigned bounded, unsigned unbounded) {
ring.SetMaxWorkers(bounded, unbounded);
}
struct io_uring_sqe *GetSubmitEntry() noexcept {
return ring.GetSubmitEntry();
}

@ -21,6 +21,14 @@ Ring::Ring(unsigned entries, struct io_uring_params &params)
throw MakeErrno(-error, "io_uring_queue_init_params() failed");
}
void
Ring::SetMaxWorkers(unsigned values[2])
{
if (int error = io_uring_register_iowq_max_workers(&ring, values);
error < 0)
throw MakeErrno(-error, "io_uring_register_iowq_max_workers() failed");
}
void
Ring::Submit()
{

@ -50,6 +50,23 @@ public:
return FileDescriptor(ring.ring_fd);
}
/**
* Wrapper for io_uring_register_iowq_max_workers().
*
* Throws on error.
*/
void SetMaxWorkers(unsigned values[2]);
/**
* This overload constructs an array for
* io_uring_register_iowq_max_workers() and discards the
* output values.
*/
void SetMaxWorkers(unsigned bounded, unsigned unbounded) {
unsigned values[2] = {bounded, unbounded};
SetMaxWorkers(values);
}
/**
* Returns a submit queue entry or nullptr if the submit queue
* is full.