Am întâlnit un fenomen contraintuitiv conform căruia rtt (Timpul dus-întors) de solicitare de la client la un server cu latență redusă a rețelei (ServerL) este mai mare decât cel de la același client la un server cu latență mare de rețea (ServerH). Interacțiunea dintre server și client este destul de simplă: clientul trimite doar un flux mare de octeți (1 ~ 2M de octeți), iar serverul acceptă toți octeții și răspunde un cod simplu de retur ok.
Latența rețelei este măsurată prin ping. Latența ping:
client <-> ServerL: 1 ms
client <-> ServerH: 1,9 ms
S-a dovedit că rtt-ul Client to ServerL este mărit din cauza accesării serverului. ServerL trimite mult mai multe ack-uri decât ServerB. Și intervalul de timp dintre două accesări adiacente văzute de perspectiva clientului este uneori mai mare decât ceea ce este măsurat din partea ServerL.
Deci, care sunt probabil factorii decisivi care diferă numărul de ack-uri trimise de aceste două servere? Configurația buffer-ului socket-ului din aceste două servere este aceeași, prin urmare excluzându-se de la a face parte din motive. Configurația este verificată de următoarea comandă shell:
# sysctl -a | congestie grep
net.ipv4.tcp_allowed_congestion_control = reno cubic
net.ipv4.tcp_available_congestion_control = reno cubic
net.ipv4.tcp_congestion_control = cubic
# sysctl -a | egrep "rmem|wmem|adv_win|moderat"
net.core.rmem_default = 262144000
net.core.rmem_max = 16777216
net.core.wmem_default = 262144000
net.core.wmem_max = 16777216
net.ipv4.tcp_adv_win_scale = 1
net.ipv4.tcp_moderate_rcvbuf = 1
sysctl: net.ipv4.tcp_rmem = 4096 87380 6291456
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.udp_rmem_min = 4096
net.ipv4.udp_wmem_min = 4096
vm.lowmem_reserve_ratio = 256 256 32 0 0