[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250226185321.3243593-1-jonathan.lennox@8x8.com>
Date: Wed, 26 Feb 2025 18:53:21 +0000
From: Jonathan Lennox <jonathan.lennox42@...il.com>
To: David Ahern <dsahern@...nel.org>,
netdev@...r.kernel.org,
Stephen Hemminger <stephen@...workplumber.org>
Cc: Jonathan Lennox <jonathan.lennox@....com>
Subject: [PATCH iproute2 v3] tc: Fix rounding in tc_calc_xmittime and tc_calc_xmitsize.
Currently, tc_calc_xmittime and tc_calc_xmitsize round from double to
int three times — once when they call tc_core_time2tick /
tc_core_tick2time (whose argument is int), once when those functions
return (their return value is int), and then finally when the tc_calc_*
functions return. This leads to extremely granular and inaccurate
conversions.
As a result, for example, on my test system (where tick_in_usec=15.625,
clock_factor=1, and hz=1000000000) for a bitrate of 1Gbps, all tc htb
burst values between 0 and 999 bytes get encoded as 0 ticks; all values
between 1000 and 1999 bytes get encoded as 15 ticks (equivalent to 960
bytes); all values between 2000 and 2999 bytes as 31 ticks (1984 bytes);
etc.
The patch changes the code so these calculations are done internally in
floating-point, and only rounded to integer values when the value is
returned. It also changes tc_calc_xmittime to round its calculated value
up, rather than down, to ensure that the calculated time is actually
sufficient for the requested size.
Signed-off-by: Jonathan Lennox <jonathan.lennox@....com>
---
tc/tc_core.c | 6 +++---
tc/tc_core.h | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
View attachment "0001-tc-Fix-rounding-in-tc_calc_xmittime-and-tc_calc_xmit.patch" of type "text/x-patch" (1216 bytes)
Powered by blists - more mailing lists