b. 调整发送缓冲区的上限sk->sk_sndbuf 调整之后的sk->sk_sndbuf不少于2倍的拥塞控制窗口(tp->snd_cwnd)。 /* Buffer size and advertised window tuning. * Tuning sk->sk_sndbuf, when connection enters established state. */ static void tcp_sndbuf_expand(struct sock *sk) { const struct tcp_sock...
如果调用setsockopt()设置了socket选项SO_SNDBUF,将关闭发送端缓冲的自动调节机制,tcp_wmem将被忽略,SO_SNDBUF的最大值由net.core.wmem_max限制。 BDP 带宽时延积 BDP=rtt*(带宽/8) 这个buffer 调到1M测试没有帮助,从理论计算BDP(带宽时延积) 0.02秒*(100MB/8)=250Kb 所以SO_SNDBUF为256Kb的时候基本能跑满...
如果调用setsockopt()设置了socket选项SO_SNDBUF,将关闭发送端缓冲的自动调节机制,tcp_wmem将被忽略,SO_SNDBUF的最大值由net.core.wmem_max限制。 这个案例关于wmem的结论 默认情况下Linux系统会自动调整这个buffer(net.ipv4.tcp_wmem), 也就是不推荐程序中主动去设置SO_SNDBUF,除非明确知道设置的值是最优的。 从...
2. 如果TCP的内存使用量高于压力值sysclt_tcp_mem[1],把TCP的内存压力标志tcp_memory_pressure置为1。 3. 如果TCP的内存使用量高于最大值sysctl_tcp_mem[2],就减小sock发送缓存的上限sk->sk_sndbuf。 返回值为1时,表示发送缓存的申请是合法的;返回值为0时,表示不合法。 复制 [java] /* increase sk_forw...
如果tcp发送buffer也就是SO_SNDBUF只有16K的话,这些包很快都发出去了,但是这16K不能立即释放出来填新的内容进去,因为tcp要保证可靠,万一中间丢包了呢。只有等到这16K中的某些包ack了,才会填充一些新包进来然后继续发出去。由于这里rt基本是20ms,也就是16K发送完毕后,等了20ms才收到一些ack,这20ms应用、内核什么都...
(struct sock *sk); /* 返回tcp_sndbuf_expand中使用的multiplier(可选的)*/ u32 (*sndbuf_expand)(struct sock *sk); /* 在所有ca_state处理之后,当数据包交付以更新cwnd和 pacing rate时调用(可选的)*/ void (*cong_control)(struct sock *sk, const struct rate_sample *rs); /* 获取inet_diag...
/*如果用户没有使用SO_SNDBUF选项,就调整发送缓冲区的上限。 *调整之后,一般sk->sk_sndbuf会大于初始值tcp_wmem[1]。 */ if (! (sk->sk_userlocks & SOCK_SNDBUF_LOCK)) tcp_sndbuf_expand(sk); tp->rcvq_space.space = tp->rcv_wnd; /*当前接收缓存的大小,只包括数据*/ ...
3、不要设置SO_SNDBUF为0,除非想确保数据包在调用Send完成之后立即被投递到网络。事实上,8K的缓冲区适合大多数 情况,不需要重新改变,除非新设置的缓冲区经过测试的确比默认大小更高效。 4、如果数据传输不用保证可靠性,使用UDP。 结论: 1. TCP提供了面向“连续字节流”的可靠的传输服务,TCP并不理解流所携带的数...
}static u32 bbr_sndbuf_expand(struct sock *sk) { /* Provision 3 * cwnd since BBR may slow-start even during recovery. */ return 3; }/* In theory BBR does not need to undo the cwnd since it does not * always reduce cwnd on losses (see bbr_main()). Keep it for now. ...
.sndbuf_expand = bpf_tcp_ca_sndbuf_expand, 3 changes: 3 additions & 0 deletions 3 net/ipv4/tcp.c Original file line numberDiff line numberDiff line change @@ -3089,6 +3089,7 @@ int tcp_disconnect(struct sock *sk, int flags) tp->rx_opt.dsack = 0; tp->rx_opt.num_sacks = ...