Depois de explorar um pouco mais meu tráfego, pude ver que meus dados não passavam de uma sequência de pequenos disparos com pequenos períodos ociosos entre eles.
Com a ferramenta útil ss
, consegui recuperar o tamanho atual da janela de congestionamento da minha conexão (consulte o valor cwnd
na saída):
[user@localhost ~]$ /usr/sbin/ss -i -t -e | grep -A 1 56001
ESTAB 0 0 192.168.1.1:56001
192.168.2.1:45614 uid:1001 ino:6873875 sk:17cd4200ffff8804 ts sackscalable wscale:8,9 rto:277 rtt:74/1 ato:40 cwnd:36 send 5.6Mbps rcv_space:5792
Eu executei a ferramenta várias vezes e descobri que o tamanho da janela de congestionamento era regularmente redefinido para o valor inicial (10 ms, na minha caixa do Linux). A conexão estava constantemente voltando para a fase de início lento. Durante o período de início lento, rajadas com um número de mensagens que excedem o tamanho da janela foram atrasadas, esperando pelos acks relacionados aos primeiros pacotes do burst.
O fato de o tráfego consistir em uma sequência de explosões provavelmente explica a redefinição do tamanho da janela de congestionamento.
Ao desativar o modo de início lento após o período inativo, consegui me livrar dos atrasos.
[user@host ~]$ cat /proc/sys/net/ipv4/tcp_slow_start_after_idle 0