Subject: Re: [PATCH] fetch-pack: grow stateless RPC windows exponentially

From: Jonathan Nieder <[email-masked]>
Date: Mon, 18 Jul 2016 12:31:47 -0700

Jonathan Tan wrote:
> On Mon, Jul 18, 2016 at 12:10 PM, Junio C Hamano <[email-masked]> wrote:

>> I'd understand if it were more like "aggressive exponential ->
>> conservative exponential" without linear phase when stateless_rpc is
>> in use, though.  I just do not quite understand the justification
>> behind the order of three phases introduced by this change.
>
> Adding conservative exponential phase after the aggressive exponential
> phase was the original intention, but the conservative exponential
> approach (e.g. n' = n * 11 / 10) is slower than the existing linear
> (n' = n + 1024) approach when n < 10240, so I added that intermediate
> phase to avoid a regression in the packet size growth.

You have full control of the growth function.  So how about aggressive
growth until 1024*10?

That is:

Current git:
  n < 1024: aggressive exponential
	16, 32, 64, 128, 256, 512, 1024
  1024 <= n: linear
	2048, 3072, 4096, 5120, ...

Initial proposal:
  n < 1024: aggressive exponential
	16, 32, 64, 128, 256, 512, 1024
  1024 <= n < 10240: linear
	2048, 307, 4096, 5120, ...
  10240 <= n: conservative exponential
	11264, 12390, ...

New proposal:
  n < 10240: aggressive exponential
	16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384
  10240 <= n: conservative exponential
	18022, 19824, ...

That way, on one hand it would still never use a smaller window than
today and on the other hand the heuristic would be easier to
understand (only decelarating, instead of decelarating and then
accelerating again).

Thanks,
Jonathan