CN107832149A - 一种针对多核处理器动态分组管理的Receive‑side Scaling电路 - Google Patents
一种针对多核处理器动态分组管理的Receive‑side Scaling电路 Download PDFInfo
- Publication number
- CN107832149A CN107832149A CN201711058105.2A CN201711058105A CN107832149A CN 107832149 A CN107832149 A CN 107832149A CN 201711058105 A CN201711058105 A CN 201711058105A CN 107832149 A CN107832149 A CN 107832149A
- Authority
- CN
- China
- Prior art keywords
- modules
- hash
- module
- result
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种针对多核处理器动态分组管理的Receive‑side Scaling电路,包括TCP/IP头提取模块、Hash_Function模块、Hash_Mask模块、间接表查询模块、CPU_Result计算模块和RSS寄存器模块,TCP/IP头提取模块连接有用于完成数据帧的封装、解封、发送和接收功能的MAC模块,CPU_Result计算模块连接有用于将数据帧分配到不同的接收队列的RQP模块,RSS寄存器模块分别与TCP/IP头提取模块、Hash_Function模块、Hash_Mask模块、间接表查询模块和CPU_Result计算模块连接。有效解决了多核处理器系统中CPU核的动态分组管理,从而使得负载大的CPU核能够即时关闭,动态地调节了数据接收时的处理性能,使网络吞吐达到最高状态。
Description
技术领域
本发明属于计算机网络技术领域,具体涉及一种针对多核处理器动态分组管理的Receive-side Scaling电路,尤其适用于需要根据系统负载和网络处理性能平衡网络数据吞吐率的多处理器系统,如服务器、测控系统中心机和Linux多核平台等。
背景技术
目前在主流的以太网控制器中,都使用了Receive-side Scaling(RSS,接收端调控)技术,这主要是因为RSS技术相对来说较成熟,且具有很好的软件兼容性。
现有的RSS技术通过对接收到的数据报文进行分析处理,解析出报文中的IP源地址和目的地址(IPV4或IPV6)、TCP源端口和目的端口,然后根据hash_type和hash_key值计算出hash_rusult,根据该值的低位将数据包处理任务分配给系统对应的CPU核,如果需要在多处理器系统之间平衡网络数据吞吐率,则需要对hash_rusult的低位值加上Base_CPU_Number作为最终数据包的处理器核,但是Base_CPU_Number是通过软件的方式实现,当通讯一段时间需要对网络负载能力进行平衡时,则需要断电之后重新配置然后上电再运行,不能实现系统所有CPU核的动态分组管理,从而无法使得接收到的数据能够实时地得到最空闲CPU核的处理及提高CPU核对网络数据的处理能力,也无法使网络吞吐达到最高状态。
源于RSS服务的网络数据阻塞原因分析方法中,通过中断服务例程的方式对不同的CPU核进行了划分,从而使得网卡和其驱动程序提供了在不同CPU核上分配处理DPCs的功能,所有运行在CPU核中的接收线程由接收数据中断驱动,并且接收端调节设计确保处理某一方面停留在指定的CPU核上,但是其还是存在以下缺陷:
1、无法根据网络负载的能力实现对CPU核动态调整;
2、无法实现对CPU核的分组管理,从而将负载能力较高的CPU核关闭。
基于Linux多核平台的高性能报文采集系统的研究与设计中,通过CPU核的硬亲和性绑定线程从而实现将接收的报文分发散列到固定的处理单元进行并行处理,从而达到提高系统吞吐量的目的,这种方法存在的缺陷:
1、Toeplita_Hash函数得到的哈希值决定报文被分配到哪一个队列,但是Toeplita_Hash的初始化值是上电之后配置且无法修改,因此无法实现对数据包的动态平衡处理;
2、当某些CPU核的负载达到上限时无法对其进行动态关闭,从而导致数据包的丢弃。
发明内容
本发明所要解决的技术问题在于针对上述现有技术中的不足,提供一种针对多核处理器动态分组管理的Receive-side Scaling电路,实现了对现有RSS的兼容,同时通过配置寄存器动态的设置Base_CPU_Number值,使得接收到的数据包能够实时地得到最空闲CPU组的处理。
本发明采用以下技术方案:
一种针对多核处理器动态分组管理的Receive-side Scaling电路,包括TCP/IP头提取模块、Hash_Function模块、Hash_Mask模块、间接表查询模块、CPU_Result计算模块和RSS寄存器模块,TCP/IP头提取模块连接有用于完成数据帧的封装、解封、发送和接收功能的MAC模块,CPU_Result计算模块连接有用于将数据帧分配到不同的接收队列的RQP模块,RSS寄存器模块分别与TCP/IP头提取模块、Hash_Function模块、Hash_Mask模块、间接表查询模块和CPU_Result计算模块连接;
TCP/IP头提取模块用于根据RSS寄存器模块中的Hash类型寄存器的配置,对从MAC接收到的数据帧分别进行TCP/IP头的提取,并将提取结果发送到Hash_Function计算模块;
Hash_Function计算模块用于完成对TCP/IP头提取模块提取内容的Hash结果计算,并将结果发送给Hash_Mask模块;
Hash_Mask模块用于根据寄存器模块的配置值对Hash_Function计算模块的输出结果进行有效位提取,并发送给间接表查询模块;
间接表查询模块用于对接收到的Hash_Mask模块输出结果进行间接表查询,得到初始配置处理报文的CPU核;
CPU_Result计算模块用于根据间接表查询模块的结果和寄存器模块配置的Base_CPU_Number值计算出最终由哪个CPU核来对该报文进行处理;
RSS寄存器模块用于存储整个电路的配置信息。
进一步的,RSS寄存器模块存储的配置信息包括Hash类型、Hash_Key、间接表和Base_CPU_Number。
进一步的,TCP/IP头提取模块支持IPv4、带TCP头的IPv4、IPv6以及带TCP头的IPv6四种Hash类型的TCP/IP头提取,具体的提取方式如下:
带TCP头的IPv4帧
提取内容={源IPv4地址,目的IPv4地址,源端口地址,目的端口地址};
IPv4帧
提取内容={源IPv地址,目的IPv4地址};
带TCP头的IPv6帧
提取内容={源IPv6地址,目的IPv6地址,源端口地址,目的端口地址};
IPv6帧
提取内容={源IPv6地址,目的IPv6地址};
对于带TCP头的IPv4的数据帧和IPv4的数据帧,其提取内容长度分别为12bytes和8bytes;对于带TCP头的IPv6数据帧和IPv6数据帧的提取内容长度分别为36bytes和32bytes。
进一步的,Hash_Function计算模块包括提取内容分割模块、Key值分割模块、字节Hash计算模块以及结果输出模块;
提取内容分割模块用于根据RSS寄存器模块中Hash类型寄存器的配置,判断出接收到的提取内容的长度,然后对接收到的提取内容进行分割;
Key值分割模块用于根据RSS寄存器模块中Hash_Key寄存器的配置,获得相应的Key值,并对Key值进行分割;
提取内容分割模块和Key值分割模块分别将分割后的结果按照一一对应的关系送入字节Hash计算模块用于完成一个字节的Hash结果计算,字节Hash计算模块共有36个,按照Toeplitz函数的算法完成对8位提取内容的计算,完成计算后将32位计算结果输送给结果输出模块;
结果输出模块用于接收来自字节Hash计算模块的计算结果,并对36组32位的结果进行异或运算,输出32位的最终结果。
进一步的,提取内容分割模块分割的方式为按照从数据最高位到最低位的方向,从数据的最高位开始,每连续8位分为一组,然后将分好的各组数据并行输出,对于带TCP头的IPv4数据帧的提取内容,其分组数为12组;对于IPv4数据帧的提取内容,其分组数为8组;对于带TCP头的IPv6数据帧的提取内容,其分组数为36组;对于IPv6数据帧的提取内容,其分组数为32组。
进一步的,提取内容分割模块最多支持36组数据的并行输出,对于分割组数不到36组的情况,指定剩余的组的输出值为全零。
进一步的,Key值分割模块分割的方式为按照从Key值最高位到最低位的方向,从Key值的最高位开始,每间隔8位向后取40位Key值组成一组,然后将分好的各组Key值并行输出,Key值分割模块最多支持36组分割结果的并行输出;对于IPv6的320位Key值,分割为36组;对于IPv4的128位Key值,分割出11组,指定剩余组的输出值为全零。
进一步的,当寄存器模块的配置值为1时,将Hash_Function计算模块输出结果的最低位输出给间接表查询模块;当寄存器模块的配置值为7时,将Hash_Function计算模块输出结果的bit6-bit0输出给间接表查询模块。
进一步的,间接表查询模块根据接收的Hash_Mask模块的输出结果,进行相应的地址转换,然后用转换后的地址从RSS寄存器模块中读出间接表信息并输出给CPU_Result计算模块,从间接表中读出的信息是一组1位的数据,其值分别对应CPU0~CPU1。
进一步的,CPU_Result计算模块中,如果Base_CPU_Number的值为0,则将间接表查询模块的输出作为最终CPU核的结果;如果Base_CPU_Number的值为2,则说明主机驱动软件需要对CPU核进行动态切换,则将间接表查询模块的输出值加上Base_CPU_Number的值作为最终CPU核的结果。
与现有技术相比,本发明至少具有以下有益效果:
本发明一种针对多核处理器动态分组管理的Receive-side Scaling电路,通过配置寄存器动态的设置Base_CPU_Number值,实现了系统所有CPU核的分组管理,使得接收到的数据能够实时地得到最空闲CPU组的处理,从而提高了CPU核对网络数据的处理能力,动态地调节了数据接收时的性能,使网络吞吐达到最高状态,有效解决传统的RSS技术无法根据系统负载和网络处理性能实现对系统所有CPU核动态分组管理的问题。
进一步的,本发明有效解决了多核处理器系统中CPU核的动态分组管理,从而使得负载大的CPU核能够即时关闭,随后接收数据包的处理任务分配给负载小的CPU核,避免了某些CPU核因为负载大而引起丢帧的风险,从而动态地调节了数据接收时的处理性能,使网络吞吐达到最高状态。
进一步的,通过对本发明进行功能仿真,并与现有的RSS方法进行比较。在测试环境中,随机产生1000组报文,并分别采用现有的RSS电路和该发明提出的动态分组管理的RSS电路对这些报文任务进行处理;其中,Hash类型、Hash_Key以及间接表信息均相同。仿真结果表明,当CPU核数为4,Base_CPU_Number值配置为0,CPU0和CPU01的处理负载大时,可以动态的将Base_CPU_Number值配置为2,从而将接收数据包的处理任务由CPU0和CPU1切换到CPU2和CPU3;当CPU0和CPU1处理完任务而CPU2和CPU3的负载较重时,又可以动态的将Base_CPU_Number值配置为0,从而接收数据包的处理任务由CPU2和CPU3再切换到CPU0和CPU1,如此反复切换,从而提高了数据包处理任务的性能,避免了因为负载过大而引起丢帧。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为多核处理器系统动态分组管理的RSS电路总体结构框图;
图2为Hash_Function计算模块的结构框图;
图3为CPU0、CPU1和CPU2、CPU3切换结构图。
其中:1.TCP/IP头提取模块;2.Hash_Function模块;3.Hash_Mask模块;4.间接表查询模块;5.CPU_Result计算模块;6.RSS寄存器模块;7.提取内容分割模块;8.Key值分割模块;9.字节Hash计算模块;10.结果输出模块。
具体实施方式
本发明提供了一种针对多核处理器动态分组管理的Receive-side Scaling电路,上电后通过主机驱动程序对寄存器模块中的Base_CPU_Number值进行配置,并且在实时工作中,驱动程序可以根据CPU核的负载动态地修改相应的寄存器信息,实现了系统所有CPU核的分组管理,使得接收到的数据能够实时地得到最空闲CPU组的处理,提高了CPU核对网络数据的处理能力,从而达到动态的负载平衡。主机驱动程序可以通过配置Base_CPU_Number值对负载大的CPU核关闭,从而实现了多核处理器系统的动态分组管理,避免了数据帧的丢弃。
请参阅图1,本发明一种针对多核处理器动态分组管理的Receive-side Scaling电路,虚线内部结构为本发明所提出的针对多核处理器系统动态分组管理的RSS电路结构,包括TCP/IP头提取模块1、Hash_Function模块2、Hash_Mask模块3、间接表查询模块4、CPU_Result计算模块5和RSS寄存器模块6,虚线外部为与其连接的网络控制器中的MAC模块和RQP(Receive Queue Placement)模块。
其中,MAC模块依次经过TCP/IP头提取模块1、Hash_Function模块2、Hash_Mask模块3、间接表查询模块4、CPU_Result计算模块5与RQP(Receive Queue Placement)模块连接,RSS寄存器模块6分别与TCP/IP头提取模块1、Hash_Function模块2、Hash_Mask模块3、间接表查询模块4和CPU_Result计算模块5连接;
MAC模块为媒体接入控制模块,负责完成数据帧的封装、解封、发送和接收功能,RQP(Receive Queue Placement)模块为接收队列分配模块,将数据帧分配到不同的接收队列中。
TCP/IP头提取模块1的数量为1,主要功能是根据RSS寄存器模块6中的Hash类型寄存器的配置,对从MAC接收到的数据帧分别进行TCP/IP头的提取,并将提取结果发送到Hash_Function计算模块2。
TCP/IP头提取模块1支持四种Hash类型的TCP/IP头提取,分别为IPv4、带TCP头的IPv4、IPv6以及带TCP头的IPv6。
针对支持的4种Hash类型,下面给出具体的提取方式:
(1)带TCP头的IPv4帧
提取内容={源IPv4地址,目的IPv4地址,源端口地址,目的端口地址};
(2)IPv4帧
提取内容={源IPv4地址,目的IPv4地址};
(3)带TCP头的IPv6帧
提取内容={源IPv6地址,目的IPv6地址,源端口地址,目的端口地址};
(4)IPv6帧
提取内容={源IPv6地址,目的IPv6地址};
因为IPv4地址为64位,IPv6地址为256位,而端口地址均为16位,所以针对4种不同的Hash类型,其提取内容长度也不相同。具体说来,对于带TCP头的IPv4的数据帧和IPv4的数据帧,其提取内容长度分别为12bytes和8bytes;对于带TCP头的IPv6数据帧和IPv6数据帧的提取内容长度分别为36bytes和32bytes。
Hash_Function计算模块2的数量为1,主要功能是完成对TCP/IP头提取模块1提取内容的Hash结果计算。
Hash_Mask模块3的数量为1,主要功能是根据寄存器模块的配置值对Hash_Function计算模块2的输出结果进行有效位提取。
如果该值为1,则将Hash_Function计算模块输出结果的最低位输出给间接表查询模块;如果该值为7,则将Hash_Function计算模块输出结果的bit6-bit0输出给间接表查询模块;依次类推。
间接表查询模块4的数量为1,主要功能是根据输入Hash_Mask模块3的输出结果进行间接表查询,从而得到初始配置处理报文的CPU核。
间接表查询模块4根据Hash_Mask模块3的输出结果,进行相应的地址转换,然后用转换后的地址从RSS寄存器模块6中读出间接表信息并输出给CPU_Result计算模块5。从间接表中读出的信息是一组1位的数据,其值分别对应CPU0~CPU1,因此该RSS电路最多支持4个CPU核的系统。
CPU_Result计算模块5的数量为1,主要功能是根据间接表查询模块的结果和寄存器模块配置的Base_CPU_Number值计算出最终由哪个CPU核来对该报文进行处理。
如果Base_CPU_Number的值为0,则将间接表查询模块4的输出作为最终CPU核的结果;如果Base_CPU_Number的值为2,则说明主机驱动软件需要对CPU核进行动态切换,则将间接表查询模块4的输出值加上Base_CPU_Number的值作为最终CPU核的结果。
RSS寄存器模块6的数量为1,主要存储整个电路的配置信息。
配置信息包括Hash类型、Hash_Key、间接表和Base_CPU_Number。RSS寄存器模块6上电后由主机驱动程序进行配置,并且在实时工作中,驱动程序也可以根据系统负载动态地修改相应的寄存器信息,从而达到动态的负载平衡。
请参阅图2,Hash_Function计算模块2主要由1个提取内容分割模块7、1个Key值分割模块8、字节Hash计算模块9以及1个结果输出模块10构成;
提取内容分割模块7的数量为1,主要功能是根据RSS寄存器模块6中Hash类型寄存器的配置,判断出接收到的提取内容的长度,接着对接收到的提取内容进行分割。
Key值分割模块8的数量为1,主要功能是根据RSS寄存器模块6中Hash_Key寄存器的配置,获得相应的Key值,并对Key值进行分割。
字节Hash计算模块9的数量为36,主要功能是完成一个字节的Hash结果计算。
结果输出模块10的数量为1,主要功能是接收来自36个字节Hash计算模块的计算结果,并对36组32位的结果进行异或运算,输出32位的最终结果。
RSS技术中的Hash计算采用Toeplitz函数。下面详细介绍该模块是如何实现Hash_Function计算的。
首先,提取内容分割模块7根据RSS寄存器模块6中Hash类型寄存器的配置,判断出接收到的提取内容的长度,接着对接收到的提取内容进行分割。分割的方式为按照从数据最高位到最低位的方向,从数据的最高位开始,每连续8位分为一组,然后将分好的各组数据并行输出。
因为4种类型的提取内容长度不同,所以分组数也不相同。具体说来,对于带TCP头的IPv4数据帧的提取内容,其分组数为12组;对于IPv4数据帧的提取内容,其分组数为8组;对于带TCP头的IPv6数据帧的提取内容,其分组数为36组;对于IPv6数据帧的提取内容,其分组数为32组。
提取内容分割模块7最多支持36组数据的并行输出,对于分割组数不到36组的情况,指定剩余的组的输出值为全零。
同时,Key值分割模块8根据RSS寄存器模块6中Hash_Key寄存器的配置,获得相应的Key值,并对Key值进行分割。分割的方式为按照从Key值最高位到最低位的方向,从Key值的最高位开始,每间隔8位向后取40位Key值组成一组,然后将分好的各组Key值并行输出。
为了更准确、更清楚的描述Key值的分割方法和思想,下面以Key值为320位为例给出分割结果。当Key值为320位时(最高位在最左边),其各组分割结果为Key[319:279],Key[311:271],Key[303:263],Key[295:255],……,Key[48:8],Key[40:0]。对于带TCP头的IPv6数据帧,Key值有320位,对于带TCP头的IPv4数据帧,Key值有128位。因此Key值分割模块8也需要根据Hash类型寄存器的配置,读取出相应的Key值。
Key值分割模块8最多支持36组分割结果的并行输出。对于IPv6的320位Key值来说,按照上述分割方法,正好分割为36组;然而对于IPv4的128位的Key值,按照上述分割方法只能分割出11组。因此,对于分割组数不到36组的情况,指定剩余组的输出值为全零。
提取内容分割模块7和Key值分割模块8分别将分割后的结果按照一一对应的关系送入字节Hash_Function计算模块9,完成一个字节的Hash结果计算。一套计算结构中字节Hash计算模块共有36个,按照Toeplitz函数的算法完成对8位提取内容的计算。该模块由纯硬件电路实现,完成计算后将32位计算结果输送给结果输出模块。
结果输出模块10接收来自36个字节Hash计算模块的计算结果,并对36组32位的结果进行异或运算,输出32位的最终结果。
至此,Hash结果计算过程结束。
Hash_Function计算模块9通过硬件实现了Toeplitz函数的算法,并且通过对算法的分析,采用分割计算的方式,实现了并行的处理,提高了计算的速率。除此之外,对于分割组数不到36组的情况,指定剩余组的输出值为全零,有效的避免了设计中使能信号的产生,因为其计算结果必定为全零,因此在结果输出模块中,该结果对最终的结果没有产生任何影响。
实施例
本发明可用于具有RSS功能的网络控制器中,特别适用于需要根据系统负载和网络处理性能平衡网络数据吞吐率的多处理器系统,如服务器、测控系统中心机和Linux多核平台等。
采用本发明提出的针对多核处理器系统动态分组管理的RSS电路,可对现有的RSS技术做完全的兼容,在网络控制器的设计中可以完整地替代现有的RSS电路,同时实现多核处理器系统CPU核的分组管理和相互之间的动态切换,切换结构图如图3所示。
根据上述方案,用Verilog语言对本发明中各个模块的逻辑设计进行描述,并将其与网络控制器中的其它模块集成在一起,进行系统级的验证。验证结果表明,本发明实现了设计功能,且性能满足预期。
以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。
Claims (10)
1.一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,包括TCP/IP头提取模块(1)、Hash_Function模块(2)、Hash_Mask模块(3)、间接表查询模块(4)、CPU_Result计算模块(5)和RSS寄存器模块(6),TCP/IP头提取模块(1)连接有用于完成数据帧的封装、解封、发送和接收功能的MAC模块,CPU_Result计算模块(5)连接有用于将数据帧分配到不同的接收队列的RQP模块,RSS寄存器模块(6)分别与TCP/IP头提取模块(1)、Hash_Function模块(2)、Hash_Mask模块(3)、间接表查询模块(4)和CPU_Result计算模块(5)连接;
TCP/IP头提取模块(1)用于根据RSS寄存器模块(6)中的Hash类型寄存器的配置,对从MAC接收到的数据帧分别进行TCP/IP头的提取,并将提取结果发送到Hash_Function计算模块(2);
Hash_Function计算模块(2)用于完成对TCP/IP头提取模块(1)提取内容的Hash结果计算,并将结果发送给Hash_Mask模块(3);
Hash_Mask模块(3)用于根据寄存器模块的配置值对Hash_Function计算模块(2)的输出结果进行有效位提取,并发送给间接表查询模块(4);
间接表查询模块(4)用于对接收到的Hash_Mask模块(3)输出结果进行间接表查询,得到初始配置处理报文的CPU核;
CPU_Result计算模块(5)用于根据间接表查询模块(4)的结果和寄存器模块配置的Base_CPU_Number值计算出最终由哪个CPU核来对该报文进行处理;
RSS寄存器模块(6)用于存储整个电路的配置信息。
2.根据权利要求1所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,RSS寄存器模块(6)存储的配置信息包括Hash类型、Hash_Key、间接表和Base_CPU_Number。
3.根据权利要求1所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,TCP/IP头提取模块(1)支持IPv4、带TCP头的IPv4、IPv6以及带TCP头的IPv6四种Hash类型的TCP/IP头提取,具体的提取方式如下:
第一种、带TCP头的IPv4帧
提取内容={源IPv4地址,目的IPv4地址,源端口地址,目的端口地址};
第二种、IPv4帧
提取内容={源IPv(4)地址,目的IPv4地址};
第三种、带TCP头的IPv6帧
提取内容={源IPv6地址,目的IPv6地址,源端口地址,目的端口地址};
第四种、IPv6帧
提取内容={源IPv6地址,目的IPv6地址};
对于带TCP头的IPv4的数据帧和IPv4的数据帧,其提取内容长度分别为12bytes和8bytes;对于带TCP头的IPv6数据帧和IPv6数据帧的提取内容长度分别为36bytes和32bytes。
4.根据权利要求1所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,Hash_Function计算模块(2)包括提取内容分割模块(7)、Key值分割模块(8)、字节Hash计算模块(9)以及结果输出模块(10);
提取内容分割模块(7)用于根据RSS寄存器模块(6)中Hash类型寄存器的配置,判断出接收到的提取内容的长度,然后对接收到的提取内容进行分割;
Key值分割模块(8)用于根据RSS寄存器模块(6)中Hash_Key寄存器的配置,获得相应的Key值,并对Key值进行分割;
提取内容分割模块(7)和Key值分割模块(8)分别将分割后的结果按照一一对应的关系送入字节Hash计算模块(9)用于完成一个字节的Hash结果计算,字节Hash计算模块(9)共有36个,按照Toeplitz函数的算法完成对8位提取内容的计算,完成计算后将32位计算结果输送给结果输出模块(10);
结果输出模块(10)用于接收来自字节Hash计算模块(9)的计算结果,并对36组32位的结果进行异或运算,输出32位的最终结果。
5.根据权利要求4所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,提取内容分割模块(7)分割的方式为按照从数据最高位到最低位的方向,从数据的最高位开始,每连续8位分为一组,然后将分好的各组数据并行输出,对于带TCP头的IPv4数据帧的提取内容,其分组数为12组;对于IPv4数据帧的提取内容,其分组数为8组;对于带TCP头的IPv6数据帧的提取内容,其分组数为36组;对于IPv6数据帧的提取内容,其分组数为32组。
6.根据权利要求5所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,提取内容分割模块(7)最多支持36组数据的并行输出,对于分割组数不到36组的情况,指定剩余的组的输出值为全零。
7.根据权利要求4所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,Key值分割模块(8)分割的方式为按照从Key值最高位到最低位的方向,从Key值的最高位开始,每间隔8位向后取40位Key值组成一组,然后将分好的各组Key值并行输出,Key值分割模块(8)最多支持36组分割结果的并行输出;对于IPv6的320位Key值,分割为36组;对于IPv4的128位Key值,分割出11组,指定剩余组的输出值为全零。
8.根据权利要求1所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,当寄存器模块的配置值为1时,将Hash_Function计算模块(2)输出结果的最低位输出给间接表查询模块;当寄存器模块的配置值为7时,将Hash_Function计算模块(2)输出结果的bit6-bit0输出给间接表查询模块。
9.根据权利要1所述的一种针对多核处理器动态分组管理的Receive-side Scaling电路,其特征在于,间接表查询模块(4)根据接收的Hash_Mask模块(3)的输出结果,进行相应的地址转换,然后用转换后的地址从RSS寄存器模块(6)中读出间接表信息并输出给CPU_Result计算模块(5),从间接表中读出的信息是一组1位的数据,其值分别对应CPU0~CPU1。
10.根据权利要求1所述的一种针对多核处理器动态分组管理的Receive-sideScaling电路,其特征在于,CPU_Result计算模块(5)中,如果Base_CPU_Number的值为0,则将间接表查询模块(4)的输出作为最终CPU核的结果;如果Base_CPU_Number的值为2,则说明主机驱动软件需要对CPU核进行动态切换,则将间接表查询模块(4)的输出值加上Base_CPU_Number的值作为最终CPU核的结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711058105.2A CN107832149B (zh) | 2017-11-01 | 2017-11-01 | 一种针对多核处理器动态分组管理的Receive-side Scaling电路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711058105.2A CN107832149B (zh) | 2017-11-01 | 2017-11-01 | 一种针对多核处理器动态分组管理的Receive-side Scaling电路 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107832149A true CN107832149A (zh) | 2018-03-23 |
CN107832149B CN107832149B (zh) | 2020-05-12 |
Family
ID=61650359
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711058105.2A Active CN107832149B (zh) | 2017-11-01 | 2017-11-01 | 一种针对多核处理器动态分组管理的Receive-side Scaling电路 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107832149B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109451045A (zh) * | 2018-12-12 | 2019-03-08 | 成都九洲电子信息系统股份有限公司 | 一种可配置自定义以太头的高速报文采集网卡控制方法 |
CN111131078A (zh) * | 2019-12-24 | 2020-05-08 | 北京天融信网络安全技术有限公司 | 报文散列方法、装置、fpga模组及处理器模组 |
US20220006713A1 (en) * | 2018-11-27 | 2022-01-06 | Nippon Telegraph And Telephone Corporation | Traffic monitoring method, traffic monitoring device, and program |
CN115225430A (zh) * | 2022-07-18 | 2022-10-21 | 中安云科科技发展(山东)有限公司 | 一种高性能IPsec VPN CPU负载均衡方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100284404A1 (en) * | 2009-05-05 | 2010-11-11 | Sandhya Gopinath | Systems and methods for packet steering in a multi-core architecture |
US20100322076A1 (en) * | 2009-06-22 | 2010-12-23 | Deepak Goel | Systems and methods for retaining source ip in a load balancing multi-core environment |
CN105915462A (zh) * | 2016-06-03 | 2016-08-31 | 中国航天科技集团公司第九研究院第七七研究所 | 一种面向tcp会话的对称性rss电路 |
-
2017
- 2017-11-01 CN CN201711058105.2A patent/CN107832149B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100284404A1 (en) * | 2009-05-05 | 2010-11-11 | Sandhya Gopinath | Systems and methods for packet steering in a multi-core architecture |
US20100322076A1 (en) * | 2009-06-22 | 2010-12-23 | Deepak Goel | Systems and methods for retaining source ip in a load balancing multi-core environment |
CN105915462A (zh) * | 2016-06-03 | 2016-08-31 | 中国航天科技集团公司第九研究院第七七研究所 | 一种面向tcp会话的对称性rss电路 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220006713A1 (en) * | 2018-11-27 | 2022-01-06 | Nippon Telegraph And Telephone Corporation | Traffic monitoring method, traffic monitoring device, and program |
US11641315B2 (en) * | 2018-11-27 | 2023-05-02 | Nippon Telegraph And Telephone Corporation | Traffic monitoring method, traffic monitoring device, and program |
CN109451045A (zh) * | 2018-12-12 | 2019-03-08 | 成都九洲电子信息系统股份有限公司 | 一种可配置自定义以太头的高速报文采集网卡控制方法 |
CN111131078A (zh) * | 2019-12-24 | 2020-05-08 | 北京天融信网络安全技术有限公司 | 报文散列方法、装置、fpga模组及处理器模组 |
CN111131078B (zh) * | 2019-12-24 | 2022-09-16 | 北京天融信网络安全技术有限公司 | 报文散列方法、装置、fpga模组及处理器模组 |
CN115225430A (zh) * | 2022-07-18 | 2022-10-21 | 中安云科科技发展(山东)有限公司 | 一种高性能IPsec VPN CPU负载均衡方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107832149B (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104050143B (zh) | 向混合可编程多核器件映射网络应用 | |
CN108809854B (zh) | 一种用于大流量网络处理的可重构芯片架构 | |
CN107832149A (zh) | 一种针对多核处理器动态分组管理的Receive‑side Scaling电路 | |
CN105915462B (zh) | 一种面向tcp会话的对称性rss电路 | |
US20170237672A1 (en) | Network server systems, architectures, components and related methods | |
CN108833299B (zh) | 一种基于可重构交换芯片架构的大规模网络数据处理方法 | |
CN103946803B (zh) | 具有高效工作排队的处理器 | |
US20080002702A1 (en) | Systems and methods for processing data packets using a multi-core abstraction layer (MCAL) | |
US20150127649A1 (en) | Efficient implementations for mapreduce systems | |
US20080002681A1 (en) | Network wireless/RFID switch architecture for multi-core hardware platforms using a multi-core abstraction layer (MCAL) | |
CN112929299B (zh) | 基于fpga加速卡的sdn云网络实现方法、装置及设备 | |
US9900090B1 (en) | Inter-packet interval prediction learning algorithm | |
US11700209B2 (en) | Multi-path packet descriptor delivery scheme | |
US8825927B2 (en) | Systems and methods for managing queues | |
CN107431666A (zh) | 用于在数据中心网络环境中实现低时延的技术 | |
CN106603409B (zh) | 一种数据处理系统、方法及设备 | |
EP3672172A1 (en) | Allocation of processors for processing packets | |
WO2008005793A2 (en) | Systems and methods for processing data packets using a multi-core abstraction layer (mcal) | |
CN107911349A (zh) | 一种面向UDP传输的对称性Receive‑side Scaling电路 | |
CN114328623A (zh) | 芯片系统中的数据传输处理方法及相关装置 | |
US9344384B2 (en) | Inter-packet interval prediction operating algorithm | |
CN110297785A (zh) | 一种基于fpga的金融数据流控装置和流控方法 | |
CN112995245B (zh) | 一种基于fpga的可配置负载均衡系统与方法 | |
CN115756296A (zh) | 缓存管理方法和装置、控制程序及控制器 | |
Zhao et al. | High-performance implementation of dynamically configurable load balancing engine on FPGA |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |