基于Linux内核的系统休眠内存管理方法及装置转让专利
申请号 : CN202110941103.8
文献号 : CN113392038B
文献日 : 2021-11-09
发明人 : 刘成城
申请人 : 北京鲸鲮信息系统技术有限公司
摘要 :
权利要求 :
1.一种基于Linux内核的系统休眠内存管理方法,其特征在于,包括:预先基于平台设备驱动机制将系统休眠所需的内存回收管理操作处理成功能模块;
响应于系统接收到进入休眠状态的操作,基于内核调用所述功能模块触发执行相应的内存回收管理操作,以减小存储到内存交换区域的休眠镜像文件的大小;
其中,所述基于内核调用所述功能模块触发执行相应的内存回收管理操作,具体包括:将所述功能模块动态载入到所述内核;在预设的时间阈值内,基于所述内核调用所述功能模块执行多个内存空间请求循环操作;
其中,在每个内存空间请求循环中进行如下步骤:向所述内核发送第一内存空间请求;所述第一内存空间请求所请求分配的内存空间为预设的初始最大值;
向所述内核发送第二内存空间请求;所述第二内存空间请求所请求分配的内存空间小于所述初始最大值;
循环发送所述第二内存空间请求,每次所述第二内存空间请求所请求分配的内存空间均小于上一次第二内存空间请求所请求分配的内存空间;其中,每个内存空间请求循环中第一内存空间请求对应的预设的初始最大值小于上一次内存空间请求循环中第一内存空间请求对应的预设的初始最大值;
直至满足所请求分配的内存空间达到预设的初始最小值或者达到所述预设的时间阈值时,停止所述内存空间请求循环操作;
释放基于所述内存空间请求循环操作得到的所有内存空间,向所述内核发出休眠请求,进入休眠。
2.根据权利要求1所述的基于Linux内核的系统休眠内存管理方法,其特征在于,所述循环发送所述第二内存空间请求,每次所述第二内存空间请求所请求分配的内存空间均小于上一次第二内存空间请求所请求分配的内存空间,具体包括:在循环发送所述第二内存空间请求中,每次所述第二内存空间请求所请求分配的内存空间为上一次第二内存空间请求所请求分配的内存空间的一半。
3.根据权利要求1所述的基于Linux内核的系统休眠内存管理方法,其特征在于,所述每个内存空间请求循环中第一内存空间请求对应的预设的初始最大值小于上一次内存空间请求循环中第一内存空间请求对应的预设的初始最大值,具体包括:每个内存空间请求循环的第一内存空间请求对应的预设的初始最大值为上一次内存空间请求循环的第一内存空间请求对应的预设的初始最大值的一半。
4.根据权利要求1所述的基于Linux内核的系统休眠内存管理方法,其特征在于,所述预先基于平台设备驱动机制将系统休眠所需的内存回收管理操作处理成功能模块,具体包括:
将所述内存回收管理操作封装为功能模块;
通过所述平台设备驱动机制将所述功能模块注册到所述内核。
5.根据权利要求1所述的基于Linux内核的系统休眠内存管理方法,其特征在于,还包括:在基于所述内核调用所述功能模块触发执行相应的内存回收管理操作时,通过动态调节相应的交互分区内核参数来控制内存使用的相对权重。
6.根据权利要求1所述的基于Linux内核的系统休眠内存管理方法,其特征在于,还包括:在所述第一内存空间请求所请求分配的内存空间时,将相应的交互分区内核参数设置为10;从下一次循环发送所述第二内存空间请求来请求分配的内存空间时开始,分别对应依次减1,直到所述交互分区内核参数减少为1。
7.一种基于Linux内核的系统休眠内存管理装置,其特征在于,包括:内核模块化处理单元,用于预先基于平台设备驱动机制将系统休眠所需的内存回收管理操作处理成功能模块;
内存回收管理单元,用于响应于系统接收到进入休眠状态的操作,基于内核调用所述功能模块触发执行相应的内存回收管理操作,以减小存储到内存交换区域的休眠镜像文件的大小;
所述内存回收管理单元,具体用于:将所述功能模块动态载入到所述内核;在预设的时间阈值内,基于所述内核调用所述功能模块执行多个内存空间请求循环操作;
其中,在每个内存空间请求循环中进行如下步骤:向所述内核发送第一内存空间请求;所述第一内存空间请求所请求分配的内存空间为预设的初始最大值;
向所述内核发送第二内存空间请求;所述第二内存空间请求所请求分配的内存空间小于所述初始最大值;
循环发送所述第二内存空间请求,每次所述第二内存空间请求所请求分配的内存空间均小于上一次第二内存空间请求所请求分配的内存空间;其中,每个内存空间请求循环中第一内存空间请求对应的预设的初始最大值小于上一次内存空间请求循环中第一内存空间请求对应的预设的初始最大值;
直至满足所请求分配的内存空间达到预设的初始最小值或者达到所述预设的时间阈值时,停止内存空间请求循环操作;
释放基于所述内存空间请求循环操作得到的所有内存空间,向所述内核发出休眠请求,进入休眠。
8.一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1‑6任意一项所述基于Linux内核的系统休眠内存管理方法的步骤。
9.一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1‑6任意一项所述基于Linux内核的系统休眠内存管理方法的步骤。
说明书 :
基于Linux内核的系统休眠内存管理方法及装置
技术领域
背景技术
唤醒方式,即通过关机休眠时将内存页面、中央处理器(central processing unit,简称
CPU)状态等存储在硬盘上的交换分区(Swap area)区域中,在系统唤醒时通过将交换分区
区域中的休眠镜像读取至内存中即可实现快速开机。这种方案被称为SBH(Swap Before
Hibernation)。
发明内容
效率较低的问题。
括:每个内存空间请求循环的第一内存空间请求对应的预设的初始最大值为上一次内存空
间请求循环的第一内存空间请求对应的预设的初始最大值的一半。进一步的,所述预先基
于平台设备驱动机制将系统休眠所需的内存回收管理操作处理成功能模块,具体包括:
区内核参数来控制内存使用的相对权重。
循环发送所述第二内存空间请求来请求分配的内存空间时开始,分别对应依次减1,直到所
述交互分区内核参数减少为1。
文件的大小。
每个内存空间请求循环的第一内存空间请求对应的预设的初始最大值为上一次内存空间
请求循环的第一内存空间请求对应的预设的初始最大值的一半。
时,通过动态调节相应的交互分区内核参数来控制内存使用的相对权重。
交互分区内核参数设置为10;从下一次循环发送所述第二内存空间请求来请求分配的内存
空间时开始,分别对应依次减1,直到所述交互分区内核参数减少为1。
的基于Linux内核的系统休眠内存管理方法的步骤。
内核的系统休眠内存管理方法的步骤。
系统唤醒时加载休眠镜像到内存中的速度,实现了与内核版本无关的休眠‑唤醒快速开机
机制,能够快速适应各种新硬件,避免频繁编译工作,降低了开发的工作量。
附图说明
明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根
据这些附图获取其他的附图。
具体实施方式
本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员
在没有做出创造性劳动前提下所获取的所有其他实施例,都属于本发明保护的范围。
内核)的内存清理机制(Shrink all memory)将内存中的空闲内存页面推到硬盘上的交换
分区中。
不会主动针对Linux提供驱动程序,需要开发者编译Kernel(内核)才能使得Kernel的各种
功能函数正常使用,具体到与休眠相关的电源管理机制则为内核中的PM Core。当Linux版
本更新或者硬件更新时,需要重新编写PM Core才能实现快速开机,导致开发人员需要根据
需要频繁的编译开发。
型,只要其基于Linux Kernel即可。
示。系统休眠所需的内存回收管理操作的功能模块化设计可使用所述平台设备驱动机制实
现。通过平台设备驱动机制能够将设备本身的资源注册进Linux内核,在运行时由Linux内
核统一管理,从而提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。
drivers的沟通界面,Kernel mode中的VFS(Virtual File System)负责文件操作、注册驱
动、支持System call等功能。
述平台设备驱动机制将所述功能模块注册到所述内核。
(Platform driver)。
内存清理机制(Shrink all memory机制)的内存回收功能。
得在Kernel调用该部分内存回收管理功能的时候具有Kernel一样的优先级。
注册设备。在对应的driver部分,主要是用来匹配对应的注册的设备的名称,在driver中定
义对应本发明所需要的各种内存回收管理功能,比如Suspend、Resume等。
到 Kernel 里的Kernel module具有跟 Kernel 一样的级别,实现与内核版本无关的休眠‑
唤醒快速开机方法。通过该方式可以避免硬件的快速更新导致需要频繁编译Kernel,从而
降低了开发压力。
所述内核调用所述功能模块执行多个内存空间请求循环操作;其中,在每个内存空间请求
循环中进行如下步骤:首先,向所述内核发送第一内存空间请求;所述第一内存空间请求所
请求分配的内存空间为预设的初始最大值;然后,向所述内核发送第二内存空间请求;所述
第二内存空间请求所请求分配的内存空间小于所述初始最大值;循环发送所述第二内存空
间请求,每次所述第二内存空间请求所请求分配的内存空间均小于上一次第二内存空间请
求所请求分配的内存空间。
分配的内存空间达到预设的初始最小值或者达到所述预设的时间阈值时,停止内存空间请
求循环操作,并释放基于所述内存空间请求循环操作得到的所有内存空间,向所述内核发
出休眠请求,进入休眠。所述内核即为Linux内核。
存空间为预设初始最大值;然后,继续向内核提出分配内存的第二内存空间请求,第二次请
求分配的内存空间为小于预设初始最大值;循环上述操作,以后每次请求分配的内存空间
均小于上一次请求分配的内存空间;直到达到请求分配的空间为预设初始最小值或者完整
所述预设时间阈值。同时,循环上述内存空间请求,每个内存空间请求循环的预设初始最大
值小于上一次内存空间请求循环的预设初始最大值。完成上述循环后,释放请求获得的所
有内存空间,向内核发出休眠请求,进入休眠状态。
最小值为1K(设置最小值可以防止内存空间请求的内存地址超出了物理内存地址边界导致
向Linux内核注册的device被OOM killer机制杀掉)。在所有内存空间请求循环的最后一个
内存空间请求循环中,预设初始最大值不大于128K,预设初始最小值为1K。
始最小值为1K。在所有内存空间请求循环的最后一个内存空间请求循环中,预设初始最大
值不大于16K,预设初始最小值为1K。
(Swappiness参数)来控制内存使用的相对权重。其中,Swappiness参数是指Linux内核参
数,能够控制系统在进行Swap时,内存使用的相对权重。具体的,Swappiness参数值越低,会
让系统尽量少用交换分区区域(Swap area),多用内存;Swappiness参数值越高,会使系统
更多的去使用Swap area交换分区。
空间时开始,分别对应依次减1,直到所述交互分区内核参数减少为1。
(Swappiness参数不可以减少到0,若减少到0会导致OOM killer)。
眠镜像的大小(因为获得的内存空间是空白内存空间,内容都是0),从而使得再次开机时显
著加快了系统载入休眠镜像的速度。
不执行获取内存空间的操作,所以在最后一个内存空间请求循环之后,使用Vmalloc函数获
取不连续的小块空闲内存空间(低于128K)。需要说明的是,本发明之所以不全程使用
Vmalloc函数,是因为Kmalloc函数执行效率和性能远高于Vmalloc函数,只是Kmalloc会导
致小块的碎片化空闲内存,所以最后使用Vmalloc函数处理。释放内存空间使用与Kmalloc
函数和Vmalloc函数对应的Kfree和Vfree即可。
法,开机时间为25‑35s(取决于预设时间长度,在一定限度内越长开机越快)。采用本发明方
法使得休眠镜像文件的大小大约减小了50%左右(从平均1200‑1500MB减小到平均400‑
700MB)。
8s。
施本发明的技术方案,在此不做具体限定。本发明实施例中,之所以使用Patform driver是
因为相对于通常的driver注册方式具有资源上的优势,Platform driver是将本身的资源
通过注册到Kernel中由Kernel统一管理和执行,在使用时有通用的界面接口,具有较好的
可移植性,使得系统在下一代产品中更新了各种硬件时无需再做这部分的二次编译工作。
镜像到内存中的速度,实现了在休眠这个特定应用需求下与内核版本无关的休眠‑唤醒快
速开机机制,能够快速适应各种新硬件,避免频繁编译工作。
施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的
基于Linux内核的系统休眠内存管理装置的实施例仅是示意性的。请参考图3所示,其为本
发明实施例提供的一种基于Linux内核的系统休眠内存管理装置的结构示意图。
像文件的大小。
镜像到内存中的速度,实现了在休眠这个特定应用需求下与内核版本无关的休眠‑唤醒快
速开机机制,能够快速适应各种新硬件,避免频繁编译工作,降低了开发的工作量。
之处请参见上述方法实施例部分的说明即可,下面描述的电子设备仅是示意性的。如图4所
示,其为本发明实施例公开的一种电子设备的实体结构示意图。该电子设备可以包括:处理
器(processor)401、存储器(memory)402和通信总线403,其中,处理器401,存储器402通过
通信总线403完成相互间的通信,通过通信接口404与外部进行通信。处理器401可以调用存
储器402中的逻辑指令,以执行基于Linux内核的系统休眠内存管理方法,该方法包括:预先
基于平台设备驱动机制将系统休眠所需的内存回收管理操作处理成功能模块;响应于系统
接收到进入休眠状态的操作,基于内核调用所述功能模块触发执行相应的内存回收管理操
作,以减小存储到内存交换区域的休眠镜像文件的大小。
发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以
软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以
使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施
例所述方法的全部或部分步骤。而前述的存储介质包括:存储芯片、U盘、移动硬盘、只读存
储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者
光盘等各种可以存储程序代码的介质。
指令被计算机执行时,计算机能够执行上述各方法实施例所提供的基于Linux内核的系统
休眠内存管理方法,该方法包括:预先基于平台设备驱动机制将系统休眠所需的内存回收
管理操作处理成功能模块;响应于系统接收到进入休眠状态的操作,基于内核调用所述功
能模块触发执行相应的内存回收管理操作,以减小存储到内存交换区域的休眠镜像文件的
大小。
基于Linux内核的系统休眠内存管理方法,该方法包括:预先基于平台设备驱动机制将系统
休眠所需的内存回收管理操作处理成功能模块;响应于系统接收到进入休眠状态的操作,
基于内核调用所述功能模块触发执行相应的内存回收管理操作,以减小存储到内存交换区
域的休眠镜像文件的大小。
DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND
FLASH)、固态硬盘(SSD))等。
元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其
中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性
的劳动的情况下,即可以理解并实施。
述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该
计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指
令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施
例或者实施例的某些部分所述的方法。
以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;
而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和
范围。