本发明专利技术提供一种用于流式数据并行处理的内存管理方法,用于流式数据并行处理的流水线构架包括多组建立了一一对应的对等关系的生产者和消费者,具有对等关系的每个生产者和消费者都具有私有的局部缓存池,所述用于流式数据并行处理的内存管理方法包括:1)在进行流式数据并行处理过程中,每个生产者向其私有的局部缓存池申请内存,并且在该生产者的局部缓存池为空时,触发交换操作以获得内存块,所述交换操作是将该生产者的局部缓存池和与其对等的消费者的局部缓存池交换;2)在进行流式数据并行处理过程中,每个消费者向该消费者的局部缓存池释放内存。本发明专利技术能够有效地降低内存操作开销,提高内存的利用率。
【技术实现步骤摘要】
本专利技术涉及流式数据并行处理
,具体地说,本专利技术涉及。
技术介绍
流式数据处理包括:网络数据包处理(下文中简称为数据包处理)、视频流处理、文本处理、消息处理等。随着网络基础设施和互联网产业的蓬勃发展,网络规模和服务复杂度都在不断增长。传统的流式数据处理技术已经无法满足高速网络带来的性能需求,基于多核处理器的流式数据并行处理技术已经成为了新的趋势。以数据包处理为例,图1示出了一个通用的数据包多核并行处理构架。参考图1,在这个数据包多核并行处理构架中,每个处理器核上都绑定了一个处理线程,所有处理线程共同构成了一个并行流水线布局。输入的数据包从流水线第一级开始,经过层层处理和中间调度,最终抵达流水线最后一级。在实际应用中,系统的流水线级数和每级流水线的线程个数都是可调整的。另一方面,在并行处理
,如何减少多个处理线程对共享资源的同时竞争,始终是一个核心问题,以数据包并行处理为代表的流式数据并行处理也不例外。在数据包并行处理中,最常见的共享资源就是内存。每个待处理的数据包都会被分配一块内存以存储相关数据,处理完毕后这块内存将被释放。在多核并行处理环境下,多个线程需要同时进行内存申请和释放,很容易造成对内存资源的持续竞争。并且,处理线程数目越多意味着竞争越激烈,造成的竞争开销也越大。对于高吞吐率的数据包处理系统而言,其每秒都需要处理上百万的数据包,从而带来上百万次的内存操作。因此,高效的内存管理方法对于提高数据包多核并行处理系统的性能来说至关重要。现有技术中,通用内存管理方法主要有全局存储共享类型内存管理方法和线程局部缓存类型内存管理方法两大类,下面分别介绍。1、全局存储共享类型内存管理方法早期的内存管理器都是全局存储共享类型的,例如早期版本Glibc库中由DougLea实现的内存管理器。在全局存储共享类型内存管理方法下,内存管理器首先从操作系统管理的堆内存中预申请一块全局存储区域,并使用某种数据结构进行组织,例如分隔空闲列表。当同时有多个线程执行内存申请和释放操作时,为了避免发生资源冲突(例如返回了同一个内存块给不同线程)或破坏内部数据结构(例如内存块链表节点指针错乱),通常需要使用互斥锁机制来对每个操作进行同步,从而带来内存资源竞争开销。而数据包多核并行处理中,线程数目通常较多,容易造成激烈的资源竞争,带来非常大的内存竞争开销。因此,全局共享类型的内存管理器显然不适合用于以数据包多核并行处理为代表的流式数据并行处理应用场景。2、线程局部缓存类型内存管理方法为了减少全局存储共享类型内存管理方法在多线程并发环境下的竞争开销,以线程局部缓存为基础的针对多线程优化的内存分配器逐渐成为了主流,如Hoard内存管理器和开源的TCMalloc内存管理器,以及较新版本的Glibc库中的内存管理模块ptmalloc等。这些内存管理方案的基本原理都是加入线程局部缓存,即内存管理器除了维护一块全局堆内存以外,还会为应用程序的每个线程单独维护一块相关联的线程局部缓存。当应用程序申请内存时,内存管理器会首先检查申请内存的线程相关联的局部缓存,若不为空则从局部缓存中直接获取,否则才从全局堆内存中获取。由于是从自己的局部缓存中取,因此通常情况下都不需要进行加锁。在这种设计下,只要大部分的内存申请都是通过局部缓存,则内存分配性能就可以非常高。当应用程序释放内存时,同样地,内存管理器需要尝试将该内存块释放到线程局部缓存,以通过局部化写入来避免加锁,同时也能够通过填充局部缓存来为后续的内存申请做好准备。与内存申请不同的是,内存释放可以有两种不同的方案,第一种是释放回该内存块原始申请时所属的线程缓存,第二种是直接释放到本线程自己的局部缓存。线程局部缓存类型的内存管理在一般的多线程环境下能够有效地提升性能,但在实践中发现,对于以数据包多核并行处理为代表的流式数据并行处理应用场景,传统的线程局部缓存方案仍然有很大提升空间。
技术实现思路
因此,本专利技术的任务是提供一种特别适合于流式数据并行处理的内存管理解决方案。根据本专利技术的一个方面,提供了,包括下列步骤:I)根据流式数据并行处理流水线的构架为生产者和消费者建立一一对应的对等关系,为建立了对等关系的每个生产者建立私有的局部缓存池,为建立了对等关系的每个消费者建立私有的局部缓存池;2)在进行流式数据并行处理过程中,每个生产者向其私有的局部缓存池申请内存,并且在该生产者的局部缓存池为空时,触发交换操作以获得内存块,所述交换操作是将该生产者的局部缓存池和与其对等的消费者的局部缓存池交换;3)在进行流式数据并行处理过程中,每个消费者向该消费者的局部缓存池释放内存。需要说明的是,上述步骤2)和步骤3)的执行顺序可以交换,二者不分先后。其中,所述步骤2)中,所述交换操作通过交换对等的生产者和消费者的局部缓存池的指针或者对象引用实现。其中,所述步骤I)还包括:建立全局内存池。其中,所述步骤2)还包括:触发交换操作后,若此时对等消费者缓存池的内存块数目少于第一阈值,停止所述交换操作,生产者直接从所述全局内存池获取内存块,若此时对等消费者缓存池的内存块数目达到所述第一阈值,则继续执行所述交换操作。其中,所述步骤3)还包括:消费者向该消费者的线程局部缓存池释放内存时,若此时该消费者的局部缓存池的内存块数目超过第二阈值,则该消费者停止向其局部缓存池释放内存,改为向所述全局内存池释放内存,若此时该消费者的局部缓存池的内存块数目未超过所述第二阈值,则该消费者继续向其局部缓存池释放内存,所述第二阈值大于所述第一阈值。其中,所述步骤2)包括下列子步骤:21)生产者开始对流式数据进行流水线第一级数据处理时,触发为本批次流式数据的内存申请;22)该生产者判断本地局部缓存池是否为空,如果是,则继续执行步骤23),如果否,则执行步骤25);23)判断对等端的消费者的局部缓存池的容量是否大于所述第一阈值,如果是,则执行步骤24)如果否,则执行步骤26);24)将该生产者的线程局部缓存池与其对等消费者的线程局部缓存池交换;25)该生产者从局部缓存池中获取所需的内存块;26)该生产者从全局内存池获取内存块。其中,所述步骤3)包括下列子步骤:31)消费者在完成一批次流式数据的最后一级数据处理时,触发本批次流式数据的内存释放。32)该消费者判断本地的局部缓存池存量是否小于所述第二阈值,如果是,执行步骤33),否则,执行步骤34);33)将内存释放到本地的局部缓存池;34)将内存直接释放到全局内存池。其中,所述步骤2)还包括:每个生产者动态调整自身的所述第一阈值。其中,所述步骤2)中,动态调整所述第一阈值的方法如下:每个生产者记录交换操作触发频度Fl和直接访问全局内存池的频度F2,当(C1*F1) > (C2*F2)时,提高该生产者的所述第一阈值,当(C1*F1) < (C2*F2)时,降低该生产者的所述第一阈值,其中Cl表示单次交换操作的开销,C2表示单次访问全局内存池的开销。其中,所述步骤3)还包括:消费者动态调整所述第二阈值。其中,动态调整所述第二阈值的方法如下:当全局内存池的内存块超出预设的全局内存阈值时,提高所述第二阈值。与现有技术相比,本专利技术具有下列技术效果:1、本专利技术能够有效地降低流式数据并本文档来自技高网...
【技术保护点】
一种用于流式数据并行处理的内存管理方法,所述流式数据并行处理基于流水线构架实现,所述流水线构架包括多组建立了一一对应的对等关系的生产者和消费者,具有对等关系的每个生产者都具有私有的局部缓存池,具有对等关系的每个消费者也都具有私有的局部缓存池,所述用于流式数据并行处理的内存管理方法包括下列步骤:1)在进行流式数据并行处理过程中,每个生产者向其私有的局部缓存池申请内存,并且在该生产者的局部缓存池为空时,触发交换操作以获得内存块,所述交换操作是将该生产者的局部缓存池和与其对等的消费者的局部缓存池交换;2)在进行流式数据并行处理过程中,每个消费者向该消费者的局部缓存池释放内存。
【技术特征摘要】
【专利技术属性】
技术研发人员:彭群,张广兴,谢高岗,
申请(专利权)人:中国科学院计算技术研究所,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。