发明内容
本发明的目的是为了解决现有技术中的上述缺陷,提供一种内存过载下面向重复数据删除的内存优化系统,该内存优化系统在内存过载下有效删除内存中全零数据页与重复数据页,以提高内存利用率和系统整体性能。
本发明的目的可以通过采取如下技术方案达到:
一种内存过载下面向重复数据删除的内存优化系统,以块设备驱动的形式存在,向操作系统注册一个块设备,该块设备以交换区(swap area)的形式向操作系统系统服务,当内存过载时,对交换出数据页进行数据去重,去重后的数据页存储在内存中,以减少不必要的外设读写,所述内存优化系统包括:数据页筛选模块、读写请求处理模块、全零数据页过滤模块、重复数据页删除模块和数据管理模块,上述各模块顺序连接,其中,
所述数据页筛选模块,利用页框回收算法(PFRA),在内存不足时扫描内存数据页,筛选出暂不使用的稳定内存页,并换出到交换缓存中;
所述读写请求处理模块,用于对换入换出请求进行应答和处理,对读写请求分类,并交由不同的接口处理,当写数据达到时,检测写入请求逻辑是否合理,以内存页为块大小对数据进行切分,把写入数据的扇区地址转化为页地址和偏移量,当读请求达到时,同样进行逻辑合理性分析和请求切分;
所述全零数据页过滤模块,用于对换出的内存页进行全零页检测和过滤,数据页进入该模块时,检测页面数据是否全部为零,对全零数据页进行标记代替存储以节省内存;
所述重复数据页删除模块,对所述全零数据页过滤模块剩余的页面进行二次过滤,计算页面指纹作为页面的唯一标识,将指纹散列至哈希表中,进行指纹比对判断页面是否为重复,若重复则删除,相同数据页只保留一份,存储彼此不相同的唯一数据页;
所述数据管理模块,该模块与其他个各模块相互交互,用于对所述内存优化系统数据的管理,以便对读写请求进行快速响应。
进一步地,所述数据管理模块包括元数据管理子模块和页面存储池管理子模块,其中,所述元数据管理子模块负责页面指纹索引以及数据页索引,所述页面存储池管理子模块负责对去重后数据页进行存储管理、动态伸缩存储池大小。
进一步地,所述元数据管理子模块用于维护顺序表和哈希表,其中,所述顺序表记录进入所述内存优化系统的每一数据页进行去重后的存储地址page_addr和标识该页是否为全零页flag;所述哈希表记录页面指纹、页面索引数量、去重后页面在存储池地址,用于索引所有去重后唯一数据页。
进一步地,所述页面存储池管理子模块存储去重后的唯一数据页,利用内存池根据去重后数据页数量,动态的伸缩页面存储池大小,同时为避免过度的数据去重带来的颠簸问题,对所述页面存储池设定空间上限,当达到空间上限时,所述内存优化系统停止对内存过载页面继续去重,而交由外存交换区。
进一步地,所述读写请求处理模块,将请求读写的扇区地址转化为以页为单位的页地址和偏移量,获得该读写数据在所述内存优化系统中所对应的页号,将连续的写入请求以页面大小PAGE_SIZE为固定大小进行切分,对于非完整页的写请求,先读取对应已存储页面,将页面补全;该读写请求处理模块对于写入请求,将页号和数据交由所述全零数据页过滤模块处理;对于读请求,将页号作为顺序表下标,访问顺序表中该页全零页标识flag,判断请求页面是否为全零页,若为全零页则申请空间,构造全零数据页,反之,从顺序表中获取页面存储地址,读取请求数据页。
进一步地,所述全零数据页过滤模块对请求写入数据页进行基于字节的比对,判断该页数据是否全部为零,若为全零页,则删除页面,在所述顺序表对应页号进行全零页标记flag置1代替页面存储,若不为全零页,将页面数据交由所述重复数据页删除模块处理。
进一步地,所述重复数据页删除模块对所述全零数据页过滤模块剩余的页面进行二次过滤,删除重复的数据页,存储彼此不相同的唯一数据页。
进一步地,所述重复数据页删除模块,利用MD5安全哈希算法计算出每个页面的指纹,作为页面的唯一标识,并通过哈希算法将指纹映射到所述哈希表中判断当前指纹是否存在,若存在则认为当前页面为重复页面,增加所述哈希表中的对应页面元数据计数,删除当前页面,否则认为当前页面为非重复页面,添加页面元数据到所述哈希表中,其中,所述页面元数据包括页面指纹、存储地址和页面引用计数等信息。
进一步地,所述重复数据页删除模块的具体工作步骤如下:
S1、分配指纹空间,利用MD5计算页面的指纹;
S2、在存储池中分配页面存储空间并返回页面句柄handle;
S3、将页面的指纹通过哈希函数散列到所述哈希表中,在冲突列表中查找是否存在相同指纹,若存在则返回对应页面在存储池中的存储句柄,否则构造当前页面的元数据信息,并插入到所述哈希表中,返回当前页面的句柄tmp_handle;
S4、如果步骤S3返回的页面句柄tmp_handle与插入前步骤S2返回的页面句柄handle相同,则当前页面为非重复页面,将页面拷贝到句柄handle所对应存储池位置;若不相同,在存储池中删除步骤S3中分配的空间,将tmp_handle的值赋给handle;
S5、在所述顺序表对应位置记录存储地址handle;
S6、在所述顺序表对应位置记录页面指纹key。
进一步地,所述步骤S5、在所述顺序表对应位置记录存储地址handle,以便后期读请求到达时,直接读取访问,当读请求到达时具体操作如下:
R1、获得读操作锁;
R2、将请求扇区地址转化为页地址获得页号pageNo;
R3、将页号pageNo作为顺序表的下标访问顺序表,判断page_meta[pageNo].handle是否为空并且page_meta[pageNo].flag为1,
若条件满足,则将请求输入页面数据全部置零;反之,拷贝page_meta[pageNo].handle地址空间内数据至请求输入页;
R4、释放读操作锁。
本发明相对于现有技术具有如下的优点及效果:
(1)本发明采用轻量级内存数据去重,只在内存过载下启用数据去重,利用系统页框回收算法(PFRA)筛选适合去重的稳定数据页,无需额外的内存数据扫描,有效降低去重计算开销。通过删除重复内存数据页以解决内存过载下频繁的外存访问对系统整体性能影响的问题。
(2)通过对内存数据分析发现内存数据中存在大量的全零数据页,本发明提出在内存去重时增加全零数据页过滤模块,在数据去重前剔除全零数据页,进一步节省存储空间,减少去重计算。
(3)本发明将去重后的唯一数据页存储在内存中而非外设,一方面极大的避免了外存交换操作;另一方面,在内存紧张时,将内存页尽可能久的保存在内存中,方便在系统请求页面时快速响应。
(4)本发明以块设备驱动的形式进行工作,不用进行内核编译的情况下,可以进行动态的装载,便于使用。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本实施例公开了一种内存过载下面向重复数据删除的内存优化系统,该系统以块设备驱动的形式存在,向操作系统注册一个块设备,该设备以交换的形式向操作系统系统服务,当内存过载时,对换出数据页进行数据去重,去重后的数据页存储在内存中,以减少不必要的外设读写。该系统包括:数据页筛选模块、读写请求处理模块、全零数据页过滤模块、重复数据页删除模块和数据管理模块,上述各模块顺序连接,其中,
所述数据页筛选模块,利用页框回收算法(PFRA),在内存不足时扫描内存数据页,筛选出暂不使用的稳定内存页,并换出到交换缓存(swap cache)中,数据页经过到交换缓存(swap cache)进入内存优化系统。
在具体的实施方式中,该数据页筛选模块利用操作系统的页框回收算法(PFRA),发现适合去重的相对稳定数据页,减少内存去重额外的页面扫描开销,实现轻量级内存去重系统。
所述读写请求处理模块,负责对换入换出请求进行应答和处理。对读写请求分类,并交由不同的接口处理。当写数据达到时,检测写入请求逻辑是否合理,以内存页为块大小对数据进行切分,把写入数据的扇区地址转化为页地址和偏移量,当读请求达到时,同样进行逻辑合理性分析和请求切分。
所述全零数据页过滤模块,用于对换出的内存页进行全零页检测和过滤。数据页进入该模块时,检测页面数据是否全部为零(全零页),对全零数据页进行标记代替存储以节省内存。
所述重复数据页删除模块,对所述全零数据页过滤模块剩余的页面进行二次过滤。计算页面指纹作为页面的唯一标识,将指纹散列至哈希表(hashtable)中,进行指纹比对判断页面是否为重复,若重复则删除,相同数据页只保留一份。存储彼此不相同的唯一数据页。
所述数据管理模块,该模块与其他各模块相互交互,用于对内存优化系统数据的管理,以便对读写请求进行快速响应。
在具体的实施方式中,所述数据管理模块包括元数据管理子模块和页面存储池管理子模块。元数据管理子模块负责页面指纹索引,去重系统数据页索引。页面存储池管理子模块,负责对去重后数据页进行存储管理、动态伸缩存储池大小。
所述元数据管理子模块用于维护顺序表(page meta)和哈希表(hashtable)。
其中,顺序表(page meta)记录了进入内存优化系统的每一数据页进行去重后的存储地址(page_addr)和标识该页是否为全零页flag。其中,哈希表(hashtable)记录了页面指纹、页面索引数量、去重后页面在存储池地址,用于索引所有去重后唯一数据页。
所述页面存储池管理子模块存储去重后的唯一数据页,利用内存池根据去重后数据页数量,动态的伸缩页面存储池大小,同时为避免过度的数据去重带来的颠簸问题,可以对页面存储池设定空间上限,当达到空间上限时,所述内存优化系统停止对内存过载页面继续去重,而交由外存交换区。
在具体的实施方式中,所述读写请求处理模块,将请求读写的扇区地址,转化为以页为单位的页地址和偏移量,获得该读写数据在所述内存优化系统中所对应的页号。将连续的写入请求以页面大小(PAGE_SIZE)为固定大小进行切分。对于非完整页的写请求,先读取对应已存储页面,将页面补全。内存优化系统在去重后数据操作请求(读请求)到达所述读写请求处理模块时,一样需要进行逻辑检查和以页为单位进行划分。对于写入请求,将页号和数据交由全零数据页过滤模块处理;对于读请求,将页号作为顺序表(page meta)下标,访问page meta中该页全零页标识flag,判断请求页面是否为全零页,若为全零页则申请空间,构造全零数据页。反之,从page meta中获取页面存储地址,读取请求数据页。
在具体的实施方式中,所述全零数据页过滤模块对请求写入数据页进行基于字节的比对,判断该页数据是否全部为零(全零页),若为全零页,则删除页面,在顺序表(pagemeta)对应页号进行全零页标记flag置1代替页面存储。若不为全零页,将页面数据交由重复数据页删除模块处理。
在具体的实施方式中,所述重复数据页删除模块对全零数据页过滤模块剩余的页面进行二次过滤,删除重复的数据页,存储彼此不相同的唯一数据页。
在具体的实施方式中,所述重复数据页删除模块,利用MD5安全哈希算法计算出每个页面的指纹,作为页面的唯一标识,并通过哈希算法将指纹映射到哈希表(hashtable)中判断当前指纹是否存在,若存在则认为当前页面为重复页面,增加哈希表(hashtable)中的对应页面元数据计数,删除当前页面,否则认为当前页面为非重复页面,添加页面元数据到哈希表中。页面元数据包括页面指纹,存储地址,页面引用计数等信息。使用MD5作为指纹计算算法是因为,虽然SHA1冲突率(1/280)相对于MD5(1/264)更小更安全,然而,其需要更多计算步骤,时间开销大。在时间敏感型系统中,MD5算法更适合,且MD5冲突率小于内存动态存储器DRAM出错的概率。
所述重复数据页删除模块的具体工作过程如下:
S1、分配指纹空间,利用MD5计算页面的指纹;
S2、在存储池中分配页面存储空间并返回页面句柄handle;
S3、将页面的指纹通过哈希函数散列到哈希表中,在冲突列表中查找是否存在相同指纹,若存在则返回对应页面在存储池中的存储句柄,否则构造当前页面的元数据信息,并插入到哈希表中,返回当前页面的句柄tmp_handle。
S4、如果步骤S3返回的页面句柄tmp_handle与插入前步骤S2返回的页面句柄handle相同,则当前页面为非重复页面,将页面拷贝到句柄handle所对应存储池位置;若tmp_handle与handle不相同,说明当前页面已经存在,在存储池中删除步骤S3中分配的空间,将tmp_handle的值赋给handle。
S5、在顺序表(page meta)对应位置记录存储地址handle。
S6、在顺序表(page meta)对应位置记录指纹key。
其中,在顺序表(page meta)对应位置存储页面在存储池的存储地址handle,以便后期读请求到达时,直接读取访问。读请求到达时具体操作如下:
R1、获得读操作锁;
R2、将请求扇区地址转化为页地址获得页号pageNo;
R3、将页号pageNo作为顺序表(page meta)的下标访问顺序表(page meta),判断page_meta[pageNo].handle是否为空
并且page_meta[pageNo].flag为1,
若条件满足则请求输入页面数据全部置零;
反之,拷贝page_meta[pageNo].handle地址空间内数据至请求输入页;
R4、释放读操作锁。
下面基于上述公开的内存过载下面向重复数据删除的内存优化系统,具体说明各个模块之间配合实现内存优化的工作流程:
T1、当操作系统内存紧张时,数据页筛选模块通过页框回收算法(PFRA)有效筛选出适合去重的内存数据页,这些页面主要是停留在内存中,但暂时不使用的数据页,数据页筛选模块将这些数据穿过交换缓冲区进入到去重系统,如图1所示。
T2、筛选出的数据穿过交换缓冲到达内存优化系统的读写请求处理模块,该模块负责对读写请求的响应和处理。请求到达时,首先对请求的逻辑合理性进行分析,若请求合理则继续执行,否则向上层提交错误信息;其次,将请求写入磁盘的扇区地址转化为页地址和偏移量,对非整页请求先读取已存储数据进行补充使各请求以页(page size)为单位进行处理。对读写请求进行分类,分别交由不同接口处理。
T3、当写请求到达时执行步骤T4,读请求到达时候执行步骤T5。
T4、调用全零数据页过滤模块对请求写入数据进行全零页判断,全零页过滤器基于字节检查,如图2,在进行页面去重前过滤掉全零页面(7522、7524、7526、7529),仅在顺序表(page meta)对应标志位(flag)置为1代替存储。全零页不参与页面去重,极大的节省了内存空间,剩余非全零页交给下层数据去重模块处理。
T5、读请求到达时,读取page_meta对应标记位,判断请求读取的页面是否为全零页,若是,则将请求写入地址全部置零即可,否则,通过page_meta获取页面在存储池地址,将页面拷贝到请求写入地址。
T6、请求写入页面经过全零数据页过滤模块后进入重复数据页删除模块,该模块是对页面进行二次过滤,利用MD5算法计算页面数字指纹作为页面唯一标识。
T7、将步骤T6中获得的指纹通过哈希函数映射到哈希表中,通过指纹比对判断是否已存在相同指纹,若存在执行步骤T8,否则执行步骤T9;
T8、在哈希表中存在相同指纹,则认为当前页面为重复页面,即相同页面已经存储在页面池中,增加该相同页面的引用计数,删除当前页面节省内存空间。
T9、若在哈希表中未找到相同指纹,则去重存储池中尚未存储相同页面。当页面为非重复页面,则在哈希表中添加该页面的元数据信息并将引用计数设置为1,页面元数据信息包括指纹地址,页面在存储池的存储地址,引用计数等。
T10、该内存优化系统通过回调机制感知当前存储页面是否过期,并对过期的页面进行清除。
通过上述步骤,本实施例公开的内存优化系统在内存紧张时可有效删除内存中重复的数据页,有效提高内存利用率,减少外存交换操作,提高系统整体性能。如图2给出了全零数据页过滤模块和重复数据页删除模块工作流程示意图。
综上所述,该内存优化系统改善了内存过载下频繁的外存交换操作影响系统整体性能问题,通过数据页筛选、全零数据页过滤、重复数据页删除,将去重后唯一数据页保存在内存中极大的降低了外存交换操作,有效提高内存利用率,从而提高系统的整体性能。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。