From ae3dc74933e48a94db4a873272b153e8edbd10cf Mon Sep 17 00:00:00 2001 From: Green Sky Date: Mon, 27 May 2024 20:51:42 +0200 Subject: [PATCH] something here broke it - accounting for rounded down bytes --- solanaceae/ngc_ft1/cubic.cpp | 5 ++++- solanaceae/ngc_ft1/cubic.hpp | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/solanaceae/ngc_ft1/cubic.cpp b/solanaceae/ngc_ft1/cubic.cpp index db45f9f..1d0bcd9 100644 --- a/solanaceae/ngc_ft1/cubic.cpp +++ b/solanaceae/ngc_ft1/cubic.cpp @@ -51,6 +51,7 @@ void CUBIC::onCongestion(void) { const auto current_cwnd = getCWnD(); // TODO: remove, only used by logging? const auto current_wnd = getWindow(); // respects cwnd and fwnd + _bytes_leftover = 0; resetReductionTimer(); if (current_cwnd < _window_max) { @@ -90,7 +91,7 @@ int64_t CUBIC::canSend(float time_delta) { } const auto window = getCWnD(); - int64_t cspace_bytes = window - _in_flight_bytes; + int64_t cspace_bytes = (window - _in_flight_bytes) + _bytes_leftover; if (cspace_bytes < MAXIMUM_SEGMENT_DATA_SIZE) { return 0u; } @@ -106,6 +107,8 @@ int64_t CUBIC::canSend(float time_delta) { // limit to whole packets int64_t cspace_pkgs = (cspace_bytes / MAXIMUM_SEGMENT_DATA_SIZE) * MAXIMUM_SEGMENT_DATA_SIZE; + _bytes_leftover = cspace_bytes - cspace_pkgs; + return std::min(cspace_pkgs, fspace_pkgs); } diff --git a/solanaceae/ngc_ft1/cubic.hpp b/solanaceae/ngc_ft1/cubic.hpp index 621800d..7646058 100644 --- a/solanaceae/ngc_ft1/cubic.hpp +++ b/solanaceae/ngc_ft1/cubic.hpp @@ -19,6 +19,7 @@ struct CUBIC : public FlowOnly { //double _window_last_max {2.f * MAXIMUM_SEGMENT_SIZE}; double _time_since_reduction {12.f}; // warm start + int64_t _bytes_leftover {0}; private: void updateReductionTimer(float time_delta);