Browse Source

Merge pull request #88 from paullouisageneau/sctp-tuning

Tune SCTP
Paul-Louis Ageneau 5 years ago
parent
commit
1aedbddc55
4 changed files with 15 additions and 9 deletions
  1. 1 1
      deps/libjuice
  2. 2 4
      src/dtlstransport.cpp
  3. 11 3
      src/sctptransport.cpp
  4. 1 1
      test/main.cpp

+ 1 - 1
deps/libjuice

@@ -1 +1 @@
-Subproject commit eb478507d88c9847e1d3556b0cdb96f8e49b0dfa
+Subproject commit fc128c78310bc083a4ecc285dd4cbe0c7ed500ea

+ 2 - 4
src/dtlstransport.cpp

@@ -36,12 +36,10 @@ namespace rtc {
 #if USE_GNUTLS
 
 void DtlsTransport::Init() {
-	// Nothing to do
+	gnutls_global_init(); // optional
 }
 
-void DtlsTransport::Cleanup() {
-	// Nothing to do
-}
+void DtlsTransport::Cleanup() { gnutls_global_deinit(); }
 
 DtlsTransport::DtlsTransport(shared_ptr<IceTransport> lower, certificate_ptr certificate,
                              verifier_callback verifierCallback, state_callback stateChangeCallback)

+ 11 - 3
src/sctptransport.cpp

@@ -61,6 +61,14 @@ void SctpTransport::Init() {
 	usrsctp_sysctl_set_sctp_rto_initial_default(1 * 1000);         // ms
 	usrsctp_sysctl_set_sctp_init_rto_max_default(10 * 1000);       // ms
 	usrsctp_sysctl_set_sctp_heartbeat_interval_default(10 * 1000); // ms
+
+	usrsctp_sysctl_set_sctp_max_chunks_on_queue(10 * 1024);
+
+	// Change congestion control from the default TCP Reno (RFC 2581) to H-TCP
+	usrsctp_sysctl_set_sctp_default_cc_module(SCTP_CC_HTCP);
+
+	// Increase the initial window size to 10 MTUs (RFC 6928)
+	usrsctp_sysctl_set_sctp_initial_cwnd(10);
 }
 
 void SctpTransport::Cleanup() {
@@ -158,11 +166,11 @@ SctpTransport::SctpTransport(std::shared_ptr<Transport> lower, uint16_t port,
 	// The default send and receive window size of usrsctp is 256KiB, which is too small for
 	// realistic RTTs, therefore we increase it to 1MiB for better performance.
 	// See https://bugzilla.mozilla.org/show_bug.cgi?id=1051685
-	int bufSize = 1024 * 1024;
-	if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_RCVBUF, &bufSize, sizeof(bufSize)))
+	int bufferSize = 1024 * 1024;
+	if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize)))
 		throw std::runtime_error("Could not set SCTP recv buffer size, errno=" +
 		                         std::to_string(errno));
-	if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_SNDBUF, &bufSize, sizeof(bufSize)))
+	if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize)))
 		throw std::runtime_error("Could not set SCTP send buffer size, errno=" +
 		                         std::to_string(errno));
 

+ 1 - 1
test/main.cpp

@@ -33,7 +33,7 @@ void test_benchmark() {
 	if (goodput == 0)
 		throw runtime_error("No data received");
 
-	const size_t threshold = 5000; // 5 MB/s;
+	const size_t threshold = 1000; // 1 MB/s;
 	if (goodput < threshold)
 		throw runtime_error("Goodput is too low");
 }