No select() when reading stream data #1787
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Version of iperf3 (or development branch, such as
master
or3.1-STABLE
) to which this pull request applies:master
Issues fixed (if any): High UDP packet loss, compare with nuttcp #1707
Brief description of code changes (suitable for use as a commit message):
Suggested solution to make iperf3 UDP performance comparable to nuttcp (and probably other tools). The change is to not use
select()
when reading stream data. This by replacing in these case the calls toNread()
to calls toNread_no_select()
(new function).The assumption is that the
select()
inNread()
was added to make sure that the main thread will not get stuck (when reading control/JSON data), and that it is not needed for the data streams. E.g., the server will not get stuck even if one of its data streams threads is stuck, as the that thread will be canceled at the end of the test.Although the reported issue was only about UDP, the change was done also for TCP, SCTP, as it seems reasonable to do. If that may cause issues, the change to these protocols may be removed.