基于TCP/IP卸载引擎的千兆网卡

基于TCP/IP卸载引擎的千兆网卡
作者:周敬利,王志华,姜明华,徐 漾,余胜生    时间:2006-10-28    来源: 
 
       摘 要:研究了TCP/IP卸载引擎的原理和设计方法,并提供了一套参考实现。实验证明,该技术有效地提高了千兆网卡的传输性能,降低了计算机的占用率。

关键词:TCP/IP卸载引擎;千兆网卡;RTOS;嵌入式

引言

千兆网卡为计算机接入到千兆以太网提供了高速接口,但以目前的CPU主频速度来连接千兆以太网很难达到1Gbps的线速,而且CPU资源被大量消耗。虽然CPU性能每个月18就翻一番,但无法跟上网络速率每年增加10倍的速度。

传 统上TCP/IP协议栈是由服务器上的CPU处理的。而CPU随着网络传输速度超过1Gbps ,CPU已经不堪大量TCP/IP协议处理的重负。失序包的重组,大量的内存拷贝和中断给主机的CPU增加了极大的负担。根据Thumb定律,在没有 DMA和I/O通道的情况下,每处理的网络流量,就需要1bps的周期。即要处理1Gbps网络带宽,就需要一个1GHz主频的CPU全负荷运行。网络协 议的处理占用了大量的服务器资源,而上层的应用得不到及时处理,使服务器整体性能降低。

随着NAS、SAN、 iSCSI(Internet SCSI)等技术的广泛应用,需要服务器的网络接口有更高的性能,普通千兆网卡已经不能满足要求。TCP/IP卸载引擎(TOE)技术,就是在这种背景下 产生的。本文在研究了TOE技术的同时提出了一种设计方案,并依据该方案给出了基于TOE技术的千兆网卡的参考实现。

TCP/IP卸载引擎技术

所 谓卸载是指将CPU上的计算或处理转移到专门的处理单元上进行。如目前的普通千兆基本上都有校验和卸载,就是一种卸载技术。但这种卸载还是不彻底的卸载, 很难发挥千兆的极限带宽。与传统方式对比,TCP/IP卸载引擎引入了一种新的网络接口体系结构。它将TCP/IP协议栈的处理工作从服务器CPU上卸载 下来,交给网卡(NIC)来处理。在具有TCP/IP卸载引擎的网卡上有专门的处理器或硬件来完成协议处理,简化了整个TCP/IP的处理路径,从而减轻 了CPU和服务器I/O系统的TCP/IP处理负担,消除了服务器的网络瓶颈。

普通网卡和主机之间是通过网卡驱动进行通信的,一般网卡将 接收到的数据传到应用层要经历多次中断(如对CPU的硬中断、对接收进程的软中断)和多次数据拷贝(如DMA将数据包传到主机内存,应用通过系统调用将数 据拷贝到用户空间),数据路径较长。利用TOE进行TCP/IP卸载则简化了该处理路径。如图所示1。将TOE整个或部分协议TCP/IP栈卸载到网卡中 处理,绕过了主机CPU处理TCP/IP协议的路径。在主机上安装了TOE的驱动后,内核空间的应用(各种网络服务)和用户空间的应用都可以直接与TOE 通信。TOE网卡接收到数据后,自动完成协议栈各层协议处理,将解封装后的TCP segment提交给上层应用,发送过程相反。通过TOE处理,中断和数据拷贝次数都会大大降低,CPU的负担大大降低。

图1 TOE的实现策略

TOE 网卡与主机之间的接口的定义是实现TOE的关键和难点。目前还没有这种接口定义的标准,各个TOE厂商也有不同的具体实现。例如WindRiver公司提 出了Socket Class作为主机和卸载的TCP/IP之间的接口。Socket Class是一种基于消息的机制,将主机的socket API映射到卸载后的协议栈上。主机上的socket API应用仍使用原有的socket API,因为在主机上运行了一个socket适配层驱动(TOE),将所有的socket API请求转换为Socket Class消息。

Socket Class将TOE上的TCP/IP协议栈定义为Socket Device,在TOE初始化时产生一个称为的句柄来处target ID理主机与Socket Device之间的通信。在主机端,每个socket进程就是一个initiator,也称为Socket Device的用户。针对initiator和target ID之间不同的socket操作,分别有一种消息与之对应,如 SocketSend,SocketBind,SocketConnect,SocketClose,SocketIoctl。SocketSend消息 的格式如图2。

图2 SocketSend消息格式

TOE千兆网络网卡的设计与实现

设计方案
TOE 可以用ASIC芯片实现,根据卸载程度又分为全卸载(Full-offload)和数据路径卸载(Data-path offload)。全卸载是将TCP/IP协议栈全部卸载到性能优化的硬件逻辑中处理。数据路径卸载则是将TCP/IP中的数据移动用芯片ASIC处理, 而将TCP连接管理建立,拆除和错误恢复等交给主机CPU的处理。利用芯片ASIC专门做TCP/IP协议卸载的优势是其高性能和可升级性(到 10Gbps及以上)较好。但是这种方法灵活性不够,一旦设计完成后很难加入新的功能,而且ASIC的设计难度较大。

我们选择的方案是利 用嵌入式处理器(Embedded CPU)运行实时操作系统(Real-time Operating System,RTOS),再加上一个MAC/PHY来实现TOE千兆网卡。在主机上处理的协议被卸载到中进行处理。这种实现不仅卸载TCP/IP协议 栈,而且卸载其他凡是能嵌入到RTOS中的协议。这种方案的优点是其解决方案灵活且可扩展性强,例如将iSCSI(Internet SCSI)协议集成到固件中即可开发出iSCSI HBA。

进行设计时,主要考虑嵌入式CPU和实时操作系统的选择。嵌入式CPU的选择 要完成整个TCP/IP协议栈的处理,而且要使TOE网卡达到千兆速度,因此要求I/O处理性能很高。同时还要考虑到该CPU的功耗问题,因为嵌入式 CPU通常没有专用的风扇散热,所以功耗一定要低。我们选择Intel XSclae微体系结构CPU,XScale从StrongARM发展而来,但相对后者其工作电压大幅降低而且性能更高。选用IOP310 I/O的处理器芯片组把基于XScale微结构的处理80200器和它的80312 I/O配套芯片集成在一起。该芯片组有从333MHz到733MHz的种时钟速度,最大功耗仅为1W。

RTOS的选择除了考察其实时性, 还要求有出色的I/O处理性能。WindRiver公司的IxWorks符合以上要求,在IxWorks操作系统之上还有一套专门用来开发高性能设备I /O的平台TINA。TINA中包含有IxWorks实时操作系统,卸载后优化的TCP/IP协议栈,Gigabit Ethernet接口驱动,以及与主机通信的Socket Class消息系统。

硬件参考设计
嵌入式CPU采用了处理器Intel IOP310 I/O芯片组,该芯片组由一个Intel 80200 CPU和一个Intel 80312 I/O配套芯片组成,硬件设计参考见图3。

图3 硬件设计原理图

选用的芯片及其作用分别介绍如下:

1、 Intel 80200是基于Intel XScale微体系结构的高性能嵌入式微处理器。其主频为600MHz,外频为66MHz。

2、 Intel 80312 I/O配套芯片专用于I/O处理和内部及外部总线的桥芯片。具有内存/PCI/ 消息/DMA控制器,与SDRAM和FLASH之间的接口速度为100MHz。

3、 Intel 82543GC千兆以太网MAC(Media Access Controller)。

4、 Intel LXT1000千兆以太网收发器(PHY)提供千兆铜线接入方式;也可采用Agilent HDMP-1636 SERDES提供千兆光纤接口。

5、 SDRAM作为板上系统内存,采用标准144引脚64位,SODIMM大小为128MB。

6、 FLASH存放RTOS启动映像(Boot-image)文件,选用8MB的Intel Strata Flash(28F640J3A)。
7、 EEPROM存放启动配置文件、产品ID、MAC地址等信息。采用1kB大小的Microwire Serial EEPROM 93C46B。

还 选用了一个82C59作为外部中断控制器,一个82C54作为外部时钟。相应的芯片都需要提供时钟的晶振(Oscillator) Intel 80200的晶振为66MHz,Intel 82543GC的晶振为125MHz,82C54外部时钟的晶振为3.686MHz。

除了以 上选用的芯片外,还应考虑设置调试接口,至少应该提供一个RS232串行调试接口。Intel 80200支持功能更高的JTAG调试,因此在硬件板上预留一个JTAG调试口也是有必要的。RS232串口调试不需要专门的设备,只需一根普通串口线将 开发主机和目标板相连即可;如果采用JTAG调试方法,需要相应的仿真器(Emulator)做调试,我们选用了VisionICE for XScale仿真器。

实验及结论

我们采用嵌入式芯片设计开发出的TOE千兆网卡,在 Linux操作系统环境下做了性能测试。硬件环境是两台Pentium III 933MHz PC机,256MB内存,主板集成64bit/66MHz PCI以接插TOE千兆网卡;软件环境是RedHat Linux7.3;测试工具是Netperf-2.1pl3。

用Netperf测试网络吞吐率,两台测试机分别为Server和 Client。主要针对Server的性能进行测试。Client端安装的千兆网卡是Intel PRO/1000,Server端则先后安装了TOE千兆网卡和Intel PRO/1000作性能对比测试。对Server的网络性能测试主要是网络吞吐率和CPU占用率,测试结果如图4 、5所示。其中Netperf的测试参数是:接收缓存大小为64kB,发送缓存大小为64kB,发送消息大小为64kB。

图4 网络吞吐率测试结果

图5 CPU占用率测试结果

测 试结果表明,TOE千兆网卡的网络吞吐率高于普通千兆网卡,而CPU占用率却低得多。例如在最大传输单元(MTU)为9000B时,普通千兆网卡的网络吞 吐率为669Mbps TOE千兆网卡则达到了952Mbps,性能提高了42%。此时,前者的CPU占用率为41%,而后者只有15%。各种MTU的测试都说明TOE千兆网卡 保持在高吞吐率水平,而CPU占用率一般都较低。

本文研究了TOE技术的基本原理和该技术的实现机制,给出了一种参考设计。测试结果表明,依据该设计思想开发的TOE千兆网卡,可以提高服务器网络接口的吞吐率,且极大地降低服务器本身的资源占用。该技术的应用前景广泛,对国民生产和国防研究都具有深远的意义。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于TCP/IP网络编程的实验主要是通过使用TCP/IP协议栈进行网络通信的编程实践。在实验中,我们可以利用编程语言(如C、C++、Java等)中的相关库和API来实现网络通信的功能。 在实验中,我们可以学习和掌握以下几个方面的内容: 1. 建立连接:使用TCP协议建立客户端与服务器之间的连接。通过使用socket编程接口,我们可以创建一个套接字,并使用该套接字连接到服务器的特定端口。 2. 传输数据:通过TCP连接,在客户端和服务器之间传输数据。我们可以使用socket编程接口中的send和recv函数,在连接建立后,通过发送和接收数据来实现双向通信。 3. 错误处理:网络编程中,错误处理是至关重要的一部分。在实验中,我们需要学习如何处理连接错误、数据传输错误等网络相关的错误,并采取相应的措施来解决这些问题,确保程序的正常工作。 4. 多线程编程:在实验中,我们可以尝试使用多线程编程技术来处理多个客户端同时连接的情况。通过使用多线程,我们可以实现并发处理多个客户端请求的功能,提高程序的整体性能。 通过进行基于TCP/IP网络编程的实验,我们可以深入了解计算机网络通信的原理和相关技术,提高我们的编程能力和网络调试能力。这种实践能够让我们更好地理解和应用网络编程的知识,为今后的网络开发和应用提供有力的支持。 ### 回答2: 基于TCP/IP网络编程的实验是一种通过使用TCP/IP协议栈来实现网络通信的实验。这种实验方法可以帮助学习者深入了解网络编程的原理和技术,并实践如何使用TCP/IP来建立、管理和维护网络连接。 在实验中, 学习者首先需要了解TCP/IP协议的结构和工作原理。TCP/IP协议栈由多个层次构成,包括物理层、数据链路层、网络层、传输层和应用层。每一层有不同的功能和责任,并且通过封装和解封装数据来实现网络通信。 实验中的一个常见任务是建立一个TCP连接。学习者需要编写客户端和服务器端的代码来启动TCP连接,并通过发送和接收数据的方式进行通信。通过此实验,学习者能够学习到TCP连接的建立过程、TCP的可靠性传输和流量控制机制等相关知识。 另一个常见的实验任务是使用UDP协议进行数据传输。UDP是一种无连接和不可靠的传输协议,适用于需要高速传输和实时响应的应用场景。学习者需要编写代码来实现UDP的数据收发功能,并了解UDP的特性。 在实验中,学习者还可以学习到网络套接字编程的相关知识。通过编写基于套接字的代码,可以实现对网络连接的控制和管理,例如建立连接、监听连接请求、处理数据传输等。 通过基于TCP/IP网络编程的实验,学习者可以更加深入地理解网络通信的原理和技术,掌握网络编程的相关技能,并在实践中锻炼解决问题的能力。这样的实验不仅对于网络工程、计算机科学等专业的学生来说是非常重要的,对于对网络通信感兴趣的爱好者也是非常有帮助的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值