• Jens Axboe's avatar
    io_uring/uring_cmd: defer SQE copying until it's needed · 5eff57fa
    Jens Axboe authored
    The previous commit turned on async data for uring_cmd, and did the
    basic conversion of setting everything up on the prep side. However, for
    a lot of use cases, -EIOCBQUEUED will get returned on issue, as the
    operation got successfully queued. For that case, a persistent SQE isn't
    needed, as it's just used for issue.
    
    Unless execution goes async immediately, defer copying the double SQE
    until it's necessary.
    
    This greatly reduces the overhead of such commands, as evidenced by
    a perf diff from before and after this change:
    
        10.60%     -8.58%  [kernel.vmlinux]  [k] io_uring_cmd_prep
    
    where the prep side drops from 10.60% to ~2%, which is more expected.
    Performance also rises from ~113M IOPS to ~122M IOPS, bringing us back
    to where it was before the async command prep.
    Tested-by: default avatarAnuj Gupta <anuj20.g@samsung.com>
    Reviewed-by: default avatarAnuj Gupta <anuj20.g@samsung.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    5eff57fa
uring_cmd.c 9.55 KB