mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 05:20:50 +00:00
e8b6535533
Block drivers may optimize I/O requests accessing buffers previously registered with bdrv_register_buf(). Checking whether all elements of a request's QEMUIOVector are within previously registered buffers is expensive, so we need a hint from the user to avoid costly checks. Add a BDRV_REQ_REGISTERED_BUF request flag to indicate that all QEMUIOVector elements in an I/O request are known to be within previously registered buffers. Always pass the flag through to driver read/write functions. There is little harm in passing the flag to a driver that does not use it. Passing the flag to drivers avoids changes across many block drivers. Filter drivers would need to explicitly support the flag and pass through to their children when the children support it. That's a lot of code changes and it's hard to remember to do that everywhere, leading to silent reduced performance when the flag is accidentally dropped. The only problematic scenario with the approach in this patch is when a driver passes the flag through to internal I/O requests that don't use the same I/O buffer. In that case the hint may be set when it should actually be clear. This is a rare case though so the risk is low. Some drivers have assert(!flags), which no longer works when BDRV_REQ_REGISTERED_BUF is passed in. These assertions aren't very useful anyway since the functions are called almost exclusively by bdrv_driver_preadv/pwritev() so if we get flags handling right there then the assertion is not needed. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 20221013185908.1297568-7-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> |
||
---|---|---|
.. | ||
accounting.h | ||
aio_task.h | ||
aio-wait.h | ||
aio.h | ||
block_backup.h | ||
block_int-common.h | ||
block_int-global-state.h | ||
block_int-io.h | ||
block_int.h | ||
block-common.h | ||
block-copy.h | ||
block-global-state.h | ||
block-hmp-cmds.h | ||
block-io.h | ||
block.h | ||
blockjob_int.h | ||
blockjob.h | ||
dirty-bitmap.h | ||
export.h | ||
fuse.h | ||
nbd.h | ||
nvme.h | ||
qapi.h | ||
qdict.h | ||
raw-aio.h | ||
replication.h | ||
reqlist.h | ||
snapshot.h | ||
thread-pool.h | ||
throttle-groups.h | ||
write-threshold.h |