一种刷新指定裸设备脏数据的系统及方法

文档序号:6611282阅读:116来源:国知局
专利名称:一种刷新指定裸设备脏数据的系统及方法
技术领域
本发明涉及一种刷新指定块设备脏数据的方法,尤其涉及一种刷新不基于 文件系统的裸设备脏数据的系统及方法。
背景技术
为了加快内核处理上层应用程序磁盘输入/输出的速度,Linux内核尽量将 系统运行过程中访问的磁盘数据缓冲至空间内存中。当内存紧张时,内核则按 照一定规则同步缓冲储存数据至磁盘中并释放部份缓存。当用户读取磁盘数据 时,内核如果检查数据存在于缓存内存中,则即刻从缓存内存中读取所需数据; 否则从磁盘中读取数据。当用户向磁盘写入数据时,内核首先将数据缓冲储存 于内存中,由此用户的写请求可立即完成。
上述延缓写入磁盘的方法可以将多个邻近的数据写入请求集中一次完成, 减少磁头动作,进而提高写磁盘的效率。但是这种机制会导致内存中缓冲的数 据与磁盘数据不一致,这些内存中与磁盘不一致的数据称作为脏数据。
通常,内核使用内存页的方式管理缓存数据,在例如裸设备的不基于文件 系统的区块设备中,每个被打开的区块设备。例如磁盘、分区、LVM逻辑巻 等,均具有一快速搜索数用于索引它所有被缓冲储存的数据页,其中与磁盘数 据不一致的内存页称作为脏页。如果脏页过多时发生意外断电,则部份缓存的 数据则可能因为未及时写入磁盘中而丢失。
为了减少上述缓存数据丢失的风险,现有技术中内核会定时或在缓存占用 内存过多时,从所有打开区块设备的内存缓存中搜索长时间没有刷新的脏数 据,并将其写入磁盘,以确保重要数据不会因为上述缓存机制而造成丢失。
虽然现有技术由内核定时或在缓存占用内存过多时将脏数据同步至磁盘 中,但为了最大程度的提高内存利用率。实际使用时内核会在内存中缓冲很多 待写入磁盘的脏数据。通常,这些脏数据分别属于多个被打开的区块设备。当 用户打算将其认为重要的一区块设备脏数据立即写入磁盘中,则只能是把此区
块设备关闭,或者利用强制刷新命令将所有区块设备的脏数据同步至磁盘中。 这种方法不仅浪费时间,还延误了用户保存重要数据的时机。当用户指定区块 设备的脏数据在内存缓存中占用很少比例时,上述问题则更加突出。

发明内容
为了解决上述现有技术中的问题与缺陷,本发明的目的在于提供一种刷新 指定裸设备脏数据的系统及方法,以改变现有技术的内核处理设备脏数据的方 式,允许用户在不关闭设备的情况下,随时刷新某一裸设备的缓存脏数据至磁 盘中。
本发明所提供的一种刷新指定裸设备脏数据的系统,用于一 Linux系统 中,此系统包含 一判断模块、 一传送模块、 一査找模块、 一搜索树模块以及 一刷新模块;于此,判断模块用于根据刷新指定裸设备脏数据的命令参数的设 备路径获得用户态的指定裸设备的设备号,以判断此命令参数格式是否正确, 其中若获得设备号,则判断命令参数格式正确;传送模块当命令参数格式正确 时以系统调用方式传送命令参数至Linux系统内核;查找模块则依照命令参数 的设备号査找指定裸设备的数据结构。搜索树模块系依照查找的数据结构的地 址映像获得指定裸设备的快速搜索树,并从快速搜索树中找到指定裸设备的所 有脏数据页;以及刷新模块系采用同步或异步方式刷新脏数据页至一磁盘。
另夕卜,本发明所提供的一种刷新指定裸设备脏数据的方法,用于一 Linux 系统中,此方法包含以下歩骤a)判断刷新指定裸设备脏数据的命令参数格式 是否正确;b)若正确则访问Linux系统内核;c)依照此命令参数査找指定裸设 备的数据结构;d)根据查找的数据结构的地址映像获得指定裸设备的快速搜索 树;e)从快速搜索树中找到指定裸设备的所有脏数据页;以及f)采用同步或异 步方式刷新脏数据页至一磁盘。
本发明通过刷新指定裸设备脏数据的命令参数格式获得指定的裸设备,并 通过传输命令参数至内核中,与其中裸设备数据结构链表的裸设备进行比对, 以得到匹配的指定裸设备。然后由快速搜索树获得此指定裸设备的所有脏数据 页,进而用户可以在不关闭设备的情况下,将指定的一个裸设备的缓存脏数据 同步或异步刷新至磁盘中。因此,本发明的脏数据刷新处理不仅时间短,且能 够保证重要数据保存的及时性。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的 限定。


图1为本发明的刷新指定裸设备脏数据系统的系统方块图;以及
图2为本发明刷新指定裸设备脏数据的方法的步骤流程图。
其中,附图标记
10 用户态
20 核心态
12 判断模块
14 传送模块
22 査找模块
24 搜索树模块
26 刷新模块
30 磁盘
步骤102刷新指定裸设备脏数据命令参数格式是否正确 步骤104以系统调用方式传送命令参数至Linux内核 步骤106査找指定裸设备的数据结构 步骤108设备是否存在?
步骤110依照数据结构的地址映像获得指定裸设备的缓存快速搜索树 步骤112从快速搜索树获得此指定裸设备的所有脏数据页 步骤114是否异步刷新? 步骤116激活异步刷新线程 步骤118等待数据写入完成
具体实施例方式
有关本发明的特征与实作,兹配合附图作最佳实施例详细说明如下。 请参考图1,图中表示了本发明的刷新指定裸设备脏数据的系统,此系统 应用于一Limix系统中,并包含判断模块12、传送模块14、查找模块22、搜
索树模块24以及刷新模块26。其中判断模块12与传送模块14位于Linux系 统的用户态10下,查找模块22、搜索树模块24以及刷新模块26位于Linux 系统的核心态20中。
下面结合图1详细说明本发明的刷新指定裸设备脏数据的系统工作原理。 在用户态10下,判断模块12用来判断用户指定的裸设备的刷新脏数据命 令参数格式是否正确。判断模块12例如首先根据指定裸设备刷新命令参数得 到其区块设备路径,例如block—device—dirtypages—write命令字以获得其主 次设备号。如果获得指定裸设备的设备号操作失败,即判断刷新指定裸设备脏 数据的命令参数个数错误。此命令参数中包含两个参数,即设备号与同/异歩 标识。其中,同/异步标识的正确标识方式例如通常以0或1表示。因此,若 获得此参数为0或1的外的其它值,则表示命令参数格式错误。则表示指定裸 设备不存在,直接报错退出;否则,传输模块14以系统调用方式将此刷新指 定裸设备的脏数据的命令参数传送至Linux系统的核心态20中,进而把用户 态10下的裸设备主次设备号转换为核心态20的设备号。
在核心态20中,系统调用刷新指定裸设备脏数据的命令参数,主要由查 找模块22在核心态中查找指定裸设备的数据结构,并依照传入的命令参数调 用相应的函数。査找模块22首先遍历核心态区块设备的数据结构链表,从链 表中获得裸设备,并进行链表中相应裸设备的设备号与指定裸设备的比对。若 设备号不匹配,则表示指定裸设备不存在,查找模块22直接返回,提示没有 找到指定裸设备。如果设备号匹配,査找模块22则将査找结果发送至搜索树 模块24。
搜索树模块24根据査找的裸设备数据结构的地址映像获得相应的快速搜 索树,并根据指定裸设备的缓存快速搜索树的位图标识获得其中所有的脏数据 页,即裸设备对应的脏数据页。然后由刷新模块26采用同步或异步方式刷新 (写入)这些脏数据页至一磁盘30中。
在执行刷新时,刷新模块26依照刷新方式选择,利用 sync—blockdev—dirtypages函数完成刷新操作。当采用同步刷新脏页时,刷 新模块26则等待所有脏数据写入完成后结束。异步刷新时,刷新模块26采用 内核线程,例如pdflush线程执行sync—blockdev—dirtypages函数,以达到 异步刷新的目的。
现在请参考图2,此图为本发明刷新指定裸设备脏数据的方法的步骤流程图。
首先在用户态下,判断用户指定的裸设备的刷新脏数据命令参数格式是否 正确(步骤102)。判断时首先根据指定裸设备刷新命令参数得到其区块设备
路径,例如block—device—dirtypages—write命令字以获得其主次设备号。如 果获得指定裸设备的设备号操作失败,则表示指定裸设备不存在,则直接报错 结束。若正确,则前进至步骤104,以系统调用方式将此刷新指定裸设备的脏 数据的命令参数传送至Linux系统的核心态(步骤104)。命令参数中包含设 备号与同/异步标识两个参数。其中,同/异步标识的正确标识方式例如通常以 0或1表示。因此,若获得此参数为0或1的外的其它值,则表示命令参数格 式错误。
命令参数在通过系统调用进入核心态时,需要把用户态下的裸设备主次设 备号转换为核心态的设备号。
在核心态中,系统调用刷新指定裸设备脏数据的命令参数,并查找指定裸 设备的数据结构(步骤106)。然后,依照传入的命令参数调用相应的函数。 査找裸设备数据结构时,首先遍历核心态区块设备的数据结构链表,从链表中 获得裸设备,并进行链表中相应裸设备的设备号与指定裸设备的比对,以判断 指定裸设备是否存在(步骤108)。査找指定裸设备时,可以依照链表查找多 个指定裸设备。
若设备号不匹配,则表示指定裸设备不存在直接返回结束。如果设备号匹 配,则根据査找的裸设备数据结构的地址映像获得相应的快速搜索树(步骤 110)。之后,根据指定裸设备的缓存快速搜索树的位图标识获得其中所有的 脏数据页,即裸设备对应的脏数据页(步骤112)。
然后判断对指定裸设备进行异步刷新还是同步刷新(步骤114),例如通 过判断命令参数的同/异步标识为0或1实现。若同/异步标^^为0,则采用同 步刷新脏页,因此执行sync—blockdev—dirtypages函数等待所有脏数据刷新 写入完成后结束(步骤118)。若同/异步标识为1,则采用内核线程,例如 pdflush线程执行sync—blockdev—dirtypages函数,以异步刷新打开状态的 指定裸设备的脏数据至磁盘中(步骤U6)。
通过本发明指刷新指定裸设备脏数据的系统及方法,可以在不中断服务的
情况下,根据需要将某一单独裸设备的脏数据写入磁盘,进而提供方便、高效 且安全的脏数据刷新。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情 况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但 这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1、一种刷新指定裸设备脏数据的系统,应用于一Linux系统中,其特征在于,该系统包含一判断模块,根据刷新指定裸设备脏数据的命令参数的设备路径获得用户态的该指定裸设备的设备号,以判断该命令参数格式是否正确,其中若获得该设备号,则判断该命令参数格式正确;一传送模块,当该命令参数格式正确时以系统调用方式传送该命令参数至该Linux系统内核;一查找模块,依照该命令参数的设备号查找该指定裸设备的数据结构;一搜索树模块,依照查找的该数据结构的地址映像获得该指定裸设备的快速搜索树,并从该快速搜索树中找到该指定裸设备的所有脏数据页;以及一刷新模块,采用同步或异步方式刷新该脏数据页至一磁盘。
2、 根据权利要求1所述的刷新指定裸设备脏数据的系统,其特征在于, 该判断模块根据该命令参数的设备路径以获得用户态的该指定裸设备的设备 号,若获得该设备号失败,则判断该刷新指定裸设备脏数据的命令参数格式不 正确。
3、 根据权利要求2所述的刷新指定裸设备脏数据的系统,其特征在于, 该传送模块转换该用户态的该指定裸设备的设备号为核心态设备号并进行调 用,以传送该命令参数至该Linux系统内核。
4、 根据权利要求3所述的刷新指定裸设备脏数据的系统,其特征在于, 该查找模块比对核心态的该指定裸设备的设备号与该Linux系统内核中裸设 备数据结构链表中裸设备,以查找该指定裸设备的数据结构。
5、 一种刷新指定裸设备脏数据的方法,应用于一 Linux系统中,其特征 在于,该方法包含以下步骤a) 根据刷新指定裸设备脏数据的命令参数的设备路径获得用户态的该指 定裸设备的设备号,以判断该命令参数格式是否正确,其中若获得该设备号, 则判断该命令参数格式正确;b) 若正确则访问该Linux系统内核;c) 依照该命令参数的设备号査找该指定裸设备的数据结构; d) 根据查找的该数据结构的地址映像获得该指定裸设备的快速搜索树;e) 从该快速搜索树中找到该指定裸设备的所有脏数据页;以及f) 采用同步或异步方式刷新该脏数据页至一磁盘。
6、 根据权利要求5所述的刷新指定裸设备脏数据的方法,其特征在于, 该异步刷新由内核异步刷新线程执行。
7、 根据权利要求5所述的刷新指定裸设备脏数据的方法,其特征在于, 步骤a)更包含以下步骤根据该命令参数的设备路径以获得用户态的该指定裸设备的设备号; 若获得该设备号失败,则判断该刷新指定裸设备脏数据的命令参数格式不 正确;以及返回错误。
8、 根据权利要求7所述的刷新指定裸设备脏数据的方法,其特征在于, 歩骤b)更包含转换该用户态的该指定裸设备的设备号为核心态设备号并进行 调用的歩骤。
9、 根据权利要求8所述的刷新指定裸设备脏数据的方法,其特征在于, 步骤C)更包含以下步骤遍历裸设备数据结构链表;比对核心态的该指定裸设备的设备号与该链表中裸设备;以及 若设备号匹配,则査找到该指定裸设备的数据结构。
全文摘要
一种刷新指定裸设备脏数据的系统及方法,应用于一Linux系统中。本发明通过判断刷新指定裸设备脏数据(Dirty Data)的命令参数格式,进而将正确格式的命令参数传送至Linux内核。然后依照命令参数查找指定裸设备的数据结构,以获得该指定裸设备的快速搜索树。最后从快速搜索树中找到指定裸设备的所有脏数据页,并采用同步或异步方式刷新此脏数据页至一磁盘中。本发明可以在不中断服务的情况下,根据需要将某一单独裸设备的脏数据写入磁盘,进而提供方便、高效且安全的脏数据磁盘写入。
文档编号G06F17/30GK101359326SQ20071013767
公开日2009年2月4日 申请日期2007年7月31日 优先权日2007年7月31日
发明者刘文涵, 雷 贺, 陈玄同 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1