Hello Linux Experts,

I met a strange problem about Cubic TCP algorithm.

Linux kernel: kernel-2.6.32-358.23.2.el6.x86_64

Test Condition: At 250ms RTT+0.02% Package Loss

Problem description:
TCP transition became very bad.
By capturing the value of snd_cwnd and ssthreshold, we found when once Package Loss occurred, TCP state machine will change to ‘Disorder’ and then ‘snd_cwnd’ changes to about half of current value while ‘ssthreshold’ changed to about half of current value as well. And then, TCP state machine changed to ‘Recovery.

At the phase of ‘Recovery’, we saw the strange thing that we unexpected. The ‘snd_cwnd’ increased very slowly, and it needed several seconds(250ms RTT) to recover.

By reading kernel code, we found the issue is in tcp codes.
When TCP state enters ‘Disorder, not only ‘snd_cwnd’ will be reduced but also ‘ssthreshold’ will be reduced.
It caused Cubic recovery of ‘snd_cwnd’ becomes very very slow.

Do you think it makes sense?
And how to fix it while still using Cubic?


Thanks in advance