一种确定内存大页数目的方法及其装置与流程

文档序号:15686133发布日期:2018-10-16 21:04阅读:234来源:国知局

本申请涉及计算机领域,并且更具体地,涉及一种确定内存大页数目的方法及其装置。



背景技术:

随着计算规模的不断增加,应用程序对系统内存的需求也不断增大,为了更好的对内存进行管理,现代cpu采用虚拟内存地址代替物理内存地址,内存管理单元将虚拟内存地址转换为物理内存地址提供cpu使用。同时linux操作系统引入了内存分页管理机制,默认的内存页大小为4kb。虚拟内存地址到物理内存地址的映射关系存放于内存页表中,访问内存页表时获得虚拟内存地址到物理内存地址的映射关系。内存页表的访问时间成为了限制cpu内存访问速度的一个瓶颈,为了提高寻址速度,现代cpu架构中引入了转换检测缓冲区(translationlookasidebuffer,tlb)用于存储一部分经常访问的内存映射关系,访问tlb的速度要快于访问内存页表的速度,但tlb的大小是有限的,当访问的地址不在tlb中则cpu会访问内存页表,这种情况称为tlbmiss,频繁发生tlbmiss的时候将会造成程序性能下降。为此,当操作系统以2mb甚至更大作为分页的单位时,该内存相对较大的分页可以称之为内存大页,相对4kb的分页大小,tlb就能够映射更多的内存空间,降低了tlbmiss,提高cpu访问内存的性能。

目前针对linux操作系统的内存大页设置主要是通过管理员手动向/proc/sys/vm/nr_hugepages文件中写入内存大页数目来进行设定,当需要对内存大页数目进行修改的时候则需要重新设定。

目前对系统参数的修改主要是采用手工方式向大页文件中写入要设定的内存大页的数目,这种方式需要首先预估应用程序需要的内存大小,然后设定大页内存的数目,一旦发生应用程序需要的内存超过大页内存时,就会发生大页内存分配失败的警告信息,需要管理员再次重新设定大页内存数目,当应用程序不需要使用那么多内存的时候,可能需要释放一部分大页内存,这时同样需要管理员重新设定大页内存的数目,费时费力。

因此,亟需一种确定内存大页数目的方法,能够简洁、高效地确定内存大页数目。



技术实现要素:

本申请提供一种,能够够简洁、高效地确定内存大页数目。

第一方面,提供一种确定内存大页数目的方法,所述方法应用于linux操作系统中,包括:根据内存信息文件,获取当前内存大页总数hugepages_total,空闲的大页内存总数hugepages_free,超过所述hugepages_total使用的大页数目hugepages_surp;获取额外内存大页数目add_pages,所述add_pages表示表示当应用程序使用的内存大于hugepages_total提供的内存大小时,所述linux系统额外能够提供的内存大页数目;根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages,其中,nr_hugepages表征所述linux系统提供的内存大页总数,所述nr_overcommit_hugepages表征所述系统能够提供的最大内存大页总数。

结合第一方面,在第一方面的第一种可能的实现方式中,在根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages之前,所述方法还包括:根据所述linux系统的内存大小,初始化所述nr_hugepages和所述nr_overcommit_hugepages。

结合第一方面及其上述实现方式,在第一方面的第二种可能的实现方式中,所述根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages,包括:当确定所述hugepages_surp值非零时,确定所述nr_hugepages=hugepages_total+add_pages;当所述hugepages_surp值为零时,且hugepages_free大于add_pages时,确定所述nr_hugepages=nr_hugepages–(hugepages_free–add_pages);当所述hugepages_surp值为零时,且hugepages_free不大于add_pages时,确定nr_hugepages=hugepages_total。

结合第一方面及其上述实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:当所述nr_hugepages发生变化时,将所述nr_hugepages的值更新在/proc/sys/vm/nr_hugepages中。

结合第一方面及其上述实现方式,在第一方面的第四种可能的实现方式中,根据所述linux系统的内存大小,初始化所述nr_hugepages和所述nr_overcommit_hugepages,包括:获取当前linux系统内存大小,按照内存大页为2m的大小计算空闲内存的总页数,并将所述系统空闲内存大页数的百分之三十设定为所述nr_hugepages的初始值,所述系统空闲内存大页数百分之七十设定为所述nr_overcommit_hugepages的初始值。

第二方面,提供一种确定内存大页数目的装置,包括:获取单元,所述获取单元用于根据内存信息文件,获取当前linux系统中内存大页总数hugepages_total,空闲的大页内存总数hugepages_free,超过所述hugepages_total使用的大页数目hugepages_surp;所述获取单元还用于获取额外内存大页数目add_pages,所述add_pages表示表示当应用程序使用的内存大于hugepages_total提供的内存大小时,所述linux系统额外能够提供的内存大页数目;处理单元,所述处理单元用于根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages,其中,nr_hugepages表征所述linux系统提供的内存大页总数,所述nr_overcommit_hugepages表征所述系统能够提供的最大内存大页总数。

结合第二方面,在第二方面的第一种可能的实现方式中,所述获取单元用于:根据所述linux系统的内存大小,初始化所述nr_hugepages和所述nr_overcommit_hugepages。

结合第二方面及其上述实现方式,在第二方面的第二种可能的实现方式中,所述处理单元用于:当确定所述hugepages_surp值非零时,确定所述nr_hugepages=hugepages_total+add_pages;当所述hugepages_surp值为零时,且hugepages_free大于add_pages时,确定所述nr_hugepages=nr_hugepages–(hugepages_free–add_pages);当所述hugepages_surp值为零时,且hugepages_free不大于add_pages时,确定nr_hugepages=hugepages_total。

结合第二方面及其上述实现方式,在第二方面的第三种可能的实现方式中,所述处理单元还用于:当所述nr_hugepages发生变化时,将所述nr_hugepages的值更新在/proc/sys/vm/nr_hugepages中。

结合第二方面及其上述实现方式,在第二方面的第四种可能的实现方式中,所述获取单元用于:获取当前linux系统内存大小,按照内存大页为2m的大小计算空闲内存的总页数,并将所述系统空闲内存大页数的百分之三十设定为所述nr_hugepages的初始值,所述系统空闲内存大页数百分之七十设定为所述nr_overcommit_hugepages的初始值。

第三方面,提供了一种装置,包括接收器、发送器、存储器和处理器,该存储器用于存储计算机程序,该接收器用于受处理器控制接收信号,该发送器用于受处理器控制发送信号,该处理器用于从存储器中调用并运行该计算机程序,使得该设备执行上述各方面所述的方法。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

因此,本申请提供的方法能够对当前系统的内存大页数目进行合理的调整,提供了一种简洁高效的确定内存大页数目的方法,既满足了应用程序对内存大页的需求,又降低人工需求。

附图说明

图1是本申请一个实施例的方法的示意性流程图。

图2示出了本申请一个实施例的方法的示意性流程图。

图3示出了本申请一个实施例的方法的示意性流程图。

图4示出了本申请一个实施例的方法的示意性流程图。

图5示出了本申请一个实施例的装置的示意性框图。

图6示出了本申请另一实施例的装置的示意性框图。

图7示出了本申请另一实施例的装置的实现框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

图1示出了本申请一个实施例的方法的示意性流程图,如图1所示,该方法100包括:

步骤110,根据内存信息文件,获取当前内存大页总数hugepages_total,空闲的大页内存总数hugepages_free,超过所述hugepages_total使用的大页数目hugepages_surp。

步骤120,获取额外内存大页数目add_pages,所述add_pages表示表示当应用程序使用的内存大于hugepages_total提供的内存大小时,所述linux系统额外能够提供的内存大页数目。

步骤130,根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages,其中,nr_hugepages表征所述linux系统提供的内存大页总数,所述nr_overcommit_hugepages表征所述系统能够提供的最大内存大页总数。

具体地,在步骤110中,内存信息文件可以为/proc/meminfo文件。

在步骤120中的add_pages可以为用户输入的参数。

可选地,作为本申请一个实施例,在根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages之前,所述方法还包括:根据所述linux系统的内存大小,初始化所述nr_hugepages和所述nr_overcommit_hugepages。

可选地,作为本申请一个实施例,图2示出了本申请一个实施例的方法的示意性流程图。如图2所示,示出了初始化所述nr_hugepages和所述nr_overcommit_hugepages的方法的示意性流程图。

可选地,作为本申请一个实施例,根据所述linux系统的内存大小,初始化所述nr_hugepages和所述nr_overcommit_hugepages,包括:获取当前linux系统内存大小,按照内存大页为2m的大小计算空闲内存的总页数,并将所述系统空闲内存大页数的百分之三十设定为所述nr_hugepages的初始值,所述系统空闲内存大页数百分之七十设定为nr_overcommit_hugepages的初始值。

应理解,本申请实施例中内存大页的大小2m、初始化所述nr_hugepages、所述nr_overcommit_hugepages的数值仅仅是实例性,本申请对此不作限定。

可选地,作为本申请一个实施例,所述根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages,包括:当确定所述hugepages_surp值非零时,确定所述nr_hugepages=hugepages_total+add_pages;当所述hugepages_surp值为零时,且hugepages_free大于add_pages时,确定所述nr_hugepages=nr_hugepages–(hugepages_free–add_pages);当所述hugepages_surp值为零时,且hugepages_free不大于add_pages时,确定nr_hugepages=hugepages_total。

具体地,图3示出了本申请一个实施例的方法的示意性流程图,如图3所示,首先判断当前使用的内存大页数目是否超过了设定的内存大页总数,即hugepages_surp的值是否为0,分为两种情况:

1.如果hugepages_surp的值不为0则表示当前应用程序使用的内存大页数目超过了系统设定的内存大页的总数,此时需要调整内存大页总数,将nr_hugepages设定为hugepages_total加上一个固定值add_pages,此值可由用户在工具启动时通过参数设定,表示当应用程序使用的大页内存超内存大页总数时,除分配足够的内存大页外,还额外分配的内存大页数目。将nr_hugepages的新值传递给设定模块。

2.如果hugepages_surp的值为0,则表示当前设定的内存大页数目满足应用程序的需求,此时判断是否需要释放掉一部分没有使用的内存大页,将hugepages_free与add_pages相比较,当hugepages_free大于add_pages时,将释放掉hugepages_free–add_pages数目的内存大页,此时的nr_hugepages应该设定为nr_hugepages-(hugepages_free–add_pages),将nr_hugepages的新值传递给设定模块。当hugepages_free值不大于add_pages时,则nr_hugepages值不变,等于hugepages_total。

可选地,作为本申请一个实施例,所述方法还包括:当所述nr_hugepages发生变化时,将所述nr_hugepages的值更新在/proc/sys/vm/nr_hugepages中。

也就是说,重新根据上述步骤确定的nr_hupgepages的值与原/proc/sys/vm/nr_hugepages文字中的nr_hugepages的值是否一致,如果不一致则更新系统nr_hugepages设定,否则不做处理。图4示出了本申请一个实施例的方法的示意性流程图。

因此,本申请提供的方法能够对当前系统的内存大页数目进行合理的调整,提供了一种简洁高效的确定内存大页数目的方法,既满足了应用程序对内存大页的需求,又降低人工需求。

图5示出了本申请一个实施例的装置的示意性框图。如图5所示,本申请实施例提供的方法可以由初始化模块、内存大页监测模块、计算模块和设定模块四部分组成。其中初始化模块主要为系统设定内存大页的初始数目和最大允许内存大页的初始数目,同时获取用户的输入参数add_pages的值,此值表示当应用程序使用的大页内存超内存大页总数时,除分配足够的内存大页外,还额外分配的内存大页数目。内存大页监测模块主要负责对当前系统的内存大页使用情况进行监测,获取当前内存大页总数,空闲的内存大页数目,超过设定的内存大页数目。计算模块根据当前内存大页总数、空闲内存大页数目和超过设定的内存大页数目计算下一次需要设定的内存大页总数。设定模块根据计算模块的计算结果重新设定内存大页总数和最大允许内存大页数目。

图6示出了本申请另一实施例的装置的示意性框图。如图6所示,该装置包括:获取单元610和处理单元620,其中,所述获取单元610用于根据内存信息文件,获取当前linux系统中内存大页总数hugepages_total,空闲的大页内存总数hugepages_free,超过所述hugepages_total使用的大页数目hugepages_surp;所述获取单元610还用于获取额外内存大页数目add_pages,所述add_pages表示表示当应用程序使用的内存大于hugepages_total提供的内存大小时,所述linux系统额外能够提供的内存大页数目;所述处理单元620用于根据所述hugepages_total、所述add_pages、以及所述hugepages_free或所述hugepages_surp中的至少一项,配置内存大页总数nr_hugepages和允许内存大页总数nr_overcommit_hugepages,其中,nr_hugepages表征所述linux系统提供的内存大页总数,所述nr_overcommit_hugepages表征所述系统能够提供的最大内存大页总数。

可选地,作为本申请一个实施例,所述获取单元用于:根据所述linux系统的内存大小,初始化所述nr_hugepages和所述nr_overcommit_hugepages。

可选地,作为本申请一个实施例,所述处理单元用于:当确定所述hugepages_surp值非零时,确定所述nr_hugepages=hugepages_total+add_pages;当所述hugepages_surp值为零时,且hugepages_free大于add_pages时,确定所述nr_hugepages=nr_hugepages–(hugepages_free–add_pages);当所述hugepages_surp值为零时,且hugepages_free不大于add_pages时,确定nr_hugepages=hugepages_total。

可选地,作为本申请一个实施例,所述处理单元还用于:当所述nr_hugepages发生变化时,将所述nr_hugepages的值更新在/proc/sys/vm/nr_hugepages中。

可选地,作为本申请一个实施例,所述获取单元用于:获取当前linux系统内存大小,按照内存大页为2m的大小计算空闲内存的总页数,并将所述系统空闲内存大页数的百分之三十设定为所述nr_hugepages的初始值,所述系统空闲内存大页数百分之七十设定为所述nr_overcommit_hugepages的初始值。

图7示出了本申请另一实施例的装置的实现框图。该装置700能够执行本申请实施例提供的设计波导缝隙阵天线的方法。其中,该装置700包括:处理器701、接收器702、发送器703、以及存储器704。其中,该处理器701可以与接收器702和发送器703通信连接。该存储器704可以用于存储该装置700的程序代码和数据。因此,该存储器704可以是处理器701内部的存储单元,也可以是与处理器701独立的外部存储单元,还可以是包括处理器701内部的存储单元和与处理器701独立的外部存储单元的部件。

可选的,装置700还可以包括总线705。其中,接收器702、发送器703、以及存储器704可以通过总线705与处理器701连接;总线705可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线705可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

处理器701例如可以是中央处理器(centralprocessingunit,cpu),通用处理器,数字信号处理器(digitalsignalprocessor,dsp),专用集成电路(application-specificintegratedcircuit,asic),现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等等。

接收器702和发送器703可以是包括上述天线和发射机链和接收机链的电路,二者可以是独立的电路,也可以是同一个电路。

应理解,图6或图7示出的实施例可以实现上述实施例的一个或多个有益效果,为了简洁起见,在此不再赘述

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者第二设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1