面对网络带宽和速度的飞速增长,传统的通过软件进行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连接错误及时处理。
为了使TOE技术融入现在网络处理体系中,除了在网络接口硬件中提供TCP处理功能外,还必须在操作系统中加载TOE网络驱动软件,操作系统核心层应用通过该接口实现应用层数据的上传下达。
实现方案:板卡实现还是ASIC芯片?
从器件实现上来说,TOE方案可以采用两种结构:分离元件结构和采用专用ASIC芯片。
分离元件TOE采用电路板构建,结构上已接近计算机,具备嵌入式处理器(或微处理器)、固件、存储器、数据传输总线、实时操作系统以及PHY/MAC接口。在这里,通常由主机CPU完成的协议处理功能改由实时操作系统中嵌入的TCP/IP协议栈来处理。TOE板卡实现方案的优点是具有很大灵活性,分离元件易于更改,固件可方便运用ROM芯片进行级;可通过固件升级办法对TCP/IP栈进行修改,以适应特殊的处理环境。
采用专用ASIC芯片的实现方案是将协议的处理功能集成到定制化的芯片中,由于具备专用的处理和存储芯片,因此ASIC TOE在性能上有很大的提高,但缺点是硬件的开发和初始应用成本比较高,可编程能力、扩展性、灵活性比较差。网络设备的可编程能力和处理性能常常是一对矛盾,为了进一步提高处理的灵活性又保证处理速度,现在又出现了可配置ASIC芯片,该芯片含有可编程固件,软件可动态更新,具有较大的灵活性。