esnet / iperf

iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool
Other
6.92k stars 1.28k forks source link

Zero copy for sending and receiving #1286

Open skoehler opened 2 years ago

skoehler commented 2 years ago

Context

Enhancement Request

Currently, --zerocopy is only listed as a client option and the documentation states, that zerocopy is only used for sending data. I don't follow. For UDP we have recvmmsg and sendmmsg. So clearly, zero copy APIs exist both for sending and receiving data. Why would iperf3 not use zero copy for receiving data? It will likely reduce CPU load and package drops on the receiver side.

Also --reverse swaps the roles of client and server. Now the server is sending. Is the --zerocopy option forwarded to the server in such a case?

Have an option to enable zero copy for sending and receiving. It could also be separate options. If these options remain client options, maybe be clearer about whether these options are forwarded to the server. If the options are not forwarded to the server, then it should be possible to set zerocopy for the server as well.

n/a

davidBar-On commented 2 years ago

Is the --zerocopy option forwarded to the server

--zerocopy option is forwarded to the server- see PR #1204.

For UDP we have recvmmsg and sendmmsg. So clearly, zero copy APIs exist both for sending and receiving data.

Adding UDP support using sendmmsg is available in PR #1034. As noted in this PR, using recvmmsg doesn't seem to help and it may even reduce the throughput.

For TCP, sendfile is used for zero copy.