Please enable JavaScript.
Coggle requires JavaScript to display documents.
ublk2 - Coggle Diagram
ublk2
requirement
one command is for handling one batch of io commands
not limit command context any more
per-queue lock is required
load balancing
less uring_cmd requirement
multishot support?
per-queue commands
new uring command
or single FETCH_COMPLETE_CMDS
for fetching and completing at the same time
is it possible for using uring_cmd in this way?
yes
buffer
BIDIRECTIONAL buffer
nr_ios
nr_bytes
flags
io_uring fixed buffer?
yes, sqe->addr/sqe->len
multiple commands
FETCH_CMDS_MULTISHOT
fetch any commands originated from this queue
how to implement multishot uring_cmd?
not doable
multishot requires per-queue polling
COMMIT_AND_PREP_CMDS
sync command
complete these commands
prep commands for fetching new io command
PREP_CMDS
setup command parameters
buffer index
onshot thing
not limit task commands context
allow same io command completed on different context with the FETCH_COOMMANDS
implementation
buffer is required for this command
cmd header
flags
qid
nr_entries
io entry
tag + buf_idx (FETCH)
tag + buf_idx + result (FETCH and COMMIT)
tag + buf_idx + result + lba (FETCH and COMMIT zoned)
buffer
address: sqe->addr
len: sqe->len
multiple commands for each queue?
should be supported
look up uring_cmd from tag
no, just run round_robin for returning as many as possible to each inflight uring_cmds
how to handle new requests without any uring_cmd?
not same with existing implementation
which guarantees that one io_uring cmd is always ready
biggest difference
internal ring buffer for caching entries