CN105975341A - 面向多核处理器的内存管理系统 - Google Patents
面向多核处理器的内存管理系统 Download PDFInfo
- Publication number
- CN105975341A CN105975341A CN201610223738.3A CN201610223738A CN105975341A CN 105975341 A CN105975341 A CN 105975341A CN 201610223738 A CN201610223738 A CN 201610223738A CN 105975341 A CN105975341 A CN 105975341A
- Authority
- CN
- China
- Prior art keywords
- page
- free
- memory
- resource
- current process
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请提供了一种面向多核处理器的内存管理系统,其特征在于所述系统将进程访存行为划分为静态与动态属性。其静态属性用于描述进程所表现的通常性的内存需求行为(单页以及突发式的请求);动态属性用于描述进程在其生命周期活动过程中对内存需求表现出的特性。基于对静态及动态属性的分析,引入了进程内与进程间内存操作模块。该系统一方面可以有效提升系统分配效率,同时可以有效降低多核间内存资源锁的竞争。
Description
技术领域
本申请涉及多核处理器内存管理技术领域,具体而言,涉及一种面向多核处理器的内存管理系统及其内存管理方法。
背景技术
多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。Samsung、Freescale、TI等半导体厂商针对智能手机平台相继推出了双核、四核处理器。多核体系相对单核而言,对内存带宽的需求更加苛刻。共享内存的CMP多核系统,在智能手机领域占据主要地位,而多核处理器进一步加剧了内存资源的竞争。Android采用一种集中式的伙伴分配算法,按照FCFS的原则处理每一次内存资源的请求与释放操作。
伙伴分配算法把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续的页框。对1024个页框的最大请求对应着4MB大小的连续RAM块。每个块的第一个页框的物理地址是该块大小的整数倍。例如,大小为16个页框的块,其起始地址是16×212(212=4096,这是一个常规页的大小)的倍数。伙伴分配算法的原理如下:当进行分配内存时,首先寻找大小合适的内存块(大于等于所需大小并且最接近2的幂);如果找到了,分配给应用程序;否则,分出合适的内存块。然后对半分离出高于所需大小的空闲内存块,如果分到最低限度,分配这个大小。继续寻找合适大小的块,如此重复,直到找到一个合适的块。
而释放内存时,先释放该内存块,再寻找其相邻的块,看其是否释放了。如果相邻块也释放了,合并这两个块,重复上述步骤直到遇上未释放的相邻块,或者达到最高上限(即所有内存都释放了)。
内存管理系统作为内存资源的管理者与调度者,对于系统性能的影响至关重要。将通过一个简单的实例(算法1)来分析进程的行为。
在算法1的例子中,该程序首先动态申请一块内存资源;然后对内存资源进行读写;最后,使用完毕后释放。从操作系统的角度看到的进程对于内存资源的操作又表现为什么形式呢?
正如图 1中所描述的内存管理框架那样,从用户态的角度而言,一个程序一方面可以直接使用系统调用来管理内存区域,但是更多的时候都是使用“C库”提供的malloc()和free()函数动态分配与释放内存。当应用程序调用malloc后,此行为一般不会立即反应到OS中,这是因为“C库”为了保持较高的分配效率而减少与操作系统的交互,通常会预先分配一块大于用户请求的内存(默认256K),并通过某种算法管理这块内存来满足用户的内存分配要求。同样,对于应用程序释放掉的内存,“C库”也并不是立即归还到操作系统,而是在达到某种条件后才释放(默认为大小超过2M时)。
从操作系统的层次,如采用Android作为本文的研究对象,其在初始设计内存管理系统时,基于内存外部碎片的考虑(过多的外部碎片会导致内存申请失败,从而换出某些进程影响系统性能),采用了一种集中式的内存管理系统(伙伴算法)。但是正如图 1所示,当多核多进程对内存资源进行操作时,每CPU核心需要首先通过自旋锁来获取内存资源的使用权,随着申请/释放越来越多,进程等待的时间可能会越来越长。本发明因此而来。
发明内容
本申请旨在提供一种面向多核处理器进程进行内存页分配的方法,以解决现有技术中的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种面向多核处理器进程进行内存页分配的方法,其特征在于,所述方法包括:
(1)依据进程的静态属性,借助于进程信息获取当前进程的状态,并判断当前进程的状态是处于创建状态还是活动状态,然后依据进程所表现出的动态属性差异执行步骤(2)操作;
(2)如果当前进程的状态是处于创建状态,则向其他进程的空闲内存页中申请空闲内存页;否则,进行步骤(3);
(3)判断当前进程的空闲内存页链表是否是空;如果当前进程的空闲内存页链表非空,则当前进程直接从自身的空闲内存页中申请内存页;否则向其他进程的空闲内存页中申请空闲内存页。
本发明将进程访存行为划分为静态与动态属性。其静态属性用于描述进程所表现的通常性的内存需求行为(单页以及突发式的请求);动态属性用于描述进程在其生命周期活动过程中对内存需求表现出的特性;所述动态属性包括创建状态、活动状态、释放状态;所述创建状态为进程在被创建时的状态;所述活动状态为根据进程的实际行为持续的进行申请、访问、释放内存的状态;所述释放状态为进程运行完毕释放资源时的状态。
本发明基于对进程的静态属性及动态属性的分析,引入了进程内与进程间内存操作模块。
进一步的技术方案是,所述方法中,
进程的状态获取是通过获取进程的PID及其关联的进程信息得到的。
进一步的技术方案是,所述方法中,其他进程为同一进程组的其他进程;优选的,其他进程为同一处理器核心同一进程组的其他进程;最优选的,其他进程为同一处理器核心同一应用程序同一进程组的其他进程。
进一步的技术方案是,所述方法还包括为当前进程预先设置有page_list与free_list链表,
其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所拥有的空闲资源。
进一步的技术方案是,所述方法中当前进程直接从自身的空闲内存页中申请内存页是通过get_page函数来获得,所述get_page函数用于对进程自身的free_list链表中内存页资源进行申请空闲内存页操作。
进一步的技术方案是,所述方法中向其他进程的空闲内存页中申请空闲内存页是通过get_page_from_thread函数实现的,所述get_page_from_thread函数用于当前进程向同一进程组的其他进程申请空闲的内存资源的操作。
进一步的技术方案是,所述方法中还包括当前进程通过free_page函数释放进程本身不使用的内存页资源,所述free_page函数用于释放进程本身内存页资源,并将相应内存页资源加入到空闲内存页链表中的操作。
进一步的技术方案是,所述方法中还包括当前进程还通过free_page_to_thread函数释放空闲内存资源给其他进程,所述 free_page_to_thread函数用于当前进程释放空闲内存页资源给同一进程组的其他进程的操作。
本发明提供的另一目的在于提供一种与权利要求1相应的面向多核处理器进程释放内存页资源的方法,其特征在于所述方法包括:
(1)判断当前进程的状态是否处于活动状态,如果当前进程的状态处于活动状态,则将释放相应的内存页资源到进程结构体中,并在空闲内存页链表中记录;否则进行步骤(2);
(2)判断当前进程的状态是否处于释放状态,如果当前进程的状态处于释放状态,则将释放相应的内存页资源,并将相应的内存页资源传递给其他进程;否则,不进行任何操作。
本发明提供的又一目的在于提供一种面向多核处理器的内存管理系统,其特征在于所述系统包括:
进程内内存操作模块,所述模块为每一个进程设置有page_list与free_list链表,其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所拥有的空闲资源用于进程,所述模块用于进程自身的内存页资源分配和释放操作;以及
进程间内存操作模块,用于进程向同一进程组申请或者释放内存页资源的操作;
其中,进程内内存操作模块包括get_page与free_page模块;进程间内存操作模块包括get_page_from_thread与free_page_to_thread模块,
get_page模块,用于当当前进程的状态处于活动状态且其空闲内存页链表非空时,当前进程对进程自身的free_list链表中内存页资源进行申请空闲内存页操作;
free_page模块,用于当当前进程的内存页资源不使用时释放进程本身内存页资源,并将相应内存页资源加入到空闲内存页链表中的操作;
get_page_from_thread模块,用于当前进程向同一进程组的其他进程申请空闲的内存资源的操作;
free_page_to_thread模块用于当前进程释放空闲内存页资源给同一进程组的其他进程的操作;
其中系统预先为进程设置有page_list与free_list链表,其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所 拥有的空闲资源。
本发明抽象出进程的静态属性与动态属性,并根据进程在不同阶段所表现出的特性,采取更有针对性的分配策略。将进程访存行为划分为静态与动态属性。其静态属性用于描述进程所表现的通常性的内存需求行为(单页以及突发式的请求);动态属性用于描述进程在其生命周期活动过程中对内存需求表现出的特性。通过实验发现对于Android下的大部分应用,单页请求占据了所有资源请求的97%以上,这说明“外部碎片”已经不再是最关键的瓶颈,因此而引入一个集中式的复杂管理算法显得得不偿失;与此同时,当前系统对于资源请求的不加以区分的响应可能会严重影响Android的分配效率,加剧多核间对于内存资源的锁竞争。从根本上来讲,当前的内存管理系统将内存作为整体,而忽略了每一个线程本身的行为,因而不能更具针对性的优化。因此,本发明提出了一种全新的内存管理系统,其将进程作为内存管理的基本单位,同时,根据进程生命周期中不同阶段所表现出来的行为,分别设计出更具针对性的优化策略。该系统具有很好的多核扩展性以及多态行(可以根据不同的需求而设计不同的优化策略)。实验结果表明,本发明的系统一方面可以有效提升系统分配效率,同时可以有效降低多核间内存资源锁的竞争。
附图说明
构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图 1示出了Android内存管理系统的架构原理示意图。
图 2示出了Android内存管理系统在多核处理器下的工作原理图。
图 3示出了九种应用程序在多核智能手机平台的单页请求率。
图 4示出了九种应用程序在多核智能手机平台的突发式申请内存页与释放内存页的柱状图。
图 5示出了多核平台相对于单核平台而言,最坏情况等待时间。
图 6示出了多核平台进程的动态属性-三阶段原理图。
图 7示出了多核平台进程的各个应用程序进程拥有的内存资源数。
图 8示出了本发明面向多核处理器的内存管理系统模型原理图 (MEMTB模型)。
图 9示出了面向多核处理器的内存管理系统在不同核心数时的分配效率提升比例。
图 10示出了原内存管理系统模型访存时延比例。
图 11示出了本发明的内存管理系统(MEMTB)访存时延比例。
具体实施方式
参见附图 2 ~ 11所示,应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施方式例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了便于描述,在这里可以使用空间相对术语,如“在……之上”、“在……上方”、“在……上表面”、“上面的”等,用来描述如在图中所示的一个部件或者模块或特征与其他部件或者模块或特征的空间位置关系。应当理解的是,空间相对术语旨在包含除了部件或者模块在图中所描述的方位之外的在使用或操作中的不同方位。例如,如果附图中的部件或者模块被倒置,则描述为“在其他部件或者模块或构造上方”或“在其他部件或者模块或构造之上”的部件或者模块之后将被定位为“在其他部件或者模块或构造下方”或“在其他部件或者模块或构造之下”。因而,示例性术语“在……上方”可以包括“在……上方”和“在……下方”两种方位。该部件或者模块也可以其他不同方式定位(旋转90度或处于其他方位),并且对这里所使用的空间相对描述作出相应 解释。
正如背景技术所介绍的,现有技术中的内存管理方式针对多核处理器时严重影响Android的分配效率,加剧多核间对于内存资源的锁竞争等缺陷,为了解决如上的技术问题,本申请提出了一种面向多核处理器的内存管理系统,可以解决现有技术中这些问题。
本申请一种典型的实施方式中,如图 1所示,提出了一种面向多核处理器的内存管理系统,其特征在于所述系统包括:
get_page模块,用于当当前进程的状态处于活动状态且其空闲内存页链表非空时,当前进程对进程自身的free_list链表中内存页资源进行申请空闲内存页操作;
free_page模块,用于当当前进程的内存页资源不使用时释放进程本身内存页资源,并将相应内存页资源加入到空闲内存页链表中的操作;
get_page_from_thread模块,用于当前进程向同一进程组的其他进程申请空闲的内存资源的操作;
free_page_to_thread模块用于当前进程释放空闲内存页资源给同一进程组的其他进程的操作;其中系统预先为进程设置有page_list与free_list链表,其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所拥有的空闲资源。
其中进行面向多核处理器进程内存页分配时,包括:
(1)依据进程的静态属性,借助于进程信息获取当前进程的状态,并判断当前进程的状态是处于创建状态还是活动状态,然后依据进程所表现出的动态属性差异执行步骤(2)操作;
(2)如果当前进程的状态是处于创建状态,则向其他进程的空闲内存页中申请空闲内存页;否则,进行步骤(3);
(3)判断当前进程的空闲内存页链表是否是空;如果当前进程的空闲内存页链表非空,则当前进程直接从自身的空闲内存页中申请内存页;否则向其他进程的空闲内存页中申请空闲内存页。
面向多核处理器进程释放内存页资源时,包括:
(1)判断当前进程的状态是否处于活动状态,如果当前进程的状态处于活动状态,则将释放相应的内存页资源到进程结构体中,并在空闲内存页链表中记录;否则进行步骤(2);
(2)判断当前进程的状态是否处于释放状态,如果当前进程的状态处于释放状态,则将释放相应的内存页资源,并将相应的内存页资源传递给其他进程;否则,不进行任何操作。
本发明人一直潜心研究,认为多核下内存资源管理问题的关键在于:如何有效区分不同进程的访存行为,从而对不同的进程行为采取不同的优化策略。
针对多核智能手机平台,通过在android上的试验发现:首先,如图 3所示,采用表 1所示的当前流行的应用作为测试集(Y轴为单页请求占据了应用生命周期中内存请求的百分比),实验表明单页请求占据了应用生命周期中内存请求的97%以上,这也就是说,外部碎片针对android平台而言,不再成为最关键的问题,因此为了降低外部碎片而设计一个复杂的“集中式伙伴系统”显得得不偿失。
表 1当前流行的应用测试集
其次,应用程序在运行过程中,为了减少与操作系统的交互从而提升系统性能,通常会先向内存管理系统请求一大块的内存资源(大于本次请求的内存资源)供程序使用,只有当达到某种条件时才归还给操作系统。正如图 4所示(黑色曲线代表页申请,灰色代表释放操作,Y轴为页申请或者释放的内存页数),这种现象在操作系统层次上往往表现为“突发模式”,但是对于多核体系结构而言,这种模式会严重加剧多核间锁竞争,延长获取内存资 源的时间。
最后,当前的内存管理系统并不会区分一个进程生命周期中不同运行阶段的行为,也更不会考虑进程间的相互影响,而是采用一种先来先服务的策略,但是对于内存资源的操作往往在不同阶段表现出来的行为差异很大,因此当前的管理方式不能进行针对性的优化。
综上所述,本文针对多核智能手机平台,基于android操作系统对不同应用特性进行分析,将进程的行为划分为静态属性与动态属性两部分,其中静态属性表现为大量的单页与突发式的操作,据此提出以进程作为内存管理的基本单位;同时针对进程生命周期中的动态属性所表现出来的三个不同阶段,本发明采取不同的针对性优化策略。
内存管理系统作为内存资源的管理者与调度者,能够提供任务的详细信息,可以更加有针对性的指导优化。从操作系统的角度而言,任务的访存“活动”可以归结为三类:申请、访问、释放。假定任务访存行为是指在任务完成一定功能时所表现出来的对于内存资源的相关操作活动的序列。进程(thread)拥有静态属性和动态属性两个基本特性。静态属性往往表现为进程的本质特性,在系统初始设计时需要特殊考虑的,而动态属性则表现为随时间变化而不同的特性,往往需要内存管理系统在运行中考虑。
(1)静态属性
针对Android平台的应用,其静态属性表现为两个方面:大量的单页请求与突发式的内存操作。
首先,实验证明单页请求的比例非常大,而当前的内存管理模型基于外部碎片的考虑,在分配和释放内存资源时需要引入页的分割与合并操作,从而降低了分配效率。
同时,正如在背景章节中提到的,一个进程对于内存资源的申请与释放的活动已经被“C库”封装,而“C库”在设计时基于性能的考虑导致其在操作系统上的表现为“突发”的。但是,这种特性在当前的内存管理模型中可能会带来以下问题,“集中式”的管理模型使得所有内存请求需要通过加锁获取内存资源,在多核体系结构下,这可能会存在叠加效应,导致单位时间内申请/释放的密度大大增加,从而使得进程获取资源的等待时间严重增加。如图 5所示(Y轴为多核平台相对于单核平台在最坏情况下,进程获得单页内存的等待时间比例),多核平台相对于单核平台而言,在最坏情况下, 进程获得单页内存的等待时间要高出好几倍。
(2)动态属性
同样的“活动”发生在进程生命周期的不同时刻,所带来的影响可能存在非常大的差别,这也就是引入动态属性的原因。考虑到一个进程在不同阶段中发生的内存资源的活动,对其自身而言所带来的影响以及对其他进程所带来的影响,并结合大量实验(如 图 6所示,Y轴代表某进程所拥有的内存资源),将进程生命周期中所拥有的内存资源抽象为图 5所示。
一个进程拥有的内存资源往往会经历三个阶段,进程初创阶段、进程活动阶段、进程释放阶段。其中:
创建阶段表示在进程在被创建时,对于内存的需求急剧增加。而这一阶段中申请的内存页面通常用于存放程序代码或者关键数据,其生命周期也往往会贯穿于整个进程生命周期,对进程性能的影响至关重要。与此同时,当发生缺页异常而分配页面时,往往会引起cache替换,如何降低对其他进程cache的影响也是此阶段关注的问题。
活动阶段是根据进程的实际行为不断的申请、访问、释放内存的阶段。“C库”对于进程用户空间内存的释放是基于特定条件的释放,如:android默认为达到2M空闲区的上限后释放给操作系统,但是这种释放并未考虑程序的实际运行行为。正如在图 2中所表现的,一个进程可能被释放的页面立马会被用到,这也就在说,当前的内存管理系统可能需要处理这冗余的释放操作。
释放阶段是进程运行完毕释放资源的阶段,当前Android的内存管理系统直接释放给内存管理系统,而并未考虑进程间的相互影响,但是如果能够明确进程间的相关性,则可以直接转移给最需要的进程。
针对Android应用,对于进程行为的静态属性而言,单页请求使得原“集中式”内存管理模型无法有效的分配,使得每个进程拥有相对独立的内存资源列表进行独自管理,即以“进程”作为基本单位,这样做一方面可以放弃原算法中的页合并与分割操作,提升分配效率;另一方面将“突发式”的内存操作限制在进程内部,降低对整个系统的影响从而降低多核间“锁”竞争,加快获取资源的效率。
图 7为进程拥有的内存资源(Y轴为内存页数)。同时,针对进程生命周期中动态属性所体现的三个阶段,动态调整优化策略。如图 8所示,为每 一个进程实体引入page_list与free_list链表,前者用于存放当前进程正在使用的内存页,后者则代表每一个进程所拥有的空闲资源。
本发明的内存管理系统模型对于程序员而言是完全透明的,并不会改变当前的编程模型。模型具备四个基本函数:其中get_page与free_page函数代表对进程本身内存资源进行操作,而与之对应的get_page_from_thread与free_page_to_thread函数则为进程间内存资源的传递操作。需要特别说明的是,该内存管理系统模型具备良好的“多态性”,可以根据不同的优化目标(能耗、分配效率、bank冲突等)重新设计这四个函数。以下是一些典型的实现方式:
类似以上典型实现方式,本发明的整个内存管理系统只对外提供两个关 键接口allocate_page与release_page;其内部通过get_page、free_page、get_page_from_thread、free_page_to_thread四个函数来实现进程的内存资源管理。
根据上述方法设计一个简单的策略用于加速andorid进程获取内存资源的效率。Andorid下的应用在运行过程中会产生很多进程(如:浏览器会产生34个进程),而属于同一个应用的进程通常存在某种联系,如在某个时刻进行同步,进程间通信,共享cache、内存资源等。通过挖掘此类multi-thread应用中进程间的关系进行优化。因此,一个进程在进行进程间内存资源传递时将优先传递给同属于同一应用的进程。
get_page与free_page:为了避免影响其他进程,本进程将通过对自身free_list中进行申请与释放操作。
get_page_from_thread与free_page_to_thread:针对进程间的内存资源传递,将优先选择隶属于同一CPU核中的同一进程组的进程,并且选择其中发生缺页次数最少/多的。这主要是由于首先,选择优先同一CPU而非多CPU间进程资源传递,主要基于Cache与多核间锁竞争;另外,如果一个进程其缺页次数最少/多,这代表其拥有的内存资源已经基本满足/不满足其需求。
get_page、free_page、get_page_from_thread与free_page_to_thread函数的典型实现如下:
实验及结果分析
针对多核智能手机平台,选择当前Android的默认模拟器qemu作为实验平台,采用的android平台为2.3。如表 1所示,选取之前所述的当前国内比较流行的九个应用作为基准测试程序。
(1)分配效率
如 图 9所示,Y轴代表相对于原始android内存管理系统的时间提升百分比,本发明的内存管理系统(MEMTB)显著提升的页分配效率。可以得出,本发明的内存管理系统(MEMTB)能够有效提升页分配效率12%~60%。首先,原管理算法的时间复杂度在最坏情况下为O(n),其中n为内存容量。而本发明的内存管理系统(MEMTB)的时间复杂度由查找最优进程的函数决定,在最坏情况下其时间复杂度为O(m),其中m为系统中进程的数量。但是在实际系统中,m与n不是一个数量级的。其次,本发明的内存管理系统(MEMTB)有效降低了多核间锁竞争,从而有效提升了系统效率。
(2)多核扩放性
为了证明本发明的内存管理系统(MEMTB)多核扩放性,图 10给出了原内存管理系统,在双核、四核、八核平台下相对于单核获取内存资源所带来的等待时延相对比例,可以看出随着核数的增加,多核间锁竞争加剧所带 来的时延的增加。图 11为本发明的内存管理系统(MEMTB)中等待时延的相对比例,需要说明的是,在本发明的内存管理系统(MEMTB)中,会存在多核间进程资源传递,所以当核数目发生变化时也会存在等待时延的相对增加。通过对比,可以看出,本发明的系统模型相对于原模型而言,等待时延维持在12%以内,因此具备良好的多核扩放性。
从以上的描述中,可以看出,本申请上述的实施例实现了如下技术效果:
本申请中用九个主流Android应用作为测试集,实验数据表明当前内存管理系统已经不再适合当前的多核智能手机系统,通过分析,将进程的行为划分为静态属性与动态属性,其中静态属性表现为大量的单页请求与突发的内存操作,据此提出以进程作为内存管理的基本单位,每个进程独立管理自己的内存资源;与此同时,根据进程在生命周期中的内存资源操作,对于自身带来的不同影响以及对其他进程带来的不同影响,将进程动态的行为划分为三个阶段,本发明的内存管理系统(MEMTB)则根据不同的阶段采取不同的优化策略。本发明的内存管理系统(MEMTB)具备良好的多核扩放性与多态性。为此,设计了一个基本的优化目标(提升分配效率以及降低多核间资源锁竞争)用于验证本发明的内存管理方法及其系统模型,实验数据表明:系统模型可以在提升内存分配效率的同时有效降低多核间资源锁的竞争。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种面向多核处理器进程进行内存页分配的方法,其特征在于,所述方法包括:
(1)根据进程信息获取当前进程的状态,并判断当前进程的状态是处于创建状态还是活动状态,然后依据进程所表现出的动态属性差异执行步骤(2)操作;
(2)如果当前进程的状态是处于创建状态,则向其他进程的空闲内存页中申请空闲内存页;否则,进行步骤(3);
(3)判断当前进程的空闲内存页链表是否是空;如果当前进程的空闲内存页链表非空,则当前进程直接从自身的空闲内存页中申请内存页;否则向其他进程的空闲内存页中申请空闲内存页。
2.根据权利要求1所述的方法,其特征在于,所述方法中,
动态属性用于描述进程在其生命周期活动过程中对内存需求表现出的特性;所述动态属性包括创建状态、活动状态、释放状态;所述创建状态为进程在被创建时的状态;所述活动状态为根据进程的实际行为持续的进行申请、访问、释放内存的状态;所述释放状态为进程运行完毕释放资源时的状态。
3.根据权利要求1所述的方法,其特征在于,所述方法中,其他进程为同一进程组的其他进程;优选的,其他进程为同一处理器核心同一进程组的其他进程;最优选的,其他进程为同一处理器核心同一应用程序同一进程组的其他进程。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括为当前进程预先设置有page_list与free_list链表,
其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所拥有的空闲资源。
5.根据权利要求4所述的方法,其特征在于,所述方法中当前进程直接从自身的空闲内存页中申请内存页是通过get_page函数来获得,所述get_page函数用于对进程自身的free_list链表中内存页资源进行申请空闲内存页操作。
6.根据权利要求4所述的方法,其特征在于,所述方法中向其他进程的空闲内存页中申请空闲内存页是通过get_page_from_thread函数实现的,所述get_page_from_thread函数用于当前进程向同一进程组的其他进程申请空闲的内存资源的操作。
7.根据权利要求4所述的方法,其特征在于,所述方法中还包括当前进程通过free_page函数释放进程本身不使用的内存页资源,所述free_page函数用于释放进程本身内存页资源,并将相应内存页资源加入到进程自身空闲内存页链表中的操作。
8.根据权利要求4所述的方法,其特征在于,所述方法中还包括当前进程还通过free_page_to_thread函数释放空闲内存资源给其他进程,所述free_page_to_thread函数用于当前进程释放空闲内存页资源给同一进程组的其他进程的操作。
9.一种与权利要求1相应的面向多核处理器进程释放内存页资源的方法,其特征在于所述方法包括:
(1)判断当前进程的状态是否处于活动状态,如果当前进程的状态处于活动状态,则将释放相应的内存页资源到进程结构体中,并在空闲内存页链表中记录;否则进行步骤(2);
(2)判断当前进程的状态是否处于释放状态,如果当前进程的状态处于释放状态,则将释放相应的内存页资源,并将相应的内存页资源传递给其他进程;否则,不进行任何操作。
10.一种面向多核处理器的内存管理系统,其特征在于所述系统包括:
进程内内存操作模块,所述模块为每一个进程设置有page_list与free_list链表,其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所拥有的空闲资源用于进程,所述模块用于进程自身的内存页资源分配和释放操作;以及
进程间内存操作模块,用于进程向同一进程组申请或者释放内存页资源的操作;
其中,进程内内存操作模块包括get_page与free_page模块;进程间内存操作模块包括get_page_from_thread与free_page_to_thread模块,
get_page模块,用于当当前进程的状态处于活动状态且其空闲内存页链表非空时,当前进程对进程自身的free_list链表中内存页资源进行申请空闲内存页操作;
free_page模块,用于当当前进程的内存页资源不使用时释放进程本身内存页资源,并将相应内存页资源加入到空闲内存页链表中的操作;
get_page_from_thread模块,用于当前进程向同一进程组的其他进程申请空闲的内存资源的操作;
free_page_to_thread模块用于当前进程释放空闲内存页资源给同一进程组的其他进程的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610223738.3A CN105975341A (zh) | 2016-04-12 | 2016-04-12 | 面向多核处理器的内存管理系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610223738.3A CN105975341A (zh) | 2016-04-12 | 2016-04-12 | 面向多核处理器的内存管理系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105975341A true CN105975341A (zh) | 2016-09-28 |
Family
ID=56989233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610223738.3A Pending CN105975341A (zh) | 2016-04-12 | 2016-04-12 | 面向多核处理器的内存管理系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105975341A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107357648A (zh) * | 2017-05-25 | 2017-11-17 | 吕锦柏 | 一种多核cpu访问资源时自旋锁的实现方法 |
CN108595502A (zh) * | 2018-03-19 | 2018-09-28 | 网宿科技股份有限公司 | 评估数据库服务性能的方法、装置及计算机可读存储介质 |
CN110069422A (zh) * | 2018-01-23 | 2019-07-30 | 普天信息技术有限公司 | 基于mips多核处理器的内存缓冲区回收方法 |
CN111078410A (zh) * | 2019-12-11 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN112328412A (zh) * | 2020-11-13 | 2021-02-05 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521049A (zh) * | 2011-11-18 | 2012-06-27 | 清华大学 | 多核间内存调度方法 |
US20130117331A1 (en) * | 2011-11-07 | 2013-05-09 | Sap Ag | Lock-Free Scalable Free List |
CN103425592A (zh) * | 2013-08-05 | 2013-12-04 | 大唐移动通信设备有限公司 | 一种多进程系统中的内存管理方法及装置 |
CN105159777A (zh) * | 2015-08-03 | 2015-12-16 | 中科创达软件股份有限公司 | 进程的内存回收方法及装置 |
-
2016
- 2016-04-12 CN CN201610223738.3A patent/CN105975341A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130117331A1 (en) * | 2011-11-07 | 2013-05-09 | Sap Ag | Lock-Free Scalable Free List |
CN102521049A (zh) * | 2011-11-18 | 2012-06-27 | 清华大学 | 多核间内存调度方法 |
CN103425592A (zh) * | 2013-08-05 | 2013-12-04 | 大唐移动通信设备有限公司 | 一种多进程系统中的内存管理方法及装置 |
CN105159777A (zh) * | 2015-08-03 | 2015-12-16 | 中科创达软件股份有限公司 | 进程的内存回收方法及装置 |
Non-Patent Citations (1)
Title |
---|
ZONGWEI ZHU 等: "A Thread Behavior-Based Memory Management Framework on Multi-core Smartphone", 《2014 19TH INTERNATIONAL CONFERENCE ON ENGINEERING OF COMPLEX COMPUTER SYSTEMS》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107357648A (zh) * | 2017-05-25 | 2017-11-17 | 吕锦柏 | 一种多核cpu访问资源时自旋锁的实现方法 |
CN107357648B (zh) * | 2017-05-25 | 2020-05-15 | 吕锦柏 | 一种多核cpu访问资源时自旋锁的实现方法 |
CN110069422A (zh) * | 2018-01-23 | 2019-07-30 | 普天信息技术有限公司 | 基于mips多核处理器的内存缓冲区回收方法 |
CN110069422B (zh) * | 2018-01-23 | 2021-06-18 | 普天信息技术有限公司 | 基于mips多核处理器的内存缓冲区回收方法 |
CN108595502A (zh) * | 2018-03-19 | 2018-09-28 | 网宿科技股份有限公司 | 评估数据库服务性能的方法、装置及计算机可读存储介质 |
CN111078410A (zh) * | 2019-12-11 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN112328412A (zh) * | 2020-11-13 | 2021-02-05 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
CN112328412B (zh) * | 2020-11-13 | 2024-05-07 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105975341A (zh) | 面向多核处理器的内存管理系统 | |
CN101799773B (zh) | 并行计算的内存访问方法 | |
Blumofe et al. | Scheduling large-scale parallel computations on networks of workstations | |
Vaishnav et al. | Resource elastic virtualization for FPGAs using OpenCL | |
Jeong et al. | Balancing DRAM locality and parallelism in shared memory CMP systems | |
CN108701059A (zh) | 多租户资源分配方法和系统 | |
CN103279390B (zh) | 一种面向小作业优化的并行处理系统 | |
CN1983196B (zh) | 用于将执行线程分组的系统和方法 | |
CN103646006B (zh) | 一种处理器的调度方法、装置和系统 | |
CN105094751B (zh) | 一种用于流式数据并行处理的内存管理方法 | |
CN101366004A (zh) | 用于带有专用线程管理的多核处理的方法和设备 | |
US20120124587A1 (en) | Thread scheduling on multiprocessor systems | |
CN106020934A (zh) | 一种基于虚拟集群在线迁移的优化部署方法 | |
CN104679594B (zh) | 一种中间件分布式计算方法 | |
CN103999051A (zh) | 用于着色器核心中着色器资源分配的策略 | |
CN103262035B (zh) | 组合式cpu/gpu体系结构系统中的装置发现和拓扑报告 | |
CN111488114B (zh) | 一种可重构的处理器架构及计算设备 | |
CN101673244B (zh) | 多核或集群系统的存储器控制方法 | |
CN115048216B (zh) | 一种人工智能集群的资源管理调度方法、装置和设备 | |
CN104090826B (zh) | 基于相关性的任务优化部署方法 | |
CN107436798A (zh) | 一种基于numa节点的进程访问方法及装置 | |
CN103617088A (zh) | 在处理器不同类型线程中分配内核资源的方法、装置及其处理器 | |
CN101937370B (zh) | 一种在fcmp上支持系统级资源分配和任务调度的方法及装置 | |
CN116560860B (zh) | 一种基于机器学习的资源优先级的实时优化调整方法 | |
CN110231977A (zh) | 数据库的处理方法、装置、存储介质及电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160928 |