TCP/IP协议处理 由“软”转“硬”


面对网络带宽和速度的飞速增长,传统的通过软件进行TCP/IP协议处理的方式已经越来越成为高性能网络计算的瓶颈 。
在目前的以太网环境中,TCP/IP协议的处理都是通过软件方式在中心处理器上实现 。当网络速度达到G比特数量级时,主CPU就越来越繁忙,其中大部分处理负荷都是来自对TCP/IP协议的处理,例如对IP数据包的校验处理、对TCP数据流的可靠性和一致性处理 。大量协议数据还需要通过I/O中断进行操作,不断在网络接口缓冲区和应用程序内存之间进行数据交换,这些额外负担极大地降低了主CPU的处理效率,增加了应用计算的平均等待时间 。按照CPU对网络数据流的处理比率分析,大概CPU每处理1比特网络数据,就将消耗1Hz的处理性能,也就是说需要20GHz的CPU处理能力满负荷运行才能满足10GB以太网数据流的处理要求 。
同时,由于目前对TCP/IP协议进行处理都是采用通用CPU及其配套的系统结构,而这种体系下CPU的主要功能是进行通用计算,并非进行输入输出操作 。因此在网络带宽和速度飞速发展的情况下,网络链路速度高于CPU对TCP/IP协议栈的处理速度将导致系统的输入输出系统成为网络瓶颈 。
TOE分担协议处理负荷
为了在高速网络环境中改进和优化服务器性能,减轻对网络协议的处理负荷,TCP/IP负荷减轻引擎(TOE,TCP/IP Offload Engine)技术应运而生 。
TOE技术的基本思想是分担CPU对TCP和IP协议的处理,将协议处理过程放到高速网卡或者高速线卡等硬件上完成,其中包括TCP、IP、UDP、ICMP等子协议的处理 。基于TOE技术的TCP/IP的块级数据传输将比通常方式提高10%以上的性能 。
将原来通过软件方式处理的TCP/IP协议放在专门的硬件上完成,从而将应用和网络分离处理,会使10G以太环境中应用服务器的CPU资源利用率大大提高,可以显著地改善服务器性能 。例如在IP存储领域,在iSCSI的协议处理过程中就明确采用了这种技术 。
对传统的网卡而言,处理一个32KB的文件,需要与主机CPU进行近30次交互,大约20次数据包交换,10次应答 。但网卡配置TOE功能后,数据包和应答信号处理在网卡中实现,数据与应用缓冲区间的交换由基于硬件的DMA处理,这就为应用的处理腾出了更多的CPU资源 。同时也降低了系统I/O总线和内存总线的负荷,降低了应用系统的处理延时 。传统网卡在集成TOE功能后,采用会话层接口在传输层与主机之间进行交互,帮助实现应用中的大文件(超过10KB)处理 。TOE处理与传统TCP/IP处理方式对比如上图所示 。
如3Com的3C996-T 10/100/1000 PCI-X服务器网卡,融合了基本的校验和中断处理功能,能实现双向300M到900M数据吞吐率 。一块具备高级TCP/IP处理功能的网卡,如Alacritech的1000x1服务器及存储加速器,能够实现双向1500M到1800M数据吞吐率 。下表列出了TOE技术的测试比较数据 。
实现策略:部分分担还是全分担?
TCP协议处理过程大概可以分为以下几个部分:TCP建连过程、数据收发过程、连接维护过程、错误治理过程 。因此根据TCP负荷分担的策略,TOE技术可以分为部分分担和全功能分担两种 。用户可以根据应用要求进行选择 。
部分分担又称为数据路径分担 。由于10G以太环境下网络链路非常好,很少出现丢包的情况,TCP连接在很长一段时间内都比较稳定,大量的协议处理都来自数据收发过程,因此通过对数据收发过程进行分担处理,可以重点减轻CPU对数据收发的处理压力,改善应用的处理性能 。
全功能分担就是对TCP处理的4个过程都进行分担处理,彻底释放主CPU对TCP处理的负荷 。在网络连接非凡多的情况下,频繁的TCP建连、断连过程都将消耗巨大的CPU资源,另外由于TCP连接对端工作状态的不确定性,将导致CPU需要对TCP连接错误及时处理 。

推荐阅读