CN110943936A - 一种高效的基于动态数组的网络流量处理方法及系统 - Google Patents
一种高效的基于动态数组的网络流量处理方法及系统 Download PDFInfo
- Publication number
- CN110943936A CN110943936A CN201911086763.1A CN201911086763A CN110943936A CN 110943936 A CN110943936 A CN 110943936A CN 201911086763 A CN201911086763 A CN 201911086763A CN 110943936 A CN110943936 A CN 110943936A
- Authority
- CN
- China
- Prior art keywords
- array
- block
- basic block
- basic
- blocks
- 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
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9005—Buffering arrangements using dynamic buffer space allocation
-
- 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/9063—Intermediate storage in different physical parts of a node or terminal
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及一种高效的基于动态数组的网络流量处理方法及系统。该方法为每个线程分配一个缓存管理器,所述缓存管理器申请以超级块为单位的内存块,每个超级块包含多个基本块;设置动态数组,通过所述动态数组将网络流的扫描结果存储在所属线程的缓存管理器申请的超级块中。在初始化阶段创建所需线程,初始化缓存管理器、线程中的网络流以及动态数组;在内存使用阶段进行申请内存、获取下一元素以及归还内存的操作。本发明能够减少内存空间的浪费,满足在线系统的高效处理性能与较低空间消耗的需求。
Description
技术领域
本发明属于计算机软件技术、网络技术领域,具体涉及一种高效的基于动态数组的网络流量处理方法及系统。
背景技术
存储计算结果是所有信息系统中最基本的操作之一,用于存储结算结果的数据结构也是信息系统的基本数据结构之一。对于需处理大数据量的高并发在线实时系统来说,数据存储数据结构既要满足数据的快速存取,同时其内存占用也不能过大。以实时的网络流量处理系统为例,需要同时并发处理数百万的TCP链接,假设运行系统的计算机最大支持32个线程,其中每个线程管理10万个并发TCP链接,该计算机同时维护的并发链接数量是320万,每个链接都有中间的计算结果需要缓存,320万个链接需要消耗大量的内存来缓存中间结果,本文后续将以实时网络流量处理系统为例来阐述本发明。一般来说,缓存中间结果的数据结构可有以下几种选择:
1、采用静态数组存储:在程序初始化的时候预先分配好固定大小的数组来存储计算结果。
2、采用动态数组存储:利用C++STL标准库中set或vector等来存储计算结果。vector维护一段连续的内存空间,具有固定的起始地址,因而能方便地进行随机存取。其内存空间可动态增长,当超过首次分配的预备存储空间时再重新分配另外一块内存存储,大小增加为原来的两倍,拷贝原内容之后构造新元素,并释放原空间。
3、内存动态分配:在程序初始化的时候预先分配一个小数组,在程序运行过程中,已有容量不够的时候再追加内存分配。
现有的技术方案主要包括静态数组方式、vector等动态数组方式以及内存动态分配等三种方式,这几种方案在空间消耗和存取性能上都存在着一些不足,具体如下:
1、采用静态数组存储:直接用固定大小的静态数组实现时不够灵活,不同的TCP链接需要缓存的结果的数量差异较大,有的链接需要缓存的数量很少,严重的浪费资源,有的链接则由于需要缓存的结果过多导致容量不足;并且存在内存大量消耗的问题,若存储结果的结构体大小为64B,一个链接分配的结果数组容量为1024,则一个链接消耗内存64KB,对于100万个链接来说,消耗内存约60GB,严重浪费了内存空间。
2、采用动态数组存储:传统动态数组的实现方式会导致系统整体处理性能的降低。在系统架构设计时可通过设计保证不同线程的结果缓存变量是线程独立的,不同线程的结果缓存变量不会互斥,但是vector或set等是灵活的动态数组,在程序运行的时候会根据需要而动态的申请内存,系统运行的时候会需要频繁的存结果或取结果,当待缓存的结果数量迅速增长,vector或set需要频繁的向操作系统申请追加内存,尽管结果缓存变量是线程独立的,但是vector或set申请内存的操作在操作系统层是互斥的,多线程情况下需要互斥等待,从而降低系统的整体处理性能。此外,vector或set还存在由于内存归还不及时而带来内存浪费,当一个TCP链接结束时,程序可将存储中间结果信息的set与vector清空,但其对应的内存空间实际并没有立即归还给操作系统,该部分内存对操作系统来说仍然不可用,从而造成了内存的浪费。
3、内存动态分配:该方案和静态数组相比更为灵活,但仍然不够,若预分配的数组过大则可能造成内存浪费,预分配过小则后期可能需要频繁追加分配空间,在内存追加分配时则可能发生互斥等待,从而降低程序的性能。
发明内容
本发明提供一种高效的基于动态数组的网络流量处理方法及系统。该方法是针对高并发流情况下的结果缓存方法,以内存池方法为原型,减少内存空间的浪费,满足在线系统的高效处理性能与较低空间消耗的需求。
本发明采用的技术方案如下:
一种高效的基于动态数组的网络流量处理方法,包括以下步骤:
为每个线程分配一个缓存管理器,所述缓存管理器申请以超级块为单位的内存块,每个超级块包含多个基本块;
设置动态数组,通过所述动态数组将网络流的扫描结果存储在所属线程的缓存管理器申请的超级块中。
进一步地,在初始化阶段进行以下操作:
创建所需线程,为每个线程分配一个缓存管理器,初始化每个缓存管理器:设置已申请超级块个数为0,最多可申请N个超级块,每个超级块的空闲基本块个数为0;
初始化线程中的流,设置其所属线程的id,并设置动态数组;
初始化动态数组,首次申请分配一个超级块,供需要存储扫描结果时使用,初始化该超级块中空闲基本块的个数,每个基本块可存储的元素的个数,初始化索引数组和空闲基本块的id,设置next数组,并记录头尾指针的位置;所述索引数组用于记录超级块中空闲基本块的id,所述next数组用于记录元素间的位置关系。
进一步地,在内存使用阶段,采用以下步骤申请内存:
当某线程中的流扫描到需要存储的信息时,动态数组在该线程对应的缓存管理器中申请对内存的使用,在该线程对应缓存管理器中的尾指针指向的基本块中写入新增加的元素,移动尾指针指向下一未写入的元素位置;
若写入元素前尾指针已指向该基本块的最后一个元素,则向缓存管理器申请新的基本块,尾指针的下一元素位置即新基本块的首元素位置,尾指针指向该位置,并使用next数组记录元素的前后位置关系;否则尾指针指向该基本块内后一个元素。
进一步地,在内存使用阶段,采用以下步骤获取下一元素:
首先判断当前是否为尾指针指向的位置,是则说明当前位置后没有元素,该获取下一元素的过程结束;否则继续判断当前位置是否是某基本块最后一个元素所在位置,是则通过next数组寻找下一元素的位置,否则当前位置直接加一即可得到下一元素位置。
进一步地,在内存使用阶段,采用以下步骤归还内存,即当某个流结束时动态数组将该流当前所持有的块全部还给缓存管理器:
首先,归还头指针指向的基本块,即更新该基本块所在超级块中的索引数组,将该基本块的id顺序记录在索引数组中,将对应超级块中空闲基本块个数加1,然后判断头尾指针是否指向同一基本块,是则说明该动态数组销毁完毕,归还内存的过程结束;否则利用next数组将头指针指向该下一数据所在的位置,重复该过程。
一种高效的基于动态数组的网络流量处理系统,其包括缓存管理器模块和动态数组模块;每个线程均分配一个所述缓存管理器模块,用于申请以超级块为单位的内存块,每个超级块包含多个基本块;所述动态数组将网络流的扫描结果存储在所属线程的缓存管理器申请的超级块中。
进一步地,所述缓存管理器模块按照以下操作申请基本块:
记录已申请的超级块个数加1,新申请的该超级块初始化为若干空闲基本块,每个基本块含有若干个元素;设置索引数组来记录该超级块中空闲基本块的id,设置next数组来记录元素间的位置关系;
利用索引数组将一个空闲基本块的id返回给使用者,此次结果缓存在该id的基本块中,空闲基本块个数减1;若某超级块的空闲基本块个数大于0则说明该超级块中含有空闲的基本块,即该超级块中的基本块未分配完,由该超级块的索引数组将一个空闲基本块id返回给使用者,此次结果存储在该id的基本块中,空闲基本块个数减1。
进一步地,所述缓存管理器模块按照以下操作归还基本块:首先更新该基本块所在超级块中的索引数组,将该基本块的id顺序记录在索引数组中,然后将所在的超级块中空闲基本块个数加1。
进一步地,所述动态数组模块按照以下操作实现初始化数组、销毁数组、插入元素以及获取当前位置的下一元素:
初始化数组:向缓存管理器申请基本块,首次申请时分配一个超级块,初始化该超级块中空闲基本块个数,每个基本块可存储的元素的个数;使用索引数组来记录超级块中空闲基本块的id,初始化时顺序分配空闲基本块的id;申请成功则使头尾指针都指向新申请得到基本块的首个元素位置;,否则返回错误代码;
销毁数组:将头指针指向的基本块归还,判断头尾指针是否指向同一位置,是则说明该动态数组销毁完毕,否则将头指针指向该数组中下一数据所在的位置,重复该过程;
插入元素:在尾指针指向基本块中的位置写入新增加的元素,移动尾指针指向下一未写入的元素位置,寻找该位置的过程是:判断尾指针是否已指向该基本块的最后一个元素,是则向缓存管理器申请新的基本块,尾指针的下一元素位置即新基本块的首元素位置,尾指针指向该位置,并使用next数组记录元素的前后位置关系;否则尾指针指向该基本块内后移一个元素的位置,供下次写入元素时使用;
获取当前位置的下一元素:若当前位置是尾指针指向的位置,说明该数组已结束,当前位置后没有元素,返回空值,该过程结束;判断当前位置是否是某基本块的最后一个元素,是则通过next数组寻找下一元素的位置,否则当前位置直接加一即可得到下一元素位置,获取下一元素位置内的元素值并返回该值。
一种计算机,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明方法的指令。
本发明的有益效果如下:
本发明的高效的基于动态数组的网络流量处理方法及系统,能够减少内存空间的浪费,满足在线系统的高效处理性能与较低空间消耗的需求,具有广泛的实际价值和应用场景。
附图说明
图1是缓存管理器示意图。
图2是初始化阶段缓存管理器示意图。
图3是申请内存使用示意图。
图4是归还内存后索引数组示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
本发明的主要思想在于设计一个缓存管理器,基于缓存管理器设计一个轻量级的动态数组来实现系统计算结果的动态存储。如图1所示,每个缓存管理器最多可申请N个超级块,N可根据系统实际需求的变化而动态调整,本实施例中假设N为512,每个超级块包含2^20个基本块,每个基本块可存储8个元素。其中,超级块是较大的一片内存空间(或称内存块),然后将该内存空间划分成一定数量的固定大小的小内存空间,即为基本块。为保证数据结构的通用性,元素的类型定义为模板类型T,可根据实际需求具体实例化成某种具体的类型。在使用内存之前,先申请分配以超级块为单位的内存块留作备用,当有新的内存需求时,缓存管理器分配需求数量的空闲基本块,若该超级块分配完毕则继续申请新的超级块,当超级块数量达到N时,不支持继续申请新的超级块。图1中示意了网络流1和网络流2两个网络流。
缓存管理器和动态数组的具体设计思路如下:
缓存管理器模块:
1.初始化:设置当前超级块个数为0,最多可申请的超级块个数为N,每个超级块的空闲基本块个数为0。
2.申请基本块:首先遍历已申请的超级块,判断每个超级块中记录的空闲基本块的值,若都为0则说明申请的所有超级块中都没有空闲基本块,或还未申请一个超级块,此时需要申请新的超级块以备使用,但仍需判断已申请的超级块个数是否已达上限N,是则申请失败,否则继续申请新的超级块,步骤如下:
记录已申请的超级块个数加1,新申请的该超级块初始化为含有2^20个空闲基本块,每个基本块含有8个元素,所以分配给该新申请的超级块有2^23个元素。设置索引数组来记录该超级块中空闲基本块的id(如图2所示),首次顺序初始化该2^20个空闲基本块的id为0-(2^20-1),设置next数组来记录元素间的位置关系,至此,申请新的超级块过程结束。
利用索引数组将一个空闲基本块的id返回给使用者,此次结果缓存在该id的基本块中,空闲基本块个数减1;若某超级块的空闲基本块个数大于0则说明该超级块中含有空闲的基本块,即该超级块中的基本块未分配完,由该超级块的索引数组将一个空闲基本块id返回给使用者,此次结果存储在该id的基本块中,空闲基本块个数减1。
3.归还基本块:内存使用完毕归还基本块时首先更新该基本块所在超级块中的索引数组,将该基本块的id顺序记录在索引数组中,然后将所在的超级块中空闲基本块个数加1。
动态数组模块:
1.初始化数组:向缓存管理器申请基本块,首次申请时分配一个超级块,初始化该超级块中空闲基本块个数为2^20,每个基本块可存储8个元素。使用索引数组来记录超级块中空闲基本块的id,初始化时顺序分配该2^20个空闲基本块的id为0-(2^20-1)。申请成功则使头尾指针都指向新申请得到基本块的首个元素位置(该超级块中id值最大的基本块中首个元素位置),否则返回错误代码。
2.销毁数组:将头指针指向的基本块归还,判断头尾指针是否指向同一位置,是则说明该动态数组销毁完毕,否则将头指针指向该数组中下一数据所在的位置,重复该过程。
3.插入元素:在尾指针指向基本块中的位置写入新增加的元素,移动尾指针指向下一未写入的元素位置,寻找该位置的过程如下:判断尾指针是否已指向该基本块的最后一个元素,是则向缓存管理器申请新的基本块,尾指针的下一元素位置即新基本块的首元素位置,尾指针指向该位置,并使用next数组记录元素的前后位置关系;否则尾指针指向该基本块内后移一个元素的位置,供下次写入元素时使用。
4.获取当前位置的下一元素:若当前位置是尾指针指向的位置,说明该数组已结束,当前位置后没有元素,返回空值,该过程结束;判断当前位置是否是某基本块的最后一个元素,是则通过next数组寻找下一元素的位置,否则当前位置直接加一即可得到下一元素位置,获取下一元素位置内的元素值并返回该值。
本发明利用上述缓存管理器和动态数组,实现高并发流情况下的结果缓存,主要步骤如下:
初始化阶段:
1.创建所需线程,为每个线程分配一个缓存管理器,初始化每个缓存管理器:设置已申请超级块个数为0,最多可申请N个超级块,每个超级块的空闲基本块个数为0。
2.初始化线程中的流(网络流):设置其所属线程的id,设置动态数组来将该流的扫描结果存储在所属线程的缓存管理器的内存块中。
3.初始化动态数组:首次申请分配一个超级块,供需要存储扫描结果时使用,初始化该超级块中空闲基本块个数为2^20,每个基本块可存储8个元素,初始化索引数组和空闲基本块的id,设置next数组,并记录头尾指针的位置。
内存使用阶段:
1.申请内存:当某线程中的流扫描到需要存储的信息时,动态数组会在该线程对应的缓存管理器中申请对内存的使用,即调用动态数组中的增加元素函数,在该线程对应缓存管理器中的尾指针指向的基本块中写入新增加的元素,移动尾指针指向下一未写入的元素位置,其具体过程为:若写入元素前尾指针已指向该基本块的最后一个元素,则向缓存管理器申请新的基本块,尾指针的下一元素位置即新基本块的首元素位置,尾指针指向该位置,并使用next数组记录元素的前后位置关系;否则尾指针指向该基本块内后一个元素。
2.获取下一元素:当需定位某存储结果或获取某线程所有的中间结果时,需进行获取下一元素的过程,即首先判断当前是否为尾指针指向的位置,是则说明当前位置后没有元素,该过程结束;否则继续判断当前位置是否是某基本块最后一个元素所在位置,是则通过next数组寻找下一元素的位置,否则当前位置直接加一即可得到下一元素位置。
3.归还内存:当某个流结束时动态数组会将该流当前所持有的块全部还给缓存管理器,首先,归还头指针指向的基本块,即更新该基本块所在超级块中的索引数组,将该基本块的id顺序记录在索引数组中,将对应超级块中空闲基本块个数加1,然后判断头尾指针是否指向同一基本块,是则说明该动态数组销毁完毕,归还内存的过程结束;否则利用next数组将头指针指向该下一数据所在的位置,重复该过程。
下面以实例来阐述本发明的方法。为了便于说明,设置线程个数为1,该线程中的并发流个数为1,该流需存储的元素类型为T,依次存储a,b,c,d,e,f,g,h,i等2^20-5个元素,然后销毁数组释放内存。
初始化阶段:
1.创建线程,为该线程分配一个缓存管理器,初始化缓存管理器:设置已申请超级块个数为0,最多可申请512个超级块,每个超级块的空闲基本块个数为0。
2.初始化线程中的流,设置其所属线程的id为0,设置动态数组来将该流的扫描结果存储在所属线程的缓存管理器的内存块中。
3.初始化动态数组:首次申请分配一个超级块,初始化该超级块中空闲基本块个数为2^20,每个基本块可存储8个元素,设置next数组,记录头尾指针的位置,并初始化索引数组,即空闲块的id,如图2,第0块基本块的id为0,第1块基本块的id为1,以此类推……
内存使用阶段:
1.申请内存:流需存储信息时,动态数组会在该线程对应的缓存管理器中申请对内存的使用,依次存储a,b,c,d,e,f,g这7个元素时在尾指针指向基本块中写入新增加的元素,移动尾指针指向后一个元素位置,存储h元素时尾指针已指向该基本块的最后一个元素,则向缓存管理器申请新的基本块,尾指针的下一元素位置即新基本块的首元素位置,尾指针指向该位置,并使用next数组记录元素的前后位置关系。具体过程如图3所示,直至存完这2^20-5个元素(图中划斜线的部分表示已经存完元素的基本块)。此时第0号超级快已没有空闲的基本块。当遇到该超级块没有空闲基本块的情况时则申请新的超级块,使用next数组记录元素间的位置关系。
2.归还内存:该流结束的时候动态数组将该流当前所持有的块全部还给缓存管理器。从头指针指向的基本块开始,获取该基本块所在超级块的id,即为0,更新索引数组,记录第一块归还的基本块id为2^20-1,利用next数组获取到下一基本块,其所在超级块仍为0,更新索引数组,记录第二块归还的基本块id为2^20-2,重复相似的过程直至归还完id为0的基本块,判断此时首尾指针指向了同一基本块,所以内存归还完毕。更新后的索引数组如图4所示。
本实施例实验的硬件配置如表1所示:
表1硬件配置
操作系统 | CentOS Linux release 7.5.1804 |
内存 | 125G |
CPU | Intel(R)Xeon(R)CPU E5-2667v4@3.20GHz |
实验设计:模拟网络流过滤系统,启动16个线程,每个线程模拟管理5万个TCP网络流,测试数据是400MB网络数据包,测试规则是2万个精确串关键词,每个流平均命中100个结果,缓存每个结果的结构体大小为64Byte,对比测试了STL动态数组multiset、静态数组、内存动态分配以及本发明方法四种方式的性能情况,其中静态数组初始化阶段默认为每个流预分配1024个缓存空间,本发明方法初始化阶段默认每个线程管理器最大支持512个超级块。
实验结果如下表2示:
表2实验结果统计
缓存实现方式 | 内存消耗(GB) | 匹配速度(MB/s) |
STL动态数组multiset | 4.8 | 80.5 |
静态数组 | 48 | 115.4 |
内存动态分配 | 4.8 | 92 |
本发明方法 | 8 | 110.6 |
如表2所示,本发明提出的动态数组方法在时间和空间上取得了很好的折衷,本发明的动态数组方式的匹配性能和静态数组实现方式基本一样,内存消耗则仅仅是静态数组方式的1/6;本发明的动态数组方式是按超级块的方式分配内存,每个超级块含8388608个存储单元,而实验中实际需求的存储单元是5000000个,所以内存消耗和STL动态数组multiset以及内存动态分配两种方式相比稍有浪费,但基本是处于同等数量级且是一个硬件设备可接受的范围。因此本发明在确保性能的情况下,提供了一种内存高效灵活的动态数组实现方法,有广泛的实际价值和应用场景。
应用场景1:本发明可应用于典型网络流处理应用—入侵检测系统,入侵检测系统需要基于入侵规则对网络流内容进行实时匹配过滤,以检测网络流量中可能存在的入侵行为和入侵数据。入侵检测系统一般部署在高速带宽网络的出入口,需要实时处理大量的网络内容,其需要实时网络流内容匹配检测的结果,将本发明应用于检测结果的存储可有效节省内存空间,且能保证入侵检测系统的匹配性能。
应用场景2:本发明也可应用于典型网络流处理应用—网页内容过滤系统,网页内容过滤系统需要实时对网页内容进行检测,以发现恶意网页、虚假网页以及有害网页等。网页内容过滤系统一般基于相关的特征规则,对网页进行匹配,基于匹配结果来确定是否需要对相应网页进行过滤处理。网页内容过滤系统也同样面对的时候高带宽网络,需要实时处理大量的并发网络流,既要有高效的处理性能,内存空间消耗又不能太高。本发明提供了一种灵活存储的动态数组,又保证了存取的性能,很适合应用于网页内容过滤系统。
基于同一发明构思,本发明的另一个实施例提供一种计算机/服务器,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明方法中各步骤的指令。
基于同一发明构思,本发明的另一个实施例提供一种计算机可读存储介质(如ROM/RAM、磁盘、光盘),所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现本发明方法的各个步骤。
本发明未详细阐述的部分属于本领域技术人员的公知技术。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的原理和范围,本发明的保护范围应以权利要求书所述为准。
Claims (10)
1.一种高效的基于动态数组的网络流量处理方法,其特征在于,包括以下步骤:
为每个线程分配一个缓存管理器,所述缓存管理器申请以超级块为单位的内存块,每个超级块包含多个基本块;
设置动态数组,通过所述动态数组将网络流的扫描结果存储在所属线程的缓存管理器申请的超级块中。
2.根据权利要求1所述的方法,其特征在于,在初始化阶段进行以下操作:
创建所需线程,为每个线程分配一个缓存管理器,初始化每个缓存管理器:设置已申请超级块个数为0,最多可申请N个超级块,每个超级块的空闲基本块个数为0;
初始化线程中的流,设置其所属线程的id,并设置动态数组;
初始化动态数组,首次申请分配一个超级块,供需要存储扫描结果时使用,初始化该超级块中空闲基本块的个数,每个基本块可存储的元素的个数,初始化索引数组和空闲基本块的id,设置next数组,并记录头尾指针的位置;所述索引数组用于记录超级块中空闲基本块的id,所述next数组用于记录元素间的位置关系。
3.根据权利要求1所述的方法,其特征在于,在内存使用阶段,采用以下步骤申请内存:
当某线程中的流扫描到需要存储的信息时,动态数组在该线程对应的缓存管理器中申请对内存的使用,在该线程对应缓存管理器中的尾指针指向的基本块中写入新增加的元素,移动尾指针指向下一未写入的元素位置;
若写入元素前尾指针已指向该基本块的最后一个元素,则向缓存管理器申请新的基本块,尾指针的下一元素位置即新基本块的首元素位置,尾指针指向该位置,并使用next数组记录元素的前后位置关系;否则尾指针指向该基本块内后一个元素。
4.根据权利要求1所述的方法,其特征在于,在内存使用阶段,采用以下步骤获取下一元素:
首先判断当前是否为尾指针指向的位置,是则说明当前位置后没有元素,该获取下一元素的过程结束;否则继续判断当前位置是否是某基本块最后一个元素所在位置,是则通过next数组寻找下一元素的位置,否则当前位置直接加一即可得到下一元素位置。
5.根据权利要求1所述的方法,其特征在于,在内存使用阶段,采用以下步骤归还内存,即当某个流结束时动态数组将该流当前所持有的块全部还给缓存管理器:
首先,归还头指针指向的基本块,即更新该基本块所在超级块中的索引数组,将该基本块的id顺序记录在索引数组中,将对应超级块中空闲基本块个数加1,然后判断头尾指针是否指向同一基本块,是则说明该动态数组销毁完毕,归还内存的过程结束;否则利用next数组将头指针指向该下一数据所在的位置,重复该过程。
6.一种高效的基于动态数组的网络流量处理系统,其特征在于,包括缓存管理器模块和动态数组模块;每个线程均分配一个所述缓存管理器模块,用于申请以超级块为单位的内存块,每个超级块包含多个基本块;所述动态数组将网络流的扫描结果存储在所属线程的缓存管理器申请的超级块中。
7.根据权利要求6所述的系统,其特征在于,所述缓存管理器模块按照以下操作申请基本块:
记录已申请的超级块个数加1,新申请的该超级块初始化为若干空闲基本块,每个基本块含有若干个元素;设置索引数组来记录该超级块中空闲基本块的id,设置next数组来记录元素间的位置关系;
利用索引数组将一个空闲基本块的id返回给使用者,此次结果缓存在该id的基本块中,空闲基本块个数减1;若某超级块的空闲基本块个数大于0则说明该超级块中含有空闲的基本块,即该超级块中的基本块未分配完,由该超级块的索引数组将一个空闲基本块id返回给使用者,此次结果存储在该id的基本块中,空闲基本块个数减1。
8.根据权利要求6所述的系统,其特征在于,所述缓存管理器模块按照以下操作归还基本块:首先更新该基本块所在超级块中的索引数组,将该基本块的id顺序记录在索引数组中,然后将所在的超级块中空闲基本块个数加1。
9.根据权利要求6所述的系统,其特征在于,所述动态数组模块按照以下操作实现初始化数组、销毁数组、插入元素以及获取当前位置的下一元素:
初始化数组:向缓存管理器申请基本块,首次申请时分配一个超级块,初始化该超级块中空闲基本块个数,每个基本块可存储的元素的个数;使用索引数组来记录超级块中空闲基本块的id,初始化时顺序分配空闲基本块的id;申请成功则使头尾指针都指向新申请得到基本块的首个元素位置;,否则返回错误代码;
销毁数组:将头指针指向的基本块归还,判断头尾指针是否指向同一位置,是则说明该动态数组销毁完毕,否则将头指针指向该数组中下一数据所在的位置,重复该过程;
插入元素:在尾指针指向基本块中的位置写入新增加的元素,移动尾指针指向下一未写入的元素位置,寻找该位置的过程是:判断尾指针是否已指向该基本块的最后一个元素,是则向缓存管理器申请新的基本块,尾指针的下一元素位置即新基本块的首元素位置,尾指针指向该位置,并使用next数组记录元素的前后位置关系;否则尾指针指向该基本块内后移一个元素的位置,供下次写入元素时使用;
获取当前位置的下一元素:若当前位置是尾指针指向的位置,说明该数组已结束,当前位置后没有元素,返回空值,该过程结束;判断当前位置是否是某基本块的最后一个元素,是则通过next数组寻找下一元素的位置,否则当前位置直接加一即可得到下一元素位置,获取下一元素位置内的元素值并返回该值。
10.一种计算机,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1~5中任一权利要求所述方法的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911086763.1A CN110943936A (zh) | 2019-11-08 | 2019-11-08 | 一种高效的基于动态数组的网络流量处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911086763.1A CN110943936A (zh) | 2019-11-08 | 2019-11-08 | 一种高效的基于动态数组的网络流量处理方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110943936A true CN110943936A (zh) | 2020-03-31 |
Family
ID=69907285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911086763.1A Pending CN110943936A (zh) | 2019-11-08 | 2019-11-08 | 一种高效的基于动态数组的网络流量处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110943936A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112965822A (zh) * | 2021-03-18 | 2021-06-15 | 上海交通大学 | 利用数组池优化javaScript/typeScript程序内存性能的方法 |
CN115373645A (zh) * | 2022-10-24 | 2022-11-22 | 济南新语软件科技有限公司 | 一种基于可动态定义的复杂数据包操作方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1996258A (zh) * | 2006-12-28 | 2007-07-11 | 武汉虹旭信息技术有限责任公司 | 一种动态内存池的实现方法 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
CN103761051A (zh) * | 2013-12-17 | 2014-04-30 | 北京同有飞骥科技股份有限公司 | 一种基于持续数据多输入输出流并发写入性能优化方法 |
CN105718319A (zh) * | 2016-02-23 | 2016-06-29 | 中国科学院微电子研究所 | 一种内存池版图解析方法和内存池装置 |
CN109840214A (zh) * | 2017-11-28 | 2019-06-04 | 爱思开海力士有限公司 | 数据存储装置及其操作方法 |
-
2019
- 2019-11-08 CN CN201911086763.1A patent/CN110943936A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1996258A (zh) * | 2006-12-28 | 2007-07-11 | 武汉虹旭信息技术有限责任公司 | 一种动态内存池的实现方法 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
CN103761051A (zh) * | 2013-12-17 | 2014-04-30 | 北京同有飞骥科技股份有限公司 | 一种基于持续数据多输入输出流并发写入性能优化方法 |
CN105718319A (zh) * | 2016-02-23 | 2016-06-29 | 中国科学院微电子研究所 | 一种内存池版图解析方法和内存池装置 |
CN109840214A (zh) * | 2017-11-28 | 2019-06-04 | 爱思开海力士有限公司 | 数据存储装置及其操作方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112965822A (zh) * | 2021-03-18 | 2021-06-15 | 上海交通大学 | 利用数组池优化javaScript/typeScript程序内存性能的方法 |
CN112965822B (zh) * | 2021-03-18 | 2022-08-12 | 上海交通大学 | 利用数组池优化javaScript/typeScript程序内存性能的方法 |
CN115373645A (zh) * | 2022-10-24 | 2022-11-22 | 济南新语软件科技有限公司 | 一种基于可动态定义的复杂数据包操作方法及系统 |
CN115373645B (zh) * | 2022-10-24 | 2023-02-03 | 济南新语软件科技有限公司 | 一种基于可动态定义的复杂数据包操作方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10387315B2 (en) | Region migration cache | |
Busato et al. | Hornet: An efficient data structure for dynamic sparse graphs and matrices on gpus | |
US8312227B2 (en) | Method and apparatus for MPI program optimization | |
CN105117351B (zh) | 向缓存写入数据的方法及装置 | |
CN107273042A (zh) | 重复删除dram系统算法架构 | |
CN101470667A (zh) | Linux系统平台上指定地址范围分配物理内存的方法 | |
CN107066498A (zh) | 键值kv存储方法和装置 | |
US9069477B1 (en) | Reuse of dynamically allocated memory | |
US7999808B1 (en) | Parallel processing system, method, and computer program product for executing node traversal or primitive intersection | |
CN110943936A (zh) | 一种高效的基于动态数组的网络流量处理方法及系统 | |
CN101673246A (zh) | 一种高效的先进先出数据池读写方法 | |
CN108520296B (zh) | 一种基于深度学习芯片动态cache分配的方法和装置 | |
CN112579595A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN112506823A (zh) | 一种fpga数据读写方法、装置、设备及可读存储介质 | |
CN114968588A (zh) | 一种面向多并发深度学习训练任务的数据缓存方法和装置 | |
CN111984425A (zh) | 用于操作系统的内存管理方法、装置及设备 | |
US11409798B2 (en) | Graph processing system including different kinds of memory devices, and operation method thereof | |
US11385900B2 (en) | Accessing queue data | |
CN114556309A (zh) | 内存空间的分配方法、装置及存储介质 | |
CN116501249A (zh) | 一种减少gpu内存重复数据读写的方法及相关设备 | |
CN113590332A (zh) | 内存管理方法、装置及内存分配器 | |
US8990537B2 (en) | System and method for robust and efficient free chain management | |
CN111126619A (zh) | 一种机器学习方法与装置 | |
Bae et al. | Empirical guide to use of persistent memory for large-scale in-memory graph analysis | |
US8059123B1 (en) | Parallel processing system, method, and computer program product for postponing the execution of primitive intersection |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20200331 |