TCP offload engine(TCP减负引擎网卡), TCP backlog/prequeue buffer (TCP后备预备队列)

介绍TCP减负引擎(TOE)如何通过硬件卸载网络数据处理任务以减轻服务器负担,同时解析TCP后备预备队列的工作原理及配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP减负引擎网卡

用TCP/IP协议处理网络流量,要占用大量服务器资源。为了减轻服务器的压力,一种称为TCP减负引擎(TCP Offload Engine :TOE)的技术应运而生。TCP减负引擎一般由软硬两部分组件构成,将传统的TIP/IP协议栈的功能进行延伸,把网络数据流量的处理工作全部转到网卡上的集成硬件中进行,服务器只承担TCP/IP控制信息的处理任务。这种为服务器减轻负担的技术,得到了大多数厂商的肯定。
  普通网卡用软件方式进行一系列TCP/IP相关操作,因此,会在三个方面增加服务器的负担,这三个方面是:数据复制、协议处理和中断处理。
网络上每个应用程序在收发大量数据包时,要引发大量的网络I/O中断,对这些I/O中断信号进行响应,成了服务器的沉重负担。比如,一个典型的64Kbps的应用程序在向网络发送数据时,为了将这些数据装配成以太网的数据包,并对网络接收确认信号进行响应,要在服务器和网卡间触发60多个中断事件,这么高的中断率和协议分析工作量已经是相当可观的了。虽然某些网络操作系统具有中断捆绑功能,能够有效减少中断信号的产生,但却无法减少服务器和网卡间响应事件的处理总量。
  TCP减负引擎网卡的工作原理与普通网卡不同。普通网卡处理每个数据包都要触发一次中断,TCP减负引擎网卡则让每个应用程序完成一次完整的数据处理进程后才触发一次中断,显著减轻服务器对中断的响应负担。还是以64Kbps的应用程序为例,应用程序向网络发送数据全部完成后,才向服务器发送一个数据通道减负事件中断,数据包的处理工作由TCP减负引擎网卡来做,而不是由服务器来做,从而消除了过于频繁的中断事件对服务器的过度干扰。网络应用程序在收发数据时,经常是同一数据要复制多份,在这种情形下,TCP减负引擎网卡发挥的效益最明显。

http://www.wangchao.net.cn/bbsdetail_1768113.html

http://blog.youkuaiyun.com/tglg/archive/2008/12/28/3630958.aspx

 

TCP后备预备队列

《TCP/IP详解   卷1:协议》的Page195有详细解释。  
  1)backlog   用于在TCP层接收链接的缓冲池的最大个数,这个个数可在应用层中的listen函数里设置,当客户链接请求大于这个个数(缓冲池满),其它的未进入链接缓冲池的客户端在tcp层上tcp模块会自动重新链接,直到超时(大约57秒后)  
  2)我们的应用层的链接完成是要从tcp层的链接缓冲池中移出一个(accept函数实现)

 

 

backlog是连接请求队列的最大长度。  
  1.在WinSock1.1中最大值5。如果backlog小于1,则backlog被置喂1;若backlog大于SOMAXCONN(定义在winsock.h中,值为5),则backlog被置为SOMAXCONN。  
  2.在WinSock2中,没有制定具体值,它由服务提供者决定  
  3.有时候backlog设置很小,这时我们接进多少台机器都没问题是因为服务器机器处理速度很快队列来不及填满就处理完了,而且在同一个时刻到来的连接还是很少的

 

 

TCP的处理中有三个queue: receive queue, backlog queue和prequeue。
正常情况下是receive queue来接受数据包包,并把它传送给socket。如果receive queue满了或者是被用户进程锁住了,那么和诉据报将会被添加到backlog queue中。
只有当数据包头部预测通过(表示数据包是in-order的),并且处于ESTABLISHED状态,数据包才会被发往prequeue。
receive/backlog queue被称为slow path,prequeue被称为fast queue。

TCP包接收器(tcp_v4_rcv)将TCP包投递到目的套接字进行接收处理. 当套接字正被用户锁定,
TCP包将暂时排入该套接字的后备队列(sk_add_backlog).
这时如果某一用户线程企图锁定该套接字(lock_sock),
该线程被排入套接字的后备处理等待队列(sk->lock.wq).
当用户释放上锁的套接字时(release_sock),
后备队列中的TCP包被立即注入TCP包处理器(tcp_v4_do_rcv)进行处理,
然后唤醒等待队列中最先的一个用户来获得其锁定权. 如果套接字未被上锁,
当用户正在读取该套接字时, TCP包将被排入套接字的预备队列(tcp_prequeue),
将其传递到该用户线程上下文中进行处理.

 

Increase backlog on windows: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值