面向多核处理器的内存管理系统的制作方法

文档序号:10612670阅读:393来源:国知局
面向多核处理器的内存管理系统的制作方法
【专利摘要】本申请提供了一种面向多核处理器的内存管理系统,其特征在于所述系统将进程访存行为划分为静态与动态属性。其静态属性用于描述进程所表现的通常性的内存需求行为(单页以及突发式的请求);动态属性用于描述进程在其生命周期活动过程中对内存需求表现出的特性。基于对静态及动态属性的分析,引入了进程内与进程间内存操作模块。该系统一方面可以有效提升系统分配效率,同时可以有效降低多核间内存资源锁的竞争。
【专利说明】
面向多核处理器的内存管理系统
技术领域
[0001] 本申请涉及多核处理器内存管理技术领域,具体而言,涉及一种面向多核处理器 的内存管理系统及其内存管理方法。
【背景技术】
[0002] 多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。 Samsung、Freescale、TI等半导体厂商针对智能手机平台相继推出了双核、四核处理器。多 核体系相对单核而言,对内存带宽的需求更加苛刻。共享内存的CMP多核系统,在智能手机 领域占据主要地位,而多核处理器进一步加剧了内存资源的竞争。Android采用一种集中式 的伙伴分配算法,按照FCFS的原则处理每一次内存资源的请求与释放操作。
[0003] 伙伴分配算法把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为 1,2,4,8,16,32,64,128,256,512和1024个连续的页框。对1024个页框的最大请求对应着 4MB大小的连续RAM块。每个块的第一个页框的物理地址是该块大小的整数倍。例如,大小为 16个页框的块,其起始地址是16 X 212 (212 = 4096,这是一个常规页的大小)的倍数。伙伴分 配算法的原理如下:当进行分配内存时,首先寻找大小合适的内存块(大于等于所需大小并 且最接近2的幂);如果找到了,分配给应用程序;否则,分出合适的内存块。然后对半分离出 高于所需大小的空闲内存块,如果分到最低限度,分配这个大小。继续寻找合适大小的块, 如此重复,直到找到一个合适的块。
[0004] 而释放内存时,先释放该内存块,再寻找其相邻的块,看其是否释放了。如果相邻 块也释放了,合并这两个块,重复上述步骤直到遇上未释放的相邻块,或者达到最高上限 (即所有内存都释放了)。
[0005] 内存管理系统作为内存资源的管理者与调度者,对于系统性能的影响至关重要。 将通过一个简单的实例(算法1)来分析进程的行为。
[0008] 在算法1的例子中,该程序首先动态申请一块内存资源;然后对内存资源进行读 写;最后,使用完毕后释放。从操作系统的角度看到的进程对于内存资源的操作又表现为什
[0006]
[0007] 么形式呢?
[0009]正如图1中所描述的内存管理框架那样,从用户态的角度而言,一个程序一方面可 以直接使用系统调用来管理内存区域,但是更多的时候都是使用"C库"提供的mallocO和 freeO函数动态分配与释放内存。当应用程序调用malloc后,此行为一般不会立即反应到 0S中,这是因为"C库"为了保持较高的分配效率而减少与操作系统的交互,通常会预先分配 一块大于用户请求的内存(默认256K),并通过某种算法管理这块内存来满足用户的内存分 配要求。同样,对于应用程序释放掉的内存,"C库"也并不是立即归还到操作系统,而是在达 到某种条件后才释放(默认为大小超过2M时)。
[0010]从操作系统的层次,如采用Android作为本文的研究对象,其在初始设计内存管理 系统时,基于内存外部碎片的考虑(过多的外部碎片会导致内存申请失败,从而换出某些进 程影响系统性能),采用了一种集中式的内存管理系统(伙伴算法)。但是正如图1所示,当多 核多进程对内存资源进行操作时,每CPU核心需要首先通过自旋锁来获取内存资源的使用 权,随着申请/释放越来越多,进程等待的时间可能会越来越长。本发明因此而来。

【发明内容】

[0011] 本申请旨在提供一种面向多核处理器进程进行内存页分配的方法,以解决现有技 术中的问题。
[0012] 为了实现上述目的,根据本申请的一个方面,提供了一种面向多核处理器进程进 行内存页分配的方法,其特征在于,所述方法包括:
[0013] (1)依据进程的静态属性,借助于进程信息获取当前进程的状态,并判断当前进程 的状态是处于创建状态还是活动状态,然后依据进程所表现出的动态属性差异执行步骤 (2)操作;
[0014] (2)如果当前进程的状态是处于创建状态,则向其他进程的空闲内存页中申请空 闲内存页;否则,进行步骤(3);
[0015] (3)判断当前进程的空闲内存页链表是否是空;如果当前进程的空闲内存页链表 非空,则当前进程直接从自身的空闲内存页中申请内存页;否则向其他进程的空闲内存页 中申请空闲内存页。
[0016] 本发明将进程访存行为划分为静态与动态属性。其静态属性用于描述进程所表现 的通常性的内存需求行为(单页以及突发式的请求);动态属性用于描述进程在其生命周期 活动过程中对内存需求表现出的特性;所述动态属性包括创建状态、活动状态、释放状态; 所述创建状态为进程在被创建时的状态;所述活动状态为根据进程的实际行为持续的进行 申请、访问、释放内存的状态;所述释放状态为进程运行完毕释放资源时的状态。
[0017] 本发明基于对进程的静态属性及动态属性的分析,引入了进程内与进程间内存操 作模块。
[0018] 进一步的技术方案是,所述方法中,
[0019] 进程的状态获取是通过获取进程的PID及其关联的进程信息得到的。
[0020] 进一步的技术方案是,所述方法中,其他进程为同一进程组的其他进程;优选的, 其他进程为同一处理器核心同一进程组的其他进程;最优选的,其他进程为同一处理器核 心同一应用程序同一进程组的其他进程。
[0021]进一步的技术方案是,所述方法还包括为当前进程预先设置有page_list与free_ list链表,
[0022]其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存 放当前进程所拥有的空闲资源。
[0023] 进一步的技术方案是,所述方法中当前进程直接从自身的空闲内存页中申请内存 页是通过get_page函数来获得,所述get_page函数用于对进程自身的free_list链表中内 存页资源进行申请空闲内存页操作。
[0024] 进一步的技术方案是,所述方法中向其他进程的空闲内存页中申请空闲内存页是 通过get_page_from_thread函数实现的,所述get_page_from_thread函数用于当前进程向 同一进程组的其他进程申请空闲的内存资源的操作。
[0025] 进一步的技术方案是,所述方法中还包括当前进程通过free_page函数释放进程 本身不使用的内存页资源,所述free_page函数用于释放进程本身内存页资源,并将相应内 存页资源加入到空闲内存页链表中的操作。
[0026] 进一步的技术方案是,所述方法中还包括当前进程还通过free_page_to_thread 函数释放空闲内存资源给其他进程,所述free_page_to_thread函数用于当前进程释放空 闲内存页资源给同一进程组的其他进程的操作。
[0027] 本发明提供的另一目的在于提供一种与权利要求1相应的面向多核处理器进程释 放内存页资源的方法,其特征在于所述方法包括:
[0028] (1)判断当前进程的状态是否处于活动状态,如果当前进程的状态处于活动状态, 则将释放相应的内存页资源到进程结构体中,并在空闲内存页链表中记录;否则进行步骤 (2);
[0029] (2)判断当前进程的状态是否处于释放状态,如果当前进程的状态处于释放状态, 则将释放相应的内存页资源,并将相应的内存页资源传递给其他进程;否则,不进行任何操 作。
[0030] 本发明提供的又一目的在于提供一种面向多核处理器的内存管理系统,其特征在 于所述系统包括:
[0031] 进程内内存操作模块,所述模块为每一个进程设置有page_l ist与free_l ist链 表,其中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当 前进程所拥有的空闲资源用于进程,所述模块用于进程自身的内存页资源分配和释放操 作;以及
[0032] 进程间内存操作模块,用于进程向同一进程组申请或者释放内存页资源的操作; [0033]其中,进程内内存操作模块包括get_page与free_page模块;进程间内存操作模块 包括 get_page_from_thread 与 free_page_to_thread 模块,
[0034] get_page模块,用于当当前进程的状态处于活动状态且其空闲内存页链表非空 时,当前进程对进程自身的free_list链表中内存页资源进行申请空闲内存页操作;
[0035] free_page模块,用于当当前进程的内存页资源不使用时释放进程本身内存页资 源,并将相应内存页资源加入到空闲内存页链表中的操作;
[0036] get_page_from_thread模块,用于当前进程向同一进程组的其他进程申请空闲的 内存资源的操作;
[0037] free_page_to_thread模块用于当前进程释放空闲内存页资源给同一进程组的其 他进程的操作;
[0038] 其中系统预先为进程设置有page_list与free_list链表,其中page_list链表用 于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所拥有的空闲资 源。
[0039] 本发明抽象出进程的静态属性与动态属性,并根据进程在不同阶段所表现出的特 性,采取更有针对性的分配策略。将进程访存行为划分为静态与动态属性。其静态属性用于 描述进程所表现的通常性的内存需求行为(单页以及突发式的请求);动态属性用于描述进 程在其生命周期活动过程中对内存需求表现出的特性。通过实验发现对于Android下的大 部分应用,单页请求占据了所有资源请求的97%以上,这说明"外部碎片"已经不再是最关 键的瓶颈,因此而引入一个集中式的复杂管理算法显得得不偿失;与此同时,当前系统对于 资源请求的不加以区分的响应可能会严重影响Android的分配效率,加剧多核间对于内存 资源的锁竞争。从根本上来讲,当前的内存管理系统将内存作为整体,而忽略了每一个线程 本身的行为,因而不能更具针对性的优化。因此,本发明提出了一种全新的内存管理系统, 其将进程作为内存管理的基本单位,同时,根据进程生命周期中不同阶段所表现出来的行 为,分别设计出更具针对性的优化策略。该系统具有很好的多核扩展性以及多态行(可以根 据不同的需求而设计不同的优化策略)。实验结果表明,本发明的系统一方面可以有效提升 系统分配效率,同时可以有效降低多核间内存资源锁的竞争。
【附图说明】
[0040] 构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示 意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0041 ]图1示出了 Android内存管理系统的架构原理示意图。
[0042]图2示出了 Android内存管理系统在多核处理器下的工作原理图。
[0043]图3示出了九种应用程序在多核智能手机平台的单页请求率。
[0044] 图4示出了九种应用程序在多核智能手机平台的突发式申请内存页与释放内存页 的柱状图。
[0045] 图5示出了多核平台相对于单核平台而言,最坏情况等待时间。
[0046]图6示出了多核平台进程的动态属性-三阶段原理图。
[0047]图7示出了多核平台进程的各个应用程序进程拥有的内存资源数。
[0048]图8示出了本发明面向多核处理器的内存管理系统模型原理图(MEMTB模型)。
[0049]图9示出了面向多核处理器的内存管理系统在不同核心数时的分配效率提升比 例。
[0050] 图10示出了原内存管理系统模型访存时延比例。
[0051] 图11示出了本发明的内存管理系统(MEMTB)访存时延比例。
【具体实施方式】
[0052]参见附图2~11所示,应该指出,以下详细说明都是例示性的,旨在对本申请提供 进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领 域的普通技术人员通常理解的相同含义。
[0053]需要注意的是,这里所使用的术语仅是为了描述【具体实施方式】,而非意图限制根 据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式 也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语"包含"和/或"包 括"时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0054]需要说明的是,本申请的说明书和权利要求书及上述附图中的术语"第一"、"第 二"等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用 的数据在适当情况下可以互换,以便这里描述的本申请的实施方式例如能够以除了在这里 图示或描述的那些以外的顺序实施。此外,术语"包括"和"具有"以及他们的任何变形,意图 在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不 必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方 法、产品或设备固有的其它步骤或单元。
[0055]为了便于描述,在这里可以使用空间相对术语,如"在……之上"、"在……上方"、 "在……上表面"、"上面的"等,用来描述如在图中所示的一个部件或者模块或特征与其他 部件或者模块或特征的空间位置关系。应当理解的是,空间相对术语旨在包含除了部件或 者模块在图中所描述的方位之外的在使用或操作中的不同方位。例如,如果附图中的部件 或者模块被倒置,则描述为"在其他部件或者模块或构造上方"或"在其他部件或者模块或 构造之上"的部件或者模块之后将被定位为"在其他部件或者模块或构造下方"或"在其他 部件或者模块或构造之下"。因而,示例性术语"在……上方"可以包括"在……上方"和 "在……下方"两种方位。该部件或者模块也可以其他不同方式定位(旋转90度或处于其他 方位),并且对这里所使用的空间相对描述作出相应解释。
[0056]正如【背景技术】所介绍的,现有技术中的内存管理方式针对多核处理器时严重影响 Android的分配效率,加剧多核间对于内存资源的锁竞争等缺陷,为了解决如上的技术问 题,本申请提出了一种面向多核处理器的内存管理系统,可以解决现有技术中这些问题。 [0057]本申请一种典型的实施方式中,如图1所示,提出了一种面向多核处理器的内存管 理系统,其特征在于所述系统包括:
[0058] get_page模块,用于当当前进程的状态处于活动状态且其空闲内存页链表非空 时,当前进程对进程自身的free_list链表中内存页资源进行申请空闲内存页操作;
[0059] free_page模块,用于当当前进程的内存页资源不使用时释放进程本身内存页资 源,并将相应内存页资源加入到空闲内存页链表中的操作;
[0000] get_page_from_thread模块,用于当前进程向同一进程组的其他进程申请空闲的 内存资源的操作;
[0061 ] free_page_to_thread模块用于当前进程释放空闲内存页资源给同一进程组的其 他进程的操作;其中系统预先为进程设置有page_list与free_list链表,其中page_list链 表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程所拥有的空闲 资源。
[0062]其中进行面向多核处理器进程内存页分配时,包括:
[0063] (1)依据进程的静态属性,借助于进程信息获取当前进程的状态,并判断当前进程 的状态是处于创建状态还是活动状态,然后依据进程所表现出的动态属性差异执行步骤 (2)操作;
[0064] (2)如果当前进程的状态是处于创建状态,则向其他进程的空闲内存页中申请空 闲内存页;否则,进行步骤(3);
[0065] (3)判断当前进程的空闲内存页链表是否是空;如果当前进程的空闲内存页链表 非空,则当前进程直接从自身的空闲内存页中申请内存页;否则向其他进程的空闲内存页 中申请空闲内存页。
[0066]面向多核处理器进程释放内存页资源时,包括:
[0067] (1)判断当前进程的状态是否处于活动状态,如果当前进程的状态处于活动状态, 则将释放相应的内存页资源到进程结构体中,并在空闲内存页链表中记录;否则进行步骤 (2);
[0068] (2)判断当前进程的状态是否处于释放状态,如果当前进程的状态处于释放状态, 则将释放相应的内存页资源,并将相应的内存页资源传递给其他进程;否则,不进行任何操 作。
[0069] 本发明人一直潜心研究,认为多核下内存资源管理问题的关键在于:如何有效区 分不同进程的访存行为,从而对不同的进程行为采取不同的优化策略。
[0070] 针对多核智能手机平台,通过在android上的试验发现:首先,如图3所示,采用表1 所示的当前流行的应用作为测试集(Y轴为单页请求占据了应用生命周期中内存请求的百 分比),实验表明单页请求占据了应用生命周期中内存请求的97%以上,这也就是说,外部 碎片针对android平台而言,不再成为最关键的问题,因此为了降低外部碎片而设计一个复 杂的"集中式伙伴系统"显得得不偿失。
[0071]表1当前流行的应用测试集
[0072]
[0073] 其次,应用程序在运行过程中,为了减少与操作系统的交互从而提升系统性能,通 常会先向内存管理系统请求一大块的内存资源(大于本次请求的内存资源)供程序使用,只 有当达到某种条件时才归还给操作系统。正如图4所示(黑色曲线代表页申请,灰色代表释 放操作,Y轴为页申请或者释放的内存页数),这种现象在操作系统层次上往往表现为"突发 模式",但是对于多核体系结构而言,这种模式会严重加剧多核间锁竞争,延长获取内存资 源的时间。
[0074] 最后,当前的内存管理系统并不会区分一个进程生命周期中不同运行阶段的行 为,也更不会考虑进程间的相互影响,而是采用一种先来先服务的策略,但是对于内存资源 的操作往往在不同阶段表现出来的行为差异很大,因此当前的管理方式不能进行针对性的 优化。
[0075]综上所述,本文针对多核智能手机平台,基于android操作系统对不同应用特性进 行分析,将进程的行为划分为静态属性与动态属性两部分,其中静态属性表现为大量的单 页与突发式的操作,据此提出以进程作为内存管理的基本单位;同时针对进程生命周期中 的动态属性所表现出来的三个不同阶段,本发明采取不同的针对性优化策略。
[0076]内存管理系统作为内存资源的管理者与调度者,能够提供任务的详细信息,可以 更加有针对性的指导优化。从操作系统的角度而言,任务的访存"活动"可以归结为三类:申 请、访问、释放。假定任务访存行为是指在任务完成一定功能时所表现出来的对于内存资源 的相关操作活动的序列。进程(thread)拥有静态属性和动态属性两个基本特性。静态属性 往往表现为进程的本质特性,在系统初始设计时需要特殊考虑的,而动态属性则表现为随 时间变化而不同的特性,往往需要内存管理系统在运行中考虑。
[0077] (1)静态属性
[0078]针对Android平台的应用,其静态属性表现为两个方面:大量的单页请求与突发式 的内存操作。
[0079]首先,实验证明单页请求的比例非常大,而当前的内存管理模型基于外部碎片的 考虑,在分配和释放内存资源时需要引入页的分割与合并操作,从而降低了分配效率。 [0080]同时,正如在背景章节中提到的,一个进程对于内存资源的申请与释放的活动已 经被"C库"封装,而"C库"在设计时基于性能的考虑导致其在操作系统上的表现为"突发" 的。但是,这种特性在当前的内存管理模型中可能会带来以下问题,"集中式"的管理模型使 得所有内存请求需要通过加锁获取内存资源,在多核体系结构下,这可能会存在叠加效应, 导致单位时间内申请/释放的密度大大增加,从而使得进程获取资源的等待时间严重增加。 如图5所示(Y轴为多核平台相对于单核平台在最坏情况下,进程获得单页内存的等待时间 比例),多核平台相对于单核平台而言,在最坏情况下,进程获得单页内存的等待时间要高 出好几倍。
[0081 ] (2)动态属性
[0082] 同样的"活动"发生在进程生命周期的不同时刻,所带来的影响可能存在非常大的 差别,这也就是引入动态属性的原因。考虑到一个进程在不同阶段中发生的内存资源的活 动,对其自身而言所带来的影响以及对其他进程所带来的影响,并结合大量实验(如图6所 示,Y轴代表某进程所拥有的内存资源),将进程生命周期中所拥有的内存资源抽象为图5所 不。
[0083] -个进程拥有的内存资源往往会经历三个阶段,进程初创阶段、进程活动阶段、进 程释放阶段。其中:
[0084] 创建阶段表示在进程在被创建时,对于内存的需求急剧增加。而这一阶段中申请 的内存页面通常用于存放程序代码或者关键数据,其生命周期也往往会贯穿于整个进程生 命周期,对进程性能的影响至关重要。与此同时,当发生缺页异常而分配页面时,往往会引 起cache替换,如何降低对其他进程cache的影响也是此阶段关注的问题。
[0085] 活动阶段是根据进程的实际行为不断的申请、访问、释放内存的阶段。"C库"对于 进程用户空间内存的释放是基于特定条件的释放,如:android默认为达到2M空闲区的上限 后释放给操作系统,但是这种释放并未考虑程序的实际运行行为。正如在图2中所表现的, 一个进程可能被释放的页面立马会被用到,这也就在说,当前的内存管理系统可能需要处 理这冗余的释放操作。
[0086]释放阶段是进程运行完毕释放资源的阶段,当前Android的内存管理系统直接释 放给内存管理系统,而并未考虑进程间的相互影响,但是如果能够明确进程间的相关性,则 可以直接转移给最需要的进程。
[0087]针对Android应用,对于进程行为的静态属性而言,单页请求使得原"集中式"内存 管理模型无法有效的分配,使得每个进程拥有相对独立的内存资源列表进行独自管理,即 以"进程"作为基本单位,这样做一方面可以放弃原算法中的页合并与分割操作,提升分配 效率;另一方面将"突发式"的内存操作限制在进程内部,降低对整个系统的影响从而降低 多核间"锁"竞争,加快获取资源的效率。
[0088]图7为进程拥有的内存资源(Y轴为内存页数)。同时,针对进程生命周期中动态属 性所体现的三个阶段,动态调整优化策略。如图8所示,为每一个进程实体引入page_liSt 与freejist链表,前者用于存放当前进程正在使用的内存页,后者则代表每一个进程所拥 有的空闲资源。
[0089]本发明的内存管理系统模型对于程序员而言是完全透明的,并不会改变当前的编 程模型。模型具备四个基本函数:其中get_page与free_page函数代表对进程本身内存资源 进行操作,而与之对应的get_page_from_thread与free_page_to_thread函数则为进程间 内存资源的传递操作。需要特别说明的是,该内存管理系统模型具备良好的"多态性",可以 根据不同的优化目标(能耗、分配效率、bank冲突等)重新设计这四个函数。以下是一些典型 的实现方式:
[0090]
[0091] 类似以上典型实现方式,本发明的整个内存管理系统只对外提供两个关键接口 al locate_page与release_page ;其内部通过get_page、free_page、get_page_from_ thread、free_page_to_thread四个函数来实现进程的内存资源管理。
[0092]根据上述方法设计一个简单的策略用于加速andorid进程获取内存资源的效率。 Andorid下的应用在运行过程中会产生很多进程(如:浏览器会产生34个进程),而属于同一 个应用的进程通常存在某种联系,如在某个时刻进行同步,进程间通信,共享cache、内存资 源等。通过挖掘此类multi-thread应用中进程间的关系进行优化。因此,一个进程在进行进 程间内存资源传递时将优先传递给同属于同一应用的进程。
[0093] get_page与free_page:为了避免影响其他进程,本进程将通过对自身free_list 中进行申请与释放操作。
[0094] get_page_f rom_thread 与 free_page_to_thread:针对进程间的内存资源传递,将 优先选择隶属于同一 CPU核中的同一进程组的进程,并且选择其中发生缺页次数最少/多 的。这主要是由于首先,选择优先同一 CPU而非多CPU间进程资源传递,主要基于Cache与多 核间锁竞争;另外,如果一个进程其缺页次数最少/多,这代表其拥有的内存资源已经基本 满足/不满足其需求。
[0095] get_page、free_page 'get-page-from-thread^free-page-to-threadMli^l^];^ 型实现如下:
[0096]
[0097]
[0098] 实验及结果分析
[00"]针对多核智能手机平台,选择当前Android的默认模拟器qemu作为实验平台,采用 的andro i d平台为2.3。如表1所示,选取之前所述的当前国内比较流行的九个应用作为基准 测试程序。
[0100] (1)分配效率
[0101] 如图9所示,Y轴代表相对于原始android内存管理系统的时间提升百分比,本发明 的内存管理系统(MEMTB)显著提升的页分配效率。可以得出,本发明的内存管理系统 (MEMTB)能够有效提升页分配效率12%~60%。首先,原管理算法的时间复杂度在最坏情况 下为〇(n),其中η为内存容量。而本发明的内存管理系统(MEMTB)的时间复杂度由查找最优 进程的函数决定,在最坏情况下其时间复杂度为〇(m),其中m为系统中进程的数量。但是在 实际系统中,m与η不是一个数量级的。其次,本发明的内存管理系统(MEMTB)有效降低了多 核间锁竞争,从而有效提升了系统效率。
[0102] (2)多核扩放性
[0103]为了证明本发明的内存管理系统(MEMTB)多核扩放性,图10给出了原内存管理系 统,在双核、四核、八核平台下相对于单核获取内存资源所带来的等待时延相对比例,可以 看出随着核数的增加,多核间锁竞争加剧所带来的时延的增加。图11为本发明的内存管理 系统(MEMTB)中等待时延的相对比例,需要说明的是,在本发明的内存管理系统(MEMTB)中, 会存在多核间进程资源传递,所以当核数目发生变化时也会存在等待时延的相对增加。通 过对比,可以看出,本发明的系统模型相对于原模型而言,等待时延维持在12%以内,因此 具备良好的多核扩放性。
[0104] 从以上的描述中,可以看出,本申请上述的实施例实现了如下技术效果:
[0105] 本申请中用九个主流Android应用作为测试集,实验数据表明当前内存管理系统 已经不再适合当前的多核智能手机系统,通过分析,将进程的行为划分为静态属性与动态 属性,其中静态属性表现为大量的单页请求与突发的内存操作,据此提出以进程作为内存 管理的基本单位,每个进程独立管理自己的内存资源;与此同时,根据进程在生命周期中的 内存资源操作,对于自身带来的不同影响以及对其他进程带来的不同影响,将进程动态的 行为划分为三个阶段,本发明的内存管理系统(MEMTB)则根据不同的阶段采取不同的优化 策略。本发明的内存管理系统(MEMTB)具备良好的多核扩放性与多态性。为此,设计了一个 基本的优化目标(提升分配效率以及降低多核间资源锁竞争)用于验证本发明的内存管理 方法及其系统模型,实验数据表明:系统模型可以在提升内存分配效率的同时有效降低多 核间资源锁的竞争。
[0106] 以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技 术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本申请的保护范围之内。
【主权项】
1. 一种面向多核处理器进程进行内存页分配的方法,其特征在于,所述方法包括: (1) 根据进程信息获取当前进程的状态,并判断当前进程的状态是处于创建状态还是 活动状态,然后依据进程所表现出的动态属性差异执行步骤(2)操作; (2) 如果当前进程的状态是处于创建状态,则向其他进程的空闲内存页中申请空闲内 存页;否则,进行步骤(3); (3) 判断当前进程的空闲内存页链表是否是空;如果当前进程的空闲内存页链表非空, 则当前进程直接从自身的空闲内存页中申请内存页;否则向其他进程的空闲内存页中申请 空闲内存页。2. 根据权利要求1所述的方法,其特征在于,所述方法中, 动态属性用于描述进程在其生命周期活动过程中对内存需求表现出的特性;所述动态 属性包括创建状态、活动状态、释放状态;所述创建状态为进程在被创建时的状态;所述活 动状态为根据进程的实际行为持续的进行申请、访问、释放内存的状态;所述释放状态为进 程运行完毕释放资源时的状态。3. 根据权利要求1所述的方法,其特征在于,所述方法中,其他进程为同一进程组的其 他进程;优选的,其他进程为同一处理器核心同一进程组的其他进程;最优选的,其他进程 为同一处理器核心同一应用程序同一进程组的其他进程。4. 根据权利要求1所述的方法,其特征在于,所述方法还包括为当前进程预先设置有 page_list-^3free_list|j|^:, 其中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_l ist与free_l ist链表,其 中page_list链表用于存放当前进程正在使用的内存页,free_list链表用于存放当前进程 所拥有的空闲资源用于进程,所述模块用于进程自身的内存页资源分配和释放操作;以及 进程间内存操作模块,用于进程向同一进程组申请或者释放内存页资源的操作; 其中,进程内内存操作模块包括get_page与free_page模块;进程间内存操作模块包括 get_page_from_thread 与 free_page_to_thread 模块, get_page模块,用于当当前进程的状态处于活动状态且其空闲内存页链表非空时,当 前进程对进程自身的free_list链表中内存页资源进行申请空闲内存页操作; free_page模块,用于当当前进程的内存页资源不使用时释放进程本身内存页资源,并 将相应内存页资源加入到空闲内存页链表中的操作; ge t_page_f rom_thread模块,用于当前进程向同一进程组的其他进程申请空闲的内存 资源的操作; free_page_to_thread模块用于当前进程释放空闲内存页资源给同一进程组的其他进 程的操作。
【文档编号】G06F9/50GK105975341SQ201610223738
【公开日】2016年9月28日
【申请日】2016年4月12日
【发明人】朱宗卫, 熊开胜, 程修国
【申请人】苏州万特锐仪器有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1