CN102521173B - 一种自动将缓存在易失介质中的数据写回方法 - Google Patents
一种自动将缓存在易失介质中的数据写回方法 Download PDFInfo
- Publication number
- CN102521173B CN102521173B CN201110363871.6A CN201110363871A CN102521173B CN 102521173 B CN102521173 B CN 102521173B CN 201110363871 A CN201110363871 A CN 201110363871A CN 102521173 B CN102521173 B CN 102521173B
- Authority
- CN
- China
- Prior art keywords
- region
- dirty
- thread
- write
- data
- 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.)
- Active
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种自动将缓存在易失介质中的数据写回方法,将低速设备与高速设备分别划分region管理,管理region的数据结构在内存中,对一个region的操作首先调用读取接口,操作完成后调用释放接口释放;在系统建立时创建后台冲洗线程,冲洗线程在没有任务时处于睡眠状态,在对region操作完成后唤醒冲洗线程,冲洗线程根据策略将region写回低速设备。
Description
技术领域
本发明涉及磁盘缓存技术,具体来说,涉及一种自动将缓存在易失介质中的数据写回方法。
背景技术
在Linux操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。文件Cache管理指的就是对这些由操作系统分配,并用来存储文件数据的内存的管理。Cache管理的优劣通过两个指标衡量:一是Cache命中率,Cache命中时数据可以直接从内存中获取,不再需要访问低速外设,因而可以显著提高性能;二是有效Cache的比率,有效Cache是指真正会被访问到的Cache项,如果有效Cache的比率偏低,则相当部分磁盘带宽会被浪费到读取无用Cache上,而且无用Cache会间接导致系统内存紧张,最后可能会严重影响性能。
当系统中物理内存减少时,Linux内存管理子系统必须释放物理页面。这个任务由核心交换后台进程(kswapd)来完成。核心交换后台进程是一种特殊的核心线程,它是没有虚拟内存的进程,在物理地址空间上以核心态运行,其目标是保证系统中有足够的空闲页面来维持内存管理系统运行效率。此进程由核心的init进程在系统启动时运行,被核心交换定时器周期性的调用。当定时器到时后,交换后台进程将检查系统中的空闲页面数是否太少。它使用两个变量:free_pages_high和free_page_low来判断是否该释放一些页面。只要系统中的空闲页面数大于free_pages_high,核心交换后台进程不做任何工作;它将睡眠到下一次定时器到时。如果系统中的空闲页面数在free_pages_high甚至free_pages_low以下时,核心交换后台进程将会选择一部分页面将其交换出去。
以上是将磁盘数据缓存在内存中时操作系统将数据写回的机制,这些缓存的数据操作系统以及读写这些数据的应用程序是知道其没有被写入磁盘的,所以在系统掉电的情况下即便数据没有被写入磁盘影响也不大。现在存在另外一种情况,某些程序使用device mapper机制将高速设备作为慢速设备的缓存,并向上提供与磁盘完全一致的接口,这样当数据写入此接口后,操作系统与应用程序确信已经不会丢失了,但实际情况却是这些数据被缓存到了一个高速易失设备上,在掉电时这些数据将会丢失,而操作系统和应用程序完全不知道这种情况,这时的数据丢失是比较严重的。所以必须提供一种相对及时的自动写回机制来减少数据丢失发生的几率。
发明内容
为解决上述问题,本发明提出了一种自动将缓存在易失介质中的数据写回方法。
一种自动将缓存在易失介质中的数据写回方法,将低速设备与高速设备分别划分region管理,管理region的数据结构在内存中,对一个region的操作首先调用读取接口,操作完成后调用释放接口释放;
在系统建立时创建后台冲洗线程,冲洗线程在没有任务时处于睡眠状态,在对region操作完成后唤醒冲洗线程,冲洗线程根据策略将region写回低速设备。
优选的,所述冲洗线程在被唤醒后的工作过程为:
判断是否存在脏region,如果没有则继续睡眠;
如果存在脏region,根据策略写回脏region;
如果脏region的数量大于零,从高速设备中读出脏region写入低速设备;
如果策略暂时不允许写回,则延迟,之后再重新执行冲洗线程。
优选的,所述策略包括只考虑安全不考虑性能的强制写回,兼顾安全和性能的无IO访问时写回和只考虑性能不考虑安全的不写回。
优选的,所述冲洗线程存在一个运行标志位,用于避免两个冲洗线程同时执行。
优选的,所述冲洗线程存在一个执行标志位,用于判断是否冲洗线程刚刚执行完毕;如果执行标志位为空,则继续执行;如果执行标志位不为空,则延迟后,再重新执行时判断是否有脏region;如果没有则清空运行和执行标志位,进入休眠,如果有则写回。
优选的,所述冲洗线程在写回时判断脏region是否为连续区域,如果为连续区域,则只读这一区域;如果不为连续区域,则读整个region区域,再从磁盘中读入整个region区域,根据脏位图将高速设备上的脏数据写回磁盘。
附图说明
图1是本发明的缓存映射图
具体实施方式
本发明的一种使用场景如图1所示,低速设备与高速设备分别划分为若干个region,他们之间通过组相连方式映射,管理每个region的数据结构为struct region,位于内存中。每次对一个region进行操作时必须调用接口——get_region(),用完后必须调用put_region()释放。
在系统建立的时候创建后台进程flush_work,此进程没有任务的时候处于睡眠状态,在需要其做写回操作的时候再将其唤醒。考虑到将脏数据写入高速缓存设备的时候必然存在get_region()和put_region()的操作,而调用put_region()时脏数据已经写入缓存,所以本发明在put_region()操作里将flush_work唤醒并执行如下操作:
1、判断是否有脏region,如果没有则继续睡眠;
2、如果有脏数据,则可以根据之前设定的策略计算需要写回的脏region的数量
a)强制写回——只考虑安全性,不考虑性能;
b)无IO访问时写回——兼顾安全性和性能;
c)不写回——只考虑性能,不考虑安全性;
3、如果脏region数量大于零则启动写回过程
a)从高速设备上读出脏数据;
b)写入低速设备;
4、如果策略暂时不允许写回则延迟一定时间后再重新执行flush_work;
对于一对设备只需要启动一次flush_work,但是一对设备存在着很多的region,对每一个region执行put_region()时都会试图执行flush_work,为了避免同时执行多次flush_work,采用如下策略:
if(test_and_set_bit(0,&flushing))
return;
通过设置flushing第0位来防止两个以上流程执行下面的流程,如果此位为0,那么设置成功,继续执行;如果此为为1,则失败,直接返回,现在的flush_work已经在运行了,不必担心脏数据无法写回低速设备。进入flush_work后,也要执行类似的操作:
此操作试图将flushing的第1为设置为1并返回其原来的值,如果原来为0表明是第一遍进入flush_work,则继续往下执行;如果为1则表示之前执行过flush_work,且延迟一定时间后再次执行,这时判断是否有脏region,如果没有则清空flushing的第0位和第1位,flush_work重新进入睡眠状态。
如果没有进入睡眠状态,则根据用户的写回策略判断现在有多少需要写回的region,只要数量大于0则进入写回流程。写回的第一步是从高速设备读所有的脏数据。若脏数据为单一连续区域,则只读这个区域,读回来无误则直接写入磁盘;否则读整个region(可优化为只读多个脏数据区的最左边界至最右边界),读回来无误,再从磁盘读入整个region,然后根据dirty位图将高速设备上最新的数据拷贝至磁盘回来的bio中,再将此bio写回磁盘。
准备过程:
1.分配一个xinfo结构和一个rbio,若成功转2,否则set_state(DIRTY);
2.此处资源分配成功,检测当前dirty位图,确定左右边界,以及是否为单一连续区域,然后执行如下二选一路径:
a)若为单一连续区域:在region或者xinfo中标记其为连续的,设置rbio的左右边界和size
b)否则为多个连续区域:设置左右边界为region的左右边界
3.设置xinfo和rbio其它相关域,以wb_read_cache_endio作为bi_end_io,将rbio发送至高速设备。
从高速设备中读出数据后(wb_read_cache_endio):
1.记录error于xinfo->err
2.检查xinfo->err,若不为0,则转6,若为0表示没有出现错误
3.若此region上dirty数据构成单一连续区域,则修改bio相关域,以wb_write_disk_end_io作为其bi_end_io函数,转发至磁盘,然后return
4.此region上dirty数据不连续,需要读disk,分配一个rbio,若失败,转6
5.设置此bio,从disk读整个region.以wb_read_disk_endio作为bi_end_io,转发至磁盘,然后return
6.set_state(DIRTY)
7.解锁flush_lock,释放资源
脏数据不连续,从磁盘读出数据后(wb_read_disk_endio):
1.记录error于xinfo->err;检查bi_size,若大于0,则return
2.检查xinfo->err,若非0,转7
3.无错误发生,记录一份region的dirty位图拷贝,测试region当前状态,若为DIRTY,转7
4.读cache数据有效,依据dirty位图拷贝,将cache bio中的dirty数据copy至刚返回的disk bio中
5.释放cache bio,修改disk bio相应域,以wb_write_disk_endio作为bi_end_io,转发至磁盘
6.return
7.set_state(DIRTY)
8.释放资源,解锁flush_lock
所有数据准备完毕,写入磁盘后(wb_write_disk_endio):
1.记录error于xinfo->err;检查bi_size,若大于0,则return
2.检查xinfo->err,若非0,则按严重错误处理,set_state(DIRTY),转4
3.无error,test_and_set_state(FLUSH,CLEAN)
4.释放相应资源,解锁flush_lock
Claims (5)
1.一种自动将缓存在易失介质中的数据写回方法,其特征在于:
将低速设备与高速设备分别划分region管理,管理region的数据结构在内存中,对一个region的操作首先调用读取接口,操作完成后调用释放接口释放;
在系统建立时创建后台冲洗线程,冲洗线程在没有任务时处于睡眠状态,在对region操作完成后唤醒冲洗线程,冲洗线程根据策略将region写回低速设备;
所述冲洗线程在被唤醒后的工作过程为:
判断是否存在脏region,如果没有则继续睡眠;
如果存在脏region,根据策略写回脏region;
如果脏region的数量大于零,从高速设备中读出脏region写入低速设备;
如果策略暂时不允许写回,则延迟,之后再重新执行冲洗线程。
2.如权利要求1所述的方法,其特征在于:所述策略包括只考虑安全不考虑性能的强制写回,兼顾安全和性能的无IO访问时写回和只考虑性能不考虑安全的不写回。
3.如权利要求1所述的方法,其特征在于:所述冲洗线程存在一个运行标志位,用于避免两个冲洗线程同时执行。
4.如权利要求1所述的方法,其特征在于:所述冲洗线程存在一个执行标志位,用于判断是否冲洗线程刚刚执行完毕;如果执行标志位为空,则继续执行;如果执行标志位不为空,则延迟后,再重新执行时判断是否有脏region;如果没有则清空运行和执行标志位,进入休眠,如果有则写回。
5.如权利要求1、3、4任一所述的方法,其特征在于:所述冲洗线程在写回时判断脏region是否为连续区域,如果为连续区域,则只读这一区域;如果不为连续区域,则读整个region区域,再从磁盘中读入整个region区域,根据脏位图将高速设备上的脏数据写回磁盘。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110363871.6A CN102521173B (zh) | 2011-11-17 | 2011-11-17 | 一种自动将缓存在易失介质中的数据写回方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110363871.6A CN102521173B (zh) | 2011-11-17 | 2011-11-17 | 一种自动将缓存在易失介质中的数据写回方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102521173A CN102521173A (zh) | 2012-06-27 |
CN102521173B true CN102521173B (zh) | 2014-10-22 |
Family
ID=46292102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110363871.6A Active CN102521173B (zh) | 2011-11-17 | 2011-11-17 | 一种自动将缓存在易失介质中的数据写回方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521173B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808154B (zh) * | 2014-12-31 | 2019-05-24 | 深圳神州数码云科数据技术有限公司 | 基于位图的双控制器的高速缓冲存储器回写方法及装置 |
CN105740170B (zh) * | 2016-01-22 | 2020-12-04 | 浪潮(北京)电子信息产业有限公司 | 一种缓存脏页刷写方法及装置 |
CN107766151A (zh) * | 2017-09-28 | 2018-03-06 | 郑州云海信息技术有限公司 | 一种页面换出方法 |
CN109086462A (zh) * | 2018-09-21 | 2018-12-25 | 郑州云海信息技术有限公司 | 一种分布式文件系统中元数据的管理方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006285669A (ja) * | 2005-03-31 | 2006-10-19 | Toshiba Corp | ホスト機器 |
US7631152B1 (en) * | 2005-11-28 | 2009-12-08 | Nvidia Corporation | Determining memory flush states for selective heterogeneous memory flushes |
-
2011
- 2011-11-17 CN CN201110363871.6A patent/CN102521173B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN102521173A (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210026837A1 (en) | Persistent memory management | |
Joshi et al. | Atom: Atomic durability in non-volatile memory through hardware logging | |
Lee et al. | Unioning of the buffer cache and journaling layers with non-volatile memory | |
US9767017B2 (en) | Memory device with volatile and non-volatile media | |
US9218278B2 (en) | Auto-commit memory | |
EP2972891B1 (en) | Multiversioned nonvolatile memory hierarchy for persistent memory | |
US20140006687A1 (en) | Data Cache Apparatus, Data Storage System and Method | |
EP3121731B1 (en) | Memory management method and device | |
US8621144B2 (en) | Accelerated resume from hibernation in a cached disk system | |
US7085955B2 (en) | Checkpointing with a write back controller | |
CN104881371A (zh) | 持久性内存事务处理缓存管理方法与装置 | |
US20060206538A1 (en) | System for performing log writes in a database management system | |
US20230266814A1 (en) | Container-based application management method and apparatus | |
US20090248984A1 (en) | Method and device for performing copy-on-write in a processor | |
CN101923499A (zh) | 执行防电源故障高速缓存而无需原子元数据的技术 | |
US20180107601A1 (en) | Cache architecture and algorithms for hybrid object storage devices | |
CN100419715C (zh) | 嵌入式处理器系统及其数据操作方法 | |
CN102521173B (zh) | 一种自动将缓存在易失介质中的数据写回方法 | |
CN116472512A (zh) | 片上系统(soc)的增强的耐久性 | |
Palframan et al. | iPatch: Intelligent fault patching to improve energy efficiency | |
Kim et al. | In-memory file system for non-volatile memory | |
CN102063271B (zh) | 一种磁盘外置Cache基于状态机的写回方法 | |
Lee et al. | A unified buffer cache architecture that subsumes journaling functionality via nonvolatile memory | |
WO2024021487A1 (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN114756355A (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220728 Address after: 100193 No. 36 Building, No. 8 Hospital, Wangxi Road, Haidian District, Beijing Patentee after: Dawning Information Industry (Beijing) Co.,Ltd. Patentee after: DAWNING INFORMATION INDUSTRY Co.,Ltd. Address before: 100084 Beijing Haidian District City Mill Street No. 64 Patentee before: Dawning Information Industry (Beijing) Co.,Ltd. |