> Am 09.01.2026 um 21:24 schrieb Dmitry Karpov <[email protected]>: > > Hi Stefan, > Thanks a lot for looking into it! > > I tried your PR, and it seems that it has improved the precision in the most > problematic cases (I tried it on 1MB and 2MB downloads), and now I don't see > any cases that look like the rate limit is not applied. > But it looks like it tends to "overthrottle", and sometimes the measured > transfer speed is below the rate limit more than ~30-50% (please see my stats > below). > > In my opinion, a small "overthrottling" (< 5%) is better than > "underthrottling", but transfer speeds that drop too low below the rate limit > may be create issues for some applications. > But hopefully, you can fine tune it, and I will be happy to help with testing.
Ah, right. That does not work. I changed strategy in https://github.com/curl/curl/pull/20228 and hope that this addresses all cases better now. Would love to get your feedback. Cheers, Stefan > > Thanks! > Dmitry > > Here are the stats for 1MB and 2MB download tests for ~700 mbps, 50 mbps, 20 > mbps network speeds and 8 mbps, 16 mbps, 20 mbps and 32 mbps rate limits: > > ################################################################################### > 1 MB downloads > ################################################################################### > > Speed limit test [LAN (~700 mbps)], iterations=5 > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=8000000 bps > time=1072 ms, dnld=1048576 B, speed=7820634 bps, spd_diff=-179366 bps, > pct=-2.2 % > time=1071 ms, dnld=1048576 B, speed=7830197 bps, spd_diff=-169803 bps, > pct=-2.1 % > time=1063 ms, dnld=1048576 B, speed=7890697 bps, spd_diff=-109303 bps, > pct=-1.4 % > time=1055 ms, dnld=1048576 B, speed=7950382 bps, spd_diff=-49618 bps, > pct=-0.6 % > time=1071 ms, dnld=1048576 B, speed=7831827 bps, spd_diff=-168173 bps, > pct=-2.1 % > -------------------------------------------------------------------- > avg_deviation=-1.7 %, max_deviation=-2.2 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=16000000 bps > time=542 ms, dnld=1048576 B, speed=15463841 bps, spd_diff=-536159 bps, > pct=-3.4 % > time=536 ms, dnld=1048576 B, speed=15639592 bps, spd_diff=-360408 bps, > pct=-2.3 % > time=542 ms, dnld=1048576 B, speed=15464154 bps, spd_diff=-535846 bps, > pct=-3.3 % > time=542 ms, dnld=1048576 B, speed=15469744 bps, spd_diff=-530256 bps, > pct=-3.3 % > time=527 ms, dnld=1048576 B, speed=15909541 bps, spd_diff=-90459 bps, > pct=-0.6 % > -------------------------------------------------------------------- > avg_deviation=-2.6 %, max_deviation=-3.4 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=20000000 bps > time=439 ms, dnld=1048576 B, speed=19103703 bps, spd_diff=-896297 bps, > pct=-4.5 % > time=443 ms, dnld=1048576 B, speed=18897772 bps, spd_diff=-1102228 bps, > pct=-5.5 % > time=431 ms, dnld=1048576 B, speed=19429137 bps, spd_diff=-570863 bps, > pct=-2.9 % > time=441 ms, dnld=1048576 B, speed=19018250 bps, spd_diff=-981750 bps, > pct=-4.9 % > time=431 ms, dnld=1048576 B, speed=19433368 bps, spd_diff=-566632 bps, > pct=-2.8 % > -------------------------------------------------------------------- > avg_deviation=-4.1 %, max_deviation=-5.5 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=32000000 bps > time=283 ms, dnld=1048576 B, speed=29608454 bps, spd_diff=-2391546 bps, > pct=-7.5 % > time=286 ms, dnld=1048576 B, speed=29281244 bps, spd_diff=-2718756 bps, > pct=-8.5 % > time=290 ms, dnld=1048576 B, speed=28913572 bps, spd_diff=-3086428 bps, > pct=-9.6 % > time=285 ms, dnld=1048576 B, speed=29405957 bps, spd_diff=-2594043 bps, > pct=-8.1 % > time=287 ms, dnld=1048576 B, speed=29219232 bps, spd_diff=-2780768 bps, > pct=-8.7 % > -------------------------------------------------------------------- > avg_deviation=-8.5 %, max_deviation=-9.6 % > > ################################################################################### > Speed limit test [50 mbps], iterations=5 > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=8000000 bps > time=1057 ms, dnld=1048576 B, speed=7929438 bps, spd_diff=-70562 bps, > pct=-0.9 % > time=1064 ms, dnld=1048576 B, speed=7882452 bps, spd_diff=-117548 bps, > pct=-1.5 % > time=1068 ms, dnld=1048576 B, speed=7850084 bps, spd_diff=-149916 bps, > pct=-1.9 % > time=1074 ms, dnld=1048576 B, speed=7806653 bps, spd_diff=-193347 bps, > pct=-2.4 % > time=1066 ms, dnld=1048576 B, speed=7866227 bps, spd_diff=-133773 bps, > pct=-1.7 % > -------------------------------------------------------------------- > avg_deviation=-1.7 %, max_deviation=-2.4 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=16000000 bps > time=522 ms, dnld=1048576 B, speed=16059423 bps, spd_diff=59423 bps, pct=0.4 % > time=540 ms, dnld=1048576 B, speed=15523564 bps, spd_diff=-476436 bps, > pct=-3.0 % > time=549 ms, dnld=1048576 B, speed=15274231 bps, spd_diff=-725769 bps, > pct=-4.5 % > time=539 ms, dnld=1048576 B, speed=15544361 bps, spd_diff=-455639 bps, > pct=-2.8 % > time=539 ms, dnld=1048576 B, speed=15552027 bps, spd_diff=-447973 bps, > pct=-2.8 % > -------------------------------------------------------------------- > avg_deviation=-2.6 %, max_deviation=-4.5 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=20000000 bps > time=577 ms, dnld=1048576 B, speed=14525426 bps, spd_diff=-5474574 bps, > pct=-27.4 % > time=602 ms, dnld=1048576 B, speed=13927046 bps, spd_diff=-6072954 bps, > pct=-30.4 % > time=587 ms, dnld=1048576 B, speed=14268378 bps, spd_diff=-5731622 bps, > pct=-28.7 % > time=600 ms, dnld=1048576 B, speed=13957796 bps, spd_diff=-6042204 bps, > pct=-30.2 % > time=577 ms, dnld=1048576 B, speed=14527941 bps, spd_diff=-5472059 bps, > pct=-27.4 % > -------------------------------------------------------------------- > avg_deviation=-28.8 %, max_deviation=-30.4 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=32000000 bps > time=431 ms, dnld=1048576 B, speed=19442602 bps, spd_diff=-12557398 bps, > pct=-39.2 % > time=409 ms, dnld=1048576 B, speed=20489454 bps, spd_diff=-11510546 bps, > pct=-36.0 % > time=427 ms, dnld=1048576 B, speed=19600100 bps, spd_diff=-12399900 bps, > pct=-38.7 % > time=426 ms, dnld=1048576 B, speed=19689534 bps, spd_diff=-12310466 bps, > pct=-38.5 % > time=419 ms, dnld=1048576 B, speed=19977490 bps, spd_diff=-12022510 bps, > pct=-37.6 % > -------------------------------------------------------------------- > avg_deviation=-38.0 %, max_deviation=-39.2 % > > ################################################################################### > Speed limit test [20 mbps], iterations=5 > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=8000000 bps > time=1066 ms, dnld=1048576 B, speed=7863558 bps, spd_diff=-136442 bps, > pct=-1.7 % > time=1068 ms, dnld=1048576 B, speed=7848108 bps, spd_diff=-151892 bps, > pct=-1.9 % > time=1062 ms, dnld=1048576 B, speed=7892040 bps, spd_diff=-107960 bps, > pct=-1.3 % > time=1057 ms, dnld=1048576 B, speed=7934613 bps, spd_diff=-65387 bps, > pct=-0.8 % > time=1069 ms, dnld=1048576 B, speed=7844182 bps, spd_diff=-155818 bps, > pct=-1.9 % > -------------------------------------------------------------------- > avg_deviation=-1.5 %, max_deviation=-1.9 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=16000000 bps > time=551 ms, dnld=1048576 B, speed=15206422 bps, spd_diff=-793578 bps, > pct=-5.0 % > time=528 ms, dnld=1048576 B, speed=15882191 bps, spd_diff=-117809 bps, > pct=-0.7 % > time=526 ms, dnld=1048576 B, speed=15942559 bps, spd_diff=-57441 bps, > pct=-0.4 % > time=542 ms, dnld=1048576 B, speed=15468688 bps, spd_diff=-531312 bps, > pct=-3.3 % > time=525 ms, dnld=1048576 B, speed=15951199 bps, spd_diff=-48801 bps, > pct=-0.3 % > -------------------------------------------------------------------- > avg_deviation=-1.9 %, max_deviation=-5.0 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=20000000 bps > time=776 ms, dnld=1048576 B, speed=10796719 bps, spd_diff=-9203281 bps, > pct=-46.0 % > time=792 ms, dnld=1048576 B, speed=10591462 bps, spd_diff=-9408538 bps, > pct=-47.0 % > time=773 ms, dnld=1048576 B, speed=10841258 bps, spd_diff=-9158742 bps, > pct=-45.8 % > time=793 ms, dnld=1048576 B, speed=10566860 bps, spd_diff=-9433140 bps, > pct=-47.2 % > time=790 ms, dnld=1048576 B, speed=10612754 bps, spd_diff=-9387246 bps, > pct=-46.9 % > -------------------------------------------------------------------- > avg_deviation=-46.6 %, max_deviation=-47.2 % > > Url=http://192.168.1.218/Data/file_1M.bin, max_speed=32000000 bps > time=655 ms, dnld=1048576 B, speed=12793733 bps, spd_diff=-19206267 bps, > pct=-60.0 % > time=653 ms, dnld=1048576 B, speed=12843644 bps, spd_diff=-19156356 bps, > pct=-59.9 % > time=629 ms, dnld=1048576 B, speed=13334787 bps, spd_diff=-18665213 bps, > pct=-58.3 % > time=617 ms, dnld=1048576 B, speed=13579578 bps, spd_diff=-18420422 bps, > pct=-57.6 % > time=648 ms, dnld=1048576 B, speed=12931094 bps, spd_diff=-19068906 bps, > pct=-59.6 % > -------------------------------------------------------------------- > avg_deviation=-59.1 %, max_deviation=-60.0 % > > > ################################################################################### > 2 MB downloads > ################################################################################### > > Speed limit test [LAN (~700 mbps)], iterations=5 > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=8000000 bps > time=2099 ms, dnld=2097152 B, speed=7991289 bps, spd_diff=-8711 bps, pct=-0.1 > % > time=2117 ms, dnld=2097152 B, speed=7923378 bps, spd_diff=-76622 bps, > pct=-1.0 % > time=2114 ms, dnld=2097152 B, speed=7933832 bps, spd_diff=-66168 bps, > pct=-0.8 % > time=2127 ms, dnld=2097152 B, speed=7887428 bps, spd_diff=-112572 bps, > pct=-1.4 % > time=2125 ms, dnld=2097152 B, speed=7892716 bps, spd_diff=-107284 bps, > pct=-1.3 % > -------------------------------------------------------------------- > avg_deviation=-0.9 %, max_deviation=-1.4 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=16000000 bps > time=1062 ms, dnld=2097152 B, speed=15793888 bps, spd_diff=-206112 bps, > pct=-1.3 % > time=1069 ms, dnld=2097152 B, speed=15680930 bps, spd_diff=-319070 bps, > pct=-2.0 % > time=1070 ms, dnld=2097152 B, speed=15674103 bps, spd_diff=-325897 bps, > pct=-2.0 % > time=1078 ms, dnld=2097152 B, speed=15550571 bps, spd_diff=-449429 bps, > pct=-2.8 % > time=1068 ms, dnld=2097152 B, speed=15694690 bps, spd_diff=-305310 bps, > pct=-1.9 % > -------------------------------------------------------------------- > avg_deviation=-2.0 %, max_deviation=-2.8 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=20000000 bps > time=860 ms, dnld=2097152 B, speed=19486411 bps, spd_diff=-513589 bps, > pct=-2.6 % > time=845 ms, dnld=2097152 B, speed=19837391 bps, spd_diff=-162609 bps, > pct=-0.8 % > time=839 ms, dnld=2097152 B, speed=19990582 bps, spd_diff=-9418 bps, pct=-0.0 > % > time=845 ms, dnld=2097152 B, speed=19849525 bps, spd_diff=-150475 bps, > pct=-0.8 % > time=869 ms, dnld=2097152 B, speed=19289411 bps, spd_diff=-710589 bps, > pct=-3.6 % > -------------------------------------------------------------------- > avg_deviation=-1.5 %, max_deviation=-3.6 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=32000000 bps > time=541 ms, dnld=2097152 B, speed=30958042 bps, spd_diff=-1041958 bps, > pct=-3.3 % > time=541 ms, dnld=2097152 B, speed=30967700 bps, spd_diff=-1032300 bps, > pct=-3.2 % > time=541 ms, dnld=2097152 B, speed=31003867 bps, spd_diff=-996133 bps, > pct=-3.1 % > time=542 ms, dnld=2097152 B, speed=30947307 bps, spd_diff=-1052693 bps, > pct=-3.3 % > time=545 ms, dnld=2097152 B, speed=30776880 bps, spd_diff=-1223120 bps, > pct=-3.8 % > -------------------------------------------------------------------- > avg_deviation=-3.3 %, max_deviation=-3.8 % > > ################################################################################### > Speed limit test [50 mbps], iterations=5 > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=8000000 bps > time=2112 ms, dnld=2097152 B, speed=7942723 bps, spd_diff=-57277 bps, > pct=-0.7 % > time=2118 ms, dnld=2097152 B, speed=7918513 bps, spd_diff=-81487 bps, > pct=-1.0 % > time=2114 ms, dnld=2097152 B, speed=7935585 bps, spd_diff=-64415 bps, > pct=-0.8 % > time=2119 ms, dnld=2097152 B, speed=7915999 bps, spd_diff=-84001 bps, > pct=-1.1 % > time=2106 ms, dnld=2097152 B, speed=7963194 bps, spd_diff=-36806 bps, > pct=-0.5 % > -------------------------------------------------------------------- > avg_deviation=-0.8 %, max_deviation=-1.1 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=16000000 bps > time=1065 ms, dnld=2097152 B, speed=15742286 bps, spd_diff=-257714 bps, > pct=-1.6 % > time=1072 ms, dnld=2097152 B, speed=15641866 bps, spd_diff=-358134 bps, > pct=-2.2 % > time=1075 ms, dnld=2097152 B, speed=15594077 bps, spd_diff=-405923 bps, > pct=-2.5 % > time=1067 ms, dnld=2097152 B, speed=15721751 bps, spd_diff=-278249 bps, > pct=-1.7 % > time=1067 ms, dnld=2097152 B, speed=15714653 bps, spd_diff=-285347 bps, > pct=-1.8 % > -------------------------------------------------------------------- > avg_deviation=-2.0 %, max_deviation=-2.5 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=20000000 bps > time=935 ms, dnld=2097152 B, speed=17931176 bps, spd_diff=-2068824 bps, > pct=-10.3 % > time=939 ms, dnld=2097152 B, speed=17851539 bps, spd_diff=-2148461 bps, > pct=-10.7 % > time=927 ms, dnld=2097152 B, speed=18079130 bps, spd_diff=-1920870 bps, > pct=-9.6 % > time=922 ms, dnld=2097152 B, speed=18195737 bps, spd_diff=-1804263 bps, > pct=-9.0 % > time=935 ms, dnld=2097152 B, speed=17942471 bps, spd_diff=-2057529 bps, > pct=-10.3 % > -------------------------------------------------------------------- > avg_deviation=-10.0 %, max_deviation=-10.7 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=32000000 bps > time=537 ms, dnld=2097152 B, speed=31188242 bps, spd_diff=-811758 bps, > pct=-2.5 % > time=535 ms, dnld=2097152 B, speed=31324971 bps, spd_diff=-675029 bps, > pct=-2.1 % > time=524 ms, dnld=2097152 B, speed=31993531 bps, spd_diff=-6469 bps, pct=-0.0 > % > time=549 ms, dnld=2097152 B, speed=30523564 bps, spd_diff=-1476436 bps, > pct=-4.6 % > time=539 ms, dnld=2097152 B, speed=31108610 bps, spd_diff=-891390 bps, > pct=-2.8 % > -------------------------------------------------------------------- > avg_deviation=-2.4 %, max_deviation=-4.6 % > > ################################################################################### > Speed limit test [20 mbps], iterations=5 > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=8000000 bps > time=2109 ms, dnld=2097152 B, speed=7951826 bps, spd_diff=-48174 bps, > pct=-0.6 % > time=2118 ms, dnld=2097152 B, speed=7920782 bps, spd_diff=-79218 bps, > pct=-1.0 % > time=2117 ms, dnld=2097152 B, speed=7923865 bps, spd_diff=-76135 bps, > pct=-1.0 % > time=2101 ms, dnld=2097152 B, speed=7983159 bps, spd_diff=-16841 bps, > pct=-0.2 % > time=2120 ms, dnld=2097152 B, speed=7912620 bps, spd_diff=-87380 bps, > pct=-1.1 % > -------------------------------------------------------------------- > avg_deviation=-0.8 %, max_deviation=-1.1 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=16000000 bps > time=1062 ms, dnld=2097152 B, speed=15792758 bps, spd_diff=-207242 bps, > pct=-1.3 % > time=1051 ms, dnld=2097152 B, speed=15954445 bps, spd_diff=-45555 bps, > pct=-0.3 % > time=1075 ms, dnld=2097152 B, speed=15595788 bps, spd_diff=-404212 bps, > pct=-2.5 % > time=1071 ms, dnld=2097152 B, speed=15661125 bps, spd_diff=-338875 bps, > pct=-2.1 % > time=1076 ms, dnld=2097152 B, speed=15588282 bps, spd_diff=-411718 bps, > pct=-2.6 % > -------------------------------------------------------------------- > avg_deviation=-1.8 %, max_deviation=-2.6 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=20000000 bps > time=1170 ms, dnld=2097152 B, speed=14327818 bps, spd_diff=-5672182 bps, > pct=-28.4 % > time=1157 ms, dnld=2097152 B, speed=14492201 bps, spd_diff=-5507799 bps, > pct=-27.5 % > time=1158 ms, dnld=2097152 B, speed=14477419 bps, spd_diff=-5522581 bps, > pct=-27.6 % > time=1146 ms, dnld=2097152 B, speed=14630854 bps, spd_diff=-5369146 bps, > pct=-26.8 % > time=1175 ms, dnld=2097152 B, speed=14269531 bps, spd_diff=-5730469 bps, > pct=-28.7 % > -------------------------------------------------------------------- > avg_deviation=-27.8 %, max_deviation=-28.7 % > > Url=http://192.168.1.218/Data/file_2M.bin, max_speed=32000000 bps > time=873 ms, dnld=2097152 B, speed=19210450 bps, spd_diff=-12789550 bps, > pct=-40.0 % > time=873 ms, dnld=2097152 B, speed=19201589 bps, spd_diff=-12798411 bps, > pct=-40.0 % > time=886 ms, dnld=2097152 B, speed=18935311 bps, spd_diff=-13064689 bps, > pct=-40.8 % > time=873 ms, dnld=2097152 B, speed=19209900 bps, spd_diff=-12790100 bps, > pct=-40.0 % > time=875 ms, dnld=2097152 B, speed=19170017 bps, spd_diff=-12829983 bps, > pct=-40.1 % > -------------------------------------------------------------------- > avg_deviation=-40.2 %, max_deviation=-40.8 % > > > -----Original Message----- > From: Stefan Eissing <[email protected]> > Sent: Friday, January 9, 2026 4:31 AM > To: libcurl development <[email protected]> > Cc: Dmitry Karpov <[email protected]> > Subject: [EXTERNAL] Re: Rate limit regressions in libcurl 8.18.0 vs 8.17.0 > > Dimitry, > > having let this stew around in my mind the last couple of days, I came up > with a tweak that hopefully addresses your issue. > > Could you throw https://github.com/curl/curl/pull/20228 into your statistics > grinder? I would be interested to hear how it turns out. > > Thanks, > Stefan > >> Am 07.01.2026 um 21:16 schrieb Dmitry Karpov via curl-library >> <[email protected]>: >> >>> My point is that just the same statement: "there are cases that look like >>> as the rate limit hasn’t applied at all" - is also true for 8.6.0. The only >>> difference is that with 8.6.0 you have to go to smaller transfer sizes to >>> see the effect. >> >> No, this is not true. As I mentioned in my message, in 8.6.0, the smaller >> transfer sizes decreased accuracy, but it was always applied unless the >> transfers were extremely small. >> But in 8.18.0 we have cases when no rate limit is applied to the transfers >> depending on run-time conditions. >> >>> So yes, at a given transfer size the behavior may be different, because the >>> rate-limiting "resolution" has changed, but claiming that this is a radical >>> change in behavior seems wrong. >> >> It is a radical change, because we now have cases in 8.18.0, when the rate >> limit is either not applied at all or there is a huge gap between the rate >> limit and the measured transfer speed. >> And it may increase the operational costs significantly for libcurl users in >> such cases. >> >> Let’s consider an example from my test where the rate limit wasn’t applied: >> Url=… file_1M.bin, max_speed=20000000 bps >> time=18 ms, dnld=1048576 B, speed=457518843 bps, spd_diff=437518843 >> bps, pct=2187.6 % >> >> If I do multiple downloads like this back-to-back (i.e. 100+ times) then CPU >> utilization for these transfers will be as high as without the rate limit >> both for client and the server. >> But in 8.6.0 – where the rate limit for these conditions was applied >> correctly, the total CPU utilization (both for client and server) was a few >> times lower. >> >> So, while 8.18.0 rate limiting mechanism decreased CPU utilization >> compared to 8.6.0 for the cases where it works, it increased CPU utilization >> on order of magnitude both for client and server for run-time conditions >> where it doesn’t work. And this may have a large cost effect for >> applications with large population using cloud services. >> >> And what makes things worse is that it is now very difficult to predict >> where the new mechanism will “not work”. >> >> In the same test example, the rate limit of 16 Mbps was applied correctly: >> Url=… file_1M.bin, max_speed=16000000 bps >> time=510 ms, dnld=1048576 B, speed=16423165 bps, spd_diff=423165 bps, >> pct=2.6 % >> >> This means that in 8.18.0 some client app doing multiple back-to-back >> transfers, may suddenly step on cases where the rate limiting doesn’t work >> as before and thus incur much higher operational costs. >> And this kind of defeats the purpose of optimizing the rate limiting >> mechanism to use less CPU cycles. >> >> I am trying to avoid calling it “regression”, but it is a radical behavior >> change, which potentially can cost much more to libcurl users than previous >> implementation. >> >> Thanks, >> Dmitry >> From: David Pfitzner <[email protected]> >> Sent: Tuesday, January 6, 2026 7:36 PM >> To: Dmitry Karpov <[email protected]> >> Cc: libcurl development <[email protected]> >> Subject: Re: [EXTERNAL] Re: Rate limit regressions in libcurl 8.18.0 vs >> 8.17.0 >> On Wed, Jan 7, 2026 at 1:02 PM Dmitry Karpov <[email protected]> wrote: >> In the 8.6.0, the rate limiter mechanism was kind of embedded into the run >> loop, so it was always engaged and showed very good precision (< 5% >> deviation of the measured speed from the rate limit) even for relatively >> small transfer sizes (~300 KB) and super-fast network speeds. >> >> It worked properly even when client and server were on the same host machine >> where there were no network delays. >> Here is the test example for 390 KB download throttling test on 8.6.0 when >> server and client are on the same machine: >> (8.6.0) Speed limit test [server on the same host as client], >> iterations=5 Url=http://192.168.1.3/Data/DSC_391kB.jpg, >> max_speed=8000000 bps >> time=399 ms, dnld=400096 B, speed=8020969 bps, spd_diff=20969 bps, >> pct=0.3 % >> time=405 ms, dnld=400096 B, speed=7884597 bps, spd_diff=-115403 bps, >> pct=-1.4 % >> time=406 ms, dnld=400096 B, speed=7882480 bps, spd_diff=-117520 bps, >> pct=-1.5 % >> time=404 ms, dnld=400096 B, speed=7910005 bps, spd_diff=-89995 bps, >> pct=-1.1 % >> time=397 ms, dnld=400096 B, speed=8056036 bps, spd_diff=56036 bps, >> pct=0.7 % >> -------------------------------------------------------------------- >> avg_deviation=-0.6 %, max_deviation=-1.5 % >> Url=http://192.168.1.3/Data/DSC_391kB.jpg, max_speed=16000000 bps >> time=209 ms, dnld=400096 B, speed=15286666 bps, spd_diff=-713334 bps, >> pct=-4.5 % >> time=197 ms, dnld=400096 B, speed=16231980 bps, spd_diff=231980 bps, >> pct=1.4 % >> time=197 ms, dnld=400096 B, speed=16202236 bps, spd_diff=202236 bps, >> pct=1.3 % >> time=198 ms, dnld=400096 B, speed=16110410 bps, spd_diff=110410 bps, >> pct=0.7 % >> time=195 ms, dnld=400096 B, speed=16394185 bps, spd_diff=394185 bps, >> pct=2.5 % >> -------------------------------------------------------------------- >> avg_deviation=0.3 %, max_deviation=-4.5 % >> Url=http://192.168.1.3/Data/DSC_391kB.jpg, max_speed=20000000 bps >> time=162 ms, dnld=400096 B, speed=19697882 bps, spd_diff=-302118 bps, >> pct=-1.5 % >> time=161 ms, dnld=400096 B, speed=19856004 bps, spd_diff=-143996 bps, >> pct=-0.7 % >> time=166 ms, dnld=400096 B, speed=19249034 bps, spd_diff=-750966 bps, >> pct=-3.8 % >> time=162 ms, dnld=400096 B, speed=19721549 bps, spd_diff=-278451 bps, >> pct=-1.4 % >> time=159 ms, dnld=400096 B, speed=20035479 bps, spd_diff=35479 bps, >> pct=0.2 % >> -------------------------------------------------------------------- >> avg_deviation=-1.4 %, max_deviation=-3.8 % >> Url=http://192.168.1.3/Data/DSC_391kB.jpg, max_speed=32000000 bps >> time=97 ms, dnld=400096 B, speed=32785684 bps, spd_diff=785684 bps, >> pct=2.5 % >> time=99 ms, dnld=400096 B, speed=32143324 bps, spd_diff=143324 bps, >> pct=0.4 % >> time=99 ms, dnld=400096 B, speed=32290545 bps, spd_diff=290545 bps, >> pct=0.9 % >> time=98 ms, dnld=400096 B, speed=32509298 bps, spd_diff=509298 bps, >> pct=1.6 % >> time=98 ms, dnld=400096 B, speed=32478290 bps, spd_diff=478290 bps, >> pct=1.5 % >> -------------------------------------------------------------------- >> avg_deviation=1.4 %, max_deviation=2.5 % >> >> The precision started deteriorating (> 15%) only for the downloads < >> 250 KB, but the measured transfer speeds were always less than the rate >> limit, so, the back-to-back transfers never created high load issues on the >> server side. >> >> So, to be on the safe side, my statement about high precision of rate >> limiting in 8.6.0 should be corrected as "for any transfer sizes > 1MB and >> any network conditions". >> >> Unfortunately, the price for such a precision in 8.6.0 was higher CPU >> utilization as more cycles were needed to calculate and apply delays. >> >> So, the intent to minimize CPU usage while losing some precision in 8.18 is >> totally understandable, but the loss of precision due to lesser points of >> delay calculations should be somehow compensated at the end of the transfer >> to avoid regressions for applications that expect more or less reliable >> correlation between applied rate limit and measured transfer speeds. >> >> Unfortunately, in 8.18.0 there are cases that look like as the rate >> limit hasn’t applied at all, and it creates issues for logic making >> decisions based on transfer speed measurements, and unexpected higher load >> on the server side. >> My point is that just the same statement: "there are cases that look like as >> the rate limit hasn’t applied at all" - is also true for 8.6.0. The only >> difference is that with 8.6.0 you have to go to smaller transfer sizes to >> see the effect. So it depends on what transfer sizes you are interested in >> (and other parameters). So yes, at a given transfer size the behavior may be >> different, because the rate-limiting "resolution" has changed, but claiming >> that this is a radical change in behavior seems wrong. >> -- David >> >> >> From: curl-library <[email protected]> On Behalf Of >> David Pfitzner via curl-library >> Sent: Tuesday, January 6, 2026 5:17 PM >> To: libcurl development <[email protected]> >> Cc: David Pfitzner <[email protected]> >> Subject: [EXTERNAL] Re: Rate limit regressions in libcurl 8.18.0 vs 8.17.0 >> On Wed, Jan 7, 2026 at 10:05 AM Dmitry Karpov via curl-library >> <[email protected]> wrote: >> >> The 8.6.0 worked very well for rate limiting as it provided stable and >> predictable measured transfer download speeds for any transfer sizes and >> network conditions. >> That "for any transfer sizes and network conditions" is not true. The rate >> limiting may have done what you wanted for the parameters you care about, or >> the parameters that you happened to test, but even for 8.6.0 there are >> possible cases where rate limiting is specified but has no effect. (That is, >> because the transfer finishes before any rate limiting delay is imposed.). >> -- David >> -- >> Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library >> Etiquette: https://curl.se/mail/etiquette.html > > -- Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html
