流分配的制作方法

文档序号:6649278阅读:185来源:国知局
专利名称:流分配的制作方法
技术领域
本发明涉及流分配。
背景技术
网络使得计算机和其他设备进行通信变得可能。例如,网络能传送代表视频、音频、电子邮件等等的数据。典型地,通过网络传输的数据通过更小的消息即信息包进行传送。通过类推,一个信息包很象是投入邮箱的一个信封。信息包通常包括有效荷载和标题。信息包的有效荷载好比是在信封内的信件。信息包的标题很象是写在信封上面的信息。标题能包括帮助网络装置适当处理信息包的信息。
一些网络协议(例如“协议栈”)合作来处理网络通讯的复杂性。例如,传输协议如传输控制协议(TCP)向应用提供简单机制用于建立连接并通过网络传输数据。对于应用透明的是,TCP处理多种通讯问题例如数据重发、适应网络通信量拥挤等等。
为了提供这些服务,TCP对信息包如段进行操作。一般地,TCP段(通过“封装”)在较大的信息包例如网际协议(IP)数据报内通过网络传输。经常地,IP数据报进一步被甚至更大的信息包例如以太网帧进行封装。TCP段的有效荷载携带由应用通过网络传输的数据流的一部分。接收器能通过重新装配接收到的段来恢复原始的数据流。为了允许重新装配以及将接收数据的肯定应答(ACK)返回给发送者,TCP将每一个有效荷载字节和一个序列号相关联。
每一个TCP连接的当前状态被存储在数据块如传输控制块(TCB)中。TCB包括例如下一个期望的序列号、上一次传输的序列号等等的数据。通常,连接的TCB被读取并潜在地被接收和传送的每一个TCP段更新。

发明内容
一种方法,包括将网络信息包流分配到集成在单独芯片上的一组多个多线程处理器核心中的多线程处理器核心的线程;基于该分配,由分配的处理器核心线程来处理流中的信息包。
一种制造产品,包括指令,使得多核心处理器进行将网络信息包流分配到集成在单独芯片上的一组多个多线程处理器核心中的多线程处理器核心的线程;基于该分配,由分配的处理器核心线程来处理流中的信息包。
一种装置,包括集成在单独芯片上的多个多线程处理器核心;以及指令,指令使得多个多线程处理器核心中的至少一些来将传输控制协议/网际协议(TCP/IP)流分配到处理器核心的线程中的一个,以及基于该分配,由分配的处理器核心线程来处理流中的TCP段。


图1是表示流分配的图。
图2A-2D是表示分配流的例子方案的操作的图。
图3-4是基于流分配的传递信息包的例子步骤的流程图。
图5是多核心处理器例子的图。
图6是网络设备的图。
具体实施例方式
如上所述,TCP(传输控制协议)实现通常为每一个正在进行的连接(“流”)保持状态数据。这个状态数据通常是由每一个处理的TCP段进行访问。访问该数据所使用的存储操作能降低系统性能,因为它从存储器读写状态数据要花费时间。此外,在使用多处理核心来处理TCP段的系统中,当不同元件为访问而竞争的时候,状态数据能导致性能瓶颈。例如,属于相同流的信息包可能被不同的核心处理,留下一个核心等待访问流的状态数据直到其他核心完成其处理。
图1描述了一个方案的操作,它将信息包流分配给在核心102a-102n上执行的不同线程。例如,如所示的,流“a”被分配给核心102a的线程“1”,而流“b”被分配给核心102n的线程“2”。属于这些流的信息包由分配的核心102a-102n线程处理。例如,属于流“a”的信息包104a和104c被核心102a的线程“1”处理,而信息包104b被分配的核心102n的线程“2”处理。通过在相同的核心/线程上处理属于相同的流的信息包,能够避免各种争用和访问延迟。例如,给定流的TCB可以存储在本地核心存储器中而不是被重复地从核心外部的存储器中读出或写入核心外部的存储器。此外,因为消除了对于给定流的TCB跨核心的争用,所以能避免与锁定相关联的等待时间。
为了便于说明,图1任意地标示了流“a”和“b”。实际上,能通过包括在IP标题和IP数据报的封装的TCP标题中的元组数据来识别给定信息包的流。例如,能通过IP源和目的地址及源和目的端口的组合来识别流。元组可以被散列(例如通过CRC(循环冗余校验)算法),以产生识别流的位序列(“流签名”)。
图2A-2D描述了进行流分配的多核心系统的实施例。在这个实施例中,核心102b-102n提供TCP线程池来处理TCP段。每一个TCP线程能独立地处理TCP段。该处理能包括段重新装配、流的TCP状态机导航、生成ACK消息、管理传输窗口等等。
在这个实施例里,实现流分配的逻辑包括分配流给核心102b-102n的全局分类110指令,以及此后,将属于这些流的信息包分发给分配的核心102b-102n。为了执行这些操作,全局分类110指令访问将流与给定的核心102b-102n相关联的数据114。例如,在图2A里,流“a”被分配给核心102b。除这个分配以外,数据114将给定的流与指示在该流中已经调度了多少信息包用于由分配的核心处理的参考计数(“ref.count”)相关联。数据114也将流与指示有多少这些调度的信息包已经被处理完的“完成的”计数相关联。如果处理完所有调度的信息包,则可以牺牲流的条目。例如,线程可能周期性地从流的“参考计数”中减去流的“完成的”计数。如果结果为0,则表示所有调度的信息包都被处理,可以从数据114中清除流数据。否则,“完成的”计数被清零并且存在的流的分配保持完整。
除了全局分类110逻辑以外,实施例特征在于具有在提供TCP线程的每个核心102b-102n上执行的本地分类112b-112n指令。需要注意的是,112b-112n是每个核心102b-102n的相同本地分类逻辑的实例化。一旦全局分类110逻辑调度信息包用于由分配的核心102b处理,在那个核心102b上运行的本地分类112b-112n逻辑确定分配给流的特定线程。为了执行这个任务,本地分类器112b能访问将流与给定的线程相关联的本地数据116b。因此,全局110和本地分类112b逻辑路由数据报用于以增加的粒度来处理。也就是说,全局分类110逻辑能将数据报排队送往分配的核心102b,而本地分类器112b将数据报排队送往核心102b内的特定的线程。
为了说明这些元件的示例操作,图2B-2C描述了封装TCP段的IP数据报104e的处理。如图2B所示,在接收到数据报104e以后,全局分类110逻辑尝试查找数据报的104d流签名(“a”)。在这个例子里,查找流“a”成功,检索分配的核心(“102b”),全局分类110逻辑将数据报104e排队用于由分配的核心102b进行处理,并且增加流的参考计数以反映由核心102b处理的信息包104e的调度。虽然图2B描述了排队送往核心的实际信息包,但是全局分类110和本地分类112b逻辑可以对信息包参考/句柄进行操作以避免复制信息包数据。
如图2C所示,在分配的核心102b上的本地分类器112b最后将数据报104e出队并确定分配用来处理流的数据报的线程。该分配的线程接着对段执行TCP处理。在它的操作中,线程可以使用本地核心存储器来高速缓存来自于存储器(未示出)的流的TCB副本。这个副本可以被TCP线程和用于当前信息包以及随后接收到的流中的信息包的核心的其他线程来修改。如所示的,在完成对给定数据报的处理后,线程递增流的“完成的”计数。
线程继续将排队数据报出队并对其进行处理。最后,流的TCB被写回到存储器,例如,在线程的队列已经为空之后。因此,该实现确保流状态数据保持在本地核心存储器中用于“紧接着的”信息包(即,在线程结束流中先前的信息包的处理之前,调度信息包用于由线程处理),避免了对外部存储器读写流的状态数据的高代价。
在图2B-2C中说明的方案假定了前面对于流“a”的分配。然而,经常地,流可能没有当前的分配。在这种情况下,全局分类110逻辑流查找信息包将失败。在这一点上,全局分类110逻辑可能通过写将流与分配的核心相关联的数据114做出初始的流分配。可采用各种方法实现流的分配,以便跨核心使流负载平衡(例如,通过在核心中使用循环复用)或提供不同的服务质量。在将流分配到给定的核心之后,选定的核心能够分配可用的线程来处理流。
潜在的,如图2D所示,执行全局分类110逻辑的核心102a也可以提供TCP线程并执行本地分类器112a。在这样一个实现中,接收到的信息包可以被核心的100a本地分类器112a初步处理。如果本地分类器112a成功地识别向接收的信息包分配的线程n,则它将信息包排队送往那个线程n。在本地分类器112a没有成功地识别出分配的线程的情况下,全局分类器114接着执行。例如,如所示的,假定流“a”仍然分配给核心102b的线程“n”,信息包104f将被核心102a的本地分类器112a初步处理。由于本地分类器102a将不会存储对于信息包的104f流的本地线程分配,本地分类器102a将传送信息包给全局分类器110。这里,处理顺序将与图2C所示的保持相同。也就是说,全局分类器110将信息包104f排队用于由核心102b的本地分类器112b处理,本地分类器112b又排队信息包104f用于由线程“n”处理。
在这样的实现中,全局分类器110可以将线程分配给执行全局分类器110的核心102a。在这种情况下,全局分类器110能够通过更新由核心的102a本地分类器112a访问的流/线程分配数据来将流分配到核心102a上的线程。然后全局分类器110能够将信息包排队用于由本地分类器112a重新处理。
图3说明一个全局分类处理的例子。如所示的,全局分类器执行数据报的流签名的查找152以确定154流先前是否已经被分配给给定的核心和/或线程。如果没有,则全局分类器将流分配158给核心和/或线程。然后将数据报排队160用于由分配的核心和/或线程进行处理。
图4说明一个本地分类过程的例子。如所示的,本地分类器尝试确定166排队的数据报流是否已经被分配给执行本地分类器的核心上的线程。如果已经分配,则将数据报排队170用于由那个线程进行处理。否则,流被分配168给核心上的可用的线程(例如,当前正执行的线程)。
在图2-4说明的方案中,处理给定的流中的段的TCP线程能够在分配的核心的本地存储器中保留流的TCB。而且,这能减少核心与访问外部存储器之间的访问连接有关的等待时间。
在图2-4中所示的实施例仅是举例,其他的实施例可以在设计或操作上变化。例如,尽管在实施例中使用的数据114如所示是单片表,该数据可以存储在单独的表中以加快操作。例如,流签名可以被单独存储以加快确定给定的流是否有当前分配。例如,至少一部分签名能被存储在内容可寻址存储器中(CAM),其中CAM“命中”快速识别有当前分配的流。同样地,可单独存储由TCP线程递增的“完成的”计数,以减少在TCP线程和全局分类逻辑110之间的访问连接。当单独存储时,不同的流数据可以通过表索引相关(例如,与流相关联的数据被存储在不同表中的相同的相应位置)。
以上说明的技术的实施例可以在他们的粒度上变化。也就是说,系统可以仅将流分配到给定的核心并让线程基于可用性对段进行操作,而不是将给定的流分配到特定的线程。进一步地,在其他的实施例里,线程特征在于具有全局线程ID,该ID能由全局分类逻辑用来直接将信息包出队送往正确的线程而不是上述的两部分方案。
上述技术可以在各种多核心设备上实施,例如在多核心中央处理器单元(CPU)或网络处理器上。例如,图5描述了网络处理器200的一个例子。所示的网络处理器200是Intel网际交换网络处理器(IXP)。其他的网络处理器特征在于具有不同的设计。
所示的网络处理器200特征在于具有在单独集成半导体芯片上的一组处理核心202。每个核心202可以是适合用于信息包处理的精简指令集计算(RISC)处理器。例如,核心202可以不提供通常由通用处理器的指令集提供的浮点或整数除法指令。单独核心202可以提供多线程执行。例如,核心202可以存储多程序计数器和不同线程的其他上下文数据。单独核心202特征在于具有核心内部的本地存储器。单独核心202特征还在于具有CAM。CAM也可以是由不同核心202共享的资源。
如所示地,网络处理器200特征在于具有至少一个接口202,该接口能在处理器200和其他网络组件之间传递信息包。例如,处理器200特征在于具有交换结构接口202(例如,通用交换接口(CSIX)),该接口使得处理器200能够将信息包传送到连接到结构的电路或其他的一个或多个处理器。处理器200特征在于具有接口202(例如,系统封包接口(SPI)接口),该接口使得处理器200能与物理层(PHY)和/或链路层设备(例如,MAC或者成帧器设备)通讯。处理器200也包括接口208(例如,外围部件互连(PCI)总线接口),用于例如与主或其他网络处理器通讯,。
如所示地,处理器200也包括由核心202共享的其他组件,例如散列核心、由核心共享的内部高速暂时存储器以及由核心共享的提供对外部存储器访问的存储控制器206、212。网络处理器200也包括附加处理器210(例如,StrongARMXscale或者IntelArchitecture(IA)core),该处理器经常被编程来执行包括在网络操作中的“控制平面”任务。然而核心处理器210也可以处理“数据平面”任务。
核心202可以与其他核心202通过核心210或其他共享的资源(例如,外部存储器或者高速暂时存储器)进行通讯。核心202也可以通过直接连线到相邻一个或多个核心204的临近寄存器进行通讯。
网络处理器200的特征可用于以各种方式实现流分配。例如,与每一个核心202相关联的CAM可用来存储由本地分类器使用的分配数据。例如,CAM的第一N-条目可以存储分配给不同核心线程的N-流的签名。在这样一个实施例里,CAM条目的序号识别分配的线程(例如,存储在第二CAM条目中的流签名识别分配给流的第二核心线程)。
CAM也可以被全局分类器使用。例如,执行全局分类器的核心的CAM的最后M-条目可用来存储当前分配的流的流签名的子集(例如,在图2A-2C中的数据114的签名列),以加快初始的签名查找。因为一个或多个CAM可能没有足够的空间用于分配的流的所有签名,所以剩下的流签名和相应的分配数据可以存储在芯片外(比如,在SRAM中)。因此,CAM未找到签名会导致全局分类器为了匹配而对剩下签名的存储器执行随后的查询。
所示的网络处理器200特征在于具有各种机制,各种机制能用于在不同的核心202之中路由信息包。例如,经由连接临近核心的下一个临近寄存器或者经由在存储器(例如,在高速暂时存储器或在SRAM)中实现的队列可将信息包排队用于由分配的核心处理。类似地,特定线程的队列也能在本地核心存储器、高速暂时存储器、SRAM等中实现。潜在地,可以对核心202编程以实现信息包处理管道,其中对一个或多个核心线程起作用的线程执行以太网操作(例如,以太网接收、以太网去封装)、IPv4和/或者IPv6操作(例如验证),并且在一个或多个核心上的线程处理这种TCP操作。其他线程也可以实现对结果数据流的应用操作。
图6描述使用上述技术处理信息包的网络设备。如所示的,设备特征在于具有通过交换结构310(例如,纵横或者共享的存储交换结构)互连的线路卡300(“刀片”)的集合。例如,交换结构可以遵照CSIX或者其他的交换技术例如HyperTransport、Infiniband、PCI、Packet-Over-SONET、RapidIO和/或UTOPIA(ATM的通用测试和操作物理层接口)。
单独的线路卡(例如,300a)可以包括处理网络连接上的通讯的一个或多个物理层(PHY)设备302(例如,光纤、电缆和无线物理层)。PHY在不同的网络媒体传送的物理信号和数字系统使用的比特(例如,“0”和“1”)之间进行转换。线路卡300也可以包括成帧器设备(例如,以太网、同步光纤网(SONET)、高级数据链路(HDLC)成帧器或者其他的“第2层”设备)304,该设备可以对帧执行例如错误检测和/或校正操作。所示的线路卡300也可以包括一个或多个网络处理器306,其为经由一个或多个PHY 302接收的信息包执行信息包处理操作并经由交换结构310直接投送信息包到提供出口接口以转发信息包的线路卡。潜在地,网络处理器306也能代替成帧器设备304执行“第2层”职责。
虽然图5和图6描述了网络处理器和结合网络处理器的设备的特定例子,但是可以用不同的结构实现技术,该结构包括与那些所示的具有不同设计的处理器和设备。例如,技术可以使用在多核心TCP卸载引擎(TOE)上。这样的TOE可以集成在IP存储节点上,应用(“第7层”)负载平衡器或其他的设备中。
此外,技术可以用来处理其他的传输层协议、在网络协议栈内的其他层的协议、除了TCP和IP的协议并用来处理其他的协议数据单元。例如,技术可以用来处理其他的面向连接的协议例如异步传输模式(ATM)信息包(“单元”)或者用户数据报协议(UDP)信息包。此外,术语IP包括IPv4和IPv6的IP实现。
这里所用的术语电路包括硬连线电路、数字电路、模拟电路、可编程电路等等。可编程电路可对设置在制造产品(例如,一个非易失性存储器例如只读存储器)上的可执行指令操作。
其他的具体实施例都在下面的权利要求的范围内。
权利要求
1.一种方法,包括将网络信息包流分配到集成在单独芯片上的一组多个多线程处理器核心中的多线程处理器核心的线程;基于该分配,由分配的处理器核心线程来处理所述流中的信息包。
2.如权利要求1所述的方法,其中所述信息包包括网际协议信息包,所述网际协议信息包包含传输控制协议段。
3.如权利要求2所述的方法,其中所述流包括至少要由信息包的网际协议源地址、网际协议目的地址、传输控制协议段源端口以及传输控制协议段目的端口来识别的流。
4.如权利要求1所述的方法,进一步包括确定已经被调度要由核心线程处理的所述流中的每一个信息包是否已经被处理。
5.如权利要求1所述的方法,进一步包括将与所述流相关联的数据读到与处理器核心相关联的本地存储器中。
6.如权利要求5所述的方法,其中所述数据包括传输控制协议(TCP)连接的传输控制块(TCB)。
7.如权利要求1所述的方法,进一步包括在第一处理器核心确定分配给所述流的处理器核心;在所分配的处理器核心确定分配给所述流的一组线程中的一个。
8.一种制造产品,包括指令,使得多核心处理器进行将网络信息包流分配到集成在单独芯片上的一组多个多线程处理器核心中的多线程处理器核心的线程;基于该分配,由分配的处理器核心线程来处理所述流中的信息包。
9.如权利要求8所述的产品,其中信息包包括网际协议信息包,所述网际协议信息包包含传输控制协议段。
10.如权利要求8所述的产品,进一步包括指令以确定已经被调度要由核心线程处理的所述流中的每一个信息包是否已经被处理。
11.如权利要求8所述的产品,进一步包括将与所述流相关联的数据读到与处理器核心相关联的本地存储器中。
12.如权利要求11所述的产品,其中所述数据包括传输控制协议(TCP)连接的传输控制块(TCB)。
13.如权利要求8所述的产品,进一步包括指令来在第一处理器核心确定分配给所述流的处理器核心;在所分配的处理器核心确定分配给所述流的一组线程中的一个。
14.一种装置,包括集成在单独芯片上的多个多线程处理器核心;以及指令,所述指令使得所述多个多线程处理器核心中的至少一些来将传输控制协议/网际协议(TCP/IP)流分配到处理器核心的线程中的一个;以及基于该分配,由分配的处理器核心线程来处理所述流中的TCP段。
15.如权利要求14所述的装置,其中所述处理器包括至少一个内容可存址存储器;以及其中将所述TCP/IP流分配到所述线程中的一个的指令包括将流标识符写入至少一个内容可寻址存储器的指令。
全文摘要
一般来说,在一方面,本公开描述了将网络信息包流分配到集成在单独芯片上的一组多个多线程处理器核心中的多线程处理器核心的线程。基于该分配,流中的信息包由分配的处理器核心线程处理。
文档编号G06F9/46GK1801775SQ20051010738
公开日2006年7月12日 申请日期2005年12月12日 优先权日2004年12月13日
发明者A·霍巴尔, Y·李 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1