TCP-autocork:发送数据报文之塞子的一生

TCP-autocork是TCP Small Queue(TSQ)机制的一部分,旨在限制TCP连接在队列中的skb数量,减少RTT和bufferbloat问题。它通过阻塞符合条件的数据报文,合并skb来优化发送过程。tcp_should_autocork函数根据四个条件判断是否应用TCP-autocork,包括skb未填满、系统cork选项开启、有未确认数据以及套接字缓冲区大于skb缓冲区大小。通过对这些条件的控制,TSQ-autocork确保有效整合资源,提高发送效率。
摘要由CSDN通过智能技术生成

在这里插入图片描述

晒了好几天的图,觉得是时候补充下这部分。

autocork我总认为是TSQ部分的一个重要分支,于是我花时间特意去研究了一下,从内核2.6到5.10的版本迭代,tcp_should_autocork的确发生了不少的变化,觉得有必要说说。

tcp_should_autocork是一个阻塞发送数据报文的判断条件,在kernel中也确实是这么做的。它位于tcp_push函数,并在判断语句前结束了对push、urg标识的分支处理,这确定了TCP-autocork只服务于“普通的”发送至多数据报文的处理。

void tcp_push(struct sock *sk, int flags, int mss_now,
	      int nonagle, int size_goal)
{
	struct tcp_sock *tp = tcp_sk(sk);
	struct sk_buff *skb;
	skb = tcp_write_queue_tail(sk);
	if (!skb)
		return;
		
	if (!(flags & MSG_MORE) || forced_push(tp))
		tcp_mark_push(tp, skb);
		
	tcp_mark_urg(tp, flags);
	//只处理“普通的”发送数据报文的处理
	if (tcp_should_autocork(sk, skb, size_goal)) {
		//autocork是TSQ阻塞的一种表现形式
		/* avoid atomic op if TSQ_THROTTLED bit is already set */
		if (!test_bit(TSQ_THROTTLED, &sk->sk_tsq_flags)) {
	
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值