CN107885666B - 一种内存管理方法和装置 - Google Patents

一种内存管理方法和装置 Download PDF

Info

Publication number
CN107885666B
CN107885666B CN201610860581.5A CN201610860581A CN107885666B CN 107885666 B CN107885666 B CN 107885666B CN 201610860581 A CN201610860581 A CN 201610860581A CN 107885666 B CN107885666 B CN 107885666B
Authority
CN
China
Prior art keywords
page
memory
swap
task
work
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
Application number
CN201610860581.5A
Other languages
English (en)
Other versions
CN107885666A (zh
Inventor
陈秋林
姚旺来
应云剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201610860581.5A priority Critical patent/CN107885666B/zh
Priority to EP17854533.1A priority patent/EP3514689B1/en
Priority to PCT/CN2017/092855 priority patent/WO2018059079A1/zh
Publication of CN107885666A publication Critical patent/CN107885666A/zh
Priority to US16/368,511 priority patent/US10990540B2/en
Priority to US17/239,204 priority patent/US11531625B2/en
Application granted granted Critical
Publication of CN107885666B publication Critical patent/CN107885666B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction

Abstract

本发明实施例提供了一种内存管理方法和装置,用于解决现有内存回收速率较低,在系统内存不足的场景下,会严重影响内存分配性能的问题。方法包括:确定内存中需要换出的内存页面;对于每个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务;确定专用工作线程,并将每个所述工作任务分配给专用工作线程执行,从而实现了多CPU并行处理内存回收,加速了内存回收的速度,提高了用户体验。

Description

一种内存管理方法和装置
技术领域
本发明涉及通信技术领域,特别涉及一种内存管理方法和装置。
背景技术
计算机中所有程序的运行都是在内存中进行的,同时内存还是用于暂时存放中央处理器(Central Processing Unit,简称CPU)中的运算数据、与外部磁盘等外部存储器交换数据的媒介。因此,内存的使用对计算机性能的影响非常大。对嵌入式终端来说尤其如此,Android系统是一款基于Linux内核,面向移动终端的操作系统,其所有可用的内存仅限于系统随机存取存储器(Random-Access Memory,简称RAM)。Android系统中,当应用退出时,不清理其所占的内存,Linux内核进程也相应的继续存在,即“退出但不关闭”,从而使得用户调用程序时能够在第一时间得到响应。当系统内存不足时,将激活内存回收过程。
例如,当使用手机一段时间后,后台存在大量的系统服务和应用,为了提高用户体验,减少启动时间,在应用切到后台后,操作系统会尽量保留该应用所占的内存。但是由于内存大小的限制,当在内存不足时,启动一个新的应用或申请一块新的内存时,触发操作系统内核的内存回收过程,即将最近最少使用的应用的数据从内存换出到交换(swap)分区。同时,当重新访问被回收的应用时,触发该应用的重新换入过程,即将swap分区的该应用的数据重新加载到内存中。因此,系统在内存回收时,页面的换入换出性能,会直接导致系统中应用启动或切换的速度,以及运行过程中的性能,影响用户体验。
内存回收在Linux内存管理中占据非常重要的地位,当前Linux内核的内存回收策略为:当内存不足时,将最近最少使用的页面回收;内存分配时由内存申请进程同步回收或唤醒内核守护线程异步回收。
由于当前内存回收(包括数据压缩和换出)过程都在单个线程中执行,内存回收速率较低,在系统内存不足的场景下,会严重影响内存分配性能,降低用户体验。
发明内容
本发明实施例提供了一种内存管理方法和装置,用于解决现有内存回收速率较低,在系统内存不足的场景下,会严重影响内存分配性能的问题。
下面首先介绍一下本发明实施例中出现的术语。
专用工作线程,是在多核CPU的每个CPU上预先配置的per-cpu工作线程,分别运行在各自的CPU上,用于处理本发明实施例所生成的工作任务。每一个专用工作线程有一个对应的工作队列,专用工作线程在对应的CPU上处理工作队列中的工作任务。当专用工作线程的工作队列中没有未处理的工作任务时,该工作队列对应的工作线程即处于空闲状态。
回写,是指将内存页面的数据写回文件系统,而换出是指将内存页面数据交换到交换分区中。
扫描控制结构信息(struct scan_control),用于在内存回收过程中,决定将要扫描的页框总数、是否允许移除页框的所有映射关系、是否允许回写,以及对应目标VMA(target_VMA)等信息的结构体,其中,target_VMA是指页框映射到进程中的虚拟内存区域。根据扫描控制结构中的target_VMA字段,确定是否需要移除页框的所有映射关系,其中当扫描控制结构中的target_VMA字段为空指针时,表示需要移除页框的所有映射关系。
页框描述符(struct page),是用于维护内存中每一个物理页(即内存页面)的具体信息的结构体。
标志位ttu_flag,是在移除页框的映射关系时,用于决定是否更新指定类型的页框的标志,例如:已锁定的页面,需迁移的页面等。每种类型的页框对应不同的标志位,根据页框的类型,确定对应的标志位,并根据该标志位的具体取值,确定是否更新页框在相应进程中的转换表项内容。例如,标志位为1时,表示忽略该类型的页框,即不需要更新该类型的页框的转换表项内容;标志位为0时,表示需要更新该类型的页框的转换表项内容。
隔离页链表,只存在进程内存回收的过程中,回收完成后便销毁。隔离页链表是一个由隔离页框组成的链表,隔离页框是指从LRU链表中隔离出来的页框。
每个进程均对应一个转换表,该转换表中记录从虚拟地址转换成对应页框,该转换表由多级页目录和页表组成,如:上级页目录中的每一项指向一个中级页目录,而中级页目录中的每一项指向一个页表,页表中的每一项指向一个实际的页框。
第一方面,本发明实施例提供了一种内存管理方法,该方法可应用于内存页面的换出,所述方法包括:确定内存中需要换出的内存页面;对于每个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务;确定专用工作线程,并将每个所述工作任务分配给专用工作线程执行。根据per-cpu工作线程的运行原理,优选空闲态的专用工作线程。采用该方法,每个内存页面都由专用工作线程进行回收,从而实现了多CPU并行处理内存回收,加速了内存回收的速度,提高了用户体验。基于第一方面,在第一种可能的实施方式中,该方式在确定内存中需要换出的内存页面时,具体如下:
对于内存的最近最少使用LRU链表中的每个页框,若确定所述页框已脏且允许回写,或者允许换出,确定所述页框内的内存页面为需要换出的内存页面;或者
对于内存的LRU链表中的每个页框,若根据指示确定所述页框需要回收且根据内存的扫描控制结构信息确定需要移除所述页框与进程(与页框具有映射关系的进程)的所有映射关系,确定所述页框中的内存页面为需要换出的内存页面。
具体的,可以根据上层指示(如应用层指示)确定页框是否需要回收,即上层调用到本发明实施例时传递的信息中有直接或间接指明是否强制回收页框、是否移除页框所有映射关系,是否更新页框对应的转换表项内容等。
进一步的,对于每个需要换出的内存页面,按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务(即单页面回收任务),所述工作任务以所述内存页面所在的页框的页框描述符、所述扫描控制结构信息、用于指示是否更新页框的转换表项内容的标志位为参数,且以单页框回收函数为工作函数;其中,所述单页框回收函数用于执行如下处理:
根据所述页框描述符、所述标志位和所述扫描控制结构中的目标虚拟内存空间VMA字段,移除对应的页框与进程的所有映射关系;根据所述页框描述符、所述页框对应的地址空间和所述扫描控制结构信息,将所述页框内的数据写入至交换分区或回写至文件系统中。
第一种可能的实施方式适用于内存分配场景下内存页面的回收过程,实现了内存分配过程中的内存页面的并行换出过程,提高了内存分配过程中页面换出的效率,提高了内存分配的速度和成功率,提升用户体验。
基于第一方面,第二种可能的实施方式中,确定内存中需要换出的内存页面时,具体如下:对于每个指定的进程,遍历所述进程的各VMA对应的各级页目录和各页表,其中:对于当前遍历的VMA,确定当前遍历的VMA对应的页表项对应的页框,并将所确定的页框从LRU链表中隔离,并存储至隔离页链表中;若所述隔离页链表中的页框数目达到设定阈值或即将遍历下一个VMA,将所述隔离页链表中存储的页框确定为需要换出的内存页面。
进一步的,对于每个需要换出的内存页面,按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务(即多页面回收任务),所述工作任务以所述隔离页链表、以及所述隔离页链表中的页框对应的VMA作为参数,且以页框链表回收函数作为工作函数。
第二种可能的实施方式适用于指定内存回收场景下内存页面的回收过程,实现了上层所指定的进程所占内存对应的页面的并行换出过程,提高了回收指定进程所占的内存对应的页面换出的效率,提升用户体验。
第二方面,本发明实施例提供了一种内存管理方法,该方法可应用于在应用线程出现页面异常时内存页面的换入,所述方法包括:在确定发生缺页异常时,确定当前访问的内存地址对应的内存页面已从所述内存换出;生成用于对已换出的内存页面执行换入的工作任务(即单页面换入任务),所述工作任务以已换出的内存页面在交换分区或交换缓存中的位置信息、当前访问的内存地址、已换出的内存页面所属进程的VMA、以及用于为已换出的内存页面在所述内存中分配页框的页框分配标识作为参数,且以页面异步换入函数作为工作函数;确定专用工作线程,并将每个所述工作任务分配给专用工作线程执行。根据per-cpu工作线程的运行原理,优选空闲态的专用工作线程。
进一步的,所述方法还包括:确定已换出的内存页面在所述交换分区或所述交换缓存中的相邻页面;对于每个相邻页面,生成用于对所述相邻页面执行换入的工作任务,所述工作任务中包含所述相邻页面在所述交换分区或所述交换缓存的位置信息、当前访问的内存地址、已换出的内存页面所属的进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识、及页面异步换入函数;确定专用工作线程,并将每个所述工作任务分配给专用工作线程执行。根据per-cpu工作线程的运行原理,优选空闲态的专用工作线程。
采用该方法可以将换入页面的相邻页面换入至内存中,提升应用进程缺页异常时的换入效率,提升用户体验。
第三方面,本发明实施例还提供一种内存管理装置,包括可实现第一方面或第二方面的任意一种实现方式的一个或多个模块,每个模块可执行一个或多个步骤。
第四方面,本发明实施例还提供一种终端设备,该终端设备包括处理器和存储器,所述存储器用于存储软件程序,所述处理器用于读取所述存储器中存储的软件程序并实现第一方面或第二方面的任意一种实现方式提供的方法。
第五方面,本发明实施例中还提供一种计算机存储介质,该存储介质可以是非易失性的,即断电后内容不丢失。该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现第一方面或第二方面的任意一种实现方式提供的方法。
附图说明
图1为本发明实施例应用的终端设备的结构示意图;
图2为本发明实施例提供的一种内存管理方法的流程示意图;
图3为本发明实施例1提供的一种内存页面换出过程的流程示意图;
图4为本发明实施例1提供的一种内存页面换出过程的时序图;
图5为本发明实施例2提供的一种内存页面换出过程的流程示意图;
图6为本发明实施例2提供的一种内存页面换出过程的时序图;
图7为本发明实施例3提供的一种内存页面换入过程的流程示意图;
图8为本发明实施例3提供的一种内存页面换入过程的时序图;
图9为本发明实施例提供的内存回收机制与现有内存回收机制的效果对比示意图;
图10为本发明实施例应用于Android操作系统的示意图;
图11为本发明实施例提供的一种内存管理装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的内存管理方法主要应用于使用Linux内核的操作系统且具有多核CPU的终端设备。终端设备也可称之为用户设备(User Equipment,简称为“UE”)、移动台(Mobile Station,简称为“MS”)、移动终端(Mobile Terminal)等,可选的,该终端可以具备经无线接入网(Radio Access Network,RAN)与一个或多个核心网进行通信的能力,例如,终端可以是移动电话(或称为“蜂窝”电话)、或具有移动性质的计算机等,例如,终端还可以是便携式、袖珍式、手持式、计算机内置的或者车载的移动装置。应理解的是,除了终端设备以外,本发明实施例提供的内存管理方法也可以应用于其他类型的计算机系统,如家电设备、服务器等。
本发明实施例利用多核CPU的并行处理能力,在软件层面实现多个内存页面的换入和/或换出,从而提高内存页面的换入和/或换出的速度,从而提升应用的用户体验。
请参考图1,为本发明实施例应用的终端设备的结构示意图。如图1所示,终端设备100包括存储器180、处理器150以及显示设备140。存储器180存储计算机程序,该计算机程序包括操作系统程序182和应用程序181等。处理器150用于读取存储器180中的计算机程序,然后执行计算机程序定义的方法,例如处理器150读取操作系统程序182从而在该终端设备100上运行操作系统以及实现操作系统的各种功能,或读取一种或多种应用程序181,从而在该终端设备上运行应用。
处理器150可以包括一个或多个处理器,例如,处理器150可以包括一个或多个中央处理器,或者包括一个中央处理器和一个图形处理器。当处理器150包括多个处理器时,这多个处理器可以集成在同一块芯片上,也可以各自为独立的芯片。一个处理器可以包括一个或多个处理核。
另外,存储器180还存储有除计算机程序之外的其他数据183,其他数据183可包括操作系统182或应用程序181被运行后产生的数据,该数据包括系统数据(例如操作系统的配置参数)和用户数据,例如用户打开的应用程序所缓存的数据就是典型的用户数据。
存储器180一般包括内存和外存。内存可以为随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)等。外存可以为硬盘、光盘、USB盘、软盘或磁带机等。计算机程序通常被存储在外存上,处理器在执行处理前会将计算机程序从外存加载到内存。本发明实施例中待解码的文件通常存储在外存上,处理器在对其执行解码之前会将该文件从外存加载到内存。本发明实施例提供的方法通过多核CPU的并行处理实现内存页面快速的换入和换出操作,以提高用户体验。
操作系统程序182中包含了可实现本发明实施例提供的内存管理方法的计算机程序,从而使得处理器150读取到该操作系统程序182并运行该操作系统后,该操作系统可具备本发明实施例提供的并行换入和/或换出功能。进一步的,该操作系统可以向上层的应用开放该并行换入和/或换出功能的调用接口,处理器150从存储器中180中读取应用程序181并运行该应用后,该应用就可以通过该调用接口调用操作系统中提供的并行的页面换入和/或页面换出功能,从而实现内存页面的并行换入和/或换出。
终端设备100还可以包括输入设备130,用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及产生与终端设备100的用户设置以及功能控制有关的信号输入等。
终端设备100还可以包括显示设备140,显示设备140,包括显示面板141,用于显示由用户输入的信息或提供给用户的信息以及终端设备100的各种菜单界面等。在其他一些实施例中,触控面板131可覆盖显示面板141上,形成触摸显示屏。
除以上之外,终端设备100还可以包括用于给其他模块供电的电源190以及用于拍摄照片或视频的摄像头160。终端设备100还可以包括一个或多个传感器120,例如加速度传感器、光传感器等。终端设备100还可以包括无线射频(Radio Frequency,RF)电路110,用于与无线网络设备进行网络通信,还可以包括WiFi模块170,用于与其他设备进行WiFi通信。
下面的实施例将介绍本发明实施例提供的内存管理方法。本发明实施例提供的内存管理方法可以实现在图1所示的操作系统程序182中。
请参考图2,为本发明实施例提供的一种内存管理方法的示意图,所述方法包括:
S21、确定内存中需要换出的内存页面;
其中,内存可以是随机存取存储器(Random-Access Memory,简称RAM),高速缓冲存储器(Cache)等。本发明实施例不对内存的类型进行限定。
S22、对于每个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务;
S23、确定空闲态的专用工作线程,并将每个所述工作任务分配给空闲态的专用工作线程执行。
其中,多核CPU包含的每个CPU中配置一个用于处理本发明实施例所生成的工作任务的专用工作线程,而每一个专用工作线程有一个对应的工作队列,专用工作线程在对应的CPU上处理工作队列中的工作任务。当专用工作线程的工作队列中没有未处理的工作任务时,该工作队列对应的工作线程即处于空闲状态。
根据per-cpu workqueue的机制原理,相同的工作任务(封装的工作任务实体相同,但实体内部的包含的页框描述符或页框链表不同),如果在工作线程的工作队列中已存在,那么是不允许再插入该工作任务的;若相同的工作任务已从队列中取出,但还未处理完,这时是允许插入相同工作任务。所以为保证专用工作线程工作的连续性,以及分配到各专用工作线程的工作任务量比较均衡,优选的,尽量在这些工作线程处于最佳状态(它正在处理一个工作任务,且它的工作队列中已没有需要处理的工作任务)时,插入新的工作任务。本发明实施例中所说的空闲态,是指工作队列中已没有需要处理的工作任务,包含上述的最佳状态。
本发明实施例中,确定内存中需要换出的内存页面;对于每个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务;确定空闲态的专用工作线程,并将每个所述工作任务分配至空闲态的专用工作线程中执行,从而实现了多CPU并行处理内存回收,加速了内存回收的速度,提高了用户体验。
下面通过三个具体应用场景,对本发明实施例提供的一种内存管理方法进行说明。
一、内存分配场景下触发的内存页面的换出(swap out)过程,例如新打开应用程序或进程时,需要为新打开的应用程序或进程分配内存。
该场景下,执行上述S21~S23的内存页面换出的线程为内存申请线程或守护线程(kswapd)。
该场景下,S21中确定内存中需要换出的内存页面包括以下两种可能的实施方式:
方式1、对于内存的最近最少使用(Least Recently Used,简称LRU)链表中的每个页框(page frame),若确定所述页框已脏且允许回写,或者允许换出,确定所述页框内的内存页面为需要换出的内存页面。
其中,回写是指将内存页面的数据写回文件系统,而换出是指将内存页面数据交换到交换分区中。
该方式中,依次扫描各LRU链表中的页框,若确定所述页框已脏且允许回写,或者允许换出,则将该页框内存储的内存页面确定为需要换出的内存页面。其中,允许回写且已脏的页框是指文件加载到内存后被修改且还未同步到文件系统中的页框,是否允许回写由扫描控制结构信息确定;允许换出的页框是指进程的内存数据,如堆栈数据,允许换出的页框会被强制设为已脏。
方式2、对于内存的LRU链表中的每个页框,若根据指示确定所述页框需要回收且根据内存的扫描控制结构信息确定需要移除所述页框与进程的所有映射关系,确定所述页框中的内存页面为需要换出的内存页面。该指示通常来自于应用层的应用。
该方式中,扫描控制结构信息(struct scan_control)是用于在内存回收过程中,决定将要扫描的页框总数、是否允许移除页框的所有映射关系、是否允许回写,以及对应目标VMA(target_VMA)等信息的结构体,其中,target_VMA是指页框映射到进程中的虚拟内存区域。根据扫描控制结构中的target_VMA字段,确定是否需要移除页框的所有映射关系,其中当扫描控制结构中的target_VMA字段为空指针时,表示需要移除页框的所有映射关系。
该方式中,可根据上层(如应用层)指示,确定页框是否需要强制回收,即强制回收。
该场景下,S22中对于每个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务的一种可能的实施方式包括:
将所述内存页面所在的页框的页框描述符、所述扫描控制结构信息、用于指示是否更新页框的转换表项内容的标志位作为参数,并将封装单页框回收函数作为工作函数,按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务。其中,标志位是上层指示的。
其中,页框描述符(struct page)是用于维护内存中每一个物理页(即内存页面)的具体信息的结构体;
标志位ttu_flag是在移除页框的映射关系时,用于决定是否更新指定类型的页框的标志,例如:已锁定的页面,需迁移的页面等。每种类型的页框对应不同的标志位,根据页框的类型,确定对应的标志位,并根据该标志位的具体取值,确定是否更新页框在相应进程中的转换表项内容。例如,标志位为1时,表示忽略该类型的页框,即不需要更新该类型的页框的转换表项内容;标志位为0时,表示需要更新该类型的页框的转换表项内容。
该场景下,所生成的工作任务记为struct single_reclaim_info,保存该工作任务相关的信息,一种可能的实现形式中,所生成的工作任务由<1>页框描述符page,<2>扫描控制结构sc,<3>页框类型处理标志ttu_flags,<4>工作任务work组成,其中,工作任务work内包含指向工作函数的字段func。
该场景下,所述单页框回收函数用于执行如下处理:
根据所述页框描述符、所述标志位和所述扫描控制结构中的target_VMA字段,移除对应的页框与进程的所有映射关系;根据所述页框描述符、所述页框对应的地址空间(struct address_space)和所述扫描控制结构信息,将所述页框内的数据写入至交换分区或回写至文件系统中。其中,所述页框对应的地址空间包含回写或交换该类型页框对应的处理函数。
下面通过一个具体实施例,对内存分配过程中触发的页面换出过程进行详细说明。
实施例1、请参考图3,为本实施例描述的页面换出过程的示意图,包括如下流程:
步骤301、扫描各LRU链表中的页框;
步骤302、对于每个页框,判断是否满足设定条件,其中,所述设定条件包括指示强制回收且需要移除页框的所有映射关系、或者页框已脏且允许回写、或者允许换出;
若是,则执行步骤303;
若否,则执行步骤308;
步骤303、以页框描述符(struct page)、扫描控制结构信息(struct scan_control)和ttu_flag为参数,且以封装单页框回收函数作为工作函数,生成页框对应的工作任务;
步骤304、遍历系统中所有可用的CPU,查找具有空闲态的专用工作线程的CPU,即查找没有pending状态任务的CPU;
步骤305、判断是否存在具有空闲状态的专用工作线程的CPU,即判断是否存在没有pending状态任务的CPU;
若是,则执行步骤307;
若否,则执行步骤306;
步骤306、等待工作线程执行完一个页面回收工作任务后唤醒,继续执行步骤307;
步骤307、优先选择非当前线程所在的CPU,将所生成的工作任务插入到空闲态的专用工作线程的工作队列中,继续执行步骤310;
步骤308、判断该页框是否可释放;例如,没有其他进程引用或映射该页框,且页框不脏且不处于回写状态,且页框未指向任何地址空间(struct address_space),满足上述所有条件的页框允许释放。
若是,则执行步骤309;
若否,则执行步骤310;
步骤309、将该页框释放回内存管理器中;
步骤310、判断当前内存是否满足此次申请的内存大小或者当前已无页面可扫描;
若是,结束流程;
若否,返回步骤302。
本实施例的执行主体为内存申请线程或守护线程(kswapd)。本实施例的时序图如图4所示,内存申请线程或kswapd线程将生成的单页面回收任务插入per-cpu工作线程的工作队列中;per-cpu工作线程通过内存管理器释放已换出页面对应的页框;若内存申请线程或kswapd线程正在等待工作线程唤醒,则per-cpu工作线程在执行完一个任务后唤醒内存申请线程或kswapd线程。图4提供的运行时序图仅示例性的介绍了本发明提供的页面换出方法的一种可能的实施例,本领域技术人员根据本发明前述实施例介绍的多种方法以及图4所示运行时序图的示例容易得到本发明提供的其他页面换出方法实施例对应的运行时序图以及根据时序图做相应的程序实现,在此不再赘述。
二、回收内存中的进程所占用的内存过程中的页面换出场景,例如,当系统可用内存低于设定阈值时,触发页面换出过程。
该场景下,执行上述S21~S23的内存页面换出的线程为内存回收线程。
该场景下,S21中确定内存中需要换出的内存页面,包括:
对于每个指定的进程,遍历所述进程的各虚拟内存区域(Virtual Memory Area,简称VMA)对应的各级页目录和各页表,其中:
对于当前遍历的VMA,确定当前遍历的VMA对应的页表项对应的页框,并将所确定的页框从LRU链表中隔离,并存储至隔离页链表中;
若所述隔离页链表中的页框数目达到设定阈值或即将遍历下一个VMA,将所述隔离页链表中存储的页框确定为需要换出的内存页面。
其中,隔离页链表只存在进程内存回收的过程中,回收完成后便销毁。隔离页链表是一个由隔离页框组成的链表,隔离页框是指从LRU链表中隔离出来的页框。
需要说明的是,每个进程均对应一个转换表,该转换表中记录从虚拟地址转换成对应页框,该转换表由多级页目录和页表组成,如:上级页目录中的每一项指向一个中级页目录,而中级页目录中的每一项指向一个页表,页表中的每一项指向一个实际的页框。
该场景下,S22中对于每个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务的一种可能的实施方式为:
将所述隔离页链表和所述隔离页链表中的页框对应的VMA作为参数,并将页框链表回收函数作为工作函数,按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务。
该方式中,所生成的工作任务记为struct list_reclaim_info,保存该工作任务相关的信息,一种可能的实现方式中,所生成的工作任务由<1>隔离页链表page_list,<2>页框对应的虚拟内存区域VMA,<3>工作任务work组成,其中工作任务work内部包含指向工作函数的字段func。
该方式中,页框链表回收函数的主要流程:首先遍历所述工作任务中的隔离页链表,清除所有页框对应的页框描述符中的活动标识;然后再遍历所述工作任务中的隔离页链表,依次取出每个页框描述符,尝试回收该页框;最后将未回收的页框插回LRU链表中。其中,活动标识表示页框是否处于活跃被访问的状态,可以用于页框LRU(活跃LRU和非活跃LRU)的分组。
下面通过一个具体实施例,对回收内存中的进程所占用的内存过程中的页面换出过程进行详细说明。
实施例2、请参考图5,为本实施例描述的页面换出过程的示意图,包括如下流程:
步骤501、遍历进程的各VMA对应的各级页目录和各页表,过滤掉页面不在内存中的页表项;
步骤502、判断是否遍历完当前VMA且隔离页链表不为空;
若是,则执行步骤505;
若否,则执行步骤503;
步骤503、从LRU链表中隔离当前VMA对应的各页表项对应的页框,并将所隔离的页框的页框描述符加入到隔离页链表中;
步骤504、检查隔离页链表中的页框数是否达到单次交换页数,该单次交换页数一般默认为32;
若是,则执行步骤505;
若否,则执行步骤510;
步骤505、以隔离页链表、对应target_VMA(即当前遍历的VMA)为参数,以页框链表回收函数为工作函数,生成工作任务,继续执行步骤506。
步骤506、遍历系统中所有可用的CPU,查找具有空闲态的专用工作线程的CPU,即查找没有pending状态任务的CPU,继续执行步骤507;
步骤507、判断是否存在具有空闲状态的专用工作线程的CPU,即判断是否存在没有pending状态任务的CPU;
若是,则执行步骤509;
若否,则执行步骤508;
步骤508、等待工作线程执行完一个页面回收工作任务后唤醒,继续执行步骤509;
步骤509、优先选择非当前线程所在的CPU,将所生成的工作任务插入到空闲态的专用工作线程的工作队列中,继续执行步骤510;
步骤510、检查该进程所有虚拟地址空间是否都已遍历完成;
若是,则执行步骤511;
若否,返回步骤501;
步骤511、等待各CPU的专用工作线程完成内存页框回收工作任务。
本实施例的执行主体为内存回收线程。本实施例的时序图如图6所示,内存回收线程向per-cpu工作线程的工作队列中插入多页面回收任务;per-cpu工作线程通过内存管理器释放已换出页面对应的页框;若内存回收线程正在等待工作线程唤醒,则per-cpu工作线程在执行完一个任务后唤醒内存回收线程。图6提供的运行时序图仅示例性的介绍了本发明提供的页面换出方法的一种可能的实施例,本领域技术人员根据本发明前述实施例介绍的多种方法以及图6所示运行时序图的示例容易得到本发明提供的其他页面换出方法实施例对应的运行时序图以及根据时序图做相应的程序实现,在此不再赘述。
三、进程缺页异常场景下触发的页面换入(swap in)过程。
该场景下,所述方法还包括在确定发生缺页异常时,换入对应的内存页面,具体如下:
在确定发生缺页异常时,确定当前访问的内存地址对应的内存页面已从所述内存换出;如,从内存换出至交换分区,或从内存缓存至交换缓存(swap cache)中;
将已换出的内存页面在交换分区或交换缓存中的位置信息、当前访问的内存地址、已换出的内存页面所属进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识作为参数,并将页面异步换入函数作为为工作函数,生成用于对已换出的内存页面执行换入的工作任务;
从当前可用的CPU中,确定具有空闲态的专用工作线程的CPU,并将所生成的工作任务分配至所确定的CPU的专用工作线程中执行。
需要说明的是,一个页框可能被多个进程映射,当一个页框被回收时,将移除该页框与所有进程的映射关系;而当一个进程从交换分区换入一个页面后,会将该页面对应的页框映射到该进程中,同时把该页框插入到swap cache中,避免其他进程访问该页面时重复从交换分区换入。
该场景下,所述方法还包括换入已换出的内存页面的相邻页面,具体如下:
确定已换出的内存页面在所述交换分区或所述交换缓存中的相邻页面;
对于每个相邻页面,将所述相邻页面在所述交换分区或所述交换缓存的位置信息、当前访问的内存地址、已换出的内存页面所属的进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识确定为参数,并将页面异步换入函数确定为工作函数,生成用于对所述相邻页面执行换入的工作任务;
从当前可用的CPU中,确定具有空闲态的专用工作线程的CPU,并将每个所述工作任务分配至所述空闲态的专用工作线程中执行。
该场景下,通过访问页面对应的pte转换成swapslot,可以确定出该页面所在的交换分区以及在交换分区中的具体位置,由交换分区类型和交换分区内部偏移组成;将交换分区上与之相邻的页面的swapslot与被访问的进程地址(即访问出错的进程地址)及对应的进程VMA(即缺页异常页面所在的进程虚拟内存区域),用于为已换出的内存页面在所述内存中分配页框的页框分配标识gfp_mask作为参数,以页面异步换入函数作为工作函数,生成用于对所述相邻页面执行换入的工作任务。
其中,页面异步换入函数的主要流程:首先从swap cache中查找是否存在需要读入的页框;若不存在,则分配一个空闲页框并插入swap cache中,然后再从对应的交换分区的对应页框读入数据到刚分配的内存页框中);
所生成的工作任务记为struct single_swapin_info,保存该工作任务相关的信息,一种可能的方式中,所生成的工作任务由<1>交换分区的页框信息swapslot,<2>页框分配标识gfp_mask,<3>页框对应的进程虚拟内存区域VMA,<4>被访问的进程地址addr,<5>工作任务work组成,其中,工作任务work内部包含指向工作函数的字段func。
该场景下,不仅换入缺页异常的内存页面,还换入该内存页面所在交换分区或交换缓存中的相邻页面,由于采用多CPU并行处理换入过程,从而加速了内存页面换入,降低了缺页异常进程瞬间的性能损失,减少了应用热启动的时间,提高了用户体验。
下面通过一个具体实施例,对进程缺页异常场景下页面换入过程进行详细说明。
实施例3、请参见图7,为本实施例描述的页面换入过程的示意图,包括如下流程:
步骤701、缺页异常处理时,检查访问的内存地址对应的页面是否已换出;
若是,则执行步骤702;
若否,结束流程;
步骤702、将交换分区上已换出的页面的相邻页面的swapslot、被访问的进程地址、对应的进程VMA、页框分配标识gfp_mask作为参数,以页面异步换入函数作为工作函数生成相应的工作任务。
步骤703、遍历系统中所有可用的CPU,查找具有空闲态的专用工作线程的CPU,即查找没有pending状态任务的CPU;
步骤704、判断是否存在具有空闲状态的专用工作线程的CPU,即判断是否存在没有pending状态任务的CPU;
若是,则执行步骤706;
若否,则执行步骤705;
步骤705、等待工作线程执行完一个页面换入工作任务后唤醒,继续执行步骤706;
步骤706、优先选择非当前线程所在的CPU,将所生成的工作任务插入到空闲态的专用工作线程的工作队列中;
步骤707、检查交换分区上缺页异常页面的相邻页面是否都已换入完成;
若是,则执行步骤708;
若否,返回步骤702继续换入相邻页面;
步骤708、换入导致当前缺页异常的页面。
本实施例的执行主体为缺页异常处理线程。本实施例的运行时序图如图8所示,应用线程出现缺页异常后,向per-cpu工作线程的工作队列中插入单页面换入任务;per-cpu工作线程在换入页面数据之前,会先通过内存管理器分配一空闲内存页(即页框);应用线程在换入页面数据之前,会先通过内存管理器分配一空闲内存页。图8提供的运行时序图仅示例性的介绍了本发明提供的页面换入方法的一种可能的实施例,本领域技术人员根据本发明前述实施例介绍的多种方法以及图8所示运行时序图的示例容易得到本发明提供的其他页面换入方法实施例对应的运行时序图以及根据时序图做相应的程序实现,在此不再赘述。
本发明实施例中,由于采用多CPU并行处理,换出和换入过程可以同时执行,从而进一步加速了内存页面换入和换出过程,提高了用户体验。
请参见图9,为采用单线程处理页面换出与采用本发明实施例提供的多线程并行处理页面换出的效果对比图,优化前即采用单线程处理的页面换出,优化后即多线程并行处理的页面换出,图9中通过四种不同应用,分别从回收的耗时(Elapsed),换出的数据量(Sectors),回收的页框数(Reclaim_pages),每页的回收耗时(Elapsed/page),平均每页的回收耗时(Average elapsed/page),性能提升对比(Performance)等方面,给出了采用单线程处理页面换出与采用本发明实施例提供的多线程并行处理页面换出的效果对比,可见,多线程并行处理的页面换出加速了内存页面换出过程。
以上主要介绍了本发明实施例提供的方法的具体流程,下面结合图10将以Android操作系统为例,介绍本发明实施例提供的方法的实现位置和运行时状态,更具体的方法流程可参考前述实施例所述。
请参阅图10,为本发明实施例提供的计算机系统400的结构示意图。该计算机系统400可以是终端设备,也可以是其他类型的计算机设备。该计算机系统包括应用层410和操作系统层460,该操作系统可以为Android操作系统。操作系统层460又分为框架层420、核心库层430和驱动层440。其中,图10中的操作系统层460可以认为是图1中操作系统182的一种具体实现,图10中的应用层410可以认为是图1中应用程序181的一种具体实现。驱动层440包括CPU驱动441、GPU驱动442以及显示控制器驱动443等。核心库层430是操作系统的核心部分,包括输入/输出服务431、核心服务432等。框架层420可包括系统服务(Systemservice)421、网页服务(Web Service)422和用户服务(Customer Service)423等。应用层410可包括APP411、媒体播放器(Media Player)412以及浏览器(Browser)413等。
另外,在驱动层440之下,该计算机系统400还包括硬件层450。该计算机系统400的硬件层可以包括中央处理器(Central Processing Unit,CPU)451和图形处理器(GraphicProcessing Unit,GPU)452(相当于图1中的处理器150的一种具体实现),还可以包括存储器453(相当于图1中的存储器180),包括内存和外存,还可以包括输入设备454(相当于图1中的输入设备132)、显示设备455(相当于图1中的显示设备140),例如液晶显示器(LiquidCrystal Display,LCD)、全息成像(Holographic)、投影(Projector)等,还可以包括一个或多个传感器456(相当于图1中的传感器120)。当然除此之外,硬件层450还可以包括图1中示出的电源、摄像头、RF电路和WiFi模块,还可以包括图1中也没有示出的其他硬件模块,例如内存控制器和显示控制器等。
本发明前述任意一个实施例提供的方法均可以实现在图10所示的操作系统层460中。
通过以上介绍的装置和方法可以看出,应用本发明实施例提供的并行换入和/或换出方法的计算机系统可以在实现对内存页面的并行换入和/或换出,提高内存页面的换入和换出效率的同时,有效避免系统卡顿现象,从而提升用户体验。
请参见图11所示,为本发明实施例提供的内存管理装置,所述装置包括:
页面确定模块111,用于确定内存中需要换出的内存页面;
任务生成模块112,用于对于每个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务;
任务分配模块113,用于确定空闲态的专用工作线程,并将每个所述工作任务分配给空闲态的专用工作线程执行。
作为一种可能的实现方式,所述页面确定模块111具体用于:
对于内存的LRU链表中的每个页框,若确定所述页框已脏且允许回写,或者允许换出,确定所述页框内的内存页面为需要换出的内存页面;或者
对于内存的LRU链表中的每个页框,若根据指示确定所述页框需要回收且根据内存的扫描控制结构信息确定需要移除所述页框与进程的所有映射关系,确定所述页框中的内存页面为需要换出的内存页面。
进一步的,所述任务生成模块112具体用于:
按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务,所述工作任务中包含所述内存页面所在的页框的页框描述符、所述扫描控制结构信息、用于指示是否更新页框的转换表项内容的标志位和单页框回收函数;其中,所述单页框回收函数用于执行如下处理:
根据所述页框描述符、所述标志位和所述扫描控制结构中的目标虚拟内存空间VMA字段,移除对应的页框与进程的所有映射关系;根据所述页框描述符、所述页框对应的地址空间和所述扫描控制结构信息,将所述页框内的数据写入至交换分区或回写至文件系统中。
基于上述过程实现了内存分配过程中的内存页面的并行换出过程,提高了内存分配过程中页面换出的效率,提高了内存分配的速度和成功率,提升用户体验。
作为另一种可能的实现方式,所述页面确定模块111具体用于:
对于每个指定的进程,遍历所述进程的各VMA对应的各级页目录和各页表,其中:
对于当前遍历的VMA,确定当前遍历的VMA对应的页表项对应的页框,并将所确定的页框从LRU链表中隔离,并存储至隔离页链表中;若所述隔离页链表中的页框数目达到设定阈值或即将遍历下一个VMA,将所述隔离页链表中存储的页框确定为需要换出的内存页面。
进一步的,所述任务生成模块112具体用于:
按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务,所述工作任务中包含所述隔离页链表、所述隔离页链表中的页框对应的VMA和页框链表回收函数。
基于上述过程实现了上层所指定的进程所占内存对应的页面的并行换出过程,提高了回收指定进程所占的内存对应的页面换出的效率,提升用户体验。
基于上述任一实施例,所述页面确定模块111还用于:在确定发生缺页异常时,确定当前访问的内存地址对应的内存页面已从所述内存换出;
所述任务生成模块112还用于:生成用于对已换出的内存页面执行换入的工作任务,所述工作任务中包含已换出的内存页面在交换分区或交换缓存中的位置信息、当前访问的内存地址、已换出的内存页面所属进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识、及页面异步换入函数;
所述任务分配模块113还用于:确定空闲态的专用工作线程,并将每个所述工作任务分配给空闲态的专用工作线程执行。
在需要进行页面换入操作时,可触发所述页面确定模块111、所述任务生成模块112和所述任务分配模块113执行上述内存页面的并行换入处理,提高页面换入的效率,提升用户体验。
进一步的,所述页面确定模块111还用于:确定已换出的内存页面在所述交换分区或所述交换缓存中的相邻页面;
所述任务生成模块112还用于:对于每个相邻页面,生成用于对所述相邻页面执行换入的工作任务,所述工作任务中包含所述相邻页面在所述交换分区或所述交换缓存的位置信息、当前访问的内存地址、已换出的内存页面所属的进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识、及页面异步换入函数;
所述任务分配模块113还用于:从确定空闲态的专用工作线程,并将每个所述工作任务分配给空闲态的专用工作线程执行。
在执行页面换入处理时,还可以将该页面在交换分区或交换缓存中的相邻页面换入至内存中,提升应用进程缺页异常时的换入效率,提升用户体验。
本发明实施例提供的装置可以同时执行内存页面的并行换出和换入处理,也可以单独执行内存页面的并行换出处理和内存页面的并行换入处理。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (14)

1.一种内存管理方法,其特征在于,所述方法包括:
确定内存中需要换出的内存页面;
对于一个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务;
确定处于最佳状态的专用工作线程,并将每个所述工作任务分配给所述处于最佳状态的专用工作线程执行;所述专用工作线程是在多核中央处理器CPU中的一个CPU上预先配置的工作线程;
其中,所述处于最佳状态的专用工作线程是指正在处理一个工作任务,且工作队列中已没有需要处理的工作任务的工作线程。
2.根据权利要求1所述的方法,其特征在于,确定内存中需要换出的内存页面,包括:
对于内存的最近最少使用LRU链表中的每个页框,若确定所述页框已脏且允许回写,或者允许换出,确定所述页框内的内存页面为需要换出的内存页面;或者
对于内存的LRU链表中的每个页框,若根据指示确定所述页框需要回收且根据内存的扫描控制结构信息确定需要移除所述页框与进程的所有映射关系,确定所述页框中的内存页面为需要换出的内存页面。
3.根据权利要求2所述的方法,其特征在于,对于一个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务,包括:
按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务,所述工作任务中包含所述内存页面所在的页框的页框描述符、所述扫描控制结构信息、用于指示是否更新页框的转换表项内容的标志位和单页框回收函数;其中,所述单页框回收函数用于执行如下处理:
根据所述页框描述符、所述标志位和所述扫描控制结构中的目标虚拟内存空间VMA字段,移除对应的页框与进程的所有映射关系;根据所述页框描述符、所述页框对应的地址空间和所述扫描控制结构信息,将所述页框内的数据写入至交换分区或回写至文件系统中。
4.根据权利要求1所述的方法,其特征在于,确定内存中需要换出的内存页面,包括:
对于每个指定的进程,遍历所述进程的各VMA对应的各级页目录和各页表,其中:
对于当前遍历的VMA,确定所述当前遍历的VMA对应的页表项对应的页框,并将所确定的页框从LRU链表中隔离,并存储至隔离页链表中;若所述隔离页链表中的页框数目达到设定阈值或即将遍历下一个VMA,将所述隔离页链表中存储的页框确定为需要换出的内存页面。
5.根据权利要求4所述的方法,其特征在于,对于一个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务,包括:
按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务,所述工作任务中包含所述隔离页链表、所述隔离页链表中的页框对应的VMA和页框链表回收函数。
6.一种内存管理方法,其特征在于,所述方法包括:
在确定发生缺页异常时,确定当前访问的内存地址对应的内存页面已从所述内存换出;
生成用于对已换出的内存页面执行换入的工作任务,所述工作任务中包含已换出的内存页面在交换分区或交换缓存中的位置信息、当前访问的内存地址、已换出的内存页面所属进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识、及页面异步换入函数;
确定处于最佳状态的专用工作线程,并将每个所述工作任务分配给所述处于最佳状态的专用工作线程执行;所述专用工作线程是在多核中央处理器CPU中的一个CPU上预先配置的工作线程;
其中,所述处于最佳状态的专用工作线程是指正在处理一个工作任务,且工作队列中已没有需要处理的工作任务的工作线程。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
确定已换出的内存页面在所述交换分区或所述交换缓存中的相邻页面;
对于每个相邻页面,生成用于对所述相邻页面执行换入的工作任务,所述工作任务中包含所述相邻页面在所述交换分区或所述交换缓存的位置信息、当前访问的内存地址、已换出的内存页面所属的进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识、及页面异步换入函数;
确定处于空闲态的专用工作线程,并将每个所述工作任务分配给所述处于空闲态的专用工作线程执行;所述处于空闲态的专用工作线程是指工作队列中已没有需要处理的工作任务的工作线程。
8.一种内存管理装置,其特征在于,所述装置包括:
页面确定模块,用于确定内存中需要换出的内存页面;
任务生成模块,用于对于一个需要换出的内存页面,根据所述内存页面,生成用于对所述内存页面执行回收的工作任务;
任务分配模块,用于确定处于最佳状态的专用工作线程,并将每个所述工作任务分配给所述处于最佳状态的专用工作线程执行;所述专用工作线程是在多核中央处理器CPU中的一个CPU上预先配置的工作线程;
其中,所述处于最佳状态的专用工作线程是指正在处理一个工作任务,且工作队列中已没有需要处理的工作任务的工作线程。
9.根据权利要求8所述的装置,其特征在于,所述页面确定模块具体用于:
对于内存的最近最少使用LRU链表中的每个页框,若确定所述页框已脏且允许回写,或者允许换出,确定所述页框内的内存页面为需要换出的内存页面;或者
对于内存的LRU链表中的每个页框,若根据指示确定所述页框需要回收且根据内存的扫描控制结构信息确定需要移除所述页框与进程的所有映射关系,确定所述页框中的内存页面为需要换出的内存页面。
10.根据权利要求9所述的装置,其特征在于,所述任务生成模块具体用于:
按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务,所述工作任务中包含所述内存页面所在的页框的页框描述符、所述扫描控制结构信息、用于指示是否更新页框的转换表项内容的标志位和单页框回收函数;其中,所述单页框回收函数用于执行如下处理:
根据所述页框描述符、所述标志位和所述扫描控制结构中的目标虚拟内存空间VMA字段,移除对应的页框与进程的所有映射关系;根据所述页框描述符、所述页框对应的地址空间和所述扫描控制结构信息,将所述页框内的数据写入至交换分区或回写至文件系统中。
11.根据权利要求8所述的装置,其特征在于,所述页面确定模块具体用于:
对于每个指定的进程,遍历所述进程的各VMA对应的各级页目录和各页表,其中:
对于当前遍历的VMA,确定所述当前遍历的VMA对应的页表项对应的页框,并将所确定的页框从LRU链表中隔离,并存储至隔离页链表中;若所述隔离页链表中的页框数目达到设定阈值或即将遍历下一个VMA,将所述隔离页链表中存储的页框确定为需要换出的内存页面。
12.根据权利要求11所述的装置,其特征在于,所述任务生成模块具体用于:
按照设定的工作任务格式,生成需要换出的内存页面对应的工作任务,所述工作任务中包含所述隔离页链表、所述隔离页链表中的页框对应的VMA和页框链表回收函数。
13.一种内存管理装置,其特征在于,所述装置包括:
页面确定模块,用于在确定发生缺页异常时,确定当前访问的内存地址对应的内存页面已从所述内存换出;
任务生成模块,用于生成用于对已换出的内存页面执行换入的工作任务,所述工作任务中包含已换出的内存页面在交换分区或交换缓存中的位置信息、当前访问的内存地址、已换出的内存页面所属进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识、及页面异步换入函数;
任务分配模块,用于确定处于最佳状态的专用工作线程,并将每个所述工作任务分配给所述处于最佳状态的专用工作线程执行;所述专用工作线程是在多核中央处理器CPU中的一个CPU上预先配置的工作线程;
其中,所述处于最佳状态的专用工作线程是指正在处理一个工作任务,且工作队列中已没有需要处理的工作任务的工作线程。
14.根据权利要求13所述的装置,其特征在于,
所述页面确定模块还用于:确定已换出的内存页面在所述交换分区或所述交换缓存中的相邻页面;
所述任务生成模块还用于:对于每个相邻页面,生成用于对所述相邻页面执行换入的工作任务,所述工作任务中包含所述相邻页面在所述交换分区或所述交换缓存的位置信息、当前访问的内存地址、已换出的内存页面所属的进程的VMA、用于为已换出的内存页面在所述内存中分配页框的页框分配标识、及页面异步换入函数;
所述任务分配模块还用于:确定处于空闲态的专用工作线程,并将每个所述工作任务分配给所述处于空闲态的专用工作线程执行;所述处于空闲态的专用工作线程是指工作队列中已没有需要处理的工作任务的工作线程。
CN201610860581.5A 2016-09-28 2016-09-28 一种内存管理方法和装置 Active CN107885666B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN201610860581.5A CN107885666B (zh) 2016-09-28 2016-09-28 一种内存管理方法和装置
EP17854533.1A EP3514689B1 (en) 2016-09-28 2017-07-13 Memory management method and apparatus
PCT/CN2017/092855 WO2018059079A1 (zh) 2016-09-28 2017-07-13 一种内存管理方法和装置
US16/368,511 US10990540B2 (en) 2016-09-28 2019-03-28 Memory management method and apparatus
US17/239,204 US11531625B2 (en) 2016-09-28 2021-04-23 Memory management method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610860581.5A CN107885666B (zh) 2016-09-28 2016-09-28 一种内存管理方法和装置

Publications (2)

Publication Number Publication Date
CN107885666A CN107885666A (zh) 2018-04-06
CN107885666B true CN107885666B (zh) 2021-07-20

Family

ID=61763683

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610860581.5A Active CN107885666B (zh) 2016-09-28 2016-09-28 一种内存管理方法和装置

Country Status (4)

Country Link
US (2) US10990540B2 (zh)
EP (1) EP3514689B1 (zh)
CN (1) CN107885666B (zh)
WO (1) WO2018059079A1 (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664411A (zh) * 2018-05-03 2018-10-16 晶晨半导体(上海)股份有限公司 一种内存链表及内存管理的优化方法
US10977172B2 (en) * 2018-06-03 2021-04-13 Apple Inc. Memory page reclamation in a user idle mode
CN110955614B (zh) * 2018-09-26 2022-05-03 Oppo广东移动通信有限公司 文件缓存的回收方法、装置、存储介质及终端
CN109408405B (zh) * 2018-10-15 2021-03-09 Oppo广东移动通信有限公司 内存页交换方法、装置、终端及存储介质
US11409727B2 (en) 2019-09-18 2022-08-09 International Business Machines Corporation Concurrent execution of database operations
CN115757193B (zh) * 2019-11-15 2023-11-03 荣耀终端有限公司 一种内存的管理方法及电子设备
CN110955495B (zh) * 2019-11-26 2022-08-05 网易(杭州)网络有限公司 虚拟化内存的管理方法、装置和存储介质
CN111078586B (zh) * 2019-12-10 2022-03-01 Oppo(重庆)智能科技有限公司 内存回收方法、装置、存储介质及电子设备
CN111078406B (zh) * 2019-12-10 2023-01-10 Oppo(重庆)智能科技有限公司 内存管理方法、装置、存储介质及电子设备
CN111177024B (zh) * 2019-12-30 2022-09-06 青岛海尔科技有限公司 一种内存优化处理方法及装置
CN111352863B (zh) * 2020-03-10 2023-09-01 腾讯科技(深圳)有限公司 内存管理方法、装置、设备及存储介质
CN113590509B (zh) * 2020-04-30 2024-03-26 华为技术有限公司 一种页交换的方法、存储系统和电子设备
KR102400977B1 (ko) * 2020-05-29 2022-05-25 성균관대학교산학협력단 프로세서를 통한 페이지 폴트 처리 방법
CN111666226B (zh) * 2020-06-16 2022-09-13 北京紫光展锐通信技术有限公司 操作系统内存回收的页颠簸保护方法及用户设备
CN111831411A (zh) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 任务处理方法、装置、存储介质及电子设备
CN111858393B (zh) * 2020-07-13 2023-06-02 Oppo(重庆)智能科技有限公司 内存页面管理方法、内存页面管理装置、介质与电子设备
CN113296932B (zh) * 2020-07-27 2024-02-13 阿里巴巴集团控股有限公司 实现内存换出-换入的系统及方法
CN112052089B (zh) * 2020-09-01 2023-03-28 Oppo(重庆)智能科技有限公司 内存回收方法、装置以及电子设备
CN114356537A (zh) * 2020-10-12 2022-04-15 华为技术有限公司 内存管理方法、电子设备以及计算机可读存储介质
US11650747B2 (en) * 2021-06-10 2023-05-16 Vmware, Inc. High throughput memory page reclamation
CN114461375B (zh) * 2021-07-30 2023-01-20 荣耀终端有限公司 内存资源管理方法及电子设备
US20230121841A1 (en) * 2021-10-19 2023-04-20 EMC IP Holding Company LLC Facilitating per-cpu reference counting for multi-core systems with a long-lived reference
CN114840330A (zh) * 2022-03-01 2022-08-02 阿里巴巴(中国)有限公司 一种内存回收方法、装置及控制设备
CN117785370A (zh) * 2022-09-20 2024-03-29 成都华为技术有限公司 一种页面换出方法、装置、设备及数据处理系统
CN115858046B (zh) * 2023-02-28 2023-07-21 荣耀终端有限公司 一种预加载内存页的方法、电子设备及芯片系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175834A (en) * 1989-04-14 1992-12-29 Nec Corporation Swapping apparatus with reduced secondary storage based on frequency of use of page regions
CN101403992A (zh) * 2008-07-18 2009-04-08 华为技术有限公司 实现远程内存交换的方法、装置及系统
CN102184140A (zh) * 2011-04-01 2011-09-14 航天恒星科技有限公司 一种面向实时数据库的表文件空间分配方法
WO2014094472A1 (zh) * 2012-12-17 2014-06-26 华为技术有限公司 一种全局内存共享方法、装置和一种通信系统
CN104881241A (zh) * 2014-02-28 2015-09-02 华为技术有限公司 交换操作的实现方法和装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231155A (zh) * 2011-06-03 2011-11-02 中国石油集团川庆钻探工程有限公司地球物理勘探公司 三维地震数据管理及组织方法
US8904068B2 (en) * 2012-05-09 2014-12-02 Nvidia Corporation Virtual memory structure for coprocessors having memory allocation limitations
KR20140035082A (ko) 2012-09-13 2014-03-21 삼성전자주식회사 메모리 관리방법
CN104008061B (zh) 2013-02-22 2018-01-23 华为技术有限公司 内存回收方法及装置
CN103150259B (zh) * 2013-03-22 2016-03-30 华为技术有限公司 一种内存回收方法和装置
KR102254099B1 (ko) * 2014-05-19 2021-05-20 삼성전자주식회사 메모리 스와핑 처리 방법과 이를 적용하는 호스트 장치, 스토리지 장치 및 데이터 처리 시스템
CN104461737B (zh) 2014-12-10 2018-01-16 广东欧珀移动通信有限公司 一种内存管理方法和装置
US20160188490A1 (en) * 2014-12-26 2016-06-30 Intel Corporation Cost-aware page swap and replacement in a memory
US20160267005A1 (en) * 2015-03-12 2016-09-15 Qualcomm Incorporated Memory reclamation on a computing device
CN106155879B (zh) * 2015-03-26 2018-11-13 阿里巴巴集团控股有限公司 内存泄露的检测方法和装置
CN105159777B (zh) 2015-08-03 2018-07-27 中科创达软件股份有限公司 进程的内存回收方法及装置
CN105701025B (zh) * 2015-12-31 2019-07-23 华为技术有限公司 一种内存回收方法及装置
CN105740170B (zh) * 2016-01-22 2020-12-04 浪潮(北京)电子信息产业有限公司 一种缓存脏页刷写方法及装置
US10108554B2 (en) * 2016-12-05 2018-10-23 Intel Corporation Apparatuses, methods, and systems to share translation lookaside buffer entries

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175834A (en) * 1989-04-14 1992-12-29 Nec Corporation Swapping apparatus with reduced secondary storage based on frequency of use of page regions
CN101403992A (zh) * 2008-07-18 2009-04-08 华为技术有限公司 实现远程内存交换的方法、装置及系统
CN102184140A (zh) * 2011-04-01 2011-09-14 航天恒星科技有限公司 一种面向实时数据库的表文件空间分配方法
WO2014094472A1 (zh) * 2012-12-17 2014-06-26 华为技术有限公司 一种全局内存共享方法、装置和一种通信系统
CN104881241A (zh) * 2014-02-28 2015-09-02 华为技术有限公司 交换操作的实现方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于对象的反向映射机制的研究;魏绍蓉 等;《实验室研究与探索》;20130131;第32卷(第1期);第67-69页 *

Also Published As

Publication number Publication date
US20190220418A1 (en) 2019-07-18
EP3514689B1 (en) 2024-04-17
WO2018059079A1 (zh) 2018-04-05
US11531625B2 (en) 2022-12-20
US20210240636A1 (en) 2021-08-05
EP3514689A4 (en) 2019-09-11
EP3514689A1 (en) 2019-07-24
CN107885666A (zh) 2018-04-06
US10990540B2 (en) 2021-04-27

Similar Documents

Publication Publication Date Title
CN107885666B (zh) 一种内存管理方法和装置
US10963387B2 (en) Methods of cache preloading on a partition or a context switch
WO2015169145A1 (zh) 内存管理方法和设备
CN106970881B (zh) 一基于大页的冷热页追踪及压缩回收方法
CN113778662B (zh) 内存回收方法及装置
CN107003899B (zh) 一种中断响应方法、装置及基站
CN112579251B (zh) 虚拟机内存管理的方法及设备
EP3163451B1 (en) Memory management method and device, and memory controller
CN113204407A (zh) 一种内存超配管理方法及装置
US20190227918A1 (en) Method for allocating memory resources, chip and non-transitory readable medium
CN109408149A (zh) 应用程序的启动方法、装置、设备以及存储介质
US9772776B2 (en) Per-memory group swap device
WO2022121866A1 (zh) 一种基于加速卡的服务运行方法、装置、电子设备及计算机可读存储介质
CN111522659B (zh) 一种空间使用方法和装置
CN111666036B (zh) 一种迁移数据的方法、装置及系统
CN113138941A (zh) 内存交换的方法、装置
CN113590509B (zh) 一种页交换的方法、存储系统和电子设备
CN113010453A (zh) 一种内存管理的方法、系统、设备及可读存储介质
CN115981795B (zh) 一种在安卓设备上通过容器实现系统隔离的方法
CN117251292B (zh) 内存管理方法、系统、终端及存储介质
CN116680083A (zh) 内存处理方法、装置、设备和存储介质
KR20010038482A (ko) 운영체제의 커널 스택 동적 할당 방법
CN115129459A (zh) 一种内存管理的方法及设备
CN115729694A (zh) 一种资源管理的方法及相应装置
CN116954924A (zh) 内存管理方法、装置及电子设备

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
GR01 Patent grant
GR01 Patent grant