用于处理网络信息的方法及系统的制作方法

文档序号:7651823阅读:208来源:国知局
专利名称:用于处理网络信息的方法及系统的制作方法
技术领域
本发明涉及TCP数据和相关TCP信息的处理。更具体地说,涉及一种用 于用户空间TCP减负引擎的方法和系统。
背景技术
目前有很多不同的方法用来降低TCP/IP协议栈处理的处理功耗。在TCP 减负引擎(TOE)中,减负引擎执行所有或大部分的TCP处理,将数据流传 送给高层。这种方法有多种缺陷。TOE与操作系统紧密连接,因此要求按照 操作系统来制定解决方案,并要求改变操作系统以支持它。TOE可能要求并 排的协议栈解决方案,所述解决方案要求通过应用程序进行某种手动配置,例 如显式的指定套接字地址族,以便加快连接的速度。TOE也可要求由IT管理 员进行某种手动配置,例如,通过显式的制定IP子网地址,以便加快连接的 速度,从而来选择TCP流中的哪些会被减负,由于需要实现TCP包处理,减 负引擎非常复杂。大型分段减负(LSO) /发送分段减负(TSO)可用来降低主处理功耗,这 是通过简化发送分组处理过程来实现的。在这种方法中,主机将比最大传输单 元(MTU)更大的传输单位发送给NIC, NIC根据MTU将它们分割成段。由 于部分主处理过程与所发送单元的数量呈线性关系,所以这减少了所要求的主 处理功耗。虽然在简化发送分组处理方面是有效的,但是LSO对接收分组处 理没有帮助。另外,对于主机发送的每个单独的大型传输单元,主机从远端接 收多个ACK,每个ACK对应一个大小为MTU的段。多个ACK要求耗用稀 有和昂贵的带宽,从而降低了吞吐量和效率。在大型接收减负(LRO)的无状态接收减负机制中,根据可保证特定的 TCP流总会被载入相同硬件队列的散列函数,TCP流可被分割载入多个硬件
队列中。对于每个硬件队列,所述机制利用中断结合来扫描队列,并将队列中 属于同一 TCP流的后续数据包聚合为一个大的接收单元。虽然除了多个硬件队列之外,这种机制不要求在NIC上附加任何硬件, 但是它有各种性能限制。例如,如果流的数量大于硬件队列的数量,多个流会进入相同的队列,导致这个队列没有LRO聚合。如果流的数量大于硬件队列 数量的两倍,在任何流上都不会执行LRO聚合。所述聚合会受到在一个中断 周期主机可得到的数据包数量的限制。如果中断周期很短,流的数量不小,主 机CPU可得到、用于每个流的聚合的数据包数量会很少,导致LRO聚合受限 或者没有LRO聚合。甚至在硬件队列的数量很大的情况下,也可能出现LRO 聚合受限或者没有LRO聚合。LRO聚合可能是由主机CPU执行,这将导致 额外的处理负担。驱动可将链接的缓冲区列表传送到TCP协议栈,所述缓冲 区包括报头缓冲区,报头缓冲区后面是一系列的数据缓冲区,相比所有的数据 在一个缓冲区上连续传送的情况,这要求更多的处理。当主机处理器必须执行读/写操作时,数据缓冲区必须被分配到用户空间。 读操作可用来将数据从文件夹复制到这个分配的缓冲区中。写操作用来将缓冲 区的内容传送到网络。OS内核必须将所有的数据从用户空间复帝J到内核空间。 复制操作是CPU和存储器带宽的密集型操作,会限制系统性能。TCP/IP协议栈中的用户空间和内核空间之间的数据复制会耗费主处理功 耗。为降低住处理功耗,已经提出了许多解决方案。例如,禾IJ用远程直接内存 存取(RDMA)可避免同时在发送和接收两个方向上进行存储器拷贝。但是, 这要求新的应用程序接口 (API)、新的线协议、并对线两侧的现有应用程序 进行修改。本地DMA引擎可用来减负发送和接收方向上的存储器拷贝。虽然 本地DMA引擎可从CPU减负复制操作,但是它不会减少所要求的存储器带 宽。当平台朝向多CPU架构转移,每个CPU中有多个内核,所有的内核都共 享同一存储器时,存储器带宽会是高速网络应用中严重的瓶颈。本申请的F文将参照附图对本发明进行描述,通过将传统的系统与本发明 的某些方面进行比较,对于本技术领域的人员来说,常规和传统方法的更多限 制和缺点将会变得更明显
发明内容
一种用于用户空间TCP减负引擎的方法和系统,结合至少一幅附图进行 了描述,在权利要求中有更完整的阐述。根据本发明的一方面,提供了一种用于处理网络信息的方法,所述方法包括将对收到的数据进行的传输控制协议(TCP)处理减负到片载处理器上进 行;以及利用用户空间库,跳过对所述收到的数据进行的内核处理,将所述收到的 数据直接发送到硬件。在本发明所述的方法中,所述方法还包括确定所述接收的数据是否缓存在 存储器中。在本发明所述的方法中,所述方法还包括,如果所述收到的数据没有缓存 在所述存储器中,注册至少一个应用程序缓冲区,所述缓冲区内包括所述收到 的数据。在本发明所述的方法中,所述方法还包括,如果所述收到的数据没有缓存 在所述存储器中,锁定所述至少一个应用程序缓冲区。在本发明所述的方法中,所述方法还包括,如果所述收到的数据没有缓存 在所述存储器中,将所述锁定的、包括所述收到的数据的至少一个应用程序缓 冲区直接发送到所述硬件。在本发明所述的方法中,所述方法还包括为所述至少一个应用程序缓冲区的缓冲区ID添加应用程序缓冲区虚拟地 址;以及将所述至少一个应用程序缓冲区存储在高速缓冲存储器中。 在本发明所述的方法中,所述方法还包括,如果所述收到的数据缓存在所述存储器中,将所述收到的数据直接发送到所述硬件,跳过对所述收到的数据进行的内核处理。在本发明所述的方法中,所述方法还包括,将包括所述收到的数据的至少一个应用程序缓冲区预发送到所述硬件。在本发明所述的方法中,所述方法还包括,通过更新所述硬件中的完成队 列条目,指示收到所述数据。在本发明所述的方法中,所述方法还包括在更新完所述硬件中的所述完成 队列条目之后,生成事件通知。根据本发明的一个方面,提供了一种用于处理网络信息的系统,所述系统 包括将对收到的数据进行的传输控制协议(TCP)处理减负到片载处理器上进 行的电路;以及利用用户空间库、跳过对所述收到的数据进行的内核处理、将所述收到的 数据直接发送到硬件的电路。在本发明所述的系统中,所述系统还包括确定所述收到的数据是否缓存在 存储器中的电路。在本发明所述的系统中,所述系统还包括,用于在所述收到的数据没有缓 存在所述存储器中时、注册至少一个应用程序缓冲区的电路,所述缓冲区包括 所述接收的数据。在本发明所述的系统中,所述系统还包括,用于在所述收到的数据没有缓 存在所述存储器时、锁定所述至少一个应用程序缓冲区的电路。在本发明所述的系统中,所述系统还包括,用于在所述收到的数据没有缓 存在所述存储器中时、将所述锁定的、包括所述接收数据的至少一个应用程序 缓冲区直接发送到所述硬件的电路。在本发明所述的系统中,所述系统还包括为所述至少一个应用程序缓冲区的缓冲区ID添加应用程序缓冲区虚拟地 址的电路;以及将所述至少一个应用程序缓冲区存储在高速缓冲存储器中的电路。 在本发明所述的系统中,所述系统还包括,用于在所述收到的数据高速缓存在所述存储器中时、将所述收到的数据直接发送到所述硬件、跳过对所述收到的数据进行的内核处理的电路。
在本发明所述的系统中,所述系统还包括,将包括所述收到的数据的至少 一个应用程序缓冲区预发送到所述硬件的电路。在本发明所述的系统中,所述系统还包括,通过更新所述硬件中的完成队 列条目、指示接收到所述数据的电路。在本发明所述的系统中,所述系统还包括,在更新所述硬件中的所述完成 队列条目之后,生成事件通知的电路。从以下的描述和附图中,本发明的这些和其他优点、方面和新颖性特征, 及其实施例的细节都可得到更全面的理解。


图1A是根据本发明的实施例的用于TCP减负的示范性系统的框图;图IB是根据本发明的实施例的用于TCP减负的另一个示范性系统的框图;图1C是根据本发明的实施例的用于TCP减负的示范性系统的另一实施例;图ID是根据本发明的实施例的在主机CPU系统中进行写操作时复制数 据的流程图;图IE是根据本发明的实施例的在主机CPU系统中进行读操作时复制数 据的流程图;图2A是根据本发明的实施例的为用户空间TCP减负引擎(TOE)建立连 接的示范性过程的流程图;图2B是根据本发明的实施例的通过用户空间库分配队列的示范性系统的 框图;图3A是根据本发明的实施例的用户空间TOE的示范性发送或传输过程 的流程图;图3B是根据本发明的实施例的当高速缓存中未包含应用程序缓冲区时, 用户空间TOE的示范性发送或传输过程的流程图;图3C是根据本发明的实施例的当高速缓存中包含应用程序缓冲区时,用
户空间TOE的示范性发送或传输过程的流程图;图4A是根据本发明的实施例的用户空间TOE示范性接收过程的流程图;图4B是根据本发明的实施例的当高速缓存中未包含应用程序缓冲区时,, 用户空间TOE的示范性接收过程的流程图;图4C是根据本发明的实施例的当高速缓存中包含应用程序缓冲区时,用 户空间TOE的示范性接收过程的流程图;图5是根据本发明的实施例的带有用户空间库的透明TCP减负的工作请 求完成的示范性步骤的流程图。
具体实施方式
本发明的某些实施例涉及用于用户空间TCP减负引擎的方法和系统。所述 方法和系统包括将对所接收数据的传输控制协议(TCP)处理减负到片载处理 器上进行。可利用用户空间库将所接收的数据直接发送到硬件,跳过对所接收 数据进行的内核处理。如果所接收的数据没有缓存在存储器中,可通过用户空 间库注册包括所接收数据的应用程序缓冲区。所述应用程序缓冲区可被锁定并 发送到硬件。图1A是根据本发明的实施例的用于TCP减负的示范性系统的框图。因 此,图1A中的系统用于处理传输控制协议(TCP)数据报或数据包的TCP减 负。参照图1A,所述系统包括,例如CPU 102、存储器控制器104、主机存 储器106、主机接口 108、网络子系统110和以太网112。网络子系统110包 括,例如TCP以太网控制器(TEEC)或者TCP减负引擎(TOE) 114。主机 接口 110可包括,例如网络接口卡(NIC)。主机接口 108是,例如外围部件 互连(PCI)、 PCI-X、 PCI-Express、 ISA、 SCSI、或其它类型的总线。存储器 控制器104连接到CPU 102、存储器106和主机接口 108。主机接口 108通过 TEEC/TOE 114连接到网络子系统110。图1B是根据本发明的实施例的用于TCP减负的另一个示范性系统的框 图。参照图1B,所述系统包括,例如CPU 102、主机存储器106、专用存储 器116和芯片集118。芯片集118包括,例如网络子系统110和存储器控制器
104。芯片集118连接到CPU 102、主机存储器106、专用存储器116和以太 网112。芯片集118的网络子系统IIO连接到以太网112。网络子系统110包 括,例如连接到以太网112的TEEC/TOE114。网络子系统110通过例如有线 和/或无线连接与以太网112通信。无线连接可以是例如IEEE 802.11标准所支 持的无线局域网(WLAN)连接。网络子系统110也可包括例如片载存储器 113。专用存储器116可为上下文(context)和/或数据提供缓冲区。网络子系统110包括处理器,例如结合器lll。结合器lll可包括合适的 逻辑、电路和/或代码,用于处理TCP数据的积累或者结合。在这点上,结合 器111可利用流查询表(FLT)来维护关于当前网络流的信息,收集并聚合TCP 数据段。FLT可存储在例如网络子系统110中。FLT包括以下中的至少一个 例如源IP地址、目的IP地址、源TCP地址、目的TCP地址。在本发明的另 一实施例中,可利用至少两个不同的表,例如,包括4元组(4一tupk)査询 的表,用于以根据输入数据包的流将输入数据包分类。所述4元组査询表包括 以下中的至少一个例如源IP地址、目的IP地址、源TCP地址、目的TCP 地址。流的上下文表包括用于聚合的状态变量,例如TCP序列号。FLT还包括以下中的至少一项包括用于非连续存储器的分散集中列表 (SGL)的主机缓冲区或存储器地址、积累的确认(ACK)、 TCP报头和选项 副本、IP报头和选项副本、因特网报头副本、和/或积累的TCP标志。当终止 事件发生时,结合器111可从积累或收集的TCP段中生成一个聚合的TCP段。 聚合的TCP段可发往例如主机存储器106。虽然以CPU和以太网为例进行了说明,但是本发明并不限于这些实施例,并可分别使用例如任何类型的存储器和任何类型的数据链接层或物理介质。因 此,虽然图中展示的是连接到以太网112,但是图IA中的TEEC或TOE 114 可适用于任何类型的数据链路层或者物理介质。另外,图1A-B中展示的组件 还可进行不同程度的分解或集成。例如,TEEC/TOE 114可以是嵌在主板或 NIC中的、在芯片组118之外单独设置的集成芯片。类似地,结合器lll可以 是嵌在主板或NIC中的、在芯片组118之外单独设置的集成芯片。另外,专 用存储器116可与芯片组118集成在一起或者与图1B所示的网络子系统110
集成在一起。图1C是根据本发明的实施例的用于TCP减负的示范性系统的另一实施例。参照图1C,示出了硬件模块135。硬件模块135包括主机处理器124、高 速缓存存储器/缓冲区126、软件算法模块134和NIC模块128。 NIC模块128 可包括NIC处理器130、诸如结合器131之类的处理器、NIC存储器/应用程 序缓冲区模块132。 NIC模块128可通过例如有线和/或无线连接与外部网络通 信。无线连接可以是例如IEEE 802.11标准所支持的无线局域网(WLAN)连结合器131可以是位于数据包接收路径上的专用处理器或者硬件状态机。 主机TCP协议栈可包括用于管理TCP协议处理的软件,并且可以是例如 Microsoft Windows或Linux等操作系统的一部分。结合器131可包括合适的逻 辑、电路和/或编码,用于积累或聚合TCP数据。在这点上,结合器131可利 用流査询表(FLT)来维护关于当前网络流的信息,收集并聚合TCP数据段。 FLT可被存储在例如NIC存储器/应用程序缓冲区模块132中。当终止事件发 生时,结合器131可从积累或收集的TCP段中生成一个聚合的TCP段。聚合 的TCP段可发往例如高速缓冲存储器/缓冲区126。根据本发明的某些实施例,可将聚合后的单一 TCP段发往主机进行TCP 处理,以此来显著降低主机124的处理负担。另外,由于没有传送TCP状态 信息,NIC128之类的专用硬件可用来协助对收到的TCP段进行处理,以便降 低每数据包的处理负担,这是通过结合或聚合多个收到的TCP段来实现的。在常规的TCP处理系统中,在TCP连接的第一个数据段到达之前,有必 要了解关于此TCP连接的某些信息。而根据本发明的实施例,在第一个数据 段到达之前,无需了解TCP连接,因为TCP状态或上下文信息仍由主机TCP 协议栈进行单独的管理,在任何给定的时间,硬件协议栈和软件协议栈之间都 不会传送状态信息。在本发明的实施例中,提供了一种减负机制,该机制从主机协议栈的角度 来看是无状态的,但从减负设备的角度来看是全状态的,可实现与TOE相当 的性能增益。通过允许主机系统处理大于MTU的接收和发送数据单元,TCP
减负可减少TCP所要求的主机处理功耗。在本发明的示范性实施例中,所处理的是64KB的协议数据单元(PDU)而不是1.5KB的PDU,以此来显著降 低数据包速率,从而减少数据包处理的主机处理功耗。在TCP减负过程中,在主机操作系统和包括TOE的NIC之间不会进行握 手。TOE会自主的识别新的流并进行减负。发送端的减负类似于LSO,其中 主机发送大发送单元,TOE根据最大段长度(MSS)将它们分成更小的发送 数据包。接收端的TCP减负过程是将收到的属于同一流的多个数据包聚合,然后 将它们发往主机,就好像这些收到的数据包是从一个数据包——一个大的数据 包中收到的一样,同时ACK数据包就好像是一个聚合的ACK数据包一样。 主机中的处理类似于对所接收的大数据包的处理。在TCP流聚合的情况下, 可定义规则来确定是否聚合数据包。可制定聚合规则来允许尽可能多的聚合, 而不会增加往返行程时间,使得是否聚合取决于所接收的数据以及不经延迟地 将它发送到主机的重要程度。可使用发送-接收连接来实现聚合,其中发射器 和接收器之间的连接是使用用于进行减负决定的传输信息来实现的,且流可被 看作是双向流。TOE中接收减负过程中的上下文信息可以数据流为单位进行 维护。在这点上,对于每个所接收的数据包,进站数据包报头可被用于检测它 所属的流,且这个数据包对流的上下文进行更新。当发送器和接收器相连时,可连同所接收的网络数据包一起搜索所发送的 网络数据包,以确定数据包所属的特定网络流。所发送的网络数据包可用于对 流的上下文进行更新,这可用于接收减负过程。图ID是根据本发明的实施例的在主机CPU系统中进行写操作时拷贝数 据的流程图。参照图1D,示出了各种上下文切换、用户缓冲区164、内核缓 冲区162、 NIC存储器168、以及为写操作执行的复制操作。在步骤152中, 写系统呼叫导致上下文切换,从用户模式切换到内核模式。可执行复制操作以 将数据传送到内核缓冲区162。在步骤154,写系统呼叫可返回,生成另一上 下文切换。当DMA引擎独立且同歩地将数据从内核缓冲区162传送到NIC存 储器168时,发生另一次复制操作。数据的复制不是必须的,可将其取消,以
降低开销并提高性能。为了降低开销,可取消内核缓冲区162和用户缓冲区164之间的一些复制操作。图1E是根据本发明的实施例的在主机CPU系统中进行读操作时拷贝数 据的流程图。参照图1E,示出了各种上下文切换、用户缓冲区164、内核缓 冲区162、 NIC存储器168、以及为写操作执行的复制操作。在步骤172中, 写系统呼叫导致上下文切换,从用户模式切换到内核模式。可执行复制操作以 将数据传送到内核缓冲区162。在步骤174,读系统呼叫可返回,生成另一上 下文切换。当DMA引擎独立且同步地将数据从内核缓冲区162传送到NIC存 储器168时,发生另一次复制操作。数据的复制不是必须的,可将其取消,以 降低开销并提高性能。为了降低开销,可取消内核缓冲区162和用户缓冲区 164之间的一些复制操作。图2A是根据本发明的实施例的为用户空间TCP减负引擎(TOE)建立连 接的示范性过程的流程图。参照图2A,示出了硬件202、内核204、用户空间 库206以及应用程序208。硬件202可包括合适的逻辑和/或电路,可用于处理 从各种驱动和连接到硬件202的其他设备处接收的数据。内核204可包括合适 的逻辑和/或代码,用于管理CPU 102的资源,并使其他的应用程序208在主 机系统运行。内核204用于实现例如调度、缓冲、高速缓存、假脱机、以及故 障处理功能。内核204还用于实现各种硬件和软件组件之间的通信。用户空间 库206是用于研发软件的子程序集。用户空间库206允许编码和数据以组合的 方式共享和交换。用户空间库206可通过确定4组元、接收队列(RQ)、发送队列(SQ)、 以及完成队列(CQ),来注册一个连接。可选的,内核204可将过滤规则应用 于注册连接数据包,以确定是否允许连接请求。内核204可锁定并映射RQ、 SQ、 CQ和用户上下文缓冲区。内核204还将RQ、 SQ、 CQ的DMA地址和 用户上下文缓冲区存储在为流最新分配的FLT中。在本发明的另 一实施例中,用户空间库206可指定由内核204提供的在用 连接的句柄。内核204同意将连接的所有权传送给用户空间库206。如果内核 204同意将连接的所有权传送给用户空间库206,内核204可将此连接所要求
的TCP状态信息提供给用户空间库206。在本发明的另一实施例中,用户空间库206可自己建立被动连接。用户空 间库206可请求将为其分配本地IP地址和TCP端口,制定将要使用的具体 RQ禾nCQ。如果通过,内核204可注册并锁定RQ和CQ,如果还未被锁定, 接下来生成减负监听条目。图2B是根据本发明的实施例的通过用户空间库分配队列的示范性系统的 框图。图2B中展示了用户空间库220、完成队列(CQ) 222、接收队列(RQ) 224、发送队列(SQ) 226、普通接收队列(GRQ) 228、以及内核230。在对流进行用户空间TOE处理之前,用户空间库220可分配至少一个接 收队列(RQ) 224、发送队列(SQ) 226、通用接收队列(GRQ) 228、完成 队列(CQ) 222。内核230可锁定并映射(map) RQ 224、 SQ 226、 CQ 222 以及GRQ 228。用户空间库220可独立于任何特定流分配RQ 224、 SQ 226、 CQ222以及GRQ228。内核230可提供句柄,在之后来自用户空间库220的 请求中,会用到该句柄。发送队列(SQ) 226可允许用户空间库220将发送任务请求直接发往缓冲 环,所述缓冲环可由设备直接读取。可选的门铃(doorbell)可提供存储器映 射位置,用户空间库220可在所述存储器映射位置上执行写入操作,从而将事 件通知提供给设备。这个门铃环可告知设备,特定的发送队列226不是空的。 带有门铃的发送队列226可用于连接RDMA设备。通过使用RDMA接口 ,任 务请求中用到的缓冲区可使用代表已注册缓冲区的句柄,这样一来,设备便可 知道任务请求的发送者具备使用该缓冲区的必要权限。这个句柄可被称为通过 IP接口的RDMA的控制标志(Stag)。带有用户空间库220的TOE的实现与 发送发送队列226的任务请求的性质不同。接收队列(RQ) 224允许用户空间库220将接收任务请求直接发送到可 由设备直接读取的缓冲池。通过发送任务请求,所涉及的缓冲区可使用代表已 注册缓冲区的句柄。支持用户空间TOE的接收队列224可能与传统RQ不同, 因为在缓冲区被发送之前,缓冲区不会预先与特定进站消息建立关联。这是由 T基本的有线协议TCP,在任务请求和有线协议消息之间没有委托关系。 完成队列(CQ) 222允许用户空间库220直接接收设备写入的任务完成 情况。支持用户空间TOE的完成队列222与常规的CQ不同,因为TOE可比 支持RDMA的CQ 222以更灵活的顺序生成任务完成情况。完成队列222具 有相关的机制,其中用户处理可通知何时生成任务完成情况或者何时生成特定 类型的任务完成情况的回叫信号。对于用户空间TOE,可选择代理机制,使 得设备仍然通报用户空间库。由于设备不会直接中断用户模式处理,可能要求 内核中的代理。例如,实现这种通告中继代理的方法是,转送回叫、接通信号 灯或线程,或者生成与文件描述符相关的事件。减负监听表(OLT)可用于转发与特定流不匹配、但是与本地TCP端口 匹配的TCP段。OLT可与减负连接的支持组件集成在一起,如TOE、 iSCSI 和RDMA。用户空间TCP库220用于提供套接字API和/或套接字操作接口 。每个操 作可对应于接收消息(recvmsg ())或者发送消息(sendmsg ())呼叫,这取 决于所提供的API是字面套接字API还是回叫API和/或基于任务队列的同步 操作。例如,如果用户发送三个连续的recvmsg ()操作,那么就会有三种完 成状况,假设没有错误,且随每种完成状况所发送的载荷量与recvmsg ()的 语义相匹配。因此,所要求的TCP报头动作的数量不一定非要取决于用户收 到的任务请求完成的数量。接收缓冲区有两种不同的数据结构,例如,RQ224和GPQ 228。如果用 户空间库220确定允许CNIC 128访问它的开销是合理的,则RQ 224用于直 接接收。即时锁定可用于证明注册是适当的,否则用户空间库220可被用于证 明被频繁重新利用的合适大小的缓冲区和非常大的缓冲区是适当的。当RQ224条目对无序数据包来说不可用时,GRQ228可接收数据。无序 数据包可被放置在RQ 224缓冲区中,但是如果在缓存满之前PSH操作要求发 送数据,则接下来无序数据包必须被移走。只要GRQ 228缓存完成,至少一 个RQ224缓存也会完成,不管是否有数据存储在其中。用户空间中的CQ222 轮询程序可将放置在GRQ 228缓冲区中的任何数据复制到RQ 224缓冲区中。 RQ 224缓冲区是存储器复制操作(memcpy ())的合适目标,即使在其上没 有执行过注册,因为cq—poll是用户空间程序。memcpy ()操作的功耗是可以 忽略的,因为数据被高速缓存以备使用,并在应用程序处理数据之前被立即执 行。与由内核处理器执行到用户的复制相比,复制到用户的操作比memcpy () 更加复杂,在应用程序使用数据之前,使高速缓存无效的几率更高。当执行 recvmsg ()呼叫时,用户空间库220可用于接收存放在GRO 228缓冲区中的 任务完成状况,然后确定用户空间库220是否需要等待下一个任务请求。如果 许可等待下一个任务请求,用户空间库220决定将任务请求发送到RQ 224, 所述任务请求带有目标缓冲区的注册缓冲区ID。选择性地,用户空间库220 等待新的GRQ 228完成状况。当有更多的完成状况时,用户空间库220重复 处理,直到它有足够的接收数据来完成套接字级别操作。选择性地,用户空间 库220可在回叫API上运行,其中它可调用下一个更高的级别,所述更高的 级别带有包括GRQ 228缓存的SGL和指示所有权和/或处理紧急度的命令。用 户空间库220可处理多个报头,并确定recvmsg ()操作未完成,且继续处理 同一RQ 224任务请求。根据本发明的实施例,可利用基于映射存储器接口的RDMA型接口,这 种接口的元件可被称为队列对(QP)和完成队列(CQ) 222。带有用户空间 库的TOE与使用内核编码的TOE不同,所述内核编码基于多种数据结构,所 述数据结构被用来使用户空间库220直接与减负设备交互。图3A是根据本发明的实施例的用户空间TOE的示范性发送或传输过程 的流程图。图3A中展示了硬件302、内核304、用户空间库306和应用程序 308。硬件302可包括合适的逻辑和/或电路,可用于处理从各种驱动以及连接 到硬件302的其他设备接收的数据。内核304可包括合适的逻辑和/或代码, 用于管理CPU 102系统和/或设备资源,并使其他的应用程序308在主机系统 运行。内核304用于例如调度、缓冲、高速缓存、假脱机、以及故障处理的功 能。内核304还用于各种硬件和软件组件之间的通信。用户空间库306是用于 研发软件的子程序集。用户空间库306允许编码和数据以组合的方式共享和交 换。应用程序308用于将发送消息传送到用户空间库306。如果发送消息较短 或具有特定的长度,用户空间库306可避免锁定应用程序发送缓冲区132。在 发送消息很短的情况下,它可被直接传送到使用SQ的硬件,而不会查询缓冲 ID。如果发送消息不短或者大于特定的长度,用户空间库306可用于将应用程 序发送缓冲区132复制到预先锁定的应用程序发送缓冲区132。用户空间库306 可将预先锁定的应用程序发送缓冲ID加入发送队列(SQ)中。硬件302可查 询缓冲区地址的缓冲ID。硬件302可用于对应用程序发送缓存进行直接存储 存取(DMA)。硬件302可对应用发送缓存132中的数据执行分段和TCP处 理,并在线程上发送得到的数据包。图3B是根据本发明的实施例的当高速缓存中未包含应用程序缓冲区时, 用户空间TOE的示范性发送或传输过程的流程图。图3B展示了硬件302、内 核304、用户空间库306和应用程序308。例如,当应用程序发送缓冲区132不在高速缓存中时,应用程序308被用 于将发送消息传送到用户空间库306。用户空间库306注册应用程序发送缓冲 区132,并将应用程序发送缓冲区132发送到内核304。内核304可用于锁定 并映射应用程序发送缓冲区132。内核304可将应用程序发送缓冲区132的缓 冲ID发送到用户空间库306。用户空间库306在所接收的缓冲ID上添加缓冲 区虚拟地址,并将缓冲ID存储在高速缓存中。用户空间库306可将SQ中被 锁定和映射的应用程序发送缓冲区132的缓冲ID发送到硬件302。硬件302 可用于为缓存地址查找缓冲ID。硬件302可用于对应用程序发送缓冲区132 中的数据进行直接存储存取(DMA)。硬件302可对应用程序发送缓冲区132 中的数据执行分段和TCP处理,并在线程上发送得到的数据包。在本发明的另一个实施例中,用户空间库306可用于将任务请求直接发送 到发送队列(SQ),不需要内核304的辅助。例如,用户空间库306通知设备 发送队列不再为空的方法是使用门铃。门铃是总线上的地址,当用户写入它时, 会将事件通知给设备。门铃还被分配给几个流,从而单个用户处理可写入地址 页。当能够直接发送到发送队列时,设备可验证特定的数据包对发送队列来说
是合法的。如果源报头和目标报头都是相反的,得到的数据包会被分配给相同的FLT。直接从用户空间库306发送到发送队列的任务请求可要求用户注册的缓 冲ID。这些注册的缓冲ID代表用户空间库306已经注册的实际的缓冲区,或 者用户空间库306将出站数据复制到其中的即时预注册缓冲区。用户空间库 306用于确定要使用的特定技术。如果目标应用程序接收缓冲区不在注册的高速缓存中,用户空间库306 可用于注册目标应用程序接收缓冲区。例如,用户空间库306可利用存储器注 册请求来注册接收缓存。用户空间库306可高速缓存接收缓冲区的注册信息, 因此当应用程序308在下一个请求上提交相同的缓冲区时,用户空间库306 不必重复注册过程。根据本发明的实施例,TCP减负引擎(TOE) 114可将对接收数据的传输 控制协议(TCP)处理减负到例如NIC处理器之类的片载处理器上。利用用户 空间库306,所接收的数据可被直接发送到硬件302或主机处理器124,跳过 由内核304对收到数据进行的处理。硬件302用于确定所接收的数据是否高速 缓存在存储器126中。如果所接收的数据没有高速缓存在存储器126中,用户 空间库306用于注册至少一个包括所接收数据的应用程序发送缓冲区132。内 核304可锁定包括所接收数据的应用程序发送缓冲区132。用户空间库306用 于将包括所接收数据的被锁定应用程序发送缓冲区132发送到硬件302或者主 机处理器124。用户空间库306可用于在应用程序发送缓冲区132的缓冲ID 上添加应用程序发送缓冲区132的虚拟地址,并将应用程序发送缓冲区132 存储在高速缓冲存储器126中。用户空间库306可将包括所接收数据的至少一 个应用程序发送缓冲区预发送到硬件302或主机处理器124。图3C是根据本发明的实施例的当高速缓存中包含应用程序缓冲区时,用 户空间TOE的示范性发送或传输过程的流程图。图3C展示了硬件302、内核 304、用户空间库306和应用程序308。当应用程序缓冲区不在高速缓存中时,应用程序308被用于将发送消息传 送到用户空间库306。用户空间库306被用于将SQ上的应用程序发送缓冲区 132的预锁定应用程序发送缓冲ID发送到硬件302,而不需为短发送消息使用 内核304。硬件302可被用于查找缓冲区地址的缓冲ID。硬件302可被用于直 接存储存取(DMA)应用程序发送缓冲区132中的数据。硬件302可对应用 程序发送缓冲区132中的数据执行分段和TCP处理,并将得到的数据包在线 程上发送。当所接收的数据被高速缓存在存储器126中时,所接收的数据被直 接发送到硬件302或者主机处理器124,从而跳过由内核304对所接收数据进 行的处理。图4A是根据本发明的实施例的用户空间TOE示范性接收过程的流程图。 图4A中展示了硬件402、内核404、用户空间库406和应用程序408。硬件402可包括合适的逻辑和/或电路,可用于处理从各种驱动以及连接 到硬件402的其他设备接收的数据。内核404可包括合适的逻辑和/或代码, 用于管理CPU 102系统和/或设备资源,并使其他的应用程序408在主机系统 运行。内核404用于例如调度、缓冲、高速缓存、假脱机、以及故障处理的功 能。内核404还用于实现各种硬件和软件组件之间的通信。用户空间库406 包括用于研发软件的子程序集。用户空间库406允许编码和数据以组合的方式 共享和交换。硬件402可用于将报头和载荷放置在从RQ或GRQ获得的接收缓冲区中。 通过允许对目的存储器的远程写入访问、以防止缓存溢出,硬件402可将缓冲 ID和偏移转换成所要求的DMA地址。用户空间库406可用于将普通接收队列(GRQ)上的应用程序接收缓冲 区132的预锁定缓冲ID发送到硬件402。硬件402可被用于处理所生成的TCP 段,查询缓冲区地址的缓冲ID,并将所生成的TCP段放置在预发送的库缓冲 区中。硬件402用于直接存储访问(DMA)至GRQ缓冲区228的接收载荷。 硬件402可用于生成完成队列(CQ)中的完成队列条目(CQE),以指示接收 所生成的TCP数据包。用户空间库406可被用于轮询完成队列(CQ) 222。 当用户空间库406完成对CQ222的轮询时,用户空间库406可请求硬件402, 后续的完成之后随即进行事件通知。用户空间库406可用于将预锁定的应用程 序接收缓冲区复制到应用程序接收缓冲区132。
注册的缓冲区可在接收任务请求中被发送到接收队列(RQ)和/或普通接收队列(GRQ)。通过将任务完成或完成队列条目(CQE)发送到完成队列(CQ), 硬件402可用于指示接收到进入缓冲区的TCP段,所述缓冲区从RQ或GRQ 分配。当发送到CQ时,硬件402可用于生成通知事件。应用程序408用于将所接收的消息发送到用户空间库406。用户空间库406 用于将普通接收队列(GRQ)上的应用程序接收缓冲区132的预锁定缓冲ID 发送到硬件402。硬件402可用于处理输入的TCP数据包,并查询缓冲区地址 的缓冲ID,并将进站数据包的数据放置在预发送的库缓冲区中。硬件402可 用于直接存储存取(DMA)至GRQ缓冲区的接收载荷。硬件402可用于生成 完成队列(CQ) 137中的完成队列条目(CQE),以指示接收TCP数据包。用 户空间库406可被用于轮询完成队列(CQ) 137。当用户空间库406完成对 CQ 137的轮询时,用户空间库406可请求硬件402,后续的完成之后随即进 行事件通知。用户空间库406可用于将预锁定的应用程序接收缓存复制到应用 程序接收缓冲区132。图4B是根据本发明的实施例的当高速缓存中未包含应用程序缓冲区时,, 用户空间TOE的示范性接收过程的流程图。图4B展示了硬件402、内核404、 用户空间库406和应用程序408。当应用程序接收缓冲区132不在高速缓存中时,应用程序308被用于将接 收消息传送到用户空间库406。用户空间库406可注册应用程序接收缓冲区 132,并将应用程序接收缓冲区132发送到内核404。内核404可用于锁定并 映射应用程序接收缓冲区B2。内核404可将被锁定和映射的应用程序接收缓 冲区132的缓冲ID发送到用户空间库406。用户空间库406将缓冲区虚拟地 址附加到所接收的缓冲ID上,并将缓冲ID存储在高速缓存中。用户空间库 406可将RQ上最新被锁定的缓冲ID发送到硬件402。硬件402可用于处理输入的TCP数据包,査询缓冲区地址的缓冲ID,并 将输入TCP数据包的数据直接放置在对应的被锁定和映射的应用程序接收缓 冲区132中。硬件402可用于直接存储存取(DMA)至RQ缓冲区的输入TCP 的载荷。硬件402或主机处理器124可用于生成完成队列(CQ) 137中的完
成队列条目(CQE),以指示接收TCP数据包。用户空间库406可被用于轮询 完成队列(CQ) 137。当用户空间库406完成对CQ 137的轮询时,用户空间 库406可请求硬件402,后续的完成之后随即进行事件通知。图4C是根据本发明的实施例的当高速缓存中包含应用程序缓冲区时,用 户空间TOE的示范性接收过程的流程图。图4C中展示了硬件402、内核404、 用户空间库406和应用程序408。当应用程序缓冲区在高速缓存中时,应用程序308被用于将接收消息传送 到用户空间库406。用户空间库406被用于将接收队列(RQ)上的应用程序 接收缓冲区132的预锁定缓冲ID发送到硬件402。硬件402可被用于处理输 入TCP数据包,査询缓冲区地址的缓冲ID,并将输入的TCP数据包的数据直 接放置在对应于预锁定缓冲ID的应用程序接收缓冲区132中。硬件402用于 直接存储访问(DMA)至RQ缓冲区的输入TCP数据包的载荷。硬件402可 用于生成完成队列137中的完成队列条目(CQE),以指示接收所生成的TCP 数据包。用户空间库406可被用于轮询完成队列(CQ〉 137。当用户空间库 406完成对CQ 137的轮询时,用户空间库406可请求硬件402,后续的完成 之后随即进行事件通知。根据本发明的实施例, 一种用于用户空间TCP减负的方法和系统包括TCP 减负引擎(TOE) 114,用于将所接收数据的传输控制协议(TCP)处理减负 到例如NIC处理器130之类的片载处理器上进行。可利用用户空间库306将 所接收的数据直接发送到硬件402或者主机处理器124,从而跳过由内核304 对所接收数据进行的处理。硬件402被用于确定所接收的数据是否被高速缓存 在存储器126中。如果所接收的数据高速缓存在存储器126中,所接收的数据 被直接发送到硬件402或者主机处理器124,从而跳过由内核304对所接收数 据的处理。如果所接收的数据没有高速缓存在存储器中,用户空间库306可注册至少 一个包括所接收数据的应用程序接收缓冲区132。内核304用于锁定包括所接 收数据的应用程序接收缓冲区132。用户空间库306用于将包括接收数据的被 锁定应用程序接收缓冲区132发送到硬件402或主机处理器124。用户空间库
306用于将应用程序缓冲区虚拟地址附加到应用程序接收缓冲区132的缓冲ID 上,并将应用程序接收缓冲区132存储在高速缓冲存储器126中。用户空间库 306用于将包括所接收数据的至少一个应用程序接收缓冲区预发送到硬件402 或主机处理器124。通过更新完成队列137中的完成队列条目,硬件402或主 机处理器124用于指示数据的接收。在更新完成队列137中的完成队列条目之 后,硬件402或主机处理器124可用于生成事件通知。图5是根据本发明的实施例的带有用户空间库的透明TCP减负的工作请 求完成的示范性步骤的流程图。参照图5,示范性步骤从步骤502开始。在步 骤504中,可将由流査询表(FLT)确认的有效TCP段分配给用户空间TTO 处理。在步骤506中,确定FLT是否具有当前缓冲区。结合器111利用流査 询表(FLT)来维护关于当前网络流的信息,以便收集并聚合TCP段。如果 FLT具有当前缓冲区,控制继续至步骤508。在步骤508中,确定新的TCP数据包是否附加到当前缓冲区中。如果新 的TCP数据包没有附加到当前缓冲区中,控制继续至步骤510。在步骤510 中,确定是否从GRQ中分配缓冲区。如果不能从GRQ分配缓冲区,则指示 分配错误,控制继续至步骤516。在步骤516中,丢弃数据包。如果可从GRQ 分配缓冲区,控制继续至步骤512。在步骤512中,新的数据包被应用于所分 配的缓冲区。在步骤514中,为所分配的缓冲区生成任务完成条目。之后控制 继续至结束步骤538。在步骤508中,如果新的TCP数据包附加到当前缓冲区,控制继续至步 骤518。在步骤518中,确定新的数据包是否适合当前缓冲区。如果新的数据 包适合当前缓冲区,控制继续至步骤528。在步骤528中,新的数据包可被附 加到当前流。如果新的数据包不适合当前缓冲区中,控制继续至步骤520。在 步骤520中,为当前缓冲区生成任务完成条目。在步骤522中,FLT的当前缓 冲区被设置为NULL。在步骤524中,确定TCP段是否有序,可否从RQ 224 分配缓冲区。如果TCP段不是有序的或者不能从RQ224分配缓冲区,控制继 续至步骤536。在步骤536中,确定是否可从GRQ分配当前缓冲区。如果不 可从GRQ分配当前缓冲区,可指示分配错误,控制继续至步骤516。在步骤 516中,丢弃数据包。如果从GRQ分配当前缓冲区,控制继续至步骤528。 如果TCP段是有序的,且可从RQ224分配缓冲区,控制继续至步骤526。在 步骤526中,从RQ224分配当前缓冲区。在步骤530中,可确定当前缓冲区是否可交付使用。如果当前缓冲区可交 付使用,控制继续至步骤532。在步骤532中,可为当前缓冲区生成任务完成 条目。在步骤534中,FLT的当前缓冲区被设置为NULL。然后控制继续至结 束步骤538。如果当前缓冲区不可交付使用,控制继续至结束步骤538。根据本发明的实施例,用于用户空间TCP减负的方法和系统可包括主机 处理器124,所述主机处理器124用于将所接收数据的传输控制协议(TCP) 处理减负到例如NIC处理器之类的片载处理器上进行。利用用户空间库220, 所接收的数据可被直接发送到硬件,跳过由所述接收数据进行的内核处理。如 果所接收的数据没有高速缓存在存储器126中,则注册至少一个包括所接收数 据的应用缓冲区。如果所接收的数据已高速缓冲区在存储器126中,应用程序 缓冲区被锁定并发送到硬件。应用程序缓冲区虚拟地址可被附加到应用程序缓 冲区的缓冲ID上,应用程序缓冲区可被存储在高速缓冲存储器126中。如果所接收的数据高速缓冲区在存储器126中,所接收的数据被直接发送 到硬件,跳过对所述接收数据进行的内核处理。至少一个应用程序缓冲区被预 发送到硬件。可通过更新硬件中的完成队列条目,来指示数据的接收。在更新 硬件中的完成队列条目后,可生成事件通知。本发明的另一实施例提供了一种可机读存储,其上存储有计算机程序,该 程序具有至少一个代码段,该至少一个代码段由机器执行,使机器执行用户空间TCP减负引擎的上述步骤。因此,本发明可用硬件、软件或软硬件结合来实现。本发明可在至少一台 计算机系统的集中式环境下实现,也可在各元件分布在不同相互连接的计算机 系统的分布式环境下实现。任何种类的计算机系统或其它适合于执行本发明所 述方法的设备都适合使用本发明。软硬件结合的范例可为带有某计算机程序的 通用计算机系统,但载入并运行该计算机程序时,可控制计算机系统执行本发 明所述的方法。
本发明也可内置在计算机程序产品中,其中包含可实现本发明所述方法的 所有性能,且当其载入到计算机系统时可执行这些方法。本上下文中的计算机 程序是指以任何语言、代码或符号编写的指令集的任何表达式,可使带有信息 处理功能的系统直接执行特定功能或者在完成下列一项或两项之后执行特定 功能a)转换为其它语言、代码或符号;b)以其它形式重新生成。
本发明是根据特定实施例进行描述的,但本领域的技术人员应明白在不脱 离本发明范围时,可进行各种变化和等同替换。此外,为适应本发明技术的特 定场合或材料,可对本发明进行诸多修改而不脱离其保护范围。因此,本发明 并不限于在此公开的特定实施例,而包括所有落入到权利要求保护范围的实施 例。
权利要求
1、 一种用于处理网络信息的方法,其特征在于,所述方法包括 将对收到的数据进行的传输控制协议(TCP)处理减负到片载处理器上进行;以及利用用户空间库,跳过对所述收到的数据进行的内核处理,将所述收到的 数据直接发送到硬件。
2、 根据权利要求1所述的方法,其特征在于,所述方法还包括确定所述 接收的数据是否缓存在存储器中。
3、 根据权利要求2所述的方法,其特征在于,所述方法还包括,如果所 述收到的数据没有缓存在所述存储器中,注册至少一个应用程序缓冲区,所述 缓冲区内包括所述收到的数据。
4、 根据权利要求3所述的方法,其特征在于,所述方法还包括,如果所 述收到的数据没有缓存在所述存储器中,锁定所述至少一个应用程序缓冲区。
5、 根据权利要求4所述的方法,其特征在于,如果所述收到的数据没有 缓存在所述存储器中,将所述锁定的、包括所述收到的数据的至少一个应用程 序缓冲区直接发送到所述硬件。
6、 根据权利要求3所述的方法,其特征在于,所述方法还包括 为所述至少一个应用程序缓冲区的缓冲区ID添加应用程序缓冲区虚拟地址;以及将所述至少一个应用程序缓冲区存储在高速缓冲存储器中。
7、 一种用于处理网络信息的系统,其特征在于,所述系统包括 将对收到的数据进行的传输控制协议(TCP)处理减负到片载处理器上进行的电路;以及利用用户空间库、跳过对所述收到的数据进行的内核处理、将所述收到的 数据宵接发送到硬件的电路。
8、 根据权利要求7所述的系统,其特征在于,所述系统还包括确定所述 收到的数据是否缓存在存储器中的电路。
9、 根据权利要求8所述的系统,其特征在于,所述系统还包括,用于在 所述收到的数据没有缓存在所述存储器中时、注册至少一个应用程序缓冲区的 电路,所述缓冲区包括所述接收的数据。
10、 根据权利要求9所述的系统,其特征在于,所述系统还包括,用于在所述收到的数据没有缓存在所述存储器时、锁定所述至少一个应用程序缓冲区 的电路。
全文摘要
本发明涉及一种用于用户空间TCP减负的方法和系统。所述方法包括将对所接收数据的传输控制协议(TCP)处理减负到片载处理器上进行。可利用用户空间库将所接收的数据直接发送到硬件,跳过由内核对所述接收数据的处理。如果所接收的数据没有缓存在存储器中,可通过用户空间库注册包括所接收数据的应用程序缓存。所述应用程序缓存可被锁定并发送到硬件。
文档编号H04L29/06GK101123567SQ20071009719
公开日2008年2月13日 申请日期2007年4月12日 优先权日2006年5月1日
发明者凯特琳·贝斯特勒, 埃利泽·阿朗, 尤里·埃尔·朱, 拉弗·沙洛姆 申请人:美国博通公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1