本发明属于计算机技术领域,尤其涉及一种Linux分页替换方法及系统。
背景技术:
Linux基于分页技术对内存进行管理,鉴于内存资源的重要性和有限性,应用程序开始运行时,需要的数据并不全部载入内存中,而是只载入一部分,随着程序的运行,当访问到的数据不在内存中时,则产生缺页中断,把需要的数据从磁盘读到内存中,这种类型的内存称为文件缓存;在程序运行过程中产生的临时数据、堆、栈数据等也占用一部分内存,这些内存称为匿名内存。随着系统的运行,内存的可用容量逐渐变小,此时需要把系统中一些分页从内存中替换出去,如何选择要替换的分页是一个关键问题,分页挑选不当,则会引起系统抖动,影响系统性能。
目前,Linux的分页替换机制使用LRU(最近最久未使用)算法,对两种不同的内存类型建立LRU队列,当需要进行分页替换的时候,根据系统预设的比例分别从两个LRU链表中选择符合条件的最近最久未访问的页面进行替换,其中匿名内存换出到swap交换区,文件缓存根据是否修改标志,回写到相应的磁盘文件中。但是,这种LRU算法不能区分应用类型,不能根据不同的负载类型进行灵活的分页替换,对于不同类型的应用,发生系统预设比例不当,造成系统性能损耗。
技术实现要素:
本发明的目的在于提供一种Linux分页替换方法,旨在解决现有技术中LRU算法不能区分应用类型,不能根据不同的负载类型进行灵活的分页替换,对于不同类型的应用,发生系统预设比例不当,造成系统性能损耗的问题。
本发明是这样实现的,一种Linux分页替换方法,所述方法包括下述步骤:
当需要分页替换时,根据预先设置的分页的分类属性,对各个LRU链表进行扫描,将活跃LRU链表中的符合条件的分页加入到非活跃LRU链表中;
根据重新分页表,计算得到计算性分页和非计算性分页的替换比例,判断计算性分页和非计算性分页的重新分页速度,所述重新分页表用于记录计算性分页和非计算性分页的重新分页次数;
当计算性分页的重新分页速度快时,判定应用类型属于计算密集型,并从预先生成的非活跃非计算性分页LRU链表中,根据LRU算法选取其中的一个非计算性分页作为替换分页;
当非计算性分页的重新分页速度快时,判定应用类型属于I/O密集型,并从预先生成的非活跃计算性分页LRU链表和非活跃计算性分页LRU链表中,根据LRU算法以及分页替换比例同时选取计算性分页和非计算性分页,并将选取的计算性分页或非计算性分页作为替换分页。
作为一种改进的方案,所述方法还包括下述步骤:
将应用负载类型划分为计算密集型和I/O密集型;
对每一个分页增加一个分类属性,将分页分为计算性分页和非计算性分页。
作为一种改进的方案,在程序运行过程中产生的匿名内存属于所述计算性分页;
根据文件是否包含相应进程的可执行文件,文件缓存为计算性分页或非计算性分页。
作为一种改进的方案,所述方法还包括下述步骤:
根据对所述分页分类属性的增加,将分页划分到对应的LRU链表中,所述LRU链表包含活跃计算性分页LRU链表、非活跃计算性分页LRU链表、活跃非计算性分页LRU链表和非活跃非计算性分页LRU链表。
作为一种改进的方案,所述活跃LRU链表中的符合条件的分页是指分页引用的次数为0的分页。
本发明的另一目的在于提供一种Linux分页替换系统,所述系统包括:
链表扫描模块,用于当需要分页替换时,根据预先设置的分页的分类属性,对各个LRU链表进行扫描,将活跃LRU链表中的符合条件的分页加入到非活跃LRU链表中;
替换比例计算模块,用于根据重新分页表,计算得到计算性分页和非计算性分页的替换比例,判断计算性分页和非计算性分页的重新分页速度,所述重新分页表用于记录计算性分页和非计算性分页的重新分页次数;
第一替换分页选取模块,用于当计算性分页的重新分页速度快时,判定应用类型属于计算密集型,并从预先生成的非活跃非计算性分页LRU链表中,根据LRU算法选取其中的一个非计算性分页作为替换分页;
第二替换分页选取模块,用于当非计算性分页的重新分页速度快时,判定应用类型属于I/O密集型,并从预先生成的非活跃计算性分页LRU链表和非活跃计算性分页LRU链表中,根据LRU算法以及分页替换比例同时选取计算性分页和非计算性分页,并将选取的计算性分页或非计算性分页作为替换分页。
作为一种改进的方案,所述系统还包括:
应用负载分类模块,用于将应用负载类型划分为计算密集型和I/O密集型;
分类属性增加模块,用于对每一个分页增加一个分类属性,将分页分为计算性分页和非计算性分页。
作为一种改进的方案,在程序运行过程中产生的匿名内存属于所述计算性分页;
根据文件是否包含相应进程的可执行文件,文件缓存为计算性分页或非计算性分页。
作为一种改进的方案,所述系统还包括:
链表维护模块,用于根据对所述分页分类属性的增加,将分页划分到对应的LRU链表中,所述LRU链表包含活跃计算性分页LRU链表、非活跃计算性分页LRU链表、活跃非计算性分页LRU链表和非活跃非计算性分页LRU链表。
作为一种改进的方案,所述活跃LRU链表中的符合条件的分页是指分页引用的次数为0的分页。
在本发明实施例中,当需要分页替换时,根据预先设置的分页的分类属性,对各个LRU链表进行扫描,将活跃LRU链表中的符合条件的分页加入到非活跃LRU链表中;根据重新分页表,计算得到计算性分页和非计算性分页的替换比例,判断计算性分页和非计算性分页的重新分页速度;当计算性分页的重新分页速度快时,判定应用类型属于计算密集型,并从预先生成的非活跃非计算性分页LRU链表中,根据LRU算法选取其中的一个非计算性分页作为替换分页;当非计算性分页的重新分页速度快时,判定应用类型属于I/O密集型,并从预先生成的非活跃计算性分页LRU链表和非活跃计算性分页LRU链表中,根据LRU算法以及分页替换比例同时选取计算性分页和非计算性分页,并将选取的计算性分页或非计算性分页作为替换分页,从而实现根据不同负载类型进行灵活的分页替换,减少系统的抖动,提高系统性能。
附图说明
图1是本发明提供的Linux分页替换方法的实现流程图;
图2是本发明提供的Linux分页替换系统的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示出了本发明提供的Linux分页替换方法的实现流程图,其具体包括下述步骤:
在步骤S101中,当需要分页替换时,根据预先设置的分页的分类属性,对各个LRU链表进行扫描,将活跃LRU链表中的符合条件的分页加入到非活跃LRU链表中。
在该步骤中,活跃LRU链表中的符合条件的分页是指分页引用的次数为0的分页。
在步骤S102中,根据重新分页表,计算得到计算性分页和非计算性分页的替换比例,判断计算性分页和非计算性分页的重新分页速度。
其中,该重新分页表用于记录计算性分页和非计算性分页的重新分页次数。该重新分页表包含页结构、属性和分页次数等信息。
在步骤S103中,当计算性分页的重新分页速度快时,判定应用类型属于计算密集型,并从预先生成的非活跃非计算性分页LRU链表中,根据LRU算法选取其中的一个非计算性分页作为替换分页。
在步骤S104中,当非计算性分页的重新分页速度快时,判定应用类型属于I/O密集型,并从预先生成的非活跃计算性分页LRU链表和非活跃计算性分页LRU链表中,根据LRU算法以及分页替换比例同时选取计算性分页和非计算性分页,并将选取的计算性分页或非计算性分页作为替换分页。
其中,在执行上述步骤S101之前还需要执行下述步骤:
将应用负载类型划分为计算密集型和I/O密集型,从而实现根据不同的负载类型提供不同的分页替换方案;
在该实施例中,为了更细粒度地对分页进行替换,对每一个分页增加一个分类属性,将分页分为计算性分页和非计算性分页;
其中,在程序运行过程中产生的匿名内存属于所述计算性分页;
根据文件是否包含相应进程的可执行文件,文件缓存为计算性分页或非计算性分页;
若若文件中包含了某个进程的可执行文件,则是计算性的,否则是非计算性的。
一开始打开一个文件时分页设置为非计算性分页,当发生指令缺页的时候,则把该文件的分页设置为计算性。根据这个新的分类属性,系统维护了相应的LRU链表,分别是活跃计算性分页LRU链表、非活跃计算性分页LRU链表、活跃非计算性分页LRU链表和非活跃非计算性分页LRU链表。当需要分页替换的时候,系统分别扫描各个LRU链表,从活跃LRU链表中选择符合条件的页面加入非活跃LRU链表,根据应用负载情况计算出不同类型的分页替换比例,再从相应的非活跃链表中选择最近最少使用的计算性,或非计算性的分页换出。
在本发明实施例中,分页替换比例计算过程及公式如下:
rate=Ncom/Nnon-com,其中rate为计算性分页和非计算性分页重新分页比率,Ncom为计算性分页重新分页次数,Nnon-com为非计算性分页重新分页次数。
如果rate大于等于1,则
cp=0,fp=1,其中cp为计算性分页替换比例,fp为非计算性分页替换比例;
如果rate小于等于1,则:
cp=min(1-rate,HIGH),fp=1-cp,其中HIGH为计算性分页能设置的最大替换比例。
当然也可以采用其他计算方式,在此不再赘述。
图2示出了本发明实施例提供的Linux分页替换系统的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分。
Linux分页替换系统包括:
链表扫描模块11,用于当需要分页替换时,根据预先设置的分页的分类属性,对各个LRU链表进行扫描,将活跃LRU链表中的符合条件的分页加入到非活跃LRU链表中;
替换比例计算模块12,用于根据重新分页表,计算得到计算性分页和非计算性分页的替换比例,判断计算性分页和非计算性分页的重新分页速度,所述重新分页表用于记录计算性分页和非计算性分页的重新分页次数;
第一替换分页选取模块13,用于当计算性分页的重新分页速度快时,判定应用类型属于计算密集型,并从预先生成的非活跃非计算性分页LRU链表中,根据LRU算法选取其中的一个非计算性分页作为替换分页;
第二替换分页选取模块14,用于当非计算性分页的重新分页速度快时,判定应用类型属于I/O密集型,并从预先生成的非活跃计算性分页LRU链表和非活跃计算性分页LRU链表中,根据LRU算法以及分页替换比例同时选取计算性分页和非计算性分页,并将选取的计算性分页或非计算性分页作为替换分页。
其中,上述系统还包括:
应用负载分类模块15,用于将应用负载类型划分为计算密集型和I/O密集型;
分类属性增加模块16,用于对每一个分页增加一个分类属性,将分页分为计算性分页和非计算性分页。
在本发明实施例中,链表维护模块17,用于根据对所述分页分类属性的增加,将分页划分到对应的LRU链表中,所述LRU链表包含活跃计算性分页LRU链表、非活跃计算性分页LRU链表、活跃非计算性分页LRU链表和非活跃非计算性分页LRU链表。
上述各个模块的功能如上述方法实施例所记载,在此不再赘述。
在本发明实施例中,当需要分页替换时,根据预先设置的分页的分类属性,对各个LRU链表进行扫描,将活跃LRU链表中的符合条件的分页加入到非活跃LRU链表中;根据重新分页表,计算得到计算性分页和非计算性分页的替换比例,判断计算性分页和非计算性分页的重新分页速度;当计算性分页的重新分页速度快时,判定应用类型属于计算密集型,并从预先生成的非活跃非计算性分页LRU链表中,根据LRU算法选取其中的一个非计算性分页作为替换分页;当非计算性分页的重新分页速度快时,判定应用类型属于I/O密集型,并从预先生成的非活跃计算性分页LRU链表和非活跃计算性分页LRU链表中,根据LRU算法以及分页替换比例同时选取计算性分页和非计算性分页,并将选取的计算性分页或非计算性分页作为替换分页,从而实现根据不同负载类型进行灵活的分页替换,减少系统的抖动,提高系统性能。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。