CN101359326B - 一种刷新指定裸设备脏数据的系统及方法 - Google Patents
一种刷新指定裸设备脏数据的系统及方法 Download PDFInfo
- Publication number
- CN101359326B CN101359326B CN2007101376765A CN200710137676A CN101359326B CN 101359326 B CN101359326 B CN 101359326B CN 2007101376765 A CN2007101376765 A CN 2007101376765A CN 200710137676 A CN200710137676 A CN 200710137676A CN 101359326 B CN101359326 B CN 101359326B
- Authority
- CN
- China
- Prior art keywords
- raw device
- command parameter
- appointment
- raw
- device number
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种刷新指定裸设备脏数据的系统及方法,应用于一Linux系统中。本发明通过判断刷新指定裸设备脏数据(Dirty Data)的命令参数格式,进而将正确格式的命令参数传送至Linux内核。然后依照命令参数查找指定裸设备的数据结构,以获得该指定裸设备的快速搜索树。最后从快速搜索树中找到指定裸设备的所有脏数据页,并采用同步或异步方式刷新此脏数据页至一磁盘中。本发明可以在不中断服务的情况下,根据需要将某一单独裸设备的脏数据写入磁盘,进而提供方便、高效且安全的脏数据磁盘写入。
Description
技术领域
本发明涉及一种刷新指定块设备脏数据的方法,尤其涉及一种刷新不基于文件系统的裸设备脏数据的系统及方法。
背景技术
为了加快内核处理上层应用程序磁盘输入/输出的速度,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,图中表示了本发明的刷新指定裸设备脏数据的系统,此系统应用于一Linux系统中,并包含判断模块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函数,以异步刷新打开状态的指定裸设备的脏数据至磁盘中(步骤116)。
通过本发明指刷新指定裸设备脏数据的系统及方法,可以在不中断服务的情况下,根据需要将某一单独裸设备的脏数据写入磁盘,进而提供方便、高效且安全的脏数据刷新。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (8)
1.一种刷新指定裸设备脏数据的系统,应用于一Linux系统中,其特征在于,该系统包含:
一判断模块,根据刷新指定裸设备脏数据的命令参数的设备路径获得用户态的该指定裸设备的设备号,以判断该命令参数格式是否正确,其中若获得该设备号,则判断该命令参数格式正确;
一传送模块,当该命令参数格式正确时所述的传送模块转换该用户态的该指定裸设备的设备号为核心态设备号并进行系统调用,以传送该命令参数至该Linux系统内核;
一查找模块,依照该命令参数的设备号查找该指定裸设备的数据结构;
一搜索树模块,依照查找的该数据结构的地址映像获得该指定裸设备的快速搜索树,并从该快速搜索树中找到该指定裸设备的所有脏数据页;以及
一刷新模块,采用同步或异步方式刷新该脏数据页至一磁盘。
2.根据权利要求1所述的刷新指定裸设备脏数据的系统,其特征在于,该判断模块根据该命令参数的设备路径以获得用户态的该指定裸设备的设备号,若获得该设备号失败,则判断该刷新指定裸设备脏数据的命令参数格式不正确。
3.根据权利要求1所述的刷新指定裸设备脏数据的系统,其特征在于,该查找模块比对核心态的该指定裸设备的设备号与该Linux系统内核中裸设备数据结构链表中裸设备,以查找该指定裸设备的数据结构。
4.一种刷新指定裸设备脏数据的方法,应用于一Linux系统中,其特征在于,该方法包含以下步骤:
a)根据刷新指定裸设备脏数据的命令参数的设备路径获得用户态的该指定裸设备的设备号,以判断该命令参数格式是否正确,其中若获得该设备号,则判断该命令参数格式正确;
b)若正确,则转换该用户态的该指定裸设备的设备号为核心态设备号并以系统调用方式将该命令参数传送至Linux系统内核;
c)依照该命令参数的设备号查找该指定裸设备的数据结构;
d)根据查找的该数据结构的地址映像获得该指定裸设备的快速搜索树;
e)从该快速搜索树中找到该指定裸设备的所有脏数据页;以及
f)采用同步或异步方式刷新该脏数据页至一磁盘。
5.根据权利要求5所述的刷新指定裸设备脏数据的方法,其特征在于,该异步刷新由内核异步刷新线程执行。
6.根据权利要求5所述的刷新指定裸设备脏数据的方法,其特征在于,步骤a)还包含以下步骤:
根据该命令参数的设备路径以获得用户态的该指定裸设备的设备号;
若获得该设备号失败,则判断该刷新指定裸设备脏数据的命令参数格式不正确;以及
返回错误。
7.根据权利要求7所述的刷新指定裸设备脏数据的方法,其特征在于,步骤b)还包含转换该用户态的该指定裸设备的设备号为核心态设备号并进行调用的步骤。
8.根据权利要求8所述的刷新指定裸设备脏数据的方法,其特征在于,步骤c)具体为:
遍历裸设备数据结构链表;
比对核心态的该指定裸设备的设备号与该链表中裸设备;以及
若设备号匹配,则查找到该指定裸设备的数据结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101376765A CN101359326B (zh) | 2007-07-31 | 2007-07-31 | 一种刷新指定裸设备脏数据的系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101376765A CN101359326B (zh) | 2007-07-31 | 2007-07-31 | 一种刷新指定裸设备脏数据的系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101359326A CN101359326A (zh) | 2009-02-04 |
CN101359326B true CN101359326B (zh) | 2010-11-10 |
Family
ID=40331778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101376765A Expired - Fee Related CN101359326B (zh) | 2007-07-31 | 2007-07-31 | 一种刷新指定裸设备脏数据的系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101359326B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740170B (zh) * | 2016-01-22 | 2020-12-04 | 浪潮(北京)电子信息产业有限公司 | 一种缓存脏页刷写方法及装置 |
CN107844436B (zh) * | 2017-11-02 | 2021-07-16 | 郑州云海信息技术有限公司 | 一种缓存中脏数据的组织管理方法、系统及存储系统 |
CN112966293B (zh) * | 2020-12-31 | 2022-06-03 | 厦门市美亚柏科信息股份有限公司 | 数据库脏页面检测方法、装置、计算设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1176433A (zh) * | 1996-09-09 | 1998-03-18 | 株式会社东芝 | 高速缓存清理装置以及具备该装置的计算机系统 |
US5895488A (en) * | 1997-02-24 | 1999-04-20 | Eccs, Inc. | Cache flushing methods and apparatus |
-
2007
- 2007-07-31 CN CN2007101376765A patent/CN101359326B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1176433A (zh) * | 1996-09-09 | 1998-03-18 | 株式会社东芝 | 高速缓存清理装置以及具备该装置的计算机系统 |
US5895488A (en) * | 1997-02-24 | 1999-04-20 | Eccs, Inc. | Cache flushing methods and apparatus |
Also Published As
Publication number | Publication date |
---|---|
CN101359326A (zh) | 2009-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9405675B1 (en) | System and method for managing execution of internal commands and host commands in a solid-state memory | |
US8185716B2 (en) | Memory system and method for using a memory system with virtual address translation capabilities | |
US20170060434A1 (en) | Transaction-based hybrid memory module | |
CN110347331B (zh) | 存储器模块和包括存储器模块的存储器系统 | |
CN101589374B (zh) | 用于在处理器中设置高速缓存策略的方法和设备 | |
CN102023809A (zh) | 存储系统、从存储系统读取数据的方法及写入数据的方法 | |
CN101861571A (zh) | 用于修改存储器存取次序的系统、设备及方法 | |
CN102147757B (zh) | 一种测试装置和测试方法 | |
CN103309820A (zh) | 磁盘阵列缓存的实现方法 | |
US12099736B2 (en) | Scalable architecture enabling large memory system for in-memory computations | |
US10223037B2 (en) | Memory device including controller for controlling data writing using writing order confirmation request | |
CN103092785A (zh) | Ddr2 sdram控制器 | |
CN101359326B (zh) | 一种刷新指定裸设备脏数据的系统及方法 | |
CN103729149A (zh) | 一种存储数据的方法 | |
US20160070648A1 (en) | Data storage system and operation method thereof | |
CN102929935B (zh) | 一种基于事务的大容量数据读写方法 | |
CN106033323B (zh) | 读取快闪存储器中储存单元的方法以及使用该方法的装置 | |
SG126863A1 (en) | Recording apparatus | |
CN111367991A (zh) | 一种基于消息队列的MongoDB数据实时同步方法及系统 | |
CN105260139A (zh) | 一种磁盘管理方法以及系统 | |
CN101458655B (zh) | 内存管理方法、系统及内存控制装置 | |
CN104035886B (zh) | 磁盘重映射方法、装置及电子设备 | |
US20130111108A1 (en) | Solid state drive and method for controlling cache memory thereof | |
CN102024490B (zh) | 伪静态存储器及其读操作与刷新操作的控制方法 | |
CN109710547B (zh) | 一种工业物联网中的缓冲内存管理设计与实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20101110 Termination date: 20210731 |