zzz
a few hundred lines of peer test state machine before breakfast...
zzz
and the reward is donuts
zzz
zlatinb, you up? :)
zlatinb
yes hello
zzz
need some help with SSU delayed acks
zzz
some background:
zzz
currently we delay an ack by min(rtt/2, 150) ms
zzz
we changed that from max(...) last fall
zzz
the max(rtt/2, something) where something varied 100, 150, 200 - dates back to jrandom
zzz
in streaming, the delayed ack is min(rtt/8, 120)
zzz
my theory is that min(rtt/2, something) is unstable, i.e. the RTT will constantly increase - for any reasonable "real RTT"
zzz
and I suspect that rtt/8 will be stable
zzz
I see some evidence that the more the traffic, the higher the RTT
zzz
but I'm having trouble with the math to prove my theory
zzz
eot
zlatinb
hmm why would /2 be unstable but /8 be stable? It should be just as unstable except 4 times less
zzz
measured RTT = "true RTT" + (delay added by the other guy, which is min(rtt measured by the other guy, 150))
zlatinb
right, it becomes a differential equation I think
zzz
I don't know the answer to your question, that's where I'm stuck
zlatinb
the first step I suggest is to plot rtt over time in a testnet with a big eepget over 0-hop ssu tunnel
zlatinb
if it indeed grows then we have a problem
zzz
in the console you can sort by RTT and then eyeball the rx/tx or uptime numbers
zlatinb
well the min(150) does cap the growth so it's not a runaway situation
zzz
can't remember if there's related RFC guidance. will look
zlatinb
if there were we would have applied it
zlatinb
we've read through the RFCs a bazillion times by now lol
zlatinb
the max->min change definitely had a huge impact on observed RTTs in the console
zlatinb
intuitively I think you're right - having rtt in the term does result in rtt growth
zzz
right, it's not insanely unstable... my max RTT is 2154 ms right now
zlatinb
the min(150) should temper the growth significantly
zzz
I have a median RTT of about 160 ms
zzz
yeah, maybe it's runaway but only up to a point
zlatinb
that is to be answered by a proper plot, which I may do over the weekend
zlatinb
then we can start thinking of mitigation if it's sufficiently bad
zzz
it's a one-liner change to adjust the denominator, it's at PeerState.java line 2300
zlatinb
/2 -> /8 will only slow down the growth
zlatinb
just like adjusting the min(C) constant will only cap it at a different level
zlatinb
OR maybe it doesn't cap it at a level but at a growth rate
zlatinb
I have to go afk for a while now, but will try to set up the testnet with the necessary logging to produce a plot over time.
zlatinb
With constant delay in the testnet rtt should be constant, if it isn't then we have growth
zzz
ok, thanks, hurting my brain a little, that's why I called for help :) good night