Jens Axboe <ax...@kernel.dk> writes:

> The submission queue (SQ) and completion queue (CQ) rings are shared
> between the application and the kernel. This eliminates the need to
> copy data back and forth to submit and complete IO. We use the same
> structures as the old aio interface. The SQ rings are indexes into a
> struct iocb array, like we would submit through io_submit(), and the
> CQ rings are struct io_event, like we would pass in (and copy back)
> from io_getevents().
>
> A new system call is added for this, io_ring_enter(). This system call
> submits IO that is stored in the SQ ring, and/or completes IO and stores
> the results in the CQ ring. Hence it's possible to both complete and
> submit IO in a single system call.
>
> For IRQ driven IO, an application only needs to enter the kernel for
> completions if it wants to wait for them to occur.

It looks like the memory for the submission and completion queues is
not migratable (scq rings are non-migratory!  [1]).  Maybe you should use
the aio pseudofs for allocations, like is done with the original aio
ring.  I realize that would change the api...

-Jeff

[1] https://www.youtube.com/watch?v=liIlW-ovx0Y

Reply via email to