Exhausted net.inet.tcp.reass.maxsegments block recovering tcp session (for this socket and any other socket waiting for retransmited packets). After exhausted net.inet.tcp.reass.maxsegments allocation new entry in tcp_reass failed (for this socket and any other socket waiting for retransmited packets). te = uma_zalloc(V_tcp_reass_zone, M_NOWAIT); if (te == NULL) { TCPSTAT_INC(tcps_rcvmemdrop); m_freem(m); *tlenp = 0; return (0); } That is packet can be reduce reassemble queue dropped. Fix: Workaround: set net.inet.tcp.reass.maxsegments in /boot/loader.conf to big value. How-To-Repeat: Need high bandwidth-delay channel with high, but rare drop. After lost incoming TCP segment and before got retranmited this segment net.inet.tcp.reass.maxsegments exhausted. Software emulation: Tuning by http://fasterdata.es.net/fasterdata/host-tuning/freebsd/ sysctl net.inet.tcp.recvspace=1048576 sysctl net.inet.ip.dummynet.pipe_slot_limit=3000 ipfw pipe 1 config delay 300 queue 3000 ipfw add 100 pipe 1 ip from test_hot to me fetch http://test_host/big_file After reach 7MB/s: ipfw pipe 1 config delay 300 queue 3000 plr 0.1
Responsible Changed From-To: freebsd-bugs->freebsd-net Over to maintainer(s).
Responsible Changed From-To: freebsd-net->lstewart Grab.
State Changed From-To: open->patched Fix has been MFCed to 8.2-STABLE as svn r230534
State Changed From-To: patched->closed Issue fixed by patch; no further reports of problem.