一种优化RAID全局元数据读写性能的方法与流程

文档序号:16075133发布日期:2018-11-27 20:58阅读:297来源:国知局

本发明一种涉及计算机技术的优化方法,具体涉及一种优化RAID全局元数据读写性能的方法。



背景技术:

作为高性能的存储系统,如今的RAID(Redundant Array of Independent Disk,独立冗余磁盘阵列)已经得到了越来越广泛的应用。其中,对于Linux系统的软RAID的全局元数据管理分为两种,一种是默认的super 1.x版本元数据管理,另一种是采用ddf方式进行管理。对于super 1.x版本的元数据管理,元数据的布局采用的方式如图3所示,每个RAID的成员盘在其开始的位置存放各自的元数据信息。

当该RAID的所有成员盘都处于离线状态时,系统无法感知该RAID的存在。为解决该问题,现有技术在SBB磁盘阵列的RAID模块中,采用基于super 1.x版本的元数据的全局管理方式。

如图4所示,在SBB系统中,使用前四个槽位的磁盘作为系统的关键盘,专门用于存放系统中RAID的元数据信息,即使系统中做RAID的成员盘都离线,系统也能感知该RAID处于离线状态。

然而,使用关键盘作为全局元数据存放的媒介,也存在缺陷,主要表现在以下几个方面:

1)在磁盘阵列系统中,由于共振等因素的影响,无法避免磁盘的损坏;当前四个槽位的关键盘都损坏时,SBB系统将无法读写元数据,进而造成系统无法正常使用,给用户带来不必要的麻烦和损失。

2)采用全局元数据的写入方式,须依次写入四个关键盘中,严重影响了元数据的读写性能;

3)在系统中存在多个RAID,使更新元数据的操作更加频繁,加剧了系统运行时的负担。



技术实现要素:

为了克服现有技术的缺陷,本发明提出一种优化RAID全局元数据读写性能的方法,该方法避免了由于关键盘损坏造成的SBB系统无法读写元数据及系统瘫痪;充分发挥了从内存读取数据远比从磁盘读取速度快的优势,以及延迟更新元数据到前四关键盘,无须依次写入;在提高了全局元数据的读写性能的同时,大大减少了系统运行时的负担。

本发明的目的是采用下述技术方案实现的:

一种优化RAID全局元数据读写性能的方法,所述方法包括,基于SBB系统中前四关键盘管理全局元数据的方式,添加内存元数据副本,实现全局元数据读写性能的优化;

优选的,所述优化RAID全局元数据读写性能的方法包括下述步骤:

(1)初始化内存元数据副本;

其中,所述初始化该内存元数据副本的具体过程包括:步骤1-1,采用预留内存的方式对所述内存元数据副本进行分配;步骤1-2,将所述全局元数据预读到所述内存元数据副本中;

(2)直接从内存读取全局元数据,优化读性能;

(3)更新全局元数据,并将新的元数据信息延迟更新到前四关键盘中,优化写性能;

(4)备份所述内存元数据副本的元数据。

优选的,所述步骤1-1包括,当系统crash后,利用该crash现场启动的内核,找到所述内存元数据副本的位置并保存。

进一步地,所述步骤1-1还包括,所述内核执行setup_arch函数,并调用该执行过程中的e820_remove_range函数,预留全局元数据总大小的内存。

优选的,所述步骤1-2包括,在初始化内存元数据副本过程中,通过执行用户态程序mdadm(管理软RAID的用户态程序),并采用netlink的方式将所述内存元数据副本的初始化信息传递到所述内核;

在初始化完成后,所述前四关键盘的元数据相同,所述内核读取任一关键盘中的元数据填充至所述内存元数据副本。

优选的,所述步骤(3)中,所述更新全局元数据是将所述新的元数据信息写入所述内存元数据副本中,并将所述新的元数据信息备份到所述SBB系统的前四关键盘中;

当全局元数据中的events值更新时,则将最新的内存元数据更新到所述内存元数据副本和所述SBB系统的关键盘中;否则,只将最新的内存元数据更新到内存元数据副本。

进一步地,在所述内核中创建一个线程,用于周期性的更新所述内存副本的全局元数据到所述前四关键盘中。

优选的,所述步骤(4)包括,在系统重启或关机情况下,先通过调用register_reboot_notifier接口注册一个通知接口,然后进入kernel_restart_prepare函数,调用blocking_notifier_call_chain函数执行注册的回调函数;该回调函数用于将所述内存元数据副本的元数据备份到SSD中。

优选的,在断电情况下,用电池的供电将所述内存元数据副本的元数据备份到SSD中。

优选的,当系统crash的情况下,启动新内核捕获当时的内存现场,修改/etc/kdump.conf配置文件中的kdump_pre执行自定义的脚本;所述自定义的脚本用于触发所述备份的内存元数据副本。

进一步地,通过mount命令挂载根文件系统,设置proc接口触发备份操作,使备份的内存元数据副本保存到SDD中的指定位置。

与最接近的现有技术比,本发明的优异效果为:

通过备份内存元数据副本,避免了由于关键盘损坏造成的SBB系统无法读写元数据以及系统瘫痪;充分利用从内存读取数据远比从磁盘读取速度快的优势,且无须依次将元数据写入前四关键盘,从而提高了全局元数据的读写性能,大大减少了系统运行时的负担;实现了对现有的RAID阵列中元数据的有效管理,从一定程度上提升了用户体验。

附图说明

如图1所示为本发明提供的添加内存元数据副本的全局元数据管理示意图。

如图2所示为本发明提供的预读全局元数据到内存元数据副本流程图。

如图3所示为背景技术提供的super1.x元数据管理示意图。

如图4所示为背景技术提供的全局元数据管理示意图。

具体实施方式

下面结合附图对本发明作进一步详细说明。

本发明提供一种优化RAID全局元数据读写性能的方法,所述方法包括,如图1所示,基于SBB系统中前四关键盘管理全局元数据的方式,添加内存元数据副本;

sysuuid用于标示该磁盘是否属于该SBB系统;

summary用于标识元数据的版本信息以及存放全局热备盘的元数据信息;

specific用于存放RAID成员盘的super 1.x元数据信息。

如图2所示,所述方法包括下述步骤:

(1)初始化内存元数据副本包括如下步骤:

步骤1-1,用预留内存方式分配所述内存元数据副本;

当系统crash后,利用该crash现场启动的内核,找到所述内存元数据副本的位置并保存。

所述内核执行setup_arch函数,并调用该执行过程中的e820_remove_range函数,预留全局元数据总大小的内存。

步骤1-2,将所述全局元数据预读到所述内存元数据副本中;在初始化内存元数据副本过程中,通过执行用户态程序mdadm,并采用netlink的方式将所述内存元数据副本的初始化信息传递到所述内核;

在初始化完成后,所述前四关键盘的元数据相同,所述内核读取任一关键盘中的元数据填充至所述内存元数据副本。

(2)直接从内存读取全局元数据,优化读性能;

(3)更新全局元数据,并将新的元数据信息延迟更新到所述前四关键盘中,优化写性能;

所述步骤(3)中,所述更新全局元数据是将所述新的元数据信息写入所述内存元数据副本中,并将所述新的元数据信息备份到所述SBB系统的前四关键盘中;

当全局元数据中的events值更新时,则将最新的内存元数据更新到所述内存元数据副本和所述SBB系统的关键盘中;否则,只将最新的内存元数据更新到内存元数据副本;

在所述内核中创建一个线程,用于周期性的更新所述内存副本的全局元数据到所述前四关键盘中。

(4)备份所述内存元数据副本的元数据。

所述步骤(4)包括,在系统重启或关机情况下,先调用register_reboot_notifier接口注册一个通知接口,然后进入kernel_restart_prepare函数,调用blocking_notifier_call_chain函数执行注册的回调函数;该回调函数用于将所述内存元数据副本的元数据备份到SSD中。

在断电情况下,用电池供电将所述内存元数据副本的元数据备份到SSD中。

当系统crash的情况下,启动新内核捕获当时的内存现场,修改/etc/kdump.conf配置文件中的kdump_pre执行自定义的脚本;所述自定义的脚本用于触发所述备份的内存元数据副本。

通过mount命令挂载根文件系统,设置proc接口触发备份操作,使备份的内存元数据副本保存到SDD中的指定位置。

最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的具体实施方式进行修改或者等同替换,而这些未脱离本发明精神和范围的任何修改或者等同替换,其均在申请待批的本发明的权利要求保护范围之内。

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