一种用于Linux系统数据缓存分配的管理方法技术方案

技术编号:3960768 阅读:549 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种计算机应用技术领域,具体地说是一种用于Linux系统数据缓存分配的管理方法,通常用于基于Linux操作系统构建的数据存储系统中,使数据缓存的分配与管理独立于Linux操作系统内核版本,且数据缓存的大小能够根据实际运行情况进行动态调整,同时,采用数据缓存记录技术,将元数据信息分配在内存中的固定位置,系统因故障而宕机后,在具有BBU(电池备份单元)的情况下,可恢复整个数据缓存的内容,避免存储系统因故障而造成的数据丢失,解决了传统Linux系统的数据分配与管理方法缺乏灵活性与可扩展性的问题,提高了数据缓存的分配与管理效率,增强了兼容性与可复用性,并提高了数据的可靠性。

【技术实现步骤摘要】

本专利技术涉及一种计算机应用
,具体地说是一种用于Linux系统数据缓存 分配的管理方法.
技术介绍
在基于Linux操作系统构建的数据存储系统中,为提高数据的读写性能,通常采 用独立划分数据缓存区的方法,但由于Linux内核内存分配的固有限制,如动态分配的内 存空间无法大于1024个页面,为内核传入mem参数切分得到的内存空间无法动态伸缩等, 因而导致传统的基于Linux固有内存分配机制的数据缓存的分配与管理方法缺乏灵活性 与可扩展性。在系统宕机后,虽然在具有BBU(电池备份单元)的情况下,可以保证,内存中的缓 存数据仍然存在,但由于缓存空间均为动态分配,无法通过有效的机制重建整个数据缓存 池,因此对存储系统来说将可能造成关键数据的丢失。因此,如何使用一种数据缓存的分配与管理方法,使缓存的分配与管理独立于 Linux操作系统内核版本,缓存大小能够根据需要进行动态调整,且在系统宕机后,在具有 BBU (电池备份单元)的情况下能够重建整个数据缓存池,从而避免缓存失效而造成的数据 丢失是基于Linux操作系统构建的数据存储系统所面临的一个主要问题。
技术实现思路
本专利技术提供一种用于Linux系统的数据缓存分配管理方法,通常用于基于Linux 操作系统构建的数据存储系统中,使数据缓存的分配与管理独立于Linux操作系统内核版 本,且数据缓存的大小能够根据实际运行情况进行动态调整,同时,采用数据缓存记录技 术,将元数据信息分配在内存中的固定位置,系统因故障而宕机后,在具有BBU(电池备份 单元)的情况下,可恢复整个数据缓存的内容,避免存储系统因故障而造成的数据丢失,解 决了传统Linux系统的数据分配与管理方法缺乏灵活性与可扩展性的问题,提高了数据缓 存的分配与管理效率,增强了兼容性与可复用性,并提高了数据的可靠性。本专利技术的目的是按以下方式实现的,该系统体系结构包括内核Patch模块(1)、 缓存分配回收模块(2)、缓存访问接口模块(3)、缓存管理接口模块(4)和缓存故障重建模 块(5)其中内核Patch模块(1)将数据缓存的元数据信息分配在内存的固定位置,在Linux 内核启动后,当执行到setupjiiemory函数时,动态增加min_l0W_pfn变量的值,从而预留出 一段由原min_l0W_pfn值开始到新min_l0W_pfn值结束的固定的内存空间存储元数据信 息。预留的内存空间大小由系统的全部内存空间所决定,其计算公式为预留空间大小= (系统内存空间大小)* (Hash表项的大小)/当前系统Unit单元大小+元数据控制信息。 元数据信息以链式Hash的方式进行组织。数据缓存被分配为固定大小的Unit单元,每个 Unit单元具有全系统唯一的Unit标识,并作为键值将Unit单元连入Hash表中。Unit单元到Hash表项的计算公式如下Unit单元对应的Hash表项=Unit标识% Hash表项的个数。 这种Unit单元到Hash表项的对应方式可以保证在平均情况下,根据Unit标识,在Hash表 项中只需一次查找即可找到对应的Unit单元,保证缓存数据的查找效率。缓存分配回收模块(2)提供Unit单元的分配与回收接口。分配接口以Unit标识 及要求的Unit单元数量为传入参数,利用Linux系统的内存分配函数进行缓存分配,在缓 存分配成功后,根据Unit标识计算Unit单元对应的Hash表项,并将Unit单元连入元数据 Hash表中。回收接口以Unit标识为传入参数,在元数据Hash表中查找对应的Unit单元, 从Hash表中移除,利用Linux系统的内存回收函数进行缓存释放。缓存访问接口模块(3)提供Unit单元的访问接口。访问接口以Unit标识为传入 参数,在元数据Hash表中查找对应的Unit单元,返回指向Unit单元的句柄。Unit单元的 句柄为标准的内核地址空间的形式,从而可像普通内存一样对Unit单元进行数据访问操 作。缓存管理接口模块(4)提供数据缓存的管理接口,包括缓存空间大小设定、Unit 单元大小设定。缓存空间大小设定以缓存空间的大小为传入参数,更新缓存空间大小阈值, 若当期缓存空间大于该阈值则进行Unit单元释放,直到缓存空间小于阈值。Unit单元大小 设定以Unit单元的大小为传入参数,调用缓存分配回收模块(2)的回收接口,释放缓存中 原有的Unit单元,此后Unit单元的分配将以新设定的Unit单元大小为单位。缓存故障重建模块(5)在元数据信息区的保存一个故障标记,系统启动后该标记 置位,系统正常关闭后清空该标记。系统启动后若发现故障标记置位,则表明系统为非正常 关闭,遍历元数据的Hash列表,获取Unit单元的句柄,并标记为已占用,避免该空间写入新 数据内容而造成数据丢失。本专利技术的有益效果是,用于Linux系统的数据缓存分配管理技术,使数据缓存的 分配独立于Linux操作系统,缓存大小可根据需要进行动态调整,且在系统宕机后,在具有 BBU(电池备份单元)的情况下能够重建整个数据缓存池。数据缓存的大小能够根据实际运 行情况进行动态调整,且系统因故障而宕机后,在具有BBU(电池备份单元)的情况下,可恢 复整个数据缓存的内容,采用数据缓存记录技术,将元数据信息分配在内存中的固定位置, 系统因故障而宕机后,在具有BBU(电池备份单元)的情况下,可恢复整个数据缓存的内容, 避免存储系统因故障而造成的数据丢失,解决了传统Linux系统的数据分配与管理方法缺 乏灵活性与可扩展性的问题,提高了数据缓存的分配与管理效率,增强了兼容性与可复用性,并提高了数据的可靠性。附图说明附图1为元数据Hash表的组织;附图2为缓存数据分配流程;附图3为缓存数据回收流程;附图4为缓存数据访问流程;附图5为缓存数据故障重建流程。具体实施例方式参照说明书附图对本专利技术的作以下详细地说明。参照附图,详细描述本
技术实现思路
的运行过程。 实施例本专利技术体系结构主要包括内核Patch模块(1)、缓存分配回收模块(2)、缓存访问 接口模块(3)、缓存管理接口模块(4)和缓存故障重建模块(5)。在一个典型的应用环境里,在进行缓存数据分配时,调用缓存分配回收模块(2) 提供的接口,传入Unit单元标识,在Hash表中查找对应的Unit单元,若未找到则调用内核 函数为Unit单元分配页面,并连入Hash表,否则返回缓存数据分配失败。在进行缓存数据 回收时,调用缓存分配回收模块(2)提供的接口,传入Unit单元标识,在Hash表中查找对 应的Unit单元,若未找到则返回缓存数据回收失败,否则调用内核函数为回收Unit单元页 面,并从Hash表删除。在进行缓存数据访问时,调用缓存访问模块(3)提供的接口,传入 Unit单元标识,在Hash表中查找对应的Unit单元,若未找到则返回缓存数据访问失败,否 则返回Unit单元句柄。在系统每次启动后会进行故障检测,检查元数据区中的故障标记, 若故障标记未置位,则执行正常的系统启动流程,若故障标记已置位,则遍历Hash表,取得 缓存池中的所有Unit单元,并将状态设置为预留,避免Unit单元被新缓存数据覆盖。这种技术与传统Linux系统的数据缓存分配技术的不同之处在于其利用位于内 存固本文档来自技高网
...

【技术保护点】
一种用于Linux系统数据缓存分配的管理方法,其特征在于,该系统体系结构包括:内核Patch模块(1)、缓存分配回收模块(2)、缓存访问接口模块(3)、缓存管理接口模块(4)和缓存故障重建模块(5)其中:内核Patch模块(1)将数据缓存的元数据信息分配在内存的固定位置,在Linux内核启动后,当执行到setup_memory函数时,动态增加min_low_pfn变量的值,从而预留出一段由原min_low_pfn值开始到新min_low_pfn值结束的固定的内存空间存储元数据信息,预留的内存空间大小由系统的全部内存空间所决定,其计算公式为:预留空间大小=(系统内存空间大小)*(Hash表项的大小)/当前系统Unit单元大小+元数据控制信息,元数据信息以链式Hash的方式进行组织,数据缓存被分配为固定大小的Unit单元,每个Unit单元具有全系统唯一的Unit标识,并作为键值将Unit单元连入Hash表中,Unit单元到Hash表项的计算公式如下:Unit单元对应的Hash表项=Unit标识%Hash表项的个数这种Unit单元到Hash表项的对应方式可以保证在平均情况下,根据Unit标识,在Hash表项中只需一次查找即可找到对应的Unit单元,保证缓存数据的查找效率;缓存分配回收模块(2)提供Unit单元的分配与回收接口,分配接口以Unit标识及要求的Unit单元数量为传入参数,利用Linux系统的内存分配函数进行缓存分配,在缓存分配成功后,根据Unit标识将Unit单元连入元数据Hash表中,回收接口以Unit标识为传入参数,在元数据Hash表中查找对应的Unit单元,从Hash表中移除,利用Linux系统的内存回收函数进行缓存释放;缓存访问接口模块(3)提供Unit单元的访问接口,访问接口以Unit标识为传入参数,在元数据Hash表中查找对应的Unit单元,返回指向Unit单元的句柄;缓存管理接口模块(4)提供数据缓存的管理接口,包括缓存空间大小设定、Unit单元大小设定,缓存空间大小设定以缓存空间的大小为传入参数,更新缓存空间大小阈值,若当期缓存空间大于该阈值则进行Unit单元释放,直到缓存空间小于阈值,Unit单元大小设定以Unit单元的大小为传入参数,调用缓存分配回收模块(2)的回收接口,释放缓存中原有的Unit单元,此后Unit单元的分配将以新设定的Unit单元大小为单位;缓存故障重建模块(5)在元数...

【技术特征摘要】

【专利技术属性】
技术研发人员:王文方
申请(专利权)人:山东高效能服务器和存储研究院
类型:发明
国别省市:88[中国|济南]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1