CN105354079B - 提高系统内存利用率的方法 - Google Patents

提高系统内存利用率的方法 Download PDF

Info

Publication number
CN105354079B
CN105354079B CN201510638512.5A CN201510638512A CN105354079B CN 105354079 B CN105354079 B CN 105354079B CN 201510638512 A CN201510638512 A CN 201510638512A CN 105354079 B CN105354079 B CN 105354079B
Authority
CN
China
Prior art keywords
function
timer
utilization rate
memory
storehouse
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
CN201510638512.5A
Other languages
English (en)
Other versions
CN105354079A (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.)
Huzhou Yinglie Intellectual Property Operation Co ltd
Original Assignee
Shanghai Feixun Data Communication Technology 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 Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201510638512.5A priority Critical patent/CN105354079B/zh
Publication of CN105354079A publication Critical patent/CN105354079A/zh
Application granted granted Critical
Publication of CN105354079B publication Critical patent/CN105354079B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明涉及系统内存领域,尤其涉及一种提高系统内存利用率的方法。一种提高系统内存利用率的方法,应用于Linux系统中,方法包括:步骤S1,缓存释放线程调用堆栈收缩函数;步骤S2,创建新进程后,在新进程的数据结构中添加一定时器,并将定时器的到期函数设置为堆栈收缩函数;步骤S3,当Linux系统的内存不足时,定时器开始计时;步骤S4,在定时器计时期间,Linux系统中的所有用户进程调用堆栈收缩函数,以释放所有用户进程堆栈中的内存;步骤S5,在定时器到期时,Linux系统的CPU执行堆栈收缩函数,以释放新进程堆栈中的内存;其中,步骤S4中的所有用户进程不包括新进程。

Description

提高系统内存利用率的方法
技术领域
本发明涉及系统内存领域,尤其涉及一种提高系统内存利用率的方法。
背景技术
堆栈是内存的一个工作区,会随着程序运行的需要而增长或缩小,随着计算机水平的不断提高,软件规模越来越庞大,函数嵌套调用的层次越来越深,导致堆栈空间的波动幅度增大。如果没有启用Linux交换技术,堆栈空间中没有使用的内存就被浪费了。很多嵌入式设备使用Linux系统,而且没有启用Linux交换技术,堆栈空间中没有使用的内存就被浪费了,系统中的进程数量较多的时候,浪费的内存就更多了。
发明内容
针对现有技术中内存利用率较低等问题,本发明提供了一种提高系统内存利用率的方法,及时释放堆栈空间中没有使用的内存,提高Linux系统内存利用率。
本发明采用如下技术方案:
一种提高系统内存利用率的方法,应用于Linux系统中,所述方法包括:
步骤S1,缓存释放线程调用堆栈收缩函数;
步骤S2,创建新进程后,在所述新进程的数据结构中添加一定时器,并将所述定时器的到期函数设置为堆栈收缩函数;
步骤S3,当所述Linux系统的内存不足时,所述定时器开始计时;
步骤S4,在所述定时器计时期间,所述Linux系统中的所有用户进程调用所述堆栈收缩函数,以释放所有所述用户进程堆栈中的内存;
步骤S5,在所述定时器到期时,所述Linux系统的CPU执行所述堆栈收缩函数,以释放所述新进程堆栈中的内存;其中,
所述步骤S4中的所述所有用户进程不包括所述新进程。
优选的,所述方法中:
所述定时器的定时时间为1-10秒。
优选的,所述步骤S1具体包括:
步骤S11,在所述堆栈收缩函数中,增加对所述所有用户线程调用所述堆栈收缩函数的代码。
优选的,所述步骤S2具体包括:
步骤S21,在Linux进程数据结构中增加堆栈时间域,Linux内核创建所述新进程时,在所述堆栈时间域上添加所述定时器。
优选的,所述步骤S2具体包括:
步骤S22:通过add timer函数添加所述定时器。
优选的,所述方法还包括:
步骤S6:于所述步骤S5之后,所述缓存释放线程运行后,对所述所有用户进程的用户态堆栈内存情况进行检查并调用所述堆栈收缩函数,以释放所述用户态堆栈内存。
优选的,所述方法还包括:
步骤S7:于所述步骤S6之后,当堆栈指针连续N次向上穿过页边界地址时,所述CPU中断并执行所述堆栈收缩函数,以释放当前运行进程堆栈的内存;其中,
所述N为预设值,同时所述N为正整数并且大于1。
优选的,所述步骤S7具体包括:
步骤S71:在系统初始化函数trap init中,通过set trap gate函数设置所述堆栈收缩函数的封装函数为中断处理函数。
本发明的有益效果是:
本发明在进程数据结构中添加堆栈检查定时器,同时在释放堆栈中被浪费内存的堆栈收缩函数(stack shrink),即可以应对软件规模的增长、函数嵌套层次的加深而导致堆栈空间波动幅度增大,堆栈收缩技术也能及时释放堆栈中被浪费的内存,提高Linux系统内存利用率。
附图说明
图1为本发明提高系统内存利用率实施例一的方法示意图;
图2为本发明提高系统内存利用率的线程收缩技术实施例二的原理图。
具体实施方式
需要说明的是,在不冲突的情况下,下述技术方案,技术特征之间可以相互组合。
下面结合附图对本发明的具体实施方式作进一步的说明:
实施例一
图1为本发明提高系统内存利用率实施例一的方法示意图,如图1所示,本实施例为一种提高系统内存利用率的方法,涉及Linux进程用户态堆栈收缩技术,应用于Linux系统中,方法包括:
步骤S1:缓存释放线程调用堆栈收缩函数;
步骤S2:创建新进程,在新进程的数据结构中添加一定时器,定时器的到期函数设置为堆栈收缩函数;
步骤S3:当内存不足时,Linux系统中的所有用户进程调用收缩函数,以释放所有用户进程堆栈中的内存;
步骤S4:定时器到期,CPU执行堆栈收缩函数,以释放新进程堆栈中的内存;其中,
步骤S3中的所有用户进程不包括新进程。
本实施例中,在Linux系统的缓存释放线程中,增加对堆栈收缩函数的调用,在Linux创建进程时,在进程数据结构中添加一个定时器,定时1秒,也可以是2s,3s,……或者是10秒,此时的定时时间可以根据具体的情况进行设定,定时器到期函数设置为堆栈收缩函数,Linux内核分配内存,发现内存紧缺,对系统中所有用户进程调用堆栈收缩函数,释放所有进程堆栈中浪费的内存,这一步可以同步地释放被堆栈浪费的内存,进程定时器到期,CPU执行堆栈收缩函数,释放该进程堆栈中浪费的内存。
本发明一个较佳的实施例中,缓存释放线程开始运行,对所有进程的用户态堆栈内存浪费情况作检查,调用堆栈收缩函数,释放浪费的内存。
本发明一个较佳的实施例中,在硬件支持堆栈收缩检查的情况下,将堆栈收缩函数设置为中断处理函数,当堆栈指针连续数次向上穿过页边界地址时,中断CPU,通知CPU执行堆栈收缩函数,从而释放当前运行进程堆栈浪费的内存。
循环释放进程堆栈中被浪费的内存,堆栈收缩函数的伪代码如下所示:
Void stack_shrink(struct vm_area_struct*vma_stack)
{
Void*esp;/*esp堆栈指针*/
Void*tmp;/*用于循环*/
/*vma_stack->vm_start是堆栈空间的结束位置,
Esp是堆栈实际使用的堆栈空间的位置,
这两个位置之间的空隙就是被浪费的内存*/
For(tmp=esr;tmp>vma_stack->vm_start;tmp-=4KB){
Free(tmp);/*释放浪费的内存页*/
}
}
在进程数据结构中添加一个定时器,定时时间一秒,到期函数为堆栈收缩函数(stack_shrink)的代码为:
Struct task_struct{
Struct timer_list stack_check;
};
shrink_cache函数是缓存释放线程要调用的函数,在该函数中对所有进程调用stack_shrink函数代码为:
static void shrink_cache()
{
/*对系统中的每个进程的堆栈运行stack_shrink函数*/
For(遍历系统中的每个进程){
Stack_shrink();
}
}
实施例二
图2为本发明提高系统内存利用率的线程收缩技术实施例二的原理图,如图2所示,首先,缓存释放线程会调用shrink_cache函数,在该函数中增加对所有进程调用堆栈收缩函数的代码;在Linux进程数据结构中增加struct timer_list stack_check域,Linux内核创建进程时,通过add_timer函数在该域上添加一个定时器,到期函数设置为堆栈收缩函数,定时时间为1秒;内核代码分配内存,发现内存不足时,调用堆栈收缩函数;structtimer_list stack_check定时器到期,CPU执行堆栈收缩函数;CPU调度缓存释放线程,执行到shrink_cache函数时,CPU可以对所有进程的堆栈执行内存浪费情况检查;如果CPU支持堆栈收缩检查,在系统初始化函数trap_init中通过set_trap_gate函数设置堆栈收缩函数的封装函数为中断处理函数,当堆栈指针连续数次向上穿过页边界地址时,中断CPU,通知CPU执行堆栈收缩函数,从而释放当前运行进程堆栈浪费的内存。
综上所述,本发明在进程数据结构中添加堆栈检查定时器,同时在释放堆栈中被浪费内存的堆栈收缩函数(stack shrink),即可以应对软件规模的增长、函数嵌套层次的加深而导致堆栈空间波动幅度增大,堆栈收缩技术也能及时释放堆栈中被浪费的内存,提高Linux系统内存利用率。
通过说明和附图,给出了具体实施方式的特定结构的典型实施例,基于本发明精神,还可作其他的转换。尽管上述发明提出了现有的较佳实施例,然而,这些内容并不作为局限。
对于本领域的技术人员而言,阅读上述说明后,各种变化和修正无疑将显而易见。因此,所附的权利要求书应看作是涵盖本发明的真实意图和范围的全部变化和修正。在权利要求书范围内任何和所有等价的范围与内容,都应认为仍属本发明的意图和范围内。

Claims (8)

1.一种提高系统内存利用率的方法,其特征在于,应用于Linux系统中,所述方法包括:
步骤S1,缓存释放线程中增加堆栈收缩函数的调用;
步骤S2,创建新进程后,在所述新进程的数据结构中添加一定时器,并将所述定时器的到期函数设置为堆栈收缩函数;
步骤S3,当所述Linux系统的内存不足时,所述定时器开始计时;
步骤S4,在所述定时器计时期间,所述Linux系统中的所有用户进程调用所述堆栈收缩函数,以释放所有所述用户进程堆栈中的内存;
步骤S5,在所述定时器到期时,所述Linux系统的CPU执行所述堆栈收缩函数,以释放所述新进程堆栈中的内存;
其中,所述步骤S4中的所述所有用户进程不包括所述新进程。
2.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述方法中:
所述定时器的定时时间为1-10秒。
3.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述步骤S1具体包括:
步骤S11,在所述堆栈收缩函数中,增加对所述所有用户线程调用所述堆栈收缩函数的代码。
4.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述步骤S2具体包括:
步骤S21,在Linux进程数据结构中增加堆栈时间域,Linux内核创建所述新进程时,在所述堆栈时间域上添加所述定时器。
5.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述步骤S2具体包括:
步骤S22:通过addtimer函数添加所述定时器。
6.根据权利要求1所述的提高系统内存利用率的方法,其特征在于,所述提高系统内存利用率的方法还包括:
步骤S6:于所述步骤S5之后,所述缓存释放线程运行后,对所述所有用户进程的用户态堆栈内存情况进行检查并调用所述堆栈收缩函数,以释放所述用户态堆栈内存。
7.根据权利要求6所述的提高系统内存利用率的方法,其特征在于,所述提高系统内存利用率的方法还包括:
步骤S7:于所述步骤S6之后,当堆栈指针连续N次向上穿过页边界地址时,所述CPU中断并执行所述堆栈收缩函数,以释放当前运行进程堆栈的内存;
其中,所述N为预设值,同时所述N为正整数并且大于1。
8.根据权利要求7所述的提高系统内存利用率的方法,其特征在于,所述步骤S7还包括:
在系统初始化函数trapinit中,通过settrapgate函数设置所述堆栈收缩函数的封装函数为中断处理函数。
CN201510638512.5A 2015-09-29 2015-09-29 提高系统内存利用率的方法 Active CN105354079B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510638512.5A CN105354079B (zh) 2015-09-29 2015-09-29 提高系统内存利用率的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510638512.5A CN105354079B (zh) 2015-09-29 2015-09-29 提高系统内存利用率的方法

Publications (2)

Publication Number Publication Date
CN105354079A CN105354079A (zh) 2016-02-24
CN105354079B true CN105354079B (zh) 2019-06-07

Family

ID=55330053

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510638512.5A Active CN105354079B (zh) 2015-09-29 2015-09-29 提高系统内存利用率的方法

Country Status (1)

Country Link
CN (1) CN105354079B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105808336A (zh) * 2016-03-08 2016-07-27 广州爱九游信息技术有限公司 运行应用程序的计算设备、装置和方法
CN105930217A (zh) * 2016-04-15 2016-09-07 上海斐讯数据通信技术有限公司 一种线程优化系统及方法
CN106776354A (zh) * 2016-11-11 2017-05-31 深圳创维数字技术有限公司 一种动态堆栈内存管理方法和装置
CN111800353B (zh) * 2020-06-30 2022-04-12 翱捷科技股份有限公司 一种嵌入式系统内存零拷贝的方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101286143A (zh) * 2008-05-26 2008-10-15 中兴通讯股份有限公司 一种管理设备驱动缓存的方法
CN102141937A (zh) * 2010-01-07 2011-08-03 微软公司 在线性栈上高效恢复协同例程
CN103150259A (zh) * 2013-03-22 2013-06-12 华为技术有限公司 一种内存回收方法和装置
CN104007993A (zh) * 2014-06-11 2014-08-27 中国科学院信息工程研究所 一种Linux系统内存敏感数据的清除方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8108880B2 (en) * 2007-03-07 2012-01-31 International Business Machines Corporation Method and system for enabling state save and debug operations for co-routines in an event-driven environment

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101286143A (zh) * 2008-05-26 2008-10-15 中兴通讯股份有限公司 一种管理设备驱动缓存的方法
CN102141937A (zh) * 2010-01-07 2011-08-03 微软公司 在线性栈上高效恢复协同例程
CN103150259A (zh) * 2013-03-22 2013-06-12 华为技术有限公司 一种内存回收方法和装置
CN104007993A (zh) * 2014-06-11 2014-08-27 中国科学院信息工程研究所 一种Linux系统内存敏感数据的清除方法及装置

Also Published As

Publication number Publication date
CN105354079A (zh) 2016-02-24

Similar Documents

Publication Publication Date Title
CN105354079B (zh) 提高系统内存利用率的方法
US8261269B2 (en) System and method for synchronizing transient resource usage between virtual machines in a hypervisor environment
CN108334396B (zh) 一种数据处理方法和装置、资源组的创建方法和装置
KR20180054805A (ko) 단말기 애플리케이션을 로딩하기 위한 방법 및 장치
US9229775B2 (en) Dynamically adjusting global heap allocation in multi-thread environment
CN110389842B (zh) 一种动态资源分配方法、装置、存储介质及设备
CN108121559A (zh) 配置文件推送方法、服务器及存储介质
US9639399B2 (en) Method, apparatus and terminal for releasing memory
US9720819B2 (en) Concurrent, moving, garbage collector
WO2021253851A1 (zh) 一种集群分布式资源调度方法、装置、设备及存储介质
CN107479981B (zh) 一种基于异步调用实现同步调用的处理方法及装置
CN106325974B (zh) 一种虚拟化io性能优化方法及系统
CN106899649A (zh) 一种任务请求处理方法、装置和用户设备
CN108021405B (zh) 一种soc系统启动过程中存储介质的驱动方法和装置
CN106407000B (zh) 一种终端内存优化的方法、装置及系统
US9128754B2 (en) Resource starvation management in a computer system
GB2603444A (en) Enhancing memory safe programming using page frame tag mechanism
CN110020060B (zh) 网页数据爬取方法、装置及存储介质
WO2014201885A1 (en) Method and system for invoking plug-in function
CN104866331A (zh) 在移动终端上安装、调用应用的方法与装置
CN111104218B (zh) 存储系统数据同步方法、装置、设备及可读存储介质
WO2018040271A1 (zh) 线程处理器及线程处理方法
CN112698962A (zh) 数据处理方法、装置、电子设备及存储介质
CN111338981A (zh) 一种内存防碎片方法、系统及储存介质
CN109144708B (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20201130

Address after: Room 10242, No. 260, Jiangshu Road, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee after: Hangzhou Jiji Intellectual Property Operation Co.,Ltd.

Address before: 201616 Shanghai city Songjiang District Sixian Road No. 3666

Patentee before: Phicomm (Shanghai) Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20201215

Address after: 233000 3rd floor, Dong'an Market, Fengyang West Road, Longzihu District, Bengbu City, Anhui Province

Patentee after: Bengbu 309 Technology Consulting Co.,Ltd.

Address before: Room 10242, No. 260, Jiangshu Road, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee before: Hangzhou Jiji Intellectual Property Operation Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210202

Address after: 313001 room 1019, Xintiandi office building, Yishan street, Wuxing District, Huzhou, Zhejiang, China

Patentee after: Huzhou YingLie Intellectual Property Operation Co.,Ltd.

Address before: 233000 3rd floor, Dong'an Market, Fengyang West Road, Longzihu District, Bengbu City, Anhui Province

Patentee before: Bengbu 309 Technology Consulting Co.,Ltd.

PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Methods to improve system memory utilization

Effective date of registration: 20230111

Granted publication date: 20190607

Pledgee: Huzhou Wuxing Rural Commercial Bank Co.,Ltd. high tech Zone Green sub branch

Pledgor: Huzhou YingLie Intellectual Property Operation Co.,Ltd.

Registration number: Y2023330000072

PC01 Cancellation of the registration of the contract for pledge of patent right
PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20231205

Granted publication date: 20190607

Pledgee: Huzhou Wuxing Rural Commercial Bank Co.,Ltd. high tech Zone Green sub branch

Pledgor: Huzhou YingLie Intellectual Property Operation Co.,Ltd.

Registration number: Y2023330000072