CN115412515A - 一种基于fpga的存储空间分配方法 - Google Patents
一种基于fpga的存储空间分配方法 Download PDFInfo
- Publication number
- CN115412515A CN115412515A CN202210944054.8A CN202210944054A CN115412515A CN 115412515 A CN115412515 A CN 115412515A CN 202210944054 A CN202210944054 A CN 202210944054A CN 115412515 A CN115412515 A CN 115412515A
- Authority
- CN
- China
- Prior art keywords
- queue
- storage space
- spare
- spare storage
- space
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
-
- 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
-
- 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
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/625—Queue scheduling characterised by scheduling criteria for service slots or service orders
- H04L47/6275—Queue scheduling characterised by scheduling criteria for service slots or service orders based on priority
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本公开涉及一种基于FPGA的存储空间分配方法,其包括:通过接收端缩放RSS技术将流量数据均匀散列到多个队列中;监测队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、队列的第一寄存器、备用存储空间的第二寄存器;其中,备用存储空间用于当队列的缓存溢出时,存储溢出队列的流量数据;根据监测结果将流量数据写入队列或备用存储空间中。本公开能够较好地解决队列突发性阻塞造成少量流量丢失的问题,大大提高系统带宽。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种基于FPGA的存储空间分配方法。
背景技术
在当前的CPU(central processing unit,中央处理器)和FPGA(FieldProgrammable Gate Array,现场可编程逻辑门阵列)组合的设备架构中,FPGA一般通过PCIe(peripheral component interconnect express,高速串行计算机扩展总线标准)和网络接口等方式与CPU实现数据通信,其中以PCIe的连接方式居多。随着通信数据带宽的不断提高,为满足外设的高性能、高吞吐要求,CPU通常分配16、32个核处理PCIe接口与外设之间的通信数据,因此,与CPU连接的FPGA设备存在16、32个队列和各个内核相对应。这些内核并不是单独用于处理PCIe接口事务,同时也会用于其他内核事务,在某个或某几个内核(随机的)正在忙于处理其他事务时,就会导致FPGA内部数据出现突发性阻塞,如果FPGA内部各个队列的缓存溢出,会造成部分数据流量丢失,尤其对流量连续性要求比较高的环境,突发性阻塞导致的少量流量丢失大大降低系统的实际处理带宽。
想要解决突发性流量丢失问题,就需要FPGA内部有更大存储空间缓存各个队列的流量数据,然而,内部存储资源少是FPGA的一个很大的缺点,特别是随机性队列突发性缓存溢出的问题,大大降低了FPGA的PCIe实际处理带宽。
发明内容
为了解决上述技术问题,本公开提供了一种基于FPGA的存储空间分配方法。
本公开提供了一种基于FPGA的存储空间分配方法,包括:
通过接收端缩放RSS技术将流量数据均匀散列到多个队列中;
监测所述队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、所述队列的第一寄存器、所述备用存储空间的第二寄存器;其中,所述备用存储空间用于当所述队列的缓存溢出时,存储溢出所述队列的流量数据;
根据监测结果将流量数据写入所述队列或所述备用存储空间中。
可选的,所述根据监测结果将流量数据写入所述队列或所述备用存储空间中,包括:
当任一队列请求写入流量数据时,获取当前队列的缓存空间的空满信号对应的第一监测结果;所述第一监测结果包括:所述当前队列的缓存空间处于空状态、非空且非满状态或者已满状态;
根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中。
可选的,所述根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中,包括:
如果所述当前队列的缓存空间处于空状态,则将流量数据写入所述当前队列的缓存空间中。
可选的,所述根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中,包括:
如果所述当前队列的缓存空间处于非空且非满状态,则判断所述当前队列是否已使用任一所述备用存储空间;
如果没有使用任一所述备用存储空间,则将流量数据写入所述当前队列的缓存空间中;
如果使用任一所述备用存储空间,则确定所使用的第一备用存储空间,并获取所述第一备用存储空间的空满信号对应的第二监测结果;
如果所述第二监测结果为所述第一备用存储空间处于非空且非满状态,则将流量数据写入所述第一备用存储空间中;
如果所述第二监测结果为所述第一备用存储空间处于非空且已满状态,则丢弃流量数据。
可选的,所述根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中,包括:
如果所述当前队列的缓存空间处于已满状态,则判断所述当前队列是否已使用任一所述备用存储空间;
如果使用任一所述备用存储空间,则根据当前使用的备用存储空间的空满信号对应的监测结果,将流量数据写入所述当前使用的备用存储空间中,或者丢弃流量数据;
如果没有使用任一所述备用存储空间,则监测是否存在可使用的备用存储空间;
如果存在可使用的备用存储空间,则确定该可使用的第二备用存储空间,将流量数据写入所述第二备用存储空间中;
如果不存在可使用的备用存储空间,则丢弃流量数据。
可选的,在确定存在可使用的备用存储空间的情况下,所述方法还包括:
在所述第二备用存储空间的第二寄存器中,将占用队列ID修改为所述当前队列的队列ID;
在所述当前队列的第一寄存器中,置位备用缓存启用标识位,并将备用缓存ID标识修改为所述第二备用存储空间的ID号。
可选的,所述判断所述当前队列是否已使用任一所述备用存储空间,包括:
获取监测到的处于非空状态的至少一个候选备用存储空间;
获取各所述候选备用存储空间所匹配的目标占用队列ID;
判断所述当前队列的队列ID是否命中任一所述目标占用队列ID;
如果是,则确定所述当前队列已使用所述备用存储空间。
可选的,所述方法还包括:
从所述队列和所述备用存储空间中读取流量数据,将读取到的流量数据发送给DMA控制器,以使所述DMA控制器将流量数据上送给CPU的各个内核。
可选的,所述从所述队列和所述备用存储空间中读取流量数据,包括:
当所述队列的预满信号拉高和/或所述队列已使用所述备用存储空间时,将所述队列升级为优先调度队列;
按照各所述优先调度队列的升级顺序,对所述优先调度队列及其使用的备用存储空间执行调度,以读取流量数据。
可选的,所述对所述优先调度队列及其使用的备用存储空间执行调度,以读取流量数据,包括:
读取所述优先调度队列的缓存空间的流量数据;
在将所述优先调度队列的缓存空间的流量数据全部读出后,读取所述优先调度队列使用的备用存储空间中的流量数据。
本公开实施例提供的技术方案与现有技术相比具有如下优点:
本公开实施例提供的基于FPGA的存储空间分配方法,包括:首先通过RSS技术将流量数据均匀散列到多个队列中;然后监测队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、队列的第一寄存器、备用存储空间的第二寄存器;其中,备用存储空间用于当队列的缓存溢出时,存储溢出队列的流量数据;以及,根据监测结果将流量数据写入队列或备用存储空间中。本技术方案中的备用存储空间仅需消耗较少的FPGA队列存储资源;采用少量的备用存储空间紧急存储个别队列缓存空间无法接收的流量数据即可,仅消耗FPGA少量的存储资源,就可以较好地解决队列突发性阻塞造成少量流量丢失的问题,大大提高系统带宽。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例所述设备架构的示意图;
图2为本公开实施例所述基于FPGA的存储空间分配方法的流程图;
图3为本公开实施例所述一种队列和备用存储空间的示意图;
图4为本公开实施例所述一种写入流量数据的流程图;
图5为本公开实施例所述另一种队列和备用存储空间的示意图;
图6为本公开实施例所述另一种写入流量数据的流程图;
图7为本公开实施例所述又一种队列和备用存储空间的示意图;
图8为本公开实施例所述电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
面对FPGA内部随机性队列突发性缓存溢出的问题,需要FPGA内部有更大存储空间缓存各个队列的流量数据;然而,FPGA内部存储资源少,大大降低了FPGA的PCIe实际处理带宽。
在一些实现方式中,考虑使用FIFO(First Input First Output,先进先出)实现16/32队列的流量缓存,预处理逻辑根据RSS(receive side scaling,接收端缩放)的散列结果将流量对应的core id存储到Core_ID缓存,而将流量存储到DATA缓存中,由DMA逻辑根据流量的Core_ID信息,通过对应的队列发送给CPU。然而,FIFO具有先进先出缓存特点,如果先进的流量对应的CPU内核处于忙状态,无法分配内存,那么所有其他队列的流量也会被阻塞在FIFO中,其他15/31个的流量很快会把整个FIFO存满,后续的流量全部被丢弃。
或者,还可以使用RAM实现16/32队列的流量缓存,预处理逻辑根据RSS的散列结果将流量直接存储到RAM对应的队列缓存中,由队列调度模块将流量发送给DMA队列机制,进而上送给CPU。然而,该方式存在以下两个问题:(1)整个RAM被切分成16/32个独立的缓存空间,每个队列须满足均匀性读取数据,当某个队列出现突发性阻塞时,由于单个队列缓存空间较小,有很大的概率出现单个队列数据流量溢出的现象。(2)欲解决突发性问题,需要扩大每个队列的缓存空间(CPU内核随机性忙),由于队列数量比较多,根据FPGA的资源占用模式,如果把整个缓存直接扩大2的幂次倍,会消耗很大内部存储资源。
基于上述问题,为了克服FPGA内部随机性队列突发性缓存溢出的问题,提高FPGA的带宽处理能力,本公开实施例提供了一种基于FPGA的存储空间分配方法。以下对本公开实施例展开描述。
为便于理解,本实施例首先对FPGA和CPU组合的设备架构进行描述,该设备架构用于实现基于FPGA的存储空间分配方法。如图1所示的设备架构中,FPGA可以通过PCIe与CPU实现数据通信;CPU通常分配16或32个内核处理PCIe接口与外设之间的通信数据,相应地,FPGA设备存在16或32个队列与CPU的各个内核相对应。
本实施例中的FPGA可以包括:RSS散列部分、流量写入仲裁部分、队列存储空间、备用存储空间、队列调度部分和DMA。其中,队列存储空间可以由RAM实现,用于缓存各个队列的流量数据。在为队列分配缓存空间时,将整个RAM均匀切分成16个或32个独立的缓存空间,将切分后的缓存空间分配给各个队列;也即,将队列存储空间分配给各个需要分配缓存空间的队列。所有队列的缓存空间是独立的,互不影响。
上述备用存储空间可以由FIFO实现,用于缓存部分队列的缓存空间溢出时无法存储的流量数据。示例性的,本实施例设置有四个备用存储空间,表示最多可以缓存四个队列出现突发性阻塞造成的队列存储空间溢出的流量数据。可以理解,图1中的队列和备用存储空间的数目仅仅是示意性的,根据实现需要,可以具有其他数目的队列和备用存储空间。
下文将结合基于FPGA的存储空间分配方法,对上述FPGA和CPU的工作过程展开描述。
图2为本公开实施例提供的一种基于FPGA的存储空间分配方法的流程图,该方法可以由基于FPGA的存储空间分配装置执行,该装置可以采用软件和/或硬件实现。参照图2,该方法包括如下步骤:
步骤S102,通过RSS技术将流量数据均匀散列到多个队列中。
在本实施例中,通过RSS散列部分,根据CPU内核数量或FPGA中队列的数量,对流量数据进行RSS散列,将散列后的各流量数据一一分配到队列中。
步骤S104,监测队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、队列的第一寄存器、备用存储空间的第二寄存器;其中,备用存储空间用于当队列的缓存溢出时,存储溢出队列的流量数据。
在本实施例中,队列的缓存空间包含写指针和读指针,队列的缓存空间的空信号、满信号和预满信号都是由写指针和读指针逻辑运算生成。其中,预满信号的具体设置需根据系统调试结果设定,当写指针和读指针的差值达到预设的阈值时,预满信号拉高,否则为低。参照图3,本实施例的每个队列均分配有第一寄存器,第一寄存器用于存储备用缓存启动标识位和备用缓存ID标识;备用缓存启动标识位用于表示该队列已使用备用存储空间,备用缓存ID标识用于表示该队列所使用的备用存储空间。在队列使用备用存储空间后,将更新第一寄存器中存储的数据。在图3的示例中,队列1未使用备用存储空间,于是,其第一寄存器中的备用缓存启动标识位置位于0,表示队列1未使用备用存储空间,备用缓存ID标识为空,并通过0进行表示。队列2使用了备用存储空间1,于是,其第一寄存器中的备用缓存启动标识位置位于1,表示队列2已使用备用存储空间,备用缓存ID标识为1,用于表示所使用的是备用存储空间1。
每个备用存储空间均分配有第二寄存器,第二寄存器用于存储占用队列ID,表示当前使用该备用存储空间的队列的队列ID。在备用存储空间写入队列的流量数据后,将更新第二寄存器中存储的数据。如图3示例,在备用存储空间1未写入队列2的流量数据时,第二寄存器中的占用队列ID为空,并通过0进行表示;在备用存储空间1写入队列2的流量数据后,第二寄存器中的占用队列ID为2,表示当前使用该备用存储空间1的队列2的队列ID。
根据上述实施例,可以通过流量写入仲裁部分监测流量数据写入到各个队列的缓存空间或备用存储空间的情况,具体为监测队列的缓存空间的空满信号、备用存储空间的空满信号、第一寄存器、第二寄存器。
步骤S106,根据监测结果将流量数据写入队列或备用存储空间中。
在本实施例中,当任一队列请求写入流量数据时,获取当前队列的缓存空间的空满信号对应的第一监测结果;当前队列也即当前请求写入流量数据的队列。第一监测结果可以包括:当前队列的缓存空间处于空状态、非空且非满状态或者已满状态。而后,根据第一监测结果将流量数据写入当前队列或备用存储空间中。
或者也可以理解为,第一监测结果可以包括:当前队列的缓存空间处于空状态或非空状态,在空状态下,将流量数据写入当前队列的缓存空间中;在非空状态下,将流量数据写入当前队列或备用存储空间中;非空状态包括非空且非满状态或者已满状态。
本实施例分别提供不同第一监测结果下,也即当前队列的缓存空间处于不同状态下,将流量数据写入当前队列或备用存储空间中的不同实现方式。
在一种实施例中,如果当前队列的缓存空间处于空状态,则将流量数据写入当前队列的缓存空间中。队列请求写入流量数据时,队列对应的缓存空间为空,处于空状态,则优先把流量数据写入队列的缓存空间。
在一种实施例中,将流量数据写入当前队列或备用存储空间的过程可参照图4:
步骤S401,如果当前队列的缓存空间处于非空且非满状态,则判断当前队列是否已使用任一备用存储空间。
本实施例具体可通过如下方式判断当前队列是否已使用任一备用存储空间:
获取监测到的处于非空状态的至少一个候选备用存储空间。通过各候选备用存储空间的第二寄存器,获取各候选备用存储空间所匹配的目标占用队列ID。判断当前队列的队列ID是否命中任一目标占用队列ID。如果否,表示都匹配失败,则说明当前队列没有使用任一备用存储空间,在此情况下,执行如下步骤S402。如果是,则确定当前队列已使用备用存储空间,在此情况下,执行如下步骤S403;以及,该命中的目标占用队列ID所匹配的候选备用存储空间,即为当前队列使用的备用存储空间,为便于描述,可称之为第一备用存储空间。
步骤S402,将流量数据写入当前队列的缓存空间中。
步骤S403,确定所使用的第一备用存储空间,并获取第一备用存储空间的空满信号对应的第二监测结果。
步骤S404,如果第二监测结果为第一备用存储空间处于非空且非满状态,则将流量数据写入第一备用存储空间中。如图5的示例,以备用存储空间1作为第一备用存储空间,其已写入流量数据1,处于非空且非满状态;将当前待写入的流量数据2写入备用存储空间1中。由于在写入流量数据2之前,当前队列已使用备用存储空间1,当前队列的第一寄存器中存储的备用缓存启动标识位和备用缓存ID标识已被写入,于是,不需要再对第一寄存器中存储的数据进行更新操作。
步骤S405,如果第二监测结果为第一备用存储空间处于非空且已满状态,则丢弃流量数据。
本实施例中,流量写入仲裁部分利用第一寄存器中的备用缓存ID标识和第二寄存器中的占用队列ID,有序的把流量数据存入队列的缓存空间或备用存储空间,不但能够有效避免数据溢出,还能够使得流量数据有序存储,防止多存储空间出现数据乱序。
在一种实施例中,将流量数据写入当前队列或备用存储空间的过程可参照图6:
步骤S601,如果当前队列的缓存空间处于已满状态,则判断当前队列是否已使用任一备用存储空间。具体判断方式可参照前述实施例,在此不再赘述。如果使用任一备用存储空间,则执行如下步骤S602;如果没有使用任一备用存储空间,则执行如下步骤S603。
步骤S602,如果使用任一备用存储空间,则根据当前使用的备用存储空间的空满信号对应的监测结果,将流量数据写入当前使用的备用存储空间中,或者丢弃流量数据。
本实施例的实现过程可参照上述实施例,即包括:如果当前队列使用备用存储空间,且所使用的备用存储空间处于非空且非满状态,则将流量数据写入当前使用的备用存储空间中。如果当前队列所使用的备用存储空间处于非空且已满状态,该备用存储空间即将溢出,则丢弃流量数据。
步骤S603,监测是否存在可使用的备用存储空间。在没有使用任一备用存储空间的情况下,可以监测是否存在可使用的备用存储空间;如果存在可使用的备用存储空间,则执行如下步骤S604;如果不存在可使用的备用存储空间,则执行如下步骤S607。
步骤S604,确定该可使用的第二备用存储空间,将流量数据写入第二备用存储空间中。
在本实施例中,当前队列没有占用备用存储空间,监测多个备用存储空间中是否存在处于空状态的备用存储空间;在存在至少一个处于空状态的备用存储空间的情况下,确定存在可使用的备用存储空间。相应的,从至少一个可使用的备用存储空间中,可以以随机或优先级的方式,为当前队列确定一个可使用的第二备用存储空间;其中,上述优先级诸如是按照备用存储空间的ID(1、2、3、4)的顺序确定的优先级,备用存储空间1的优先级最高,依次向下降低。
将流量数据写入第二备用存储空间中;流量数据成功写入后,本实施例还可以包括以下内容。
步骤S605,在第二备用存储空间的第二寄存器中,将占用队列ID修改为当前队列的队列ID。
步骤S606,在当前队列的第一寄存器中,置位备用缓存启用标识位,并将备用缓存ID标识修改为第二备用存储空间的ID号。例如,队列1确定的可使用的第二备用存储空间为备用存储空间2,在将流量数据写入备用存储空间2后,将队列1的备用缓存启用标识位置位为1,将队列1对应的备用缓存ID标识修改为2。
步骤S607,丢弃流量数据。本实施例中,如果多个备用存储空间都已被其他队列占用,不存在可使用的备用存储空间,那么丢弃该流量数据。
在以上几种将流量数据写入队列或备用存储空间的实施例中,采用少量的备用存储空间紧急存储个别队列缓存空间无法接收的流量数据,仅消耗FPGA少量的存储资源,就可以较好地解决队列突发性阻塞造成少量流量丢失的问题,提高系统带宽。
在以上实施例中,通过流量写入仲裁部分根据监测结果将流量数据写入队列或备用存储空间中。接下来的实施例中,可以通过队列调度部分,从队列和备用存储空间中读取流量数据,将读取到的流量数据发送给DMA控制器,以使DMA控制器将流量数据上送给CPU的各个内核。
其中,从队列和备用存储空间中读取流量数据的实现方式有多种。
作为一种示例,当队列的缓存空间中存入流量数据后,拉高队列的非空信号,队列进入待调度状态;当有至少两个队列进入待调度状态后,按照各队列的预设顺序对至少两个队列的缓存空间执行轮流调度;上述各队列的预设顺序诸如为队列ID的顺序。
具体的,当某个队列的缓存空间中存入流量数据后,其非空信号会立即拉高,该队列进入待调度状态,等待队列调度部分读取该队列的缓存空间内部的流量数据;当有多个队列进入待调度状态后,队列调度部分对这些待调度的队列的缓存空间执行轮流调度,即即按队列ID(1、2、3、4……)的顺序逐个调度队列的缓存空间,以读取流量数据。
作为另一种示例,当队列的预满信号拉高和/或队列已使用备用存储空间时,将队列升级为优先调度队列;按照各优先调度队列的升级顺序,对优先调度队列及其使用的备用存储空间执行调度,以读取流量数据。
在一种可能场景中,当某个队列的缓存空间接近溢出的状态时,其预满信号会立即拉高,该队列自动升级为优先调度队列,以防止该队列缓存溢出。当多个队列预满信号拉高时,这些队列都会升级为优先调度队列,队列调度部分按照优先调度队列的升级顺序执行调度。
在另一种可能场景中,在系统运行过程中,CPU的某个或某几个内核出现突发性忙的现象,无法及时为FPGA内部流量分配可用内存空间,此时该内核对应的队列就会出现突发性阻塞,该队列的缓存会出现流量溢出,无法存入队列缓存空间的流量数据,会自动存入备用存储空间。
基于以上两种可能场景,当满足以下至少一个条件时:队列的预满信号拉高以及该队列使用备用存储空间(备用缓存标识位被置位),该队列将升级为优先调度队列;按照各优先调度队列的升级顺序,对优先调度队列及其使用的备用存储空间执行调度。
在一种调度实施例中,先读取优先调度队列的缓存空间的流量数据;在将优先调度队列的缓存空间的流量数据全部读出后,再读取优先调度队列使用的备用存储空间中的流量数据。
本实施例提供的从队列和备用存储空间中读取流量数据的两种实现方式中,按照各队列的预设顺序或者按照各优先调度队列的升级顺序,能够使得流量数据的顺序转发,避免流量数据的顺序错乱的问题;进一步的,先读取队列的缓存空间的流量数据,后读取备用存储空间中的流量数据这种较为严格的轮询调度,可以防止多存储空间出现报文乱序的问题,有效解决备用流量缓存机制带来的流量乱序的问题。
根据以上实施例,在此提供如下一种基于FPGA的存储空间分配方法,包括:
通过RSS技术将流量数据均匀散列到多个队列中;监测队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、队列的第一寄存器、备用存储空间的第二寄存器;根据监测结果将流量数据写入队列或备用存储空间中;从队列和备用存储空间中读取流量数据,将读取到的流量数据发送给DMA控制器,以使DMA控制器将流量数据上送给CPU的各个内核。
根据以上实施例,本实施例以基于FPGA实现的智能网卡系统为应用示例,提供一种基于FPGA的存储空间分配方法的具体实现过程,参照如下所示。
本实施例基于网络安全防火墙产品,阐述使用上述方法,较好地解决如下问题:基于FPGA的队列突发性阻塞造成流量丢失的问题,网络安全防火墙产品中的个别队列突发性阻塞造成的少量流量丢失的问题,进而使得网络安全防火墙设备能力得到提升。
网络安全防火墙产品的主CPU共有16个内核,每个内核对应智能网卡一个收发队列。基于FPGA的存储空间分配方法,具体的流程如下:
(1)系统运行过程中,CPU内核正常收发和处理业务,为智能网卡稳定分配内存业务空间。
(2)FPGA智能网卡均匀轮询16个队列的缓存空间,正常上送业务的流量数据,网卡业务处理稳定期间,流量写入仲裁部分监测各个队列没有使用备用存储空间,流量数据全部通过队列的缓存空间,再发送给CPU。
(3)系统工作过程中,CPU内核core 2接收复杂业务处理指令,业务处理时间较长,该内核无法及时为FPGA智能网卡分配相应的内存地址,此时FPGA智能网卡队列2缓存空间流量溢出。
(4)流量写入仲裁部分监测到队列2缓存空间满信号拉高,寻找可用的备用存储空间,占用备用存储空间1进行数据缓存;如图7,将流量数据成功写入备用存储空间1后,将备用存储空间1的第二寄存器中记录的占用队列ID更新为2,以及更新队列2的第一寄存器中备用缓存标识位为1、备用缓存ID标识为1。
(5)CPU内核core 2不忙后,分配可用的内存空间,FPGA智能网卡收到可用的内存地址后,优先读取队列2缓存空间的流量数据,直到队列2缓存空间被读空,此时,队列调度部分监测该队列2已启用了备用存储空间1进行数据缓存,继续读取备用存储空间1中的流量数据,直到备用存储空间1被读空,并跳回监测该队列2的队列缓存空间,继续执行该队列2的数据发送。
综上,本公开实施例提供的基于FPGA的存储空间分配方法,包括:首先通过RSS技术将流量数据均匀散列到多个队列中;然后监测队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、队列的第一寄存器、备用存储空间的第二寄存器;其中,备用存储空间用于当队列的缓存溢出时,存储溢出队列的流量数据;以及,根据监测结果将流量数据写入队列或备用存储空间中。
本技术方案中的备用存储空间仅需消耗较少的FPGA队列存储资源;通过监测队列的空满信号可以及时发现队列的缓存空间无法接收的流量数据的情况,而后根据关于队列和备用存储空间的多种监测结果,将流量数据写入队列或备用存储空间中,在此情况下,采用少量的备用存储空间紧急存储个别队列缓存空间无法接收的流量数据即可,仅消耗FPGA少量的存储资源,就可以较好地解决队列突发性阻塞造成少量流量丢失的问题,大大提高系统带宽。
本实施例提供一种基于FPGA的存储空间分配装置,可以用于实现上述实施例提供的基于FPGA的存储空间分配方法。该装置包括:
散列模块,用于通过接收端缩放RSS技术将流量数据均匀散列到多个队列中;
监测模块,用于监测队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、队列的第一寄存器、备用存储空间的第二寄存器;其中,备用存储空间用于当队列的缓存溢出时,存储溢出队列的流量数据;
写入模块,用于根据监测结果将流量数据写入队列或备用存储空间中。
在一些实施例中,上述基于FPGA的存储空间分配装置还可以包括读取模块,其用于:从队列和备用存储空间中读取流量数据,将读取到的流量数据发送给DMA控制器,以使DMA控制器将流量数据上送给CPU的各个内核。
本实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
图8为本公开实施例提供的一种电子设备的结构示意图。如图8所示,电子设备800包括一个或多个处理器801和存储器802。
处理器801可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备800中的其他组件以执行期望的功能。
存储器802可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器801可以运行所述程序指令,以实现上文所述的本公开的实施例的基于FPGA的存储空间分配方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
在一个示例中,电子设备800还可以包括:输入装置803和输出装置804,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入装置803还可以包括例如键盘、鼠标等等。
该输出装置804可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置804可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图8中仅示出了该电子设备800中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备800还可以包括任何其他适当的组件。
进一步,本实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述基于FPGA的存储空间分配方法。
本公开实施例所提供的一种基于FPGA的存储空间分配方法、装置、电子设备及介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种基于FPGA的存储空间分配方法,其特征在于,包括:
通过接收端缩放RSS技术将流量数据均匀散列到多个队列中;
监测所述队列的缓存空间的空满信号、预先分配的多个备用存储空间的空满信号、所述队列的第一寄存器、所述备用存储空间的第二寄存器;其中,所述备用存储空间用于当所述队列的缓存溢出时,存储溢出所述队列的流量数据;
根据监测结果将流量数据写入所述队列或所述备用存储空间中。
2.根据权利要求1所述的方法,其特征在于,所述根据监测结果将流量数据写入所述队列或所述备用存储空间中,包括:
当任一队列请求写入流量数据时,获取当前队列的缓存空间的空满信号对应的第一监测结果;所述第一监测结果包括:所述当前队列的缓存空间处于空状态、非空且非满状态或者已满状态;
根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中。
3.根据权利要求2所述的方法,其特征在于,所述根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中,包括:
如果所述当前队列的缓存空间处于空状态,则将流量数据写入所述当前队列的缓存空间中。
4.根据权利要求2所述的方法,其特征在于,所述根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中,包括:
如果所述当前队列的缓存空间处于非空且非满状态,则判断所述当前队列是否已使用任一所述备用存储空间;
如果没有使用任一所述备用存储空间,则将流量数据写入所述当前队列的缓存空间中;
如果使用任一所述备用存储空间,则确定所使用的第一备用存储空间,并获取所述第一备用存储空间的空满信号对应的第二监测结果;
如果所述第二监测结果为所述第一备用存储空间处于非空且非满状态,则将流量数据写入所述第一备用存储空间中;
如果所述第二监测结果为所述第一备用存储空间处于非空且已满状态,则丢弃流量数据。
5.根据权利要求2所述的方法,其特征在于,所述根据所述第一监测结果将流量数据写入所述当前队列或所述备用存储空间中,包括:
如果所述当前队列的缓存空间处于已满状态,则判断所述当前队列是否已使用任一所述备用存储空间;
如果使用任一所述备用存储空间,则根据当前使用的备用存储空间的空满信号对应的监测结果,将流量数据写入所述当前使用的备用存储空间中,或者丢弃流量数据;
如果没有使用任一所述备用存储空间,则监测是否存在可使用的备用存储空间;
如果存在可使用的备用存储空间,则确定该可使用的第二备用存储空间,将流量数据写入所述第二备用存储空间中;
如果不存在可使用的备用存储空间,则丢弃流量数据。
6.根据权利要求5所述的方法,其特征在于,在确定存在可使用的备用存储空间的情况下,所述方法还包括:
在所述第二备用存储空间的第二寄存器中,将占用队列ID修改为所述当前队列的队列ID;
在所述当前队列的第一寄存器中,置位备用缓存启用标识位,并将备用缓存ID标识修改为所述第二备用存储空间的ID号。
7.根据权利要求4或5所述的方法,其特征在于,所述判断所述当前队列是否已使用任一所述备用存储空间,包括:
获取监测到的处于非空状态的至少一个候选备用存储空间;
获取各所述候选备用存储空间所匹配的目标占用队列ID;
判断所述当前队列的队列ID是否命中任一所述目标占用队列ID;
如果是,则确定所述当前队列已使用所述备用存储空间。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
从所述队列和所述备用存储空间中读取流量数据,将读取到的流量数据发送给DMA控制器,以使所述DMA控制器将流量数据上送给CPU的各个内核。
9.根据权利要求8所述的方法,其特征在于,所述从所述队列和所述备用存储空间中读取流量数据,包括:
当所述队列的预满信号拉高和/或所述队列已使用所述备用存储空间时,将所述队列升级为优先调度队列;
按照各所述优先调度队列的升级顺序,对所述优先调度队列及其使用的备用存储空间执行调度,以读取流量数据。
10.根据权利要求9所述的方法,其特征在于,所述对所述优先调度队列及其使用的备用存储空间执行调度,以读取流量数据,包括:
读取所述优先调度队列的缓存空间的流量数据;
在将所述优先调度队列的缓存空间的流量数据全部读出后,读取所述优先调度队列使用的备用存储空间中的流量数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210944054.8A CN115412515A (zh) | 2022-08-05 | 2022-08-05 | 一种基于fpga的存储空间分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210944054.8A CN115412515A (zh) | 2022-08-05 | 2022-08-05 | 一种基于fpga的存储空间分配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115412515A true CN115412515A (zh) | 2022-11-29 |
Family
ID=84159253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210944054.8A Pending CN115412515A (zh) | 2022-08-05 | 2022-08-05 | 一种基于fpga的存储空间分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115412515A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180063030A1 (en) * | 2016-08-29 | 2018-03-01 | Cisco Technology, Inc. | Queue protection using a shared global memory reserve |
CN109033235A (zh) * | 2018-07-04 | 2018-12-18 | 北京量子保科技有限公司 | 一种数据存储双活架构构建方法、系统、介质和电子设备 |
CN109688070A (zh) * | 2018-12-13 | 2019-04-26 | 迈普通信技术股份有限公司 | 一种数据调度方法、网络设备及转发单元 |
CN110447019A (zh) * | 2017-03-23 | 2019-11-12 | 瑞典爱立信有限公司 | 存储器分配管理器及由其执行的用于管理存储器分配的方法 |
CN110888827A (zh) * | 2018-09-10 | 2020-03-17 | 华为技术有限公司 | 数据传输方法、装置、设备及存储介质 |
-
2022
- 2022-08-05 CN CN202210944054.8A patent/CN115412515A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180063030A1 (en) * | 2016-08-29 | 2018-03-01 | Cisco Technology, Inc. | Queue protection using a shared global memory reserve |
CN109565476A (zh) * | 2016-08-29 | 2019-04-02 | 思科技术公司 | 使用共享全局存储器储备进行队列保护 |
CN110447019A (zh) * | 2017-03-23 | 2019-11-12 | 瑞典爱立信有限公司 | 存储器分配管理器及由其执行的用于管理存储器分配的方法 |
CN109033235A (zh) * | 2018-07-04 | 2018-12-18 | 北京量子保科技有限公司 | 一种数据存储双活架构构建方法、系统、介质和电子设备 |
CN110888827A (zh) * | 2018-09-10 | 2020-03-17 | 华为技术有限公司 | 数据传输方法、装置、设备及存储介质 |
CN109688070A (zh) * | 2018-12-13 | 2019-04-26 | 迈普通信技术股份有限公司 | 一种数据调度方法、网络设备及转发单元 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11467769B2 (en) | Managed fetching and execution of commands from submission queues | |
WO2018157836A1 (zh) | 一种可编程硬件的资源管理方法、可编程硬件设备及存储介质 | |
US6892259B2 (en) | Method and apparatus for allocating computer bus device resources to a priority requester and retrying requests from non-priority requesters | |
CN110858188A (zh) | 具有分布式信箱结构的多处理器系统及其沟通方法 | |
US20240054059A1 (en) | Test Method and Multi-Processor SOC Chip | |
US20190286582A1 (en) | Method for processing client requests in a cluster system, a method and an apparatus for processing i/o according to the client requests | |
CN115481048A (zh) | 一种内存系统及芯片 | |
WO2020220225A1 (zh) | 资源获取方法、相关装置及计算机存储介质 | |
CN115412515A (zh) | 一种基于fpga的存储空间分配方法 | |
CN115878333A (zh) | 进程组间的一致性判断方法、装置及设备 | |
EP2413248B1 (en) | Direct memory access device for multi-core system and operating method of the same | |
CN112532531B (zh) | 一种报文调度方法及装置 | |
CN112015527B (zh) | 管理从提交队列获取和执行命令 | |
US8135878B1 (en) | Method and apparatus for improving throughput on a common bus | |
US10002099B2 (en) | Arbitrated access to resources among multiple devices | |
KR101915945B1 (ko) | 클러스터 시스템에서의 클라이언트 요청 처리 방법, 상기 클라이언트 요청에 따른 입출력 처리 방법 및 장치 | |
US7076585B2 (en) | System bus controller and the method thereof | |
US8386682B2 (en) | Method, apparatus and system for maintaining transaction coherecy in a multiple data bus platform | |
CN117149278B (zh) | 一种命令处理系统、控制方法及主机设备 | |
CN117331510B (zh) | 应用于NVMe控制器的数据迁移方法、装置及设备 | |
US20230325075A1 (en) | Methods and systems for managing memory buffer usage while processing computer system operations | |
CN117807000B (zh) | 通道总线仲裁电路、加速装置、方法、系统、装置及介质 | |
CN117234998B (zh) | 一种多主机数据访问方法及系统 | |
CN219642231U (zh) | 一种任务分发装置和基于任务分发装置的多核异构处理器 | |
WO2022120722A1 (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 |