From 596f0ab572f76befba5c8913c5330bb8d126ba48 Mon Sep 17 00:00:00 2001
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Tue, 26 May 2020 22:04:26 +0900
Subject: [PATCH] Tweak cubic tcp friendly

---
 lib/ngtcp2_cc.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/lib/ngtcp2_cc.c b/lib/ngtcp2_cc.c
index 3359dacb..e4b74d41 100644
--- a/lib/ngtcp2_cc.c
+++ b/lib/ngtcp2_cc.c
@@ -252,6 +252,7 @@ void ngtcp2_cc_cubic_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat,
   ngtcp2_duration t, min_rtt, eta;
   uint64_t target;
   uint64_t tx, kx, time_delta, delta;
+  uint64_t add, tcp_add;
 
   if (pkt->pktns_id == NGTCP2_PKTNS_ID_APP && cc->window_end != -1 &&
       cc->window_end <= pkt->pkt_num) {
@@ -343,19 +344,24 @@ void ngtcp2_cc_cubic_cc_on_pkt_acked(ngtcp2_cc *ccx, ngtcp2_conn_stat *cstat,
   }
 
   if (target > cstat->cwnd) {
-    cstat->cwnd +=
-        cstat->max_udp_payload_size * (target - cstat->cwnd) / cstat->cwnd;
+    add = cstat->max_udp_payload_size * (target - cstat->cwnd) / cstat->cwnd;
   } else {
     /* TODO too small, no increment at all */
-    cstat->cwnd += cstat->max_udp_payload_size / (100 * cstat->cwnd);
+    add = cstat->max_udp_payload_size / (100 * cstat->cwnd);
   }
 
-  cc->w_tcp += cstat->max_udp_payload_size * pkt->pktlen / cc->w_tcp;
+  cc->w_tcp += cstat->max_udp_payload_size * pkt->pktlen * 9 / 17 / cstat->cwnd;
 
   if (cc->w_tcp > cstat->cwnd) {
-    cstat->cwnd = cc->w_tcp;
+    tcp_add =
+        cstat->max_udp_payload_size * (cc->w_tcp - cstat->cwnd) / cstat->cwnd;
+    if (tcp_add > add) {
+      add = tcp_add;
+    }
   }
 
+  cstat->cwnd += add;
+
   ngtcp2_log_info(cc->ccb.log, NGTCP2_LOG_EVENT_RCV,
                   "pkn=%" PRId64 " acked, cubic-ca cwnd=%" PRIu64 " t=%" PRIu64
                   " k=%" PRIi64 " time_delta=%" PRIu64 " delta=%" PRIu64
-- 
GitLab