On 7/17/22 8:19 PM, David Ahern wrote:
Haven't seen it back then. In general io_uring doesn't stop submitting
requests if one request fails, at least because we're trying to execute
requests asynchronously. And in general, requests can get executed
out of order, so most probably submitting a bunch of requests to a single
TCP sock without any ordering on io_uring side is likely a bug.
TCP socket buffer fills resulting in a partial send (i.e, for a given
sqe submission only part of the write/send succeeded). io_uring was not
handling that case.
I'll try to find some time to resurrect the iperf3 patch and try top of
tree kernel.
With your zc_v5 branch (plus the init fix on using msg->sg_from_iter),
iperf3 with io_uring support (non-ZC case) no longer shows completions
with incomplete sends. So that is good improvement over the last time I
tried it.
However, adding in the ZC support and that problem resurfaces - a lot of
completions are for an incomplete size.
liburing comes from your tree, zc_v4 branch. Upstream does not have
support for notifications yet, so I can not move to it.
Changes to iperf3 are here:
https://github.com/dsahern/iperf mods-3.10-io_uring