CN116827880B - 一种缓存空间管理方法及装置 - Google Patents
一种缓存空间管理方法及装置 Download PDFInfo
- Publication number
- CN116827880B CN116827880B CN202311094347.2A CN202311094347A CN116827880B CN 116827880 B CN116827880 B CN 116827880B CN 202311094347 A CN202311094347 A CN 202311094347A CN 116827880 B CN116827880 B CN 116827880B
- Authority
- CN
- China
- Prior art keywords
- queue
- free buffer
- pointer
- buffer descriptor
- address
- 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.)
- Active
Links
- 238000007726 management method Methods 0.000 title claims abstract description 21
- 238000000034 method Methods 0.000 claims abstract description 32
- 230000000903 blocking effect Effects 0.000 abstract description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000001419 dependent effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/70—Admission control; Resource allocation
- H04L47/72—Admission control; Resource allocation using reservation actions during connection setup
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请提供了一种缓存空间管理方法及装置,可应用于计算机技术领域。所述方法包括:所述网卡接收第一基地址和第一指针,按照读取请求的数量,读取由所述第一基地址和第二地址偏移量之和所指向的第一共享接收队列中的空闲的缓冲区描述符,其中,所述第一基地址表示所述第一共享接收队列的基地址,所述第一指针表示下一次写入所述空闲的缓冲区描述符的序号,所述第二地址偏移量表示下一次读取所述空闲的缓冲区描述符的地址信息,所述第一共享接收队列用于存储来自缓冲区描述符空间的、并且数量小于或等于第一队列深度的所述空闲的缓冲区描述符。本申请能够实现连续快速地读取多个空闲的缓冲区描述符,简化读取流程,有效避免队头阻塞的出现。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种缓存空间管理方法及装置。
背景技术
目前,网络设备的接收端支持多个业务流在同一时间以队列的方式进行连接。当其中一条业务流接收到新消息的报文后,接收端会向共享接收队列申请一个缓冲区描述符,使用该缓冲区描述符记录的内存地址所指向的缓冲区来存储报文中的净荷数据。接收端通过释放缓冲区描述符与否表示新消息处理完成与否。然而,不同业务流的活跃程度不同,活跃的业务流相比于不活跃的业务流能够更快处理完成新消息,因而能够更快地释放缓冲区描述符。这导致占用连续内存地址的多个缓冲区描述符的释放状态不同,即两个已被释放的缓冲区描述符之间可能存在一个或多个未被释放的缓冲区描述符。
为了读取占用不连续内存地址的多个已被释放的缓冲区描述符,现有技术在未被释放的缓冲区描述符前插入连接缓冲区描述符,在读取到一个连接缓冲区描述符之后,通过提取连接缓冲区描述符中存储的下一个已被释放的缓冲区描述符的地址信息,才能读取下一个已被释放的缓冲区描述符,将报文中的净荷数据存储到缓冲区描述符记录的内存地址所指向的缓冲区。然而,现有技术基于连接缓冲区描述符读取多个已被释放的缓冲区描述符的方式,使得读取流程繁琐,容易造成队头阻塞,进而引发报文丢失、报文重传等问题,无法满足低延迟、高性能、高吞吐的网络需求。
发明内容
为解决上述技术问题,本申请提供一种缓存空间管理方法及装置,能够解决由于缓冲区描述符的读取流程繁琐而造成的队头阻塞问题。
第一方面,提供了一种缓存空间管理方法,应用于网络设备,该网络设备包括网卡,该方法包括:
上述网卡接收第一基地址和第一指针;
上述网卡按照读取请求的数量,读取由上述第一基地址和第二地址偏移量之和所指向的第一共享接收队列中的空闲的缓冲区描述符;
其中,上述第一基地址表示上述第一共享接收队列的基地址,上述第一共享接收队列用于存储来自缓冲区描述符空间的、并且数量小于或等于第一队列深度的上述空闲的缓冲区描述符,该缓冲区描述符空间用于存储缓冲区描述符,该缓冲区描述符包括上述空闲的缓冲区描述符和占用的缓冲区描述符,上述空闲的缓冲区描述符记录的内存地址指向的缓冲区没有存储净荷数据,该占用的缓冲区描述符记录的内存地址指向的缓冲区存储有净荷数据,该第一队列深度表示上述第一共享接收队列存储的上述空闲的缓冲区描述符的数量的最大值,上述第一指针表示下一次写入上述空闲的缓冲区描述符的序号,上述读取请求包括第一读取请求,该第一读取请求是第一队列在收到第一消息的第一个报文的情况下生成的,上述第二地址偏移量是第二指针与上述空闲的缓冲区描述符所占用的内存地址空间之积,上述第二地址偏移量表示下一次读取上述空闲的缓冲区描述符的地址信息,该第二指针表示下一次读取上述空闲的缓冲区描述符的序号,该第二指针在上述网卡读取上述空闲的缓冲区描述符之后递增。
上述方案中,通过将从存储有空闲的缓冲区描述符和占用的缓冲区描述符的缓冲区描述符空间中得到的多个空闲的缓冲区描述符存储在第一共享接收队列,由网络设备的网卡在第一基地址和第二地址偏移量的指示下读取第一共享接收队列中的空闲的缓冲区描述符,能够实现对多个空闲的缓冲区描述符的连续快速读取,简化了对缓冲区描述符的读取流程,有效避免了队头阻塞的出现,进而降低了报文丢失和报文重传的概率,能够满足低延迟、高性能、高吞吐的网络需求。
在一些可能的实现方式中,上述方法还包括:
在确定上述第一指针等于上述第一队列深度,并且分配给上述第一队列的上述空闲的缓冲区描述符使用完的情况下,上述网卡将上述第二指针发送给处理模块;
上述网卡接收上述处理模块在确定第二共享接收队列中存在上述空闲的缓冲区描述符,且上述第二指针大于或等于上述第一指针的情况下发送的第二基地址和上述第一指针;
上述网卡从上述第一共享接收队列中读取数量为上述第一队列深度的上述空闲的缓冲区描述符之后,将上述第二指针设置为0;
上述网卡按照上述读取请求的数量,读取由上述第二基地址和上述第二地址偏移量之和所指向的第二共享接收队列中的上述空闲的缓冲区描述符;
其中,上述处理模块通过上述网络设备中的软件实现,上述第二共享接收队列用于存储来自上述缓冲区描述符空间的、并且数量小于或等于第二队列深度的上述空闲的缓冲区描述符,上述第二基地址表示上述第二共享接收队列的基地址,该第二队列深度表示上述第二共享接收队列存储的上述空闲的缓冲区描述符的数量的最大值,上述第二地址偏移量的递增取决于上述第二指针的递增,上述第二指针在上述网卡读取上述空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,上述方法还包括:
在确定上述第一指针小于上述第一队列深度,并且上述第一指针与上述第二指针之间的差值小于或等于第一阈值的情况下,上述网卡将写入请求发送给上述处理模块;
上述网卡接收上述处理模块根据上述写入请求发送的上述第一基地址和上述第一指针;
上述网卡按照上述读取请求的数量,读取由上述第一基地址和上述第二地址偏移量之和所指向的上述第一共享接收队列中的上述空闲的缓冲区描述符;
其中,上述写入请求用于请求上述处理模块将来自上述缓冲区描述符空间的多个上述空闲的缓冲区描述符写入由上述第一基地址和第一地址偏移量之和所指向的上述第一共享接收队列中的位置,该第一地址偏移量是上述第一指针与上述空闲的缓冲区描述符所占用的内存地址空间之积,该第一地址偏移量表示下一次写入上述空闲的缓冲区描述符的地址信息,上述第一指针在上述处理模块写入上述空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,上述缓冲区描述符空间中上述空闲的缓冲区描述符所占用的内存地址是不连续的,上述第一共享接收队列是根据上述缓冲区描述符空间中一部分上述空闲的缓冲区描述符向上述网络设备申请的连续的内存地址空间,上述第二共享接收队列是根据上述缓冲区描述符空间中另一部分上述空闲的缓冲区描述符向上述网络设备申请的连续的内存地址空间。
在一些可能的实现方式中,上述第二共享接收队列中的上述空闲的缓冲区描述符是在将多个上述空闲的缓冲区描述符写入上述第一共享接收队列的同时写入的,或者,上述第二共享接收队列中的上述空闲的缓冲区描述符是在将数量为上述第一队列深度的上述空闲的缓冲区描述符写入上述第一共享接收队列完成之后写入的,或者,上述第二共享接收队列中的上述空闲的缓冲区描述符是在从上述第一共享接收队列中读取数量为上述第一队列深度的上述空闲的缓冲区描述符完成之后写入的。
在一些可能的实现方式中,上述第二共享接收队列中的上述空闲的缓冲区描述符是在来自上述第一共享接收队列的上述空闲的缓冲区描述符使用之后,将使用后的缓冲区描述符记录的内存地址中未占用的内存地址进行回收,在上述缓冲区描述符空间中由回收到的该未占用的内存地址与新的内存地址组成的空闲的缓冲区描述符,其中,该未占用的内存地址表示没有存储净荷数据的内存地址空间对应的内存地址。
第二方面,提供了一种缓存空间管理装置,包括:网卡,
上述网卡,用于接收第一基地址和第一指针;
上述网卡,还用于按照读取请求的数量,读取由上述第一基地址和第二地址偏移量之和所指向的第一共享接收队列中的空闲的缓冲区描述符;
其中,上述第一基地址表示上述第一共享接收队列的基地址,上述第一共享接收队列用于存储来自缓冲区描述符空间的、并且数量小于或等于第一队列深度的上述空闲的缓冲区描述符,该缓冲区描述符空间用于存储缓冲区描述符,该缓冲区描述符包括上述空闲的缓冲区描述符和占用的缓冲区描述符,上述空闲的缓冲区描述符记录的内存地址指向的缓冲区没有存储净荷数据,该占用的缓冲区描述符记录的内存地址指向的缓冲区存储有净荷数据,该第一队列深度表示上述第一共享接收队列存储的上述空闲的缓冲区描述符的数量的最大值,上述第一指针表示下一次写入上述空闲的缓冲区描述符的序号,上述读取请求包括第一读取请求,该第一读取请求是第一队列在收到第一消息的第一个报文的情况下生成的,上述第二地址偏移量是第二指针与上述空闲的缓冲区描述符所占用的内存地址空间之积,上述第二地址偏移量表示下一次读取上述空闲的缓冲区描述符的地址信息,该第二指针表示下一次读取上述空闲的缓冲区描述符的序号,该第二指针在上述网卡读取上述空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,上述缓存空间管理装置还包括处理模块,
上述网卡,还用于在确定上述第一指针等于上述第一队列深度,并且分配给上述第一队列的上述空闲的缓冲区描述符使用完的情况下,将上述第二指针发送给上述处理模块;
上述网卡,还用于接收上述处理模块在确定第二共享接收队列中存在上述空闲的缓冲区描述符,且上述第二指针大于或等于上述第一指针的情况下发送的第二基地址和上述第一指针;
上述网卡,还用于从上述第一共享接收队列中读取数量为上述第一队列深度的上述空闲的缓冲区描述符之后,将上述第二指针设置为0;
上述网卡,还用于按照上述读取请求的数量,读取由上述第二基地址和上述第二地址偏移量之和所指向的第二共享接收队列中的上述空闲的缓冲区描述符;
其中,上述第二共享接收队列用于存储来自上述缓冲区描述符空间的、并且数量小于或等于第二队列深度的上述空闲的缓冲区描述符,上述第二基地址表示上述第二共享接收队列的基地址,该第二队列深度表示上述第二共享接收队列存储的上述空闲的缓冲区描述符的数量的最大值,上述第二地址偏移量的递增取决于上述第二指针的递增,上述第二指针在上述网卡读取上述空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,上述网卡,还用于在确定上述第一指针小于上述第一队列深度,并且上述第一指针与上述第二指针之间的差值小于或等于第一阈值的情况下,将写入请求发送给上述处理模块;
上述网卡,还用于接收上述处理模块根据上述写入请求发送的上述第一基地址和上述第一指针;
上述网卡,还用于按照上述读取请求的数量,读取由上述第一基地址和上述第二地址偏移量之和所指向的上述第一共享接收队列中的上述空闲的缓冲区描述符;
其中,上述写入请求用于请求上述处理模块将来自上述缓冲区描述符空间的多个上述空闲的缓冲区描述符写入由上述第一基地址和第一地址偏移量之和所指向的上述第一共享接收队列中的位置,该第一地址偏移量是上述第一指针与上述空闲的缓冲区描述符所占用的内存地址空间之积,该第一地址偏移量表示下一次写入上述空闲的缓冲区描述符的地址信息,上述第一指针在上述处理模块写入上述空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,上述缓冲区描述符空间中上述空闲的缓冲区描述符所占用的内存地址是不连续的,上述第一共享接收队列是根据上述缓冲区描述符空间中一部分上述空闲的缓冲区描述符向前述装置申请的连续的内存地址空间,上述第二共享接收队列是根据上述缓冲区描述符空间中另一部分上述空闲的缓冲区描述符向前述装置申请的连续的内存地址空间。
在一些可能的实现方式中,上述第二共享接收队列中的上述空闲的缓冲区描述符是在将多个上述空闲的缓冲区描述符写入上述第一共享接收队列的同时写入的,或者,上述第二共享接收队列中的上述空闲的缓冲区描述符是在将数量为上述第一队列深度的上述空闲的缓冲区描述符写入上述第一共享接收队列完成之后写入的,或者,上述第二共享接收队列中的上述空闲的缓冲区描述符是在从上述第一共享接收队列中读取数量为上述第一队列深度的上述空闲的缓冲区描述符完成之后写入的。
在一些可能的实现方式中,上述第二共享接收队列中的上述空闲的缓冲区描述符是在来自上述第一共享接收队列的上述空闲的缓冲区描述符使用之后,将使用后的缓冲区描述符记录的内存地址中未占用的内存地址进行回收,在上述缓冲区描述符空间中由回收到的该未占用的内存地址与新的内存地址组成的空闲的缓冲区描述符,其中,该未占用的内存地址表示没有存储净荷数据的内存地址空间对应的内存地址。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1是本申请涉及的一种第一网络设备的结构示意图;
图2是本申请提供的一种第二网络设备的结构示意图;
图3是本申请提供的一种缓存空间管理方法的流程示意图;
图4是本申请提供的一种缓存空间管理装置的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。
为了便于理解本申请实施例,先介绍本申请涉及的网络设备。
参见图1,图1是本申请涉及的一种第一网络设备的结构示意图。如图1所示,第一网络设备10包括第一处理模块11和第一网卡12。其中,第一网络设备10可以是任何网络设备,包括交换机、计算机、服务器、集线器等等。
第一处理模块11可以通过第一网络设备10中的软件实现,用于管理第零共享接收队列上下文130(context of share receive queue 0,SRQC_0)。其中,SRQC_0用于存储第零共享接收队列131(share receive queue 0,SRQ_0)的相关信息,包括第零共享接收队列的基地址132、第零共享接收队列的读指针133等等。其中,SRQ_0存储了所有缓冲区描述符。缓冲区描述符用于记录对应的缓冲区的内存地址。缓冲区至少可以存储一个消息的所有报文携带的净荷数据。
第一网卡12通过创建多个队列(第一队列141、第二队列142……)分别处理从多个网络设备中接收到的多个消息(第一消息15、第二消息16……),并且,一个队列正在处理一个消息时,不可以再处理另外一个消息。下面具体介绍第一网络设备10对接收到的多个消息的处理过程。
当第一网络设备10通过第一网卡12接收到另一个网络设备发送的第一消息的第一报文151时,第一处理模块11确定处理第一消息15的第一队列141。随后,第一队列141生成用于请求缓冲区描述符的第一读取请求171,并发送给第一网卡12。第一网卡12接收到第一读取请求171之后,从SRQC_0读取第零共享接收队列的基地址132、第零共享接收队列的读指针133,再从SRQ_0中读取由第零共享接收队列的基地址132以及第零共享接收队列的读指针133之和所指向的第一缓冲区描述符1810,再将读取到的第一缓冲区描述符1810发送给第一队列141。第一队列141将第一消息的第一报文的净荷数据1510存储到第一缓冲区描述符1810记录的内存地址所指向的第一缓冲区181。随后,第一处理模块11将第一队列141与第一缓冲区描述符1810进行绑定,使得第一队列141接收到第一消息15的其余报文(如图1中的第一消息的第二报文152、第一消息的第三报文153)时,可以将报文携带的净荷数据(如图1中的第一消息的第二报文的净荷数据1520、第一消息的第三报文的净荷数据1530)都存储到第一缓冲区181。其中,上述第一队列141是第一网卡12创建的多个队列中的任意一个队列。
而在第一网卡12尚未接收到第一消息15的所有报文的情况下,当第一网卡12接收到另一个网络设备发送的第二消息的第一报文161时,第一处理模块11确定处理第二消息16的第二队列142。随后,第二队列142生成用于请求缓冲区描述符的第二读取请求172,并发送给第一网卡12。第一网卡12接收到第二读取请求172之后,为第二队列142向SRQ_0申请第二缓冲区描述符1820。第二队列142接收到第二缓冲区描述符1820之后,将第二消息的第一报文的净荷数据1610存储到第二缓冲区描述符1820记录的内存地址所指向的第二缓冲区182。随后,第一处理模块11将第二队列142与第二缓冲区描述符1820进行绑定,使得第二队列142接收到第二消息16的其余报文(如图1中的第二消息的第二报文162、第二消息的第三报文163)时,可以将报文携带的净荷数据(如图1中的第二消息的第二报文的净荷数据1620、第二消息的第三报文的净荷数据1630)都存储到第二缓冲区182。其中,上述第二队列142是第一网卡12创建的多个队列中的任意一个队列,并且第一队列141和第二队列142为不同的队列。
然而,由于不同消息的报文的接收时间不同,使得处理不同消息的队列对各自的缓冲区描述符以及缓冲区的使用情况不同。例如,部分缓冲区描述符分配给部分队列,由于对应的消息处理完成,因而这部分缓冲区描述符被释放且可以重新分配给队列,也即这部分缓冲区描述符记录的内存地址所指向的缓冲区没有存储净荷数据,这部分队列也可以处理新消息;还有部分缓冲区描述符分配给部分队列,但对应的消息没有处理完成,因而这部分缓冲区描述符未被释放,也即这部分缓冲区描述符记录的内存地址所指向的缓冲区存储有净荷数据,这部分队列也不可以处理新消息;还有部分缓冲区描述符没有被分配给队列,因而这部分缓冲区描述符记录的内存地址所指向的缓冲区中没有存储净荷数据。
综上所述,所有缓冲区描述符的状态不同。在本申请中,将已被释放的缓冲区描述符以及未被分配的缓冲区描述符都称为空闲的缓冲区描述符,将未被释放的缓冲区描述符称为占用的缓冲区描述符。也即,空闲的缓冲区描述符记录的内存地址所指向的缓冲区没有存储净荷数据,占用的缓冲区描述符记录的内存地址所指向的缓冲区存储有净荷数据。
由于SRQ_0存储了所有缓冲区描述符,因此SRQ_0中存储着空闲的缓冲区描述符和占用的缓冲区描述符。又由于处理不同消息的队列对各自的缓冲区描述符的使用情况不同,因此SRQ_0中两个空闲的缓冲区描述符之间可能存在一个或多个占用的缓冲区描述符,此时,两个空闲的缓冲区描述符在SRQ_0中所占用的内存地址是不连续的。
为了读取占用不连续内存地址的多个空闲的缓冲区描述符,在占用的缓冲区描述符前插入连接缓冲区描述符,使得第一网卡12在读取到一个连接缓冲区描述符之后,通过提取连接缓冲区描述符中存储的下一个空闲的缓冲区描述符的地址信息,才可以读取下一个空闲的缓冲区描述符。然而,上述基于连接缓冲区描述符读取多个空闲的缓冲区描述符的方式,使得读取流程繁琐,容易造成队头阻塞,进而引发报文丢失、报文重传等问题,无法满足低延迟、高性能、高吞吐的网络需求。
为了解决上述问题,本申请提供一种第二网络设备、缓存空间管理方法及装置,能够解决由于缓冲区描述符的读取流程繁琐而造成的队头阻塞问题。
参见图2,图2是本申请提供的一种第二网络设备的结构示意图。如图2所示,第二网络设备20包括第二处理模块21和第二网卡22。其中,第二网络设备20可以是任何网络设备,包括交换机、计算机、服务器、集线器等等。
第二处理模块21可以通过第二网络设备20中的软件实现,用于管理共享接收队列上下文230(context of share receive queue,SRQC)。其中,SRQC用于存储缓冲区描述符空间的基地址以及读指针、第一指针231、第二指针232、第一共享接收队列的基地址2331以及第一队列深度2332、第二共享接收队列的基地址2341以及第二队列深度2342。其中,缓冲区描述符空间存储了所有缓冲区描述符。第一共享接收队列(SRQ_1)和第二共享接收队列(SRQ_2)都用于存储空闲的缓冲区描述符。例如,SRQ_1用于存储第三缓冲区描述符2710、第四缓冲区描述符2720……其中,第三缓冲区描述符2710记录的内存地址指向第三缓冲区271,第四缓冲区描述符2720记录的内存地址指向第四缓冲区272……并且,第一队列深度2332和第二队列深度2342相等,也即SRQ_1和SRQ_2可以存储的空闲的缓冲区描述符的数量的最大值相同。
第二网卡22通过创建多个队列(第三队列241、第四队列242……)分别处理从多个网络设备中接收到的多个消息(第三消息25、第四消息26……),并且,一个队列正在处理一个消息时,不可以再处理另外一个消息。
本申请采用上述第二网络设备20读取多个空闲的缓冲区描述符,进而对多个消息的报文携带的净荷数据进行存储。参见下面介绍的一种缓存空间管理方法,该方法用于从SRQ_1和SRQ_2连续快速地读取多个空闲的缓冲区描述符。
参见图3,图3是本申请提供的一种缓存空间管理方法的流程示意图。如图3所示,本申请提供的缓存空间管理方法,包括:
S301:处理模块将数量小于或等于第一队列深度的多个空闲的缓冲区描述符写入由第一基地址和第一地址偏移量之和所指向的第一共享接收队列中的位置。
其中,处理模块可以是图2中的第二网络设备20中的第二处理模块21,第一共享接收队列可以是图2中第二网络设备20中的SRQ_1。
在一些可能的实现方式中,处理模块从SRQC读取缓冲区描述符空间的基地址以及读指针,再从缓冲区描述符空间中读取由缓冲区描述符空间的基地址和读指针之和所指向的空闲的缓冲区描述符。按照空闲的缓冲区描述符在缓冲区描述符空间中所占用的内存地址由低到高的顺序,或者,按照空闲的缓冲区描述符记录的内存地址由低到高的顺序,处理模块将读取到的数量小于或等于第一队列深度的多个空闲的缓冲区描述符进行顺序编号,因此,读取到的每个空闲的缓冲区描述符都具有序号。随后,处理模块按照空闲的缓冲区描述符的序号由小到大将多个空闲的缓冲区描述符写入由第一基地址和第一地址偏移量之和所指向的SRQ_1中的位置。其中,第一队列深度是SRQ_1可以存储的空闲的缓冲区描述符的数量的最大值。SRQ_1是由处理模块向网络设备申请的连续的内存地址空间。第一基地址用于表示SRQ_1的基地址。第一地址偏移量是第一指针与空闲的缓冲区描述符所占用的内存地址空间之积,用于表示下一次写入空闲的缓冲区描述符的地址信息。第一指针用于表示下一次写入空闲的缓冲区描述符的序号。第一指针的最小值为0,最大值为第一队列深度-1。每次写入一个空闲的缓冲区描述符之后,第一指针递增,使得第一地址偏移量递增。每个空闲的缓冲区描述符所占用的内存地址空间相同。SRQC可以是图2中第二网络设备20中的SRQC,缓冲区描述符空间可以是图2中第二网络设备20中的缓冲区描述符空间,缓冲区描述符空间的基地址可以是图2中第二网络设备20中SRQC中的缓冲区描述符空间的基地址,缓冲区描述符空间的读指针可以是图2中第二网络设备20中SRQC中的缓冲区描述符空间的读指针,第一队列深度可以是图2中第二网络设备20中SRQC中的SRQ_1的第一队列深度2332,第一基地址可以是图2中第二网络设备20中SRQC中的第一共享接收队列的基地址2331,第一指针可以是图2中第二网络设备20中SRQC中的第一指针231。
应当理解,上述对用于写入SRQ_1的空闲的缓冲区描述符进行顺序编号,从序号0开始。并且,将序号为0的空闲的缓冲区描述符写入仅由第一基地址所指向的SRQ_1中的位置。并且,对于多次读取到的空闲的缓冲区描述符,处理模块基于上一次读取到的空闲的缓冲区描述符的序号继续对下一次读取到的空闲的缓冲区描述符进行顺序编号。例如,处理模块第一次读取到三个空闲的缓冲区描述符,分别对其编号为0、1、2,则处理模块将第二次读取到的两个空闲的缓冲区描述符分别编号为3、4,再将第三次读取到的两个空闲的缓冲区描述符分别编号为5、6。
S302:网卡接收处理模块发送的第一基地址和第一指针。
其中,网卡可以是图2中的第二网络设备20中的第二网卡22。
在一些可能的实现方式中,在将读取到的空闲的缓冲区描述符写入SRQ_1的操作完成之后,处理模块将第一基地址和第一指针发送给网卡。相应地,网卡接收处理模块发送的第一基地址和第一指针。其中,第一基地址用于表示SRQ_1的基地址。第一指针表示下一次写入SRQ_1中的空闲的缓冲区描述符的序号。
S303:网卡按照读取请求的数量,读取由第一基地址和第二地址偏移量之和所指向的第一共享接收队列中的空闲的缓冲区描述符。
在一些可能的实现方式中,当网卡顺序或乱序接收到另一个网络设备发送的第一消息的第一个报文时,处理模块确定处理第一消息的第一队列,以使第一队列顺序或乱序接收第一消息的第一个报文。随后,第一队列生成用于请求缓冲区描述符的第一读取请求,并发送给网卡。其中,第一队列可以是图2中的第二网络设备20中的第三队列241,第一消息可以是图2中的第二网络设备20中的第三消息25。
而在网卡尚未接收到第一消息的所有报文的情况下,当网卡顺序或乱序接收到另一个网络设备发送的第二消息的第一个报文时,处理模块确定处理第二消息的第二队列。随后,第二队列生成用于请求缓冲区描述符的第二读取请求,并发送给网卡。因此,网卡能够接收到多个队列发送的读取请求,其中,读取请求包括第一读取请求和第二读取请求。其中,第二队列可以是图2中的第二网络设备20中的第四队列242,第二消息可以是图2中的第二网络设备20中的第四消息26。
在一些可能的实现方式中,按照读取请求的数量,网卡读取由第一基地址和第二地址偏移量之和所指向的SRQ_1中的空闲的缓冲区描述符。其中,第二地址偏移量是第二指针与空闲的缓冲区描述符所占用的内存地址空间之积,用于表示下一次读取空闲的缓冲区描述符的地址信息。第二指针用于表示下一次读取的空闲的缓冲区描述符的序号。每次读取一个空闲的缓冲区描述符之后,第二指针递增,使得第二地址偏移量递增。第二指针存储在上述SRQC中。第二指针可以是图2中第二网络设备20中SRQC中的第二指针232。
S304:网卡将读取到的空闲的缓冲区描述符顺序分配给与多个读取请求对应的多个队列。
在一些可能的实现方式中,按照读取请求的接收顺序,网卡将读取到的多个空闲的缓冲区描述符顺序分配给与多个读取请求对应的多个队列。其中,多个队列包括上述步骤S303中的第一队列和第二队列。多个队列中的每个队列接收到空闲的缓冲区描述符之后,将其处理的消息的第一个报文携带的净荷数据存储到空闲的缓冲区描述符记录的内存地址所指向的缓冲区。随后,处理模块将该队列与该缓冲区描述符进行绑定,使得该队列接收到其处理的消息的其余报文时,可以将报文携带的净荷数据都存储到该缓冲区。
S305:网卡确定第一指针是否小于第一队列深度。在确定第一指针小于第一队列深度的情况下,转S306;在确定第一指针等于第一队列深度的情况下,转S307。
在一些可能的实现方式中,网卡将第一指针与第一队列深度进行比较,从而确定处理模块是否继续在SRQ_1中写入空闲的缓冲区描述符。在第一指针小于第一队列深度的情况下,表明SRQ_1未满,则处理模块还可以继续在SRQ_1中写入空闲的缓冲区描述符。在第一指针等于第一队列深度的情况下,表明SRQ_1已满,即写入SRQ_1中的空闲的缓冲区描述符的数量达到最大,则处理模块不可以继续在SRQ_1中写入空闲的缓冲区描述符。
S306:在确定第一指针与第二指针之间的差值小于或等于第一阈值的情况下,网卡将写入请求发送给处理模块。
在一些可能的实现方式中,在第一指针小于第一队列深度的情况下,网卡将第一指针与第二指针之间的差值与第一阈值进行比较,从而确定网卡是否继续在SRQ_1中读取空闲的缓冲区描述符。具体地,每次读取一个空闲的缓冲区描述符之前,网卡先确定第一指针与第二指针之间的差值是否大于第一阈值,再确定是否增加第二指针。在第一指针与第二指针之间的差值大于第一阈值的情况下,表明SRQ_1中未被读取的空闲的缓冲区描述符的数量大于第一阈值,则网卡增加第二指针,继续在SRQ_1中读取由第一基地址和第二地址偏移量之和所指向的空闲的缓冲区描述符。在第一指针与第二指针之间的差值小于或等于第一阈值的情况下,表明SRQ_1中未被读取的空闲的缓冲区描述符的数量小于或等于第一阈值,则网卡生成写入请求,并将写入请求发送给处理模块。处理模块接收到网卡发送的写入请求之后,执行上述步骤S301。其中,第一阈值可以由用户确定。
S307:在确定分配给第一队列的空闲的缓冲区描述符使用完的情况下,网卡将第二指针发送给处理模块。
在一些可能的实现方式中,处理模块将第一队列与分配给第一队列的空闲的缓冲区描述符(也称为第一缓冲区描述符)进行绑定,使得第一队列接收到第一消息的报文时,可以将报文携带的净荷数据存储到第一缓冲区描述符记录的内存地址所指向的缓冲区(也称为第一缓冲区)。在第一队列将第一消息的所有报文携带的净荷数据都存储到第一缓冲区之后,表明第一队列对第一消息处理完成,也即第一缓冲区描述符使用完成,则网卡生成完成请求。随后,网卡从SRQC中读取第二指针,并将完成请求和第二指针发送给处理模块。处理模块接收到完成请求之后,通知应用从第一缓冲区读取第一消息的所有净荷数据。在应用读取完所有净荷数据之后,处理模块释放第一缓冲区描述符,使得第一缓冲区描述符再次成为空闲的缓冲区描述符。
S308:在确定第二共享接收队列中存在空闲的缓冲区描述符,且第二指针大于或等于第一指针的情况下,处理模块将第二基地址和第一指针发送给网卡。
在一些可能的实现方式中,SRQ_2是由处理模块向网络设备申请连续的内存地址空间。SRQ_2的生成情况至少包括以下三种:
在第一种情况中,处理模块向网络设备的内存地址空间同时申请SRQ_1和SRQ_2。
在第二种情况中,在将数量为第一队列深度的空闲的缓冲区描述符写入SRQ_1的操作完成之后,处理模块向网络设备的内存地址空间申请SRQ_2。
在第三种情况中,在网卡从SRQ_1中读取数量为第一队列深度的空闲的缓冲区描述符的操作完成之后,处理模块向网络设备的内存地址空间申请SRQ_2。
因此,在SRQ_2中写入空闲的缓冲区描述符也至少包括以下三种实现方式:
在第一种方式中,对应上述第一种情况,在将数量小于或等于第一队列深度的空闲的缓冲区描述符写入SRQ_1的同时,处理模块将多个空闲的缓冲区描述符写入SRQ_2。具体地,处理模块从SRQC读取缓冲区描述符空间的基地址以及读指针,再从缓冲区描述符空间中读取由缓冲区描述符空间的基地址和读指针之和所指向的空闲的缓冲区描述符。按照空闲的缓冲区描述符在缓冲区描述符空间中所占用的内存地址由低到高的顺序,或者,按照空闲的缓冲区描述符记录的内存地址由低到高的顺序,处理模块将读取到的数量小于或等于第二队列深度的多个空闲的缓冲区描述符进行顺序编号,使得读取到的每个空闲的缓冲区描述符都具有序号。随后,处理模块按照空闲的缓冲区描述符的序号由小到大将多个空闲的缓冲区描述符写入由第二基地址和第三地址偏移量之和所指向的SRQ_2中的位置。其中,第二队列深度是SRQ_2可以存储的空闲的缓冲区描述符的数量的最大值。第二队列深度等于第一队列深度。第二基地址用于表示SRQ_2的基地址。第三地址偏移量是第三指针与空闲的缓冲区描述符所占用的内存地址空间之积,用于表示下一次写入空闲的缓冲区描述符的地址信息。第三指针用于表示下一次写入SRQ_2中的空闲的缓冲区描述符的序号。第三指针的初始值为0,因而,第三地址偏移量的初始值也为0。每次写入一个空闲的缓冲区描述符之后,第三指针递增,使得第三地址偏移量递增。第三指针的最大值为第二队列深度-1。第二队列深度可以是图2中第二网络设备20中SRQ_2的第二队列深度2342,第二基地址可以是图2中第二网络设备20中第二共享接收队列的基地址2341。
在第二种方式中,对应上述第二种情况,在将数量为第一队列深度的空闲的缓冲区描述符写入SRQ_1的操作完成之后,处理模块将多个空闲的缓冲区描述符写入SRQ_2。具体地,在将数量为第一队列深度的空闲的缓冲区描述符写入SRQ_1的操作完成之后,处理模块将第一指针设置为0,因而,第一地址偏移量也为0。接着,处理模块从SRQC读取缓冲区描述符空间的基地址以及读指针,再从缓冲区描述符空间中读取由缓冲区描述符空间的基地址和读指针之和所指向的空闲的缓冲区描述符。按照空闲的缓冲区描述符在缓冲区描述符空间中所占用的内存地址由低到高的顺序,或者,按照空闲的缓冲区描述符记录的内存地址由低到高的顺序,处理模块将读取到的数量小于或等于第二队列深度的多个空闲的缓冲区描述符进行顺序编号。随后,处理模块按照空闲的缓冲区描述符的序号由小到大将多个空闲的缓冲区描述符写入由第二基地址和第一地址偏移量之和所指向的SRQ_2中的位置。其中,第一地址偏移量是第一指针与空闲的缓冲区描述符所占用的内存地址空间之积,用于表示下一次写入空闲的缓冲区描述符的地址信息。第一指针用于表示下一次写入SRQ_2中的空闲的缓冲区描述符的序号。每次写入一个空闲的缓冲区描述符之后,第一指针递增,使得第一地址偏移量递增。
在第三种方式中,对应上述第三种情况,在网卡从SRQ_1中读取数量为第一队列深度的空闲的缓冲区描述符的操作完成之后,处理模块将多个空闲的缓冲区描述符写入SRQ_2。具体地,在网卡从SRQ_1中读取数量为第一队列深度的空闲的缓冲区描述符的操作完成之后,处理模块将第一指针设置为0,因而,第一地址偏移量也为0。接着,处理模块从SRQC读取缓冲区描述符空间的基地址以及读指针,再从缓冲区描述符空间中读取由缓冲区描述符空间的基地址和读指针之和所指向的空闲的缓冲区描述符。按照空闲的缓冲区描述符在缓冲区描述符空间中所占用的内存地址由低到高的顺序,或者,按照空闲的缓冲区描述符记录的内存地址由低到高的顺序,处理模块将读取到的数量小于或等于第二队列深度的多个空闲的缓冲区描述符进行顺序编号。随后,处理模块按照空闲的缓冲区描述符的序号由小到大将多个空闲的缓冲区描述符写入由第二基地址和第一地址偏移量之和所指向的SRQ_2中的位置。其中,每次写入一个空闲的缓冲区描述符之后,第一指针递增,使得第一地址偏移量递增,从而得到用于表示下一次写入空闲的缓冲区描述符的地址信息。
应当理解,上述对用于写入SRQ_2的空闲的缓冲区描述符进行顺序编号,从序号0开始。并且,将序号为0的空闲的缓冲区描述符写入仅由第二基地址所指向的SRQ_2中的位置。并且,对于多次读取到的空闲的缓冲区描述符,处理模块基于上一次读取到的空闲的缓冲区描述符的序号继续对下一次读取到的空闲的缓冲区描述符进行顺序编号。例如,处理模块第一次读取到三个空闲的缓冲区描述符,分别对其编号为0、1、2,则处理模块将第二次读取到的两个空闲的缓冲区描述符分别编号为3、4,再将第三次读取到的两个空闲的缓冲区描述符分别编号为5、6。
在一些可能的实现方式中,在接收到网卡发送的第二指针之后,处理模块确定SRQ_2中是否存在空闲的缓冲区描述符,并且将第二指针与第一指针进行比较,从而确定是否将第二基地址和第一指针发送给网卡。在确定SRQ_2中存在空闲的缓冲区描述符的情况下,表明网卡可以从SRQ_2中读取的空闲的缓冲区描述符,因而处理模块可以将第二基地址发送给网卡。在确定SRQ_2中不存在空闲的缓冲区描述符的情况下,表明网卡不可以从SRQ_2中读取的空闲的缓冲区描述符,因而处理模块无法将第二基地址发送给网卡。而在第二指针大于或等于第一指针的情况下,表明SRQ_1中还有未被读取的空闲的缓冲区描述符,即网卡未完成从SRQ_1中读取所有空闲的缓冲区描述符的操作,则网卡可以增加第二指针,继续在SRQ_1中读取由第一基地址和第二地址偏移量之和所指向的空闲的缓冲区描述符。在这个过程中,处理模块可以先将第二基地址和第一指针发送给网卡,使得网卡完成从SRQ_1中读取所有空闲的缓冲区描述符的操作之后,能够迅速根据第二基地址从SRQ_2中读取的空闲的缓冲区描述符。
若SRQ_2中的空闲的缓冲区描述符是通过上述第一种方式写入的,则处理模块将第三指针作为第一指针,将第二基地址和第一指针发送给网卡。相应地,网卡接收处理模块发送的第二基地址和第一指针。
若SRQ_2中的空闲的缓冲区描述符是通过上述第二种方式写入的,则处理模块将第二基地址和第一指针发送给网卡。相应地,网卡接收处理模块发送的第二基地址和第一指针。
若SRQ_2中的空闲的缓冲区描述符是通过上述第三种方式写入的,则处理模块将第二基地址和第一指针发送给网卡。相应地,网卡接收处理模块发送的第二基地址和第一指针。
在一些可能的实现方式中,SRQ_2中的空闲的缓冲区描述符记录的内存地址来自SRQ_1中的缓冲区描述符记录的内存地址中未占用的内存地址。具体地,对于得到SRQ_1中的空闲的缓冲区描述符的第一队列,在第一队列正在处理的第一消息的所有报文携带的净荷数据所需要的内存地址空间小于分配给第一队列的缓冲区描述符记录的内存地址所指向的缓冲区的情况下,处理模块回收缓冲区描述符记录的内存地址中未占用的内存地址,将回收到的未占用的内存地址与新的内存地址在缓冲区描述符空间中组成新的空闲的缓冲区描述符。接着,处理模块再将新的空闲的缓冲区描述符写入SRQ_2,使得SRQ_2中的空闲的缓冲区描述符记录的部分内存地址是SRQ_1中的缓冲区描述符记录的内存地址中未占用的内存地址。其中,未占用的内存地址是指没有存储净荷数据的内存地址空间对应的内存地址。
S309:网卡从第一共享接收队列中读取数量为第一队列深度的空闲的缓冲区描述符之后,将第二指针设置为0。
在一些可能的实现方式中,在第一队列深度与第二指针之间的差值为1的情况下,表明SRQ_1中没有未被读取的空闲的缓冲区描述符,即网卡完成了从SRQ_1中读取所有空闲的缓冲区描述符的操作,且在SRQ_1中不可以继续写入或读取空闲的缓冲区描述符,此时,网卡需要在SRQ_2中读取空闲的缓冲区描述符,因而网卡将第二指针设置为0。
S310:网卡按照读取请求的数量,读取由第二基地址和第二地址偏移量之和所指向的第二共享接收队列中的空闲的缓冲区描述符。
在一些可能的实现方式中,按照读取请求的数量,网卡读取由第二基地址和第二地址偏移量之和所指向的SRQ_2中的空闲的缓冲区描述符。其中,第二地址偏移量是第二指针与空闲的缓冲区描述符所占用的内存地址空间之积,用于表示下一次读取空闲的缓冲区描述符的地址信息。第二指针用于表示下一次读取的空闲的缓冲区描述符的序号。第二指针在从SRQ_1中读取所有空闲的缓冲区描述符的操作完成之后设置为0,因而,第二地址偏移量也为0。每次读取一个空闲的缓冲区描述符之后,第二指针递增,使得第二地址偏移量递增。
S311:网卡将读取到的空闲的缓冲区描述符顺序分配给与多个读取请求对应的多个队列。
综上所述,通过实施本申请实施例,可以从存储有空闲的缓冲区描述符和占用的缓冲区描述符的缓冲区描述符空间中获取多个占用不连续内存地址的空闲的缓冲区描述符,再将获取的多个空闲的缓冲区描述符存储在由连续的内存地址空间组成的SRQ_1和SRQ_2,由网络设备的网卡在第一基地址和第二地址偏移量的指示下读取SRQ_1中的空闲的缓冲区描述符,并且在读取完SRQ_1中的所有空闲的缓冲区描述符之后,将SRQ_2中的空闲的缓冲区描述符提供给网卡继续读取。随后,网卡将读取到的空闲的缓冲区描述符顺序分配给与读取请求对应的队列,以使队列将接收到的报文携带的净荷数据存储到缓冲区描述符记录的内存地址所指示的缓冲区。由此可见,本技术方案能够实现对多个空闲的缓冲区描述符的连续快速读取,简化了对缓冲区描述符的读取流程,降低了对报文的处理延迟,提高了对报文携带的净荷数据的存储效率,有效避免了队头阻塞的出现,进而降低了报文丢失和报文重传的概率,能够满足低延迟、高性能、高吞吐的网络需求。
参见图4,图4是本申请提供的一种缓存空间管理装置的结构示意图。缓存空间管理装置400可以用于实现前述的缓存空间管理方法。如图4所示,缓存空间管理装置400包括:网卡401。
网卡401用于接收第一基地址和第一指针;
网卡401还用于按照读取请求的数量,读取由第一基地址和第二地址偏移量之和所指向的第一共享接收队列中的空闲的缓冲区描述符;
其中,第一基地址表示第一共享接收队列的基地址,第一共享接收队列用于存储来自缓冲区描述符空间的、并且数量小于或等于第一队列深度的空闲的缓冲区描述符,缓冲区描述符空间用于存储缓冲区描述符,缓冲区描述符包括空闲的缓冲区描述符和占用的缓冲区描述符,空闲的缓冲区描述符记录的内存地址指向的缓冲区没有存储净荷数据,占用的缓冲区描述符记录的内存地址指向的缓冲区存储有净荷数据,第一队列深度表示第一共享接收队列存储的空闲的缓冲区描述符的数量的最大值,第一指针表示下一次写入空闲的缓冲区描述符的序号,读取请求包括第一读取请求,第一读取请求是第一队列在收到第一消息的第一个报文的情况下生成的,第二地址偏移量是第二指针与空闲的缓冲区描述符所占用的内存地址空间之积,第二地址偏移量表示下一次读取空闲的缓冲区描述符的地址信息,第二指针表示下一次读取空闲的缓冲区描述符的序号,第二指针在网卡401读取空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,缓存空间管理装置400还包括处理模块。
网卡401还用于在确定第一指针等于第一队列深度,并且分配给第一队列的空闲的缓冲区描述符使用完的情况下,将第二指针发送给处理模块;
网卡401还用于接收处理模块在确定第二共享接收队列中存在空闲的缓冲区描述符,且第二指针大于或等于第一指针的情况下发送的第二基地址和第一指针;
网卡401还用于从第一共享接收队列中读取数量为第一队列深度的空闲的缓冲区描述符之后,将第二指针设置为0;
网卡401还用于按照读取请求的数量,读取由第二基地址和第二地址偏移量之和所指向的第二共享接收队列中的空闲的缓冲区描述符;
其中,第二共享接收队列用于存储来自缓冲区描述符空间的、并且数量小于或等于第二队列深度的空闲的缓冲区描述符,第二基地址表示第二共享接收队列的基地址,第二队列深度表示第二共享接收队列存储的空闲的缓冲区描述符的数量的最大值,第二地址偏移量的递增取决于第二指针的递增,第二指针在网卡401读取空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,网卡401还用于在确定第一指针小于第一队列深度,并且第一指针与第二指针之间的差值小于或等于第一阈值的情况下,将写入请求发送给处理模块;
网卡401还用于接收处理模块根据写入请求发送的第一基地址和第一指针;
网卡401还用于按照读取请求的数量,读取由第一基地址和第二地址偏移量之和所指向的第一共享接收队列中的空闲的缓冲区描述符;
其中,写入请求用于请求处理模块将来自缓冲区描述符空间的多个空闲的缓冲区描述符写入由第一基地址和第一地址偏移量之和所指向的第一共享接收队列中的位置,第一地址偏移量是第一指针与空闲的缓冲区描述符所占用的内存地址空间之积,第一地址偏移量表示下一次写入空闲的缓冲区描述符的地址信息,第一指针在处理模块写入空闲的缓冲区描述符之后递增。
在一些可能的实现方式中,缓冲区描述符空间中空闲的缓冲区描述符所占用的内存地址是不连续的,第一共享接收队列是根据缓冲区描述符空间中一部分空闲的缓冲区描述符向缓存空间管理装置400申请的连续的内存地址空间,第二共享接收队列是根据缓冲区描述符空间中另一部分空闲的缓冲区描述符向缓存空间管理装置400申请的连续的内存地址空间。
在一些可能的实现方式中,第二共享接收队列中的空闲的缓冲区描述符是在将多个空闲的缓冲区描述符写入第一共享接收队列的同时写入的,或者,第二共享接收队列中的空闲的缓冲区描述符是在将数量为第一队列深度的空闲的缓冲区描述符写入第一共享接收队列完成之后写入的,或者,第二共享接收队列中的空闲的缓冲区描述符是在从第一共享接收队列中读取数量为第一队列深度的空闲的缓冲区描述符完成之后写入的。
在一些可能的实现方式中,第二共享接收队列中的空闲的缓冲区描述符是在来自第一共享接收队列的空闲的缓冲区描述符使用之后,将使用后的缓冲区描述符记录的内存地址中未占用的内存地址进行回收,在缓冲区描述符空间中由回收到的未占用的内存地址与新的内存地址组成的空闲的缓冲区描述符,其中,未占用的内存地址表示没有存储净荷数据的内存地址空间对应的内存地址。
应当理解,本申请实施例中,“当…时”、“…时”以及“若”均指在某种客观情况下网络设备会做出相应的处理,并非是限定时间,且也不要求网络设备实现时一定要有判断的动作,也不意味着存在其它限定。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的保护范围。
Claims (10)
1.一种缓存空间管理方法,其特征在于,应用于网络设备,所述网络设备包括网卡,所述方法包括:
所述网卡在数量小于或等于第一队列深度的多个空闲的缓冲区描述符被写入由第一基地址和第一地址偏移量之和所指向的第一共享接收队列中的位置之后,接收第一基地址和第一指针,其中,所述空闲的缓冲区描述符来自缓冲区描述符空间,所述缓冲区描述符空间用于存储缓冲区描述符,所述缓冲区描述符包括所述空闲的缓冲区描述符和占用的缓冲区描述符,所述空闲的缓冲区描述符记录的内存地址指向的缓冲区没有存储净荷数据,所述占用的缓冲区描述符记录的内存地址指向的缓冲区存储有净荷数据,所述缓冲区描述符空间中所述空闲的缓冲区描述符所占用的内存地址是不连续的,所述第一共享接收队列是根据所述缓冲区描述符空间中一部分所述空闲的缓冲区描述符向所述网络设备申请的连续的内存地址空间,所述第一队列深度表示所述第一共享接收队列存储的所述空闲的缓冲区描述符的数量的最大值,所述第一基地址表示所述第一共享接收队列的基地址,所述第一地址偏移量是第一指针与所述空闲的缓冲区描述符所占用的内存地址空间之积,所述第一地址偏移量表示下一次写入所述空闲的缓冲区描述符的地址信息,所述第一指针表示下一次写入所述空闲的缓冲区描述符的序号;
所述网卡按照读取请求的数量,读取由所述第一基地址和第二地址偏移量之和所指向的所述第一共享接收队列中的所述空闲的缓冲区描述符,其中,所述读取请求包括第一读取请求,所述第一读取请求是第一队列在收到第一消息的第一个报文的情况下生成的,所述第二地址偏移量是第二指针与所述空闲的缓冲区描述符所占用的内存地址空间之积,所述第二地址偏移量表示下一次读取所述空闲的缓冲区描述符的地址信息,所述第二指针表示下一次读取所述空闲的缓冲区描述符的序号,所述第二指针在所述网卡读取所述空闲的缓冲区描述符之后递增;
所述网卡将读取到的所述空闲的缓冲区描述符顺序分配给与多个读取请求对应的多个队列。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在确定所述第一指针等于所述第一队列深度,并且分配给所述第一队列的所述空闲的缓冲区描述符使用完的情况下,所述网卡将所述第二指针发送给处理模块,其中,所述处理模块通过所述网络设备中的软件实现;
所述网卡接收所述处理模块在确定第二共享接收队列中存在所述空闲的缓冲区描述符,且所述第二指针大于或等于所述第一指针的情况下发送的第二基地址和所述第一指针,其中,所述第二共享接收队列是根据所述缓冲区描述符空间中另一部分所述空闲的缓冲区描述符向所述网络设备申请的连续的内存地址空间,所述第二共享接收队列用于存储来自所述缓冲区描述符空间的、并且数量小于或等于第二队列深度的所述空闲的缓冲区描述符,所述第二基地址表示所述第二共享接收队列的基地址,所述第二队列深度表示所述第二共享接收队列存储的所述空闲的缓冲区描述符的数量的最大值;
所述网卡从所述第一共享接收队列中读取数量为所述第一队列深度的所述空闲的缓冲区描述符之后,将所述第二指针设置为0;
所述网卡按照所述读取请求的数量,读取由所述第二基地址和所述第二地址偏移量之和所指向的所述第二共享接收队列中的所述空闲的缓冲区描述符,其中,所述第二地址偏移量的递增取决于所述第二指针的递增,所述第二指针在所述网卡读取所述空闲的缓冲区描述符之后递增。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在确定所述第一指针小于所述第一队列深度,并且所述第一指针与所述第二指针之间的差值小于或等于第一阈值的情况下,所述网卡将写入请求发送给所述处理模块;
所述网卡接收所述处理模块根据所述写入请求发送的所述第一基地址和所述第一指针,其中,所述写入请求用于请求所述处理模块将来自所述缓冲区描述符空间的多个所述空闲的缓冲区描述符写入由所述第一基地址和第一地址偏移量之和所指向的所述第一共享接收队列中的位置,所述第一地址偏移量是所述第一指针与所述空闲的缓冲区描述符所占用的内存地址空间之积,所述第一地址偏移量表示下一次写入所述空闲的缓冲区描述符的地址信息,所述第一指针在所述处理模块写入所述空闲的缓冲区描述符之后递增;
所述网卡按照所述读取请求的数量,读取由所述第一基地址和所述第二地址偏移量之和所指向的所述第一共享接收队列中的所述空闲的缓冲区描述符。
4.根据权利要求3所述的方法,其特征在于,所述第二共享接收队列中的所述空闲的缓冲区描述符是在将多个所述空闲的缓冲区描述符写入所述第一共享接收队列的同时写入的,或者,所述第二共享接收队列中的所述空闲的缓冲区描述符是在将数量为所述第一队列深度的所述空闲的缓冲区描述符写入所述第一共享接收队列完成之后写入的,或者,所述第二共享接收队列中的所述空闲的缓冲区描述符是在从所述第一共享接收队列中读取数量为所述第一队列深度的所述空闲的缓冲区描述符完成之后写入的。
5.根据权利要求2至4任一项所述的方法,其特征在于,所述第二共享接收队列中的所述空闲的缓冲区描述符是在来自所述第一共享接收队列的所述空闲的缓冲区描述符使用之后,将使用后的缓冲区描述符记录的内存地址中未占用的内存地址进行回收,在所述缓冲区描述符空间中由回收到的所述未占用的内存地址与新的内存地址组成的空闲的缓冲区描述符,其中,所述未占用的内存地址表示没有存储净荷数据的内存地址空间对应的内存地址。
6.一种缓存空间管理装置,其特征在于,应用于网络设备,包括:网卡,
所述网卡,用于在数量小于或等于第一队列深度的多个空闲的缓冲区描述符被写入由第一基地址和第一地址偏移量之和所指向的第一共享接收队列中的位置之后,接收第一基地址和第一指针,其中,所述空闲的缓冲区描述符来自缓冲区描述符空间,所述缓冲区描述符空间用于存储缓冲区描述符,所述缓冲区描述符包括所述空闲的缓冲区描述符和占用的缓冲区描述符,所述空闲的缓冲区描述符记录的内存地址指向的缓冲区没有存储净荷数据,所述占用的缓冲区描述符记录的内存地址指向的缓冲区存储有净荷数据,所述缓冲区描述符空间中所述空闲的缓冲区描述符所占用的内存地址是不连续的,所述第一共享接收队列是根据所述缓冲区描述符空间中一部分所述空闲的缓冲区描述符向所述网络设备申请的连续的内存地址空间,所述第一队列深度表示所述第一共享接收队列存储的所述空闲的缓冲区描述符的数量的最大值,所述第一基地址表示所述第一共享接收队列的基地址,所述第一地址偏移量是第一指针与所述空闲的缓冲区描述符所占用的内存地址空间之积,所述第一地址偏移量表示下一次写入所述空闲的缓冲区描述符的地址信息,所述第一指针表示下一次写入所述空闲的缓冲区描述符的序号;
所述网卡,还用于按照读取请求的数量,读取由所述第一基地址和第二地址偏移量之和所指向的所述第一共享接收队列中的所述空闲的缓冲区描述符,其中,所述读取请求包括第一读取请求,所述第一读取请求是第一队列在收到第一消息的第一个报文的情况下生成的,所述第二地址偏移量是第二指针与所述空闲的缓冲区描述符所占用的内存地址空间之积,所述第二地址偏移量表示下一次读取所述空闲的缓冲区描述符的地址信息,所述第二指针表示下一次读取所述空闲的缓冲区描述符的序号,所述第二指针在所述网卡读取所述空闲的缓冲区描述符之后递增;
所述网卡,还用于将读取到的所述空闲的缓冲区描述符顺序分配给与多个读取请求对应的多个队列。
7.根据权利要求6所述的装置,其特征在于,所述缓存空间管理装置还包括处理模块,
所述网卡,还用于在确定所述第一指针等于所述第一队列深度,并且分配给所述第一队列的所述空闲的缓冲区描述符使用完的情况下,将所述第二指针发送给所述处理模块;
所述网卡,还用于接收所述处理模块在确定第二共享接收队列中存在所述空闲的缓冲区描述符,且所述第二指针大于或等于所述第一指针的情况下发送的第二基地址和所述第一指针,其中,所述第二共享接收队列是根据所述缓冲区描述符空间中另一部分所述空闲的缓冲区描述符向所述装置申请的连续的内存地址空间,所述第二共享接收队列用于存储来自所述缓冲区描述符空间的、并且数量小于或等于第二队列深度的空闲的缓冲区描述符,所述第二基地址表示所述第二共享接收队列的基地址,所述第二队列深度表示所述第二共享接收队列存储的所述空闲的缓冲区描述符的数量的最大值;
所述网卡,还用于从所述第一共享接收队列中读取数量为所述第一队列深度的所述空闲的缓冲区描述符之后,将所述第二指针设置为0;
所述网卡,还用于按照所述读取请求的数量,读取由所述第二基地址和所述第二地址偏移量之和所指向的所述第二共享接收队列中的所述空闲的缓冲区描述符,其中,所述第二地址偏移量的递增取决于所述第二指针的递增,所述第二指针在所述网卡读取所述空闲的缓冲区描述符之后递增。
8.根据权利要求7所述的装置,其特征在于,
所述网卡,还用于在确定所述第一指针小于所述第一队列深度,并且所述第一指针与所述第二指针之间的差值小于或等于第一阈值的情况下,将写入请求发送给所述处理模块;
所述网卡,还用于接收所述处理模块根据所述写入请求发送的所述第一基地址和所述第一指针,其中,所述写入请求用于请求所述处理模块将来自所述缓冲区描述符空间的多个所述空闲的缓冲区描述符写入由所述第一基地址和第一地址偏移量之和所指向的所述第一共享接收队列中的位置,所述第一地址偏移量是所述第一指针与所述空闲的缓冲区描述符所占用的内存地址空间之积,所述第一地址偏移量表示下一次写入所述空闲的缓冲区描述符的地址信息,所述第一指针在所述处理模块写入所述空闲的缓冲区描述符之后递增;
所述网卡,还用于按照所述读取请求的数量,读取由所述第一基地址和所述第二地址偏移量之和所指向的所述第一共享接收队列中的所述空闲的缓冲区描述符。
9.根据权利要求8所述的装置,其特征在于,所述第二共享接收队列中的所述空闲的缓冲区描述符是在将多个所述空闲的缓冲区描述符写入所述第一共享接收队列的同时写入的,或者,所述第二共享接收队列中的所述空闲的缓冲区描述符是在将数量为所述第一队列深度的所述空闲的缓冲区描述符写入所述第一共享接收队列完成之后写入的,或者,所述第二共享接收队列中的所述空闲的缓冲区描述符是在从所述第一共享接收队列中读取数量为所述第一队列深度的所述空闲的缓冲区描述符完成之后写入的。
10.根据权利要求7至9任一项所述的装置,其特征在于,所述第二共享接收队列中的所述空闲的缓冲区描述符是在来自所述第一共享接收队列的所述空闲的缓冲区描述符使用之后,将使用后的缓冲区描述符记录的内存地址中未占用的内存地址进行回收,在所述缓冲区描述符空间中由回收到的所述未占用的内存地址与新的内存地址组成的空闲的缓冲区描述符,其中,所述未占用的内存地址表示没有存储净荷数据的内存地址空间对应的内存地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311094347.2A CN116827880B (zh) | 2023-08-29 | 2023-08-29 | 一种缓存空间管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311094347.2A CN116827880B (zh) | 2023-08-29 | 2023-08-29 | 一种缓存空间管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116827880A CN116827880A (zh) | 2023-09-29 |
CN116827880B true CN116827880B (zh) | 2023-11-17 |
Family
ID=88126061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311094347.2A Active CN116827880B (zh) | 2023-08-29 | 2023-08-29 | 一种缓存空间管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116827880B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117675720B (zh) * | 2024-01-31 | 2024-05-31 | 井芯微电子技术(天津)有限公司 | 消息报文传输方法、装置、电子设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101014937A (zh) * | 2004-03-02 | 2007-08-08 | 五级网络公司 | 用于多事件队列的中断管理 |
CN101198924A (zh) * | 2005-02-03 | 2008-06-11 | Level5网络有限公司 | 完成事件中包括描述符队列空事件 |
US7860120B1 (en) * | 2001-07-27 | 2010-12-28 | Hewlett-Packard Company | Network interface supporting of virtual paths for quality of service with dynamic buffer allocation |
CN113535395A (zh) * | 2021-07-14 | 2021-10-22 | 西安电子科技大学 | 网络存储业务的描述符队列和内存优化方法、系统及应用 |
CN115905046A (zh) * | 2022-12-23 | 2023-04-04 | 科东(广州)软件科技有限公司 | 网卡驱动数据包处理方法、装置、电子设备及存储介质 |
CN116578234A (zh) * | 2023-04-27 | 2023-08-11 | 珠海妙存科技有限公司 | 闪存访问系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7496699B2 (en) * | 2005-06-17 | 2009-02-24 | Level 5 Networks, Inc. | DMA descriptor queue read and cache write pointer arrangement |
-
2023
- 2023-08-29 CN CN202311094347.2A patent/CN116827880B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7860120B1 (en) * | 2001-07-27 | 2010-12-28 | Hewlett-Packard Company | Network interface supporting of virtual paths for quality of service with dynamic buffer allocation |
CN101014937A (zh) * | 2004-03-02 | 2007-08-08 | 五级网络公司 | 用于多事件队列的中断管理 |
CN101198924A (zh) * | 2005-02-03 | 2008-06-11 | Level5网络有限公司 | 完成事件中包括描述符队列空事件 |
CN113535395A (zh) * | 2021-07-14 | 2021-10-22 | 西安电子科技大学 | 网络存储业务的描述符队列和内存优化方法、系统及应用 |
CN115905046A (zh) * | 2022-12-23 | 2023-04-04 | 科东(广州)软件科技有限公司 | 网卡驱动数据包处理方法、装置、电子设备及存储介质 |
CN116578234A (zh) * | 2023-04-27 | 2023-08-11 | 珠海妙存科技有限公司 | 闪存访问系统及方法 |
Non-Patent Citations (1)
Title |
---|
基于PCI总线的快速以太NIC缓冲区管理;李艳雷, 高有行;计算机工程(11);第143-145页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116827880A (zh) | 2023-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7293145B1 (en) | System and method for data transfer using a recoverable data pipe | |
CN116827880B (zh) | 一种缓存空间管理方法及装置 | |
CN106503020B (zh) | 日志数据处理方法及装置 | |
US20070073973A1 (en) | Method and apparatus for managing buffers in a data processing system | |
US7310703B2 (en) | Methods of reading and writing data | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
CN102413156B (zh) | 一种分布式数据存储系统和方法 | |
US20050091450A1 (en) | Methods of reading and writing data | |
CN112948318A (zh) | 一种Linux操作系统下基于RDMA的数据传输方法及装置 | |
CN113535633A (zh) | 一种片上缓存装置和读写方法 | |
JP2006512657A (ja) | メモリ・コントローラおよびメモリに書き込む方法 | |
CN105068769A (zh) | 一种基于消息中间件的消息管理方法及装置 | |
EP2219114A1 (en) | Method and apparatus for allocating storage addresses | |
CN101197786B (zh) | 缓存管理方法和缓存管理系统 | |
CN109756429B (zh) | 带宽分配方法及设备 | |
CN113467753B (zh) | 一种分布式不重复随机序列生成方法和系统 | |
CN111190537A (zh) | 一种追加写场景下顺序存储磁盘管理的方法及系统 | |
US7822040B2 (en) | Method for increasing network transmission efficiency by increasing a data updating rate of a memory | |
CN112306827B (zh) | 日志采集装置、方法和计算机可读存储介质 | |
CN111984198A (zh) | 消息队列实现方法、装置及电子设备 | |
CN108334457B (zh) | 一种io处理方法及装置 | |
JP4997858B2 (ja) | データ記録装置およびデータ記録プログラム | |
US20060005196A1 (en) | Resource allocation in a computer-based system | |
CN114924695A (zh) | 数据存储方法、装置、存储设备及可读存储介质 | |
CN114089912A (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 |