Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added maximum BW limit for retransmissions #2714

Merged
merged 11 commits into from
Aug 16, 2023

Conversation

maxsharabayko
Copy link
Collaborator

@maxsharabayko maxsharabayko commented Apr 11, 2023

Added the SRTO_MAXREXMITBW socket option to set the maximum BW limit for retransmissions:

  • -1 (default - unlimited;
  • 0 do not allow retransmissions;
  • Bytes/s - BW usage limit for packet retransmissions (including 16 bytes of SRT header).

Addresses FR #2701.

TODO

  • The SRTO_MAXREXMITBW socket option has to be under ifdef if it goes to a patch version.
  • If the retransmission was blocked and there is no original packet to send, the SRT socket is not rescheduled for the next sending. Rescheduling happens if a new payload is submitted for sending or upon reception of a NAK. In case of a live streaming configuration, this works quite well, but might not be quite efficient. The next wake-up should happen no later than 100ms (sampling interval). However, this would require reworking the logic of SND scheduling...
  • How to tell if a retransmission was blocked? Need sndPktRexmitBlocked statistics?
  • Add SRTO_MAXREXMITBW to the docs.

@maxsharabayko maxsharabayko added Type: Enhancement Indicates new feature requests [core] Area: Changes in SRT library core labels Apr 11, 2023
@maxsharabayko maxsharabayko added this to the Backlog milestone Apr 11, 2023
@maxsharabayko
Copy link
Collaborator Author

Testing Scenario

  • 20 Mbps streaming (via localhost, RTT < 1ms).
  • 10% packet loss.

Max Resmit BW 1 Mbps (only 5% packet loss)

srt-xtransmit generate "srt://:4200?maxrexmitbw=125000" --sendrate 20Mbps --enable-metrics --statsfile mxe-snd.csv --statsfreq 1s --loglevel note --duration 20s

srt-xtransmit receive "srt://127.0.0.1:4200" --enable-metrics --statsfile mxe-rcv.csv --statsfreq 1s

Sender

image

Receiver

image

Max Resmit BW -1 (Unlimited)

srt-xtransmit generate "srt://:4200?maxrexmitbw=-1" --sendrate 20Mbps --enable-metrics --statsfile mxe-snd.csv --statsfreq 1s --loglevel note --duration 20s

srt-xtransmit receive "srt://127.0.0.1:4200" --enable-metrics --statsfile mxe-rcv.csv --statsfreq 1s

Sender

image

Receiver

image

Max Resmit BW 3 Mbps (up to 30% packet loss)

srt-xtransmit generate "srt://:4200?maxrexmitbw=375000" --sendrate 20Mbps --enable-metrics --statsfile mxe-snd.csv --statsfreq 1s --loglevel note --duration 20s

srt-xtransmit receive "srt://127.0.0.1:4200" --enable-metrics --statsfile mxe-rcv.csv --statsfreq 1s

Sender

image

Receiver

image

srtcore/core.cpp Outdated Show resolved Hide resolved
srtcore/core.cpp Outdated Show resolved Hide resolved
srtcore/buffer_tools.h Outdated Show resolved Hide resolved
srtcore/buffer_tools.cpp Outdated Show resolved Hide resolved
@maxsharabayko maxsharabayko marked this pull request as ready for review August 15, 2023 14:29
@maxsharabayko maxsharabayko merged commit 78a1020 into Haivision:master Aug 16, 2023
10 checks passed
@maxsharabayko maxsharabayko deleted the hotfix/rexmitbw-limit branch August 16, 2023 06:43
guilletrejo added a commit to swxtchio/srt that referenced this pull request Aug 23, 2023
* [core] Fix crypto mode auto for listener sender (Haivision#2711).


Co-authored-by: oviano <ovcollyer@mac.com>

* [build] Upgraded CI: ubuntu to version 20.04 (Haivision#2682).

* [docs] Added the link for registration in slack to the getting started table (Haivision#2721).

* [core] Fixed FEC Emergency resize crash (Haivision#2717).

Fixed minimum history condition.

* [core] Fixed various compiler warnings on various platforms (Haivision#2679).

* [core] Minor fix of variable shadowing.

* [tests] Minor fix of variable shadowing.

* [build] Add -Wshadow=local to CMake build flags.
Supported since GCC 7.0.

* [core] Correct remaining endianness issues

Fixes the last two remaining test failures on big-endian.  These
operations were all already no-ops on little-endian, and unnecessarily
byteswapped the IP addresses on big-endian.

Closes: Haivision#2697

* [docs] Minor updates to AEAD docs plus changed v1.6.0 to 1.5.2 in some files

* [build] Fix downversioning of _WIN32_WINNT (Haivision#2754).

* [core] Fixed unhandled error in haicrypt (Haivision#2685).

* [core] Use overlapped WSASendTo to avoid loss in UDP sending (Haivision#2632).

* [core] Add volatile keyword to asm block in rdtsc (Haivision#2759).

* [core] Fixed srctime from closing socket was mistakenly cleared

* [core] Fixed group read-ready epoll events.

* [core] Removed unused CUDTGroup::m_Positions.

* [core] Perf improvement of group reading.

* [core] Fixed RCV buffer initialization in Rendezvous.

* [docs] Updating the explicit information for binding to IPv6 wildcard (Haivision#2765).

* [tests] Added custom main with transparent parameters for tests (Haivision#2681).

* [core] Fix memory leak when can't buffer a HS packet (Haivision#2757).

* [core] Refactor CRcvQueue::storePkt(..) for better resource management (Haivision#2775).

* [core] Fix hang up on not enough space in the RCV buffer (Haivision#2745).

When there is space available in the receiving buffer after it is full,
send an ack to allow the sender to resume transmission.
Reschedule sending if ACK decreases the flight span after sending is congested.

Co-authored-by: Maxim Sharabayko <maxlovic@gmail.com>

* [core] fix tsbpd() may deadlock with processCtrlShutdown()

* [core] Slightly optimize the RCV drop by message number (Haivision#2686).

Some minor improvements of logs and comments.

* [core] Rejection not undertaken in rendezvous after KMX failure (Haivision#2692).

* [core] Fix: In rendezvous when processing resulted in ACCEPT it was still sending rejection

* [core] Minor code clean up in CRateEstimator.

* [core] Initialize ISN and PeerISN in CUDT.

* [core] Drop unencrypted packets in GCM mode.

* [apps] Fix the build for target without IP_ADD_SOURCE_MEMBERSHIP (Haivision#2779).

* [core] Added maximum BW limit for retransmissions (Haivision#2714).

* [API] SRT version raised to 1.5.3.

* [apps] Fixed conditional IP_ADD_SOURCE_MEMBERSHIP in testmedia (Haivision#2780).

* [core] Fixed SRT_ATTR_REQUIRES use.

* [build] Added missing public header files in Windows binary installer (Haivision#2784).

The header file access_control.h was added to the source tree
at some point but was not added to the Windows installer.

---------

Co-authored-by: Maxim Sharabayko <maxlovic@gmail.com>
Co-authored-by: oviano <ovcollyer@mac.com>
Co-authored-by: Sektor van Skijlen <ethouris@gmail.com>
Co-authored-by: Maria Sharabayko <41019697+mbakholdina@users.noreply.github.com>
Co-authored-by: Maxim Sharabayko <maxsharabayko@haivision.com>
Co-authored-by: matoro <matoro@users.noreply.github.com>
Co-authored-by: Maria Sharabayko <msharabayko@haivision.com>
Co-authored-by: Steve Lhomme <robux4@ycbcr.xyz>
Co-authored-by: Aaron Jencks <32805004+aaron-jencks@users.noreply.github.com>
Co-authored-by: Guangqing Chen <hi@goushi.me>
Co-authored-by: john <hondaxiao@tencent.com>
Co-authored-by: yomnes0 <127947185+yomnes0@users.noreply.github.com>
Co-authored-by: Mikołaj Małecki <mmalecki@haivision.com>
Co-authored-by: Jose Santiago <jsantiago@haivision.com>
Co-authored-by: Thierry Lelegard <lelegard@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[API] Area: Changes in SRT library API [core] Area: Changes in SRT library core Type: Enhancement Indicates new feature requests
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant