1 # io_uring prototypes
 2 
 3 ## 1. Poller implementation
 4 
 5 Simple Poller implementation that uses `IORING_OP_POLL_ADD` to poll a file descriptor.
 6 Selected when run with `-Djdk.io_uring=true`.
 7 
 8 Functional, and suited to pollerMode=3 (`io_uring` instance per carrier thread),
 9 but will not perform as well as the `epoll` based Poller. Batching of submits, to
10 reduce calls to `io_uring_enter`, was prototyped but the batching added latency
11 and reduced performance overall.
12 
13 
14 ## 2. Poller implementation with submission queue polling
15 
16 Builds on prototype 1 but uses `IORING_SETUP_SQPOLL` to use a kernel thread to poll the
17 submission queue. Enabled with `-Djdk.io_uring.sqpoll_idle=<N>` where N is the duration
18 (in milliseconds) for the kernel thread to spin before sleeping.
19 
20 For the majority case where the thread is still running, this is only a cheap memory access.
21 The default value for this parameter is zero, which means submission queue polling is not
22 enabled.
23 
24 ## 3. Blocking read/write implemented on async read/write
25 
26 Extends Poller implementation to support read and write operations using `IORING_OP_READ`
27 and `IORING_OP_WRITE`.
28 
29 Enable for `java.net.Socket` read/write with `-Djdk.io_uring.read=true` and
30 `-Djdk.io_uring.write=true`.
31 
32 ## 4. Blocking read/write implemented on async readv/writev with registered buffers
33 
34 (not in loom repo at this time)
35 
36 Uses `IORING_OP_READ_FIXED` and `IORING_OP_WRITE_FIXED` with buffers that are
37 registered with kernel.