CN106330764B - 管理数据缓冲的方法、应用及计算设备 - Google Patents
管理数据缓冲的方法、应用及计算设备 Download PDFInfo
- Publication number
- CN106330764B CN106330764B CN201610670437.5A CN201610670437A CN106330764B CN 106330764 B CN106330764 B CN 106330764B CN 201610670437 A CN201610670437 A CN 201610670437A CN 106330764 B CN106330764 B CN 106330764B
- Authority
- CN
- China
- Prior art keywords
- data packet
- data
- space
- simplifying
- read pointer
- 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
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
- H04L49/9015—Buffering arrangements for supporting a linked list
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9031—Wraparound memory, e.g. overrun or underrun detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了管理数据缓冲的方法、应用及计算设备。其中,管理数据缓冲的应用适于驻留在计算设备中。该应用包括数据分配单元和多个目标处理单元。数据分配单元包括:数据缓冲区、位置信息存储区、接收模块和分配模块。接收模块适于依次接收包含控制字段和数据字段的原始数据包,将每个原始数据包中数据字段存储为数据缓冲区中一个精简数据包,并且将该精简数据包的开始地址和数据长度存储为位置信息存储区中位置信息。分配模块基于位置信息,依次读取数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包,以便将该至少一个精简数据包转存到所对应的目标处理单元。
Description
技术领域
本发明涉及互联网领域,尤其涉及管理数据缓冲的方法、应用及计算设备。
背景技术
随着互联网技术的进步,大量数据被越来越多应用在各领域中。相应地,许多计算设备(例如,应用服务器)需要对大量数据进行处理或转发。例如,缓冲并转发大量数据的应用通常包括一个转发单元和多个目标单元。转发单元首先接收来自本地或者网络的数据包,然后将每个数据包转存到相应的目标单元。
目标单元通常配置有缓冲区。缓冲区通常被实现为循环链表结构。转发单元通常将包含控制字段和数据字段的数据包存储到缓冲区。目标单元可以基于链表结构依次读取缓冲区中每个数据包,然后根据预定应用逻辑进行数据处理或转发。然而,现有的缓存并转发数据应用的性能有待提高。
为此,本发明提出了一种新的管理数据缓冲的技术方案。
发明内容
为此,本发明提供一种新的管理数据缓冲的技术方案,有效的解决了上面至少一个问题。
根据本发明的一个方面,提供一种管理数据缓冲的应用,适于驻留在计算设备中。该应用包括数据分配单元和多个目标处理单元。其中,数据分配单元包括:数据缓冲区、位置信息存储区、接收模块和分配模块。接收模块适于依次接收包含控制字段和数据字段的原始数据包,将每个原始数据包中数据字段存储为数据缓冲区中一个精简数据包,并且将该精简数据包在数据缓冲区中开始地址和数据长度存储为位置信息存储区中对应该精简数据包的位置信息。分配模块基于位置信息存储区中位置信息,依次读取数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包,以便将该至少一个精简数据包转存到所对应的目标处理单元。
可选地,在根据本发明的管理数据缓冲的应用中,目标处理单元包括循环缓冲区、索引存储区、空间管理模块和处理模块。空间管理模块适于判断循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度。在不小于该至少一个精简数据包的长度时,指示分配模块将该至少一个精简数据包写入循环缓冲区中。空间管理模块还适于将所写入到循环缓冲区中每一个精简数据包的存储位置生成为索引存储区中一个位置索引项。处理模块适于根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理。
可选地,在根据本发明的管理数据缓冲的应用中,在循环缓冲区中剩余存储空间小于该至少一个精简数据包的长度时,空间管理模块还适于根据索引存储区中位置索引项,依次释放未读取的精简数据包所占用存储空间并更新所述环形缓存区的剩余存储空间,直到剩余存储空间不小于该至少一个精简数据包的长度,以便分配模块将该至少一个精简数据包写入循环缓冲区。
可选地,在根据本发明的管理数据缓冲的应用中,循环缓冲区包括连续内存区域。该连续内存区域包括首地址、尾地址、沿着首地址到尾地址方向移动的读指针和写指针。其中,读指针指向循环缓冲区中未被所述处理模块读取的精简数据包中一个。写指针指向循环缓冲区中待覆盖区域的开始位置。
可选地,在根据本发明的管理数据缓冲的应用中,空间管理模块适于根据下述方式判断循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度:判断所述写指针是否超过所述读指针的位置;在未超过读指针的位置时,判断读指针和所述写指针之间空间是否小于所述至少一个精简数据包的长度;在超过读指针的位置时,判断写指针与尾地址之间空间是否小于至少一个精简数据包的长度。
可选地,在根据本发明的管理数据缓冲的应用中,在读指针和写指针之间空间未小于至少一个精简数据包的长度时,分配模块将该至少一个精简数据包写入到所述循环缓冲区中。在读指针和写指针之间空间小于至少一个精简数据包的长度时,空间管理模块还适于根据索引存储区中未读取精简数据包的位置索引项,依次释放未读取精简数据包的占用空间并更新读指针,直到写指针与读指针之间空间不小于至少一个精简数据包的长度或者读指针到达所述尾地址。
可选地,在根据本发明的管理数据缓冲的应用中,在读指针到达尾地址且当前读指针与写指针之间空间小于所述至少一个精简数据包的长度时,分配模块还适于将至少一个精简数据包的一部分写入到写指针和尾地址之间的空间。空间管理模块还适于继续释放未读取的精简数据包的占用空间并更新读指针,直到首地址到读指针之间的空间不小于至少一个精简数据包中未写入的部分,以便分配模块将该未写入的部分写入到首地址与读指针之间的空间。
可选地,在根据本发明的管理数据缓冲的应用中,在写指针与尾地址之间空间未小于所述至少一个精简数据包的长度时,分配模块适于将该至少一个精简数据包写入到循环缓冲区中。在写指针与尾地址之间空间小于至少一个精简数据包的长度时,分配模块将该至少一个精简数据包的一部分写入到当前写指针与尾地址之间的空间。
空间管理模块还适于判断首地址到读指针之间的空间是否小于该至少一个精简数据包的剩余长度。在首地址到读指针之间的空间不小于该至少一个精简数据包的剩余长度时,分配模块将该至少一个精简数据包的剩余部分写入到首地址与读指针之间的空间。在首地址到读指针之间的空间小于该至少一个精简数据包的剩余长度时,空间管理模块还适于根据所述索引存储区中对应未读取精简数据包的位置索引项,依次释放未读取精简数据包的占用空间并更新读指针,直到首地址与读指针之间空间不小于至少一个精简数据包的剩余长度,以便分配模块将该至少一个精简数据包的剩余部分写入到首地址与读指针之间。
可选地,在根据本发明的管理数据缓冲的应用中,空间管理模块适于根据下述方式执行释放所述未读取精简数据包的占用空间并更新读指针的操作:删除所述未读取精简数据包在所述索引存储区中对应的位置索引项;将读指针更新为指向下一个未读取精简数据包。
可选地,在根据本发明的管理数据缓冲的应用中,位置索引项包括其所指向的精简数据包在循环缓冲区中的开始地址和数据长度。读指针的值为该读指针所指向的精简数据包所对应的位置索引项中开始地址。
可选地,在根据本发明的管理数据缓冲的应用中,处理模块适于根据下述方式执行根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理:根据索引存储区中位置索引项读取循环缓冲区中所有未读取的精简数据包;转发从循环缓冲区读取到的精简数据包,或者根据预定应用逻辑处理所读取的精简数据包。
可选地,在根据本发明的管理数据缓冲的应用中,精简数据包具有分配标识信息。分配模块适于根据下述方式依次读取数据缓冲区中精简数据包,分析并选定连续存储且对应同一个目标处理单元的至少一个精简数据包:依次读取所述数据缓冲区中精简数据包;根据每个精简数据包的分配标识信息来确定其对应的目标处理单元;选定对应同一个目标处理单元且连续存储的至少一个精简数据包。
可选地,在根据本发明的管理数据缓冲的应用中,处理模块还适于删除已读取的精简数据包在索引存储区中对应的位置索引项。分配模块还适于在将至少一个精简数据包写入到对应的目标处理单元的循环缓冲区之后,通知所对应的目标处理单元的处理模块,以便该处理模块执行读取和处理的操作。
根据本发明的又一个方面,提供一种管理数据缓冲的方法,适于在计算设备中执行。该计算设备包括数据分配单元和多个目标处理单元。该数据分配单元包括数据缓冲区和位置信息存储区。该数据分配单元执行下述步骤:依次接收包含控制字段和数据字段的原始数据包。将每个原始数据包中数据字段存储为数据缓冲区中一个精简数据包。将该精简数据包在数据缓冲区中开始地址和数据长度存储为位置信息存储区中对应该精简数据包的位置信息。基于位置信息存储区中位置信息,依次读取数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包。
根据本发明的又一个方面,提供一种计算设备,包括根据本发明的管理数据缓冲的应用。
综上,本发明的管理数据缓冲的技术方案,具有数据分配单元和多个目标处理单元。数据分配单元可以接收来自本地或网络的数据,并将所接收的数据分配到对应的目标处理单元。目标处理单元可以转发或处理所分配的数据。不同于传统技术手段(接收包含数据字段和控制字段的原始数据包,然后依次将单个原始数据包转存到相应的目标处理单元),本发明的目标分配单将原始数据包中数据字段存储为精简数据包,并且可以选择将连续存放且对应同一个目标处理单元的多个精简数据包转存到目标处理单元。这样,本发明的目标处理单元可以批量转存精简数据包,可以极大提高数据分配的效率。
另外,不同于现有技术的处理单元(采用链表结构存放原始数据包,每次从链表的一个节点读取一个原始数据包,然后提取数据字段进行转发或处理),本发明的目标处理单元中循环缓冲区为连续的内存区域,并且通过空间管理单元将连续内存区域实现为环形缓冲区(即,可以始终保留最新的数据包)。在此基础上,本发明的目标处理单元可以批量从循环缓冲区读取精简数据包,并直接进行转发或处理,从而可以极大提高目标处理单元的数据处理效率。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明的一些实施列的计算设备100的示意图;
图2示出了根据本发明一些实施例的管理数据缓冲的应用200的示意图;
图3示出了根据本发明一些实施例的管理数据缓冲的应用300的示意图;
图4A-4E分别示出了根据本发明实施例的一个循环缓冲区的示意图;
图5示出了根据本发明一些实施例的管理数据缓冲的方法500流程图;
图6示出了根据本发明一些实施例的管理数据缓冲的方法600的流程图;以及
图7示出了图6中步骤S621和S625的更具体的执行方法700的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一些实施例的计算设备100的框图。在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器((μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备100可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以包括桌面计算机和笔记本计算机配置的个人计算机。计算设备还可以被实现为服务器。服务器例如可以被配置为处理大量数据的集群系统中一个节点。
在一个典型的应用场景中,计算设备100需要对大量数据包进行缓冲和转发管理。相应地,应用122可以包括被配置为管理数据缓冲的应用200。下面结合图2对应用200进行说明。
图2示出了根据本发明一些实施例的管理数据缓冲的应用200的示意图。如图2所示,应用200包括数据分配单元210和多个目标处理单元220-1、220-2、...220-N。
数据分配单元210包括数据缓冲区211、位置信息存储区212、接收模块213和分配模块214。
接收模块213可以依次接收包含控制字段和数据字段的原始数据包。这里,原始数据包是指来自本地的其他应用或来自网络的数据包,本发明对此不做限制。例如,一个原始数据包中数据字段为核心信息,而控制字段例如可以包括数据字段的长度等附属信息。在一个实施例中,控制字段为原始数据包的包头和包尾,但不限于此。不同于传统技术方案中将每个原始数据包整体存放到数据缓冲区中,本发明的接收模块213将每个原始数据包中数据字段存储为数据缓冲区211中一个精简数据包。换言之,接收模块213丢弃了原始数据包中的控制字段。需要说明的是,数据缓冲区211可以被配置为包含连续内存区域的循环缓冲区。接收模块213将精简数据包连续存放在数据缓冲区211中。另外,接收模块213将每个精简数据包在数据缓冲区211中开始地址和数据长度存储为位置信息存储区212中一个位置信息。
分配模块214可以基于位置信息存储区212中位置信息,读取数据缓冲区211中的精简数据包。分配模块214可以对每个读取到的精简数据包进行分析,以确定其对应的目标处理单元。这样,分配模块214可以选定连续存储的对应同一个目标单元的至少一个数据包。换言之,分配模块214可以对数据缓冲区211中连续存储的精简数据包进行分段。每段可以包括一个或多个精简数据包,并且对应于同一个目标处理单元。这样,分配模块214可以将每段(即所选定的至少一个数据包)一次性转存到目标处理单元,从而减少分配模块214的操作次数,以提高数据转存的效率。每个目标处理单元可以将与其对应的精简数据包进行转发或处理。处理例如是根据预定应用逻辑来执行数据处理操作。
图3示出了根据本发明一些实施例的管理数据缓冲的应用300的示意图。应用300包括数据分配单元310和多个目标处理单元。数据分配单元310包括数据缓冲区311、位置信息存储区312、接收模块313和分配模块314,并分别与上文中数据缓冲区211、位置信息存储区212、接收模块213和分配模块214的配置一致,这里不再赘述。
图3示出了一个目标处理单元320。未示出的目标处理单元可以被配置为与320一致。目标处理单元320包括循环缓冲区321、索引存储区322、空间管理模块323和处理模块324。这里,循环缓冲区例如是一块从首地址到尾地址之间的连续的内存(例如RAM,但不限于此)区域。每个地址指向的存储区域是进行读写操作的最小单元。取决于期望的配置,最小单元可以被配置为预定大小的内存块。循环缓冲区还被配置有读指针和写指针。读指针和写指针按照从首地址到尾地址的方向移动。当然,读和写指针可以从尾地址跳转到首地址。循环缓冲区321适于存放精简数据包。索引存储区322适于存放与精简数据包在循环缓冲区321中存储位置对应的位置索引项。例如,一个位置索引项包括一个精简数据包在循环缓冲区321中的开始地址和数据长度,但不限于此。
在分配模块314选定对应目标处理单元320的至少一个精简数据包时,空间管理模块323判断循环缓冲区321中剩余存储空间是否小于该至少一个精简数据包的长度。这里,剩余存储空间是指循环缓冲区321的容量上限减去处理模块324未读取的精简数据包占用空间后的剩余量。换言之,剩余存储空间是等待被新的数据覆盖的区域。
在剩余存储空间容量足够容纳所选定的至少一个精简数据包时,分配模块314将所选定的至少一个精简数据包写入到循环缓冲区321中。另外,空间管理模块323将每个写入的精简数据包的存储位置生成为索引存储区322中一个位置索引项。处理模块324可以根据索引存储区322中位置索引项读取相应的精简数据包,以便转发或处理。
需要说明的是,由于本发明的循环缓冲区中精简数据包没有原始数据包的控制字段,并且循环缓冲区为连续内存区域,本发明的处理模块324可以批量读取多个精简数据包并处理。显然,不同于传统的基于链表结构依次读取单个原始数据包并处理的方式,本发明的目标处理单元320可以极大提高对数据包的处理效率。
在剩余存储空间容量小于所选定的至少一个精简数据包时,空间管理模块323根据索引存储区322中位置索引项,依次释放未读取的精简数据包所占用存储空间并更新循环缓存区321的剩余存储空间,直到剩余存储空间不小于该至少一个精简数据包的长度,以便分配模块314将该至少一个精简数据包写入循环缓冲区321。这样,目标处理单元320可以始终保持有最新的精简数据包。
在根据本发明的一个实施例中,在空间管理模块323释放足够存放至少一个精简数据包的长度之后,分配模块314开始将该至少一个精简数据包写入到循环缓冲区321。
在根据本发明又一个实施例中,空间管理模块323释放空间的操作和分配模块314的写入操作可以通过多次操作来实现。图4A示出了写指针w未超过读指针r时循环缓冲区321的示意图。图4B示出了写指针w超过读指针r时循环缓冲区321的示意图。这里,读指针r指向循环缓冲区321中未被处理模块读取的精简数据包中一个。典型地,r可以指向一个精简数据包的开始地址,但不限于此。写指针w指向循环缓冲区321中待覆盖区域的开始位置。下面结合图4A和图4B对本实施例中空间管理模块323和分配模块314的工作过程进行更详细的说明。
在分配模块314选定要转存到循环缓冲区321的精简数据包A1和A2(当然也可以是其他数据包)之后,空间管理模块323首先判断读指针r和写指针w的位置关系。在位置关系符合图4A的情况时,空间管理模块323继续判断读写指针之间的空间是否小于A1和A2的总长度。
一种情况是,读写指针之间空间不小于A1和A2的总长度。分配模块314将A1和A2写入到读写指针之间。写入A1和A2后循环缓冲区如图4C所示。空间管理模块323将分别生成A1和A2的位置索引项。
另一种情况是,读写指针之间空间小于A1和A2的总长度。空间管理模块323将释放读指针r当前指向的精简数据包B1,并更新读指针r。这里,空间管理模块323可以通过删除B1对应的位置索引项来实现释放B1的占用空间,但不限于此。更新读指针r的操作是将r指向下一个未读取的精简数据包,即B2。然后,空间管理模块323继续判断更新后读指针与写指针之间的空间是否小于A1和A2的总长度。在更新后读指针r(当前指向B2)与写指针r之间空间不小于A1和A2的总长度时,分配单元314可以将A1和A2写入到读写指针之间。写入A1和A2后循环缓冲区如图4D所示。
如果小于A1和A2的总长度,空间管理模块323继续释放B2和更新读指针,以及继续判断写指针w与读指针r之间的空间是否小于A1和A2的总长度。这里,空间管理模块323依次释放未读取的精简数据包(B1、B2...),直到写指针w与读指针r之间的空间不小于A1和A2的总长度或者读指针r到达尾地址e位置。在读指针r到达尾地址e且当前读指针r与写指针w之间空间小于A1和A2的总长度时,分配模块314将A1和A2的一部分写入到写指针r和尾地址e之间的空间。空间管理模块323继续释放未读取的精简数据包的占用空间并更新读指针r,直到首地址s到读指针r之间的空间不小于A1和A2未写入的部分。分配模块314将该未写入的部分写入到首地址与读指针r之间的空间。另外,空间管理模块323分别将A1和A2的存储位置存储为索引存储区中一个位置索引项。
在确定读指针r和写指针w之间的位置关系属于图4B的情况时,空间管理模块323判断写指针w与尾地址之间的空间是否小于A1和A2的总长度。如果写指针w与尾地址之间的空间不小于A1和A2的总长度,分配模块323将A1和A2的一部分(例如图4E中A1和A2-1)写入到写指针w与尾地址e之间。然后,空间管理模块323判断首地址到读指针r之间的空间是否小于A1和A2未写入的剩余长度(即图4E中A2-2)。
在首地址到读指针r之间的空间不小于剩余长度时,分配模块323将A1和A2的剩余部分A2-2写入到首地址s与读指针r之间的空间。写入A1和A2后循环缓冲区示意图如图4E所示。
在首地址到读指针r之间的空间小于A1和A2的剩余长度时,空间管理模块323根据索引存储区322中对应未读取精简数据包的位置索引项,依次释放未读取精简数据包的占用空间并更新读指针,直到首地址s与读指针r之间空间不小于A1和A2的剩余长度。在此基础上,分配模块314将A1和A2的剩余部分写入到首地址s与读指针r之间。
综上,空间管理模块323释放空间的操作和分配模块314的写入操作可以分多次完成,本发明对其执行顺序不做过多限制。另外,分配模块314在将A1和A2写入到循环缓冲区321之后,还可以将完成写入的状态通知到处理模块324。这样,处理模块324可以选择响应于该通知读取并处理未读取的精简数据包。
图5示出了根据本发明一些实施例的管理数据缓冲的方法500流程图。方法500适于在计算设备(100)中执行。计算设备包括数据分配单元510和多个目标处理单元,该数据分配单元510包括数据缓冲区和位置信息存储区。该数据分配单元510执行的步骤始于S511。
在步骤S511中,依次接收包含控制字段和数据字段的原始数据包。对于步骤S511中每个原始数据包,方法500执行步骤S512,将每个原始数据包中数据字段存储为数据缓冲区中一个精简数据包。随后,方法500进入步骤S513,将该精简数据包在数据缓冲区中开始地址和数据长度存储为位置信息存储区中对应该精简数据包的位置信息。对于存储在数据缓冲区中的精简数据包,方法500还包括步骤S514,基于位置信息存储区中位置信息,依次读取数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包。根据本发明一个实施例,精简数据包具有分配标识信息。在步骤S514中,依次读取所述数据缓冲区中精简数据包。随后,根据每个精简数据包的分配标识信息来确定其对应的目标处理单元。最后,选定对应同一个目标处理单元且连续存储的至少一个精简数据包。
图6示出了根据本发明一些实施例的管理数据缓冲的方法600的流程图。方法600适于在计算设备(100)中执行。计算设备包括数据分配单元610和多个目标处理单元(620是其中一个目标处理单元)。该数据分配单元610包括数据缓冲区和位置信息存储区。数据分配单元610所执行的步骤包括S611至S614。步骤S611至S614分别与步骤S511至S514对应,这里不再赘述。
目标处理单元620包括循环缓冲区和索引存储区。目标处理单元620执行的操作始于步骤S621。对于在步骤S514中所选定对应目标处理单元620的至少一个精简数据包,目标处理单元620执行步骤S621,判断在循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度。在不小于该至少一个精简数据包的长度时,目标处理单元620指示数据分配单元610执行步骤S615。在步骤S615中,将该至少一个精简数据包写入目标处理单元620的循环缓冲区。
可选地,在执行步骤S615后,数据分配单元还可以执行步骤S616,通知所对应的目标处理单元620,以便目标处理单元620执行下文中步骤S623。
对于步骤S615中写入的循环缓冲区的数据包,目标处理单元620执行步骤S622,将所写入到循环缓冲区中每一个精简数据包的存储位置生成为索引存储区中一个位置索引项。根据本发明一个实施例,位置索引项包括其所指向的精简数据包在循环缓冲区中的开始地址和数据长度。目标处理单元620还可以执行步骤S623,根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理。根据本发明一个实施例,在步骤S623中,首先根据索引存储区中位置索引项读取循环缓冲区中所有未读取的精简数据包。然后,转发从循环缓冲区读取的精简数据包,或者根据预定应用逻辑处理所读取的精简数据包。另外,目标处理单元620还可以执行步骤S624,删除已读取的精简数据包在索引存储区中对应的位置索引项。
在步骤S621中确定循环缓冲区中剩余存储空间小于该至少一个精简数据包的长度时,目标处理单元620还执行步骤S625。在步骤S625中,根据索引存储区中位置索引项,依次释放未读取的精简数据包所占用存储空间并更新环形缓存区的剩余存储空间,直到剩余存储空间不小于该至少一个精简数据包的长度,以便数据分配单元610执行步骤S615。
可选地,在根据本发明一个实施例中,目标处理单元620的循环缓冲区包括连续内存区域。该连续内存区域包括首地址、尾地址、沿着首地址到尾地址方向移动的读指针和写指针。其中,读指针指向循环缓冲区中未读取的精简数据包中一个。写指针指向循环缓冲区中待覆盖区域的开始位置。读指针的值例如为该读指针所指向的精简数据包所对应的位置索引项中开始地址。在本实施例中,步骤S621和S625可以被实施为图7所示的方法700,但不限于此。
如图7所示,方法700始于步骤S710,判断写指针是否超过读指针的位置。在未超过读指针的位置时,方法700执行步骤S720,判断读指针和所述写指针之间空间是否小于所述至少一个精简数据包的长度。在超过读指针的位置时,方法700执行步骤S730,判断写指针与尾地址之间空间是否小于所述至少一个精简数据包的长度。
在步骤S720中确定读指针和所述写指针之间空间未小于至少一个精简数据包的长度时,指示数据分配单元610执行步骤S615。
在步骤S720中确定读指针和所述写指针之间空间小于至少一个精简数据包的长度时,方法700执行步骤S740,根据索引存储区中对应未读取精简数据包的位置索引项,依次释放未读取精简数据包的占用空间并更新读指针,直到写指针与读指针之间空间不小于至少一个精简数据包的长度或者读指针到达尾地址。在步骤S740中读指针到达尾地址且当前读指针与写指针之间空间小于至少一个精简数据包的长度时,数据分配单元610将至少一个精简数据包的一部分写入到写指针和尾地址之间的空间。方法700还包括步骤S750,继续释放未读取的精简数据包的占用空间并更新读指针,直到首地址到读指针之间的空间不小于至少一个精简数据包中未写入的部分。数据分配单元610将该未写入的部分写入到首地址与读指针之间的空间。如上所述,数据分配单元610可以分两次操作来实现与步骤S615一致的操作结果。
另外,在步骤S740中确定写指针与尾地址之间空间未小于至少一个精简数据包的长度时,数据分配单元直接执行步骤S615。
在步骤S730中确定写指针与尾地址之间空间小于至少一个精简数据包的长度时,数据分配单元执行将该至少一个精简数据包的一部分写入到当前写指针与尾地址之间的空间的操作。方法700还包括步骤S760,判断首地址到读指针之间的空间是否小于该至少一个精简数据包的剩余长度。
在步骤S760中确定首地址到读指针之间的空间不小于该至少一个精简数据包的剩余长度时,数据分配单元610还执行将该至少一个精简数据包的剩余部分写入到首地址与读指针之间空间的操作。这样,数据分配单元610通过两次写入操作来实现与步骤S615一致的操作结果。
另外,在步骤S760中确定首地址到读指针之间的空间小于该至少一个精简数据包的剩余长度时,方法700还执行步骤S770,根据所索引存储区中对应未读取精简数据包的位置索引项,依次释放未读取精简数据包的占用空间并更新读指针,直到首地址与读指针之间空间不小于至少一个精简数据包的剩余长度,以便数据分配单元610将该至少一个精简数据包的剩余部分写入到首地址与读指针之间。
另外,步骤S740、S750和S770中所执行的释放未读取精简数据包的占用空间并更新读指针的操作可以被实施为下述方式。删除未读取精简数据包在索引存储区中对应的位置索引项。将读指针更新为指向下一个未读取精简数据包。
A9、如A8所述的应用,其中,在所述首地址到读指针之间的空间不小于该至少一个精简数据包的剩余长度时,所述分配模块将该至少一个精简数据包的剩余部分写入到首地址与读指针之间的空间;在所述首地址到读指针之间的空间小于该至少一个精简数据包的剩余长度时,所述空间管理模块还适于:根据所述索引存储区中对应未读取精简数据包的位置索引项,依次释放所述未读取精简数据包的占用空间并更新读指针,直到所述首地址与读指针之间空间不小于所述至少一个精简数据包的剩余长度,以便所述分配模块将该至少一个精简数据包的剩余部分写入到所述首地址与读指针之间。
A10、如A6-A9中任一项所述的应用,其中,所述空间管理模块适于根据下述方式执行释放所述未读取精简数据包的占用空间并更新读指针的操作:删除所述未读取精简数据包在所述索引存储区中对应的位置索引项;将读指针更新为指向下一个未读取精简数据包。A11、如A2-A10中任一项所述的应用,其中,所述位置索引项包括其所指向的精简数据包在所述循环缓冲区中的开始地址和数据长度。A12、如A11所述的应用,其中,所述读指针的值为该读指针所指向的精简数据包所对应的位置索引项中开始地址。A13、如A1-A12中任一项所述的应用,其中,所述处理模块适于根据下述方式执行根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理:根据索引存储区中位置索引项读取循环缓冲区中所有未读取的精简数据包;转发从所述循环缓冲区读取到的精简数据包,或者根据预定应用逻辑处理所读取的精简数据包。A14、如A1-A13中任一项所述的应用,其中,所述精简数据包具有分配标识信息,所述分配模块适于根据下述方式依次读取所述数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包:依次读取所述数据缓冲区中精简数据包;根据每个精简数据包的分配标识信息来确定其对应的目标处理单元;选定对应同一个目标处理单元且连续存储的至少一个精简数据包。A15、如A1-A14中任一项所述的应用,其中,所述处理模块还适于:删除已读取的精简数据包在索引存储区中对应的位置索引项。A16、如A1-A15中任一项所述的应用,其中,所述分配模块还适于:在将所述至少一个精简数据包写入到对应的目标处理单元的循环缓冲区之后,通知所对应的目标处理单元的处理模块,以便该处理模块执行读取和处理的操作。
B18、如B17所述的方法,其中,所对应的目标处理单元包括循环缓冲区和索引存储区,该目标处理单元执行的步骤包括:判断在所述循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度;在不小于该至少一个精简数据包的长度时,指示所述数据分配单元将该至少一个精简数据包写入循环缓冲区中;将所写入到所述循环缓冲区中每一个精简数据包的存储位置生成为索引存储区中一个位置索引项;根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理。B19、如B18所述的方法,其中,在所述循环缓冲区中剩余存储空间小于该至少一个精简数据包的长度时,该目标处理单元执行的步骤还包括:根据索引存储区中、关于循环缓冲区中已存储的精简数据包的位置索引项,依次释放未读取的精简数据包所占用存储空间并更新所述环形缓存区的剩余存储空间,直到剩余存储空间不小于该至少一个精简数据包的长度,以便所述数据分配单元将该至少一个精简数据包写入循环缓冲区。B20、如B18或B19所述的方法,其中,所述循环缓冲区包括:连续内存区域,该连续内存区域包括首地址和尾地址;沿着首地址到尾地址方向移动的读指针和写指针,其中,读指针指向所述循环缓冲区中未读取的精简数据包中一个,写指针指向所述循环缓冲区中待覆盖区域的开始位置。B21、如B18-B20中任一项所述的方法,其中,所述判断在循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度的步骤包括:判断所述写指针是否超过所述读指针的位置;在未超过读指针的位置时,判断所述读指针和所述写指针之间空间是否小于所述至少一个精简数据包的长度;在超过读指针的位置时,判断所述写指针与所述尾地址之间空间是否小于所述至少一个精简数据包的长度。B22、如B21所述的方法,其中,在所述读指针和所述写指针之间空间未小于所述至少一个精简数据包的长度时,所述数据分配单元还执行:将该至少一个精简数据包写入到所述循环缓冲区中;在所述读指针和所述写指针之间空间小于所述至少一个精简数据包的长度时,所述目标处理单元还执行:根据所述索引存储区中对应未读取精简数据包的位置索引项,依次释放所述未读取精简数据包的占用空间并更新读指针,直到写指针与读指针之间空间不小于所述至少一个精简数据包的长度或者读指针到达所述尾地址。B23、如B22所述的应用,其中,在读指针到达所述尾地址且当前读指针与写指针之间空间小于所述至少一个精简数据包的长度时,所述数据分配单元执行:将所述至少一个精简数据包的一部分写入到写指针和尾地址之间的空间;所述目标处理单元还执行:继续释放未读取的精简数据包的占用空间并更新读指针,直到首地址到读指针之间的空间不小于所述至少一个精简数据包中未写入的部分,以便所述数据分配单元将该未写入的部分写入到首地址与读指针之间的空间。B24、如B21所述的应用,其中,在所述写指针与所述尾地址之间空间未小于所述至少一个精简数据包的长度时,所述数据分配单元还执行:将该至少一个精简数据包写入到所述循环缓冲区中;在所述写指针与所述尾地址之间空间小于所述至少一个精简数据包的长度时,所述数据分配单元还执行:将该至少一个精简数据包的一部分写入到当前写指针与尾地址之间的空间,所述目标处理单元还执行:判断首地址到读指针之间的空间是否小于该至少一个精简数据包的剩余长度。B25、如B24所述的方法,其中,在所述首地址到读指针之间的空间不小于该至少一个精简数据包的剩余长度时,所述数据分配单元还执行:将该至少一个精简数据包的剩余部分写入到首地址与读指针之间的空间;在所述首地址到读指针之间的空间小于该至少一个精简数据包的剩余长度时,所述数据分配单元还执行:根据所述索引存储区中对应未读取精简数据包的位置索引项,依次释放所述未读取精简数据包的占用空间并更新读指针,直到所述首地址与读指针之间空间不小于所述至少一个精简数据包的剩余长度,以便所述数据分配单元将该至少一个精简数据包的剩余部分写入到所述首地址与读指针之间。B26、如B22-B25中任一项所述的方法,其中,所述执行释放所述未读取精简数据包的占用空间并更新读指针的操作:删除所述未读取精简数据包在所述索引存储区中对应的位置索引项;将读指针更新为指向下一个未读取精简数据包。B27、如B18-B26中任一项所述的方法,其中,所述位置索引项包括其所指向的精简数据包在所述循环缓冲区中的开始地址和数据长度。B28、如B27所述的方法,其中,所述读指针的值为该读指针所指向的精简数据包所对应的位置索引项中开始地址。B29、如B17-B28中任一项所述的方法,其中,所述根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理的步骤包括:根据索引存储区中位置索引项读取循环缓冲区中所有未读取的精简数据包;转发从所述循环缓冲区读取的精简数据包,或者根据预定应用逻辑处理所读取的精简数据包。B30、如B17-B29中任一项所述的方法,其中,所述精简数据包具有分配标识信息,所述依次读取所述数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包的步骤包括:依次读取所述数据缓冲区中精简数据包;根据每个精简数据包的分配标识信息来确定其对应的目标处理单元;选定对应同一个目标处理单元且连续存储的至少一个精简数据包。B31、如B17-B30中任一项所述的方法,其中,所述目标处理单元还执行:删除已读取的精简数据包在索引存储区中对应的位置索引项。B32、如B17-B31中任一项所述的方法,其中,所述数据分配单元还执行:在将所述至少一个精简数据包写入到对应的目标处理单元的循环缓冲区之后,通知所对应的目标处理单元,以便该目标处理单元执行读取和处理的操作。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。
Claims (31)
1.一种管理数据缓冲的应用,适于驻留在计算设备中,该应用包括数据分配单元和多个目标处理单元,其中,
数据分配单元包括:
数据缓冲区,被配置为包含连续内存区域的循环缓冲区;
位置信息存储区;
接收模块,适于依次接收包含控制字段和数据字段的原始数据包,将每个原始数据包中数据字段存储为数据缓冲区中一个精简数据包,并且将该精简数据包在数据缓冲区中开始地址和数据长度存储为位置信息存储区中对应该精简数据包的位置信息,所述原始数据包为来自本地的其他应用或来自网络的数据包;和
分配模块,基于位置信息存储区中位置信息,依次读取数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包,从而对数据缓冲区中连续存储的精简数据包进行分段,以便将每段包括的至少一个精简数据包一次性转存到所对应的目标处理单元;
其中,所对应的目标处理单元包括:
循环缓冲区;
索引存储区;
空间管理模块,适于:
判断循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度,
在不小于该至少一个精简数据包的长度时,指示所述分配模块将该至少一个精简数据包写入循环缓冲区中,
将所写入到循环缓冲区中每一个精简数据包的存储位置生成为索引存储区中一个位置索引项;
处理模块,适于根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理。
2.如权利要求1所述的应用,其中,在所述循环缓冲区中剩余存储空间小于该至少一个精简数据包的长度时,所述空间管理模块还适于:
根据索引存储区中、关于循环缓冲区中已存储的精简数据包的位置索引项,依次释放未读取的精简数据包所占用存储空间并更新所述循环缓存区的剩余存储空间,直到剩余存储空间不小于该至少一个精简数据包的长度,以便所述分配模块将该至少一个精简数据包写入循环缓冲区。
3.如权利要求1所述的应用,其中,所述循环缓冲区包括:
连续内存区域,该连续内存区域包括首地址和尾地址;
沿着首地址到尾地址方向移动的读指针和写指针,
其中,读指针指向所述循环缓冲区中未被所述处理模块读取的精简数据包中一个,写指针指向所述循环缓冲区中待覆盖区域的开始位置。
4.如权利要求3所述的应用,其中,所述空间管理模块适于根据下述方式判断循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度:
判断所述写指针是否超过所述读指针的位置;
在未超过读指针的位置时,判断所述读指针和所述写指针之间空间是否小于所述至少一个精简数据包的长度;
在超过读指针的位置时,判断所述写指针与尾地址之间空间是否小于所述至少一个精简数据包的长度。
5.如权利要求4所述的应用,其中,
在所述读指针和所述写指针之间空间未小于所述至少一个精简数据包的长度时,所述分配模块将该至少一个精简数据包写入到所述循环缓冲区中;
在所述读指针和所述写指针之间空间小于所述至少一个精简数据包的长度时,所述空间管理模块还适于:根据所述索引存储区中未读取精简数据包的位置索引项,依次释放所述未读取精简数据包的占用空间并更新读指针,直到写指针与读指针之间空间不小于所述至少一个精简数据包的长度或者读指针到达所述尾地址。
6.如权利要求5所述的应用,其中,在读指针到达所述尾地址且当前读指针与写指针之间空间小于所述至少一个精简数据包的长度时,
所述分配模块还适于,将所述至少一个精简数据包的一部分写入到写指针和尾地址之间的空间,
所述空间管理模块还适于,继续释放未读取的精简数据包的占用空间并更新读指针,直到首地址到读指针之间的空间不小于所述至少一个精简数据包中未写入的部分,以便所述分配模块将该未写入的部分写入到首地址与读指针之间的空间。
7.如权利要求4所述的应用,其中,
在所述写指针与尾地址之间空间未小于所述至少一个精简数据包的长度时,所述分配模块适于将该至少一个精简数据包写入到所述循环缓冲区中;
在所述写指针与尾地址之间空间小于所述至少一个精简数据包的长度时,
所述分配模块将该至少一个精简数据包的一部分写入到当前写指针与尾地址之间的空间,
所述空间管理模块还适于判断首地址到读指针之间的空间是否小于该至少一个精简数据包的剩余长度。
8.如权利要求7所述的应用,其中,
在所述首地址到读指针之间的空间不小于该至少一个精简数据包的剩余长度时,所述分配模块将该至少一个精简数据包的剩余部分写入到首地址与读指针之间的空间;
在所述首地址到读指针之间的空间小于该至少一个精简数据包的剩余长度时,
所述空间管理模块还适于:根据所述索引存储区中对应未读取精简数据包的位置索引项,依次释放所述未读取精简数据包的占用空间并更新读指针,直到所述首地址与读指针之间空间不小于所述至少一个精简数据包的剩余长度,以便所述分配模块将该至少一个精简数据包的剩余部分写入到所述首地址与读指针之间。
9.如权利要求5所述的应用,其中,所述空间管理模块适于根据下述方式执行释放所述未读取精简数据包的占用空间并更新读指针的操作:
删除所述未读取精简数据包在所述索引存储区中对应的位置索引项;
将读指针更新为指向下一个未读取精简数据包。
10.如权利要求3所述的应用,其中,所述位置索引项包括其所指向的精简数据包在所述循环缓冲区中的开始地址和数据长度。
11.如权利要求10所述的应用,其中,所述读指针的值为该读指针所指向的精简数据包所对应的位置索引项中开始地址。
12.如权利要求1-11中任一项所述的应用,其中,所述处理模块适于根据下述方式执行根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理:
根据索引存储区中位置索引项读取循环缓冲区中所有未读取的精简数据包;
转发从所述循环缓冲区读取到的精简数据包,或者根据预定应用逻辑处理所读取的精简数据包。
13.如权利要求1所述的应用,其中,所述精简数据包具有分配标识信息,所述分配模块适于根据下述方式依次读取所述数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包:
依次读取所述数据缓冲区中精简数据包;
根据每个精简数据包的分配标识信息来确定其对应的目标处理单元;
选定对应同一个目标处理单元且连续存储的至少一个精简数据包。
14.如权利要求1所述的应用,其中,所述处理模块还适于:删除已读取的精简数据包在索引存储区中对应的位置索引项。
15.如权利要求1所述的应用,其中,所述分配模块还适于:在将所述至少一个精简数据包写入到对应的目标处理单元的循环缓冲区之后,通知所对应的目标处理单元的处理模块,以便该处理模块执行读取和处理的操作。
16.一种管理数据缓冲的方法,适于在计算设备中执行,该计算设备包括数据分配单元和多个目标处理单元,该数据分配单元包括数据缓冲区和位置信息存储区,该数据分配单元执行的步骤包括:
依次接收包含控制字段和数据字段的原始数据包,所述原始数据包为来自本地的其他应用或来自网络的数据包;
将每个原始数据包中数据字段存储为数据缓冲区中一个精简数据包,所述数据缓冲区被配置为包含连续内存区域的循环缓冲区;
将该精简数据包在数据缓冲区中开始地址和数据长度存储为位置信息存储区中对应该精简数据包的位置信息;和
基于位置信息存储区中位置信息,依次读取数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包,从而对数据缓冲区中连续存储的精简数据包进行分段,以便将每段包括的至少一个精简数据包一次性转存到所对应的目标处理单元;
其中,所对应的目标处理单元包括循环缓冲区和索引存储区,该目标处理单元执行的步骤包括:
判断在所述循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度;
在不小于该至少一个精简数据包的长度时,指示所述数据分配单元将该至少一个精简数据包写入循环缓冲区中;
将所写入到所述循环缓冲区中每一个精简数据包的存储位置生成为索引存储区中一个位置索引项;
根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理。
17.如权利要求16所述的方法,其中,在所述循环缓冲区中剩余存储空间小于该至少一个精简数据包的长度时,该目标处理单元执行的步骤还包括:
根据索引存储区中、关于循环缓冲区中已存储的精简数据包的位置索引项,依次释放未读取的精简数据包所占用存储空间并更新循环缓存区的剩余存储空间,直到剩余存储空间不小于该至少一个精简数据包的长度,以便所述数据分配单元将该至少一个精简数据包写入循环缓冲区。
18.如权利要求16所述的方法,其中,所述循环缓冲区包括:
连续内存区域,该连续内存区域包括首地址和尾地址;
沿着首地址到尾地址方向移动的读指针和写指针,
其中,读指针指向所述循环缓冲区中未读取的精简数据包中一个,写指针指向所述循环缓冲区中待覆盖区域的开始位置。
19.如权利要求18所述的方法,其中,所述判断在循环缓冲区中剩余存储空间是否小于该至少一个精简数据包的长度的步骤包括:
判断所述写指针是否超过所述读指针的位置;
在未超过读指针的位置时,判断所述读指针和所述写指针之间空间是否小于所述至少一个精简数据包的长度;
在超过读指针的位置时,判断所述写指针与所述尾地址之间空间是否小于所述至少一个精简数据包的长度。
20.如权利要求19所述的方法,其中,
在所述读指针和所述写指针之间空间未小于所述至少一个精简数据包的长度时,所述数据分配单元还执行:将该至少一个精简数据包写入到所述循环缓冲区中;
在所述读指针和所述写指针之间空间小于所述至少一个精简数据包的长度时,所述目标处理单元还执行:
根据所述索引存储区中对应未读取精简数据包的位置索引项,依次释放所述未读取精简数据包的占用空间并更新读指针,直到写指针与读指针之间空间不小于所述至少一个精简数据包的长度或者读指针到达所述尾地址。
21.如权利要求20所述的方法,其中,在读指针到达所述尾地址且当前读指针与写指针之间空间小于所述至少一个精简数据包的长度时,
所述数据分配单元执行:将所述至少一个精简数据包的一部分写入到写指针和尾地址之间的空间;
所述目标处理单元还执行:继续释放未读取的精简数据包的占用空间并更新读指针,直到首地址到读指针之间的空间不小于所述至少一个精简数据包中未写入的部分,以便所述数据分配单元将该未写入的部分写入到首地址与读指针之间的空间。
22.如权利要求20所述的方法,其中,
在所述写指针与所述尾地址之间空间未小于所述至少一个精简数据包的长度时,所述数据分配单元还执行:将该至少一个精简数据包写入到所述循环缓冲区中;
在所述写指针与所述尾地址之间空间小于所述至少一个精简数据包的长度时,所述数据分配单元还执行:将该至少一个精简数据包的一部分写入到当前写指针与尾地址之间的空间,
所述目标处理单元还执行:判断首地址到读指针之间的空间是否小于该至少一个精简数据包的剩余长度。
23.如权利要求22所述的方法,其中,
在所述首地址到读指针之间的空间不小于该至少一个精简数据包的剩余长度时,所述数据分配单元还执行:将该至少一个精简数据包的剩余部分写入到首地址与读指针之间的空间;
在所述首地址到读指针之间的空间小于该至少一个精简数据包的剩余长度时,所述数据分配单元还执行:根据所述索引存储区中对应未读取精简数据包的位置索引项,依次释放所述未读取精简数据包的占用空间并更新读指针,直到所述首地址与读指针之间空间不小于所述至少一个精简数据包的剩余长度,以便所述数据分配单元将该至少一个精简数据包的剩余部分写入到所述首地址与读指针之间。
24.如权利要求20所述的方法,其中,所述执行释放所述未读取精简数据包的占用空间并更新读指针的操作:
删除所述未读取精简数据包在所述索引存储区中对应的位置索引项;
将读指针更新为指向下一个未读取精简数据包。
25.如权利要求18所述的方法,其中,所述位置索引项包括其所指向的精简数据包在所述循环缓冲区中的开始地址和数据长度。
26.如权利要求25所述的方法,其中,所述读指针的值为该读指针所指向的精简数据包所对应的位置索引项中开始地址。
27.如权利要求16所述的方法,其中,所述根据索引存储区中位置索引项读取循环缓冲区中精简数据包并处理的步骤包括:
根据索引存储区中位置索引项读取循环缓冲区中所有未读取的精简数据包;
转发从所述循环缓冲区读取的精简数据包,或者根据预定应用逻辑处理所读取的精简数据包。
28.如权利要求16所述的方法,其中,所述精简数据包具有分配标识信息,所述依次读取所述数据缓冲区中精简数据包,分析并选定对应于同一个目标处理单元且连续存储的至少一个精简数据包的步骤包括:
依次读取所述数据缓冲区中精简数据包;
根据每个精简数据包的分配标识信息来确定其对应的目标处理单元;
选定对应同一个目标处理单元且连续存储的至少一个精简数据包。
29.如权利要求16-28中任一项所述的方法,其中,所述目标处理单元还执行:删除已读取的精简数据包在索引存储区中对应的位置索引项。
30.如权利要求16所述的方法,其中,所述数据分配单元还执行:在将所述至少一个精简数据包写入到对应的目标处理单元的循环缓冲区之后,通知所对应的目标处理单元,以便该目标处理单元执行读取和处理的操作。
31.一种计算设备,包括:如权利要求1-15中任一项所述的管理数据缓冲的应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610670437.5A CN106330764B (zh) | 2016-08-15 | 2016-08-15 | 管理数据缓冲的方法、应用及计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610670437.5A CN106330764B (zh) | 2016-08-15 | 2016-08-15 | 管理数据缓冲的方法、应用及计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106330764A CN106330764A (zh) | 2017-01-11 |
CN106330764B true CN106330764B (zh) | 2019-11-15 |
Family
ID=57740467
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610670437.5A Active CN106330764B (zh) | 2016-08-15 | 2016-08-15 | 管理数据缓冲的方法、应用及计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106330764B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107329807B (zh) * | 2017-06-29 | 2020-06-30 | 北京京东尚科信息技术有限公司 | 数据延迟处理方法和装置、计算机可读存储介质 |
CN109739570B (zh) * | 2018-12-24 | 2022-04-08 | 新华三技术有限公司 | 一种数据读取方法、服务器控制设备、服务器及计算机可读存储介质 |
CN109933303B (zh) * | 2019-02-28 | 2020-09-18 | 中国人民解放军陆军工程大学 | 一种多用户高速伪随机序列发生器电路及其工作方法 |
CN111240599B (zh) * | 2020-01-17 | 2021-06-25 | 北京马赫谷科技有限公司 | 数据流存储方法及装置 |
CN112235204B (zh) * | 2020-10-13 | 2023-04-07 | 中移(杭州)信息技术有限公司 | 一种数据上报方法、系统、电子设备和存储介质 |
CN112416820B (zh) * | 2020-11-04 | 2022-05-27 | 国网山东省电力公司信息通信公司 | 一种数据包分类存储方法及系统 |
CN112598517B (zh) * | 2020-12-24 | 2022-08-23 | 临沂市新商网络技术有限公司 | 面向大规模并发请求的电子商务交易撮合方法及系统 |
CN114265561B (zh) * | 2021-12-24 | 2024-08-20 | 上海集成电路装备材料产业创新中心有限公司 | 一种数据读取控制方法、芯片和介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1513135A (zh) * | 2001-06-06 | 2004-07-14 | 皇家菲利浦电子有限公司 | 在每个总线周期中可读取和/或写入可选数目的数据字的先进先出缓冲区 |
CN1592169A (zh) * | 2003-08-28 | 2005-03-09 | 华为技术有限公司 | 复合传输信道解复用后的数据处理方法 |
CN101304362A (zh) * | 2007-05-11 | 2008-11-12 | 中芯国际集成电路制造(上海)有限公司 | 重传缓冲装置及传输数据的方法 |
US7568066B2 (en) * | 2006-09-26 | 2009-07-28 | Arcadyan Technology Corporation | Reset system for buffer and method thereof |
CN103729187A (zh) * | 2013-12-31 | 2014-04-16 | 深圳信息职业技术学院 | 基于缓冲区的驱动程序架构设计的方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100566266C (zh) * | 2007-12-14 | 2009-12-02 | 浙江工业大学 | 具有时效性的动态双向环行tcp流缓冲区建立和执行方法 |
-
2016
- 2016-08-15 CN CN201610670437.5A patent/CN106330764B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1513135A (zh) * | 2001-06-06 | 2004-07-14 | 皇家菲利浦电子有限公司 | 在每个总线周期中可读取和/或写入可选数目的数据字的先进先出缓冲区 |
CN1592169A (zh) * | 2003-08-28 | 2005-03-09 | 华为技术有限公司 | 复合传输信道解复用后的数据处理方法 |
US7568066B2 (en) * | 2006-09-26 | 2009-07-28 | Arcadyan Technology Corporation | Reset system for buffer and method thereof |
CN101304362A (zh) * | 2007-05-11 | 2008-11-12 | 中芯国际集成电路制造(上海)有限公司 | 重传缓冲装置及传输数据的方法 |
CN103729187A (zh) * | 2013-12-31 | 2014-04-16 | 深圳信息职业技术学院 | 基于缓冲区的驱动程序架构设计的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106330764A (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106330764B (zh) | 管理数据缓冲的方法、应用及计算设备 | |
US11467769B2 (en) | Managed fetching and execution of commands from submission queues | |
US10831547B2 (en) | Accelerator control apparatus for analyzing big data, accelerator control method, and program | |
GB2548845B (en) | Handling memory requests | |
CN108156823B (zh) | 一种闪存介质的访问方法及控制器 | |
EP3258370B1 (en) | Executing memory requests out of order | |
CN108496161A (zh) | 数据缓存装置及控制方法、数据处理芯片、数据处理系统 | |
CN110780823B (zh) | 小对象内存管理方法、装置、电子设备和计算机可读介质 | |
JP4357473B2 (ja) | データ処理システムおよびプログラム | |
CN109960589B (zh) | 嵌入式系统的系统软件层的实现方法、装置及可读介质 | |
EP3376359A1 (en) | Write request processing method and mobile terminal | |
KR20180087925A (ko) | 논리 어드레스와 물리 어드레스 사이에서 해싱 기반 변환을 수행하는 스토리지 장치 | |
CN112445725A (zh) | 预读取文件页的方法、装置和终端设备 | |
CN109298888B (zh) | 队列的数据存取方法及装置 | |
CN110209341B (zh) | 一种数据写入方法、装置和存储设备 | |
US9195618B2 (en) | Method and system for scheduling memory requests | |
CN106897246B (zh) | 处理器和使用处理器处理数据的方法 | |
KR100841548B1 (ko) | 처리 시스템 | |
JP4748609B2 (ja) | 画像処理システム | |
EP1988460A1 (en) | Apparatus for and method of distributing instructions | |
US20230325087A1 (en) | Systems and methods for accelerating memory transfers and computation efficiency using a computation-informed partitioning of an on-chip data buffer and implementing computation-aware data transfer operations to the on-chip data buffer | |
CN110874189B (zh) | 存储系统和存储控制方法 | |
CN114253458A (zh) | 内存缺页异常的处理方法、装置、设备及存储介质 | |
JPWO2008149657A1 (ja) | 入出力制御システム、入出力制御方法、及び、入出力制御プログラム | |
JP2021135538A (ja) | ストレージ制御装置及びストレージ制御プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |