专利名称:利用卸载单元处理tcp连接数据的制作方法
技术领域:
本发明的一个或几个方面总体上涉及传输控制协议(TCP)处理,特别是涉及对基于TCP的通信的优化。
背景技术:
现有的TCP处理的例子是为了加速客户与服务器之间的数据传输而开发的各种系统和方法。例如,在一台主处理机(如CPU)上执行的软件实现和用来从主处理机上卸载TCP处理的昂贵的专用硬件实现相比,成本低但速度慢。
图l是现有技术的计算系统100的一个实施例的方块简图,计算系统100包括CPU 110和网络接口卡(NIC)150。计算系统100可以是台式电脑、服务器、手提电脑、掌上电脑、平板电脑、游戏控制台、移动电话、基于计算机的模拟器等等。将CPU 110连接到系统控制器120的总线112可以是前端总线(FSB)。相应地,计算系统100可以是基于网络集线器的体系结构,也被称为INTEL网络集线器体系结构,其中系统控制器120是一个存储器控制器网络集线器,并且一个I/O桥140通过一集线器到集线器接口126与系统控制器120连接。系统控制器l20通过存储器总线132与系统存储器130连接。I/O桥140包括一个外围部件接口(PCI)总线182的控制器并且可以包括系统管理总线142和通用串行总线144等的控制器。I/O桥可以是一单一集成电路或单一半导体平台。已知的系统控制器120的例子包括INTELNorthbridge。已知的I/O桥140的例子包括INTELSouthbridge和NVIDIA媒体和通信处理器(MCP)芯片。
NIC 150可与一个或多个PCI设备l80共享一个PCI总线182。NIC 150包括PCI接口145、专用处理机155、媒体存取控制器(MAC)165、专用存储器160和与ETHERNET网络172接口连接的ETHERNET接口l70。NIC 150的软件驱动程序119在NIC 150和CPU 110上执行的应用程序117之间通信。系统存储器130内配置有应用存储空间125、TCP堆栈存储空间145和驱动程序存储器空间135。
NIC 150内的专用处理机155被用于TCP处理,取代利用CPU 110执行TCP堆栈115来实施TCP处理。因此NIC 150卸载CPU 110,使CPU 110为其他应用程序释放出处理周期。同样,专利存储器160取代TCP堆栈存储空间145,释放出TCP堆栈存储空间145分配给其他应用程序。但是,包括专用存储器160和专用处理机155在内的NIC 150与CPU 110上执行的用于TCP处理的软件实现相比成本较高。
因此,有必要提供一种通过卸载主处理机的一些任务优化TCP处理并与专用硬件实现相比能够降低系统成本的部分硬件实现。
发明内容
本发明方法的各种实施例包括利用卸载单元处理帧(frame)数据的第一部分以便产生第一处理帧数据,利用卸载单元处理帧的第二部分,以便产生第二处理帧数据,并利用在CPU上执行的应用程序处理第二处理帧数据以产生第三处理帧数据。
本发明方法的各种实施例包括利用卸载单元处理委托(delegated)TCP连接,利用CPU上执行的应用程序执行处理非委托TCP连接,并利用CPU上执行的应用程序处理所有存在特殊事例(special case)的帧。卸载单元被配置为处理不存在特殊事例的帧。
本发明方法的各种实施例包括建立TCP连接并确定是否为硬件处理委托TCP连接。
本发明方法的各种实施例包括接收委托连接表索引,接收来自TCP堆栈传送的原型报头和数据,利用委托连接表索引存取委托连接表项,基于传送数据的一部分计算TCP检查和(checksum),并输出包括TCP检查和和传送数据的该部分的帧。
本发明各种实施例包括处理TCP连接数据的系统。该系统包括TCP堆栈、软件驱动程序和卸载单元。TCP堆栈被配置为处理接收到的存储于至少一个遗留缓冲区(legacy buffer)内的帧。软件驱动程序被配置为接口连接TCP堆栈和卸载单元。卸载单元被配置为处理委托连接上接收到的帧,以便产生有效载荷数据和部分处理的帧。
本发明各种实施例包括用于TCP堆栈和卸载单元之间通信的系统。该系统包括由TCP堆栈向卸载单元传送命令的装置和由卸载单元向TCP堆栈传送通知描述符的装置。
本发明涉及处理用于TCP连接的数据的新系统和新方法。
附图中显示了根据本发明的一个或更多的方面的实施例;但是,不应该认为附图是对本发明的限定,而仅是出于说明和理解本发明的目的。
图1是现有的包括主机计算机和网络接口卡的计算系统的一个示例性实施例的方块图。
图2A和2B是根据本发明一个或几个方面的包括主机计算机的计算系统的示例性实施例的方块图。
[图3是根据本发明一个或几个方面的图2A和2B中所示的硬件优化TCP子单元的实施例的简图。
图4A是根据本发明一个或几个方面设立一个委托连接的方法的实施例的简图。
图4B是根据本发明一个或几个方面接收一个帧的方法的实施例的简图。
图4C是根据本发明一个或几个方面的慢启动序列的实施例的简图。
图5A是根据本发明一个或几个方面的在图2A和图2B中所示的应用程序存储空间中的用户缓冲区的实施例的简图。
图5B是根据本发明一个或几个方面的用户缓冲区描述符的实施例的简图。
图5C是根据本发明一个或几个方面的在图2A和图2B中所示软件驱动程序存储空间中的遗留缓冲区的实施例的简图。
图5D是根据本发明一个或几个方面的遗留缓冲区标签表的实施例的简图。
图5E是根据本发明一个或几个方面的遗留缓冲区描述符的实施例的简图。
图6A是根据本发明一个或几个方面的用于由应用程序向卸载单元传送命令的命令环(command ring)的简图。
图6B是根据本发明一个或几个方面的用于由卸载单元向应用程序传送连接信息的通知环(notification ring)的简图。
图6C是根据本发明一个或几个方面的用于由应用程序向卸载单元传送接收缓冲区信息的接收描述符环(receive descriptor ring)的简图。
图6D是根据本发明一个或几个方面的用于由应用程序向卸载单元传送缓冲区信息的传送描述符环(transmit descriptor ring)的简图。
图7是根据本发明一个或几个方面的包括有图3所示硬件优化TCP子单元的一部分的方框图。
图8A是根据本发明一个或几个方面的处理有效帧的方法的简图。
图8B是根据本发明一个或几个方面的处理失序帧的方法的简图。
图8C是根据本发明一个或几个方面的等待用户缓冲区的方法的简图。
图8D是根据本发明一个或几个方面的完成用户缓冲区处理的方法的简图。
图9A是根据本发明一个或几个方面的确定通知的方法的简图。
图9B是根据本发明一个或几个方面的使用户缓冲区跟随遗留处理同步的方法步骤的简图。
图10A和10B是根据本发明一个或几个方面的表示传送数据所使用的格式的简图。
图11A和11B是根据本发明一个或几个方面的编辑出站(outbound)帧的方法的实施例的简图。
图11C是根据本发明一个或几个方面的在传送中生成的实施例的简图。
具体实施例方式
为了更好地理解本发明,在以下的说明中对特定的细节进行了描述。但是,对于本专业的技术人员来说,即使没有这些特定的细节仍然可以实现本发明。此外,为了避免使本发明含混不清,对于一些公知的特点不再说明。
图2A和图2B是本发明计算系统200的典型实施例的方框图,该计算系统200包括CPU 110和硬件优化TCP(HOT)单元250。在图2A中,卸载单元HOT单元250从CPU 110卸载部分的TCP处理。CPU 110执行TCP堆栈215,该TCP堆栈215包括用来完成至少部分TCP处理的代码,特别是HOT单元250没有执行的TCP处理。CPU 110通过总线112与系统控制器120连接。系统控制器120通过系统总线132与系统存储器130连接。系统存储器130包括TCP堆栈存储空间225、驱动程序存储空间235和连线表(CT)245(将在下面进一步说明)。系统控制器120通过集线器到集线器(hub-to-hub)接口126与I/O控制器240连接。
I/O控制器240包括PCI总线282的控制器,并可包括系统管理总线(SMBus)142的控制器、通用串行总线(USB)144等等。在另一实施例中,I/O控制器包括PCI快速总线(Express bus)的控制器。I/O控制器还包括HOT单元250,有效地将HOT单元250与通过PCI总线282连接到I/O控制器240的设备分离。特别是,集线器到集线器接口126可以是通过系统控制器120将HOT单元250连接到系统存储器130的高速工业标准总线或专有总线。连接到I/O控制器240的设备共享PCI总线282的可用带宽,该带宽典型地低于集线器到集线器126的可用带宽。与图1所示的NIC 150和CPU110之间的延迟(latency)相比,I/O控制器240内的HOT单元250的位置导致HOT单元250与CPU110和系统存储器130之间更少的延迟。在现有技术中,对于NIC和应用程序之间的通信,低延迟可能是关键的,如NIC 150和通过驱动程序255的软件堆栈之间。低延迟对于NIC 150和CPU 110之间传递命令来说尤其重要,例如,为了通知存储于驱动程序存储空间135中的帧数据已经准备好被拷贝到应用程序存储空间125了。还有,因为集线器到集线器接口126和存储器总线132都分别支持比PCI总线282更高的带宽,HOT单元250与通过PCI总线282连接到I/O控制器240的设备相比具有对系统存储器130更高的带宽存取。与通过较低带宽总线如PCI总线282连接到I/O控制器240的设备相比较而言,对系统存储器130更高的带宽存取使HOT单元250能够向应用程序存储空间227或驱动程序存储空间235以更快的速度传送接收到的帧,帧有时被称为“包”(packets)。
HOT单元250包括接口连接到输入/输出接口242的控制器。输入/输出接口242可将HOT单元250连接到物理层(PHY),如802.3 PHY、HPNA 1.0PHY、HPNA 2.0 PHY等等。在另一实施例中,PHY包括在HOT单元250中,并且输入/输出接口242是一个以太网接口,如吉比特以太网。I/O控制器240可以是单一集成电路或单一半导体平台。
图2B是包括有集成控制器220的计算系统200的另一实施例。集成控制器220至少执行系统控制器120和I/O控制器240的部分功能并包括HOT单元250。集成控制器220还可包括附加接口控制器(未示),例如,SMBus、通用I/O(GPIO)、集成设备电路(IDE)等。
TCP堆栈215选择一个或更多TCP连接作为委托连接。委托连接就是HOT单元250处理的TCP堆栈215干涉最少的TCP连接。未被委托的连接或需要特殊处理的委托连接被TCP堆栈215完全或部分地处理。TCP堆栈215通过利用存储于系统存储器130中的驱动程序255在HOT单元250内初始化一个委托连接表中的项来设立一个委托连接,进一步详细说明如后。驱动程序255是TCP堆栈215和HOT单元250之间有效的翻译程序,应TCP堆栈215的请求向HOT单元250发出命令。驱动程序255还在接收到来自HOT单元250的通知后通知TCP堆栈215。尽管TCP堆栈215和HOT单元250之间的通信是利用驱动程序255实现的,以后不再对驱动程序255详细说明。
与仅存储委托连接的连接状态数据的委托连接表不同,系统存储器130内的连接表245存储所有活动连接的连接状态数据。因此,TCP堆栈215可将任何委托连接的处理假定为HOT单元250的请求。由TCP堆栈215处理委托连接被称为“遗留处理”。
图3是根据本发明的一个或多个方面的图2A和图2B所示HOT单元250的方框图。DMA引擎310内的直接存储器存取(DMA)接口将I/O控制器240或集成控制器220内的一个或多个子单元连接。DMA接口被用来发送和接收系统存储器130和HOT单元250内子单元之间的数据,并用来发送和接收CPU 110和HOT单元250内子单元之间的数据。
传送引擎320包括被配置为解析和编辑出站帧的子单元,包括确认插入(acknowledgement insertion)和检查和循环冗余校验计算,产生出站帧。传送接口330包括一个或多个为传送存储出站帧的缓冲区和配置为通过输入/输出接口242将连接到HOT单元250的PHY接口连接的子单元。在HOT单元250的另一实施例中,PHY被集成到HOT单元250内。传送引擎320与委托连接表(DCT)350连接,该委托连接表350中存储委托连接的连接状态数据。委托连接表350是一个存储资源,例如,随机存储器(RAM)、寄存器文件等。至少部分的委托连接的连接状态表还存储于连接表245中。
委托连接表350中存储的状态信息可包括确定状态、连接地址、系统存储器缓冲区指针、连接跟踪标记、事件控制信息、传送窗口尺寸、接收窗口尺寸、时间戳数据等等。确定状态可包括待接收的下一预计序列号的序列号、控制及时生成确定的阈值等等。传送引擎320在帧处理处理中利用连接表索引、DCT索引读写委托连接表350的部分,以存取与委托连接相关的项。存储于该项中的连接状态数据在委托连接处于活动状态时被TCP堆栈215、传送引擎320和接收引擎360更新,如在图7中所述。
接收接口370包括子单元,被配置为通过输入/输出接口242与连接到HOT单元250的PHY接口连接。接收接口370还包括一接收FIFO(先入先出)缓冲区,用于存储接收到的被指定给接收引擎360的帧。接收引擎360通过DMA引擎310向系统存储器中130上载被部分处理的帧或仅上载TCP有效载荷数据,如后文详述。
接收引擎360包括子单元,被配置为将传入帧解析并确定该帧是否有效,即,计算检查和、核对标记并识别出帧类型,例如,IP、DUP、TCP等。当被解析的帧无效时被上载到驱动程序存储空间235内的遗留缓冲区中进行遗留处理。如果接收到的帧包含有带有TCP片段的IP包,TCP堆栈215被通知,并在执请求的TCP处理后将被上传的帧从遗留缓冲区拷贝到应用程序存储空间227。
当被解析的帧被确定为有效时,接收引擎360提取源IP地址、TCP序列号(SN)、TCP确认(ACK)号、TCP源和目的端口号、TCP窗口尺寸、TCP报头长度等。非委托连接上接收到的被解析的帧被上载到驱动器存储空间2 35中的遗留缓冲区中处理。委托连接上接收到的但又不是特殊事例的被解析的帧如失序号(out-of-order sequence number)和TCP标记压栈设置(TCPpush flag set)等被处理,并且TCP有效载荷数据被上载到应用程序存储空间227中的用户缓冲区。将TCP有效载荷直接上载到应用程序存储空间227比通过驱动程序存储空间235上载有效载荷数据更为高效,因为不需要随后将TCP有效载荷由驱动程序存储空间235拷贝到应用程序存储空间227。
图4A是根据本发明的一个实施例的设立委托连接的方法步骤的流程图。步骤410中计算系统200利用本领域技术人员已知的处理方法通过3次握手建立TCP连接。步骤412中TCP堆栈215确定是否委托由HOT单元250处理的连接。TCP堆栈215可基于委托连接的特性确定委托连接,如用户定义的连接类型的优先权、为连接规定的持续时间、为连接规定的帧速率、是否将连接用应用程序等,以便执行大量传送,连接所使用的特定TCP端口等。
如果步骤412中TCP堆栈确定不应委托该连接用于HOT单元250进行处理,那么步骤414中TCP堆栈215在CT 245中设立用于处理该连接的项并进入步骤422。如果步骤412TCP堆栈215确定应该委托连接用于HOT单元250进行处理,那么步骤416中TCP堆栈215向HOT单元250发出命令,在具有连接状态数据的DCT 350中设立一个项。步骤418中TCP堆栈215确定是否向HOT单元250发出一个后接收缓冲区(PRB),如后文详述,向HOT单元250提供系统存储器130中一个或多个用户缓冲区的位置和尺寸。如果步骤418中TCP堆栈215确定要发出PRB命令,那么步骤420中TCP堆栈215发出PRB命令。如果在步骤418中TCP堆栈215确定不发出PRB命令,那么TCP堆栈进入步骤422。步骤422中连接设立结束。
图4B是图4A是根据本发明的一个实施例的接收帧的方法步骤的流程图。步骤424中,HOT单元250通过输入/输出接口242接收帧并可部分处理该帧,产生部分解析帧和报头数据。步骤416中HOT单元250确定是否在委托连接上接收到了帧,并且,如果没有,步骤440中HOT单元250向一个或多个遗留缓冲区上载部分处理帧,包括其整套数据链路层和网络层协议报头数据。在步骤442中TCP堆栈215处理被上载到遗留缓冲区的被部分处理的帧。
如果在步骤416中,HOT单元250确定委托连接上接收到了帧,那么在步骤426中HOT单元250完成对帧的解析,提取TCP有效载荷数据。在步骤427中HOT单元250确定用户缓冲区是否可用,如果可用,那么在步骤428中HOT单元250向一个或多个用户缓冲区中上载TCP有效载荷数据。如果在步骤427中HOT单元250确定用户缓冲区不可用,那么在步骤430中HOT单元250向遗留缓冲区上载有效载荷数据的一部分并通知TCP堆栈215。在一个实施例中,该部分是由存储在与委托连接对应的DCT 350内的项中的“启动限制”值规定的。该“启动限制”是一个变量,其最大值可等于最大接收帧的尺寸,其最小值可由应用程序217或TCP堆栈215确定。
步骤432中TCP堆栈215处理上载到遗留缓冲区的TCP有效载荷数据步骤434中HOT单元250确定TCP堆栈215为委托连接发出的一个或多个PRB命令是否已经被处理。步骤436中HOT单元350将剩余TCP有效载荷数据上载到一个或多个用户缓冲区。如果在步骤434中HOT单元250确定委托连接的一个或多个PRB命令还没有被处理,那么在步骤438中HOT单元250将剩余TCP有效载荷数据上载到遗留缓冲区将通知TCP堆栈215。在另一实施例中,TCP堆栈215完成步骤434并在步骤438中TCP堆栈215指示HOT单元250将所有剩余TCP有效载荷数据上载到遗留缓冲区。
在一个实施例中,消息信号中断(MSIs)为HOT单元250提供一个利用多重中断向量发信号给其各种中断资源的机制。利用MSI能够使主机的中断处理更为效率。在一个实施例中,计算系统200利用多达8个中断向量。
图4C是根据本发明一个或几个方面的慢启动序列的实施例的简图。慢启动和拥塞避免算法由TCP协议规定(如RFC 793、RFC 1122及相关文件中提出的),因此是本领域技术人员所熟知的。TCP使用慢启动和拥塞避免来确定某一给定连接的可用带宽。两个变量ssthresh(慢启动阈值)和cwnd(拥塞窗口)确定委托连接的行为。HOT单元250上载ACK信息到TCP堆栈215,包括对接收到的ACK的计数。HOT单元250可被TCP堆栈215配置为合并(coalesce)ACK,而不是将每个接收到的ACK都通知TCP堆栈215,以TCP堆栈215规定的频率将ACK上载到TCP堆栈215。合并ACK使HOT单元250减少HOT单元215通知TCP堆栈215委托连接状态的频率,有望在许多情况下提高性能。特别是由于CPU 110不是为每个接收到的ACK都发生中断,对CPU的使用典型地减少了。对接收到的ACK的计数允许TCP堆栈215确定为每个通知接收到的ACK的数量以便实现慢启动和拥塞避免。
步骤452中应用程序217为委托连接设置cwnd为1段(segment)并且TCP堆栈215输出传送缓冲区描述符到HOT单元250,如后面说明图6D时详细说明。步骤454中HOT单元250确定ACK是否被由目标接收到。HOT单元250在步骤454保持,直到ACK被接收到并且然后HOT单元250通知TCP堆栈215并进入步骤456。在一个实施例中HOT单元250输出接收到ACK的计数给TCP堆栈215并且TCP堆栈215可计算在每个通知之间为委托连接接收到的ACK的数量。
步骤456中TCP堆栈215为委托连接确定cwnd是否大于或等于ssthresh,如果是,那么在步骤458中TCP堆栈215呈指数增加,即,打开,基于为委托连接接收到的ACK的数量的cwnd。步骤458中TCP堆栈215还向HOT单元250传送缓冲区描述符并返回步骤454。
在一个实施例中,步骤458中TCP堆栈215将HOT单元250配置为通知TCP堆栈每个接收到的ACK。在另一实施例中TCP堆栈215将HOT单元250配置为通知TCP堆栈215一个接收到的ACK的计数,从而执行一些ACK合并。如果步骤456中TCP堆栈215为委托连接确定ssthresh小于cwnd,那么在步骤460中TCP堆栈215处理拥塞避免阶段。当拥塞避免被使用时cwnd线性打开,直到cwnd等于最大传送窗口尺寸或丢下包。
图5A是根据本发明一个或几个方面的在图2A和图2B中所示的应用程序存储空间中的用户缓冲区的实施例的简图。每个用户缓冲区如用户缓冲区510、用户缓冲区512或用户缓冲区514都被分配在应用程序存储空间227中,用来接收HOT单元250上传的有效载荷数据。物理存储器地址,如用户缓冲区地址515指出用户缓冲区510在应用程序存储空间227中的位置。类似地,用户缓冲区地址520指示用户缓冲区512的位置,用户缓冲区地址525指示用户缓冲区514的位置。用户缓冲区可被存储于应用程序存储空间227内的物理上互相毗邻的存储位置或存储于应用程序存储空间227内的物理上不相毗邻的存储位置。
图5B是根据本发明一个或几个方面的用户缓冲区描述符的实施例的简图。每个用户缓冲区都具有由能够存储于该用户缓冲区中的字节数确定的对应长度。例如,用户缓冲区510的长度就是用户缓冲区长度535。用户缓冲区描述符是一种数据结构,包括用户缓冲区地址,如用户缓冲区地址515和对应用户缓冲区长度,如用户缓冲区长度535。在另一实施例中,用户缓冲区描述符可包括指示任何特殊处理等的描述符标记。用户缓冲区描述标记可在其他位中包括请求HOT单元350在有效载荷数据被上载到包括在PRB命令中的用户缓冲区发出通知命令的位在又一实施例中,用户缓冲区描述符可包括用户缓冲区地址、用户缓冲区长度和用户缓冲区结束地址的任意组合。如前述,利用PRB命令由TCP堆栈215将用户缓冲区描述符提供给HOT单元250。向HOT单元250提供位于应用程序存储空间227的物理存储器地址使HOT单元250直接向应用程序存储空间227上载有效载荷数据。
应用程序217管理用户地址空间,其是由操作系统分配的虚拟地互相毗邻的地址空间。当应用217将用户地址空间信息传送给TCP堆栈215时,TCP堆栈215请求操作系统锁定对应该用户缓冲区地址空间的存储器。操作系统锁定存储器的数量并向TCP堆栈215返回对应系统存储器130的物理上互相毗邻的部分的一个或多个物理地址(和长度)。HOT单元250存取的物理地址空间由TCP堆栈215管理而不必是物理上互相毗邻的。TC堆栈215进行用户地址空间和物理地址空间之间的翻译转换。在另一实施例中驱动程序255进行用户地址空间和物理地址空间之间的翻译转换。
图5C是根据本发明一个或几个方面的在图2A和图2B中所示软件驱动程序存储空间中的遗留缓冲区的实施例的简图。每个遗留缓冲区如遗留缓冲区550、遗留缓冲区552或遗留缓冲区554都被分配在驱动程序存储空间235中以便接收HOT单元250上载的部分处理的帧。物理存储地址,如遗留缓冲区地址555指示遗留缓冲区550在驱动程序存储空间235中的位置。类似地,遗留缓冲区地址560指示遗留缓冲区552的位置并且遗留缓冲区地址565指示遗留缓冲区554的位置。遗留缓冲区可被存储于驱动程序存储空间235内的互相毗邻的存储器位置或驱动程序存储空间235内不互相毗邻的存储器位置。
图5D是根据本发明一个或几个方面的遗留缓冲区标签表的实施例的简图。每个遗留缓冲区地址都与一唯一的标签相关联。例如,遗留缓冲区地址555与标签575相关联,遗留缓冲区地址560与标签580相关,遗留缓冲区地址565与标签585相关。在一个实施例中,遗留缓冲区标签表590由驱动程序255维护并可被存储于驱动程序存储空间235中,或在另一实施例中被存储在TCP堆栈存储空间225中。
图5E是根据本发明一个或几个方面的遗留缓冲区描述符的实施例的简图。每个遗留缓冲区都具有能够存储在遗留缓冲区内字节的数目所决定的对应长度。例如遗留缓冲区550的长度是遗留缓冲区570。在另一实施例中,所有遗留缓冲区的长度都相等。遗留缓冲区描述符是一种数据结构,包括遗留缓冲区地址,如遗留缓冲区地址555;对应遗留缓冲区长度,如遗留缓冲区长度570;和对应标签,如标签575。在另一实施例中,遗留缓冲区描述符可包括任何遗留缓冲器地址的组合、遗留缓冲器长度、标签、和遗留缓冲器端地址。遗留缓冲器描述符被驱动器255利用接收(缓冲区)描述符环,提供给HOT单元250,以后还要详细说明。
驱动程序255与HOT单元250之间的通信通过存储在驱动器存储空间235内的数据结构完成。环(ring)是指包括多个项的数据结构,其详述如后。环被组织成项的环形队列,带有驱动程序255使用的指针和HOT单元250使用的另一指针。每个环都存储在驱动程序存储空间235内毗邻的物理存储器中。
图6A是用于由应用程序255向HOT单元250传送命令并由HOT单元250向驱动器255传送状态的命令环601的简图。命令环601用于初始化DCT 350中的委托连接项并将用户缓冲区描述符提供给DCT 350。命令环601包括若干项,每个项在图6A中都以命令环项603表示。每个命令环项603都包括指示该项是归HOT单元250或驱动程序255所拥有的“own”位。启动时,每个项中的“own”位都被初始化,被指示为驱动程序255所有,并且命令写指针607和命令读指针605在命令环601中是同一个项。当TCP堆栈215通过驱动程序255向一个项写入一个命令时,“own”位被设置为指示该项为HOT单元250所有并且命令写指针607被改为指向命令环601中的下一个指令环项603。当HOT单元250读出并完成处理时,设置一个被命令读指针605定址的项,指示该项为驱动程序255所有。不允许命令读指针605越过命令写指针607。当命令读指针605或命令写指针607到达命令环601的尾项时,该指针卷入命令环601中的首项。本技术领域的专业人员能够理解还可以采用其他机制将命令送至HOT单元250,例如,命令连接表、FIFO、共享存储器方案等。
除“own”位外,每个命令环项603还包括命令字段、DCT索引、特定命令控制和/或状态信息、特定命令数据等。如前述,DCT索引识别DCT 350中与委托连接对应的项。命令字段包括命令标识符,用于PRB命令、更新表项(UTE)命令、无效表项(ITE)命令、转储连接缓冲区表项(DCBTE)命令等命令。当一条命令被驱动程序255写入时,特定命令控制/状态信息包括特定命令控制。当命令被HOT单元350读出并更新时,特定命令控制/状态信息被更新为包括特定命令状态。特定命令数据被驱动程序255写入并被HOT单元350读出,详述如后。
PRB命令被应用程序217使用,以便通过TCP堆栈215和驱动程序255将用户缓冲区描述符传递给HOT单元350。每个用户缓冲区描述符为HOT单元350在应用程序存储空间227中指示一个物理地址以便将有效载荷数据上载到其中。TCP堆栈接收一个或多个用户地址并确定对应的物理地址以便包括在用户缓冲区描述符中。TCP堆栈215可代表应用程序217为一单一委托连接表项利用PRB命令通过驱动程序255发送一个或多个用户缓冲区描述符。驱动程序255包括PRB命令内特定命令控制和/或状态信息字段内用户缓冲区的数量。因为驱动程序255没有必要的信息来确定HOT单元350已经上载了多少个先前被发送的用户缓冲区,所以HOT单元350在特定命令控制和/或状态信息字段中写入一个指示PRB命令接受的用户缓冲区的数量。
PRB命令中的特定命令控制和/或状态信息字段还包括“sync”位。TCP堆栈215在包括有被断言遗留标记的通知命令已经通过通知环611由HOT单元接收时(如后在图9B中详述),请求驱动程序255写入“sync”位。
由驱动程序255构建的在PRB命令中的特定命令数据字段包括对应PRB命令中发送的第一缓冲区的首字节的起始TCP序列号和包括在PRB命令中的所有用户缓冲区的用户缓冲区描述符等。用户缓冲区描述符包括在应用程序存储空间227中规定位置的物理地址、用户缓冲区长度、指示任何特殊处理的描述符标记等等。
UTE命令被驱动程序255使用,用来更新DCT 350中的项,还被用于设立委托连接和委托连接活动时更新连接数据。ITE命令被用来将委托连接无效。当HOT单元250接收ITE指令时,如果有必要,在清除对应ITE命令中规定的DCT索引的委托连接之前,它将等待传送引擎320和接收引擎360处理的完成(同时阻塞任何新的TCP处理的启动)。DCBTE命令使HOT单元350向遗留缓冲区上载DCBTE命令中所包括的由DCT索引规定的项。
驱动程序255可存取命令环601而不干扰PRB命令的传送或接收处理处理。这样就允许驱动程序255向HOT单元350及时提供新的用户缓冲区,从而提高接收帧能够被HOT单元350接受而不是被阻塞的可能性。
图6B是用于由HOT单元250向驱动程序255传送事件通知描述符的通知环(notification ring)的简图。通知环611载有通过驱动程序255由HOT单元250向TCP堆栈215的连接信息。本领域技术人员应该理解,还可以使用其他机制由HOT单元250向TCP堆栈215交流信息,例如,通知描述符的链接表、FIFO、共享存储器方案等。
通知环611包括多个项,图6B中所有项都用通知环项613表示。每个通知环项613包括指示该项是被HOT单元250还是被驱动程序255所有的“own”位。启动时,每个项中的“own”位都被初始化,被指示为HOT单元250所有,并且通知写指针617和通知读指针615在通知环611中是同一个项。当HOT单元250通过驱动程序255向一个项写入一个命令时,“own”位被设置为指示该项为驱动程序255所有并且通知写指针615被改为指向通知环611中的下一个通知环项613。当驱动程序255读出并完成处理被通知写指针617定址的项,“own”位被设置为指示该项为HOT单元250所有。不允许通知读指针617越过通知写指针615。当通知读指针617或通知写指针615到达通知环611的尾项时,该指针卷入通知环611中的首项。
除“own”位外,每个通知环项613还包括通知标记字段、DCT索引、可选标记(该标记如果存在,向特定遗留缓冲区提供参考)、下一预计序列号、最高接收到的ACK号、最近接收到的传送窗口尺寸、当前TCP时戳等等,用于DCT索引规定的委托连接。通知标记字段包括“遗留”标记、“压栈通知”标记、“双重ACK”标记、“序列号阈值”标记、“ACK阈值”标记、“请求缓冲区”标记等等。“遗留”标记在有效载荷数据或部分解析帧数据已经被HOT单元250上载到遗留缓冲区。“压栈通知”标记、“双重ACK”标记、“序列号阈值”标记、“ACK阈值”标记和“请求缓冲区”标记将在图9A中说明。
当HOT单元250向遗留缓冲区上载有效载荷数据或被部分解析帧数据时可包括可选标记,以后在图8C中还有详细说明。该标记是通过接收描述符环由驱动程序255接收的(后面将详细说明),并被用于将给定的通知与上载了有效载荷数据或被部分解析帧数据联系起来。驱动程序255可使用随通知接收的标记通过读出与该标记相关联的遗留缓冲区标签表590中的项找到遗留缓冲区在驱动程序存储空间235中的位置。
HOT单元250可利用通知环611及时通知驱动程序255要求进一步由驱动程序255以对HOT单元250传送或接收处理影响最小的方式处理的连接条件。通知环611的操作允许驱动程序255及时提供HOT单元350新用户缓冲区,从而提高接收帧能够被HOT单元250接受而非阻塞的可能性。
图6C是根据本发明一个或几个方面的用于由通过驱动程序255由TCP堆栈215向HOT单元250传送接收缓冲区信息的接收描述符环621(receivedescriptor ring)的简图。接收描述符环621被用于向HOT单元250提供遗留缓冲区描述符。可由HOT单元250向遗留缓冲区上载若干种类型的数据,包括非TCP帧、非委托连接上接收到的帧、在委托连接上接收的包含有的异常(意外的标记、失序、无效检查和等)的帧,和由DCT350上载的连接数据。本领域技术人员应该理解,还可以使用其他机制向HOT单元250提供缓冲区描述符,例如,通知描述符的链接表、FIFO、共享存储器方案等。
接收描述符环621包括若干项,所有的项在图6C中都表示为接收描述符环项623。每个接收描述符项623都包括指示该项是由HOT单元250所有还是由驱动程序255所有的“own”位。“own”位的功能在对图6A的说明中已有阐述。接收描述符写指针627与命令写指针607的功能将同,接收描述符读指针625与命令读指针605的功能将同除“own”位外,每个接收描述符环项623还包括遗留缓冲区描述符、接收控制和/或状态字段等。如对图5E的说明中所述,遗留缓冲区描述符包括规定在驱动程序存储空间235中的物理位置、遗留缓冲区长度和可选标记。
当接收描述符环项623被驱动程序255写入时,接收描述符环项623可与其他位包括请求HOT单元350在数据被上载到接收描述符环项623中规定的遗留缓冲区上时发送中断的位。当接收描述符环项623被HOT单元350读出并更新时,接收控制和/或状态信息被更新,以便在有效载荷数据或被解析的帧数据被上载到遗留缓冲区时包括连接状态。上载到遗留缓冲区被HOT单元350为非委托连接写入的接收控制和/或信息可包括接收帧指示器的尾端、超出最大帧尺寸指示器等。上载到遗留缓冲区被HOT单元350为委托连接写入的接收控制和/或信息可包括启动缓冲区指示器、用户缓冲区不可用指示器、接收帧尾端、超区域ACK接收到指示器等图6D是根据本发明一个或几个方面的用于通过驱动程序255由TCP堆栈215向HOT单元250传送传送缓冲区信息的传送描述符环(transmitdescriptor ring)的简图。该传送描述符环631被用于向HOT单元250提供传送缓冲区描述符。本领域技术人员应该理解,还可以使用其他机制向HOT单元250提供缓冲区描述符,例如,通知描述符的链接表、FIFO、共享存储器方案等。
传送描述符环631包括若干项,每个项都在图6D中用传送描述符环项633表示。每个传送描述符项633包括“own”位,指示该项是由HOT单元250所有或是由驱动程序255所有。“own”位的功能在对图6A中的描述中已经说明。工传送描述符写指针637的功能与命令写指针607的功能相同,传送描述读指针635的功能与命令读指针605的功能相同。
除“own”位外,每个传送描述符环项633都包括传送缓冲区描述符、DCT索引、特定命令传送控制、传送控制/状态字段、传送缓冲区字节计数等。传送缓冲区描述符包括规定了在的应用程序空间227或存储了待传送帧数据的TCP堆栈存储空间225中的物理地址。HOT单元250利用该物理地址从驱动程序存储空间235中读出帧数据。特定传送控制可包括为传送引擎320的请求以便保留DCT 350中的帧的首字节的序列号。当为了帧而接收到ACK时,HOT单元250可生成通知命令。
传送控制和/或驱动程序255写入的状态字段可包括传送帧指示器的末端、启动TCP分段的一位、启动HOT单元250的TCP检查和计算的一个或多个位、TCP分段中使用的最大段尺寸等等。当传送描述符环项633被HOT单元250读出并更新时,特定传送控制和/或状态信息被更新以便包括特点传送状态。特定传送状态可包括载体指示器的丢失、传送重试计数、重试错误等等。
图7是根据本发明一个或几个方面的包括有图3所示HOT单元250一部分的方框图。DCT 350包括用于处理通过命令环601接收来自驱动程序255的CMD单元710。委托连接信息存储在连接缓冲区表(CBT)715、连接数据表(CDT)720和连接匹配表(CMT)725中的DCT 350内。CBT 715、CDT 720和CMT 725内的委托连接项可被CMD单元710写入。CMT 725存储委托连接标识信息并且CMT 725在委托连接被设立时被CMD单元710写入。在CMT 725中,对应委托连接的项保持对应,只要连接保持委托或直到连接终止。CMT 725中的项包括目标IP地址、源IP地址、源TCP端口、目标TCP端口等。
当委托连接被建立时,CMD单元710初始化CDT 720中的项。CDT 720中的项包括委托连接的委托连接状态信息,如预期的序列号、ACK号、时戳数据、未承认帧(unacknowledged frames)的计数等。当帧被构造为在委托连接传送时,CDT 720中的项内的字段被传送引擎320读出并选择性地修改。同样地,当委托连接上的进入帧被处理时,CDT 720中的项内的字段被接收引擎360读出并有选择地修改。当PRB命令为委托连接被接收到时,CBT 715内的项被CMD单元710用一个或多个用户缓冲区描述符写入。用户缓冲区信息被接收引擎360内的缓冲区上载单元745读出并有选择地修改。
委托连接信息已经被分配在CBT 715、CDT 720和CMT 725之间,所采取的方式是断开由影响CBT 715的用户缓冲区张贴(postings)到存储于CDT720的状态信息。还有,由于状态信息是被接收引擎360基于最新接收到的帧更新的,传送引擎320和TCP堆栈215能够在帧构建期间存取当前状态信息。类似地,由于状态信息也是传送引擎320基于最新传送的帧更新的,接收引擎360和TCP堆栈215能够在帧构建期间存取当前状态信息。
在接收接口370内,缓冲区,接收FIFO 730缓冲进入帧。接收接口370输出帧和有效帧指示器到接收引擎360内的解析单元735。预解析单元735解析有效帧,产生被部分解析的帧,并读出CMT 725以确定是否该帧被接收到委托连接。预解析单元735输出被部分解析的帧到解析单元740。解析单元740确定每个被部分解析帧的协议类型,即,TCP、UDP、IP等,并选择性地解析该被部分解析的帧,产生解析帧和被部分解析的帧。解析单元740读出CDT 720,确定是否存在一个或多个特殊事例,并输出被部分解析的帧、解析帧或帧,到缓冲区上载单元745。解析单元740还选择性地设置存储在如通知单元750内寄存器的存储器件内的通知标记,如后详述。
缓冲区上载单元745读出CBT 715并选择性地写入CBT 715和CDT 720。缓冲区上载单元745通过DMA引擎310上载帧、部分解析帧和解析帧到系统存储器130。缓冲区上载单元745基于存储于CBT 715中的用户缓冲区描述符中或通过接收描述符环261接收到的来自驱动程序255的遗留缓冲区符中的数据规定写入系统存储器130的位置。类似地,传送引擎320基于通过传送描述符环631接收的来自驱动程序255的传送缓冲区描述符规定系统存储器130中的读出位置。通知单元750通过到驱动程序255的DMA引擎310输出通知到通知环611。
限制数量连接的委托连接信息被存储于CMT 725,并在达到该限制数量时超出连接的连接信息仅被存储于系统存储器130内的CT 245(图2A或2B)中。在一个实施例中,HOT单元250上载部分处理帧到驱动程序存储空间235中的遗留缓冲区,而非为了处理用于超出连接的进入和外出帧而存取CT 245的连接信息。在另一实施例中,HOT单元250将DCT 350作为高速缓存并根据需要存取CT 245以便定位相对连接数据。TCP堆栈215独立于HOT单元250执行的额外进入或外出帧的处理完成对部分处理的帧的处理。因此,超出连接的遗留处理典型地以等于或高于在没有HOT单元250的情况下的计算系统200中的帧处理速率进行处理。该速率可能是更好的,因为帧是由HTO单元250部分处理的并且在接收接口370执行的帧有效性也被上载到驱动程序存储窨235。还有,驱动器255和TCP堆栈215的遗留处理可以与HOT单元250的传送处理或接收单元250的接收处理同时进行图8A是根据本发明一个或几个方面的处理有效帧的方法的简图。在步骤801中有效帧被接收引擎360内的预解析单元735接收。步骤803中预解析单元735确定该有效帧是否为TCP帧,如果不是,在步骤805中完成本领域技术人员所熟知的非TCP处理。在一个实施例中,接收引擎360完成接收的UDP帧的处理。在另一实施例中,接收引擎360完成另一协议的处理。在又一实施例中,接收引擎360上载其他协议的帧到驱动程序存储空间235并通知驱动程序255。
如果在步骤803中,预解析单元735确定有效帧是TCP帧,那么在步骤807中,预解析单元735由CMT 725中读一个或多个项。步骤809中预解析单元735确定TCP帧(以下称为“该帧”)是否在委托连接被接收,即,是否该帧与CMT 725中的项匹配。预解析单元735从该帧中提取目标IP地址、源IP地址、源PCT端口和目标TCP端口并利用这些值在CMT 725中查找匹配项。匹配是指连接已经被委托。如果步骤809中,预解析单元735确定该帧未在委托连接上被接收到,那么在步骤813中该帧的遗留处理完成。预解析单元735借助解析单元740通过输出该帧到缓冲区上载单元745和指示该帧未在委托连接上接收来开始进行遗留处理。缓冲区上载单元74通过DMA引擎310上载至少被部分解析的帧到驱动程序存储空间235并通知带有遗留处理的驱动程序255,如后详述。
在步骤809中,预解析单元735确定该帧在委托连接上被接收,然后在步骤811预解析单元735输出部分处理帧到解析单元740。步骤811中解析单元740解析部分处理的帧,产生解析帧并确定是否存在特殊事例,例如,IP或TCP选择、无效标记等,如果是这样的,步骤812中解析单元输出解析帧到缓冲区上载单元745,指明存在特殊事例。步骤812中,缓冲区上载单元745在CBT 720的项中设置“sync request”标记对应委托连接并刷新对应委托连接的CBT 715中的项中的任何用户缓冲区描述符。步骤813中,缓冲区上载单元745通过DMA引擎310上载解析帧到驱动程序存储空间235并通知驱动程序255遗留处理请求。步骤812中为委托连接设置“sync request”标记表明委托连接是使用遗留处理被处理的。接收引擎360不接受委托连接的用户缓冲区描述符命令,直到sync request标记被未来的缓冲区张贴事件清除,后面将结合图9A进一步说明。
如果在步骤811中解析单元740确定不存在特殊事例,那么在步骤815中解析单元740读出CDT 720中对应委托连接的项。步骤817中解析单元740和缓冲区上载单元745确定哪个存储于通知单元750中的通知标记被设置(如有),后面将结合图9A具体说明。步骤819中解析单元740确定由TCP帧中提取的序列号(SN)是否不等于存储于CDT 720中对应委托连接的项中的序列号(DCT SN),如果是这样,步骤821中解析单元740请求失序恢复。后面将结合图8B进一步说明失序恢复。
如果在步骤819中解析单元740确定SN等于DCT SN,那么在步骤823中解析单元740输出解析帧到缓冲区上载单元745。步骤823中缓冲区上载单元745读出CBT 715中对应委托连接的项。步骤825中,缓冲区上载单元745确定用户缓冲区是否可用。术语“用户缓冲区”与术语“HOT缓冲区”是可互换的。如果HOT缓冲区不可用,那么步骤827中缓冲区上载单元745或者等待HOT缓冲区变为可用或通过DMA引擎310上载解析TCP帧到遗留缓冲区,后面将结合图8C对此进一步说明。
如果在步骤825中缓冲区上载单元745确定HOT缓冲区可用,那么在步骤829中缓冲区上载单元745完成解析帧的处理并上载至少有效载荷数据的一部分到HOT缓冲区,后面将结合图8D对此进一步说明。在步骤831中,在上载有效载荷数据的部分到HOT缓冲区后,缓冲区上载单元745确定是否在解析帧中存在额外的有效载荷数据,如果是这样,重复步骤825和829。如果在步骤831中缓冲区上载单元745确定所有的有效载荷数据都已经被上载到一个或多个HOT缓冲区了,那么在步骤833中缓冲区上载单元确定解析帧中TCP“压栈”标记是否已经被断言。如果在步骤833中缓冲区上载单元745确定TCP“压栈”标记被断言,缓冲区上载单元745为CBT715中对应委托连接的项设置“sync request”标记并刷新所有CBT 715中对应委托连接的项中的缓冲区描述符。如果在步骤833中缓冲区上载单元745确定TCP“压栈”标记没有被断言,那么接收引擎360进行步骤801。
图8B是根据本发明一个或几个方面的处理失序帧的方法的简图。本领域技术人员所容易理解,图8B中的方法步骤构成了执行图8A的步骤821的一种方式。失序恢复处理包括SN大于存储在DCT SN中的值所预期的(例如,由一个或多个丢失帧造成的)情况或SN小于DCT SN(例如,由于传输超时或丢失ACK造成的帧的重复传送)的情况。当SN大于DCT SN时,接收引擎360执行“快速恢复”(fast recovery)算法,包括传输最多3个连续相同构造的ACK(每个都对应按顺序接收到的最后帧),使为委托连接的用户缓冲区失效(刷新),并上载整个帧到一个或多个遗留缓冲区。当SN小于DCT SN时,接收引擎360为帧传送ACK,为委托连接无效用户缓冲区,并上载整个帧到一个或多个遗留缓冲区。
在步骤830中解析单元740确定从帧中提取的SN是否小于由图8A的步骤815中的CDT 720读取的DCT SN,如果是这样,在步骤832中解析单元740向传送引擎320发出信号,生成帧的ACK。步骤832中,解析单元740还输出解析帧到缓冲区上载单元745并执行步骤838。如果在步骤830中解析740确定从帧中提取的SN不小于DCT SN,那么步骤834中,解析单元740确定在步骤815中由CDT 720读出的“Fast ACK”值小于3,如果是这样,解析单元740给传送引擎320发信号,为步骤836中的解析帧生成ACK。还有在步骤836中,解析单元740输出解析帧到缓冲上载单元745并指示缓冲区上载单元745将存储于CDT 720中的“Fast ACK”递增。
步骤838中缓冲区上载单元745刷新任何对应存储于CBT 715中的委托连接的HOT缓冲区。步骤840中缓冲区上载单元745设置CBT 715中对应委托连接的“sync request”标记并有选择地为委托连接更新连接存储于CDT 720中的状态数据,例如,Fast ACK、DCT SN、ACK号等。步骤813中,缓冲区上载单元745通过DMA引擎310上载解析TCP帧到驱动程序存储空间235并通知驱动程序255遗留处理请求。
图8C是根据本发明一个或几个方面的等待用户缓冲区的方法的简图。本领域技术人员所容易理解,图8C中的方法步骤构成了执行图8A的步骤827的一种方式。接收引擎360等待用户缓冲区而不是上载解析帧或部分解析帧到遗留缓冲区,因为数据上载用户缓冲区不需要通过TCP堆栈由驱动程序存储空间235拷贝到应用程序存储空间227。还有,一但使用遗留缓冲区处理委托连接,TCP堆栈215必需响应“sync request”标记,导致在委托连接的解析帧或部分解析帧会被接收引擎360上载到用户缓冲区之前,“sync request”标记被清空。
步骤850中,缓冲区上载单元745确定图8A中的步骤823中读出的对应委托连接的项中是否设置了“request buffer”。如果“requestbuffer”标记没有被设置那么步骤852中缓冲区上载单元745设置CBT 715中对应委托连接的项中的请求缓冲区标记并初始化缓冲区请求计时器到一个存储在寄存器中的值。在另一实施例中缓冲区请求计时器被初始化到一个存储在CBT 715中对应委托连接的项中值。如果在步骤850中,缓冲区上载单元745确定“request buffer”标记被设置,那么缓冲区上载单元745进入步骤862。
步骤854中缓冲区上载单元745上载一定数量的由“startup limit”(启动限制)值通过DMA引擎310确定到遗留缓冲区的字节。该启动限制值由TCP堆栈215初始化,被存储于CDT 720中对应委托连接的项中。步骤856中,缓冲区上载单元745设置“request buffer”标记存储于通知单元750中并且通知单元750通过通知环向驱动程序255发送通知。该通知包括与相关遗留缓冲区描述符的标签字段中使用的标签值相同的标签值。通知单元750在发送通知后清空通知标记。采用本领域技术人员公知的技术以确保驱动程序255收到对应通知前解析帧被上载到驱动程序存储空间235。
步骤858中缓冲区上载单元745确定指示接收FIFO 730的“fullness”值是否大于限定值,例如,“高水位”标志,并且,如果是这样缓冲区上载单元745进入步骤862。在一个实施例中,高水位值是固定的。在另一实施例中,高水位值存储于驱动程序255编程的寄存器中。如果在步骤858中,缓冲区上载单元745确定指示接收FIFO 730的“fullness”的值不大于“高水位”值,那么在步骤860中,缓冲区上载单元745确定缓冲区请求计时器已经期满,那么在步骤862中缓冲区上载单元745设置存储于CBT 715的“sync request”标记和存储于通知单元750中的遗留标记。步骤813中,缓冲区单元745通过DMA引擎410上载解析帧到到驱动程序255,通知单元750清空通知标记,并且接收引擎360返回图8A中的步骤801。通知包括由相关遗留缓冲区描述符的标签字段中使用的标签值相同的标签值。采用本领域技术人员公知的技术以确保驱动程序255收到对应通知前解析帧被上载到驱动程序存储空间235。
如果步骤860中缓冲区上载单元745确定缓冲区请求计时器没有期满,步骤864中缓冲区上载单元745确定用户缓冲区是否可用,即,如果应用程序已经通过命令环张贴了用户缓冲区。如果用户缓冲区不可用,缓冲区上载单元745完成解析帧的处理并在步骤829中上载有效载荷到用户缓冲,如后面对图8D中进一步详述。步骤829后,接收引擎360回到图8A的步骤831中。
图8D是根据本发明一个或几个方面的完成用户缓冲区处理的方法的简图。本领域技术人员所容易理解,图8D中的方法步骤构成了执行图8A的步骤829的一种方式。当HOT单元250接收进入数据时,应该将ACK发送到发送者(目标连接),以确保指示应该有多少数据送到HOT单元250接收窗口保持足够的打开宽度以允许接收路径的饱和。当接收到的帧没有及时被承认时,接收窗口可能需要被关闭,否则发送者内的重发计时器可能会期满,导致发送者重发一个或多个帧。
除对发送者传送ACK之外,驱动程序255在帧被基于序列号和计时器等被HOT单元250接收到时被通知。CDT 720通过由接收的TCP有效载荷尺寸增加DCT SN被更新,对未承认帧的计数递增,并且向接收到的帧提取的最近接收到的TCP时戳被存储到为了委托连接的CDT 720,如果TCP时戳选择被适合地包括在接收到的帧中。
步骤876中解析单元740确定未承认帧的计数是否大于未承认帧的限制值,如果是这样,进入步骤880。未承认帧限制值为连接存储于CDT 720中并且由TCP堆栈215确定。在另一实施例中,解析单元740确定委托连接上接收到的未承认帧的计数是否大于或等于步骤876中的未承认帧限定值。在另一实施例中,缓冲区上载单元745确定未承认帧的计数是否大于未承认帧的限定值。
如果在步骤876中解析单元740确定未承认帧的计数小于或等于未承认帧限定值,那么解析单元740确定在步骤878中传送计时器是否已经期满。传送ACK计时器被配置为在发送者的重传送计时器期满前期满,目的是将由于发送者未能及时接收ACK最小化不必要的重新传送。在一个实施例中,传送ACK计时器的期限对于所有委托连接是一个常数。在另一个实施例中,传送ACK计时器的期限可由TCP堆栈为每个委托连接的期限编程。
如果在步骤878中解析单元740确定传送ACK计时器已经期满,那么解析单元740向传送引擎320发信号,为步骤880中的解析帧生成ACK并且传送引擎320输出解析帧到缓冲区上载单元745。步骤882中,缓冲区上载单元745通过将其设置零将更新为连接存储于CDT 720的项中的未承认帧计数并更新“last ACK sent”值到由帧提取的SN值。缓冲区上载单元745还更新连接状态数据如递增ACK号和递增序列号等,并在进入步骤886前重置传送ACK计时器。
如果在步骤878中缓冲区上载单元745确定传送ACK计时器没有期满,那么缓冲区上载单元745更新步骤884中在CDT 720中对应委托连接的项,例如,通过更新未承认帧的计数等。
步骤886中有效载荷数据被缓冲区上载单元745通过DMA引擎310上载到应用程序存储空间227中的HOT缓冲区TCP。步骤888中通知单元750确定是否设置了任何通知标记,并且,如果是这样,在步骤890中,通知单元750通过通知环发送通知到驱动程序255。通知单元750构造事件通知描述符,包括通知标记、传送窗口尺寸、SN、最后的ACK号、TCP时戳值、来自遗留描述符的标签值等等。通知单元750在发送通知后清空通知标记。
通知单元750输出事件通知描述符到DMA引擎310,该DMA引擎310将事件通知描述符传送给存储中驱动程序存储空间235内的卸载事件通知环。卸载事件通知环被组织为毗邻内存块形式的环形队列。HOT单元250写入卸载事件通知环并且驱动程序255读出卸载事件通知环。TCP堆栈215可使用由卸载事件通知环读出的数据更新CT 245,从而保持CT 245和DCT 350之间的一致。TCP堆栈215还可通过上载CDT 715中的项到一个或多个遗留缓冲区保持CT 245和DCT 350之间的一致步骤890之后,接收引擎360回到步骤801处理其它有效帧。如果在步骤888中,通知单元750确定一个或多个通知标记不被设置,那么接收引擎360回到步骤801处理另一个有效帧。
图9A是根据本发明一个或几个方面的确定通知的方法的简图。本领域技术人员所容易理解,图9A中的方法步骤构成了执行图8A的步骤817的一种方式。可使用阈值控制HOT单元250接收的到驱动程序255或TCP堆栈215的通信序列号频率,而非中断CPU 110以通过驱动程序255通知TCP堆栈215每个帧都已经被目标接收了。类似地,ACK阈值或特定ACK号可被用于控制HOT单元250接收的到驱动程序255的通信,而非中断CPU 110通知驱动程序255每个传送帧的ACK都已经被接收了。
帧处理期间减少中断CPU 110的频率使CPU 110能够解放出来用于执行其他应用程序,典型的是通过CPU 110执行的应用程序指令的数量从而提高这些应用程序的性能。阈值允许在确定中断间的平衡时一定的灵活性,以通知TCP堆栈215接收连接状态并为委托连接传送连接状态。
步骤901中解析单元740确定传送窗口是否自右收缩。当由帧提取的ACK号与由帧中提取的接收窗口尺寸的总和小于为委托连接存储在CDT 720中的最大传输窗口尺寸时,解析单元740确定传送窗口自右收缩。缓冲区上载单元745使用从帧中提取的传送窗口尺寸更新为委托连接存储于CDT720的最大传送窗口尺寸。如果在步骤901中,解析单元740确定传送窗口自右收缩,那么在步骤903中,解析单元740在通知单元750中设定传送窗口通知标记。
步骤905中,解析单元740确定重复ACK(在一个或多个接收帧中相同ACK号)已经被接收,指示出目标被请求重新传送一帧或多帧。如果在步骤905中,解析单元740确定重复ACK已经被接收,那么在步骤903中解析单元740在通知单元750中设置“重复ACK通知”标记。
步骤907中,解析单元740确定SN是否大于阈值,例如,限定值、指示递增序列号的阈值。递增序列号在委托连接被设置时由TCP堆栈215初始化并被缓冲区上载单元745在每当向驱动程序255发送通知时被更新。在一个实施例中,递增序列号通过将递增序列号增加一个序列增加值而完成更新。序列增加值可以是固定的或被TCP堆栈215编程的。如果步骤907中,解析单元740确定SN大于阈值,那么序列号阈值标记在步骤903中设定。
步骤909中,解析单元740确定存储于CDT 720中的最后的ACK号(接收到的委托连接的最高级ACK号)是否大于一个限定值,该限定值指示递增ACK号。当委托连接被设定时ACK号被TCP堆栈215初始化并被缓冲区上载单元745在接收到ACK时即时更新。递增ACK号在委托连接被设定时被TCP堆栈215初始化并被缓冲区上载单元745在通知被送到TCP堆栈215时即时的更新。在一个实施例中,递增ACK号通过将递增ACK号增加一个ACK增加值而完成更新。ACK增加值可以是固定的或被TCP堆栈215编程的。
步骤909中,解析单元740还可确定存储于CDT 720中的最后ACK号是否大于另一限定值,该另一限定值指示TCP堆栈215编程的特定ACK号。如果在步骤909中,解析单元740确定最后ACK号大于限定值(指示递增ACK号)或另一限定值(指示特定ACK号),然后在步骤903中设置一个ACK阈值。
步骤911中,解析单元740确定一个或多个计时器是否期满。接收ACK计时器被配置为在TCP堆栈215重传送计时器期满前期满,这是为了尽量减少不必要的重传送。存储于寄存器中为了委托连接的接收ACK计时器的期限可被TCP堆栈215编程并可为委托连接基于往返时间。接收存储于寄存器中的委托连接的SN计时器的期限可被TCP堆栈215编程。在另一实施例中,接收ACK计时器和接收SN计时器的期限被存储在CMT 725中对应委托连接的项中。
如果在步骤911中,解析单元740确定计时器已经期满,那么在步骤903中更新一个对应的通知标记并且解析单元740进入步骤913。例如,如接收SN计时器期满时,“sequence number threshold”(序列号阈值)标记被设置并且在接收ACK计时器期满时,“ACK threshold”标记被设置。如果在步骤911中,接收引擎360确定没有计时器期满,那么解析单元740在步骤913中输出解析帧到缓冲区上载单元745并且缓冲区上载单元745确定压栈标记是否被从被断方的帧中提取。如果压栈标记被断言,那么压栈通知标记在步骤903中被设置并且缓冲区上载单元745进入图8A的步骤819。
图9B是根据本发明一个或几个方面的使用户缓冲区跟随遗留处理同步的方法步骤的简图。如前述,当解析单元740检测到帧具有大于预期序列号DCT SN的序列号时会利用遗留缓冲区处理委托连接。例如,当一个或多个帧由于传送错误而丢失时。通知单元750为连接请求遗留处理并且缓冲区上载单元745将为了连接的HOT缓冲区无效和。因为存储于CDT 720的SN没有改变,所有后续接收到的帧在发生重传送之前都会被认为离序。
在接收到重新传送的帧之前,缓冲区上传单元745上载为连接接收到的帧到遗留缓冲器。TCP堆栈215从遗留缓冲区将有效载荷数据由遗留缓冲区拷贝到用户缓冲区。当重传送的帧被上载到遗留缓冲区时,TCP堆栈215为所有按顺序接收到的帧发送ACK。传送引擎320为连接更新存储在CDT 720中的DCT SN。当序列内所有重新传送帧已经被上载到遗留缓冲区时,TCP堆栈215在发送ACK前张贴HOT缓冲区。张贴HOT缓冲区使缓冲区上载单元745利用HOT缓冲区在不要求用户缓冲区的情况下为连接恢复处理进入帧。
在步骤930中,CMD单元710通过DMA引擎310接收来自命令环的PRB命令。该PRB命令包括在其它字段中对应连接的项的DCT索引和同步位。步骤932中,CMD单元710利用索引读出CBT 715。在步骤934中,CMD单元710确定CBT 715中读出的同步请求标记是否被设置,如果是这样,步骤936中CMD单元710确定从PRB命令中的同步位是否被设置。如果在步骤934中CMD单元710确定ww CBT 715的项中读出的“sync request”标记没有被设置,那么CMD单元710在步骤938中清空CBT 715中的“syncrequest”标记,并进入步骤940。当“sync request”标记被清除后,连接可利用HOT缓冲区被处理。如果在步骤936中,CMD单元710确定PRB命令中的同步位没有被设置,那么“sync request”不被清空,并且利用遗留处理继续处理连接。
传送引擎320包括用于卸载来自TCP堆栈215的出站帧处理子单元。例如,传送引擎320可被配置为执行TCP分段,计算TCP和Ipv4检查和,并编辑出站帧以背负ACK并包括委托连接的最近状态数据(由DCT 350读出)。驱动程序255或接收引擎360对DCT 350的更新可被包括在传送中,如下详述。
图10A是根据本发明一个或几个方面的表示数据通过DMA引擎310由系统存储器130向HOT单元250传送所使用的格式的简图,例如,在“大发送”(large send)传送期间。字段1007是一个特定群体MAC报头,如以太网报头。字段1005是原型报头,包括MAC报头、IP报头和TCP报头,其又包括SN、传送ACK号、TCP时戳等。字段1010是传送数据并且仅次于TCP堆栈存储空间225中。字段1007、字段1005和字段101的组合存放于系统存储器130中。
图10B是根据本发明一个或几个方面的表示数据传送引擎320向传送接口330传送所使用的格式的简图。DMA引擎310由系统存储空间130读出图10A中所示的格式并且传送引擎320在启动分段后产生图10B中所示的格式并且字段1010的部分被包括在分段中,其中每个段都是一个帧。在另一实施例中TCP堆栈215生成协议报头并将协议报头存储于TCP堆栈存储空间225中,并且HOT单元250由应用程序存储空间227中读出传送数据。
字段1015是一个IP报头,字段1020是一个TCP报头,字段1025是分段数据。本领域技术人员应该理解,图10B中所示的格式是一个TCP兼容格式。TCP报头包括传送ACK号,传送SN等。分段数据是字段1010中传送数据的一部分。字段1030是另一个TCP报头,包括可选的更新过的传送ACK号和更新过的传送SN等。更新过的传送SN被包括在前一段中的数据字节数增加,该前一段与最大帧尺寸和数据链、网络、和传输层报头尺寸的区别相同。字段1035是分段数据,该分段数据是字段1010中传输数据的另一部分。
图11A是根据本发明的一个实施例,用于分割图10A中所示的一个出站帧为包括编辑出站帧的片断的流程图。在步骤1101中,DMA引擎310接收一个来自TCP堆栈的经由驱动255的传送描述符。该传送描述符包括一定位存储于系统存储器130的传送缓存物理地址,该传送描述符包括一原型报头和数据用于传送。该传送描述符也波阿卡详细说明处理选项的控制位,一可选的DCT索引,控制位详细说明传送选项等。
在步骤1103中,DMA引擎310读取传送缓存并输出该传送描述符和传送缓存到传送引擎320。在步骤1109中,传送引擎320计算一基于从该原型报头中提取的IP报头数据的IP校验和。在步骤1111中,传送引擎320确定用于传送的数据的一部分,包括在分割后的最大的片断(通过在连接建立中的目标来设定)中的传送缓存中。在步骤1113中,传送引擎320构建一用于传送的片断,其进一步的描述请参阅图11B。
在步骤1131中,传送引擎320计算一基于从该原型报头中提取的TCP报头数据的TCP校验和、从DCT350中读取连接状态数据、以及在当前帧中的用于传送的数据的一部分。经过计算的校验和被存储在该帧的TCP报头中。在步骤1133中,通过包括在该帧中数据大小和报头大小的差增加该传送SN,传送引擎320升级一存储在DCT350中的用于委托连接的传送SN。在步骤1135中,传送引擎320输出一构建帧到传送接口330,包括一计算过的TCP校验和。该传送接口330输出该构建帧。
图11B是根据本发明的一个实施例,用于构建出站帧的方法步骤的流程图。本领域的熟练人员能够理解,图11B的方法步骤是图11A中步骤1113的延续。使用存储在CDT720中的连接状态数据构建该出站帧;接下来,该出站帧包括最新的状态数据用于一个连接,例如一相应于最近接收到的帧的ACK数值。在传送中,包括在分割中,如有可能,ACKs是“背负式”,也就是,包括在用于传送的帧输出而不是直到一帧被完全的分割并传送之后,等待输出离散的ACKs。及时的ACKs保证对于发送器来说该接收窗口处于开放状态,以便该发送器能连续地传送数据。另外,当发送器的时钟失效时,推迟ACK传送直到一大发送(large send)完成可能会导致浪费的再传送,或者会导致在接收数据流中发生非必要的爆发,其由于ACKs被推迟而只能发生“大发送”。
在步骤1115中,传送引擎320使用具有传送请求的在步骤1101中接收到的DCT索引来确定该传送请求是否相应于一委托连接,并且,如果为否,进行如图11A的步骤1131。否则,在步骤1117中,传送引擎320使用在步骤1101中接收到的索引访问CDT720,以获得用于委托连接的连接状态数据。在步骤1119中,传送引擎320确定以传送SN用于该构建帧。当从TCP堆栈215中接收到的SN在数据流中较存储在CDT720中的用于连接的传送SN晚时,传送引擎320设置该传送SN为TCP215接收的SN。
在步骤1121中,传送引擎320检查控制位详细指明处理选项和确定TCP215是否请求传送引擎320以在CDT720中保存该帧第一位的SN。当一相应于该存储的SN的ACK收到时,该存储的SN被用于图9A中步骤907以控制TCP堆栈215的通知。如果,在步骤1121中,传送引擎320确定TCP堆栈215请求用于一特定ACK数值的通知,那么在步骤1123中,传送引擎320在CDT720中保存该SN作为一特定ACK数值用于该连接。
在步骤1125中,传送引擎320确定一ACK数值由于构建帧。当该从TCP堆栈215接收到的该ACK数值在数据流中比在DCT存储的用于连接的SN晚时,传送引擎320设置该DCT SN为从TCP堆栈215中收到的ACK数值。传送引擎320也使者该存储在CDT720中的用于连接的最后ACK数值为该DCTSN或者从TCP堆栈中接收的ACK数值较大的。
在步骤1127中,通过检查存储于CDT720中的用于委托连接的连接数据状态,传送引擎320确定该TCP印时戳选项是否为能。当TCP印时戳选项为不能时,传送引擎处理如图11A所示的步骤1131。否则,在步骤1129中,传送引擎320包括有在该构建的帧的TCP报头中的自由运行的时钟的电流值。传送引擎320也包括从TCP堆栈收到的更大的印时戳以及存储在CDT720中的用于连接的TCP印时戳(最近的TCP印时戳)。当从TCP215接收到的TCP印时戳比存储的用于连接的TCP印时戳大时,该存储的用于连接的TCP印时戳被设置为从TCP堆栈215接收的TCP印时戳。传送引擎320进行步骤1131以计算用于该构建帧的该TCP校验和。
图11C是根据本发明一个或几个方面的,产生传送过程中的夹杂(也就是,背负式)的ACKs的方法步骤的流程图。图11C所示的方法是通过接收引擎360作为被接收的帧被完成。在步骤1145中,接收引擎360接收连续的TCP帧作为一委托连接。在步骤1147中,接受引擎360在相应于该委托连接的DCT350中,升级连接数据状态,例如,TCP印时戳,SN,传送窗大小,以及类似数据。DCT SN被升级为接下来希望的输入SN。
在步骤1149中,接受引擎360计算一ACK差,其是介于该SN与最后ACK数值(从DCT350中读出的)之间的差。在步骤1151中,接受引擎360确定该ACK差是否大于一极限值,该极限值被TCP堆栈215编程以触发一个接收帧的一个ACK。如果该ACK差大于该极限值,接收引擎360执行步骤1157。否则,在步骤1153中,接收引擎360确定该DCT SN是否大于一个门槛值,该门槛值是一递增序号或者一特定序号。如果该DCT SN大于该门槛值,接收引擎360执行步骤1157。否则,在步骤1155中,接收引擎360确定前述的传送ACK时钟是否失效,以及,如果没有失效,则升级传送ACK时钟以及未被接受的计数。如果,在步骤1155中,接收引擎360确定该传送ACK时钟已经失效,则在步骤1157中接收引擎360升级存储在DCT 350中的用于委托连接的连接状态数据,例如,清除未被接受的计数,升级该最后已接受的数值,升级该递增的序号,等类似数据。接收引擎360也重置传送ACK时钟。在步骤1159中,接收引擎360用信号通知传送引擎320,以在用于传送的一帧中包括一ACK,例如,通过背负一ACK。
在允许驱动程序255或者TCP堆栈215具有灵活性的同时,HOT单元350卸载接收的有效的用于委托连接的TCP帧的TCP处理,来确定一个基于接收ACKs和时钟的中断的门槛值。该门槛值可以被用于减少中断,空闲CPU110以处理其他的应用程序。进一步,HOT单元350产生用于传送和编辑背负ACKs的出站帧的ACKs,以计算TCP和IPv4校验和,并执行TCP片断。一个发送器(sender)的ACKs的及时的产生和传送能够保持接收窗口的开放,在单向和双向通信中提高带宽的利用和减少不必要的再传送。最后,有效载荷数据上传至在应用程序存储空间227中的使用者缓存,减少从驱动存储空间235拷贝数据到应用存储空间227的需要。当用于委托连接的使用者不可得到并且接收FIFO 730满载时,继承缓存(legacy buffer)可以被用于上载接收到的帧,并不是不接受输入的数据。当为一些来自于CPU110的TCP处理提供卸载时,HOT单元250不依赖于大量的专用存储器或者专用的处理器。HOT单元250也从一主处理器卸载一些TCP处理并在接收输入数据时处理一些多余的连接。
在另一方面,本发明提供了一个用于TCP连接的帧处理方法。该方法包括利用卸载单元处理该帧的第一部分,以产生第一处理的帧数据;利用该卸载单元处理该帧的第二部分,以产生第二处理的帧数据;利用在CPU上执行的TCP堆栈处理该第二处理的帧数据,以产生第三处理的帧数据。另一方面,该方法进一步包括在处理每一帧过程中确定是否有一个特殊事例存在。在其他方面,该方法进一步包括上传该第一处理的帧数据到一使用者缓存。在另一方面,该方法还包括上传该第二处理的帧数据到一继承缓存。在另一方面,该方法还进一步包括传送一在系统存储器中的继承缓存的本地和一软件驱动器间通信的标签。
在另一方面,本发明提供了一种处理用于TCP连接的数据的系统。该系统包括一TCP堆栈,其被配置为处理存储于至少一个遗留缓冲区的接收到的帧;一软件驱动程序,被配置为连接该TCP堆栈和卸载单元之间的接口;以及该卸载单元被配置为处理在委托连接上接收到的帧,以产生有效载荷数据和被部分处理的帧。在另一方面,该卸载单元被配置以处理没有特殊事例存在的帧。还在另一方面,该卸载单元被配置当一特殊事例被确定存在时通知TCP堆栈。还在另一方面,该卸载单元被配置以上载部分地处理的帧到至少一个继承缓存。还在另一方面,该卸载单元被配置上载有效载荷数据到至少一使用者缓存。还在另一方面,该卸载单元被配置,在上载部分地处理的帧到继承缓存或者上载有效载荷数据到使用者缓存,以接收附加的帧。还在另一方面,该TCP堆栈提供具有相应于至少一使用者缓存的本地信息的卸载单元。还在另一方面,该卸载单元包括一被配置的委托连接表以存储使用者信息和委托连接状态信息。
在另一方面,本发明提供了一种处理用于委托和非委托TCP连接的帧的方法。该方法包括利用卸载单元处理委托TCP连接,该卸载单元被配置为处理不存在特殊事例的帧;利用在CPU上执行的TCP堆栈处理非委托TCP连接;和利用该CPU上执行的TCP堆栈处理所有特殊事例存在的帧。还在另一方面,委托TCP连接的处理产生有效载荷数据。还在另一方面,该有效载荷数据通过卸载单元上载到以委托连接。还在另一方面,该方法进一步包括,当作为以委托连接的数据传送时,升级存储在卸载单元的连接状态信息。
在另一方面,本发明提供了一个设立委托连接的方法。该方法包括建立TCP连接;和确定是否通过硬件处理委托该TCP连接。还在另一方面,该方法进一步包括在关于确定委托该TCP连接的委托连接表中建立一内容。还在另一方面,该方法进一步包括转移用于该委托连接的使用者缓存信息到硬件。
在另一方面,本发明提供了一个用于TCP堆栈和卸载单元之间通信的系统。该系统包括由TCP堆栈向该卸载单元传送命令的装置;和由该卸载单元向该TCP堆栈传送通知描述符的装置。还在另一方面,该系统进一步包括一用于从卸载单元向该TCP堆栈传送命令细节情况的装置。还在另一方面,该系统进一步包括用于从TCP堆栈向该卸载单元传送接收缓存描述符的装置。还在另一方面,该系统进一步包括从TCP堆栈向该卸载单元传送传送缓存描述符的装置。
在另一方面,本发明提供了利用卸载单元编辑出站(outbound)帧的方法。该方法包括接收委托连接表索引;接收用于从TCP堆栈传送的原型报报头和数据;利用该委托连接表索引存取委托连接表项目;基于传送数据的一部分计算TCP检查和;和输出包括该TCP检查和的帧和该传送数据的一部分。还在另一方面,该方法进一步包括升级委托连接表内容。还在另一方面,该方法也包括访问该连接表内容;计算一基于用于传送的数据的其他一部分的TCP校验和;以及输出一包括该TCP校验和的附加帧和另外用于传送的数据的另外一部分。还在另一方面,当一个目标具有一特定序号的得到认可的收条时,应用程序需要得到通知。还在另一方面,该方法进一步包括背在该帧中背负一回执。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的方法及技术内容作出些许的更动或修饰为等同变化的等效实施例,但是凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
权利要求
1.一种处理用于TCP连接的帧的方法,包括利用卸载单元处理该帧的第一部分,以产生第一处理的帧数据;利用该卸载单元处理该帧的第二部分,以产生第二处理的帧数据;利用在CPU上执行的TCP堆栈处理该第二处理的帧数据,以产生第三处理的帧数据;
2.一种处理用于TCP连接的数据的系统,包括TCP堆栈,被配置为处理存储于至少一个遗留缓冲区的接收到的帧;软件驱动程序,被配置为该TCP堆栈和卸载单元之间的接口连接;和该卸载单元被配置为处理在委托连接上接收到的帧,以产生有效载荷数据和被部分处理的帧。
3.处理用于委托和非委托TCP连接的帧的方法,包括利用卸载单元处理委托TCP连接,该卸载单元被配置为处理不存在特殊事例的帧;利用在CPU上执行的TCP堆栈处理非委托TCP连接;和利用该CPU上执行的TCP堆栈处理所有特殊事例存在的帧。
4.设立委托连接的方法,该方法包括建立TCP连接;和确定是否将该TCP连接委托硬件处理。
5.用于TCP堆栈和卸载单元之间通信的系统,包括由TCP堆栈向该卸载单元传送命令的装置;和由该卸载单元向该TCP堆栈传送通知描述符的装置。
6.利用卸载单元编辑出战帧的方法,包括接收委托连接表索引;接收用于从TCP堆栈传送的原型报头和数据;利用该委托连接表索引存取委托连接表项目;基于传送数据的一部分计算TCP检查和;和输出包括该TCP检查和的帧和该传送数据的一部分。
全文摘要
本发明是一种处理在TCP连接上接收和传送数据的方法和装置。卸载单元处理接收到不存在特殊事例的数据,以便产生被直接上载到应用程序存储器的有效载荷数据。该卸载单元部分地处理接收到的存在特殊事例的数据并将部分处理过的接收的数据上载到存储于系统存储器内的缓冲区。该部分处理过的接收的数据然后被TCP堆栈进一步处理,以便产生被拷贝到应用程序存储器有效载荷数据。
文档编号G06F3/00GK1698337SQ200480000656
公开日2005年11月16日 申请日期2004年6月4日 优先权日2003年6月5日
发明者Ak杰哈, R丹尼拉克, Pj居吉, Ta莫佛, S南达, A拉杰高帕兰, Pj赛登伯拉德 申请人:恩维达公司