BBR:).
If the packet loss rate is below 15% then BBR is able to fully utilize the path (reaching link_bandwidth*(1 - loss_rate)). This 15% threshold is a design parameter, rather than a fundamental limit
Estou lutando para explicar o significado exato disso. Aqui está Eric Dumazet:
Compared to Cubic, there is 2 to 4 orders of magnitude difference on lossy environments.
Example of 100ms rtt, and 1% packet loss. Cubic performs very badly there.
$ netperf -H 10.246.7.152 -l 30 -- -K cubic
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 () port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 40.00 3.27
$ netperf -H 10.246.7.152 -l 30 -- -K bbr
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 () port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 30.25 9150.01
Testes de terceiros revelaram / eliciaram uma explicação de que o código atual espera um buffer completo (BDP) no gargalo, se houver alguma concorrência. Este é um alvo conhecido para melhorias adicionais. Se a condição não for atendida, aumenta a taxa de perda. Então os TCPs tradicionais basicamente morrerão de fome.
Se houver mais buffer do que 1 BDP, os fluxos BBR cooperarão para evitar o preenchimento de excesso de buffer, portanto limitando o atraso de enfileiramento conforme solicitado . TCPs tradicionais tendem a preencher todo o buffer. Quando ambos estão competindo, o BBR não pode consertar magicamente o comportamento dos fluxos tradicionais do TCP, no entanto, eu não acho que isso prejudique a BBR de qualquer outra forma.
Se a condição mencionada acima não for atendida, a latência do aplicativo sofrerá (ter que retransmitir pacotes perdidos).
[PATCH v4 net-next 00/16] tcp: algoritmo de controle de congestionamento BBR