工作集划分方法和系统
技术领域
本发明涉及内存管理领域,具体而言,涉及一种工作集划分方法和系统。
背景技术
现代操作系统基于硬件价格和性能的考量,在虚拟内存管理的基础上,实现了复杂的内存层次结构(Memory Hierarchy),以达到提升系统性能和提高内存利用率的目标。一方面,内存层次结构将系统中的空闲内存,分配为缓存,换入磁盘数据以加速存储IO性能。另一方面,当空闲内存不足时,通过内存页回收(Page Reclaim)机制,将最近未使用的内存进行释放或者换出到磁盘,以满足系统内存分配需求。
现有技术中的方案,对于单个实例,例如单个容器和/或虚拟机而言,由于操作系统的预设静态阈值(各类limit或水位线等)不能良好地体现不同场景下工作负载随时间的变化,可能会造成在工作负载低的时间段内存浪费,但在工作负载高的时间段,内存回收被触发,造成非预期内存回收,或者内存颠簸(Page Threshing)问题。进一步,对于不同QoS要求的多个实例,例如多个容器和/或虚拟机而言,依据人为经验值来静态划分,同样会造成分区间的内存分配不均,进而导致了相同的非预期内存回收,或者内存颠簸问题。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种工作集划分方法和系统,以至少解决在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
根据本发明实施例的一个方面,提供了一种工作集划分方法,包括:扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
根据本发明实施例的一个方面,还提供了一种工作集划分方法,包括:获取实例的内存中的每个内存页的未被访问年龄;获取实例对应的滑动窗口参数,其中,滑动窗口参数用于确定滑动窗口,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
根据本发明实施例的一个方面,还提供了一种工作集划分方法,包括:获取已分配给实例的内存中的每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,不同的实例对应的滑动窗口参数不同;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
根据本发明实施例的一个方面,还提供了一种工作集划分方法,包括:获取已分配给实例的内存中的每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少两个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
根据本发明实施例的另一方面,还提供了一种工作集划分系统,包括:扫描器,用于扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;存储器,用于存储每个内存页的未被访问年龄;获取器,用于获取实例对应的滑动窗口参数,其中,每个实例对应至少一个滑动窗口参数;回收器,用于根据滑动窗口参数确定滑动窗口,并根据未被访问年龄和滑动窗口,回收处于滑动窗口外的非工作集内存。
根据本发明实施例的另一方面,还提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行如下步骤:扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
根据本发明实施例的另一方面,还提供了一种计算设备,包括处理器,用于运行程序,其中,程序运行时执行如下步骤:扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
在本发明实施例中,采用扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄的方式,通过根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;达到了根据未被访问年龄和滑动窗口,划分实例的内存工作集的目的,从而实现了使得工作在不同QoS优先级下的容器或虚拟机获取到定制化的内存工作集的技术效果,进而解决了在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本申请实施例的一种用于实现工作集划分方法的计算机终端(或移动设备)的硬件结构框图;
图2是根据本申请实施例的一种可选的工作集划分系统的结构示意图;
图3是根据本申请实施例的一种可选的工作集划分方法的示意图;
图4是根据本申请实施例的一种可选的内存工作集划分效果的示意图;
图5是根据本申请实施例的一种可选的工作集划分方法的示意图;
图6是根据本申请实施例的一种可选的工作集划分方法的示意图;
图7是根据本申请实施例的一种可选的工作集划分方法的示意图;
图8是根据本申请实施例的一种可选的工作集划分装置的示意图;
图9是根据本申请实施例的一种可选的工作集划分系统的示意图;
图10是根据本申请实施例的一种计算设备的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
先将本发明涉及的部分术语解释如下:
内存层次结构(Memory Hierarchy),广义上指由TLB,Cache,DRAM,Disk等硬件组成的价格和性能从高到低的硬件层次结构,以保持在合理降低硬件成本时的最佳访存性能。本文特指虚拟内存管理中的,由DRAM和Disk组成的内存层次结构。
页回收(Page Reclaim):是现代操作系统虚拟内存管理的核心特性之一。通过内存回收特性的实现,操作系统可以利用DRAM及磁盘介质来组成一个分层的内存层次结构,进而实现通过低价介质对DRAM的逻辑扩容,并在磁盘和内存之间构建了复杂的预读算法和回写算法,利用内存做文件IO加速。
服务合并(Service Consolidation)或混部(Co-location):指虚拟化方案中,将多个虚拟机和容器的服务放置到一台物理机器以提升整体机器利用率的技术方案。内存利用率,传统内存利用率指已分配内存在整机内存所占比例。系统真实内存利用率可以通过排除掉已分配但长期闲置的内存来得到。
内存颠簸,即Page Threshing,指内存页回收算法反复回收和置换相同内存页面的行为,这通常会引发严重的系统QoS问题。内存工作集,即Memroy Working Set(Denning,1968a;Denning,1980)是指应用,容器,或虚拟机正在使用的内存的集合。
Idle Age,即内存页的闲置年龄,或称未被访问年龄。通过跟踪内存页的访问情况,对每个物理页所做的闲置年龄的统计。闲置年龄具体时间间隔由内存扫描算法周期来决定。通过Idle Age,可以对内存页的冷热情况做一个排序。
工作集,1968年Denning提出了工作集(Working Set)理论,工作集是指在某段时间间隔δt里,进程实际要访问的内存页面的集合。
滑动窗口参数,该时间间隔δt称为工作集的滑动窗口参数。
滑动窗口,是一个时间概念,由时刻t以及时间间隔δt确定,(t,t+δt)即为对应的滑动窗口。
实施例1
根据本申请实施例,还提供了一种工作集划分方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现工作集划分方法的计算机终端(或移动设备)的硬件结构框图。如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中采用102a、102b,……,102n来示出)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的工作集划分方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的工作集划分方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
此处,需要说明的是,在一些可选实施例中,上述图1所示的计算机设备(或移动设备)可以包括硬件元件(包括电路)、软件元件(包括存储在计算机可读介质上的计算机代码)、或硬件元件和软件元件两者的结合。应当指出的是,图1仅为特定具体实例的一个实例,并且旨在示出可存在于上述计算机设备(或移动设备)中的部件的类型。
在上述运行环境下,本申请构建了如图2所示的工作集划分系统的结构示意图,由图2可知,本申请的工作集划分系统主要包括如下模块:扫描器scanner,用于扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;存储器Idle_age_meta,用于存储每个内存页的未被访问年龄;获取器getter,用于获取实例对应的滑动窗口参数,其中,每个实例对应至少一个滑动窗口参数;回收器reclaimer,用于根据滑动窗口参数确定滑动窗口,并根据未被访问年龄和滑动窗口,回收处于滑动窗口外的非工作集内存。
此外,还需要说明的是,本申请提供了如图3所示的工作集划分方法,该方法可以在工作集划分系统中执行。需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图3是根据本申请实施例的工作集划分方法的流程图,由图3可知,工作集划分方法可以包括:
步骤S302,扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;
在上述步骤S302中,实例至少可以包括容器实例和/或虚拟机实例。
在上述步骤S302中,采用新内存热度跟踪(Memory Hotness Tracking)改进算法,利用硬件协助机制,实现对内存的冷热跟踪功能,该功能可以按照内存页为单位,对内存多久未被访问做细粒度跟踪,每个物理页都有自己的未被访问的年龄,被称为idle_age。通过为每个内存物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在上述步骤S302中,还可以采用新的多分区多窗口工作集元数据组织方式,使得内存的idle_age被记录在元数据里,可以与容器或虚拟机元数据关联,以便外部模块可以迅速查询每容器或虚拟机的idle_age。
步骤S304,根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;
在其中一种情况下,由于每个实例具有不同的QoS要求,如果所有容器和虚拟机均采用同一个滑动窗口参数δt,就会使得所有容器和虚拟机的滑动窗口(t,t+δt)的大小相同,即内存分配和回收的条件相同,其效果也只是将内存平均分给各容器和虚拟机,造成非预期内存回收或内存颠簸,既难以满足QoS的要求,也无法提高内存利用率。
因而,根据本发明上述步骤S304,每个实例都分别对应着不同的滑动窗口参数δt,该滑动窗口参数δt的大小与实例的属性相关,该属性可以为实例的相关的任何参数。通过多滑动窗口的策略,通过支持多分区多窗口内存工作集,可以让工作在不同的QoS优先级下的容器或虚拟机,获取到定制化的内存工作集信息。以属性为QoS优先级为例,若实例要求高QoS优先级,那么可以为其设置较大的滑动窗口参数δt以尽量避免内存回收,而若实例的QoS优先级较低,那么可以为其设置较小的滑动窗口参数δt,以允许相对频繁的内存回收,提高内存利用率。
在其中另一种情况下,即便对同一个容器或虚拟机,当其工作在不同的使用场景下时,工作负载情况也会大不相同,如果同一个容器或虚拟机只对应一个静态的滑动窗口参数,那么在各种使用场景的各种工作负载下,内存分配和回收的阈值也维持不变,无法随工作负载的变化而变化,能会造成在工作负载低的时间段内存浪费,但在工作负载高的时间段,内存回收被触发,造成非预期内存回收,或者内存颠簸(Page Threshing)问题。
因而,根据本发明上述步骤S304,同一个容器或虚拟机也可能对应多个不同的滑动窗口参数δt,该滑动窗口参数δt的大小与容器或虚拟机的属性相关,该属性可以为实例的相关的任何参数。以属性为工作负载或内存使用情况为例,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,尽量为其分配较多的内存页,并减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,允许相对频繁的内存回收,提高内存利用率。
在其中又一种情况下,每个实例都分别对应着不同的滑动窗口参数δt1,同时,同一个容器或虚拟机也对应多个不同的滑动窗口参数δt2,以兼容上述两种情况。
步骤S306,根据未被访问年龄和滑动窗口,划分实例的内存工作集。
在上述步骤S306中,除了按照滑动窗口分配内存工作集外,还可以通过设置回收装置reclaimer,来根据滑动窗口参数δt以及内存页的未被访问年龄idle_age,在后台周期性(或用户同步阻塞式)回收处于滑动窗口外的非工作集内存,从而达到划分内存工作集的目的。
在上述步骤S306中,回收装置reclaimer可以为主动回收装置proactivereclaimer。主动回收装置会根据每个实例对应的预设回收策略去回收内存页,例如指定idle_age超过一个设置的阈值,才去回收。进一步的,对于内存QoS不敏感的批处理任务,可以根据批处理任务的生命周期设置,例如,设置idle age超出1小时以上,就回收。而对于内存最敏感的业务,可以设置24小时以上才回收。介于两者之间的业务,可以根据操作系统内存的监控数据,设置相关的阈值。在上述步骤S306中,在一种可选情况下,当得到与实例对应的滑动窗口和分配给实例的内存页的未被访问年龄,并进一步获取实例对应的回收阈值,在划分工作集时综合考虑滑动窗口和回收阈值,实现对非工作集内存的回收,例如回收处于滑动窗口之外且生命周期大于对应阈值的内存页。同样地,实例对应的回收阈值可以为多个,例如不同的场景模式或不同的负载情况。
在上述步骤S306中,在一种可选情况下,主动回收装置回收冷内存的策略设置可以设置为人工设置方式,即管理员依照经验或者系统监控数据,人为的设置回收阈值。在另一种可选情况下,系统中还包括策略配置模块,该策略配置模块根据任务的不同等级的(例如高,中,低的)内存QoS敏感度,自适应、动态调节回收阈值。策略配置模块从操作系统中获取内存相关的性能指标,并将该性能指标作为反馈的输入,按照预定规则产生配置策略,写入到系统中生效,并进一步检测生效后的系能内存相关的性能指标,进行进一步优化配置,如此实现动态的反馈调节。
通过上述步骤S302至S306,采用扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄的方式,通过根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;达到了根据未被访问年龄和滑动窗口,划分实例的内存工作集的目的,从而实现了使得工作在不同QoS优先级下的容器或虚拟机获取到定制化的内存工作集的技术效果,进而解决了在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
在本发明提出的上述内存集划分方法中,(1)对于每个容器或虚拟机,通过指定滑窗参数δt,即可获得指定时间窗口(t,t+δt)的内存工作集,这个内存工作集的内存,其idle_age全部在时间窗口(t,t+δt)范围之内;(2)对于每个容器,支持通过指定多个不同滑动窗口参数δt,可以同时获取不同时间滑窗的工作集,用以同时满足多使用场景;(3)在多个容器或者虚拟机之间,使用不同的滑窗参数δt,获取不同的工作集,以支持不同的QoS优先级。
通过本发明提出的内存集划分方法,能够满足混部场景中的内存利用率和内存QoS的最佳平衡实践,其动态获取内存工作集的开销要低于现有各方法。对同一个内存工作集,本发明提出的方法可支持多滑窗划分,以满足多内存工作集使用场景并存的需求。这些使用场景包括但不限于:容量规划,集群调度,负载均衡,内存回收等。对于多容器多虚拟机场景,本发明提出的方法支持多分区多滑窗工作集划分,以应对多容器多虚拟机场景下,不同内存QoS优先级的需求,以达到不同的利用率和QoS平衡目标。
在本发明实施例中,在S304根据实例的滑动窗口参数确定滑动窗口之前,方法还包括:
S303:根据实例的内存使用量、QoS优先级和内存页未被访问年龄中的至少一个确定滑动窗口参数。
在步骤S303中,滑动窗口参数计算公式为δt=F(usage,Prio,idle_statistics)其中usage为实例当前内存使用量,Prio为实例的QoS优先级,idle_statistics为实例的idle_age统计数据。三项参数的取值均与时间相关,故δt可随时间而变化,即随时间变化的动态滑动窗口。在实践中,可选一项或多项参数,不同实例可具有不同的计算公式。
在本发明实施例中,步骤S303包括步骤S303a:根据实例的QoS优先级确定滑动窗口参数。其中步骤S303a进一步包括:
步骤S303a1:获取每个实例的QoS优先级;
步骤S303a2:根据QoS优先级计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与QoS优先级正相关。
在上述步骤S303a1至步骤S303a2中,结合本发明图4所示,图4展示了多内存分区多滑窗的内存工作集划分效果,图中存在三个内存分区(容器或虚拟机)实例,分别为实例A、实例B和实例C,三个实例的QoS优先级为QoSA>QoSC>QoSB,根据三个实例的QoS优先级,分别指定相三个实例对应的不同的滑窗参数δtA、δtB以及δtC,且三个滑窗参数的大小关系满足:δtA>δtC>δtB。图4中左侧内存池为无滑窗的工作集划分,右侧经裁剪(trim)的内存池为有滑窗的工作集划分。分区实例A因QoS优先级较高,故而为其设置了较大滑窗参数δtA,得到内存工作集w(t,δtA),据此设置其内存回收水位,以减少内存回收的风险;而分区实例B因QoS优先级低,使用了较小的滑窗参数δtB,根据工作集w(t,δtB)设置内存回收水位,来通过积极的内存回收,和更高的部署密度,从而提升内存利用率;分区实例C介于分区实例A与B之间。
在上述步骤S303a1至步骤S303a2中,工作集的滑动窗口参数δt可以基于QoS优先级指定,用以支持不同的内存利用率和内存回收目标:高QoS优先级分区,需要低内存利用率以避免内存回收;低QoS优先级分区,需要高内存利用率,允许相对频繁的内存回收。
在本发明实施例中,步骤S303包括步骤S303b:根据实例的内存页未被访问年龄确定滑动窗口参数。其中步骤S303b进一步包括:
步骤S303b1:获取每个实例对应的多个分布区间;
步骤S303b2:根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的分布区间;
步骤S303b3:统计每个分布区间中的内存页数目,得到内存页未被访问年龄的统计数据;
步骤S303b4:根据统计数据计算得到每个实例对应的滑动窗口参数。
在上述步骤S303b1至步骤S303b4中,对于步骤S303b1,由于不同实例可具有不同的idle_age分布特性,每个实例对应的多个分布区间是动态可调节的,即不同实例可基于不同区间进行统计。对于步骤S303b3,由于多个内存页的未被访问年龄的元数据的原始数据量较大(每页具有8bit数据),不利于用户直接使用。因而对其进行统计处理,得到的内存页未被访问年龄的统计数据,随后可以通过直方分布图的格式进行输出或显示,如(1,2,5,15,30,60)分别表示统计输出未被访问年龄idle_age分别位于区间[1,2),[2,5),[5,15),[15,30),[30,60),[60,256)的内存页数目。
在本发明实施例中,步骤S303包括步骤S303c:根据实例的内存使用量确定滑动窗口参数。其中步骤S303c进一步包括:
步骤S303c1:获取每个实例的内存使用量;
步骤S303c2:根据内存使用量计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与内存使用量正相关。
在上述步骤S303c1至步骤S303c2中,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,或者提高当前的滑动窗口参数的值,通过尽量为其分配较多的内存页,提升回收水位来减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,或者减小当前滑动窗口参数的值,允许相对频繁的内存回收,提高内存利用率。
在本发明实施例中,步骤S302扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄还包括:
步骤S3021:根据预设的扫描周期扫描已分配给实例的内存;
步骤S3022:判断在扫描周期内第一内存页是否被访问过,其中第一内存页为内存中的每一个内存页;
步骤S3023:若在扫描周期内第一内存页被访问过,则增加第一内存页对应的未被访问年龄;
步骤S3024:若在扫描周期内第一内存页未被访问过,则将第一内存页对应的未被访问年龄清零。
在上述步骤S3021至步骤S3024中,每一物理页具有idle_age属性,取值范围0-MAX_IDLE_AGE(为描述方便,此处设255,可根据硬件以及系统物理内存大小进行调整)。idle_age可以表示内存页未被访问所持续的扫描周期数。例如,以扫描周期scan_period定时扫描已申请的物理内存,设T为当前时间,若某物理页在(T-scan_period,T)时间段内内存页未被访问过,则其相应idle_age加1;若被访问过,则将其idle_age清零,此时idle_age表示当前物理页在idle_age*scan_period时间段内未曾被访问过。
在本发明实施例中,步骤S3021:根据预设的扫描周期扫描已分配给实例的内存包括:
步骤S30211:获取每个实例对应的多个扫描区间,其中每个扫描区间对应不同的扫描周期;
步骤S30212:根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的扫描区间;
步骤S30213:按照每个内存页所属的扫描区间所对应的扫描周期,对已分配给实例的内存进行扫描。
上述步骤S30211至步骤S30213实现了自适应的扫描降频,例如,针对某个实例,预先设定扫描区间为[0,1),[4,8),[8,16)以及[16,MAX_IDLE_AGE),其中扫描区间[0,1)对应扫描周期scan_period/2,扫描区间[4,8)对应扫描周期scan_period/2,扫描区间[8,16)对应扫描周期scan_period/4,扫描区间[16,MAX_IDLE_AGE)对应扫描周期scan_period/16。由上述分析可知,idle_age取值范围为0-MAX_IDLE_AGE,例如当某一内存页的idle_age取值为7时,其落入扫描区间[4,8),则此时按照scan_period/4扫描周期对内存页进行扫描。通过分析可知,idle_age取值越大,表示其未被访问的时间越长,则此时动态增加扫描频率,提高了未被访问内存页的回收概率;而对于idle_age取值较小的内存页,表示其近期刚被访问过,则此时适当减小扫描频率,节省了CPU资源的使用开销,即通过根据idle_age动态调整扫描周期,减少了扫描时对CPU资源的使用开销;并且这种自适应的扫描调频方法,避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在本发明实施例中,每个实例对应至少两个滑动窗口参数时,在步骤S304根据实例的滑动窗口参数确定滑动窗口之前,方法还包括步骤S300:
步骤S3001:获取当前实例的使用场景,使用场景至少包括:容量规划,集群调度,负载均衡,以及内存回收;
步骤S3002:确定与使用场景对应的滑动窗口参数。
在上述步骤S3001至步骤S3002中,工作在不同的使用场景下时,实例的工作负载情况也会大不相同,若能预先设置好使用场景与滑动窗口参数的对应关系,则能够直接根据使用场景确定对应的滑动窗口参数,例如针对容器或虚拟机的负载高、内存使用量大或使用率高的使用场景,可以设置较大的滑动窗口参数,尽量为其分配较多的内存页,并减少内存回收;针对容器或虚拟机的负载低、内存使用量小或使用率低的使用场景,可以设置较小的滑动窗口参数,允许相对频繁的内存回收,提高内存利用率。
综上,传统工作集划分上,一般不支持根据多个使用场景,设置窗口参数,同时获得不同内存工作集的能力;更难以支持依据QoS优先级设置多个窗口参数,以获取不同内存分区的的工作集的能力。传统工作集划分方法要么低负载开销,但丧失了工作集划分的精确度,如基于FIFO,Clock,LRU排序划分;要么高准确度,但是无法避免高负载,因此无法产品环境下,7x24小时无间断使用,例如,WSClock和基于Linux下的Idle Page Tracking获取工作集的方法。
而本发明的方法基于多分区多窗口,可支持多使用场景和多QoS优先级,能很好地解决工作集准确度和工作集扫描开销的冲突。减少扫描时对CPU资源的使用开销。算法上,通过为每个物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。并且在扫描循环里,引入了负载检测主动降频算法,避免对CPU资源的长时间消耗。用户可以通过物理内存大小,设置合理的扫描周期,满足工作集划分需求。降低维护工作集元数据状态更新和查询的开销。工作集元数据更新和查询路径上,避免了一次性大量数据交换拷贝,避免的过多的上下文切换。避免因容器和虚拟机个数增加,带来的扩展性问题。工作集元数据的组织上,对容器和虚拟机个数的增加不敏感。由于扫描是基于物理内存的扫描,因此,容器和虚拟机个数增加,不会显著带来扫描的负担。避免因物理内存增加,带来的扫描开销增加问题。对某些巨型物理内存的机器,可以通过设置更低扫描周期,或者使用采样算法,多线程分区扫描以避免出现处理器扫描开销增加问题。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的工作集划分方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
实施例2
根据本申请实施例,还提供了一种工作集划分方法实施例,其中,图5示出了工作集划分方法的流程图,如图5所示,该方法包括:
步骤S502:获取实例的内存中的每个内存页的未被访问年龄;
需要说明的是,在上述步骤S502中,内存页的未被访问年龄可以采用新内存热度跟踪(Memory Hotness Tracking)改进算法来获取,利用硬件协助机制,实现对内存的冷热跟踪功能,该功能可以按照内存页为单位,对内存多久未被访问做细粒度跟踪,每个物理页都有自己的未被访问的年龄,被称为idle_age。通过为每个内存物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在上述步骤S502中,执行该工作集划分方法之前,已经按照预定的扫描周期获取了每个内存页的未被访问年龄,扫描周期可以自定义设置。在某些情况下,为了保证未被访问年龄数据的准确,可以减小扫描周期增加扫描频率,而在处理器负担重的情况下,则可以增大扫描周期减小扫描频率。扫描得到的内存页未被访问年龄数据则按照预定格式,存储在预定的存储器中,使得在执行工作集划分方法时,可以直接从存储器中读取每个内存页的未被访问年龄,而无需从扫描内存页的步骤开始执行,节省了工作集划分方法的执行时间,且使得工作集的划分操作与内存页的扫描操作解耦合,提高了处理效率。
步骤S504:获取实例对应的滑动窗口参数,其中,滑动窗口参数用于确定滑动窗口,每个实例对应至少一个滑动窗口参数;
在其中一种情况下,由于每个实例具有不同的QoS要求,如果所有容器和虚拟机均采用同一个滑动窗口参数δt,就会使得所有容器和虚拟机的滑动窗口(t,t+δt)的大小相同,即内存分配和回收的条件相同,其效果也只是将内存平均分给各容器和虚拟机,造成非预期内存回收或内存颠簸,既难以满足QoS的要求,也无法提高内存利用率。
因而,根据本发明上述步骤S504,每个实例都分别对应着不同的滑动窗口参数δt,该滑动窗口参数δt的大小与实例的属性相关,该属性可以为实例的相关的任何参数。通过多滑动窗口的策略,通过支持多分区多窗口内存工作集,可以让工作在不同的QoS优先级下的容器或虚拟机,获取到定制化的内存工作集信息。以属性为QoS优先级为例,若实例要求高QoS优先级,那么可以为其设置较大的滑动窗口参数δt以尽量避免内存回收,而若实例的QoS优先级较低,那么可以为其设置较小的滑动窗口参数δt,以允许相对频繁的内存回收,提高内存利用率。
在其中另一种情况下,即便对同一个容器或虚拟机,当其工作在不同的使用场景下时,工作负载情况也会大不相同,如果同一个容器或虚拟机只对应一个静态的滑动窗口参数,那么在各种使用场景的各种工作负载下,内存分配和回收的阈值也维持不变,无法随工作负载的变化而变化,能会造成在工作负载低的时间段内存浪费,但在工作负载高的时间段,内存回收被触发,造成非预期内存回收,或者内存颠簸(Page Threshing)问题。
因而,根据本发明上述步骤S504,同一个容器或虚拟机也可能对应多个不同的滑动窗口参数δt,该滑动窗口参数δt的大小与容器或虚拟机的属性相关,该属性可以为实例的相关的任何参数。以属性为工作负载或内存使用情况为例,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,尽量为其分配较多的内存页,并减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,允许相对频繁的内存回收,提高内存利用率。
在其中又一种情况下,每个实例都分别对应着不同的滑动窗口参数δt1,同时,同一个容器或虚拟机也对应多个不同的滑动窗口参数δt2,以兼容上述两种情况。
步骤S506:根据未被访问年龄和滑动窗口,划分实例的内存工作集。
在上述步骤S506中,除了按照滑动窗口分配内存工作集外,还可以通过设置回收装置reclaimer,来根据滑动窗口参数δt以及内存页的未被访问年龄idle_age,在后台周期性(或用户同步阻塞式)回收处于滑动窗口外的非工作集内存,从而达到划分内存工作集的目的。
在上述步骤S506中,回收装置reclaimer可以为主动回收装置proactivereclaimer。主动回收装置会根据每个实例对应的预设回收策略去回收内存页,例如指定idle_age超过一个设置的阈值,才去回收。进一步的,对于内存QoS不敏感的批处理任务,可以根据批处理任务的生命周期设置,例如,设置idle age超出1小时以上,就回收。而对于内存最敏感的业务,可以设置24小时以上才回收。介于两者之间的业务,可以根据操作系统内存的监控数据,设置相关的阈值。
在上述步骤S506中,在一种可选情况下,当得到与实例对应的滑动窗口和分配给实例的内存页的未被访问年龄,并进一步获取实例对应的回收阈值,在划分工作集时综合考虑滑动窗口和回收阈值,实现对非工作集内存的回收,例如回收处于滑动窗口之外且生命周期大于对应阈值的内存页。同样地,实例对应的回收阈值可以为多个,例如不同的场景模式或不同的负载情况。
在上述步骤S506中,在一种可选情况下,主动回收装置回收冷内存的策略设置可以设置为人工设置方式,即管理员依照经验或者系统监控数据,人为的设置回收阈值。在另一种可选情况下,系统中还包括策略配置模块,该策略配置模块根据任务的不同等级的(例如高,中,低的)内存QoS敏感度,自适应、动态调节回收阈值。策略配置模块从操作系统中获取内存相关的性能指标,并将该性能指标作为反馈的输入,按照预定规则产生配置策略,写入到系统中生效,并进一步检测生效后的系能内存相关的性能指标,进行进一步优化配置,如此实现动态的反馈调节。
通过上述步骤S502至S506,采用扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄的方式,通过根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;达到了根据未被访问年龄和滑动窗口,划分实例的内存工作集的目的,从而实现了使得工作在不同QoS优先级下的容器或虚拟机获取到定制化的内存工作集的技术效果,进而解决了在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
在本发明提出的上述内存集划分方法中,(1)对于每个容器或虚拟机,通过指定滑窗参数δt,即可获得指定时间窗口(t,t+δt)的内存工作集,这个内存工作集的内存,其idle_age全部在时间窗口(t,t+δt)范围之内;(2)对于每个容器,支持通过指定多个不同滑动窗口参数δt,可以同时获取不同时间滑窗的工作集,用以同时满足多使用场景;(3)在多个容器或者虚拟机之间,使用不同的滑窗参数δt,获取不同的工作集,以支持不同的QoS优先级。
通过本发明提出的内存集划分方法,能够满足混部场景中的内存利用率和内存QoS的最佳平衡实践,其动态获取内存工作集的开销要低于现有各方法。对同一个内存工作集,本发明提出的方法可支持多滑窗划分,以满足多内存工作集使用场景并存的需求。这些使用场景包括但不限于:容量规划,集群调度,负载均衡,内存回收等。对于多容器多虚拟机场景,本发明提出的方法支持多分区多滑窗工作集划分,以应对多容器多虚拟机场景下,不同内存QoS优先级的需求,以达到不同的利用率和QoS平衡目标。
实施例3
根据本申请实施例,还提供了一种工作集划分方法实施例,其中,图6示出了工作集划分方法的流程图,如图6所示,该方法包括:
步骤S602:获取实例的内存中的每个内存页的未被访问年龄;
在上述步骤S602中,内存页的未被访问年龄可以采用新内存热度跟踪(MemoryHotness Tracking)改进算法来获取,利用硬件协助机制,实现对内存的冷热跟踪功能,该功能可以按照内存页为单位,对内存多久未被访问做细粒度跟踪,每个物理页都有自己的未被访问的年龄,被称为idle_age。通过为每个内存物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在上述步骤S602中,执行该工作集划分方法之前,已经按照预定的扫描周期获取了每个内存页的未被访问年龄,扫描周期可以自定义设置。在某些情况下,为了保证未被访问年龄数据的准确,可以减小扫描周期增加扫描频率,而在处理器负担重的情况下,则可以增大扫描周期减小扫描频率。扫描得到的内存页未被访问年龄数据则按照预定格式,存储在预定的存储器中,使得在执行工作集划分方法时,可以直接从存储器中读取每个内存页的未被访问年龄,而无需从扫描内存页的步骤开始执行,节省了工作集划分方法的执行时间,且使得工作集的划分操作与内存页的扫描操作解耦合,提高了处理效率。
步骤S604:根据所述实例的滑动窗口参数确定滑动窗口,其中,不同的实例对应的滑动窗口参数不同;
在其中一种情况下,由于每个实例具有不同的QoS要求,如果所有容器和虚拟机均采用同一个滑动窗口参数δt,就会使得所有容器和虚拟机的滑动窗口(t,t+δt)的大小相同,即内存分配和回收的条件相同,其效果也只是将内存平均分给各容器和虚拟机,造成非预期内存回收或内存颠簸,既难以满足QoS的要求,也无法提高内存利用率。
因而,根据本发明上述步骤S604,不同的实例都分别对应着不同的滑动窗口参数δt,该滑动窗口参数δt的大小与实例的属性相关,该属性可以为实例的相关的任何参数。通过多滑动窗口的策略,通过支持多分区多窗口内存工作集,可以让工作在不同的QoS优先级下的容器或虚拟机,获取到定制化的内存工作集信息。以属性为QoS优先级为例,若实例要求高QoS优先级,那么可以为其设置较大的滑动窗口参数δt以尽量避免内存回收,而若实例的QoS优先级较低,那么可以为其设置较小的滑动窗口参数δt,以允许相对频繁的内存回收,提高内存利用率。
在其中又一种情况下,每个实例都分别对应着不同的滑动窗口参数δt1,同时,同一个容器或虚拟机也对应多个不同的滑动窗口参数δt2,以兼容上述两种情况。
步骤S606:根据未被访问年龄和滑动窗口,划分实例的内存工作集。
在上述步骤S606中,除了按照滑动窗口分配内存工作集外,还可以通过设置回收装置reclaimer,来根据滑动窗口参数δt以及内存页的未被访问年龄idle_age,在后台周期性(或用户同步阻塞式)回收处于滑动窗口外的非工作集内存,从而达到划分内存工作集的目的。
在上述步骤S606中,回收装置reclaimer可以为主动回收装置proactivereclaimer。主动回收装置会根据每个实例对应的预设回收策略去回收内存页,例如指定idle_age超过一个设置的阈值,才去回收。进一步的,对于内存QoS不敏感的批处理任务,可以根据批处理任务的生命周期设置,例如,设置idle age超出1小时以上,就回收。而对于内存最敏感的业务,可以设置24小时以上才回收。介于两者之间的业务,可以根据操作系统内存的监控数据,设置相关的阈值。
在上述步骤S606中,在一种可选情况下,当得到与实例对应的滑动窗口和分配给实例的内存页的未被访问年龄,并进一步获取实例对应的回收阈值,在划分工作集时综合考虑滑动窗口和回收阈值,实现对非工作集内存的回收,例如回收处于滑动窗口之外且生命周期大于对应阈值的内存页。同样地,实例对应的回收阈值可以为多个,例如不同的场景模式或不同的负载情况。
在上述步骤S606中,在一种可选情况下,主动回收装置回收冷内存的策略设置可以设置为人工设置方式,即管理员依照经验或者系统监控数据,人为的设置回收阈值。在另一种可选情况下,系统中还包括策略配置模块,该策略配置模块根据任务的不同等级的(例如高,中,低的)内存QoS敏感度,自适应、动态调节回收阈值。策略配置模块从操作系统中获取内存相关的性能指标,并将该性能指标作为反馈的输入,按照预定规则产生配置策略,写入到系统中生效,并进一步检测生效后的系能内存相关的性能指标,进行进一步优化配置,如此实现动态的反馈调节。
通过上述步骤S602至S606,采用扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄的方式,通过根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;达到了根据未被访问年龄和滑动窗口,划分实例的内存工作集的目的,从而实现了使得工作在不同QoS优先级下的容器或虚拟机获取到定制化的内存工作集的技术效果,进而解决了在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
在本发明提出的上述内存集划分方法中,(1)对于每个容器或虚拟机,通过指定滑窗参数δt,即可获得指定时间窗口(t,t+δt)的内存工作集,这个内存工作集的内存,其idle_age全部在时间窗口(t,t+δt)范围之内;(2)对于每个容器,支持通过指定多个不同滑动窗口参数δt,可以同时获取不同时间滑窗的工作集,用以同时满足多使用场景;(3)在多个容器或者虚拟机之间,使用不同的滑窗参数δt,获取不同的工作集,以支持不同的QoS优先级。
通过本发明提出的内存集划分方法,能够满足混部场景中的内存利用率和内存QoS的最佳平衡实践,其动态获取内存工作集的开销要低于现有各方法。对同一个内存工作集,本发明提出的方法可支持多滑窗划分,以满足多内存工作集使用场景并存的需求。这些使用场景包括但不限于:容量规划,集群调度,负载均衡,内存回收等。对于多容器多虚拟机场景,本发明提出的方法支持多分区多滑窗工作集划分,以应对多容器多虚拟机场景下,不同内存QoS优先级的需求,以达到不同的利用率和QoS平衡目标。
实施例4
根据本申请实施例,还提供了一种工作集划分方法实施例,其中,图7示出了工作集划分方法的流程图,如图7所示,该方法包括:
步骤S702:获取实例的内存中的每个内存页的未被访问年龄;
需要说明的是,在上述步骤S702中,内存页的未被访问年龄可以采用新内存热度跟踪(Memory Hotness Tracking)改进算法来获取,利用硬件协助机制,实现对内存的冷热跟踪功能,该功能可以按照内存页为单位,对内存多久未被访问做细粒度跟踪,每个物理页都有自己的未被访问的年龄,被称为idle_age。通过为每个内存物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在上述步骤S702中,执行该工作集划分方法之前,已经按照预定的扫描周期获取了每个内存页的未被访问年龄,扫描周期可以自定义设置。在某些情况下,为了保证未被访问年龄数据的准确,可以减小扫描周期增加扫描频率,而在处理器负担重的情况下,则可以增大扫描周期减小扫描频率。扫描得到的内存页未被访问年龄数据则按照预定格式,存储在预定的存储器中,使得在执行工作集划分方法时,可以直接从存储器中读取每个内存页的未被访问年龄,而无需从扫描内存页的步骤开始执行,节省了工作集划分方法的执行时间,且使得工作集的划分操作与内存页的扫描操作解耦合,提高了处理效率。
步骤S704:根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少两个滑动窗口参数;
在其中一种情况下,即便对同一个容器或虚拟机,当其工作在不同的使用场景下时,工作负载情况也会大不相同,如果同一个容器或虚拟机只对应一个静态的滑动窗口参数,那么在各种使用场景的各种工作负载下,内存分配和回收的阈值也维持不变,无法随工作负载的变化而变化,能会造成在工作负载低的时间段内存浪费,但在工作负载高的时间段,内存回收被触发,造成非预期内存回收,或者内存颠簸(Page Threshing)问题。
因而,根据本发明上述步骤S704,同一个容器或虚拟机也可能对应多个不同的滑动窗口参数δt,该滑动窗口参数δt的大小与容器或虚拟机的属性相关,该属性可以为实例的相关的任何参数。以属性为工作负载或内存使用情况为例,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,尽量为其分配较多的内存页,并减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,允许相对频繁的内存回收,提高内存利用率。
在其中又一种情况下,每个实例都分别对应着不同的滑动窗口参数δt1,同时,同一个容器或虚拟机也对应多个不同的滑动窗口参数δt2,以兼容上述两种情况。
步骤S706:根据未被访问年龄和滑动窗口,划分实例的内存工作集。
在上述步骤S706中,除了按照滑动窗口分配内存工作集外,还可以通过设置回收装置reclaimer,来根据滑动窗口参数δt以及内存页的未被访问年龄idle_age,在后台周期性(或用户同步阻塞式)回收处于滑动窗口外的非工作集内存,从而达到划分内存工作集的目的。
在上述步骤S706中,回收装置reclaimer可以为主动回收装置proactivereclaimer。主动回收装置会根据每个实例对应的预设回收策略去回收内存页,例如指定idle_age超过一个设置的阈值,才去回收。进一步的,对于内存QoS不敏感的批处理任务,可以根据批处理任务的生命周期设置,例如,设置idle age超出1小时以上,就回收。而对于内存最敏感的业务,可以设置24小时以上才回收。介于两者之间的业务,可以根据操作系统内存的监控数据,设置相关的阈值。
在上述步骤S706中,在一种可选情况下,当得到与实例对应的滑动窗口和分配给实例的内存页的未被访问年龄,并进一步获取实例对应的回收阈值,在划分工作集时综合考虑滑动窗口和回收阈值,实现对非工作集内存的回收,例如回收处于滑动窗口之外且生命周期大于对应阈值的内存页。同样地,实例对应的回收阈值可以为多个,例如不同的场景模式或不同的负载情况。
在上述步骤S706中,在一种可选情况下,主动回收装置回收冷内存的策略设置可以设置为人工设置方式,即管理员依照经验或者系统监控数据,人为的设置回收阈值。在另一种可选情况下,系统中还包括策略配置模块,该策略配置模块根据任务的不同等级的(例如高,中,低的)内存QoS敏感度,自适应、动态调节回收阈值。策略配置模块从操作系统中获取内存相关的性能指标,并将该性能指标作为反馈的输入,按照预定规则产生配置策略,写入到系统中生效,并进一步检测生效后的系能内存相关的性能指标,进行进一步优化配置,如此实现动态的反馈调节。
通过上述步骤S702至S706,采用扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄的方式,通过根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;达到了根据未被访问年龄和滑动窗口,划分实例的内存工作集的目的,从而实现了使得工作在不同QoS优先级下的容器或虚拟机获取到定制化的内存工作集的技术效果,进而解决了在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
在本发明提出的上述内存集划分方法中,(1)对于每个容器或虚拟机,通过指定滑窗参数δt,即可获得指定时间窗口(t,t+δt)的内存工作集,这个内存工作集的内存,其idle_age全部在时间窗口(t,t+δt)范围之内;(2)对于每个容器,支持通过指定多个不同滑动窗口参数δt,可以同时获取不同时间滑窗的工作集,用以同时满足多使用场景;(3)在多个容器或者虚拟机之间,使用不同的滑窗参数δt,获取不同的工作集,以支持不同的QoS优先级。
通过本发明提出的内存集划分方法,能够满足混部场景中的内存利用率和内存QoS的最佳平衡实践,其动态获取内存工作集的开销要低于现有各方法。对同一个内存工作集,本发明提出的方法可支持多滑窗划分,以满足多内存工作集使用场景并存的需求。这些使用场景包括但不限于:容量规划,集群调度,负载均衡,内存回收等。对于多容器多虚拟机场景,本发明提出的方法支持多分区多滑窗工作集划分,以应对多容器多虚拟机场景下,不同内存QoS优先级的需求,以达到不同的利用率和QoS平衡目标。
实施例5
根据本申请实施例,还提供了一种用于实施上述工作集划分方法的划分装置,如图8所示,该装置100包括:获取模块80,确定模块82和划分模块84。
其中,获取模块80,用于扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;
在上述获取模块80中,采用新内存热度跟踪(Memory Hotness Tracking)改进算法,利用硬件协助机制,实现对内存的冷热跟踪功能,该功能可以按照内存页为单位,对内存多久未被访问做细粒度跟踪,每个物理页都有自己的未被访问的年龄,被称为idle_age。通过为每个内存物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在上述获取模块80中,还可以采用新的多分区多窗口工作集元数据组织方式,使得内存的idle_age被记录在元数据里,可以与容器或虚拟机元数据关联,以便外部模块可以迅速查询每容器或虚拟机的idle_age。
其中,确定模块82,用于根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;
在其中一种情况下,由于每个实例具有不同的QoS要求,如果所有容器和虚拟机均采用同一个滑动窗口参数δt,就会使得所有容器和虚拟机的滑动窗口(t,t+δt)的大小相同,即内存分配和回收的条件相同,其效果也只是将内存平均分给各容器和虚拟机,造成非预期内存回收或内存颠簸,既难以满足QoS的要求,也无法提高内存利用率。
因而,确定模块82中,每个实例都分别对应着不同的滑动窗口参数δt,该滑动窗口参数δt的大小与实例的属性相关,该属性可以为实例的相关的任何参数。通过多滑动窗口的策略,通过支持多分区多窗口内存工作集,可以让工作在不同的QoS优先级下的容器或虚拟机,获取到定制化的内存工作集信息。以属性为QoS优先级为例,若实例要求高QoS优先级,那么可以为其设置较大的滑动窗口参数δt以尽量避免内存回收,而若实例的QoS优先级较低,那么可以为其设置较小的滑动窗口参数δt,以允许相对频繁的内存回收,提高内存利用率。
在其中另一种情况下,即便对同一个容器或虚拟机,当其工作在不同的使用场景下时,工作负载情况也会大不相同,如果同一个容器或虚拟机只对应一个静态的滑动窗口参数,那么在各种使用场景的各种工作负载下,内存分配和回收的阈值也维持不变,无法随工作负载的变化而变化,能会造成在工作负载低的时间段内存浪费,但在工作负载高的时间段,内存回收被触发,造成非预期内存回收,或者内存颠簸(Page Threshing)问题。
因而,确定模块82中,同一个容器或虚拟机也可能对应多个不同的滑动窗口参数δt,该滑动窗口参数δt的大小与容器或虚拟机的属性相关,该属性可以为实例的相关的任何参数。以属性为工作负载或内存使用情况为例,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,尽量为其分配较多的内存页,并减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,允许相对频繁的内存回收,提高内存利用率。
在其中又一种情况下,每个实例都分别对应着不同的滑动窗口参数δt1,同时,同一个容器或虚拟机也对应多个不同的滑动窗口参数δt2,以兼容上述两种情况。
其中,划分模块84,用于根据未被访问年龄和滑动窗口,划分实例的内存工作集。
划分模块84中,除了按照滑动窗口分配内存工作集外,还可以通过设置回收装置reclaimer,来根据滑动窗口参数δt以及内存页的未被访问年龄idle_age,在后台周期性(或用户同步阻塞式)回收处于滑动窗口外的非工作集内存,从而达到划分内存工作集的目的。
通过获取模块80扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄的方式,通过确定模块82根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;达到了划分模块84根据未被访问年龄和滑动窗口,划分实例的内存工作集的目的,从而实现了使得工作在不同QoS优先级下的容器或虚拟机获取到定制化的内存工作集的技术效果,进而解决了在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
回收装置reclaimer可以为主动回收装置proactive reclaimer。主动回收装置会根据每个实例对应的预设回收策略去回收内存页,例如指定idle_age超过一个设置的阈值,才去回收。进一步的,对于内存QoS不敏感的批处理任务,可以根据批处理任务的生命周期设置,例如,设置idle age超出1小时以上,就回收。而对于内存最敏感的业务,可以设置24小时以上才回收。介于两者之间的业务,可以根据操作系统内存的监控数据,设置相关的阈值。
在一种可选情况下,当得到与实例对应的滑动窗口和分配给实例的内存页的未被访问年龄,并进一步获取实例对应的回收阈值,在划分工作集时综合考虑滑动窗口和回收阈值,实现对非工作集内存的回收,例如回收处于滑动窗口之外且生命周期大于对应阈值的内存页。同样地,实例对应的回收阈值可以为多个,例如不同的场景模式或不同的负载情况。
在一种可选情况下,主动回收装置回收冷内存的策略设置可以设置为人工设置方式,即管理员依照经验或者系统监控数据,人为的设置回收阈值。在另一种可选情况下,系统中还包括策略配置模块,该策略配置模块根据任务的不同等级的(例如高,中,低的)内存QoS敏感度,自适应、动态调节回收阈值。策略配置模块从操作系统中获取内存相关的性能指标,并将该性能指标作为反馈的输入,按照预定规则产生配置策略,写入到系统中生效,并进一步检测生效后的系能内存相关的性能指标,进行进一步优化配置,如此实现动态的反馈调节。
在本发明提出的上述内存集划分装置中,(1)对于每个容器或虚拟机,通过指定滑窗参数δt,即可获得指定时间窗口(t,t+δt)的内存工作集,这个内存工作集的内存,其idle_age全部在时间窗口(t,t+δt)范围之内;(2)对于每个容器,支持通过指定多个不同滑动窗口参数δt,可以同时获取不同时间滑窗的工作集,用以同时满足多使用场景;(3)在多个容器或者虚拟机之间,使用不同的滑窗参数δt,获取不同的工作集,以支持不同的QoS优先级。
通过本发明提出的内存集划分装置,能够满足混部场景重的内存利用率和内存QoS的最佳平衡实践,其动态获取内存工作集的开销要低于现有各装置。对同一个内存工作集,本发明提出的装置可支持多滑窗划分,以满足多内存工作集使用场景并存的需求。这些使用场景包括但不限于:容量规划,集群调度,负载均衡,内存回收等。对于多容器多虚拟机场景,本发明提出的装置支持多分区多滑窗工作集划分,以应对多容器多虚拟机场景下,不同内存QoS优先级的需求,以达到不同的利用率和QoS平衡目标。
在本发明实施例中,确定模块82还用于根据实例的内存使用量、QoS优先级和内存页未被访问年龄中的至少一个确定滑动窗口参数。
在确定模块82中,滑动窗口计算公式为δt=F(usage,Prio,idle_statistics)其中usage为实例当前内存使用量,Prio为实例的QoS优先级,idle_statistics为实例的idle_age统计数据。三项参数的取值均与时间相关,故δt可随时间而变化,即随时间变化的动态滑动窗口。在实践中,可选一项或多项参数,不同实例可具有不同的计算公式。
在本发明实施例中,确定模块82还用于根据实例的QoS优先级确定滑动窗口参数。具体的,确定模块82用于获取每个实例的QoS优先级;根据QoS优先级计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与QoS优先级正相关。换句话说,工作集的滑动窗口参数δt可以基于QoS优先级指定,用以支持不同的内存利用率和内存回收目标:高QoS优先级分区,需要低内存利用率以避免内存回收;低QoS优先级分区,需要高内存利用率,允许相对频繁的内存回收。
结合本发明图2所示,图2展示了多内存分区多滑窗的内存工作集划分效果,图中存在三个内存分区(容器或虚拟机)实例,分别为实例A、实例B和实例C,三个实例的QoS优先级为QoSA>QoSC>QoSB,根据三个实例的QoS优先级,分别指定相三个实例对应的不同的滑窗参数δtA、δtB以及δtC,且三个滑窗参数的大小关系满足:δtA>δtC>δtB。图2中左侧内存池为无滑窗的工作集划分,右侧内存池为有滑窗的工作集划分。分区实例A因QoS优先级较高,故而为其设置了较大滑窗参数δtA,得到内存工作集w(t,δtA),据此设置其内存回收水位,以减少内存回收的风险;而分区实例B因QoS优先级低,使用了较小的滑窗参数δtB,根据工作集w(t,δtB)设置内存回收水位,来通过积极的内存回收,和更高的部署密度,从而提升内存利用率;分区实例C介于分区实例A与B之间。
在本发明实施例中,确定模块82还用于根据实例的内存页未被访问年龄确定滑动窗口参数。具体的,确定模块82用于获取每个实例对应的多个分布区间;根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的分布区间;统计每个分布区间中的内存页数目,得到内存页未被访问年龄的统计数据;根据统计数据计算得到每个实例对应的滑动窗口参数。
在确定模块82中,由于不同实例可具有不同的idle_age分布特性,每个实例对应的多个分布区间是动态可调节的,即不同实例可基于不同区间进行统计。由于多个内存页的未被访问年龄的元数据的原始数据量较大(每页具有8bit数据),不利于用户直接使用。因而对其进行统计处理,得到的内存页未被访问年龄的统计数据,随后可以通过直方分布图的格式进行输出或显示,如(1,2,5,15,80,60)分别表示统计输出未被访问年龄idle_age分别位于区间[1,2),[2,5),[5,15),[15,80),[80,60),[60,256)的内存页数目。
在本发明实施例中,确定模块82还用于根据实例的内存使用量确定滑动窗口参数。具体的,确定模块82用于获取每个实例的内存使用量;根据内存使用量计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与内存使用量正相关。
在上述确定模块82中,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,或者提高当前的滑动窗口参数的值,通过尽量为其分配较多的内存页,提升回收水位来减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,或者减小当前滑动窗口参数的值,允许相对频繁的内存回收,提高内存利用率。
在本发明实施例中,获取模块80包括:
扫描子模块,用于根据预设的扫描周期扫描已分配给实例的内存;
判断子模块,用于判断在扫描周期内第一内存页是否被访问过,其中第一内存页为内存中的每一个内存页;
调节子模块,用于在扫描周期内第一内存页被访问过时,增加第一内存页对应的未被访问年龄;在扫描周期内第一内存页未被访问过时,将第一内存页对应的未被访问年龄清零。
在上述获取模块80中,每一物理页具有idle_age属性,取值范围0-MAX_IDLE_AGE(为描述方便,此处设255,可根据硬件以及系统物理内存大小进行调整)。idle_age可以表示内存页未被访问所持续的扫描周期数。例如,以扫描周期scan_period定时扫描已申请的物理内存,设T为当前时间,若某物理页在(T-scan_period,T)时间段内内存页未被访问过,则其相应idle_age加1;若被访问过,则将其idle_age清零,此时idle_age表示当前物理页在idle_age*scan_period时间段内未曾被访问过。
在本发明实施例中,扫描子模块包括:
扫描区间获取子模块,用于获取每个实例对应的多个扫描区间,其中每个扫描区间对应不同的扫描周期;
扫描区间确定子模块,用于根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的扫描区间;
上述扫描子模块还用于按照每个内存页所属的扫描区间所对应的扫描周期,对已分配给实例的内存进行扫描。
上述扫描子模块实现了自适应的扫描降频,例如,针对某个实例,预先设定扫描区间为[0,1),[4,8),[8,16)以及[16,MAX_IDLE_AGE),其中扫描区间[0,1)对应扫描周期scan_period/2,扫描区间[4,8)对应扫描周期scan_period/2,扫描区间[8,16)对应扫描周期scan_period/4,扫描区间[16,MAX_IDLE_AGE)对应扫描周期scan_period/16。由上述分析可知,idle_age取值范围为0-MAX_IDLE_AGE,例如当某一内存页的idle_age取值为7时,其落入扫描区间[4,8),则此时按照scan_period/4扫描周期对内存页进行扫描。通过分析可知,idle_age取值越大,表示其未被访问的时间越长,则此时动态增加扫描频率,提高了未被访问内存页的回收概率;而对于idle_age取值较小的内存页,表示其近期刚被访问过,则此时适当减小扫描频率,节省了CPU资源的使用开销,即通过根据idle_age动态调整扫描周期,减少了扫描时对CPU资源的使用开销;并且这种自适应的扫描调频装置,避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在本发明实施例中,在每个实例对应至少两个滑动窗口参数时,确定模块还包括:
使用场景获取子模块,用于获取当前实例的使用场景,使用场景至少包括:容量规划,集群调度,负载均衡,以及内存回收;
滑动窗口参数确定子模块,用于确定与使用场景对应的滑动窗口参数。
在上述确定模块中,工作在不同的使用场景下时,实例的工作负载情况也会大不相同,若能预先设置好使用场景与滑动窗口参数的对应关系,则能够直接根据使用场景确定对应的滑动窗口参数,例如针对容器或虚拟机的负载高、内存使用量大或使用率高的使用场景,可以设置较大的滑动窗口参数,尽量为其分配较多的内存页,并减少内存回收;针对容器或虚拟机的负载低、内存使用量小或使用率低的使用场景,可以设置较小的滑动窗口参数,允许相对频繁的内存回收,提高内存利用率。
综上,传统工作集划分上,一般不支持根据多个使用场景,设置窗口参数,同时获得不同内存工作集的能力;更难以支持依据QoS优先级设置多个窗口参数,以获取不同内存分区的的工作集的能力。传统工作集划分装置要么低负载开销,但丧失了工作集划分的精确度,如基于FIFO,Clock,LRU排序划分;要么高准确度,但是无法避免高负载,因此无法产品环境下,7x24小时无间断使用,例如,WSClock和基于Linux下的Idle Page Tracking获取工作集的装置。
而本发明的装置基于多分区多窗口,可支持多使用场景和多QoS优先级,能很好地解决工作集准确度和工作集扫描开销的冲突。减少扫描时对CPU资源的使用开销。算法上,通过为每个物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。并且在扫描循环里,引入了负载检测主动降频算法,避免对CPU资源的长时间消耗。用户可以通过物理内存大小,设置合理的扫描周期,满足工作集划分需求。降低维护工作集元数据状态更新和查询的开销。工作集元数据更新和查询路径上,避免了一次性大量数据交换拷贝,避免的过多的上下文切换。避免因容器和虚拟机个数增加,带来的扩展性问题。工作集元数据的组织上,对容器和虚拟机个数的增加不敏感。由于扫描是基于物理内存的扫描,因此,容器和虚拟机个数增加,不会显著带来扫描的负担。避免因物理内存增加,带来的扫描开销增加问题。对某些巨型物理内存的机器,可以通过设置更低扫描周期,或者使用采样算法,多线程分区扫描以避免出现处理器扫描开销增加问题。
实施例6
根据本申请实施例,还提供了一种用于实施工作集划分方法的划分系统,该系统可执行实施例1至实施例4所提供的工作集划分方法,如图9所示,该系统包括:
扫描器scanner90,用于扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;
存储器Idle_age_meta92,用于存储每个内存页的未被访问年龄;
获取器getter94,用于获取实例对应的滑动窗口参数,其中,每个实例对应至少一个滑动窗口参数;
回收器reclaimer96,用于根据滑动窗口参数确定滑动窗口,并根据未被访问年龄和滑动窗口,回收处于滑动窗口外的非工作集内存。
在上述系统中,扫描器scanner采用新内存热度跟踪(Memory Hotness Tracking)改进算法,利用硬件协助机制,实现对内存的冷热跟踪功能,该功能可以按照内存页为单位,对内存多久未被访问做细粒度跟踪,每个物理页都有自己的未被访问的年龄,被称为idle_age。通过为每个内存物理页定义了idle_age,保存物理页空闲年龄,从而避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。还可以采用新的多分区多窗口工作集元数据组织方式,使得内存的idle_age被记录在元数据里,可以与容器或虚拟机元数据关联,以便外部模块可以迅速查询每容器或虚拟机的idle_age
上述系统一种情况下,由于每个实例具有不同的QoS要求,如果所有容器和虚拟机均采用同一个滑动窗口参数δt,就会使得所有容器和虚拟机的滑动窗口(t,t+δt)的大小相同,即内存分配和回收的条件相同,其效果也只是将内存平均分给各容器和虚拟机,造成非预期内存回收或内存颠簸,既难以满足QoS的要求,也无法提高内存利用率。
因而,获取器getter中,每个实例都分别对应着不同的滑动窗口参数δt,该滑动窗口参数δt的大小与实例的属性相关,该属性可以为实例的相关的任何参数。通过多滑动窗口的策略,通过支持多分区多窗口内存工作集,可以让工作在不同的QoS优先级下的容器或虚拟机,获取到定制化的内存工作集信息。以属性为QoS优先级为例,若实例要求高QoS优先级,那么可以为其设置较大的滑动窗口参数δt以尽量避免内存回收,而若实例的QoS优先级较低,那么可以为其设置较小的滑动窗口参数δt,以允许相对频繁的内存回收,提高内存利用率。
上述系统在另一种情况下,即便对同一个容器或虚拟机,当其工作在不同的使用场景下时,工作负载情况也会大不相同,如果同一个容器或虚拟机只对应一个静态的滑动窗口参数,那么在各种使用场景的各种工作负载下,内存分配和回收的阈值也维持不变,无法随工作负载的变化而变化,能会造成在工作负载低的时间段内存浪费,但在工作负载高的时间段,内存回收被触发,造成非预期内存回收,或者内存颠簸(Page Threshing)问题。
因而,获取器getter中,同一个容器或虚拟机也可能对应多个不同的滑动窗口参数δt,该滑动窗口参数δt的大小与容器或虚拟机的属性相关,该属性可以为实例的相关的任何参数。以属性为工作负载或内存使用情况为例,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,尽量为其分配较多的内存页,并减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,允许相对频繁的内存回收,提高内存利用率。
上述系统在又一种情况下,每个实例都分别对应着不同的滑动窗口参数δt1,同时,同一个容器或虚拟机也对应多个不同的滑动窗口参数δt2,以兼容上述两种情况。
回收器reclaimer除了按照滑动窗口分配内存工作集外,还可以根据滑动窗口参数δt以及内存页的未被访问年龄idle_age,在后台周期性(或用户同步阻塞式)回收处于滑动窗口外的非工作集内存,从而达到划分内存工作集的目的。
通过上述系统,扫描器scanner扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄,存储器Idle_age_meta,用于存储每个内存页的未被访问年龄;获取器getter,用于获取实例对应的滑动窗口参数,其中,每个实例对应至少一个滑动窗口参数;回收器reclaimer,用于根据滑动窗口参数确定滑动窗口,并根据未被访问年龄和滑动窗口,回收处于滑动窗口外的非工作集内存;实现了使得工作在不同QoS优先级下的容器或虚拟机获取到定制化的内存工作集的技术效果,进而解决了在多应用场景或多QoS要求下工作集划分开销大、准确度低的技术问题。
在本发明提出的上述内存集划分系统中,(1)对于每个容器或虚拟机,通过指定滑窗参数δt,即可获得指定时间窗口(t,t+δt)的内存工作集,这个内存工作集的内存,其idle_age全部在时间窗口(t,t+δt)范围之内;(2)对于每个容器,支持通过指定多个不同滑动窗口参数δt,可以同时获取不同时间滑窗的工作集,用以同时满足多使用场景;(3)在多个容器或者虚拟机之间,使用不同的滑窗参数δt,获取不同的工作集,以支持不同的QoS优先级。
通过本发明提出的内存集划分系统,能够满足混部场景重的内存利用率和内存QoS的最佳平衡实践,其动态获取内存工作集的开销要低于现有各方法。对同一个内存工作集,本发明提出的方法可支持多滑窗划分,以满足多内存工作集使用场景并存的需求。这些使用场景包括但不限于:容量规划,集群调度,负载均衡,内存回收等。对于多容器多虚拟机场景,本发明提出的方法支持多分区多滑窗工作集划分,以应对多容器多虚拟机场景下,不同内存QoS优先级的需求,以达到不同的利用率和QoS平衡目标。
在本发明实施例中,获取器还用于:根据实例的内存使用量、QoS优先级和内存页未被访问年龄中的至少一个确定滑动窗口参数。
滑动窗口计算公式为δt=F(usage,Prio,idle_statistics)其中usage为实例当前内存使用量,Prio为实例的QoS优先级,idle_statistics为实例的idle_age统计数据。三项参数的取值均与时间相关,故δt可随时间而变化,即随时间变化的动态滑动窗口。在实践中,可选一项或多项参数,不同实例可具有不同的计算公式。
在本发明实施例中,当获取器用于根据实例的QoS优先级确定滑动窗口参数时,获取器包括:
第一获取单元,用于获取每个实例的QoS优先级;
第一计算单元,用于根据QoS优先级计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与QoS优先级正相关。
结合本发明图2所示,图2展示了多内存分区多滑窗的内存工作集划分效果,图中存在三个内存分区(容器或虚拟机)实例,分别为实例A、实例B和实例C,三个实例的QoS优先级为QoSA>QoSC>QoSB,根据三个实例的QoS优先级,分别指定相三个实例对应的不同的滑窗参数δtA、δtB以及δtC,且三个滑窗参数的大小关系满足:δtA>δtC>δtB。图2中左侧内存池为无滑窗的工作集划分,右侧内存池为有滑窗的工作集划分。分区实例A因QoS优先级较高,故而为其设置了较大滑窗参数δtA,得到内存工作集w(t,δtA),据此设置其内存回收水位,以减少内存回收的风险;而分区实例B因QoS优先级低,使用了较小的滑窗参数δtB,根据工作集w(t,δtB)设置内存回收水位,来通过积极的内存回收,和更高的部署密度,从而提升内存利用率;分区实例C介于分区实例A与B之间。
上述第一获取单元和第一计算单元使得工作集的滑动窗口参数δt可以基于QoS优先级指定,用以支持不同的内存利用率和内存回收目标:高QoS优先级分区,需要低内存利用率以避免内存回收;低QoS优先级分区,需要高内存利用率,允许相对频繁的内存回收。
在本发明实施例中,当获取器用于根据实例的QoS优先级确定滑动窗口参数时,获取器包括:
第二获取单元,用于获取每个实例对应的多个分布区间;
第一确定单元,用于根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的分布区间;
统计单元,用于统计每个分布区间中的内存页数目,得到内存页未被访问年龄的统计数据;
第二计算单元,用于根据统计数据计算得到每个实例对应的滑动窗口参数。
由于不同实例可具有不同的idle_age分布特性,每个实例对应的多个分布区间是动态可调节的,即不同实例可基于不同区间进行统计。对于步骤S103b3,由于多个内存页的未被访问年龄的元数据的原始数据量较大(每页具有8bit数据),不利于用户直接使用。因而对其进行统计处理,得到的内存页未被访问年龄的统计数据,随后可以通过直方分布图的格式进行输出或显示,如(1,2,5,15,30,60)分别表示统计输出未被访问年龄idle_age分别位于区间[1,2),[2,5),[5,15),[15,30),[30,60),[60,296)的内存页数目。
在本发明实施例中,当获取器用于根据实例的内存使用量确定滑动窗口参数时,获取器包括:
内存使用量获取单元:用于获取每个实例的内存使用量;
滑动窗口参数获取单元,用于根据内存使用量计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与内存使用量正相关。
在上述扫描器中,若容器或虚拟机的负载高、内存使用量大或使用率高时,可以从多个不同的滑动窗口参数中选择较大的参数,或者提高当前的滑动窗口参数的值,通过尽量为其分配较多的内存页,提升回收水位来减少内存回收;若容器或虚拟机的负载低、内存使用量小或使用率低时,可以从多个不同的滑动窗口参数中选择较小的参数,或者减小当前滑动窗口参数的值,允许相对频繁的内存回收,提高内存利用率。
在本发明实施例中,扫描器包括:
扫描单元,用于根据预设的扫描周期扫描已分配给实例的内存;
判断单元,用于判断在扫描周期内第一内存页是否被访问过,其中第一内存页为内存中的每一个内存页;
调整单元,用于在扫描周期内第一内存页被访问过时,增加第一内存页对应的未被访问年龄,在扫描周期内第一内存页未被访问过,则将第一内存页对应的未被访问年龄清零。
在上述扫描器中,每一物理页具有idle_age属性,取值范围0-MAX_IDLE_AGE(为描述方便,此处设255,可根据硬件以及系统物理内存大小进行调整)。idle_age可以表示内存页未被访问所持续的扫描周期数。例如,以扫描周期scan_period定时扫描已申请的物理内存,设T为当前时间,若某物理页在(T-scan_period,T)时间段内内存页未被访问过,则其相应idle_age加1;若被访问过,则将其idle_age清零,此时idle_age表示当前物理页在idle_age*scan_period时间段内未曾被访问过。
在本发明实施例中,扫描器还包括:
第三获取单元,用于获取每个实例对应的多个扫描区间,其中每个扫描区间对应不同的扫描周期;
第二确定单元,用于根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的扫描区间;
扫描单元还用于按照每个内存页所属的扫描区间所对应的扫描周期,对已分配给实例的内存进行扫描。
上述扫描器实现了自适应的扫描降频,例如,针对某个实例,预先设定扫描区间为[0,1),[4,8),[8,16)以及[16,MAX_IDLE_AGE),其中扫描区间[0,1)对应扫描周期scan_period/2,扫描区间[4,8)对应扫描周期scan_period/2,扫描区间[8,16)对应扫描周期scan_period/4,扫描区间[16,MAX_IDLE_AGE)对应扫描周期scan_period/16。由上述分析可知,idle_age取值范围为0-MAX_IDLE_AGE,例如当某一内存页的idle_age取值为7时,其落入扫描区间[4,8),则此时按照scan_period/4扫描周期对内存页进行扫描。通过分析可知,idle_age取值越大,表示其未被访问的时间越长,则此时动态增加扫描频率,提高了未被访问内存页的回收概率;而对于idle_age取值较小的内存页,表示其近期刚被访问过,则此时适当减小扫描频率,节省了CPU资源的使用开销,即通过根据idle_age动态调整扫描周期,减少了扫描时对CPU资源的使用开销;并且这种自适应的扫描调频方法,避免了一次扫描周期需要扫描整个系统的物理页,这样同时也避免了因物理内存大小增加而带来的扩展性问题。
在本发明实施例中,每个实例对应至少两个滑动窗口参数时,获取器还包括:
第四获取单元,用于获取当前实例的使用场景,使用场景至少包括:容量规划,集群调度,负载均衡,以及内存回收;
第三确定单元,用于确定与使用场景对应的滑动窗口参数。
在上述获取器中,工作在不同的使用场景下时,实例的工作负载情况也会大不相同,若能预先设置好使用场景与滑动窗口参数的对应关系,则能够直接根据使用场景确定对应的滑动窗口参数,例如针对容器或虚拟机的负载高、内存使用量大或使用率高的使用场景,可以设置较大的滑动窗口参数,尽量为其分配较多的内存页,并减少内存回收;针对容器或虚拟机的负载低、内存使用量小或使用率低的使用场景,可以设置较小的滑动窗口参数,允许相对频繁的内存回收,提高内存利用率。
实施例7
本申请的实施例可以提供一种计算设备,该计算设备可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算设备也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算设备可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算设备可以执行工作集划分方法中以下步骤的程序代码:扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
可选地,图10是根据本申请实施例的一种计算设备的结构框图。如图10所示,该计算设备120可以包括:一个或多个(图中仅示出一个)处理器1202、存储器1204、以及传输装置1206。
其中,存储器可用于存储软件程序以及模块,如本申请实施例中的工作集划分方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的工作集划分方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算设备120。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。可选的,上述处理器还可以执行如下步骤的程序代码:根据实例的内存使用量、QoS优先级和内存页未被访问年龄中的至少一个确定滑动窗口参数。
可选的,上述处理器还可以执行如下步骤的程序代码:获取每个实例的QoS优先级;根据QoS优先级计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与QoS优先级正相关。
可选的,上述处理器还可以执行如下步骤的程序代码:获取每个实例对应的多个分布区间;根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的分布区间;统计每个分布区间中的内存页数目,得到内存页未被访问年龄的统计数据;根据统计数据计算得到每个实例对应的滑动窗口参数。
可选的,上述处理器还可以执行如下步骤的程序代码:根据预设的扫描周期扫描已分配给实例的内存;判断在扫描周期内第一内存页是否被访问过,其中第一内存页为内存中的每一个内存页;若在扫描周期内第一内存页被访问过,则增加第一内存页对应的未被访问年龄;若在扫描周期内第一内存页未被访问过,则将第一内存页对应的未被访问年龄清零。
可选的,上述处理器还可以执行如下步骤的程序代码:获取每个实例对应的多个扫描区间,其中每个扫描区间对应不同的扫描周期;根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的扫描区间;按照每个内存页所属的扫描区间所对应的扫描周期,对已分配给实例的内存进行扫描。
可选的,上述处理器还可以执行如下步骤的程序代码:获取当前实例的使用场景,使用场景至少包括:容量规划,集群调度,负载均衡,以及内存回收;确定与使用场景对应的滑动窗口参数。
或者,处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取实例的内存中的每个内存页的未被访问年龄;获取实例对应的滑动窗口参数,其中,滑动窗口参数用于确定滑动窗口,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
或者,处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取已分配给实例的内存中的每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,不同的实例对应的滑动窗口参数不同;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
或者,处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取已分配给实例的内存中的每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少两个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
实施例8
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述工作集划分方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:扫描已分配给实例的内存,获取内存中每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。可选的,上述处理器还可以执行如下步骤的程序代码:根据实例的内存使用量、QoS优先级和内存页未被访问年龄中的至少一个确定滑动窗口参数。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取每个实例的QoS优先级;根据QoS优先级计算得到每个实例对应的滑动窗口参数,其中,滑动窗口参数与QoS优先级正相关。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取每个实例对应的多个分布区间;根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的分布区间;统计每个分布区间中的内存页数目,得到内存页未被访问年龄的统计数据;根据统计数据计算得到每个实例对应的滑动窗口参数。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:根据预设的扫描周期扫描已分配给实例的内存;判断在扫描周期内第一内存页是否被访问过,其中第一内存页为内存中的每一个内存页;若在扫描周期内第一内存页被访问过,则增加第一内存页对应的未被访问年龄;若在扫描周期内第一内存页未被访问过,则将第一内存页对应的未被访问年龄清零。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取每个实例对应的多个扫描区间,其中每个扫描区间对应不同的扫描周期;根据实例中的每个内存页的未被访问年龄,确定每个内存页所属的扫描区间;按照每个内存页所属的扫描区间所对应的扫描周期,对已分配给实例的内存进行扫描。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取当前实例的使用场景,使用场景至少包括:容量规划,集群调度,负载均衡,以及内存回收;确定与使用场景对应的滑动窗口参数。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取实例的内存中的每个内存页的未被访问年龄;获取实例对应的滑动窗口参数,其中,滑动窗口参数用于确定滑动窗口,每个实例对应至少一个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取已分配给实例的内存中的每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,不同的实例对应的滑动窗口参数不同;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取已分配给实例的内存中的每个内存页的未被访问年龄;根据实例的滑动窗口参数确定滑动窗口,其中,每个实例对应至少两个滑动窗口参数;根据未被访问年龄和滑动窗口,划分实例的内存工作集。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。