掌桥专利:专业的专利平台
掌桥专利
首页

网络接口设备

文献发布时间:2023-06-19 12:14:58


网络接口设备

技术领域

本申请涉及用于对于数据包执行功能的网络接口设备。

背景技术

网络接口设备是已知的,并且通常用于提供计算设备和网络之间的接口。网络接口设备可以被配置为处理从网络接收的数据和/或处理将被放置在网络上的数据。

发明内容

根据一个方面,提供了一种用于将主机连接到网络的网络接口设备,该网络接口设备包括:第一接口,其被配置为接收多个数据包;以及可配置的硬件模块,其包括多个处理单元,每个处理单元与一种能够以单个步骤中执行的预定操作类型相关联,其中所述多个处理单元中的至少一些是与不同的预定操作类型相关联的,其中所述硬件模块可配置成互联所述多个所述处理单元中的至少一些处理单元,以提供用于处理所述多个数据包中的一个或多个数据包的第一数据处理流水线,以便对于所述多个数据包中的所述一个或多个数据包执行第一功能。

在一些实施例中,第一功能包括过滤功能。在一些实施例中,该功能包括隧道、封装、和路由功能中的至少一项。在一些实施例中,第一功能包括扩展的伯克利数据包过滤器功能。

在一些实施例中,第一功能包括分布式拒绝服务清理操作。

在一些实施例中,第一功能包括防火墙操作。

在一些实施例中,第一接口被配置为从网络接收第一数据包。

在一些实施例中,第一接口被配置为从主机设备接收第一数据包。

在一些实施例中,多个处理单元的至少一些中的两个或更多个被配置为并行地执行它们的相关联的至少一个预定的操作。

在一些实施例中,多个处理单元的至少一些中的两个或更多个被配置为根据硬件模块的公共时钟信号执行它们的相关联的预定操作类型。

在一些实施例中,多个处理单元的至少一些中的两个或更多个中的每一个被配置为在由时钟信号规定的一段预定时间长度内执行其相关联的预定操作类型。

在一些实施例中,多个处理单元的至少一些中的两个或更多个被配置为:在预定时间长度的时间段内访问第一数据包;以及响应于预定时间长度的结束,将分别的至少一个操作的结果传送到下一个处理单元。

在一些实施例中,所述结果包括以下的至少一个或多个:来自多个数据包中的一个或多个数据包的至少一个值;映射状态的更新;和元数据。

在一些实施例中,多个处理单元中的每一个包括被配置为执行与分别的处理单元相关联的至少一个操作的专用集成电路。

在一些实施例中,每个处理单元包括现场可编程门阵列。在一些实施例中,每个处理单元包括任何其他类型的软逻辑。

在一些实施例中,多个处理单元中的至少一个包括数字电路和用来存储与该数字电路执行的处理相关联的状态的存储器,其中所述数字电路被配置为与该存储器通信地执行与分别的处理单元相关联的预定操作类型。

在一些实施例中,网络接口设备包括可访问到多个处理单元中的两个或更多个处理单元存储器,其中所述存储器被配置为存储与第一数据包相关联的状态,其中在由硬件模块执行第一功能期间,多个处理单元中的两个或更多个处理单元被配置为访问和修正所述状态。

在一些实施例中,多个处理单元中的至少一些处理单元中的第一个处理单元被配置为在所述多个处理单元中的第二个访问状态的值期间停止运行。

在一些实施例中,多个处理单元中的一个或多个处理单元被单独地配置为:基于它们的相关联的预定操作类型,执行针对分别的流水线的特定操作。

在一些实施例中,硬件模块被配置为接收指令,并且响应于所述指令,执行以下中的至少一项:互联所述多个处理单元的至少一些处理单元,以提供用于处理所述多个数据包的一个或多个数据包的数据处理流水线;使得所述多个处理单元的一个或多个处理单元执行与所述一个或多个数据包相关的它们的相关联的预定操作类型;将所述多个处理单元的一个或多个处理单元加到数据处理流水线中;以及从数据处理流水线中去除所述多个处理单元的一个或多个处理单元。

在一些实施例中,预定操作包括以下中的至少一项:从存储器加载所述第一数据包的至少一个数值;将数据包的至少一个数值存储在存储器中;以及在查找表中执行查找,以确定要对数据包执行的动作。

在一些实施例中,硬件模块被配置为接收指令,其中硬件模块可配置为响应于所述指令而互联所述多个所述处理单元中的至少一些处理单元以提供用于处理所述多个数据包的一个或多个数据包的数据处理流水线,其中所述指令包括通过第三处理流水线发送的数据包。

在一些实施例中,所述多个处理单元中的至少一些处理单元中的一个或多个可配置为:响应于所述指令,对于所述多个数据包中的一个或多个数据包执行其相关联的预定操作类型的选定操作。

在一些实施例中,所述多个组件包括被配置为在不同于硬件模块的电路中提供第一功能的多个组件中的第二个组件,其中网络接口设备包括至少一个控制器,其被配置为使数据包通过处理流水线,以便由多个组件中的第一组件和多个组件中的第二组件之一进行处理。

在一些实施例中,网络接口设备包括至少一个控制器,其被配置为发出指令以使硬件模块开始对于数据包执行第一功能,其中所述指令被配置为使得多个组件中的第一组件被插入到所述处理流水线中。

在一些实施例中,网络接口设备包括至少一个控制器,其被配置为发布指令以使硬件模块开始相对于数据包执行第一功能,其中所述指令包括通过处理流水线被发送的、并被配置为使得多个组件中的第一个组件启动的控制消息。

在一些实施例中,对于所述多个处理单元的至少一些处理单元中的一个或多个处理单元,相关联的至少一个操作包括以下中的至少一项:从网络接口设备的存储器加载所述第一数据包的至少一个数值;将第一数据包的至少一个数值存储在网络接口设备的存储器中;以及在查询表中执行查询,以确定要对所述第一数据包执行的动作。

在一些实施例中,所述多个处理单元的至少一些中的一个或多个处理单元中被配置为将其相关联的至少一个预定操作的至少一个结果传递到在第一处理流水线中的下一个处理单元,所述下一个处理单元被配置成根据所述至少一个结果执行下一个预定操作。

在一些实施例中,所述不同的预定操作类型的每一个由不同的样板限定。

在一些实施例中,所述预定操作类型包括以下操作的至少一项:访问数据包;访问被存储在所述硬件模块的存储器中的查找表;对从数据包加载的数据执行逻辑操作;以及对从查找表加载的数据执行逻辑操作。

在一些实施例中,硬件模块包括路由硬件,其中所述硬件模块被配置成:通过配置路由硬件而在所述多个处理单元之间以由第一数据处理流水线规定的特定的次序路由数据包,从而互联所述多个处理单元中的至少一些以提供第一数据处理流水线。

在一些实施例中,所述硬件模块可配置成互联所述多个所述处理单元的至少一些以提供第二数据处理流水线,从而用于处理所述多个数据包的一个或多个数据包以执行不同于所述第一功能的第二功能。

在一些实施例中,所述硬件模块可配置成互联所述多个所述处理单元的至少一些,以便在互联所述多个处理单元的至少一些以提供第一数据处理流水线后,提供第二数据处理流水线。

在一些实施例中,所述网络接口设备包括与所述硬件模块分开的另外的电路,并被配置成对于所述多个数据包的一个或多个数据包执行第一功能。

在一些实施例中,所述另外的电路包括以下中的至少一项:现场可编程门阵列;以及多个中央处理单元。

在一些实施例中,所述网络接口设备包括至少一个控制器,其中所述另外的电路被配置成执行在对于要在所述硬件模块中执行的第一功能的编译处理期间对于数据包执行所述第一功能,其中所述至少一个控制器被配置成,响应于所述编译处理的完成,控制所述硬件模块开始对于数据包执行所述第一功能。

在一些实施例中,所述另外的电路包括多个中央处理单元。

在一些实施例中,所述至少一个控制器被配置成:响应于确定关于要在所述硬件模块中执行的第一功能的编译处理已完成,控制所述另外的电路停止对于数据包执行所述第一功能。

在一些实施例中,网络接口设备包括至少一个控制器,其中所述硬件模块被配置成在对于要在所述硬件电路中执行的所述第一功能的编译处理期间对于数据包执行所述第一功能,其中所述至少一个控制器被配置成确定要在另外的电路中执行的所述第一功能的编译处理已完成,并且响应于所述确定,控制所述另外的电路开始相对于数据包执行所述第一功能。

在一些实施例中,所述另外的电路包括现场可编程门阵列。

在一些实施例中,所述至少一个控制器被配置成:响应于确定关于要在所述另外的电路中执行的所述第一功能的编译处理已完成,控制所述硬件模块停止对于数据包执行所述第一功能。

在一些实施例中,所述网络接口设备包括至少一个控制器,其被配置成执行编译处理以提供要在所述硬件模块中执行的所述第一功能。

在一些实施例中,所述编译过程包括提供指令以在硬件模块中提供响应于控制消息的控制面接口。

根据另一方面,提供了一种数据处理系统,其包括根据第一方面的网络接口设备和主机设备,并且,其中所述数据处理系统包括至少一个控制器,其被配置成执行编译处理,以提供要在硬件模块中执行第一功能。

在一些实施例中,所述至少一个控制器由以下中的一个或多个提供:网络接口设备和主机设备。

在一些实施例中,响应于确定由所述至少一个控制器作出的关于表示第一功能的计算机程序对于在所述主机设备的内核模式中的执行是安全,执行所述编译处理。

在一些实施例中,所述至少一个控制器被配置成通过下述方式执行编译处理:指定所述多个处理单元的至少一些中的每个处理单元以所述第一数据处理流水线的特定次序,执行由一系列计算机代码指令表示的至少一个操作,其中所述多个操作对于所述多个数据包的所述一个或多个数据包提供所述第一功能。

在一些实施例中,所述至少一个控制器被配置成:在编译处理完成之前,发送第一指令以使得网络接口设备的另外的电路对于数据包执行所述第一功能;以及发送第二指令,使得所述硬件模块在编译处理完成之后,开始对于数据包执行所述第一功能。

根据另一方面,提供了一种用于在网络接口设备中实施的方法,所述方法包括:在第一接口处接收多个数据包;以及配置硬件模块以互联所述硬件模块的多个处理单元的至少一些,以便提供第一数据处理流水线,用于处理所述多个数据包的一个或多个数据包,以便对于所述多个数据包的所述一个或多个数据包执行第一功能,其中每个处理单元与一种能够以单个步骤执行的预定操作类型相关联,其中所述多个处理单元的至少一些是与不同的预定操作类型相关联的。

根据另一方面,提供了一种非瞬态计算机可读介质,所述非瞬态计算机可读介质包括程序指令,用于使得网络接口设备执行方法,所述方法包括:在第一接口处接收多个数据包;以及配置硬件模块以互联所述硬件模块的多个处理单元的至少一些,以便提供第一数据处理流水线,用于处理所述多个数据包的一个或多个数据包,以便对于所述多个数据包的所述一个或多个数据包执行第一功能,其中每个处理单元与一种能够以单个步骤执行的预定操作类型相关联,其中所述多个处理单元的至少一些是与不同的预定操作类型相关联的。

根据另一方面,提供了一种处理单元,所述处理单元被配置为:对于在网络接口设备处接收到的第一数据包执行至少一个预定的操作;被连接到第一另外的处理单元,该第一另外的处理单元被配置为对所述第一数据包执行另外的至少第一预定的操作;被连接到第二另外的处理单元,所述第二另外的处理单元被配置为对于第一数据包执行第二另外的至少一个预定的操作;从第一另外的处理单元接收第一另外的至少一个预定操作的结果;根据所述第一另外的至少一个预定的操作的结果来执行所述至少一个预定的操作;将所述至少一个预定的操作的结果发送给所述第二另外的处理单元,以在所述第二另外的至少一个预定的操作中进行处理。

在一些实施例中,所述处理单元被配置为接收用于对至少一项预定操作进行定时的时钟信号,其中处理单元被配置为在时钟信号的至少一个周期中执行至少一项预定操作。

在一些实施例中,所述处理单元被配置为在时钟信号的单个周期中执行至少一个预定的操作。

在一些实施例中,所述至少一个预定的操作、所述第一另外的至少一个预定的操作、以及所述第二另外的至少一个预定的操作形成相对于在网络接口设备处接收的第一数据包执行的功能的一部分。

在一些实施例中,从主机设备接收第一数据包,其中网络接口设备被配置为将主机设备接口到网络。

在一些实施例中,从网络接收第一数据包,其中网络接口设备被配置为将主机设备接口到网络。

在一些实施例中,所述功能是过滤功能。

在一些实施例中,所述过滤功能是扩展的伯克利数据包过滤功能。

在一些实施例中,所述处理单元包括被配置为执行至少一个预定的操作的专用集成电路。

在一些实施例中,所述处理单元包括:数字电路,其被配置为执行至少一个预定的操作;以及存储器,其存储与所进行的至少一个预定操作有关的状态。

在一些实施例中,处理单元被配置为访问可被第一另外的处理单元和第二另外的处理单元访问的存储器,其中所述存储器被配置为存储与第一数据包相关联的状态,其中所述至少一个预定的操作包括修正被存储在存储器中的状态。

在一些实施例中,所述处理单元被配置为在第一时钟周期内从存储器读取所述状态的值,并将所述值提供给第二另外的处理单元以供第二另外的处理单元进行修正,其中处理单元被配置为在第一时钟周期之后的第二时钟周期将停止。

在一些实施例中,所述至少一个预定的操作包括以下至少一项:从网络接口设备的存储器中加载第一数据包;将第一数据包存储在网络接口设备的存储器中;以及在查找表中执行查找,以确定要对第一数据包执行的动作。

根据另一方面,提供了一种在处理单元中实施的方法,所述方法包括:关于在网络接口设备处接收到的第一数据包执行至少一个预定的操作;连接到第一另外的处理单元,所述第一另外的处理单元被配置为对于第一数据包执行第一另外的至少一个预定的操作;连接到第二另外的处理单元,所述第二另外的处理单元被配置为对于第一数据包执行第二另外的至少一个预定的操作;从第一另外的处理单元接收第一另外的至少一个预定操作的结果;根据所述第一另外的至少一个预定的操作的结果来执行所述至少一个预定的操作;将所述至少一个预定的操作的结果发送给所述第二另外的处理单元,用于在所述第二另外的至少一个预定的操作中进行处理。

根据另一方面,提供了一种计算机可读的非瞬态存储设备,该设备存储指令,该指令在由处理单元执行时使处理单元执行一种方法,该方法包括:关于在网络接口设备处接收到的第一数据包执行至少一个预定的操作;连接到第一另外的处理单元,所述第一另外的处理单元被配置为相对于第一数据包执行第一另外的至少一个预定的操作;连接到第二另外的处理单元,所述第二另外的处理单元被配置为相对于第一数据包执行第二另外的至少一个预定的操作;从第一另外的处理单元接收第一另外的至少一个预定操作的结果;根据所述第一另外的至少一个预定的操作的结果来执行所述至少一个预定的操作;将所述至少一个预定的操作的结果发送给所述第二另外的处理单元,用于在所述第二另外的至少一个预定的操作中进行处理。

根据另一方面,提供了一种用于将主机设备与网络进行接口的网络接口设备,所述网络接口设备包括:至少一个控制器;第一接口,所述第一接口被配置为接收数据包;第一电路,被配置为对于在第一接口处接收的数据包执行第一功能;以及第二电路,其中所述第一电路被配置为在对于要在第二电路中执行的第一功能进行编译过程期间,相对于在第一接口接收的数据包执行第一功能,其中,所述至少一个控制器被配置为确定在第二电路中执行的第一功能的编译过程已完成,并响应于所述确定,控制第二电路开始对于在第一接口处接收到的数据包执行第一功能。

在一些实施例中,所述至少一个控制器被配置为响应于关于要在第二电路中执行的第一功能的编译过程已完成的所述确定,控制第一电路停止对在第一接口处接收到的数据包执行第一功能。

在一些实施例中,所述至少一个控制器被配置为响应于关于对于要在第二电路中执行的第一功能的编译过程已完成的所述确定:开始对于在第一接口接收的第一数据流的数据包执行第一功能;以及控制第一电路停止对第一数据流的数据包执行第一功能。

在一些实施例中,第一电路包括至少一个中央处理单元,其中所述至少一个中央处理单元中的每个被配置为对于在第一接口处接收的至少一个数据包执行第一功能。

在一些实施例中,第二电路包括现场可编程门阵列,其被配置为对于在第一接口处接收到的数据包开始执行第一功能。

在一些实施例中,第二电路包括硬件模块,该硬件模块包括多个处理单元,每个处理单元与至少一个预定的操作相关联,其中第一接口被配置为接收第一数据包,其中硬件模块被配置为:在对于要在第二电路中执行的第一功能进行编译处理之后,使多个处理单元中的至少一些处理单元以特定顺序执行其相关联的至少一个预定的操作,从而对于第一数据包执行第一功能。

在一些实施例中,第一电路包括硬件模块,所述硬件模块包括多个处理单元,每个处理单元与至少一个预定的操作相关联,其中第一接口被配置为接收第一数据包,其中硬件模块被配置为:在对于要在第二电路中执行的第一功能进行编译过程期间,使多个处理单元中的至少一些处理单元以特定顺序执行其相关联的至少一个预定的操作,从而对于第一数据包执行第一功能。

在一些实施例中,所述至少一个控制器被配置为执行用于对要由第二电路执行的第一功能进行编译的编译过程。

在一些实施例中,所述至少一个控制器被配置为:在完成编译过程之前,指示第一电路对于在第一接口处接收到的数据包执行第一功能。

在一些实施例中,用于编译将由第二电路执行的第一功能的编译过程由主机设备执行,其中,所述至少一个控制器被配置为响应于接收到来自主机设备的完成编译过程的指示,确定编译过程已经完成。

在一些实施例中,包括:处理流水线,用于处理在第一接口处接收的数据包,其中所述处理流水线包括多个组件,每个组件被配置为对于在第一接口处接收的数据包执行多个功能中的一个功能,其中所述多个组件中的第一组件被配置为当由第一电路提供时提供第一功能,其中所述多个组件中的第二组件被配置为当由第二至少一个处理单元提供时提供第一功能。

在一些实施例中,所述至少一个控制器被配置为通过将多个组件中的第二个组件插入到处理流水线中,来控制第二电路相对于在第一接口处接收到的数据包开始执行第一功能。

在一些实施例中,所述至少一个控制器被配置为响应于关于对要在第二电路中执行的第一功能的编译过程完成的所述确定,控制第一电路通过从处理流水线中删除多个组件中的第一组件,停止对于在第一个接口接收到的数据包执行第一功能。

在一些实施例中,所述至少一个控制器被配置为通过经由处理流水线发送控制消息以启动所述多个组件中的第二组件,来控制第二电路开始对于在第一接口处接收到的数据包执行第一功能。

在一些实施例中,所述至少一个控制器被配置为响应于关于对要在第二电路中执行的第一功能的编译过程完成的所述确定,控制第一电路通过经由处理流水线发送控制消息以停用所述多个组件中的第二组件,以停止对于在第一个接口接收到的数据包执行第一功能。

在一些实施例中,所述多个组件中的第一组件被配置为相对于通过处理流水线的第一数据流的数据包提供第一功能,其中多个组件中的第二组件被配置为相对于通过处理流水线的第二数据流的数据包提供第一功能。

在一些实施例中,第一功能包括过滤数据包。

在一些实施例中,第一接口被配置为从网络接收数据包。

在一些实施例中,第一接口被配置为从主机设备接收数据包。

在一些实施例中,第二电路的第一功能的编译时间大于第一电路的第一功能的编译时间。

根据另一方面,提供了一种方法,包括:在网络接口设备的第一接口处接收数据包;在网络接口设备的第一电路中对于在第一接口处接收的数据包执行第一功能;其中第一电路被配置为在对于要在第二电路中执行的第一功能进行编译过程期间,对于在第一接口处接收的数据包执行第一功能,所述方法包括:确定对于要在第二电路中执行的第一功能进行的编译过程完成;以及响应于所述确定,控制网络接口设备的第二电路开始对于在第一接口处接收的数据包执行第一功能。

根据另一方面,提供了一种非瞬态计算机可读介质,其包括程序指令,所述程序指令用于使数据处理系统执行方法,所述方法包括:在网络接口设备的第一接口处接收数据包;以及在网络接口设备的第一接口处接收数据包。在网络接口设备的第一电路中执行有关在第一接口处接收到的数据包的第一功能,其中第一电路配置成在编译过程中对于在第一接口处接收到的数据包执行第一功能。所述第一功能要在所述第二电路中执行,所述方法包括:确定要在所述第二电路中执行的所述第一功能的编译过程完成;响应于所述确定,控制网络接口设备的第二电路开始对于在第一接口处接收的数据包执行第一功能。

根据另一方面,提供了一种非瞬态计算机可读介质,其包括用于使数据处理系统执行以下操作的程序指令:执行编译过程以编译将由网络接口设备的第二电路执行的第一功能;在完成编译过程之前,发送第一指令以使网络接口设备的第一电路对于在网络接口设备的第一接口处接收到的数据数据包执行第一功能;发送第二指令,以使第二电路在编译过程完成之后,开始对在第一接口处接收到的数据数据包执行第一功能。

在一些实施例中,所述非瞬态计算机可读介质包括用于使数据处理系统执行进一步的编译过程以编译将由第一电路执行的第一功能的程序指令,其中所述编译过程所花费的时间长于所述进一步的编译过程所花费的时间。

在一些实施例中,数据处理系统包括主机设备,其中网络接口设备被配置为使主机设备与网络接口。

在一些实施例中,数据构成系统包括网络接口设备,其中网络接口设备被配置为使主机设备与网络接口。

在一些实施例中,数据处理系统包括主机设备和网络接口设备,其中网络接口设备被配置为使主机设备与网络接口。

在一些实施例中,第一功能包括过滤在第一接口处从网络接收的数据包。

在一些实施例中,非瞬态计算机可读介质包括用于使数据处理系统执行以下操作的程序指令:发送第三指令以使第一电路在编译过程完成之后,就停止对于在第一接口处接收的数据包执行该功能。

在一些实施例中,非瞬态计算机可读介质包括用于使数据处理系统执行以下操作的程序指令:发送指令以使第二电路对于第一数据流的数据包执行第一功能;以及发送指令以使第一电路停止对第一数据流的数据包执行第一功能。

在一些实施例中,第一电路包括至少一个中央处理单元,其中在完成第二编译过程之前,所述至少一个中央处理单元中的每一个被配置为对于在第一接口处接收到的至少一个数据包执行第一功能。

在一些实施例中,第二电路包括现场可编程门阵列,其被配置为对于在第一接口处接收到的数据包开始执行第一功能。

在一些实施例中,第二电路包括硬件模块,所述硬件模块包括多个处理单元,每个处理单元与至少一个预定的操作相关联,其中在第一接口处接收的数据包包括第一数据包,其中所述硬件模块被配置为在完成第二编译过程之后,由每个处理单元对第一数据包执行第一功能,多个处理单元中的至少一些对第一数据包执行其各自的至少一个操作。

在一些实施例中,第一电路包括硬件模块,所述硬件模块包括多个处理单元,该多个处理单元被配置为对于数据包提供第一功能,每个处理单元与至少一个预定的操作相关联,其中在第一接口处接收到的数据包包括第一数据包,其中硬件模块被配置为在第二编译过程完成之前,由对于第一数据包执行它的各自的至少一个操作的多个处理单元的至少一些处理单元中的每个处理单元对于第一数据包执行第一功能。

在一些实施例中,编译过程包括分配第二电路的多个处理单元中的每一个处理单元以特定顺序执行与一系列计算机代码指令中的多个处理阶段之一相关联的至少一个操作。

在一些实施例中,由第一电路提供的第一功能被提供为用于处理在第一接口处接收的数据包的处理流水线的组件,其中由第二电路提供的第一功能被提供为处理流水线的组件。

在一些实施例中,第一指令包括被配置为使得多个组件中的第一组件被插入到处理流水线中的指令。

在一些实施例中,第二指令包括被配置为使得多个组件中的第二组件被插入到处理流水线中的指令。

在一些实施例中,非瞬态计算机可读介质包括用于使数据处理系统执行以下操作的程序指令:发送第三指令以使第一电路在编译过程完成之后停止对于在第一接口处接收到的数据包执行第一功能,其中第三指令包括被配置为使多个组件中的第一组件从处理流水线中去除的指令。

在一些实施例中,第一指令包括通过处理流水线被发送的、以激活多个组件中的第二个组件的控制消息。

在一些实施例中,第二指令包括通过处理流水线发送的、以激活多个组件中的第二个组件的控制消息。

在一些实施例中,非瞬态计算机可读介质包括用于使数据处理系统执行以下操作的程序指令:发送第三指令以使第一电路在编译过程完成之后停止对于在第一接口处接收的数据包执行功能,其中第三指令包括通过处理流水线,以停用多个组件中的第一组件的控制消息。

根据另一方面,提供了一种数据处理系统,所述数据处理系统包括至少一个处理器和至少一个包括计算机程序代码的存储器,其中至少一个存储器和计算机程序代码被配置为连同所述至少一个处理器一起使得数据处理系统用于:执行编译过程以编译将由网络接口设备的第二电路执行的功能;在完成编译过程之前,指示网络接口设备的第一电路相对于在网络接口设备的第一接口处接收到的数据包执行功能;在完成第二编译过程之后,指示第二至少一个处理单元开始对在第一接口处接收到的数据包执行功能。

根据另一方面,提供了一种用于在数据处理系统中实现的方法,所述方法包括:执行编译过程以编译将由网络接口设备的第二电路执行的功能;在完成编译过程之前,发送第一指令以使网络接口设备的第一电路对于在网络接口设备的第一接口处接收到的数据包执行功能;以及发送第二指令,以使第二电路在编译过程完成之后,开始对在第一接口处接收到的数据包执行功能。

根据另一方面,提供了一种非瞬态计算机可读介质,包括用于使数据处理系统分配多个处理单元中的每一个以特定顺序执行与一系列计算机代码指令中多个处理阶段中的一个处理阶段相关联的至少一个操作的程序指令,其中多个处理阶段对于在网络接口设备的第一接口处接收的第一数据包提供第一功能,其中多个处理单元中的每个都被配置成执行多种处理类型之一,其中多个处理单元中的至少一些处理单元被配置为执行不同类型的处理,其中对于多个处理单元中的每一个,根据确定关于处理单元被配置为执行适合于执行所述各个至少一种操作的处理类型来执行分配。

在一些实施例中,每种处理类型由多个样板之一限定。

在一些实施例中,处理类型包括以下至少之一:访问在网络接口设备处接收到的数据包;访问存储在硬件模块的存储器中的查找表;对从数据包加载的数据进行逻辑运算;以及对从查找表加载的数据执行逻辑运算。

在一些实施例中,所述多个处理单元中的至少一些处理单元中的两个或更多个被配置为根据硬件模块的公共时钟信号执行它们相关联的至少一个操作。

在一些实施例中,所述分配包括分配所述多个处理单元中的至少一些处理单元中的两个或更多个中的每一个,以在由时钟信号限定的预定时间长度内执行其相关联的至少一个操作。

在一些实施例中,所述分配包括分配多个处理单元中的至少一些的两个或更多个以在预定时间长度的时间段内访问第一数据包。

在一些实施例中,所述分配包括分配多个处理单元中的至少一些中的两个或更多个中的每个,响应于预定时间长度的时间段的结束,将相应的至少一个操作的结果传送到下一个处理单元。

在一些实施例中,非瞬态计算机可读介质包括用于使数据处理系统执行以下操作的程序指令:分配所述多个阶段中的至少一些阶段以占用单个时钟周期。

在一些实施例中,非瞬态计算机可读介质包括用于使数据处理系统分配多个处理单元中的两个或更多个以执行其分配的、要并行执行的至少一个操作的程序指令。

在一些实施例中,网络接口设备包括硬件模块,其包括多个处理单元。

在一些实施例中,非瞬态计算机可读介质包括用于使数据处理系统执行以下操作的计算机程序指令:执行包括分配的编译过程;在编译过程完成之前,发送第一指令以使网络接口设备的电路对于在第一接口处接收到的数据包执行第一功能;以及在完成编译过程之后,发送第二指令以使多个处理单元开始对在第一接口处接收到的数据包执行第一功能。

在一些实施例中,非瞬态计算机可读介质包括:对于多个处理单元中的至少一些中的一个或多个,所述分配的至少一个操作包括以下至少一项:从网络接口设备的存储器加载第一数据包的至少一个值;将第一数据包的至少一个值存储在网络接口设备的存储器中;以及执行查询表查询,以确定对于所述第一数据包要执行的动作。

在一些实施例中,非瞬态计算机可读介质包括计算机程序指令,用于使数据处理系统发出指令以配置网络接口设备的路由硬件以特定顺序在多个处理单元之间路由第一数据包,从而对第一数据包执行第一功能。

在一些实施例中,由多个处理单元提供的第一功能被提供为用于处理在第一接口处接收到的数据包的处理流水线的组件。

在一些实施例中,非瞬态计算机可读介质包括计算机程序指令,用于通过使数据处理系统发出指令使得部件被插入到处理流水线而使得多个处理单元开始对在第一接口处接收的数据包执行第一功能。

在一些实施例中,非瞬态计算机可读介质包括计算机程序指令,用于通过使数据处理系统发出指令使得部件在处理流水线中被激活而使得多个处理单元开始对在第一接口处接收的数据包执行第一功能。

在一些实施例中,数据处理系统包括主机设备,其中网络接口设备被配置为使主机设备与网络接口。

在一些实施例中,数据处理系统包括网络接口设备。

在一些实施例中,数据处理系统包括:网络接口设备;和主机设备,其中网络接口设备被配置为将主机设备连接到网络接口。

根据另一方面,提供了一种数据处理系统,其包括至少一个处理器和至少一个包括计算机程序代码的存储器,其中所述至少一个存储器和所述计算机程序代码被配置为,与至少一个处理器一起,使得所述数据处理系统分配多个处理单元中的每一个以特定顺序执行与一系列计算机代码指令中的多个处理阶段之一相关联的至少一个操作,其中,所述多个处理阶段提供关于在网络接口设备的第一接口处接收的第一数据包的第一功能,其中,多个处理单元中的每一个被配置为执行多种处理类型中的一种,其中,多个处理单元中的至少一些单元被配置为执行不同的处理类型,其中对于多个处理单元中的每个,所述分配是取决于关于所述处理单元被配置为执行适合于执行相应的至少一个操作的一种处理类型的确定而执行的。

根据另一方面,提供了一种方法,包括:分配多个处理单元中的每一个以特定顺序执行与一系列计算机代码指令中的多个处理阶段之一相关联的至少一个操作,其中多个处理阶段对于在网络接口设备的第一接口处接收的第一数据包提供第一功能,其中多个处理单元中的每一个被配置为执行多种处理类型中的一种,其中至少多个处理单元中的一些被配置为执行不同类型的处理,其中对于多个处理单元中的每个,所述分配是取决于关于所述处理单元被配置为执行适合于执行相应的至少一个操作的一种处理类型的确定而执行的。

所述硬件模块的处理单元已被描述为在单个步骤中执行其操作类型。然而,本领域技术人员将认识到,该特征仅是优选特征,并且对于本发明的功能不是必需的或必不可少的。

根据一个方面,提供了一种方法,其包括:在编译器处接收位文件描述和程序,所述位文件描述包括对电路的一部分的路由的描述;以及通过使用所述位文件描述来编译所述程序,以输出用于所述程序的位文件。

所述方法可以包括使用所述位文件来配置所述电路的所述部分的至少一部分以执行与所述程序相关联的功能。

位文件描述可以包括关于在电路的所述部分的多个处理单元之间路由的信息。

位文件描述可包括对于所述多个处理单元中的至少一个的路由信息,该路由信息指示以下至少一项:可以向其输出一个或多个其他处理单元的数据,以及可以从中接收一个或多个其他处理单元的数据。

位文件描述可以包括指示两个或多个相应处理单元之间的一个或多个路由的路由信息。

位文件描述可以包括仅指示当编译程序以便为程序提供位文件时可由编译器使用的路由的信息。

位文件可以包括为各个处理单元指示以下的至少一项的信息:从中为相应处理单元的位文件描述中的所述一个或多个其他处理单元的一个或多个中提供输入;向其提供输出的为位文件描述中的所述一个或多个其他处理单元的一个或多个。

电路的一部分可以包括可配置硬件模块的至少一部分,该可配置硬件模块包括多个处理单元,每个处理单元与可在单个步骤中执行的预定操作类型相关联,所述多个处理单元中的至少一些是与不同的预定操作类型相关联,所述位文件描述包括关于在多个处理单元中的至少一些之间的路由的信息,其中,所述方法可以包括使用所述位文件来使硬件互联所述多个所述处理单元中的至少一些,以提供第一数据处理流水线,用于处理所述多个数据包中的一个或多个,以便对于所述多个数据包中的一个或多个数据包执行第一功能。

位文件描述可以是FPGA的至少一部分。

位文件描述可以是可动态编程的FPGA的一部分。

该程序可以包括eBPF程序和P4程序之一。

编译器和FPGA可以在网络接口设备中被提供。

根据另一方面,提供了一种设备,所述设备包括至少一个处理器和至少一个存储器,所述至少一个存储器包括用于一个或多个程序的计算机代码,所述至少一个存储器和所述计算机代码配置为用至少一个处理器,使得所述设备执行以下操作:接收位文件描述和程序,所述位文件描述包括对电路的一部分的路由的描述;以及使用所述位文件描述来编译所述程序,以输出用于所述程序的位文件。

所述至少一个存储器和所述计算机代码可以与所述至少一个处理器一起被配置为使得所述设备使用所述位文件来配置所述电路的所述部分的至少一部分以执行与所述程序相关联的功能。

位文件描述可以包括关于在电路的所述部分的多个处理单元之间的路由的信息。

位文件描述可以包括:对于所述多个处理单元中的至少一个,路由信息指示以下的至少一项:可以向其输出一个或多个其他处理单元的数据;以及可以从中接收一个或多个其他处理单元的数据。

位文件描述可以包括指示在两个或多个相应处理单元之间的一个或多个路由的路由信息。

位文件描述可以包括仅指示编译器在编译程序以提供用于程序的位文件时可用的路由的信息。

位文件可以包括用于指示相应处理单元的信息,该信息中的至少一项:从中为相应处理单元的位文件描述中的所述一个或多个其他处理单元提供输入;向其提供输出的位文件描述中所述一个或多个其他处理单元中的一个或多个。

电路的一部分可以包括可配置的硬件模块的至少一部分,所述可配置硬件模块包括多个处理单元,每个处理单元与可在单个步骤中执行的预定操作类型相关联,所述多个处理单元中的至少一些是与不同的预定操作类型相关联的,所述位文件描述包括有关多个处理单元中的至少一些处理单元之间的路由的信息,其中所述至少一个存储器和计算机代码被配置为与至少一个处理器一起,使得所述设备使用所述位文件来使硬件互联所述多个所述处理单元中的至少一些,以提供用于处理所述多个数据包中的一个或多个的第一数据处理流水线,以便对于所述多个数据包中的所述一个或多个数据包执行第一功能。

位文件描述可以是FPGA的至少一部分。

位文件描述可以是可动态编程的FPGA的一部分。

程序可以包括eBPF程序和P4程序之一。

根据另一方面,提供了一种网络接口设备,包括:第一接口,所述第一接口被配置为接收多个数据包;可配置的硬件模块,其包括多个处理单元,每个处理单元与可在单个步骤中执行的预定操作类型相关联;编译器,所述编译器被配置为接收位文件描述和程序,所述位文件描述包括对于所述可配置硬件模块的至少一部分的路由的描述,并使用所述位文件描述来编译所述程序以输出用于所述程序的位文件,其中所述硬件模块可使用所述位文件来配置以执行与所述程序相关联的第一功能。

网络接口设备可以用于将主机设备连接到网络接口。

所述多个处理单元中的至少一些可以与不同的预定操作类型相关联。

硬件模块可以被配置为互联所述多个所述处理单元中的至少一些,以提供用于处理所述多个数据包中的一个或多个的第一数据处理流水线,以对于所述多个数据包的所述一个或多个执行第一功能。

在一些实施例中,所述第一功能包括过滤功能。在一些实施例中,所述功能包括隧道、封装和路由功能中的至少一项。在一些实施例中,所述第一功能包括扩展的伯克利数据包过滤功能。

在一些实施例中,所述第一功能包括分布式拒绝服务清理操作。

在一些实施例中,所述第一功能包括防火墙操作。

在一些实施例中,所述第一接口被配置为从网络接收第一数据包。

在一些实施例中,所述第一接口被配置为从主机设备接收第一数据包。

在一些实施例中,所述多个处理单元中的至少一些处理单元中的两个或更多个被配置为并行地执行它们的相关联的至少一个预定操作。

在一些实施例中,所述多个处理单元中的至少一些处理单元中的两个或更多个被配置为根据硬件模块的公共时钟信号执行它们的相关联的预定操作类型。

在一些实施例中,所述多个处理单元中的所述至少一些处理单元的两个或更多个中的每个被配置为在由时钟信号限定的预定时间长度内执行其相关联的预定操作类型。

在一些实施例中,所述多个处理单元中的所述至少一些处理单元的两个或更多个被配置为:在预定时间长度的时间段内访问第一数据包;以及响应于预定时间长度的结束,将相应的至少一个操作的结果传送到下一个处理单元。

在一些实施例中,所述结果包括以下至少一个或多个:来自多个数据包中的一个或多个的至少一个值;映射状态的更新值;和元数据。

在一些实施例中,所述多个处理单元中的每一个包括被配置为执行与相应处理单元相关联的至少一个操作的专用集成电路。

在一些实施例中,每个处理单元包括现场可编程门阵列。在一些实施例中,每个处理单元包括任何其他类型的软逻辑。

在一些实施例中,所述多个处理单元中的至少一个包括数字电路和存储与由数字电路执行的处理有关的状态的存储器,其中数字电路被配置为:与存储器通信地执行与各个处理单元相关联的预定操作类型。

在一些实施例中,所述网络接口设备包括可被多个处理单元中的两个或多个访问的存储器,其所述该存储器被配置为存储与第一数据包相关联的状态,其中在由硬件模块执行第一功能期间,所述多个处理单元中的两个或更多个被配置为访问和修改状态。

在一些实施例中,所述多个处理单元中的所述至少一些处理单元中的第一个被配置为在由多个处理单元中的第二个对状态值进行访问期间停顿。

在一些实施例中,所述多个处理单元中的一个或多个是可独立配置的,以基于它们的相关联的预定操作类型来执行对于各个流水线特定的操作。

在一些实施例中,硬件模块被配置为接收指令,并且响应于所述指令,执行以下中的至少一项:互联所述多个所述处理单元中的至少一些,以提供用于处理一个或多个数据包的数据处理流水线;使所述多个处理单元中的一个或多个处理单元对于所述一个或多个数据包执行它们的相关联的预定操作类型;将所述多个处理单元中的一个或多个添加到数据处理流水线中;以及从数据处理流水线中移除所述多个处理单元中的一个或多个。

在一些实施例中,预定的操作包括以下的至少一项:从存储器加载第一数据包的至少一个值;将数据包的至少一个值存储在存储器中;以及在查询表中执行查询以确定对于数据包要执行的动作。

在一些实施例中,硬件模块被配置为接收指令,其中硬件模块可配置为响应于所述指令而互联所述多个所述处理单元中的至少一些处理单元,以提供用于处理所述多个数据包中的一个或多个数据包的数据处理流水线,其中所述指令包括通过第三处理流水线发送的数据包。

在一些实施例中,所述多个处理单元中的至少一些处理单元中的一个或多个可配置为:响应于所述指令,对于所述多个数据包中的一个或多个执行其相关联的预定操作类型的选定操作。

在一些实施例中,所述多个组件包括所述多个组件中的第二个组件,其被配置为在不同于硬件模块的电路中提供第一功能,其中所述网络接口设备包括至少一个控制器,其被配置为使传送通过处理流水线的数据包由所述多个组件中的第一个和所述多个组件中的第二个之一进行处理。

在一些实施例中,网络接口设备包括至少一个控制器,其被配置为发布指令以使硬件模块开始对于数据包执行第一功能,其中所述指令被配置为使得多个组件中的第一组件插入到处理流水线中。

在一些实施例中,网络接口设备包括至少一个控制器,其被配置为发布指令以使硬件模块开始对于数据包执行第一功能,其中所述指令包括通过处理流水线发送的、并被配置为使多个组件中的第一个组件激活的控制消息。

在一些实施例中,对于多个处理单元中的至少一些处理单元中的一个或多个,相关联的至少一个操作包括以下至少一项:从网络接口设备的存储器加载第一数据包的至少一个值;将第一数据包的至少一个值存储在网络接口设备的存储器中;并执行查询表查询,以确定对于所述第一数据包要执行的动作。

在一些实施例中,多个处理单元中的至少一些处理单元中的一个或多个被配置为将其相关联的至少一个预定的操作的至少一个结果传递给第一处理流水线中的下一个处理单元,所述下一个处理单元被配置为根据所述至少一个结果执行下一个预定的操作。

在一些实施例中,所述不同的预定操作类型中的每一个由不同的样板限定。

在一些实施例中,所述预定操作类型包括以下至少一项:访问数据包;访问被存储在硬件模块的存储器中的查找表;对从数据包加载的数据进行逻辑运算;并对从查找表加载的数据执行逻辑运算。

在一些实施例中,所述硬件模块包括路由硬件,其中硬件模块可配置为互联所述多个所述处理单元中的至少一些,以通过配置路由硬件在多个处理单元之间以第一数据处理流水线限定的特定顺序路由数据包,而提供第一数据处理流水线。

在一些实施例中,硬件模块可配置为互联所述多个所述处理单元中的至少一些,以提供第二数据处理流水线,用于处理所述多个数据包中的一个或多个以执行与第一功能不同的第二功能。

在一些实施例中,硬件模块可配置为在互联多个所述处理单元中的至少一些以提供第一数据处理流水线之后互联所述多个所述处理单元中的至少一些以提供第二数据处理流水线。

在一些实施例中,网络接口设备包括与硬件模块分开的另外的电路,该电路并且被配置为对所述多个数据包中的一个或多个执行第一功能。

在一些实施例中,所述另外的电路包括以下至少之一:现场可编程门阵列;以及多个中央处理单元。

在一些实施例中,所述网络接口设备包括至少一个控制器,其中所述另外的电路被配置为在对于要在硬件模块中执行的第一功能的编译过程期间相对于数据包执行第一功能,其中所述至少一个控制器被配置为响应于编译过程的完成,控制硬件模块开始对于数据包执行第一功能。

在一些实施例中,所述另外的电路包括多个中央处理单元。

在一些实施例中,所述至少一个控制器被配置为响应于关于要在硬件模块中执行的第一功能的编译过程完成的所述确定,控制所述另外的他电路停止对数据包执行第一功能。

在一些实施例中,所述网络接口设备包括至少一个控制器,其中所述硬件模块被配置为在对于要在另外的电路中执行的第一功能进行编译过程期间,对于数据包执行第一功能,其中所述至少一个控制器被配置为确定要在所述另外的电路中执行的所述第一功能的编译过程已经完成,并且响应于所述确定,控制所述另外的电路开始对于数据包执行所述第一功能。

在一些实施例中,所述另外的电路包括现场可编程门阵列。

在一些实施例中,所述至少一个控制器被配置为响应于所述确定,关于要在所述另外的电路中执行的所述第一功能的编译过程已经完成,控制硬件模块停止对于数据包执行第一功能。

在一些实施例中,所述网络接口设备包括至少一个控制器,其被配置为执行编译过程以提供要在硬件模块中执行的第一功能。

在一些实施例中,编译过程包括提供指令以在硬件模块中提供响应于控制消息的控制平面接口。

根据另一方面,提供了一种计算机实现的方法,所述方法包括:确定用于包括多个处理单元的可配置硬件模块的至少一部分的路由信息,每个处理单元是与在单个步骤中可执行的预定操作类型相关联,所述多个处理单元中的至少一些是与不同的预定操作类型相关联的,所述路由信息提供关于在至少多个处理单元之间的可用路由的信息。

所述可配置硬件模块可以包括基本静态的部分和基本动态的部分,所述确定包括确定用于所述基本动态的部分的路由信息。

用于所述基本动态的部分的所述路由信息可以包括确定在所述基本静态部分中由所述处理单元的一个或多个处理单元使用的、在所述基本动态部分中的路由。

所述确定可以包括分析所述可配置硬件模块的至少一部分的位文件描述,以确定所述路由信息。

根据另一方面,提供了一种包括程序指令的非瞬态计算机可读介质,所述程序指令用于:确定包括多个处理单元的可配置硬件模块的至少一部分的路由信息,每个处理单元与在单个步骤可执行的预定操作类型的相关联,所述多个处理单元中的至少一些与不同的预定操作类型相关联,所述路由信息提供关于在至少多个处理单元之间的可用路由的信息。

还可以提供包括适于执行所述方法的程序代码装置的计算机程序。可以通过载体介质来存储和/或以其他方式体现计算机程序。

在上面,已经描述了许多不同的实施例。应当理解,可以通过上述实施例中的任何两个或更多个的组合来提供其他实施例。

在下面的详细描述和所附权利要求中还描述了各种其他方面和进一步的实施例。

附图说明

现在将参考附图仅仅通过示例的方式描述一些实施例,其中:

图1示出了连接到网络的数据处理系统的示意图;

图2示出了数据处理系统的示意图,所述数据处理系统包括被配置为以用户模式在主机计算设备上运行的过滤操作应用程序;

图3示出了包括被配置为在主机计算设备上以内核模式运行的过滤操作的数据处理系统的示意图;

图4示出了包括对数据包执行功能的多个CPU的网络接口设备的示意图;

图5示出了包括现场可编程门阵列的网络接口设备的示意图,所述现场可编程门阵列运行用于对数据包执行功能的应用;

图6示出了包括用于对数据包执行功能的硬件模块的网络接口设备的示意图;

图7示出了网络接口设备的示意图,所述网络接口设备包括现场可编程门阵列和用于对数据包执行功能的至少一个处理单元;

图8示出了根据一些实施例的在网络接口设备中实现的方法;

图9示出了根据一些实施例的在网络接口设备中实现的方法;

图10示出了通过一系列程序来处理数据包的示例;

图11示出了由多个处理单元处理数据包的示例;

图12示出了由多个处理单元处理数据包的示例;

图13示出了用于处理数据包的处理阶段的流水线的示例;

图14示出了具有多个可插入组件的切片架构的示例;

图15示出了多个处理单元的处理的布置和顺序的示例表示;

图16示出了编译功能的示例方法。

图17示出了有状态处理单元的示例。

图18示出了无状态处理单元的示例。

图19示出了一些实施例的方法;

图20a和20b示出了FPGA中的切片之间的路由;和

图21示意性地示出了FGPA上的分区。

具体实施方案

以下的描述被提供来使本领域的任何技术人员能够制造和使用本发明,并且是在特定应用的上下文中被提供。对所公开的实施例的各种修改对于本领域技术人员将是显而易见的。

在不脱离本发明的精神和范围的情况下,本文中定义的一般原理可以应用于其他实施例和应用。因此,本发明无意限于所示的实施例,而是与本文公开的原理和特征以最广范围相一致的。

当数据要通过数据通道,例如网络,在两个数据处理系统之间传输时,每个数据处理系统都具有合适的网络接口以允许其在通道之间进行通信。网络通常基于以太网技术。通过网络进行通信的数据处理系统配备有网络接口,这些网络接口能够支持网络协议的物理和逻辑要求。网络接口的物理硬件组件称为网络接口设备或网络接口卡(NIC)。

大多数计算机系统都包含操作系统(OS),用户级应用程序通过该操作系统与网络进行通信。操作系统的一部分(称为内核)包括协议栈,用于在应用程序和特定于网络接口设备的设备驱动程序之间转换命令和数据。设备驱动程序可以直接控制网络接口设备。通过在操作系统内核中提供这些功能,可以从用户级应用程序中隐藏网络接口设备的复杂性和差异。网络硬件和其他系统资源(例如内存)可以由许多应用程序安全共享,并且可以保护系统免受错误或恶意应用程序的侵害。

在图1中示出了用于在网络上执行传输的典型数据处理系统100。数据处理系统100包括被耦合到网络接口设备102的主机计算设备101,所述网络接口设备102被设置为将主机接口到网络103。主机计算设备101包括支持一个或多个用户级应用程序105的操作系统104。主机计算设备101还可以包括网络协议栈(未示出)。例如,协议栈可以是应用程序的组件,与应用程序链接的库,或由操作系统提供的库。在一些实施例中,可以提供一个以上的协议栈。

网络协议栈可以是传输控制协议(TCP)栈。应用程序105可以通过打开套接字并从套接字读写数据和将数据读写到套接字,而发送和接收TCP/IP消息,并且操作系统104使消息跨网络传输。例如,应用程序可以调用系统调用(syscall),以通过套接字传输数据,然后通过操作系统104传输到网络103。这种用于传输消息的接口可以称为消息传递接口。

代替在主机101中实现栈,某些系统将协议栈卸载到网络接口设备102。例如,在该栈是TCP栈的情况下,网络接口设备102可以包括TCP卸载引擎(TOE),用于执行TCP协议处理。通过在网络接口设备102中而不是在主机计算设备101中执行协议处理,可以减少对主机系统101的处理器的需求。要在网络上传输的数据可以由应用程序105通过启用TOE的虚拟接口驱动程序发送,部分或全部绕过内核TCP/IP栈。因此,仅需要格式化沿该快速路径发送的数据即可满足TOE驱动程序的要求。

主机计算设备101可以包括一个或多个处理器和一个或多个存储器。在一些实施例中,主机计算设备101和网络接口设备102可以经由总线,例如,外围组件互联快速总线(PCIe总线)进行通信。

在数据处理系统的操作期间,可以将要传输到网络上的数据从主机计算设备101传输到网络接口设备102以进行传输。在一个示例中,数据包可以由主机处理器直接从主机传输到网络接口设备。主机可以向位于网络接口设备102上的一个或多个缓冲器106提供数据。网络接口设备102然后可以准备数据包并通过网络103发送它们。

替换地,可以将数据写入主机系统101中的缓冲器107。然后,网络接口设备可以从缓冲器107中检索数据,并通过网络103进行传输。

在这两种情况下,在通过网络传输之前,数据都会临时存储在一个或多个缓冲器中。通过网络发送的数据可以返回到主机(回溯)。

当通过网络103发送和接收数据包时,有许多处理任务可以表示为对要通过网络发送的数据包或对通过网络接收的数据包的操作。例如,可以对接收到的数据包执行过滤处理,以保护主机系统101免受分布式拒绝服务(DDOS)过滤。可以通过简单的包装检查或扩展的伯克利数据包过滤器(eBPF)来执行此类过滤过程。作为另一示例,可以对要在网络103上传输的数据包执行封装和转发。这些过程可能消耗许多CPU周期,并且对于常规的OS架构而言是繁重的。

参考图2,其示出了可以在主机系统220中实现过滤操作或其他数据包处理操作的一种方式。由主机系统220执行的过程被示为在用户空间或内核空间中执行。在内核空间中存在用于将在网络接口设备210处从网络接收的数据包传送到终端应用程序250的接收路径。该接收路径包括驱动器235、协议栈240、和套接字245。过滤操作230在用户空间中实现。由网络接口设备210提供给主机系统220的传入数据包绕过内核(发生协议处理的地方),并直接提供到过滤操作230。

过滤操作230配有虚拟接口(可以是以太网结构虚拟接口(EFVI)或数据平面开发套件(DPDK)或任何其他合适的接口),用于与主机系统220中的其他单元交换数据包。过滤操作230可以执行DDOS清理和/或其他形式的过滤。DDOS清理过程可能会在容易识别为DDOS候选对象的所有数据包上执行--例如,样本数据包、数据包副本和尚未分类的数据包。可以将未传递到过滤操作230的数据包直接从网络接口传递到驱动器235。操作230可以提供用于执行过滤的扩展的伯克利数据包过滤器(eBPF)。如果接收到的数据包通过由操作230提供的过滤,则操作230被配置为将数据包重新注入到内核中的接收路径中,以处理接收到的数据包。具体地,将数据包提供给驱动器235或栈240。然后,由协议栈240对数据包进行协议处理。然后,将数据包传递至与终止应用程序250相关联的套接字245。终止应用程序250发布recv()调用,以从相关联的套接字的缓冲器中检索数据包。

但是,这种方法存在几个问题。首先,过滤操作230在主机CPU上运行。为了运行过滤230,主机CPU必须以从网络接收数据包的速率来处理数据包。在从网络发送和接收数据的速率很高的情况下,这可能会占用大量主机CPU的处理资源。到过滤操作230的高数据流率可能导致其他有限资源的大量消耗,例如I/O带宽和内部存储器/高速缓存带宽。

为了将数据包重新注入到内核中,有必要向过滤操作230提供用于执行重新注入的特权API。重新注入过程可能很麻烦,需要注意数据包的排序。为了执行重新注入,操作230在许多情况下可能需要专用的CPU核。

为操作提供数据并重新注入的步骤要求将数据复制到内存中或从内存中复制出来。这种复制是系统的资源负担。

当提供其他类型的操作而不是对要通过网络发送/接收的数据进行过滤时,可能会出现类似的问题。

某些操作(例如DPDK类型的操作)可能需要将已处理的数据包转发回网络。

参考图3,其示出了另一种方法。相同的元件用相同的附图标记标注。在该示例中,称为快速数据路径(XDP)310的附加层被插入到内核中的发送和接收路径。XDP 310的扩展允许插入传输路径。XDP帮助程序允许发送数据包(作为接收操作的结果)。XDP 310以操作系统的驱动程序级别被插入,并允许程序在此级别执行,以便在从栈接收的数据包被协议栈240处理之前,对从网络接收的数据包执行操作。XDP 310也允许程序在此级别执行,以便对要通过网络发送的数据包执行操作。因此,eBPF程序和其他程序可以在发送和接收路径中运行。

如图3所示,可以将过滤操作320从用户空间插入XDP以形成作为XDP 310的一部分的程序330。操作320通过使用要在数据接收路径上执行的XDP控制平面被插入,以提供程序330,程序330对接收路径上的数据包执行过滤操作(例如,DDOS清理)。这样的程序330可以是eBPF程序。

程序330被显示为插入到内核中且处于驱动程序235和协议栈240之间。但是,在其他示例中,程序330可以插入内核中接收路径中的其他位置。程序330可以是接收数据包的单独控制路径的一部分。程序330可以由应用程序通过为该应用程序提供套接字245的应用程序编程接口(API)的扩展来提供。

程序330可以附加地或替代地对通过传输路径发送的数据执行一个或多个操作。然后,XDP 310调用驱动器235的发送功能,以经由网络接口设备210在网络上发送数据。在这种情况下,程序330可以对于要通过网络发送的数据包提供负载平衡或路由操作。程序330可以对于要通过网络发送的数据包提供分段重新封装和转发操作。

程序330可以用于防火墙和虚拟交换或其他不需要协议终止或应用程序处理的操作。

以这种方式使用XDP 310的一个优点是,程序330可以直接访问由驱动程序处理的内存缓冲器,而无需中间副本。

为了以这种方式在内核中插入要运行的程序330,必须确保程序330是安全的。如果将不安全的程序插入内核,则会带来某些风险,例如:可能导致内核崩溃的无限循环、缓冲器溢出、未初始化的变量、编译器错误、由大型程序导致的性能问题。

为了确保程序330在以这种方式插入XDP 310之前是安全的,可以在主机系统220上运行验证程序,以验证程序330的安全性。可以将验证程序配置为确保不存在循环。如果不引起循环,则可以允许向后跳转操作。验证程序可以被配置为确保程序330具有不超过预定数量(例如,4000)的指令。验证程序可以通过遍历程序330的数据路径来执行对寄存器使用的有效性的检查。如果存在太多可能的路径,则程序330将被拒绝,因为其在内核模式下运行是不安全的。例如,如果存在多于1000个分支,则可以拒绝程序330。

本领域技术人员将理解,XDP是可以在内核中安装安全程序330的一个示例,并且还有其他方法可以实现这一点。

如果例如可以以在内核中执行代码所需的安全(或沙盒)语言来表示操作,则上面关于图3讨论的方法可以与上面关于图2讨论的方法一样高效。eBPF语言可以在x86处理器上高效执行,并且JIT(Just in Time)编译技术使eBPF程序可以被编译为本地机器代码。该语言被设计为安全的,例如状态被限于仅仅映射作为共享数据结构(例如哈希表)的结构。允许使用有限的循环,代替允许一个eBPF程序对另一个程序进行尾部调用。状态空间受到限制。

然而,在一些实施方案中,利用这种方法,主机系统220的资源(例如,I/O带宽和内部存储器/高速缓存带宽、主机CPU)可能会大量消耗。在数据包上的操作仍旧由主机CPU来执行,需要主机CPU以发送/接收数据的速率执行此类操作。

另一个建议是在网络接口设备中而不是在主机系统中执行上述操作。除了消耗的I/O带宽、内存和缓存带宽之外,这样做可能会释放主机CPU在执行操作时使用的CPU周期。将处理操作的执行从主机移到网络接口设备的硬件可能会带来一些挑战。

在网络硬件中实现处理的一种提议是在网络接口设备中提供包括多个CPU的网络处理单元(NPU),其专门用于数据包处理和/或操纵操作。

参考图4,其示出了网络接口设备400的示例,网络接口设备400包括中央处理单元(CPU)的阵列410,例如,CPU 420。CPU被配置为执行功能,例如过滤从网络发送和接收的数据包。CPU阵列410中的每个CPU可以是NPU。尽管在图4中未示出,但是CPU可以附加地或可替代地被配置为执行操作,诸如对从主机接收的数据包进行负载平衡以通过网络进行传输。这些CPU专用于此类数据包处理/操纵操作。CPU执行对于这种数据包处理/操纵操作而优化的指令集。

网络接口设备400另外包括在CPU的阵列410之间共享并且可被CPU的阵列410访问的存储器(未示出)。

网络接口设备400包括网络介质访问控制(MAC)层430,用于使网络接口设备400与网络接口。MAC层430被配置为从网络上接收数据包并在网络上发送数据包。

在网络接口设备400上接收的数据包上的操作在CPU上并行化。如图所示,当数据流在MAC层430处被接收时,该数据流被传递到扩展功能440,扩展功能440被配置为从该数据流中提取数据包并将其分布在NPU 410中的多个CPU上,以使CPU执行处理,例如过滤这些数据包。扩展功能440可以解析接收到的数据包,以便识别它们所属的数据流。扩展功能440为每个数据包生成其在其所属的数据流中的相应数据包的位置的指示。指示可以例如是标签。扩展功能440将相应的指示添加到每个数据包的相关联的元数据。每个数据包的相关联的元数据可以被附加到数据包。相关联的元数据可以作为边带控制信息被传递到扩展功能440。根据数据包所属的流来添加指示,使得可以重构用于任何特定流的数据包的顺序。

在由多个CPU 410进行编程之后,然后将数据包传递到重新排序功能450,重新排序功能450将数据流的数据包重新排序为它们的正确顺序,然后再将它们传递到主机接口层460。重新排序功能450可以通过比较在数据流的数据包内的指示(例如,标签)以对数据流的数据包进行重新排序,以重构数据包的顺序。然后,重新排序的数据包传递通过主机接口460,并被传送到主机系统220。

尽管图4说明了仅对从网络接收的数据包进行操作的CPU阵列410,但是可以对从主机接收的数据包执行类似的原理(包括扩展和重新排序)以通过网络进行传输,而CPU阵列410对从主机接收到的这些数据包执行功能(例如,负载平衡)。

由CPU执行的程序可以是将在以上关于图3描述的示例中在主机CPU上执行的程序的编译或转码版本。换句话说,将在主机CPU上执行以进行操作的指令集被转换为在网络接口400中的专用CPU阵列的每个CPU上执行。

为了在CPU上实现并行化,在多个CPU上并行编译并执行程序的多个实例。程序的每个实例可以负责处理在网络接口设备处接收到的一组不同的数据包。但是,当提供关于该数据包的程序功能时,每个单独的数据包都由单个CPU处理。并行程序的执行的总体效果可以与主机CPU上的单个程序(例如,程序330)的执行效果相同。

专用CPU之一可以每秒处理5000万个数据包。该运行速度可能低于主机CPU的运行速度。因此,并行化可用于实现与在主机CPU上执行等效程序所实现的性能相同的性能。为了执行并行化,数据包在CPU上分布,然后在由CPU处理后重新排序。与重新排序步骤450一起按顺序处理每个流的数据包的要求可能会导致瓶颈,增加内存资源开销并可能限制设备的可用吞吐量。此要求和重新排序步骤450可能会增加设备的抖动,因为处理吞吐量可能会根据网络流量的内容和可应用并行度的程度而波动。

使用这种专用CPU的优势之一可能是编译时间短。例如,有可能在不到1秒的时间内编译过滤应用程序以在这样的CPU上运行。

当此方法扩展到更高的链接速度时,使用CPU阵列可能会出现问题。在不久的将来,可能需要主机网络接口才能达到每秒万亿比特的速度。当将这样的CPU阵列410扩展到这些更高的速度时,所需的功率量可能变得成问题。

另一建议是在网络接口设备中包括现场可编程门阵列(FPGA),并使用FPGA对从网络接收的数据包执行操作。

参考图5,其示出了在网络接口设备500中使用具有FPGA应用515的FPGA 510的示例,用于对在网络接口设备500处接收到的数据包执行操作。与图4中的元件相同的元件用相同的附图标记指代。

尽管图5示出了仅对从网络接收到的数据包进行操作的FPGA应用515,但是这种FPGA应用515可以被使用于对从主机接收到的、用于通过网络传输或返回到主机或系统上的另一个网络接口的这些数据包执行功能(例如,负载平衡和/或防火墙功能)。

可以通过编译以通用系统级语言,例如C或C++或Scala,编写程序来在FPGA 510上运行来提供FPGA应用程序515。

该FPGA 510可以具有网络接口功能和FPGA功能。FPGA功能可以提供FPGA应用515,其可以根据网络接口设备用户的需要被编程到FPGA 510中。FPGA应用515可以例如提供对从网络230到主机的接收路径上的消息的过滤。FPGA应用515可以提供防火墙。

FPGA 510可以被编程为提供FPGA应用515。一些网络接口设备功能可以被实现为FPGA 510内的“硬”逻辑。例如,硬逻辑可以是专用集成电路(ASIC)门。FPGA应用515可以被实现为“软”逻辑。软逻辑可以通过对FPGA LUT(查找表)进行编程来提供。与软逻辑相比,硬逻辑可能能够以更高的速率被计时。

网络接口设备500包括被配置为与主机发送和接收数据的主机接口505。网络接口设备520包括被配置为与网络发送和接收数据的网络介质访问控制(MAC)接口520。

当在MAC接口520从网络接收到数据包时,数据包将传递到FPGA应用程序515,FPGA应用程序515被配置为对数据包执行诸如过滤之类的功能。数据包(如果它通过任何过滤)然后被传递到主机接口505,再从这被传递到主机。替代地,数据包FPGA应用515可以确定丢弃或重新发送数据包。

使用FPGA来对数据包执行功能的这种方法的一个问题是所需的相对较长的编译时间。FPGA由许多逻辑元件(例如逻辑单元)组成,这些逻辑元件分别表示原始逻辑运算,例如AND、OR、NOT等。这些逻辑元件被布置成具有可编程互联的矩阵。为了提供功能,这些逻辑单元可能需要一起操作以实现电路定义和同步时钟时序约束。放置每个逻辑单元和在单元之间进行布线,在算法上可能是一项艰巨的挑战。在使用率较低的FPGA上进行编译时,编译时间可能少于十分钟。但是,随着FPGA器件越来越被各种应用所利用,布局和布线的挑战可能会越来越大,从而将给定功能编译到FPGA上的时间就会增加。因此,把额外的逻辑添加到已经消耗掉大部分路由资源的FPGA可能要花费数小时的编译时间。

一种方法是使用特定的处理原语(例如解析、匹配和动作原语)来设计硬件。这些可以用来构造其中所有数据包都经历三个过程中的每一个过程的处理流水线。首先,解析数据包以构造协议标头的元数据表示。其次,数据包与表中保存的规则灵活匹配。最后,当找到匹配项时,将根据在匹配操作中选择的表中的条目来操作数据包。

为了使用解析/匹配/动作模型来实现功能,可以使用P4编程语言(或类似语言)。P4编程语言是与目标无关的,这意味着用P4编写的程序可被编译成在不同类型的硬件(例如CPU、FPGA、ASIC、NPU等)上运行。每种不同类型的目标都提供有自己的编译器将P4源代码映射为适当的目标开关模型。

P4可以用来提供一种编程模型,该编程模型允许高级程序表达用于数据包处理流水线的数据包处理操作。这种方法适用于以声明式样式自然表达自己的操作。在P4语言中,程序员将解析、匹配和操作阶段表示为要对接收到的数据包执行的操作。这些操作汇总在一起,以使专用硬件高效执行。但是,这种声明式样式可能不适用于表达命令式性质的程序,例如eBPF程序。

在网络接口设备中,可能需要一系列eBPF程序才能串行执行。在这种情况下,生成了一链的eBPF程序,一个程序调用另一个程序。每个程序都可以修改状态,并且输出就像整个程序链已按顺序执行一样。对于编译器而言,收集所有的解析、匹配和操作步骤可能是具有挑战性的。然而,即使已经安装了eBPF程序链,还可能有必要安装、删除或修改链,这可能会带来进一步的挑战。

为了提供这种需要重复执行的程序的示例,请参考图10,图10示出了被配置为处理数据包的程序序列e

对于编译器来说,将n个此类程序中的每个程序的效果组合到单个P4程序中可能很复杂。另外,某些编程模型(例如XDP)可能需要响应于变化的环境,在程序序列中的任何一点快速地动态插入和删除程序。

根据本申请的一些实施例,提供了一种包括多个处理单元的网络接口设备。每个处理单元被配置为在硬件中执行至少一个预定的操作。每个处理单元包括存储其自己的本地状态的存储器。每个处理单元包括修改该状态的数字电路。该数字电路可以是专用集成电路。每个处理单元被配置为运行包括可配置参数的程序,以执行相应的多个操作。每个处理单元可以是原子。原子是通过预定的样板的特定编程和路由定义的。这定义了其特定的操作行为和在所连接的多个处理单元提供的流程中的逻辑位置。在说明书中使用术语“原子”的情况下,这可以理解为是指被配置为在单个步骤中执行其操作的数据处理单元。换句话说,原子将其操作作为原子操作执行。

原子可以被视为硬件结构的集合,可以将其配置为重复执行一系列计算之一,获取一个或多个输入并生成一个或多个输出。

原子是由硬件提供的。原子可以由编译器进行配置。原子可以被配置为执行计算。

在编译期间,多个处理单元中的至少一些被布置为执行操作,使得对于由多个处理单元中的至少一些在网络接口设备处接收到的数据包执行功能。多个处理单元中的至少一些处理单元中的每一个被配置为执行其各自的至少一个预定的操作,以便相对于数据包执行功能。换句话说,所连接的处理单元被配置为执行的操作是对于所接收到的数据包执行的。所述操作是由多个处理单元中的至少一些顺序地执行的。集体地,多个操作中的每一个的执行提供功能,例如,对于所接收到的数据包进行过滤。

通过布置每个原子以执行它们各自的至少一个预定的操作以便执行功能,与上面相对于图5所描述的FPGA应用示例相比,可以减少编译时间。而且,对于使用专门用于在硬件中执行特定操作的处理单元执行功能,如上面图4所讨论,相对于使用网络接口设备中的CPU执行软件来为每个数据包执行功能,可以提高执行功能的速度。

参考图6,其示出了根据本申请的实施例的网络接口设备600的示例。网络接口设备包括被配置为执行在网络接口设备600的接口处接收的数据包的处理的硬件模块610。尽管图6示出了硬件模块610在接收路径上对数据包执行功能(例如过滤),但硬件模块610还可以用来对于从主机接收的的传输路径上的数据包执行功能(例如,负载平衡或防火墙)。

网络接口设备600包括用于与主机发送和接收数据包的主机接口620以及用于与网络发送和接收数据包的网络MAC接口630。

网络接口设备600包括硬件模块610,其包括多个处理单元640a、640b、640c、640d。每个处理单元可以是原子处理单元。在本说明书中使用术语原子来指代处理单元。每个处理单元被配置为在硬件中执行至少一个操作。每个处理单元包括被配置为执行至少一个操作的数字电路645。数字电路645可以是专用集成电路。每个处理单元还包括存储状态信息的存储器650。当执行相应的多个操作时,数字电路645更新状态信息。除了本地存储器之外,每个处理单元还可以访问共享存储器660,该共享存储器660还可以存储可被多个处理单元中的每个处理单元访问的状态信息。

处理单元中共享存储器660中的状态信息和/或存储器650中的状态信息可以包括以下至少一项:在处理单元之间传递的元数据、临时变量、数据包的内容、一个或多个共享映射表的内容。

多个处理单元合在一起能够提供对于在网络接口设备600处接收到的数据包要执行的功能。编译器输出指令以将硬件模块610配置为通过布置多个处理单元中的至少一些处理单元对于每个进入的数据包执行它们各自的至少一个预定的操作,对于传入的数据包执行功能。这可以通过将至少一些处理单元640a、640b、640c、640d链接(即连接)在一起来实现,使得每个连接的处理单元将对于每个进入的数据包执行它们各自的至少一个操作。每个处理单元以特定顺序执行它们各自的至少一个操作,以执行功能。该顺序可以使得两个或更多个处理单元彼此并行地(即,同时地)执行。例如,一个处理单元可以在一段时间内(由硬件模块610的周期性信号(例如,时钟信号)限定)从数据包中读取,在该时间段中,第二处理单元也从同一数据包中的不同位置读取数据。

在一些实施例中,数据包按顺序传递到由处理单元表示的每个阶段。在这种情况下,每个处理单元在将数据包传递到下一处理单元以执行其处理之前完成其处理。

在图6所示的示例中,处理单元640a、640b和640d在编译时连接在一起,使得它们中的每一个都执行它们各自的至少一个操作,从而执行一个功能,例如对于接收到的数据包进行过滤。处理单元640a、640b、640d形成用于处理数据包的流水线。数据包可以分阶段地沿着该流水线移动,每个阶段具有相等的时间段。时间段可以根据周期信号或节拍来限定。时间段可以由时钟信号限定。时钟的几个周期可以为流水线的每个阶段限定一个时间周期。每次重复时间段结束时,数据包都会沿流水线中的一个阶段移动。所述时间段可以是固定的间隔。可替代地,流水线中的阶段的每个时间段可以花费可变的时间量。当上一个处理阶段完成操作时,可能会生成指示流水线中下一个阶段的信号,这可能需要花费可变的时间。通过将信号延迟一些预定的时间量,可以在流水线的任何阶段引入停顿。

每个处理单元640a、640b、640d可以被配置为访问共享存储器660,作为它们各自至少一项操作的一部分。处理单元640a、640b、640d中的每一个处理单元可以被配置为在彼此之间传递元数据,作为它们各自的至少一个操作的一部分。处理单元640a、640b、640d中的每一个处理单元可以被配置为访问从网络接收的数据包,作为它们各自的至少一个操作的一部分。

在该示例中,处理单元640c不用于执行接收到的数据包的处理以提供功能,而是从流水线中省略。

可以将在网络MAC层630处接收到的数据包传递到硬件模块610进行处理。尽管在图6中未示出,但是由硬件模块610执行的处理可以是较大的处理流水线的一部分,该较大的处理流水线相对于数据包提供了除由硬件模块610提供的功能之外的附加功能。这是参照图14显示的,并将在下面更详细地说明。

第一处理单元640a被配置为对于数据包执行第一至少一个操作。这个第一至少一个操作可以包括以下至少一项:从数据包读取、读取和写入存储器660中的共享状态、和/或执行对表的查找以确定动作。然后,第一处理单元640a被配置为从其至少一个操作产生结果。结果可以是元数据的形式。结果可以包括对数据包的修改。结果可以包括对存储器660中的共享状态的修改。第二处理单元640b被配置为根据第一处理单元640a执行的操作的结果,相对于第一数据包执行其至少一个操作。第二处理单元640b从其至少一个操作产生结果,并将结果传递给第三处理单元640d,第三处理单元640d被配置为相对于第一数据包执行其至少一个操作。第一处理单元640a,第二处理单元640b和第三处理单元640d一起被配置为提供关于数据包的功能。数据包然后可以被传递到主机接口620,从那里它被传递到主机系统。

因此,可以看出,所连接的处理单元形成用于处理在网络接口设备处接收到的数据包的流水线。该流水线可以提供eBPF程序的处理。流水线可以提供多个eBPF程序的处理。流水线可以提供按顺序执行的多个模块的处理。

可以通过对硬件模块610的预合成的互联结构的路由功能进行编程来执行硬件模块610中的处理单元的连接。该互联结构提供硬件模块610的各个处理单元之间的连接。对互联构造可以根据构造支持的拓扑进行编程。可能的示例拓扑在下面参考图15进行讨论。

硬件模块610支持至少一个总线接口。至少一个总线接口在硬件模块610处(例如,从主机或网络)接收数据包。至少一个总线接口从硬件模块610输出数据包(例如,到主机或网络)。至少一个总线接口在硬件模块610处接收控制消息。控制消息可以用于配置硬件模块610。

相对于图5所示的FPGA应用515,图6所示的示例具有减少的编译时间的优点。例如,图6的硬件模块610可能需要少于10秒来编译过滤功能。与图4所示的CPU阵列的示例相比,图6所示的示例具有改进的处理速度的优势。

可以通过将通用程序(或多个程序)映射到预合成的数据路径来使应用程序在这样的硬件模块610中执行。编译器通过链接任意数量的处理阶段实例来构建数据路径,其中每个实例都是由预先合成的处理阶段原子之一构建的。

每个原子都是由电路构建的。可以使用RTL(寄存器传送语言)或高级语言来定义每个电路。每个电路都使用编译器或工具链进行综合。原子可以被合成为硬逻辑,因此可以在网络接口设备的硬件模块中用作硬(ASIC)资源。原子可以被合成为软逻辑。可以向软逻辑中的原子提供约束,这些约束分配和维护合成逻辑在物理设备上的位置和路由信息。可以使用指定原子行为的可配置参数来设计原子。每个参数可以是变量,或者甚至是操作序列(微程序),其可以指定在处理流水线的时钟周期期间由处理单元执行的至少一个操作。实现原子的逻辑可以同步或异步地计时。

原子的处理流水线本身可以被配置为根据周期信号进行操作。在这种情况下,每个数据包和元数据都响应信号的每次出现而沿流水线移动一级。处理流水线可以按异步方式操作。在这种情况下,流水线中较高水平的背压将使得每个下游阶段仅在已将上游阶段的数据提供给下游阶段时才开始处理。

当编译要由多个这样的原子执行的功能时,计算机代码指令序列会分成多个操作,每个操作都映射到单个原子。每个操作可以代表计算机代码指令中的反汇编指令的一个单行。每个操作都分配给其中一个原子要执行的原子之一。在计算机代码指令中,每个表达式可能有一个原子。每个原子与一种操作类型相关联,并根据其相关的操作类型选择执行计算机代码指令中的至少一项操作。例如,可以将原子预先配置为从数据包执行加载操作。因此,这样的原子被指派来执行表示来自计算机代码中的数据包的加载操作的指令。

在计算机代码指令中,每行可以选择一个原子。因此,当在包含此类原子的硬件模块中实现功能时,可能有100个此类原子,每个原子执行其各自的操作以便对于该数据包执行该功能。

每个原子可以根据确定其相关联的操作类型的一组处理阶段样板中的一个样板来构造。编译过程被配置为基于其关联类型生成指令以控制每个原子以执行特定的至少一个操作。例如,如果一个原子被预先配置为执行数据包访问操作,则编译过程可以为该原子分配一个操作,以便从数据包的标头中加载某些信息(例如,数据包的源ID)。编译过程被配置为向硬件模块发送指令,其中原子被配置为执行由编译过程分配给它们的操作。

指定原子行为的处理阶段样板是逻辑阶段样板(例如,提供对寄存器、暂存器和栈以及分支的操作)、数据包访问状态样板(例如,提供数据包数据加载和/或数据包数据存储)、和映射表访问阶段样板(例如,映射表查找算法、映射表大小)。

数据包访问阶段可以包括以下至少一项:从数据包中读取字节序列、用数据包中的不同字节序列替换一个字节序列、将字节插入到数据包中、以及删除数据包中的字节。

映射表访问阶段可用于访问不同类型的映射表(例如查找表),包括直接索引阵列和关联阵列。映射表访问阶段可以包括以下至少一项:从位置读取值、将值写入位置、将映射表中某个位置的值替换为其他值。映射表访问阶段可以包括比较操作,在该比较操作中,从映射表中的位置读取一个值并将其与不同的值进行比较。如果从位置读取的值小于不同的值,则可以执行第一动作(例如不执行任何操作、将位置处的值交换为不同的值、或者将这些值相加)。否则,可能会执行第二项操作(例如,不执行任何操作、交换或添加值)。在任何一种情况下,可以将从位置读取的值提供给下一个处理阶段。

每个映射表访问阶段都可以在有状态处理单元中实现。参考图17,其示出了可以被包括在被配置为执行映射表访问阶段的处理的原子中的电路1700的示例。电路1700可以包括哈希函数1710,其被配置为执行用作查找表的输入的输入值的散列。电路1700包括被配置为存储与原子的操作相关联的状态的存储器1720。电路1700包括被配置为执行操作的算术逻辑单元1730。

逻辑阶段可以对先前阶段提供的值执行计算。被配置为实现逻辑阶段的处理单元可以是无状态处理单元。每个无状态处理单元都可以执行简单的算术运算。每个处理单元可以执行例如8位操作。

每个逻辑阶段可以在无状态处理单元中实现。参考图18,其示出了电路1800的示例,电路1800可以被包括在被配置为执行逻辑阶段的处理的原子中。电路1800包括算术逻辑单元(ALU)和多路复用器的阵列。ALU和多路复用器分层排列,由ALU进行的一层处理的输出被多路复用器使用,以提供输入到下一层ALU。

在硬件模块中实现的阶段流水线可以包括第一个数据包访问阶段(pkt0),然后是第一个逻辑阶段(logic0),然后是第一个映射访问阶段(map0),然后是第二个逻辑阶段(logic1),然后是第二个数据包访问阶段(pkt1),依此类推。因此,它可以采取以下形式:

pkt0->logic0->map0->logic1->pktl

在一些示例中,阶段pkt0从数据包中提取所需的信息。阶段pkt0将该信息传递给logic0。logic0确定该数据包是否是有效的IP数据包。在某些情况下,logic0形成映射请求并将映射请求发送到map0,后者执行映射操作。阶段map0可以执行对查询表的更新。然后,阶段logic1从映射操作中收集结果,并决定是否丢弃数据包。

在某些情况下,映射请求被禁用,以涵盖不应对此数据包执行映射操作的情况。在不执行映射操作的情况下,logic0根据数据包是否是有效的IP数据包来向logic1指示是否应当丢弃该数据包。在某些示例中,查找表包含256个条目,其中每个条目均为8位值。

所描述的该示例仅包括五个阶段。然而,如上所述,可以使用更多。此外,不必全部按顺序进行操作,但是关于同一数据包的某些操作可以由不同的处理单元同时进行。

图6所示的硬件模块610示出了原子的单个流水线,用于执行有关数据包的功能。然而,硬件模块610可以包括用于处理数据包的多个流水线。多个流水线中的每一个可以对于数据包执行不同的功能。硬件模块610可被配置为互联硬件模块610的第一组原子以形成第一数据处理流水线。硬件模块610也可被配置为互联硬件模块610的第二组原子,以形成第二数据处理流水线。

为了编译要在包括多个处理单元的硬件模块中实现的功能,可以执行从一系列计算机代码开始的一系列步骤。可以在主机设备或网络接口设备上的处理器上运行的编译器可以访问反汇编的计算机代码序列。

首先,编译器被配置为将计算机代码指令的序列划分为单独的阶段。每个阶段可以包括根据上述处理阶段样板之一的操作。例如,一个阶段可以提供对数据包的读取。一个阶段可以提供映射表数据的更新。另一个阶段可以做出通过放弃的决定。编译器把由代码表示的多个操作中的每个操作分配给多个阶段的每个阶段。

其次,编译器被配置为分配由代码确定的要由不同处理单元执行的每个处理阶段。这意味着处理阶段的各个至少一个操作中的每个操作由不同的处理阶段执行。然后可以使用编译器的输出来使处理单元以特定顺序执行每个阶段的操作,以执行功能。

编译器的输出包括生成的指令,这些指令用于使硬件模块的处理单元实行与每个处理阶段相关的操作。

编译器的输出还可以用于在硬件模块中生成逻辑,以响应用于配置硬件模块610的控制消息。下面参照图14更详细地描述这样的控制消息。

用于编译将在网络接口设备600上执行的功能的编译过程,可以根据确定用于提供功能的过程对于在主机设备的内核中的执行是安全的而被执行。程序的安全性的确定可以由上面参照图3描述的合适的验证器来执行。一旦确定了该过程对于在内核中执行是安全的,就可以对该过程进行编译以在网络接口设备中执行。

参考图15,图上示出了执行其各自的至少一个操作以便对于数据包执行功能的多个处理单元中的至少一些处理单元的表示。这样的表示可以由编译器生成并用于配置硬件模块以执行该功能。所述表示指示可以执行操作的顺序以及一些处理单元如何并行执行其操作。

表示1500是具有行和列的列表的形式。所述列表的某些条目显示原子,例如原子1510a,被配置为执行它们各自的操作。处理单元所属的行指示该处理单元对于特定数据包执行的操作的时序。每一行可对应于由时钟信号的一个或多个周期表示的单个时间段。属于同一行的处理单元并行执行其操作。

逻辑阶段的输入在第0行中提供,并且计算向前流到后面的行。默认情况下,原子在与原子相同的列中但在上一行中接收该原子的处理结果。例如,原子1510b接收来自原子1510a进行处理的结果,并根据这些结果执行其各自的处理。

当使用本地路由资源时,原子还可以访问前一行原子的输出,该行的列号相差不超过两个。例如,原子1510d可以接收来自原子1510c执行的处理的结果。

当使用全局路由资源时,原子还可以访问前两行和任何列中的原子的输出。这可以通过使用全局路由资源来执行。例如,原子1510f可以接收来自原子1510e执行的处理的结果。

关于原子之间的路由的这些约束作为示例给出,并且可以应用其他约束。施加更多限制性的约束可以使原子之间的信息路由更加容易。施加较少限制的约束可以使调度更加容易。如果给定类型(例如,映射、逻辑或数据包访问)的原子数耗尽或无法在原子之间进行路由,则把功能编译到硬件模块将失败。

特定约束由硬件模块支持的互联结构支持的拓扑结构确定。对互联结构进行编程,以使硬件模块的原子以特定顺序执行其操作,并在约束内彼此之间提供数据。图15示出了可以如何对互联结构进行编程的一个特定示例。

在将FPGA应用515合成到FPGA(如图5所示)上的过程中,使用了布局和布线算法。但是,在这种情况下,解决方案空间受到限制,因此该算法的执行时间有限。

在处理速度或效率与编译时间之间需要权衡。根据本申请的实施例,可能期望首先在至少一个处理单元(其可以是如上参照图6所述的CPU或原子)上编译并运行程序,以对于接收到的数据包提供功能。然后,所述至少一个处理单元可以在第一时间段内相对于接收到的数据包执行功能。在网络接口设备的操作期间,执行功能。第二至少一个处理单元(其可以是如以上关于图6所述的FPGA应用或样板类型的处理单元)可以被配置为对于数据包执行功能。然后可以将该功能从第一至少一个处理单元迁移到第二至少一个处理单元,使得第二至少一个处理单元随后执行该功能,以便随后在网络接口设备处接收数据包。分组。因此,第二至少一个处理单元的较慢的编译时间不会阻止网络接口设备在为第二至少一个处理单元编译功能之前对于数据包执行该功能,因为第一至少一个处理单元可以被更快地编译,并且可以被用于对于数据包执行功能,而用于第二至少一个处理单元的功能被编译。由于第二至少一个处理单元通常具有更快的处理时间,因此在编译时迁移到第二至少一个处理单元允许更快地处理在网络接口设备处接收到的数据包。

根据本申请的实施例,编译过程可以被配置为在数据处理系统的至少一个处理器上运行,其中,至少一个处理器被配置为发送用于第一至少一个处理单元和第二至少一个处理单元的指令,在适当的时间对数据包执行至少一种功能。该至少一个处理器可以包括主机CPU。该至少一个处理器可以包括网络接口设备上的控制处理器。该至少一个处理器可以包括主机系统上的一个或多个处理器和网络接口设备上的一个或多个处理器的组合。

因此,至少一个处理器被配置为执行第一编译过程以编译将由网络接口设备的第一至少一个处理单元执行的功能。至少一个处理单元还被配置为执行第二编译过程,以编译将由网络接口设备的第二至少一个处理单元执行的功能。在第二编译过程完成之前,至少一个处理单元指示第一至少一个处理单元对于从网络接收的数据包执行功能。随后,在第二编译过程完成之后,至少一个处理单元指示第二至少一个处理单元开始对于从网络接收的数据包执行功能。

执行这些步骤使得网络接口设备能够在等待第二编译过程完成的同时使用第一至少一个处理单元(其可能具有较短的编译时间但是处理较慢和/或较低效率)来执行功能。当第二编译过程完成时,网络接口设备,除了或代替所述第一至少一个处理单元,随后可以使用第二至少一个处理单元(其可能具有更长的编译时间,但是处理更快和/或更有效)来执行功能。

参考图7,其示出了根据本申请的实施例的示例网络接口设备700。与先前附图中所示的参考元件相同的参考元件用相同的参考数字表示。

网络接口设备包括第一至少一个处理单元710。第一至少一个处理单元710可以包括图6所示包括多个处理单元的硬件模块610。第一至少一个处理单元710可以包括一个或多个CPU,如图4所示。

功能被编译为在第一至少一个处理单元710上运行,以便在第一时间段内,由第一至少一个处理单元710相对于从网络接收的数据包执行该功能。在对于第二至少一个处理单元的第二编译过程完成之前,第一至少一个处理单元710由至少一个处理器指示以对于从网络接收的数据包执行功能。

网络接口设备包括第二至少一个处理单元720。第二至少一个处理单元720可以包括具有FPGA应用的FPGA(例如图5所示),或者可以包括图6所示的硬件模块610,其包括多个处理单元。

在第一时间段期间,执行第二编译过程以编译用于在第二至少一个处理单元上运行的功能。即,网络接口设备被配置为动态地编译FPGA应用515。

在第一时间段之后(即,在完成第二编译过程之后),第二至少一个处理单元720被配置为开始对于从网络接收的数据包执行功能。

在第一时间段之后,第一至少一个处理单元710可以停止关于从网络接收的数据包执行功能。在一些实施例中,第一至少一个处理单元710可以部分地停止对于数据包执行功能。例如,如果第一至少一个处理单元包括多个CPU,则在第一时间段之后,一个或多个CPU可以停止执行关于从网络接收的数据包的处理,而多个CPU中的其余的CPU继续执行该处理。

第一至少一个处理单元710可以被配置为对于第一数据流的数据包执行功能。当第二编译过程完成时,第二至少一个处理单元720可以开始对于第一数据流的数据包执行功能。当第二编译过程完成时,第一至少一个处理单元可以停止对于第一数据流的数据包执行功能。

对于第一至少一个处理单元和第二至少一个处理单元,不同的组合是可能的。例如,在一些实施例中,第一至少一个处理单元710包括多个CPU(如图4所示),而第二至少一个处理单元720包括具有多个处理单元的硬件模块(如图6所示)。在一些实施例中,第一至少一个处理单元710包括多个CPU(如图4所示),而第二至少一个处理单元720包括FPGA(如图5所示)。在一些实施例中,第一至少一个处理单元710包括具有多个处理单元的硬件模块(如图6所示),而第二至少一个处理单元720包括FPGA(如图5所示)。

参考图11,其示出了所连接的多个处理单元640a、640b、640d可以如何对于数据包执行其各自的至少一个操作。每个处理单元被配置为对于接收到的数据包执行其各自的至少一个操作。

每个处理单元的至少一个操作可以表示功能(例如,eBPF程序的功能)中的逻辑阶段。每个处理单元的所述至少一个操作可以由处理单元执行的指令来表达。所述指令可以确定原子的行为。

图11示出了数据包(P

每个处理单元以由编译器指定的特定顺序对数据包执行处理。该顺序可以使得一些处理单元被配置为并行执行它们的处理。该处理可以包括访问保存在存储器中的数据包的至少一部分。另外或替代地,该处理可以包括对查找表执行查找以确定对数据包执行的动作。另外或替代地,该处理可以包括修改状态1110。

处理单元相互交换元数据M

至少一些处理单元根据以下至少一项执行各自的至少一项操作:数据包的内容、其自身的存储状态、全局共享状态、以及与数据包相关联的元数据(例如M

每个处理单元可以在至少一个时钟周期内对数据包(P

更详细地检查第二处理单元640b的操作,第二处理单元640b被配置为连接到被配置为相对于第一数据包执行第一至少一个预定操作的第一处理单元640a。第二处理单元640b被配置为从第一另外的处理单元接收第一至少一个预定操作的结果。第二处理单元640b被配置为根据第一至少一个预定操作的结果来执行第二至少一个预定操作。第二处理单元640b被配置为连接到第三处理单元640d,第三处理单元640d被配置为相对于第一数据包执行第三至少一个预定操作。第二处理单元640b被配置为将第二至少一个预定的操作的结果发送给第三处理单元640d以用于在第三至少一个预定的操作中进行处理。

处理单元可以类似地操作以便相对于多个数据包中的每一个提供功能。

本申请的实施例使得在功能允许的情况下可以同时对多个数据包进行流水线处理。

参考图12,其示出了数据包的流水线。如图所示,不同的数据包可以由不同的处理单元同时处理。第一处理单元640a在第一时间(t

在每个处理单元已经执行了至少相应的操作之后,每个数据包沿着序列中的一阶段移动。例如,在随后的第二时间(t

应当理解,在一些实施例中,在给定阶段中可能存在多个数据包。

在一些实施例中,数据包可以从一个阶段移动到下一阶段,而不必在锁定步骤中。

只要没有流水线危险,以固定时钟运行的流水线就可以具有恒定的带宽。这可以减少系统中的抖动。

为了避免执行指令时的危险(例如,访问共享状态时发生冲突),每个处理单元可以被配置为在必要时执行无操作(即,处理单元停止)指令。

在一些实施例中,操作(例如简单算术、增量、加/减常数值、移位、加/减来自数据包或来自元数据的值)需要由处理单元执行的一个时钟周期。这可能意味着一个处理单元所需的共享状态值尚未被另一处理单元更新。因此,共享状态1110中的过期值可以由需要它们的处理单元读取。因此,在读取和写入共享状态的值时可能会发生危险。另一方面,对中间值的操作可以作为元数据传递,而不会发生危险。

可以在增量操作的上下文中给出在读取和写入共享状态1110时可以避免的危险示例。这样的增加操作可以是在共享状态1110中给数据包计数器增量的操作。在增量操作的一种实现方案中,在流水线的第一时隙期间,第二处理单元640b被配置为从共享状态1110中读取计数器的值,并将该读取操作的输出(例如,作为元数据M2)提供给第三处理单元640d。第三处理单元640d被配置为从第二处理单元640b接收计数器的值。在第二时隙期间,第三处理单元640d将该值增量,并将新的增量值写入共享状态1110。

在执行这样的增量操作时可能会出现问题,即如果在第二时隙期间第二处理单元640b试图访问被存储在共享状态1110中的计数器,在共享状态1110中的计数器值被第三处理单元640d更新之前,第二处理单元640b可以读取计数器的先前的数值。

因此,为了解决该问题,第二处理单元640b可以在第二时隙期间停止(通过第二处理单元640b执行无操作指令或流水线气泡)。停顿可以理解为是下一条指令执行的延迟。该延迟可以通过执行“无操作”指令而不是下一条指令来实现。然后,第二处理单元640b在随后的第三时隙期间从共享状态1110读取计数器值。在第三时隙期间,共享状态1110中的计数器已经被更新,因此确保第二处理单元640b读取更新后的值。

在一些实施例中,各个原子被配置为在单个流水线时隙期间从状态读取、更新状态、和写入更新的状态。在这种情况下,可以不使用上述处理单元的停顿。然而,使处理单元停顿可以降低所需的存储器接口的成本。

在一些实施例中,为了避免危险,流水线中的处理单元可以等待直到流水线中的其他处理单元在执行其自己的操作之前完成了它们的处理。

如前所述,编译器通过链接任意数量的处理阶段实例来构建数据路径,其中每个实例都是从预定数量的预合成处理阶段样板(在给定的示例中为三个)中的一个构建的。处理阶段样板是逻辑阶段样板(例如,提供对寄存器、暂存器和元数据的算术运算),数据包访问状态样板(例如,提供数据包数据加载和/或数据包数据存储),以及映射访问阶段样板(例如,映射查找算法、映射表大小)。

每个处理阶段实例可以由单个处理单元来实现。也就是说,每个处理阶段包括由处理单元执行的相应的至少一个操作。

图13示出了处理阶段如何可以在流水线1300中连接在一起以处理接收到的数据包的示例。如图13所示,在FIFO 1305处接收并存储第一数据包。在第一逻辑阶段1310处接收一个或多个调用参数。调用参数可以包括程序选择器,该程序选择器识别要对于接收到的数据包执行的功能。调用参数可以包括所接收的数据包的包长度的指示。第一逻辑阶段1310被配置为处理调用参数并将输出提供给第一数据包访问阶段1315。

第一数据包访问阶段1315在网络分流器(network tap)1320处从第一数据包加载数据。第一数据包访问阶段1315还可以根据第一逻辑阶段1310的输出将数据写入第一数据包。第一数据包访问阶段1315可以将数据写到第一数据包的前面。第一数据包访问阶段1315可以覆盖数据包中的数据。

然后,将加载的数据和任何其他元数据和/或参数提供给第二逻辑阶段1325,第二逻辑阶段1325对第一数据包执行处理,并将输出参数提供给第一映射访问阶段1330。第一映射访问阶段1330使用来自第二逻辑阶段1325的输出以执行对查找表的查找以确定对于第一数据包要执行的动作。然后将输出传递到第三逻辑阶段1335,后者对该输出进行处理并将结果传递到第二数据包访问阶段1340。

第二数据包访问阶段1340可以根据第三逻辑阶段1335的输出从第一数据包读取数据和/或将数据写入第一数据包。然后,将第二数据包访问阶段1340的结果传递给第四逻辑阶段1345,第四逻辑阶段1345被配置为对其接收的输入执行处理。

流水线可以包括多个数据包访问阶段、逻辑阶段和映射访问阶段。最后的逻辑阶段1350被配置为输出返回参数。返回参数可以包括标识数据包的开始的指针。返回参数可以包括对于数据包要执行的动作的指示。动作的指示可以指示是否要丢弃数据包。动作的指示可以指示是否将数据包转发到主机系统。网络接口设备可以包括至少一个处理单元,其被配置为响应于要丢弃数据包的指示来丢弃相应的数据包。

流水线1300可以另外包括一个或多个旁路FIFO 1355a、1355b、1355c。旁路FIFO可用于传递处理数据,例如来自第一数据包的在映射访问阶段和/或数据包访问阶段周围的数据。在一些实施例中,映射访问阶段和/或数据包访问阶段不需要来自第一数据包的数据来执行它们各自的至少一个操作。映射访问阶段和/或数据包访问阶段可以根据输入参数执行它们各自的至少一个操作。

参考图8,其示出了根据本申请的实施例由网络接口设备600、700执行的方法800。

在S810,网络接口设备的硬件模块被布置为执行功能。硬件模块包括多个处理单元,每个处理单元被配置为相对于数据包以硬件执行一种类型的操作。S810包括布置多个处理单元中的至少一些以特定顺序执行它们各自的预定类型的操作,以便对于每个接收到的数据包提供功能。这样布置硬件模块包括:连接多个处理单元中的至少一些,使得接收到的数据包通过多个处理单元中的至少一些的多个操作中的每一个进行处理。可以通过配置硬件模块的路由硬件以在处理单元之间路由数据包和相关联的元数据来实现连接。

在S820,在网络接口设备的第一接口处从网络接收第一数据包。

在S830,由在S810的编译过程期间连接的至少一些处理单元中的每个处理单元来处理第一数据包。至少一些处理单元中的每一个处理单元相对于至少一个数据包执行其被预先配置为执行的操作的类型。因此,对于第一数据包执行功能。

在S840,将处理后的第一数据包继续传送到其目的地。这可以包括向主机发送数据包。这可以包括通过网络发送数据包。

参考图9,其示出了根据本申请的实施例可以在网络接口设备700中执行的方法900。

在S910,网络接口设备的第一至少一个处理单元(即,第一电路)被配置为接收和处理从网络接收的数据包。该处理包括对于数据包执行功能。该处理在第一时间段期间执行。

在S920,在第一时间段期间执行第二编译过程,以便编译用于在第二至少一个处理单元(即,第二电路)上执行的功能。

在S930,判断第二编译过程是否完成。如果未完成,则方法返回S910和S920,其中,第一至少一个处理单元继续对从网络接收到的数据包进行处理,并且第二个编译过程继续进行。

在S940,响应于确定第二编译完成,第一至少一个处理单元停止对于接收到的数据包执行功能。在一些实施例中,第一至少一个处理单元可以仅对于某些数据流停止执行功能。第二至少一个处理单元然后可以代替地对于那些特定数据流执行功能(在S950)。

在S950,当第二编译过程完成时,第二至少一个处理单元被配置为对于从网络接收的数据包开始执行功能。

参考图16,其示出了根据本申请的实施方案的方法1600。方法1600可以在网络接口设备或主机设备中执行。

在S1610,执行编译处理以便编译要由第一至少一个处理单元执行的功能。

在S1620,执行编译处理,以编译要由第二至少一个处理单元执行的功能。该过程包括分配第二至少一个处理单元的多个处理单元中的每一个以执行与用于处理数据包的多个阶段中的一个阶段相关联的至少一个操作,以提供第一功能。多个处理单元中的每一个被配置为处理的类型,并且根据关于处理单元被配置为执行适合于执行相应的至少一个操作的处理的类型的确定,来执行分配。换句话说,处理单元是根据它们的样板来选择的。

在1630,在S1620中的编译过程完成之前,发送指令以使第一至少一个处理单元执行该功能。该指令可以在S1620中的编译过程开始之前发送。

在S1640,在S1620中的编译过程完成之后,向第二电路发送指令以使第二电路对于数据包执行功能。该指令可以包括在S1620产生的编译指令。

根据本申请的实施例的功能可以被提供为网络接口中的处理切片的可插入组件。参考图14,其示出了在网络接口设备600中可以如何使用切片1425的示例。切片1425可以被称为处理流水线。

网络接口设备600包括发送队列1405,用于从主机接收和存储的、将由切片1425处理然后在网络上发送的数据包。网络接口设备600包括接收队列1410,用于存储将从网络1410接收的、将由切片1425处理并且然后传递到主机的数据包。网络接口设备600包括接收队列1415,用于存储从网络接收的、已经被切片1425处理并且要传递到主机的数据包。网络接口设备600包括发送队列,用于存储从主机接收的、已经被切片1425处理并且要传递到网络的数据包。

网络接口设备600的切片1425包括用于在接收路径和发送路径上处理数据包的多个处理功能。切片1425可以包括协议栈,其被配置为对接收路径和发送路径上的数据包执行协议处理。在一些实施例中,网络接口设备600中可以有多个切片。多个切片中的至少一个可以被配置为处理从网络接收的接收数据包。多个切片中的至少一个可以被配置为处理用于在网络上传输的传输数据包。切片可以由诸如至少一个FPGA和/或至少一种ASIC的硬件处理设备来实现。

加速器组件1430a、1430b、1430c、1430d可以在不同的阶段被插入到切片中,如图所示。每个加速器组件都提供有关穿越切片的数据包的功能。加速器组件可以被动态地(即在网络接口设备的操作期间)插入或移除。因此,加速器组件是可插拔组件。加速器组件是为切片1425分配的逻辑区域。它们中的每一个都支持流动数据包接口,该接口允许流经切片的数据包流入和流出组件。

例如,一种类型的加速器组件可以被配置为在接收或发送路径上提供对数据包的加密。另一类型的加速器组件可以被配置为在接收或发送路径上提供数据包的解密。

通过执行由多个连接的处理单元执行的操作而提供的以上讨论的功能(如以上参考图6所讨论的)可以由加速器组件提供。类似地,由网络处理CPU的阵列(如以上参考图4所讨论)和/或FPGA应用(如以上参考图5所讨论)所提供的功能可以由加速器组件来提供。

如所描述的,在网络接口设备的操作期间,可以从第二至少一个处理单元迁移由第一至少一个处理单元(例如,多个连接的处理单元)执行的处理。为了实现这种迁移,可以将切片1425的组件中用于第一至少一个处理单元进行处理的组件被替换为由第二至少一个处理单元进行处理的组件。

网络接口设备可以包括控制处理器,其被配置为从切片1425插入和移除组件。在上面讨论的第一时间段期间,在切片1425中可以存在由第一至少一个处理单元执行功能的组件。控制处理器可以被配置为在第一时间段之后:从切片1425中移除由第一至少一个处理单元提供功能的可插拔组件,和将由第二至少一个处理单元提供功能的可插拔组件插入到切片1425中。

除了或替代从切片中插入组件或从切片中删除组件外,控制处理器还可以将程序加载到组件中,并发出控制平面命令以控制帧流入组件中。在这种情况下,可能会导致组件在没有插入流水线或从流水线中移除的情况下运行或不运行。

在一些实施例中,控制平面或配置信息被承载在数据路径上,而不需要单独的控制总线。在一些实施例中,将更新数据路径组件的配置的请求被编码为消息,该消息在与网络数据包相同的总线上承载。因此,数据路径可以承载两种类型的数据包:网络数据包和控制数据包。

控制数据包由控制处理器形成,并通过与使用切片1425发送或接收数据包相同的机制被注入到切片1425。该相同机制可以是发送队列或接收队列。可以以任何合适的方式将控制数据包与网络数据包区分开。在一些实施例中,可以通过元数据字中的一个或多个比特来区分不同类型的数据包。

在一些实施例中,控制数据包在元数据字中包含路由字段,该路由字段确定控制数据包通过切片1425采取的路径。控制数据包可以携带一系列控制命令。每个控制命令可以针对切片1425的一个或多个组件。相应的数据路径组件由组件ID字段标识。每个控制命令对相应的标识的组件的请求进行编码。该请求可以是对该组件的配置进行更改。该请求可以控制该组件是否被激活,即,该组件是否对于穿过切片的数据包执行其功能。

因此,在一些实施例中,网络接口设备600的控制处理器被配置为发送消息,以使得切片的组件之一开始对于在网络接口设备处接收到的数据包执行功能。该消息是控制平面消息,该消息通过可插拔组件发送,并导致原子将帧切换到组件以执行功能。然后,此组件在所有穿过切片的接收数据包上执行,直到将其切出为止。控制处理器被配置为发送消息,以使切片的另一个组件导致该组件对于在网络接口设备600处接收到的数据包停止执行该功能。

为了将组件切入和切出数据切片1425,套接字可以存在于入口和出口数据路径中的各个点处。控制处理器可以使附加逻辑进入切片1425以及从中切出。该附加逻辑可以采取放置在组件之间的FIFO的形式。

控制处理器可以将控制平面消息通过切片1425发送到切片1425的已配置组件。该配置可以确定由切片1425的组件执行的功能。例如,通过切片1425发送的控制消息可能导致硬件模块被配置为对于数据包执行功能。这样的控制消息可以使硬件模块的原子互连到硬件模块的流水线中,以提供某种功能。这样的控制消息可以使硬件模块的各个原子被配置以便选择要由各个选择的原子执行的操作。由于每个原子被预先配置为执行某种操作,因此,对于每个原子的操作的选择取决于每个原子被预先配置为执行的操作的类型。

现在将参考图19至21描述一些其他实施例。在该实施例中,数据包处理程序或前馈流水线在FPGA中运行。将描述一种使FPGA的子单元实现数据包处理程序或前馈流水线的方法。数据包处理程序或前馈流水线可以是eBPF程序或P4程序或任何其他合适的程序。

该FPGA可以在网络接口设备中提供。在一些实施例中,仅在相对于其主机安装了网络接口设备之后才部署或运行数据包处理程序。

数据包处理程序或前馈流水线可以实现没有循环的逻辑流程。

在一些实施例中,程序可以在非特权域或较低特权域中,例如在用户级中编写。该程序可以在特权域或更高特权域(例如内核)上运行。运行程序的硬件可能要求没有任意循环。

在以下实施例中,参考eBPF程序示例。然而,应当理解,其他实施例可以与任何其他合适的程序一起使用。

应当看到,以下实施例中的一个或多个可以与先前实施例中的一个或多个结合使用。

可以在FPGA、ASIC或任何其他合适的硬件设备的上下文中提供一些实施例。一些实施例使用FPGA或ASIC等的子单元。下面的示例是参考FPGA进行描述的。应当理解,可以利用ASIC或任何其他合适的硬件设备来执行类似的处理。

子单元可以是原子。先前已经描述了原子的一些例子。应当理解,原子的那些先前描述的示例中的任何示例可以可替代地或附加地用作子单元。替代地或附加地,这些子单元可以被称为“切片”或可配置逻辑块。

这些子单元中的每一个可以被配置为执行单个指令或多个相关指令。在后一种情况下,相关指令可以提供单个输出(可以由一个或多个位限定)。

子单元可以被认为是计算单元。可以将子单元布置在流水线中,在流水线中按顺序处理数据包。在一些实施例中,子单元可以被动态分配以执行程序中的各个指令。

在一些实施例中,子单元可以是用于限定例如FPGA的块的单元的全部或一部分。在某些FPGA中,FPGA的块称为切片。在一些实施例中,子单元或原子等同于切片。

通过将相应的原子或子单元映射到FPGA的相应的块或切片,与将RTL原子映射到FPGA资源的方法相比,可以实现改进的资源利用。这样的后一种方法可能导致RTL原子需要FPGA的相对大量的单个块或切片。

在一些实施例中,编译可以是原子级的。这可能具有流水线处理的优势。可以按顺序处理数据包。编译过程可以相对快速地执行。

在一些实施例中,算术运算可能需要每个字节一个切片。逻辑运算可能需要每个字节半个切片。取决于移位操作的宽度,移位操作可能需要切片的集合。比较操作可能需要每个字节一个切片。选择操作可能需要每个字节半个切片。

作为编译过程的一部分,执行布局和路由。布局是分配特定的物理子单元以执行一个或多个特定指令。路由选择确保特定子单元的一个或多个输出被路由到正确的目的地,该目的地例如可以是另一个子单元或多个子单元。

布局和路由可以使用从流水线的一端开始将操作分配给特定子单元的过程。在一些实施例中,可以将最关键的操作置于次要关键操作之前。在一些实施例中,可以在布局特定操作的同时分配路由。在一些实施例中,可以从有限的一组预先计算的路由中选择路由。稍后将对此进行更详细的描述。

在一些实施例中,如果不能分配路由,则该操作将被保留以备后用。

在一些实施例中,预先计算的路由可以是字节宽的路由。但是,这仅是示例性的,在其他实施例中,可以限定不同的路由宽度。在一些实施例中,可以提供多个不同尺寸的路由。

在一些实施例中,路由可以限于附近的子单元之间的路由。

在一些实施例中,子单元可以以规则结构物理地布置在FPGA上。

在一些实施例中,为了促进路由,可以制定关于子单元可以如何通信的规则。例如,子单元只能向其旁边、其上方、或下方的子单元提供输出。

替代地或附加地,出于路由的目的,可以对下一个子单元的距离设置限制。例如,子单元可以仅将数据输出到相邻子单元或在限定距离内(例如,不超过一个中间子单元)的子单元。

参考图19,其示出了一些实施例的方法。

在一些实施例中,FPGA可以具有一个或多个“静态”区域和一个或多个“动态”区域。静态区域提供标准配置,动态功能可以提供符合最终用户要求的功能。例如,可以在最终用户接收网络接口设备之前,例如在相对于主机安装网络接口设备之前,定义静态部分。例如,静态区域可以被配置为使网络接口设备提供某些功能。静态区域将在原子之间提供预先计算的路径。如后文将更详细讨论的,可以在经历一个或多个动态区域的一个或多个静态区域之间路由。当相对于主机部署网络接口设备时,动态区域可以由最终用户根据其需求来配置。动态区域可以被配置为在一段时间内为最终用户执行不同的功能。

在步骤S1中,执行第一编译过程以提供被称为主位文件50和工具检查点52的第一位文件。在一些实施例中,这是用于静态区域的至少一部分的位文件。当被下载到FPGA时,位文件将使FPGA如程序规定的那样起作用,该位文件是从该程序被编译的。在一些实施例中,在第一编译过程中使用的程序可以是任何一个或多个程序,或者可以是专门设计用于帮助确定FPGA的一部分内的路由的测试程序。在一些实施例中,可以替代地或附加地使用一系列简单程序。

程序可以被修改或具有可由编译器使用的可重新配置的分区。通过将网络移出可重新配置的分区,可以修改程序以使编译器的工作更容易。

可以在设计工具中执行步骤S1。仅作为示例,Vivado工具可以与Xilinx FPGA一起使用。检查点文件可以由设计工具提供。检查点文件表示生成位文件时的设计快照。该检查点文件可以包括一个或多个合成网表、设计约束、放置信息和路由信息。

在步骤S2中,考虑检查点文件来分析位文件以提供位文件描述54。该分析可以是以下一项或多项:检测资源、生成路由、检查定时、生成一个或多个部分位文件和生成位文件描述。

分析可以被配置为从位文件提取路由信息。该分析可以被配置为确定信号已经传播了哪些线路或路由。

分析阶段可以至少部分地在合成或设计工具中执行。在一些实施例中,可以使用Vivado的脚本工具。脚本编写工具可以是TCL(工具命令语言)。TCL可用于添加或修改Vivado的功能。Vivado的功能可以由TCL脚本调用和控制。

位文件描述54限定如何使用FPGA的给定部分。例如,位文件描述将指示可以将哪个原子路由到其他原子,以及可以在这些原子之间路由的一个或多个路由。例如,对于每个原子,位文件描述将指示该原子的输入可来自何处以及该原子的输出可以连同一条或多条数据输出路线一起路由至何处。位文件描述独立于任何程序。

位文件描述可能包含一个或多个路由信息、哪些对路由发生冲突的指示、以及如何从所需的原子配置中生成位文件的描述。

位文件描述可以提供在一组原子之间的、但在任何特定指令由给定的原子执行之前可用的一组路由。

位文件描述可能是对于FPGA的一部分的。位文件描述可能是对于动态FPGA的一部分的。位文件描述将包括哪些路由可用和/或哪些路由不可用。例如,该位文件可以考虑到跨FPGA的动态部分所需的任何路由,例如通过FPGA的静态部分,为FPGA的动态部分指示可用的路由。

应当理解,在一些实施例中,可以以任何合适的方式获得位文件描述。例如,可以由FPGA或ASIC的提供者提供位文件描述。

在一些实施例中,位文件描述可以由设计工具提供。在该实施例中,可以省略分析步骤。设计工具可以输出位文件描述。位文件描述可能是对于FPGA的静态部分,包括跨越FPGA动态部分的任何所需的路由。

应当理解,可以使用任何其他合适的技术来生成位文件描述。在前面描述的示例中,用于设计FPGA的工具,被用于提供用于生成位文件的分析。

应当理解,在其他实施例中可以使用不同的工具。在一些实施例中,工具可以特定于产品或一系列产品。例如,FPGA的提供者可以提供用于管理该FPGA的相关工具。

在其他实施例中,可以使用通用脚本工具。

在一些实施例中,可以使用不同的工具或不同的技术来确定部分位文件。例如,可以分析主位文件以便确定哪些特征对应于哪些特征。这可能需要生成多个部分位文件。

应当理解,步骤S3是当相对于主机安装网络接口设备并且在物理FPGA设备上执行时被执行的。步骤S1和S2可以作为设计综合过程的一部分执行,以产生实现网络接口设备的位文件图像。在一些实施例中,步骤S1和/或步骤S2用于表征FPGA的行为。一旦确定了FPGA的特性,位文件的描述就会被存储在所有物理网络接口设备的存储器中,这些物理网络接口设备将以给定的定义方式进行操作。

在步骤S3中,使用位文件描述和eBPF程序执行编译。编译的输出是eBPF程序的部分位文件。编译会将路由添加到部分位文件,并添加要由切片中的各个切片执行的编程。

应当理解,可以在所部署的系统中提供位文件描述。位文件描述可以存储在存储器中。位文件描述可以存储在FPGA上、网络接口设备上、或主机设备上。在一些实施例中,位文件描述被存储在连接到网络接口设备上的FPGA的闪存等中。闪存也可能包含主位文件。

eBPF程序可以与位文件描述一起存储,也可以单独存储。eBPF程序可以存储在FPGA上、网络接口设备上或主机上。在eBPF的情况下,程序可以从用户模式程序转移到内核,两者都在主机上运行。内核会将程序传输到设备驱动程序,然后将其传输到运行在主机或网络接口设备上的编译器。在一些实施例中,可以将eBPF程序存储在网络接口设备上,以便可以在引导主机OS之前运行它。

可以在网络接口设备、FPGA或主机上的任何合适位置提供编译器。仅作为示例,编译器可以在网络接口设备上的CPU上运行。

现在将描述编译器流程。编译器的前端接收一个eBPF程序。eBPF程序可以用任何合适的语言编写。例如,可以用C类型语言编写eBPF程序。编译器在前端被配置为将程序转换为中间表示IR。在一些实施例中,IR可以是LLVM-IR或任何其他合适的IR。

在一些实施例中,可以执行指针分析以创建数据包/映射访问原语。

应当理解,在一些实施例中,IR的优化可以由编译器执行。这在一些实施例中可以是可任选的。

编译器的高级综合后端被配置为将程序流水线分成多个阶段,生成数据包访问分接头并发出C代码。在一些实施例中,可以调用设计工具和/或所使用的设计工具的HLS部分以综合HLS阶段的输出。

FPGA原子的编译器后端将流水线分成多个阶段,并生成数据包访问分接头。可以执行if转换以将控制依赖项转换为数据依赖项。设计已布局并路由。用于eBPF程序的部分位文件已发送。

可能会出现路由问题,如图20a所示,其中存在路由冲突。例如,切片A可以与切片C通信,切片B可以与切片D通信。在图20a的布局中,公共路由部分60已经被分配给切片A和切片C之间的通信以及切片A和切片C之间的通信。在一些实施例中,这可以避免该路由冲突。在这方面,参考图20b。可以看出,与切片B和切片D之间的路由64相比,在切片A和切片C之间提供了单独的路由62。

在一些实施例中,位文件描述可以包括用于至少一些子单元对的多个不同的路由。编译过程将检查路由冲突,如图20a所示。在路由冲突的情况下,编译器可以通过选择适当的替代路由之一来解决或避免此类冲突。

图21示出了FPGA中用于执行eBPF程序的分区66。该分区将例如经由一系列输入触发器68和一系列输出触发器而与FPGA的静态部分接口。在一些实施例中,如先前所讨论的,在设计上可以存在路由70。

编译器可能需要处理跨编译器正在配置的FPGA区域的路由。编译器需要生成一个局部位文件,该文件适合主位文件中的可重新配置分区。当使用可重配置分区生成主位文件时,设计工具将避免在可重配置分区内使用逻辑资源,以便部分位文件可以使用这些资源。但是,设计工具可能无法避免在可重新配置分区中使用路由资源。

因此,分析工具将需要避免使用主位文件中的设计工具已使用的路由资源。分析工具可能需要确保其在位文件描述中的可用路由列表不包括由主位文件正在使用的任何使用资源。可用的路由可以根据路由样板来限定,由于FPGA的规则性很强,因此可以在FPGA内的许多地方使用这些路由样板。主位文件使用的路由资源打破了常规性,这意味着分析工具避免在与主位文件冲突的位置使用这些样板。分析工具可能需要生成可在那些地方使用的新路由样板和/或防止某些路由样板在特定位置使用。

现在将描述编译器将某些示例eBPF程序切片转换为要由原子执行的指令时提供的功能的一些示例。

一些实施例可以使用任何合适的综合工具来生成位文件描述。仅作为示例,一些实施例可以使用基于对硬件使用原子事务的模式的Bluespec工具。

在第一个示例中,eBPF程序切片具有两条指令:

指令1:r1+=r2

指令2:r1+=r3

第一条指令将寄存器1(r1)中的数字加到寄存器2(r2)中的数字,并将结果放入r1中。第二条指令将r1加到r3并将结果放在r1中。本示例中的两条指令均使用64位寄存器,但仅使用最低的32位。结果的高32位用零填充。

编译器会将这些转换为原子执行的指令。一条32位加法指令需要32对查找表(LUT),32位进位链和32个触发器。

每对查询表将添加两位以产生2位结果。进位链的结构允许在加法期间将一位从数位列进到下一列,并在减法期间允许从下一列借位。

32个触发器是存储元件,它们在一个时钟周期接受一个值,并在下一个时钟周期再现该值。这些可用于限制每个时钟周期完成的工作量并简化时序分析。

在一些实施例中,FPGA可以包括多个切片。在某些示例切片中,进位链从切片的底部(CIN)传播到切片的顶部(COUT),然后,该顶部连接到下一个切片的CIN输入。

在每个切片具有4位进位链的示例中,八个切片用于执行32位加法。在该实施例中,可以认为原子是由一对切片提供的。这是因为在某些实施例中,原子以8位值进行操作可能很方便。

在每个切片具有8位进位链的示例中,四个切片用于执行32位加法。在该实施例中,可以认为原子是由切片提供的。

应当理解,这仅是示例性的,并且如前所述,原子可以任何合适的方式定义。

在此示例中,其中FPGA具有支持8位进位链的切片的情况现在将被使用于第一个示例eBPF程序切片的编译。

有3个32位宽的输入值和1个32位宽的输出值。可能还有其他更早的指令产生这3个输入值。在下文中,将假定切片(原子)的某些任意位置。

将使用以下编号约定。切片(原子)以规则的行和列排列。XnYm表示原子在排列中的位置。Xn表示列,Ym表示行。X6Y0指示切片在第6列和第0行中。应当理解,在其他实施例中可以使用任何其他合适的编号方案。

假设在以下位置同时产生初始值:

r1:切片X6Y0、X6Y1、X6Y2和X6Y3

r2:切片X6Y4、X6Y5、X6Y6和X6Y7

r3:切片X6Y8、X6Y9、X6Y10和X6Y11

第一条指令的结果需要由同一列中的四个相邻切片计算得出,以便使进位链正确连接。编译器可能选择在切片X7Y0、X7Y1、X7Y2和X7Y3中计算该结果。为此,需要将输入连接起来。将有从X6Y0到X7Y0的连接、从X6Y1到X7Y1的连接、从X6Y2到X7Y2的连接、和从X6Y3到X7Y3的连接。还需要从X6Y4-X6Y7到X7Y0-X7Y3的相应连接。

这些将是全字节连接,这意味着8个输入位中的每个位都连接到相应的输出位。例如:

切片X6Y0触发器0的输出连接到切片X7Y0 LUT 0的输入0。

切片X6Y0触发器1的输出连接到切片X7Y0 LUT 1的输入0。

以此类推,直到

切片X6Y0触发器7的输出连接到切片X7Y0 LUT 7的输入0。

在第一个时钟周期内,来自切片X6Y0-X6Y7的r1和r2值将被传输到切片X7Y0-X7Y3的输入,将由LUT和进位链进行处理,其结果将存储在这些切片(X7Y0-X7Y3)的触发器中,准备在下一个周期使用。

移至指令2。编译器需要选择一个位置来计算指令2的结果。它可能选择切片X7Y4至X7Y7。同样,从指令1的结果(X7Y0至X7Y3)到指令2(X7Y4至X7Y7)的输入将进行全字节连接。

还需要r3的值。如果r1、r2和r3在周期0中产生,则r1+r2将在周期1中产生。r3的值需要延迟一个时钟周期,以便在周期1中产生。编译器可以通过使用切片X7Y8到X7Y11,选择在第1周期中,产生r3。那么就需要从在第0周期中产生r3的原始切片(X6Y8到X6Y11)与在第1周期中产生相同值的新切片(X7Y8到X7Y11)之间建立连接。完成此操作后,现在需要从这些新切片到用于指令2的切片之间的连接。因此,切片X7Y8的输出将连接到切片X7Y4的输入,依此类推。

FPGA位文件将包含以下特征:

-从X6Y0到X7Y0输入0的全字节连接(初始r1字节0)

-从X6Y1到X7Y1输入0的全字节连接(初始r1字节1)

-从X6Y2到X7Y2输入0的全字节连接(初始r1字节2)

-从X6Y3到X7Y3输入0的全字节连接(初始r1字节3)

-从X6Y4到X7Y0输入1的全字节连接(初始r2字节0)

-从X6Y5到X7Y1输入1的全字节连接(初始r2字节1)

-从X6Y6到X7Y2输入1的全字节连接(初始r2字节2)

-从X6Y7到X7Y3输入1的全字节连接(初始r2字节3)

-从X6Y8到X7Y8输入0的全字节连接(初始r3字节0)

-从X6Y9到X7Y9输入0的全字节连接(初始r3字节1)

-从X6Y10到X7Y10输入0的全字节连接(初始r3字节2)

-从X6Y11到X7Y11输入0的全字节连接(初始r3字节3)

-切片X7Y0被配置为将输入0添加到输入1(指令1字节0)

-切片X7Y1被配置为将输入0添加到输入1(指令1字节1)

-切片X7Y2被配置为将输入0添加到输入1(指令1字节2)

-切片X7Y3被配置为将输入0添加到输入1(指令1字节3)

-切片X7Y8被配置为将输入0复制到输出(r3延迟字节0)

-切片X7Y9被配置为将输入0复制到输出(r3延迟字节1)

-切片X7Y10被配置为将输入0复制到输出(r3延迟字节2)

-切片X7Y11被配置为将输入0复制到输出(r3延迟字节3)

-从X7Y0到X7Y4输入0的全字节连接(指令1字节0)

-从X7Y1到X7Y5输入0的全字节连接(指令1字节1)

-从X7Y2到X7Y6输入0的全字节连接(指令1字节2)

-从X7Y3到X7Y7输入0的全字节连接(指令1字节3)

-从X7Y8到X7Y4输入1的全字节连接(r3延迟字节0)

-从X7Y9到X7Y5输入1的全字节连接(r3延迟字节1)

-从X7Y10到X7Y6输入1的全字节连接(r3延迟字节2)

-从X7Y11到X7Y7输入1的全字节连接(r3延迟字节3)

-切片X7Y4被配置为将输入0添加到输入1(指令2字节0)

-切片X7Y5被配置为将输入0添加到输入1(指令2字节1)

-切片X7Y6被配置为将输入0添加到输入1(指令2字节2)

-切片X7Y7被配置为将输入0添加到输入1(指令2字节3)

编译器不需要产生指令2的结果的高32位,因为已知它们为零。它可以只记录该事实,并且无论何时使用它们时,就使用零。

现在将描述eBPF切片的编译的第二示例。

指令1:r1&=0xff

指令2:r2&=0xff

指令3:if r1

指令4:r1=r2

标签L1。

第一条指令使用常数0xff对r1进行按位与(bitwise-AND)运算,并将结果放入r1中。如果相应的位最初在r1中设置为1并且相应的位被设置,则结果中的给定位将被设置为常数1。否则它将被设置为零。常数0xff的位0到7设置为1,并且将位8到63清除,因此结果将是r1的0到7位不变,而位8到63将被设置为零。因为编译器知道位8到63为零并且不需要产生它们,所以这简化了编译器的工作。第二条指令对r2执行相同的操作。

指令3检查r1是否小于r2,并且如果为r1则跳转到标签L1。这跳过了指令4。指令4只是将值从r2复制到r1中。该指令序列找到r1字节0和r2字节0的最小值,将结果放在r1字节0中。

编译器可以使用一种称为“如果转换”的技术来将条件跳转转换为选择指令:

指令1:r1&=0xff

指令2:r2&=0xff

指令5:c1=(r1

指令6:r1=c1?r1:r2

指令5将r1与r2进行比较,如果r1小于r2,则将c1设置为1,否则将c1设置为零。指令6是选择指令,如果设置了c1,则将r1复制到r1(这将没有效果),否则将r2复制到r1。如果c1等于1,则指令3将跳过指令4,这意味着r1将保持其与指令1的值。在这种情况下,选择指令也将r1保持不变。如果c1等于0,那么指令3将不会跳过指令4,因此r2将被指令4复制到r1中。再次,选择指令会将r2复制到r1中,因此新序列与旧序列具有相同的效果。

指令6不是有效的eBPF指令。但是,当编译器对其进行处理时,指令以LLVM-IR表示。指令6将是LLVM-IR中的有效指令。

现在,这些指令需要分配给原子。假设输入r1在切片X0Y0至X0Y7中可用,而r2在切片X0Y8至X0Y15中可用。指令1和2使编译器记下r1和r2的前7个字节设置为零。

然后,编译器可能会选择计算切片X1Y0中指令5的结果。从分切片X0Y0的输出到分切片X1Y0的输入0需要一个全字节连接,从分切片X0Y8的输出到分切片X1Y0的输入1需要一个全字节连接。比较两个值的方法是从另一个值中减去一个值,然后通过尝试从下一个位中借位来查看计算是否溢出。然后,该比较的结果被存储在分切片X1Y1的触发器7中。

像第一个示例一样,r1和r2将需要延迟一个周期才能在正确的时间向指令6呈现值。编译器可能分别对r1和r2使用切片X1Y1和X1Y2。

选择指令需要三个输入:c1、r1和r2。注意,r1和r2为一字节宽,而c1仅为一比特宽。假设编译计算选择指令切片X2Y0的结果。选择是逐位执行的,切片X2Y0中的每个LUT处理一位:

如果设置了c1,则结果的位0为r1位0和r2位0

否则

如果设置了c1,则结果的位1为r1位1和r2位1

否则

...依此类推,直到

如果设置了c1,则结果的位7为r1位7和r2位7

否则。

每个LUT可能需要访问来自r1的对应位和来自r2的对应位,但是所有的LUT都需要访问c1。这意味着需要在切片的输入0的位之间复制cl。因此,指令6输入的连接将是:将切片X1Y0的输出的位7复制到切片X2Y0的输入0。

从切片X1Y1的输出到切片X2Y0的输入1的全字节连接。

从切片X1Y2的输出到切片X2Y0的输入2的全字节连接。

另一个需要解决的问题与移位指令有关。考虑以下示例:

向左移5位的一个16位字需要:

将输出位0设置为零

将输出位1设置为零

将输出位2设置为零

将输出位3设置为零

将输出位4设置为零

将输入位0复制到输出位5

将输入位1复制到输出位6

将输入位10复制到输出位15

应当指出,此处的输入和输出是连接的。连接的输入是来自第一个切片的输出。连接的输出将进入第二个分切片的输入。

可能无法在切片中进行这种连接,而是通过切片之间的互连进行。编译器可以假定16位输入值是由同一列中的两个相邻分切片产生的,因为编译器可以确保在此处产生值。

例如,假设输入是由切片X0Y4和X0Y5产生的,并且输出将进入切片X1Y4和X1Y5。在这种情况下,需要以下连接:

切片X1Y4的位0已知为零,因此并不需要

切片X1Y4的位1已知为零,因此并不需要

切片X1Y4的位2已知为零,因此并不需要

切片X1Y4的位3已知为零,因此并不需要

切片X1Y4的位4已知为零,因此并不需要

切片X1Y4的位5来自切片X0Y4的位0

切片X1Y4的位6来自切片X0Y4的位1

切片X1Y4的位7来自切片X0Y4的位2

切片X1Y5的位0来自切片X0Y4的位3

切片X1Y5的位1来自切片X0Y4的位4

切片X1Y5的位2来自切片X0Y4的位5

切片X1Y5的位3来自切片X0Y4的位6

切片XIY5的位4来自切片X0Y4的位7

切片X1Y5的位5来自切片X0Y5的位0

切片XIY5的位6来自切片X0Y5的位1

切片X1Y5的位7来自切片X0Y5的位2

到切片X1Y5的输入的8个连接可以视为移位连接或路由。切片X1Y4可以使用相同的结构,但是对于X1Y3和X1Y4的输入,因为位5-7匹配,并且切片可以忽略位0-4,所以在那里显示什么输入都没有关系。

可能需要能够移位1到7位之间的任何数量。移位0位或8位的连接与全字节连接相同,因为在这种情况下,每个位都连接到另一个切片的相应位。

根据要移动的值的宽度,可以分两个或三个阶段进行可变量的移动。这些阶段是:

阶段1:移位0、1、2或3。

阶段2:移位0、4、8或12。

阶段3:移位0、16、32或48(仅限于32位或64位字)。

作为另一示例,假设字节的算术右移量为可变量,要移位的值由切片X3Y2产生,而移位量由X3Y3产生。

算术右移要求“算术右移”类型的连接。这种类型的连接采用一个切片的输出并将其连接到另一切片的输入,但是在此过程中将它们向右移恒定的量,并根据需要复制符号位。

例如,“算术右移3”连接将具有:

输出位0来自输入位3

输出位1来自输入位4

输出位2来自输入位5

输出位3来自输入位6

输出位4来自输入位7

输出位5来自输入位7(符号位)

输出位6来自输入位7(符号位)

输出位7来自输入位7(符号位)

阶段1可能在切片X4Y2中计算,在这种情况下,它需要以下连接:

从切片X3Y2全字节到切片X4Y2输入0

从切片X3Y2算术右移1到分切片X4Y2输入1

从切片X3Y2算术右移2到分切片X4Y2输入2

从切片X3Y2算术右移3到分切片X4Y2输入3

将切片X3Y3位0复制到切片X4Y2输入4

将切片X3Y3位1复制到切片X4Y2输入5

切片X4Y2然后将被配置为基于输入4和输入5选择前四个输入之一,如下所示:

输入4为0,输入5为0:选择输入0

输入4为1,输入5为0:选择输入1

输入4为0,输入5为1:选择输入2

输入4为1而输入5为1:选择输入3

可以将偏移量从切片X3Y3复制到切片X4Y3,以提供延迟版本。

阶段2可以是在切片X5Y2中计算的,在这种情况下,它需要以下连接:

从切片X4Y2的全字节到切片X5Y2输入0

从切片X4Y2的算术右移4到分切片X5Y2输入1

将切片X4Y3位2复制到切片X5Y2输入2

切片X5Y2然后将被配置为基于输入2选择输入0或输入1,如下所示:

输入2为0:选择输入0

输入2为1:选择输入1

切片X5Y2的输出将是可变算术右移运算的结果。

对于给定原子的位文件可能如下:

原子的身份信息

给定原子能够从中接收输入的其他原子的列表以及该输入的可用路线

给定原子能够提供输出的其他原子的列表以及该输出的可用路线。

应当理解,由于FPGA是规则结构,因此可能存在一个通用样板,该样板可用于多个原子,并在必要时对单个原子进行修改。

例如,切片X7Y1的位文件描述可以指定以下可能的输入和输出:

经由路由A或路由B从X6Y1的输入

经由路由C或路由D从X6Y5的输入

经由路由E或路由F从X7Y0的输入

经由路由G或路由H到X8Y1的输出

经由路由I或路由J到X7Y2的输出

经由路由K或路由L到X7Y5的输出。

编译器将使用此位文件描述为切片X7Y1的输入和输出提供部分位文件,以用于先前描述的第一个eBPF示例,

经由路由A从X6Y1的输入

经由路由C从X6Y5的输入

经由路由K或路由L到X7Y5的输出。

举例来说,切片XnYm的位文件描述可以指定以下可能的输入和输出:

经由路由A或路由B从Xn-lYm的输入

经由路由C或路由D从Xn-lYm+4的输入

经由路由E或路由F从XnYm-1的输入

经由路由G或路由H到Xn+lYm的输出

经由路由I或路由J到XnYm+1的输出

经由路由K或路由L到XnYm+4的输出。

可以修改此位文件描述,以删除编译器无法使用的一个或多个路由,例如先前所述。这可能是因为该路由被另一个原子使用或用于跨分区路由。

应当理解,编译器可以由计算机程序实现,该计算机程序包括可以由一个或多个计算机处理器执行的计算机可执行指令。编译器可以在诸如与一个或多个存储器结合操作的至少一个处理器那样的硬件上运行。

应当指出,尽管以上描述了示例实施例,但是在不脱离本发明的范围的情况下,可以对所公开的解决方案进行多种变型和修改。

因此,实施例可以在所附权利要求的范围内变化。通常,一些实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。例如,一些方面可以以硬件来实现,而其他方面可以由控制器、微处理器或其他计算设备执行的固件或软件来实现,但是实施例不限于此。

实施例可以通过存储在存储器中的计算机软件来实现,并且可以由所涉及实体的至少一个数据处理器来执行,或可以由硬件或通过软件和硬件的组合来执行。

该软件可以被存储在诸如存储芯片或在处理器内实现的存储块之类的物理介质,诸如硬盘或软盘之类的磁性介质,以及诸如DVD及其数据变体,CD之类的光学介质上。

存储器可以是适合本地技术环境的任何类型,并且可以使用任何合适的数据存储技术来实现,例如基于半导体的存储设备、磁存储设备和系统、光存储设备和系统、固定存储器和可移动存储器。

数据处理器可以是适合本地技术环境的任何类型,并且可以包括通用计算机、专用计算机、微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、门级电路、和基于多核处理器体系结构的处理器中的一个或多个,作为非限制性示例。

当结合附图和所附权利要求书阅读时,鉴于前面的描述,各种修改和变型对于相关领域的技术人员而言将变得显而易见。然而,对教导的所有此类和类似修改仍将属于所附权利要求书所限定的范围内。

相关技术
  • 用于选择网络接口的方法和具有多个网络接口的设备
  • 用于选择网络接口的方法、具有多个网络接口的设备及应用
技术分类

06120113224514