CN107220187A - 一种缓存管理方法、装置及现场可编程门阵列 - Google Patents
一种缓存管理方法、装置及现场可编程门阵列 Download PDFInfo
- Publication number
- CN107220187A CN107220187A CN201710364480.3A CN201710364480A CN107220187A CN 107220187 A CN107220187 A CN 107220187A CN 201710364480 A CN201710364480 A CN 201710364480A CN 107220187 A CN107220187 A CN 107220187A
- Authority
- CN
- China
- Prior art keywords
- data
- queue
- buffer
- buffer storage
- cache
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供一种缓存管理方法、装置及现场可编程门阵列,涉及数据缓存技术领域。用于提高缓存***的带宽。该方法包括:在收到入队报文时,根据预设分片大小和入队报文的长度将入队报文切割为至少一个数据分片;向各数据分片分配数据缓存通道号;根据向数据分片分配的数据缓存通道号将数据分片分发至对应的数据缓存通道的数据缓存控制器;在数据缓存控制器的控制下将数据分片写入对应的数据缓存;接收数据缓存返回的缓存地址和缓存长度,并根据向数据分片分配的数据缓存通道号以及数据缓存返回的缓存地址和缓存长度生成各数据分片的缓存描述符;将各数据分片的缓存描述符写入BD缓存。本发明用于缓存管理。
Description
技术领域
本发明涉及数据缓存技术领域,尤其涉及一种缓存管理方法、装置及现场可编程门阵列。
背景技术
随着信息技术和网络技术的发展,缓存技术逐渐成为一个热门且不可或缺的领域,缓存技术指可以进行高速数据交换,因此缓存技术对***的响应速度有很大的提高。然而,传统的缓存装置的存储容量通常是有限的,使得其存储的内容也较有限,因此对缓存进行管理是本领域一个热点研究问题。
参照图1所示,现有技术中的缓存***包括:数据包输入电路11、缓存接口电路12、链表管理电路13、调度电路14、数据输出电路15、数据缓存16以及链表存储器17。图1所示缓存***的缓存管理过程为:将数据缓存16切片为多个固定大小的存储单元(例如:512B);当收到数据包时,若接收到的数据包小于或等于一个存储单元的大小(例如:256B),则该数据包占用一个独立的存储单元,而若接收到的数据包大于一个存储单元的大小(例如:2KB),则将数据包切割为多个数据分片(例如:将2KB的数据包切割为大小为:512B的四个数据分片),然后通过缓存接口电路12将多个数据分片分别存储在一个存储单元中,并通过链表管理电路13将存储多个数据分片的存储单元组成链表发送至调度电路14和链表存储器17,从而完成数据包的写入;当需从数据缓存16中读取数据包时,调度电路14根据链表存储器17中的链表信息从对应的存储单元中读取数据,同时数据缓存14回收对应的存储单元,通过数据输出电路15将读取的数据分片拼接为一个完整的数据包后输出,从而完成数据包的读取。
虽然上述缓存管理***可以使任意数量的队列的性能都十分接近,但是上述缓存***提供的带宽极其有限。具体的,64bit带宽DDR4工作在2400Mbps的速率时,物理带宽仅有153Gbps,并且64bit位宽的DDR控制器64字节短包的带宽利用率非常低,仅有20%左右,其能提供的实际双向带宽仅有153*0.2=30.72Gbps,单向仅约为15Gbps。
发明内容
本发明的实施例提供一种缓存管理方法、装置及现场可编程门阵列,用于提高缓存***的带宽。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,一种缓存管理方法,用于对缓存***进行管理,所述缓存***中包括多个数据缓存通道,任一数据缓存通道包括一数据缓存和一数据缓存控制器,且各数据缓存通道具有唯一的数据缓存通道号;所述方法包括:
在收到入队报文时,根据预设分片大小和所述入队报文的长度将所述入队报文切割为至少一个数据分片;
向各所述数据分片分配所述数据缓存通道号;
根据向所述数据分片分配的数据缓存通道号将数据分片分发至对应的所述数据缓存通道的数据缓存控制器;
在所述数据缓存控制器的控制下将所述数据分片写入对应的数据缓存;
接收所述数据缓存返回的缓存地址和缓存长度,并根据向数据分片分配的数据缓存通道号以及所述数据缓存返回的缓存地址和缓存长度生成各数据分片的缓存描述符;
将各数据分片的缓存描述符写入BD缓存。
可选的,所述向各所述数据分片分配所述数据缓存通道号,包括:
将多个所述数据缓存通道号轮转向各所述数据分片分配。
可选的,所述方法还包括:
上电时分别向各队列随机分配一个数据缓存通道号作各队列的当前状态的数据缓存通道号;
在将多个所述数据缓存通道号轮转向各所述数据分片分配后,将所述入队报文所属的队列的当前状态的数据缓存通道号更新为轮转结束时的数据缓存通道号之后的下一个数据缓存通道号;
所述将多个所述数据缓存通道号轮转向各所述数据分片分配,包括:
由所述入队报文所属的队列的当前状态的数据缓存通道号开始将多个所述数据缓存通道号轮转向各所述数据分片分配。
可选的,任一所述数据缓存包括多个内存库,任一所述内存库中包括:一回收区和一未使用区域;其中,所述回收区用于存放回收的缓存空间的缓存地址,所述未使用区域用于存放未使用的缓存空间的缓存地址;所述在所述数据缓存控制器的控制下将所述数据分片写入对应的数据缓存,包括:
控制所述数据缓存中的多个内存库轮转向所述数据分片分配缓存地址;
判断各所述数据分片的数据缓存通道号对应的数据缓存的内存库的回收区是否具有缓存地址;
若是,则从回收区取出一个缓存地址向所述数据分片分配;
若否,则从未使用区取出一个缓存地址向所述数据分片分配;
在所述数据缓存控制器的控制下将数据分片写入向其分配的缓存地址所指示的缓存空间。
可选的,所述缓存***包括多个BD缓存通道,任一所述BD缓存通道包括一BD缓存控制器和一BD缓存;
所述将各数据分片的缓存描述符写入BD缓存,包括:
根据各数据分片在所述入队报文中的顺序对各数据分片的数据缓存通道号进行排序;
各BD缓存通道的BD缓存控制器根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存。
可选的,所述各BD缓存通道的BD缓存控制器根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存,包括:
按照预设缓存大小将所述多个BD缓存分割为多个缓存块;
向各所述队列分配所述缓存块、首端缓存地址和尾端缓存地址,并记录向各所述队列分配的首端缓存地址和尾端缓存地址;其中,向不同队列分配的缓存块不同,任一队列的首端缓存地址和尾端缓存地址所指示的缓存空间为向该队列分配的缓存块中的同一个缓存空间;
接收到缓存描述符时,获取第一队列的首端缓存地址;所述第一队列为接收到的缓存描述符所属的数据分片所属的入队报文所属的队列;
将接收到的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间;
判断第一缓存块剩余的缓存空间是否小于或等于一个缓存描述符的大小;所述第一缓存块为向第一队列分配的缓存块;
若否,则将第一队列的首端缓存地址更新为所述第一缓存块中首端缓存地址后的下一个缓存地址;
若是,则向所述第一队列分配第二缓存块,将所述第二缓存块的缓存块地址写入第一缓存块,将所述第一队列的首端缓存地址更新为第二缓存块中的第一个缓存地址;
根据各数据分片的数据缓存通道号的顺序依次将各数据分片的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间。
可选的,所述方法还包括:
在向所述第一队列分配第二缓存块时,将所述多个BD缓存中的缓存块轮转向所述第一队列分配。
可选的,所述方法还包括:
接收出队命令;所述出队命令用于指示将出队报文从所述数据缓存中调出,所述出队命令包括所述出队报文的队列信息;
根据所述出队报文的队列信息获取第二队列;所述第二队列为所述出队报文所属的队列;
获取所述第二队列的尾端缓存地址;
读出所述第二队列的尾端缓存地址所指示的缓存空间中的缓存描述符;
判断第三缓存块中的缓存描述符是否已经全部取出;所述第三缓存块为所述第二队列的尾端缓存地址所指示的缓存空间所述的缓存块;
若否,则将所述第二队列的尾端缓存地址更新为所述第三缓存块中尾端缓存地址后的下一个缓存地址;
若是,则获取第三缓存块中的缓存块地址,并将所述第二队列的尾端缓存地址更新为向所述第三缓存块中的缓存块地址所指示的缓存块中的第一个缓存地址;
根据所述第二队列的入队信息获取所述出队报文的包含的数据分片的数量;
判断从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于所述出队报文包含的数据分片的数量;
若是,将各从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符分发至对应数据缓存通道的数据缓存控制器;
在所述数据缓存控制器的控制下根据从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符从对应的数据缓存中读取数据分片;
按照已读出的各缓存描述符中的数据缓存通道号的顺序依次将各数据分片输出。
可选的,所述方法还包括:
记录各数据缓存的累计写入数据量和累计读取数据量;
在任一数据缓存为空闲状态时,当该数据缓存的累计读取数据量为零或者累计读取数据量大于预设数据量且检测到有数据分片需要写入时,该数据缓存跳转至写入状态并将累计读取数据量清零;当该数据缓存的累计写入数据量为零且需要读取数据分片时,该数据缓存跳转至读取状态并将累计写入数据量清零;
在任一数据缓存为写入状态时,判断该数据缓存的累计写入数据量是否大于预设数据量,当该数据缓存的累计写入数据量大于预设数据量,则该数据缓存跳转至空闲状态;
在任一数据缓存为读取状态时,判断该数据缓存的累计读取数据量是否大于预设数据量,当该数据缓存的累计读取数据量大于预设数据量,则该数据缓存跳转至空闲状态。
第二方面,提供一种缓存管理装置,用于对缓存***进行管理,所述缓存***中包括多个数据缓存通道,任一数据缓存通道包括一数据缓存和一数据缓存控制器,各数据缓存通道具有唯一的数据缓存通道号;所述缓存管理装置包括:
入队数据切片电路,用于在收到入队报文时,根据预设分片大小和所述入队报文的长度将所述入队报文切割为至少一个数据分片;
数据缓存通道号查询电路,用于向各所述数据分片分配所述数据缓存通道号;
入队分发电路,用于根据向数据分片分配的数据缓存通道号将数据分片分发至对应的所述数据缓存通道的数据缓存控制器;
数据缓存控制器,用于将所述数据分片写入对应的数据缓存;
链表管理电路,用于接收所述数据缓存返回的缓存地址和缓存长度,以及根据向数据分片分配的数据缓存通道号以及所述数据缓存返回的缓存地址和缓存长度生成各数据分片的缓存描述符;
BD缓存控制器,用于将各数据分片的缓存描述符写入BD缓存。
可选的,所述缓存***包括多个BD缓存通道,任一所述BD缓存通道包括一BD缓存控制器和一BD缓存;所述缓存管理装置还包括:分片地址重排序电路;
所述分片地址重排序电路用于根据各数据分片在所述入队报文中的顺序对各数据分片的数据缓存通道号进行排序;
各BD缓存通道的BD缓存控制器用于根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存。
可选的,所述BD缓存控制器具体用于按照预设缓存大小将所述多个BD缓存分割为多个缓存块;向各所述队列分配所述缓存块,并向各队列分配首端缓存地址;其中,向不同队列分配的缓存块不同,任一队列的首端缓存地址所指示的缓存空间向该队列分配的缓存块;接收到缓存描述符时,获取第一队列的首端缓存地址;所述第一队列为接收到的缓存描述符所属的数据分片所属的入队报文所属的队列;将接收到的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间,并将向第一队列分配的首端缓存地址记录为第一队列的尾端缓存地址;判断第一缓存块剩余的缓存空间是否小于或等于一个缓存描述符的大小;所述第一缓存块为向第一队列分配的缓存块;若否,则将第一队列的首端缓存地址更新为所述第一缓存块中首端缓存地址后的下一个缓存地址;若是,则向所述第一队列分配第二缓存块,将所述第二缓存块的缓存块地址写入第一缓存块,以及所述第一队列的首端缓存地址更新为第二缓存块中的第一个缓存地址;根据各数据分片的数据缓存通道号的顺序依次将各数据分片的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间。
可选的,所述缓存***还包括:调度单元,
所述调度单元用于记录各队列的入队信息,接收出队命令,根据所述出队报文的队列信息获取第二队列,根据所述第二队列的入队信息获取所述出队报文的包含的数据分片的数量;
所述缓存管理装置还包括:出队分发电路和出队数据重组电路;
所述链表管理电路还用于获取所述第二队列的尾端缓存地址并将所述第二队列的尾端缓存地址分发至所述BD缓存控制器;其中,所述出队命令用于指示将出队报文从所述数据缓存中调出,所述出队命令包括所述出队报文的队列信息;所述第二队列为所述出队报文所属的队列;
所述BD缓存控制器还用于读出所述第二队列的尾端缓存地址所指示的缓存空间中缓存描述符;判断第三缓存块中的缓存描述符是否已经全部取出;若否,则将所述第二队列的尾端缓存地址更新为所述第三缓存块中尾端缓存地址后的下一个缓存地址;若是,则获取第三缓存块中的缓存块地址,并将所述第二队列的尾端缓存地址更新为向所述第三缓存块中的缓存块地址所指示的缓存块中的第一个缓存地址;所述第三缓存块为所述第二队列的尾端缓存地址所指示的缓存空间所述的缓存块;判断从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于根据所述出队报文的长度信息获取所述出队报文包含的数据分片的数量;
所述出队分发电路,用于判断从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于根据所述出队报文的长度信息获取所述出队报文包含的数据分片的数量以及在从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量等于根据所述出队报文的长度信息获取所述出队报文包含的数据分片的数量时将各从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符分发至对应数据缓存通道的数据缓存控制器;
所述数据缓存控制器还用于根据从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符从对应的数据缓存中读取数据分片;
所述出队数据重组电路,用于按照已读出的各缓存描述符中的数据缓存通道号的顺序依次将各数据分片输出。
第三方面,提供一种现场可编程门阵列,包括:第二方面任一项所述的缓存管理装置。
本发明的实施例提供的缓存管理方法用于对缓存***进行管理,其中,缓存***中包括多个数据缓存通道,任一数据缓存通道包括一数据缓存和一数据缓存控制器,在接收到入队报文且将入队报文切割问数据分片后,首先根据向数据分片分配的数据缓存通道号将数据分片分发至对应的数据缓存通道的数据缓存控制器,然后再在数据缓存控制器的控制下将数据分片写入对应的数据缓存;即各数据缓存通道中的数据缓存控制器独立控制数据缓存通道中的数据缓存的数据写入,由于本发明提供的缓存管理方法提供了多个独立的数据缓存通道,所以相比于单个数据缓存通道,本发明实施例可以提供更高的带宽,且相比将多个缓存通道中的缓存地址统一分配管理,本发明实施例可以最大化每个缓存通道的带宽利用率,所以本发明实施例提供的缓存管理方法可以提高缓存***的带宽。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中的缓存***的示意性结构图;
图2为本发明实施例提供的缓存管理方法的硬件框架图之一;
图3为本发明实施例提供的缓存管理方法的步骤流程图之一;
图4为本发明实施例提供的伪随机码生成电路的示意图;
图5为本发明实施例提供的随机码生成模块的电路图;
图6为本发明实施例提供的数据缓存的示意性结构图;
图7为本发明实施例提供的数据缓存的状态机轮转图之一;
图8为本发明实施例提供的缓存管理方法的硬件框架图之二;
图9为本发明实施例提供的缓存管理方法的硬件框架图之三;
图10为本发明实施例提供的缓存管理方法的步骤流程图之二;
图11为本发明实施例提供的BD链表的示意性结构图;
图12为本发明实施例提供的缓存管理方法的步骤流程图之三;
图13为本发明实施例提供的数据缓存的状态机轮转图之二;
图14为本发明实施例提供的缓存管理方法的硬件框架图之四。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
以下首先对本发明实施例提供的缓存管理方法的应用场景的总体硬件框架作简要说明。
参照图2所示,本发明实施例提供的缓存管理方法的应用场景的硬件包括:位于现场可编程门阵列(英文名称:Field Programmable Gate Array,简称:FPGA)内部的数据切片电路201、数据缓存通道号查询电路202、入队分发电路203、分片地址重排序电路204、链表管理电路205、多个缓存描述符(英文名称:Buffer Description,简称:BD)缓存控制器206(图2中以包括2个BD缓存控制器为例进行说明)、出队分发电路207、多个数据缓存控制器208(图2中以包括4个数据缓存控制器为例进行说明)以及出队数据重组电路209、位于FPGA外部的与多个数据缓存控制器208一一对应的数据缓存210、与BD缓存控制器206一一对应的BD缓存211以及调度单元212。
上述硬件框架中各个单元、模块以及电路的连接关系为:数据切片电路201连接数据缓存通道号查询电路202;数据缓存通道号查询电路202连接入队分发电路203;入队分发电路203分别与连接多个数据缓存控制器208连接且与分片地址重排序电路204连接;分片地址重排序电路204电路连接链表管理电路205;链表管理电路205分别与多个BD缓存控制器206连接且连接调度单元212;出队分发电路207分别与连接多个数据缓存控制器208连接且与调度单元212连接;出队数据重组电路209分别连接多个数据缓存控制器208;多个数据缓存控制器208还分别与一个数据缓存210连接形成一个数据缓存通道;多个BD缓存控制器206还分别与一个BD缓存211连接形成一个BD缓存通道。
上述硬件框架中各个单元、模块以及电路的主要功能为:
入队数据切片电路201:将输入的各个队列的报文切割为固定大小的数据分片。
数据缓存通道号查询电路202:查询各队列的初始数据缓存通道号,并根据各队列的初始数据缓存通道号为各队列的数据分片分配数据缓存通道号。
入队分发电路203:根据各数据分片的数据缓存通道号将各数据分片分发至各数据缓存通道上,并接收数据缓存210为数据分片分配的缓存地址以及将数据缓存210为数据分片分配的缓存地址发送至分片地址重排序电路204。
分片地址重排序电路204:根据向数据分片分配的数据缓存通道号对各数据分片的缓存地址进行重排序,从而保证数据分片的缓存地址的顺序与数据分片在报文中的顺序相同。
链表管理电路205:管理各个队列的首端缓存地址和尾端缓存地址;根据向数据分片分配的数据缓存通道号以及数据缓存210返回的缓存地址和缓存长度生成各数据分片的BD,根据各数据分片的BD组成BD链表;并将各个队列的入队信息提交给调度单元。
BD缓存控制器206:对FPGA外部存储BD的BD缓存的读写操作进行管理。
出队分发电路207:将调度单元212输入的各队列的入队信息分发给对应通道的数据缓存控制器208。
数据缓存控制器208:对数据缓存的读写操作进行管理以及数据分片的缓存地址的分配与回收。
数据缓存210:存储各队列的数据分片。
BD缓存211:储存各数据分片的BD。
调度单元212:记录各队列的入队信息,按照流量管理(英文名称:TrafficManagement,简称:TM)的调度策略和配置,完成各个队列的调度出队,将调度出队信息提交给出队命令分发电路207。
基于上述硬件框架,本发明的实施例提供了一种缓存管理方法,该缓存管理方法用于对缓存***进行管理,如上图2所示,该缓存***中包括多个数据缓存通道,任一数据缓存通道包括一数据缓存和一数据缓存控制器,且各数据缓存通道具有唯一的数据缓存通道号。具体的,参照图3所示,本发明实施例提供的缓存管理方法包括如下步骤:
S31、在收到入队报文时,根据预设分片大小和入队报文的长度将入队报文切割为至少一个数据分片。
其中,预设分片大小可以根据实际应用场景进行设定,本发明实施例中对预设分片具体值不做限定。示例性的,预设分片大小可以为:128B、256B、512B等。
示例性的,当预设分片大小为256B、入队报文的长度为1518B时,由于1518B/256B=5余238B;因此将入队报文切割为6个数据分片,且该6个数据分片的大小依次为:256B、256B、256B、256B、256B、238B。
示例性的,当预设分片大小为256B、入队报文的长度为125B时,将入队报文切割为1个数据分片,且该1个数据分片的大小为125B。
S32、向各数据分片分配数据缓存通道号。
可选的,上述步骤S32中向各数据分片分配数据缓存通道号具体可以通过如下方式来实现:
a、上电时分别向各队列随机分配一个数据缓存通道号作各队列的当前状态的数据缓存通道号。
b、从各队列的当前状态的数据缓存通道号开始将多个所述数据缓存通道号轮转向各所述数据分片分配
c、在将多个所述数据缓存通道号轮转向各所述数据分片分配后,将所述入队报文所属的队列的当前状态的数据缓存通道号更新为轮转结束时的数据缓存通道号之后的下一个数据缓存通道号。
上述方法中在***上电时为每一个队列随机分配一个数据缓存通道号作为该队列的当前状态的数据缓存通道号,并由入队报文所属的队列的当前状态的数据缓存通道号开始将各数据缓存通道号轮转向各数据分片分配,所以上述方法可以避免所有队列都从同一个数据缓存通道开始存放数据分片,进而可以避免部分数据缓存通道过载,而部分数据缓存通道空闲的情况,因此上述方法可以提高数据缓存的效率。
示例性的,以下以缓存***中共包括8个数据缓存通道,且该8个数据缓存通道的数据换缓存通道号分别为0、1、2、3、4、5、6、7;队列0、队列1、队列2、队列3具有输入入队报文为例对上述实施例的原理进行说明。
首先,若在上电时不向各队列随机分配当前状态的数据缓存通道号,各队列的当前状态的数据缓存通道号相同,则会出现如下状况:
队列0的当前状态的数据缓存通道号被设置为0,队列0的入队报文切割为4个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该4个数据分片的通道号分别为0、1、2、3。
队列1的当前状态的数据缓存通道号被设置为0,队列1的入队报文切割为1个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该1个数据分片的通道号分别为0。
队列2的当前状态的数据缓存通道号被设置为0,队列2的入队报文切割为2个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该2个数据分片的通道号分别为0、1。
队列3的当前状态的数据缓存通道号被设置为0,队列3的入队报文切割为10个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该10个数据分片的通道号分别为0、1、2、3、4、5、6、7、0、1。
此时,如下表1所示,各数据缓存通道被使用的次数为:
数据缓存通道号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
被使用次数 | 5 | 4 | 2 | 2 | 1 | 1 | 1 | 1 |
表1
在上实施例中,若在上电时为每一个队列随机分配一个数据缓存通道号作为该队列的当前状态的数据缓存通道号,则会出现如下状况:
队列0的当前状态的数据缓存通道号随机化为3,队列0的入队报文切割为4个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该4个数据分片的通道号分别为3、4、5、6。
队列1的当前状态的数据缓存通道号随机化为0,队列1的入队报文切割为1个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该1个数据分片的通道号分别为0。
队列2的当前状态的数据缓存通道号随机化为7,队列2的入队报文切割为2个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该2个数据分片的通道号分别为7、0。
队列3的当前状态的数据缓存通道号随机化为4,队列3的入队报文切割为10个数据分片,将各数据缓存通道号轮转向各数据分片分配,那么向该10个数据分片的通道号分别为4、5、6、7、0、1、2、3、4、5。
此时,如下表2所示,各数据缓存通道被使用的次数为:
数据缓存通道号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
被使用次数 | 3 | 1 | 1 | 2 | 3 | 3 | 2 | 2 |
表2
通过对比上述表1和表2可得知,上电时为每一个队列随机分配一个数据缓存通道号作为该队列的当前状态的数据缓存通道号,并由入队报文所属的队列的当前状态的数据缓存通道号开始将各数据缓存通道号轮转向各数据分片分配,可以使各数据缓存通道的利用率均衡,进而可以避免部分数据缓存通道过载,而部分数据缓存通道空闲的情况。
进一步的,本发明实施例可以通过伪随机码生成电路来为各队列分配当前状态的数据缓存通道号,且在向各队列随机分配当前状态的数据缓存通道号后可以通过静态随机存取存储器(英文名称:Static Random Access Memory,简称:SRAM)来存储各队列的当前状态的数据缓存通道号。
示例性的,参照图4所示,伪随机码生成电路包括:随机码生成模块41和静态随机存取存储器42。其中,随机码生成模块41的写入使能端PORTNUM_WR_EN连接静态随机存取存储器42的写入使能端WR_EN;随机码生成模块41的写入数据输出端PORTNUM_WR_DIN连接静态随机存取存储器42的写入数据输入端WR_DIN;随机码生成模块41的写入地址输出端PORTNUM_WR_ADDR与静态随机存取存储器42的写入地址输入端WR_ADDR。此外,静态随机存取存储器42还包括:读取使能端RD_EN、读取数据输出端RD_DIN以及读取地址输出端ED_ADDR。
本发明实施例还提供了一种随机码生成模块的电路图。具体的,参照图5所示,随机码生成模块的具体电路包括:4个异或逻辑运算单元411、8个触发器412(分别为a0、a1、a2、a0、a3、a4、a5、a6、a7)、1个计数器413、1个比较器414以及1个与逻辑运算单元415。其中,与逻辑运算单元415的输出端为随机码生成模块41的写入数据输出端PORTNUM_WR_DIN,比较器414的输出端为随机码生成模块41的写入地址输出端PORTNUM_WR_ADDR,计数器413的输出端为随机码生成模块41的写入使能端PORTNUM_WR_EN。
图5所示随机码生成模块41的电路的多项表达式为:
f(x)=1+x2+x3+x4+x8
示例性的,假设上述伪随机码生成电路应用于数据缓存通道号为8个、队列书为64K的应用场景时,静态随机存取存储器的设计选取深度M=64K,宽度N=3(23=8),因此对静态随机存取存储器选取a0、a1、a2 3个触发器输出的抽头系数进行存储即可。
进一步的,在上述步骤S32由入队报文所属的队列的当前状态的数据缓存通道号开始轮转将多个数据缓存通道号轮转向各数据分片分配之后,方法还包括:
将入队报文所属的队列的当前状态的数据缓存通道号更新为轮转结束时的数据缓存通道号之后的下一个数据缓存通道号。
示例性的,缓存***中共包括8个数据缓存通道,且该8个数据缓存通道的数据换缓存通道号分别为0、1、2、3、4、5、6、7,向队列0的四个数据分片分配的数据缓存通道号分别为3、4、5、6,则将队列0的当前状态的数据缓存通道号更新为数据缓存通道号6后的下一个数据缓存通道号7;向队列1的一个数据分片分配的数据缓存通道号为0,则将队列1的当前状态的数据缓存通道号更新为数据缓存通道号0后的下一个数据缓存通道号1;向队列2的两个数据分片分配的数据缓存通道号分别为7、0,则将队列2的当前状态的数据缓存通道号更新为数据缓存通道号0后的下一个数据缓存通道号1;向队列3的十个数据分片分配的数据缓存通道号分别为4、5、6、7、0、1、2、3、4、5,则将队列3的当前状态的数据缓存通道号更新为数据缓存通道号5后的下一个数据缓存通道号6。
S33、根据向数据分片分配的数据缓存通道号将数据分片分发至对应的数据缓存通道的数据缓存控制器。
示例性的,队列4的入队报文切割为四个数据分片(数据分片0、数据分片1、数据分片2、数据分片3、),且向该四个数据分片分配的数据缓存通道号分别为:3、4、5、6,则将数据分片0分发至数据缓存通道3的数据缓存控制器208、将数据分片1分发至数据缓存通道4的数据缓存控制器208、将数据分片2分发至数据缓存通道5的数据缓存控制器208、将数据分片3分发至数据缓存通道6的数据缓存控制器208。
S34、在数据缓存控制器的控制下将数据分片写入对应的数据缓存。
如上,若将数据分片0分发至数据缓存通道3的数据缓存控制器208、将数据分片1分发至数据缓存通道4的数据缓存控制器208、将数据分片2分发至数据缓存通道5的数据缓存控制器208、将数据分片3分发至数据缓存通道6的数据缓存控制器208,则在数据缓存通道3的数据缓存控制器208的控制下将数据分片0写入数据缓存通道3的数据缓存210中,在数据缓存通道4的数据缓存控制器208的控制下将数据分片1写入数据缓存通道4的数据缓存210中,在数据缓存通道5的数据缓存控制器208的控制下将数据分片2写入数据缓存通道5的数据缓存210中,在数据缓存通道6的数据缓存控制器208的控制下将数据分片3写入数据缓存通道6的数据缓存210中。
示例性的,数据缓存可以为***双倍速率同步动态随机存储器(英文名称:Double Data Rate Synchronous Dynamic Random Access Memory 4,简称:DDR SDRAM4或者DDR4)。
通常,DDR4的存储空间按照固定大小划分为无数个小的存储空间。且DDR4在缓存较短的数据包时的效能很低,而且在其读写状态切换越频繁其效能越低;此外,DDR4在同一个内存库(英文名称:bank)内换行的时候效能会急剧下降,为了解决数据缓存效能低的问题,本发明进一步提供了如下几种用于实现上述步骤S34的方法。
参照图6所示,任一数据缓存210包括多个内存库(图6中以一个数据缓存210中包括4个内存库,且4个内存库分别为:bank0、bank1、bank2、bank3为例进行说明),任一内存库中包括:一回收区和一未使用区域;其中,回收区用于存放回收的缓存空间的缓存地址,未使用区域用于存放未使用的缓存空间的缓存地址;上述步骤S36中在数据缓存控制器的控制下将数据分片写入对应的数据缓存,包括:
控制数据缓存中的多个内存库轮转向数据分片分配缓存地址。
本发明实施例中的轮转是指轮流、循环。具体的,多个内存库轮转向数据分片分配缓存地址是指,由多个内存库中的一个开始依次向数据分片分配缓存地址,当多个内存库中的最后一个内存库向数据分片分配缓存地址后,再次从多个内存库中的第一个内存库开始依次向数据分片分配缓存地址。
判断各数据分片的数据缓存通道号对应的数据缓存的内存库的回收区是否具有缓存地址;
若是,则从回收区取出一个缓存地址向数据分片分配;
若否,则从未使用区取出一个缓存地址向数据分片分配;
在数据缓存控制器的控制下将数据分片写入向其分配的缓存地址所指示的缓存空间。
由于本发明实施例中数据缓存中的每个bank的缓存地址独立管理,且在向数据分片分配缓存地址时,优先从数据缓存的bank的回收区向数据分片分配缓存地址,在回收区没有缓存地址时再从未使用区域中向数据分片分配缓存地址,所以本发明实施例可以最大程度避免从bank未使用区域读取缓存地址,进而提高数据缓存的能效。
例如:如上图6所示,数据缓存通道的数据缓存中包括4个bank(分别为bank0、bank1、bank2、bank3),在本次向数据分片分配缓存地址之前访问的bank为bank0、bank1、bank2,那么再次向数据分片分配缓存地址时,则向数据分片分配bank3中的缓存地址。
可选的,上述方法还包括:
记录各数据缓存的累计写入数据量和累计读取数据量。
在任一数据缓存为空闲状态时,当该数据缓存的累计写入数据量为零或者累计写入数据量大于预设数据量且检测到有数据分片需要写入时,该数据缓存跳转至写入状态并将累计写入数据量清零;
在任一数据缓存为写入状态时,判断该数据缓存的累计写入数据量是否大于预设数据量,当该数据缓存的累计写入数据量大于预设数据量,则该数据缓存跳转至空闲状态。
具体的,以下参照图7所示状态机轮转图对上述实施例中数据缓存的读写状态的切换过程进行详细说明。
转换过程1、在空闲(英文名称:IDLE)状态时,若之前没有处理过读请求(即累计读取数据量为0),检测到有数据分片需要写入时,状态机跳转至写入状态;若之前有处理过读请求,并且累计读取数据量大于或等于预设数据量(示例性的,预设数据量可以为1KB)时,检测到有数据分片需要写入时,状态机也跳转至写入状态。
转换过程2、进入写入状态后,对累计读取数据量清零,并且确认在向当前数据分片分配缓存地址之前送入数据缓存的读写命令所访问的bank;若当前数据分片分配缓存地址之前送入数据缓存的读写命令所访问的bank是bank3,则跳转至bank0的写入状态(ST_GET_BA0),取bank0中的缓存地址分配给当前数据分片;若当前数据分片分配缓存地址之前送入数据缓存的读写命令所访问的bank是bank0,则跳转至bank1的写入状态(ST_GET_BA1),取bank1中的缓存地址分配给当前数据分片;若当前数据分片分配缓存地址之前送入数据缓存的读写命令所访问的bank是bank1,则跳转至bank2的写入状态(ST_GET_BA2),取bank2中的缓存地址分配给当前数据分片;若当前数据分片分配缓存地址之前送入数据缓存的读写命令所访问的bank是bank2,则跳转至bank3的写入状态(ST_GET_BA3),取bank3中的缓存地址分配给当前数据分片;向数据分片分配缓存地址后,根据向数据分片分配的缓存地址将数据分片写入缓存地址对应的缓存空间中。
转换过程3、在写入状态向数据分片分配缓存地址后,根据向数据分片分配的缓存地址将数据分片写入缓存地址对应的缓存空间中,并跳转到写入状态。
转换过程4、在写入状态,使累计写入数据量加上当前数据分片的长度,判断累计写入数据量是否大于或等于预设数据量,若累计写入数据量大于或等于预设数据量,则跳转到空闲状态。
S35、接收数据缓存返回的缓存地址和缓存长度,并根据向数据分片分配的数据缓存通道号以及数据缓存返回的缓存地址和缓存长度生成各数据分片的缓存描述符。
示例性的,数据分片的缓存描述符可以如下表3所示:
数据缓存通道号 | 缓存地址 | 缓存长度 | 首片指示 | 尾片指示 |
3 | 0x12345678 | 0x100 | 1 | 0 |
4 | 0x23456780 | 0x100 | 0 | 0 |
5 | 0x34567800 | 0x100 | 0 | 0 |
6 | 0x00000000 | 0x100 | 0 | 0 |
7 | 0x5555555a | 0x100 | 0 | 0 |
0 | 0xaaaaaaaa | 0x0ee | 0 | 1 |
表3
S36、将各数据分片的缓存描述符写入BD缓存以及存储各队列的入队信息。
具体的,上述步骤S36中将各数据分片的缓存描述符写入BD缓存,具体可以通过如下步骤来实现:
S361、根据各数据分片在入队报文中的顺序对各数据分片的数据缓存通道号进行排序。
示例性的,参照图8所示,本发明提供的缓存管理方法的硬件框架还包括一个用于存储各数据分片的数据缓存通道号顺序的存入先入先出(英文名称:First Input FirstOutput,简称:FIFO)存储器81以及多个用于存储数据缓存返回的缓存地址的FIFO存储器82,其中,FIFO存储器82的数据量与数据缓存控制器208的数量相同,且FIFO存储器82分别与一个数据缓存控制器208连接。
在上述图8所示硬件框架下,步骤S32中向各数据分片分配数据缓存通道号时,根据各数据分片在入队报文中的顺序将向各数据分片分配的数据缓存通道号存入FIFO存储器81中。
例如:向入队报文的6个数据分片分配的通道号如下表4所示:
数据分片号 | 1 | 2 | 3 | 4 | 5 | 6 |
数据缓存通道号 | 3 | 4 | 5 | 6 | 7 | 0 |
表4
则,写入FIFO存储器中的数据缓存通道号的顺序即为3、4、5、6、7、0。
由于多个数据缓存刷新频率不同、数据分片长度不相等、读写操作交替不同步等原因,所以每个通道返回数据分片地址的时间点的顺序并不一定与各数据分片的数据缓存通道号的顺序相同。为了避免同一入队报文的多个数据分片的BD顺序混乱,如图8所示,可以先采用FIFO存储器82记录各数据缓存通道返回的缓存地址,然后根据FIFO存储器81中记录的各数据分片的数据缓存通道号的顺序按照将各数据缓存通道返回的换地址和缓存长度依次生成各数据分片的缓存描述符。
S362、根据各数据分片的数据缓存通道号的顺序依次将各数据分片的缓存描述符写入BD缓存。
具体的,可以根据FIFO存储器81中记录的各数据分片的数据缓存通道号的顺序,将入队报文的数据分片的BD发送至BD缓存,最后根据接收的数据分片的BD的顺序将各数据分片的缓存描述符写入BD缓存。
本发明的实施例提供的缓存管理方法用于对缓存***进行管理,其中,缓存***中包括多个数据缓存通道,任一数据缓存通道包括一数据缓存和一数据缓存控制器,在接收到入队报文且将入队报文切割问数据分片后,首先根据向数据分片分配的数据缓存通道号将数据分片分发至对应的数据缓存通道的数据缓存控制器,然后再在数据缓存控制器的控制下将数据分片写入对应的数据缓存;即各数据缓存通道中的数据缓存控制器独立控制数据缓存通道中的数据缓存的数据写入,由于本发明提供的缓存管理方法提供了多个独立的数据缓存通道,所以相比于单个数据缓存通道,本发明实施例可以提供更高的带宽,且相比将多个缓存通道中的缓存地址统一分配管理,本发明实施例可以最大化每个缓存通道的带宽利用率,所以本发明实施例提供的缓存管理方法可以提高缓存***的带宽。
此外,还需要说明的是,上述实施例提供的缓存管理方法中的队列数没有限制条件,因此本发明实施例可以实现任意队列数的缓存管理,即通过上述实施例提供的缓存管理方法,本发明实施例可以对缓存管理***中的队列数进行任意扩展。
进一步的,通常的BD都是以链表单通道方式进行管理的,但是随着性能要求提升,100G***短包打流的双向BD访问会达到300Mpps。而单通道缓存难以达到这个性能。虽然四倍数据倍率(英文名称:Quad Data Rate,简称:QDR)可以提高BD访问带宽,但QDR的成本太高,且在多队列的情况下需要大容量QDR,因此实际用于中难以承受。
为了解决上述问题,本发明实施例进一步提供了一种多BD缓存通道的缓存***,具体的,参照图9所示,图9为本发明实施例提供的缓存管理方法的硬件架构图,本发明实施例提供的缓存管理方法的硬件架构图包括:由缓存***的数据切片电路201、数据缓存通道号查询电路202、入队分发电路203以及分片地址重排序电路204组成的入队单元92、由链表管理电路205、多个BD缓存控制器206以及多个BD缓存组成的BD缓存单元91、链表管理电路205。其中,链表管理电路205包括:初始化单元2051和片内片内缓存2052。多个BD缓存控制器206与多个BD缓存一一对应形成多个BD缓存通道(图9中以缓存***包括两个缓存通道为例进行说明)。
当本发明实施例提供的缓存管理方法应于如图9所示的缓存***,包括多个BD缓存通道,任一所述BD缓存通道包括一缓存描述缓存控制器和一BD缓存时,上述步骤S363中根据各数据分片的数据缓存通道号的顺序依次将各数据分片的BD写入BD缓存,包括:
各BD缓存通道的存描述缓存控制器根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存。
本发明实施例提供的缓存***可以包括多个BD缓存通道,且任一BD缓存通道中的BD缓存控制器独立管理该BD缓存通道中的BD缓存进行读写操作,由于本发明实施例中增加了BD缓存通道数量,所以本发明实施例可以增加***的BD缓存通道的带宽,此外,由于各BD缓存通道种的BD缓存控制器独立对各BD缓存通道中的BD缓存的读写进行管理,因此可以最大化每个BD缓存通道的利用率,因此本发明实施例可以提高BD缓存的能效。
具体的,参照图10所示,当缓存***包括多个BD缓存通道时,上述步骤S363中根据各数据分片的数据缓存通道号的顺序依次将各数据分片的BD写入BD缓存可以通过如下步骤来实现:
S101、按照预设缓存大小将多个BD缓存分割为多个缓存块。
示例性的,预设缓存大小可以为2KB。
S102、向各队列分配缓存块、首端缓存地址和尾端缓存地址,并记录向各队列分配的首端缓存地址和尾端缓存地址。
其中,向不同队列分配的缓存块不同,任一队列的首端缓存地址和尾端缓存地址所指示的缓存空间为向该队列分配的缓存块中的同一个缓存空间。
可选的,可以通过链表管理电路205中的片内缓存2052记录向各队列分配的首端缓存地址和尾端缓存地址。
示例性的,假设BD缓存通道中的BD缓存的缓存空间为2GB,预设缓存大小为2KB,一个数据分片的BD的大小为8bt,则一个BD缓存中包括1000000个缓存块,一个缓存块中可以存放256个数据分片的BD。片内缓存2052中记录各队列的地址首端缓存地址和尾端缓存地址的缓存内容格式可以如下表5所示:
缓存块地址[19:0] | 偏移地址[7:0] |
表5
此外,上述步骤S102中向各队列分配缓存块、首端缓存地址和尾端缓存地址即为对片内缓存2052中各队列的缓存块地址进行设置以及对各队列的偏移地址置零。
进一步的,上述步骤S102中向各队列分配缓存块,具体可以为:
向各队列随机分配多个BD缓存中的缓存块。
即,将各队列随机分配到多个BD缓存通道上。
示例性的,假设包括:5个队列(队列0、队列1、队列2、队列3、队列4),2个BD缓存通道(BD缓存通道0、BD缓存通道1),则各队列随机分配到多个BD缓存通道上可以如下表6所示:
队列 | BD缓存通道 |
0 | 0 |
1 | 0 |
2 | 1 |
3 | 1 |
4 | 0 |
表6
向各队列随机分配多个BD缓存中的缓存块,可以将各队列随机分配到多个BD缓存通道上,从而避免部分BD缓存通道过载,而部分BD缓存通道空闲,进而均衡多个BD缓存通道的流量,提升BD缓存的性能。
S103、接收到缓存描述符时,获取第一队列的首端缓存地址。
其中,第一队列为接收到的缓存描述符所属的数据分片所属的入队报文所属的队列。
示例性的,若入队报文1的队列为队列1,数据分片1为由入队报文1切割形成数据分片中的一个,BD1为数据分片1的缓存描述符,则在接收到BD1时,获取队列1的首端缓存地址。
S104、将接收到的缓存描述符写入第一队列的首端缓存地址所指示的缓存空间。
S105、判断第一缓存块剩余的缓存空间是否小于或等于一个缓存描述符的大小。
其中,第一缓存块为向第一队列分配的缓存块。
具体的,若记录各队列的地址首端缓存地址和尾端缓存地址的缓存内容格式如表5所示,则步骤S105中判断一缓存块剩余的缓存空间是否小于或等于一个缓存描述符的大小,可以为:判断偏移地址+1是否等于255。
在步骤S105中,若第一缓存块剩余的缓存空间大于一个缓存描述符的大小(偏移地址+1不等于255),则执行步骤S86,而若第一缓存块剩余的缓存空间小于或等于一个缓存描述符的大小(偏移地址+1等于255),则执行步骤S87。
S106、将第一队列的首端缓存地址更新为第一缓存块中首端缓存地址后的下一个缓存地址。
S107、向第一队列分配第二缓存块,将第二缓存块的缓存块地址写入第一缓存块,将第一队列的首端缓存地址更新为第二缓存块中的第一个缓存地址。
可选的,上述步骤S107中在向第一队列分配第二缓存块时,将多个BD缓存中的缓存块轮转向第一队列分配。
例如:缓存***中包括2个BD缓存(BD缓存0、BD缓存1),且队列0的第一缓存块属于BD缓存0,则向队列0分配第二缓存块时,从BD缓存1选取缓存块作为第二缓存块向队列0分配。
上述实施例中在向第一队列分配第二缓存块时,将多个BD缓存中的缓存块轮转向第一队列分配,即分配缓存块时多个BD缓存通道轮转分配;在分配缓存块时多个BD缓存通道轮转分配可以使各数据分片的BD平均的缓存在多个BD缓存通道上,从而避免部分BD缓存通道过载,而部分BD缓存通道空闲,进而均衡多个BD缓存通道的流量,提升BD缓存的能效。
S108、根据各数据分片的数据缓存通道号的顺序依次将各数据分片的缓存描述符写入第一队列的首端缓存地址所指示的缓存空间。
示例性的,BD缓存的BD链表可以如图11所示,包括多个数据分片的BD组成的链表,且每一个BD块的最后一个存储空间存放一个缓存块地址。
此外,由于本发明实施例提供的缓存管理方法在管理数据分片的BD链表时,仅需要在链表管理电路205的片内缓存2052中存储向各队列分配的首端缓存地址和尾端缓存地址,所以可以节省存储资源,降低制造成本。
以下对基于上述数据入队流程对本发明实施例提供的缓存管理方法的出队流程进行详细说明,具体的,参照图12所示上述缓存管理方法还包括:
S201、接收出队命令。
其中,出队命令用于指示将出队报文从数据缓存中调出,出队命令包括出队报文的队列信息。
S202、根据出队报文的队列信息获取第二队列。
其中,第二队列为出队报文所属的队列。
即,根据出队报文的队列信息获取出队报文的队列。
S203、获取第二队列的尾端缓存地址。
S204、读出第二队列的尾端缓存地址所指示的缓存空间中的缓存描述符。
S205、判断第三缓存块中的缓存描述符是否已经全部取出。
其中,第三缓存块为第二队列的尾端缓存地址所指示的缓存空间的缓存块。
在步骤S205中,若第三缓存块中的缓存描述符没有全部取出,则执行步骤S206;若第三缓存块中的缓存描述符已经全部取出,则执行步骤S207。
S206、将第二队列的尾端缓存地址更新为第三缓存块中尾端缓存地址后的下一个缓存地址。
S207、获取第三缓存块中的缓存块地址,并将第二队列的尾端缓存地址更新为向第三缓存块中的缓存块地址所指示的缓存块中的第一个缓存地址。
其中,上述步骤S207中获取的第三缓存块中的缓存块地址即为上述实施例中步骤S207中向缓存换写入的缓存块地址。
S208、根据第二队列的入队信息获取出队报文的包含的数据分片的数量。
S209、判断从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于出队报文包含的数据分片的数量。
例如:出队报文的大小为2KB,且出队报文的数据分片均为64字节时,需要从读取的数据分片的数量为32个。
在步骤S209中,若从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量等于出队报文包含的数据分片的数量,则执行步骤S210;若从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量小于出队报文包含的数据分片的数量,则返回步骤S203中重复执行上述步骤S203-S209直到从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量等于出队报文包含的数据分片的数量。
S210、将各从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符分发至对应数据缓存通道的数据缓存控制器。
S211、在数据缓存控制器的控制下根据从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符从对应的数据缓存中读取数据分片。
在执行上述步骤S211时,本发明实施例提供的缓存管理方法还包括:
记录各数据缓存的累计写入数据量和累计读取数据量;
在任一数据缓存为空闲状态时,当该数据缓存的累计写入数据量为零且需要读取数据分片时,该数据缓存跳转至读取状态并将累计写入数据量清零;
在任一数据缓存为读取状态时,判断该数据缓存的累计读取数据量是否大于预设数据量,当该数据缓存的累计读取数据量大于预设数据量,则该数据缓存跳转至空闲状态。
具体的,以下在图7所示状态机转换的基础上参照图13所示状态机轮转图对上述实施例中数据缓存的状态转换过程进行详细说明。
转换过程5、在空闲状态时,若之前没有处理过写请求(即累计写入数据量为0),检测到需要读取数据分片时,状态机跳转至读取状态;若之前有处理过写请求,并且累计写入数据量大于或等于预设数据量时,检测到需要读取数据分片时,状态机也跳转至写入状态。
转换过程6、在读取状态下,对累计写入数据量清0,根据出队BD读取数据分片。给累计读取数据量加上当前读取数据分片的长度,若当前累计读取数据量小于预设数据量,则仍旧停留在读取状态。
转换过程7、在读取状态下,若当前累计读取数据量大于或等于预设数据量,则返回空闲状态下。
S112、按照已读出的各缓存描述符中的数据缓存通道号的顺序依次将各数据分片输出。
上述步骤S101-109为本发明实施例提供的缓存管理方法中的数据分片的BD读取流程,步骤S110-S112为根据步骤S101-109读取的数据分片的BD从数据缓存中读取数据分片并输出的过程。
同样,由于多个数据缓存刷新频率不同、数据分片长度不相等、读写操作交替不同步等原因,所以每个数据缓存通道返回数据分片的时间点的顺序并不一定与出队报文中各个数据分片的相同,因此需对各数据缓存通道返回数据分片进行排序后输出。基于上述需求,本发明实施例进一步提供了一种缓存管理方法的硬件框架。具体的,参照图14所示,本发明提供的缓存管理方法的硬件框架还包括一个用于存储各数据分片的数据缓存通道号顺序的FIFO存储器81以及多个用于存储数据缓存返回的缓存地址的FIFO存储器82,其中,FIFO存储器82的数据量与数据缓存控制器208的数量相同,且FIFO存储器82分别与一个数据缓存控制器208连接。在步骤209中,若从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量等于出队报文包含的数据分片的数量,则通过FIFO存储器81存储各BD的数据缓存通道号顺,在各数据缓存通道的数据缓存返回数据分片后首先存储在对应的FIFO存储器82中,安然按照FIFO存储器81存储的各BD的数据缓存通道号顺序对数据缓存返回数据分片进行输出。
上述方法可以保证单一队列在连续读写的时候,对数据缓存的操作都是连续的,其性能可以达到最高。即使所有队列挨个发包时也可以存保证数据缓入队分别写入,出队时连续读取。使用单通道16bitddr颗粒时,连续读出的DDR使用效能在80%以上。零散写入也能接近40%.因此即使所有队列轮流发包时,本发明采用的方法也能保证DDR的带宽利用率达到50%以上。且存放BD block是可以重复利用的,当block中的BD全部取出后,就可以回收该block以便下一次利用。
本发明再一实施例提供与上述实施例提供的缓存管理方法相对应的缓存管理装置,需要说明的是,上述缓存管理方法中的解释说明均可援引至下述实施例中对本发明实施例提供的缓存管理装置进行解释说明。同样本发明实施例提供的缓存管理装置用于对缓存***进行管理,缓存***中包括多个数据缓存通道,任一数据缓存通道包括一数据缓存和一数据缓存控制器,且各数据缓存通道具有唯一的数据缓存通道号。具体的,该缓存管理装置包括:
入队数据切片电路,用于在收到入队报文时,根据预设分片大小和入队报文的长度将入队报文切割为至少一个数据分片;
数据缓存通道号查询电路,用于向各数据分片分配数据缓存通道号;
入队分发电路,用于根据向数据分片分配的数据缓存通道号将数据分片分发至对应的数据缓存通道的数据缓存控制器;
数据缓存控制器,用于将所述数据分片写入对应的数据缓存;
链表管理电路,用于接收数据缓存返回的缓存地址和缓存长度,以及根据向数据分片分配的数据缓存通道号以及数据缓存返回的缓存地址和缓存长度生成各数据分片的缓存描述符;
BD缓存控制器,用于将各数据分片的缓存描述符写入BD缓存。
可选的,所述缓存***包括多个BD缓存通道,任一所述BD缓存通道包括一BD缓存控制器和一BD缓存;所述缓存管理装置还包括:分片地址重排序电路;
所述分片地址重排序电路用于根据各数据分片在所述入队报文中的顺序对各数据分片的数据缓存通道号进行排序;
各BD缓存通道的BD缓存控制器用于根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存。
可选的,BD缓存控制器具体用于按照预设缓存大小将多个BD缓存分割为多个缓存块;向各队列分配缓存块,并向各队列分配首端缓存地址;其中,向不同队列分配的缓存块不同,任一队列的首端缓存地址所指示的缓存空间向该队列分配的缓存块;接收到缓存描述符时,获取第一队列的首端缓存地址;第一队列为接收到的缓存描述符所属的数据分片所属的入队报文所属的队列;将接收到的缓存描述符写入第一队列的首端缓存地址所指示的缓存空间,并将向第一队列分配的首端缓存地址记录为第一队列的尾端缓存地址;判断第一缓存块剩余的缓存空间是否小于或等于一个缓存描述符的大小;第一缓存块为向第一队列分配的缓存块;若否,则将第一队列的首端缓存地址更新为第一缓存块中首端缓存地址后的下一个缓存地址;若是,则向第一队列分配第二缓存块,将第二缓存块的缓存块地址写入第一缓存块,将第一队列的首端缓存地址更新为第二缓存块中的第一个缓存地址;根据各数据分片的数据缓存通道号的顺序依次将各数据分片的缓存描述符写入第一队列的首端缓存地址所指示的缓存空间。
可选的,缓存***还包括:调度单元,
调度单元用于记录各队列的入队信息,接收出队命令,根据出队报文的队列信息获取第二队列,根据第二队列的入队信息获取出队报文的包含的数据分片的数量;
缓存管理装置还包括:出队分发电路和出队数据重组电路;
链表管理电路还用于获取第二队列的尾端缓存地址并将第二队列的尾端缓存地址分发至BD缓存控制器;其中,出队命令用于指示将出队报文从数据缓存中调出,出队命令包括出队报文的队列信息;第二队列为出队报文所属的队列;
BD缓存控制器还用于读出第二队列的尾端缓存地址所指示的缓存空间中缓存描述符;判断第三缓存块中的缓存描述符是否已经全部取出;若否,则将第二队列的尾端缓存地址更新为第三缓存块中尾端缓存地址后的下一个缓存地址;若是,则获取第三缓存块中的缓存块地址,并将第二队列的尾端缓存地址更新为向第三缓存块中的缓存块地址所指示的缓存块中的第一个缓存地址;第三缓存块为第二队列的尾端缓存地址所指示的缓存空间的缓存块;判断从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于根据出队报文的长度信息获取出队报文包含的数据分片的数量;
出队分发电路,用于判断从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于根据出队报文的长度信息获取出队报文包含的数据分片的数量以及在从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量等于根据出队报文的长度信息获取出队报文包含的数据分片的数量时将各从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符分发至对应数据缓存通道的数据缓存控制器;
数据缓存控制器还用于根据从第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符从对应的数据缓存中读取数据分片;
出队数据重组电路,用于按照已读出的各缓存描述符中的数据缓存通道号的顺序依次将各数据分片输出。
本发明在意实施例提供一种现场可编程门阵列,包括:上述任一实施例提供的缓存管理装置。
现场可编程门阵列是一种集成度很高的新型高性能可编程芯片。FPGA内部电路功能是可编程的,可以通过硬件描述语言(英文名称:Hardware Description Language,简称:HDL)和专用设计工具,在FPGA内部灵活地实现极其复杂的电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。当将上述实施例中的缓存管理装置实现在FPGA内部实现时,占用逻辑资源少,且在不使用中央处理器等第三方控制器件的情况下,以最低的成本实现了FPGA的主动升级,并且提供了单板双功能的效果。
基于上述实施例提供的缓存管理方法、装置以及FPGA,本发明实施例可以利用FPGA丰富的输出/输出(英文名称:Input/Output,简称:I/O)资源和内部缓存资源,使用多各通道的数据缓存和多个通道的BD缓存,实现任意队列数的高性能缓存管理。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (14)
1.一种缓存管理方法,其特征在于,用于对缓存***进行管理,所述缓存***中包括多个数据缓存通道,任一数据缓存通道包括一数据缓存和一数据缓存控制器,且各数据缓存通道具有唯一的数据缓存通道号;所述方法包括:
在收到入队报文时,根据预设分片大小和所述入队报文的长度将所述入队报文切割为至少一个数据分片;
向各所述数据分片分配所述数据缓存通道号;
根据向所述数据分片分配的数据缓存通道号将数据分片分发至对应的所述数据缓存通道的数据缓存控制器;
在所述数据缓存控制器的控制下将所述数据分片写入对应的数据缓存;
接收所述数据缓存返回的缓存地址和缓存长度,并根据向数据分片分配的数据缓存通道号以及所述数据缓存返回的缓存地址和缓存长度生成各数据分片的缓存描述符;
将各数据分片的缓存描述符写入缓存描述符BD缓存。
2.根据权利要求1所述的方法,其特征在于,所述向各所述数据分片分配所述数据缓存通道号,包括:
将多个所述数据缓存通道号轮转向各所述数据分片分配。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
上电时分别向各队列随机分配一个数据缓存通道号作为各队列的当前状态的数据缓存通道号;
在将多个所述数据缓存通道号轮转向各所述数据分片分配后,将所述入队报文所属的队列的当前状态的数据缓存通道号更新为轮转结束时的数据缓存通道号之后的下一个数据缓存通道号;
所述将多个所述数据缓存通道号轮转向各所述数据分片分配,包括:
由所述入队报文所属的队列的当前状态的数据缓存通道号开始将多个所述数据缓存通道号轮转向各所述数据分片分配。
4.根据权利要求1所述的方法,其特征在于,任一所述数据缓存包括多个内存库,任一所述内存库中包括:一回收区和一未使用区域;其中,所述回收区用于存放回收的缓存空间的缓存地址,所述未使用区域用于存放未使用的缓存空间的缓存地址;所述在所述数据缓存控制器的控制下将所述数据分片写入对应的数据缓存,包括:
控制所述数据缓存中的多个内存库轮转向所述数据分片分配缓存地址;
判断各所述数据分片的数据缓存通道号对应的数据缓存的内存库的回收区是否具有缓存地址;
若是,则从回收区取出一个缓存地址向所述数据分片分配;
若否,则从未使用区取出一个缓存地址向所述数据分片分配;
在所述数据缓存控制器的控制下将数据分片写入向其分配的缓存地址所指示的缓存空间。
5.根据权利要求1所述的方法,其特征在于,所述缓存***包括多个BD缓存通道,任一所述BD缓存通道包括一BD缓存控制器和一BD缓存;
所述将各数据分片的缓存描述符写入BD缓存,包括:
根据各数据分片在所述入队报文中的顺序对各数据分片的数据缓存通道号进行排序;
各BD缓存通道的BD缓存控制器根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存。
6.根据权利要求5所述的方法,其特征在于,所述各BD缓存通道的BD缓存控制器根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存,包括:
按照预设缓存大小将所述多个BD缓存分割为多个缓存块;
向各所述队列分配所述缓存块、首端缓存地址和尾端缓存地址,并记录向各所述队列分配的首端缓存地址和尾端缓存地址;其中,向不同队列分配的缓存块不同,任一队列的首端缓存地址和尾端缓存地址所指示的缓存空间为向该队列分配的缓存块中的同一个缓存空间;
接收到缓存描述符时,获取第一队列的首端缓存地址;所述第一队列为接收到的缓存描述符所属的数据分片所属的入队报文所属的队列;
将接收到的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间;
判断第一缓存块剩余的缓存空间是否小于或等于一个缓存描述符的大小;所述第一缓存块为向第一队列分配的缓存块;
若否,则将第一队列的首端缓存地址更新为所述第一缓存块中首端缓存地址后的下一个缓存地址;
若是,则向所述第一队列分配第二缓存块,将所述第二缓存块的缓存块地址写入第一缓存块剩余的缓存空间中,将所述第一队列的首端缓存地址更新为第二缓存块中的第一个缓存地址;
根据各数据分片的数据缓存通道号的顺序依次将各数据分片的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在向所述第一队列分配第二缓存块时,将所述多个BD缓存中的缓存块轮转向所述第一队列分配。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
接收出队命令;所述出队命令用于指示将出队报文从所述数据缓存中调出,所述出队命令包括所述出队报文的队列信息;
根据所述出队报文的队列信息获取第二队列;所述第二队列为所述出队报文所属的队列;
获取所述第二队列的尾端缓存地址;
读出所述第二队列的尾端缓存地址所指示的缓存空间中的缓存描述符;
判断第三缓存块中的缓存描述符是否已经全部取出;所述第三缓存块为所述第二队列的尾端缓存地址所指示的缓存空间所述的缓存块;
若否,则将所述第二队列的尾端缓存地址更新为所述第三缓存块中尾端缓存地址后的下一个缓存地址;
若是,则获取第三缓存块中的缓存块地址,并将所述第二队列的尾端缓存地址更新为向所述第三缓存块中的缓存块地址所指示的缓存块中的第一个缓存地址;
根据所述第二队列的入队信息获取所述出队报文的包含的数据分片的数量;
判断从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于所述出队报文包含的数据分片的数量;
若是,将各从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符分发至对应数据缓存通道的数据缓存控制器;
在所述数据缓存控制器的控制下根据从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符从对应的数据缓存中读取数据分片;
按照已读出的各缓存描述符中的数据缓存通道号的顺序依次将各数据分片输出。
9.根据权利要求1-8任一项所述的方法,其特征在于,所述方法还包括:
记录各数据缓存的累计写入数据量和累计读取数据量;
在任一数据缓存为空闲状态时,当该数据缓存的累计读取数据量为零或者累计读取数据量大于预设数据量且检测到有数据分片需要写入时,该数据缓存跳转至写入状态并将累计读取数据量清零;当该数据缓存的累计写入数据量为零且需要读取数据分片时,该数据缓存跳转至读取状态并将累计写入数据量清零;
在任一数据缓存为写入状态时,判断该数据缓存的累计写入数据量是否大于预设数据量,当该数据缓存的累计写入数据量大于预设数据量,则该数据缓存跳转至空闲状态;
在任一数据缓存为读取状态时,判断该数据缓存的累计读取数据量是否大于预设数据量,当该数据缓存的累计读取数据量大于预设数据量,则该数据缓存跳转至空闲状态。
10.一种缓存管理装置,其特征在于,用于对缓存***进行管理,所述缓存***中包括多个数据缓存通道,任一数据缓存通道分别包括一数据缓存和一数据缓存控制器,且各数据缓存通道具有唯一的数据缓存通道号;所述缓存管理装置包括:
入队数据切片电路,用于在收到入队报文时,根据预设分片大小和所述入队报文的长度将所述入队报文切割为至少一个数据分片;
数据缓存通道号查询电路,用于向各所述数据分片分配所述数据缓存通道号;
入队分发电路,用于根据向数据分片分配的数据缓存通道号将数据分片分发至对应的所述数据缓存通道的数据缓存控制器;
数据缓存控制器,用于将所述数据分片写入对应的数据缓存;
链表管理电路,用于接收所述数据缓存返回的缓存地址和缓存长度,以及根据向数据分片分配的数据缓存通道号以及所述数据缓存返回的缓存地址和缓存长度生成各数据分片的缓存描述符;
BD缓存控制器,用于将各数据分片的缓存描述符写入BD缓存。
11.根据权利要求10所述的装置,其特征在于,所述缓存***包括多个BD缓存通道,任一所述BD缓存通道包括一BD缓存控制器和一BD缓存;所述缓存管理装置还包括:分片地址重排序电路;
所述分片地址重排序电路用于根据各数据分片在所述入队报文中的顺序对各数据分片的数据缓存通道号进行排序;
各BD缓存通道的BD缓存控制器用于根据各数据分片的数据缓存通道号的顺序分别将各数据分片的缓存描述符写入对应的BD缓存。
12.根据权利要求11所述的装置,其特征在于,所述BD缓存控制器具体用于按照预设缓存大小将所述多个BD缓存分割为多个缓存块;向各所述队列分配所述缓存块,并向各队列分配首端缓存地址;其中,向不同队列分配的缓存块不同,任一队列的首端缓存地址所指示的缓存空间向该队列分配的缓存块;接收到缓存描述符时,获取第一队列的首端缓存地址;所述第一队列为接收到的缓存描述符所属的数据分片所属的入队报文所属的队列;将接收到的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间,并将向第一队列分配的首端缓存地址记录为第一队列的尾端缓存地址;判断第一缓存块剩余的缓存空间是否小于或等于一个缓存描述符的大小;所述第一缓存块为向第一队列分配的缓存块;若否,则将第一队列的首端缓存地址更新为所述第一缓存块中首端缓存地址后的下一个缓存地址;若是,则向所述第一队列分配第二缓存块,将所述第二缓存块的缓存块地址写入第一缓存块,以及所述第一队列的首端缓存地址更新为第二缓存块中的第一个缓存地址;根据各数据分片的数据缓存通道号的顺序依次将各数据分片的缓存描述符写入所述第一队列的首端缓存地址所指示的缓存空间。
13.根据权利要求12所述的装置,其特征在于,所述缓存***还包括:调度单元,
所述调度单元用于记录各队列的入队信息,接收出队命令,根据所述出队报文的队列信息获取第二队列,根据所述第二队列的入队信息获取所述出队报文的包含的数据分片的数量;
所述缓存管理装置还包括:出队分发电路和出队数据重组电路;
所述链表管理电路还用于获取所述第二队列的尾端缓存地址并将所述第二队列的尾端缓存地址分发至所述BD缓存控制器;其中,所述出队命令用于指示将出队报文从所述数据缓存中调出,所述出队命令包括所述出队报文的队列信息;所述第二队列为所述出队报文所属的队列;
所述BD缓存控制器还用于读出所述第二队列的尾端缓存地址所指示的缓存空间中缓存描述符;判断第三缓存块中的缓存描述符是否已经全部取出;若否,则将所述第二队列的尾端缓存地址更新为所述第三缓存块中尾端缓存地址后的下一个缓存地址;若是,则获取第三缓存块中的缓存块地址,并将所述第二队列的尾端缓存地址更新为向所述第三缓存块中的缓存块地址所指示的缓存块中的第一个缓存地址;所述第三缓存块为所述第二队列的尾端缓存地址所指示的缓存空间所述的缓存块;判断从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于根据所述出队报文的长度信息获取所述出队报文包含的数据分片的数量;
所述出队分发电路,用于判断从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量是否等于根据所述出队报文的长度信息获取所述出队报文包含的数据分片的数量以及在从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符数量等于根据所述出队报文的长度信息获取所述出队报文包含的数据分片的数量时将各从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符分发至对应数据缓存通道的数据缓存控制器;
所述数据缓存控制器还用于根据从所述第二队列的尾端缓存地址所指示的缓存空间中读取的缓存描述符从对应的数据缓存中读取数据分片;
所述出队数据重组电路,用于按照已读出的各缓存描述符中的数据缓存通道号的顺序依次将各数据分片输出。
14.一种现场可编程门阵列,其特征在于,包括:权利要求10-13任一项所述的缓存管理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710364480.3A CN107220187B (zh) | 2017-05-22 | 2017-05-22 | 一种缓存管理方法、装置及现场可编程门阵列 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710364480.3A CN107220187B (zh) | 2017-05-22 | 2017-05-22 | 一种缓存管理方法、装置及现场可编程门阵列 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107220187A true CN107220187A (zh) | 2017-09-29 |
CN107220187B CN107220187B (zh) | 2020-06-16 |
Family
ID=59945433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710364480.3A Active CN107220187B (zh) | 2017-05-22 | 2017-05-22 | 一种缓存管理方法、装置及现场可编程门阵列 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107220187B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762676A (zh) * | 2018-05-24 | 2018-11-06 | 安徽雷索信息科技有限公司 | 一种多通道大数据存储方法及其*** |
CN108848530A (zh) * | 2018-07-10 | 2018-11-20 | 网宿科技股份有限公司 | 一种获取网络资源的方法、装置及调度服务器 |
CN109343799A (zh) * | 2018-09-28 | 2019-02-15 | 中国电子科技集团公司第五十二研究所 | 一种持续超高速的数据卸载*** |
CN110958331A (zh) * | 2019-12-27 | 2020-04-03 | 视联动力信息技术股份有限公司 | 一种数据传输方法及终端 |
CN111459852A (zh) * | 2019-01-22 | 2020-07-28 | 阿里巴巴集团控股有限公司 | 缓存控制方法和装置以及电子设备 |
CN111541624A (zh) * | 2020-04-13 | 2020-08-14 | 上海航天计算机技术研究所 | 空间以太网缓存处理方法 |
CN111651377A (zh) * | 2020-06-28 | 2020-09-11 | 中国人民解放军国防科技大学 | 一种用于片内报文处理的弹性共享缓存架构 |
CN111782578A (zh) * | 2020-05-29 | 2020-10-16 | 西安电子科技大学 | 一种缓存控制方法、***、存储介质、计算机设备及应用 |
CN113595932A (zh) * | 2021-08-06 | 2021-11-02 | 上海金仕达软件科技有限公司 | 数据乱序报文的处理方法及专用集成电路 |
WO2022143678A1 (zh) * | 2020-12-30 | 2022-07-07 | 苏州盛科通信股份有限公司 | 报文存储方法、报文出入队列方法及存储调度装置 |
CN115190089A (zh) * | 2022-05-26 | 2022-10-14 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
CN116418734A (zh) * | 2023-06-09 | 2023-07-11 | 湖北微源卓越科技有限公司 | 一种低时延的小包发送方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5664116A (en) * | 1995-07-07 | 1997-09-02 | Sun Microsystems, Inc. | Buffering of data for transmission in a computer communication system interface |
CN1680929A (zh) * | 2004-04-08 | 2005-10-12 | 华为技术有限公司 | 一种多通道数据缓冲设计方法与装置 |
CN101094183A (zh) * | 2007-07-25 | 2007-12-26 | 杭州华三通信技术有限公司 | 一种缓存管理方法及装置 |
CN101187896A (zh) * | 2007-12-14 | 2008-05-28 | 中兴通讯股份有限公司 | 一种现场可编程门阵列数据缓存的管理方法 |
CN102377682A (zh) * | 2011-12-12 | 2012-03-14 | 西安电子科技大学 | 基于定长单元存储变长分组的队列管理方法及设备 |
CN104021091A (zh) * | 2014-05-26 | 2014-09-03 | 西安交通大学 | 一种基于fpga/cpld的多通道数据缓存实现方法 |
CN105162724A (zh) * | 2015-07-30 | 2015-12-16 | 华为技术有限公司 | 一种数据入队与出队方法及队列管理单元 |
CN105975209A (zh) * | 2016-04-26 | 2016-09-28 | 浪潮(北京)电子信息产业有限公司 | 一种多通道数据写入方法和*** |
-
2017
- 2017-05-22 CN CN201710364480.3A patent/CN107220187B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5664116A (en) * | 1995-07-07 | 1997-09-02 | Sun Microsystems, Inc. | Buffering of data for transmission in a computer communication system interface |
CN1680929A (zh) * | 2004-04-08 | 2005-10-12 | 华为技术有限公司 | 一种多通道数据缓冲设计方法与装置 |
CN101094183A (zh) * | 2007-07-25 | 2007-12-26 | 杭州华三通信技术有限公司 | 一种缓存管理方法及装置 |
CN101187896A (zh) * | 2007-12-14 | 2008-05-28 | 中兴通讯股份有限公司 | 一种现场可编程门阵列数据缓存的管理方法 |
CN102377682A (zh) * | 2011-12-12 | 2012-03-14 | 西安电子科技大学 | 基于定长单元存储变长分组的队列管理方法及设备 |
CN104021091A (zh) * | 2014-05-26 | 2014-09-03 | 西安交通大学 | 一种基于fpga/cpld的多通道数据缓存实现方法 |
CN105162724A (zh) * | 2015-07-30 | 2015-12-16 | 华为技术有限公司 | 一种数据入队与出队方法及队列管理单元 |
CN105975209A (zh) * | 2016-04-26 | 2016-09-28 | 浪潮(北京)电子信息产业有限公司 | 一种多通道数据写入方法和*** |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762676A (zh) * | 2018-05-24 | 2018-11-06 | 安徽雷索信息科技有限公司 | 一种多通道大数据存储方法及其*** |
CN108848530A (zh) * | 2018-07-10 | 2018-11-20 | 网宿科技股份有限公司 | 一种获取网络资源的方法、装置及调度服务器 |
CN109343799A (zh) * | 2018-09-28 | 2019-02-15 | 中国电子科技集团公司第五十二研究所 | 一种持续超高速的数据卸载*** |
CN109343799B (zh) * | 2018-09-28 | 2022-04-01 | 中国电子科技集团公司第五十二研究所 | 一种持续超高速的数据卸载*** |
CN111459852B (zh) * | 2019-01-22 | 2023-05-05 | 阿里巴巴集团控股有限公司 | 缓存控制方法和装置以及电子设备 |
CN111459852A (zh) * | 2019-01-22 | 2020-07-28 | 阿里巴巴集团控股有限公司 | 缓存控制方法和装置以及电子设备 |
CN110958331A (zh) * | 2019-12-27 | 2020-04-03 | 视联动力信息技术股份有限公司 | 一种数据传输方法及终端 |
CN111541624A (zh) * | 2020-04-13 | 2020-08-14 | 上海航天计算机技术研究所 | 空间以太网缓存处理方法 |
CN111782578A (zh) * | 2020-05-29 | 2020-10-16 | 西安电子科技大学 | 一种缓存控制方法、***、存储介质、计算机设备及应用 |
CN111651377A (zh) * | 2020-06-28 | 2020-09-11 | 中国人民解放军国防科技大学 | 一种用于片内报文处理的弹性共享缓存架构 |
CN111651377B (zh) * | 2020-06-28 | 2022-05-20 | 中国人民解放军国防科技大学 | 一种用于片内报文处理的弹性共享缓存器 |
WO2022143678A1 (zh) * | 2020-12-30 | 2022-07-07 | 苏州盛科通信股份有限公司 | 报文存储方法、报文出入队列方法及存储调度装置 |
CN113595932A (zh) * | 2021-08-06 | 2021-11-02 | 上海金仕达软件科技有限公司 | 数据乱序报文的处理方法及专用集成电路 |
CN113595932B (zh) * | 2021-08-06 | 2024-05-14 | 上海金仕达软件科技股份有限公司 | 数据乱序报文的处理方法及专用集成电路 |
CN115190089A (zh) * | 2022-05-26 | 2022-10-14 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
CN115190089B (zh) * | 2022-05-26 | 2024-03-22 | 中科驭数(北京)科技有限公司 | 一种报文存储方法、装置、设备及存储介质 |
CN116418734A (zh) * | 2023-06-09 | 2023-07-11 | 湖北微源卓越科技有限公司 | 一种低时延的小包发送方法及装置 |
CN116418734B (zh) * | 2023-06-09 | 2023-08-18 | 湖北微源卓越科技有限公司 | 一种低时延的小包发送方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107220187B (zh) | 2020-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107220187A (zh) | 一种缓存管理方法、装置及现场可编程门阵列 | |
KR20170012399A (ko) | 메모리 시스템에서 데이터 구조들을 세그먼트하기 위한 시스템들 및 방법들 | |
CN107204198A (zh) | 高速访问双倍速率同步动态随机存储器的控制方法及装置 | |
CN103914341B (zh) | 数据队列出队管控方法和装置 | |
CN102985909B (zh) | 为良好分格的对象提供高扩展性网络存储的方法和设备 | |
CN101499956B (zh) | 分级缓冲区管理***及方法 | |
US11700209B2 (en) | Multi-path packet descriptor delivery scheme | |
CN103136120B (zh) | 行缓冲管理策略确定方法和装置、bank划分方法和装置 | |
CN102707788B (zh) | 用于保持其功耗低于指定功率限制的内容搜索***及方法 | |
CN101751980A (zh) | 基于存储器知识产权核的嵌入式可编程存储器 | |
US20090002864A1 (en) | Memory Controller for Packet Applications | |
CN108390831B (zh) | 一种高阶路由器输入端口缓冲优化结构 | |
EP3356945B1 (fr) | Dispositif informatique muni de traitement en memoire et de ports d'acces etroits | |
CN103488582B (zh) | 写高速缓冲存储器的方法及装置 | |
CN104461956B (zh) | 访问同步动态随机访问存储器的方法、装置及*** | |
CN105335323A (zh) | 一种数据突发的缓存装置和方法 | |
US10067868B2 (en) | Memory architecture determining the number of replicas stored in memory banks or devices according to a packet size | |
CN101848150B (zh) | 维护多播计数器的计数值的方法及装置 | |
CN104572507B (zh) | 用于控制功能组件的存储器使用的方法和设备 | |
CN106254270A (zh) | 一种队列管理方法及装置 | |
CN105577985A (zh) | 一种数字图像处理*** | |
US8572349B2 (en) | Processor with programmable configuration of logical-to-physical address translation on a per-client basis | |
CN103902471B (zh) | 数据缓存处理方法和装置 | |
CN107977159A (zh) | 一种数据存储方法以及装置 | |
CN101566933B (zh) | 一种配置缓存的方法、装置和电子设备及数据读写装置 |
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 |