CN101231637A - 一种基于文件系统缓存的自适应预读取方法 - Google Patents

一种基于文件系统缓存的自适应预读取方法 Download PDF

Info

Publication number
CN101231637A
CN101231637A CNA2007100024487A CN200710002448A CN101231637A CN 101231637 A CN101231637 A CN 101231637A CN A2007100024487 A CNA2007100024487 A CN A2007100024487A CN 200710002448 A CN200710002448 A CN 200710002448A CN 101231637 A CN101231637 A CN 101231637A
Authority
CN
China
Prior art keywords
advance
sector
read
reads
record
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.)
Pending
Application number
CNA2007100024487A
Other languages
English (en)
Inventor
黄文伟
童小九
陆小飞
周立超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CNA2007100024487A priority Critical patent/CN101231637A/zh
Publication of CN101231637A publication Critical patent/CN101231637A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种基于文件系统缓存的自适应预读取方法,包括以下步骤:(1)建立预读取扇区使用记录;(2)每次执行预读取操作时,在所述预读取扇区使用记录中,记录预读取的扇区数;(3)使用预读取的扇区时,在所述预读取扇区使用记录中,记录使用的预读取扇区数;(4)根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。

Description

一种基于文件系统缓存的自适应预读取方法
技术领域
本发明涉及一种对磁盘进行读写操作的方法,尤其是一种在读写过程中,基于文件系统缓存的预读取方法。
背景技术
无论是读操作还是写操作,磁盘驱动器存取通常比内存存取慢得多。对于一般的设备操作,当用户需要进行读写操作时,直接对磁盘进行数据读写,这种磁盘操作方式非常慢,因此容易阻塞应用程序,同时由于没有优化磁头,需要频繁的移动磁头,效率也很低。文件系统缓存层就是为了解决这个问题而设计的。它的基本思想是:在上层用户的磁盘操作与实际的设备操作之间添加了一个数据缓冲区,利用这个缓冲区来实现磁盘操作性能的优化。文件系统缓存层的主要功能有三个:保存最近使用的数据块,减少读取块设备的次数;优化写操作,减少磁头移动次数;提供预读取功能。
由于上层文件系统组织文件时尽量把同一个文件安排在连续的空间中,因此应用程序从块设备中读取当前扇区时,邻接扇区的内容也有很大可能下次被使用到。使用预读取功能,可以在获取当前扇区的数据时,把邻接的指定个数的扇区数据也获取并存放在缓存区中,以免下次需要使用这些数据时再把硬盘磁头移动到指定位置进行获取,以减少磁头移动次数。这个功能在缓存足够大的情况下,对于多任务访问不同的连续文件时性能有很大提高。
但是,如果预读取算法使用不当,则会对性能有一定负面影响。因为被预读取的数据并不一定被使用到,此时预读取的这些无用数据反而会增加上层应用等待从磁盘获取数据的时间。并且缓存区的大小并不是无限大的,在缓存满的情况下,需要淘汰缓存中的其它数据来存放预取的数据,因此可能发生预取的垃圾数据替换了缓存中的有用数据的情况。
在嵌入式文件系统中,预取操作实现得比较简单,通常是按照预先分配的缓存区大小来确定预读取区的大小,每次进行预取操作时从磁盘中读取的扇区数在初始化时就已经确定好了。这种预取操作没有复杂的算法设计,在读取连续文件时效率很高,但是当文件比较零散时,有可能预读取到过多的垃圾数据。
发明内容
本发明的目的在于提供一种基于文件系统缓存的自适应预读取管理方法,通过记录预读取数据的历史使用情况来预测本次预读取数据大小,用以减少预读取的垃圾扇区数。
本发明的技术方案包括:
一种基于文件系统缓存的自适应预读取方法,包括以下步骤:
(1)建立预读取扇区使用记录;
(2)每次执行预读取操作时,在所述预读取扇区使用记录中,记录预读取的扇区数;
(3)使用预读取的扇区时,在所述预读取扇区使用记录中,记录使用的预读取扇区数;
(4)根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。
进一步,上述步骤(1)中,建立N个预读取扇区使用记录,分别记录最接近当前预读取操作的以前N次预读取操作的预读取扇区的使用情况。
进一步,所述每个记录至少包括预读取扇区数和预读取扇区使用数两个字段,并且所述步骤(2)中,在预读取扇区数字段中,记录某次预读取操作预读取的扇区数量;所述步骤(3)中,在预读取扇区使用数字段中,记录对该次预读取扇区的使用数量。
进一步,所述步骤(2)包括:预先设定预读取扇区数的最大值,首次执行预读取操作时预读取的扇区数不大于该最大值。
进一步,所述步骤(2)还包括:将每次预读取的扇区存放在一个缓存块中,并在缓存块控制结构中,给每个存放预读取扇区的缓存块赋予一个索引值,记录该缓存块存放的扇区是通过哪次预读取操作预读取的;所述步骤(3)包括:在使用存放预读取扇区的缓存块时,根据所述索引值确定所使用的扇区是通过哪次预读取操作预读取的,并在记录该次预读取操作预读取的扇区数的记录中,记录使用的预读取扇区数。
进一步,上述方法包括:所述步骤(4)中,计算出每个记录中预读取扇区使用数和预读取扇区数的比值,作为一次预读取操作预读取的扇区的使用率;计算出N次预读取操作预读取的扇区的平均使用率,再乘以所述预先设定的预读取扇区数的最大值,得出当前预读取操作的预读取扇区数。
上述方法中,所述步骤(1)进一步可包括:每个记录还有一个权值字段,并为每个记录分配一个权值,权值的分配原则是离当前预读取操作越近的记录的权值越大,并且使所有权值的和为100%。
进一步,所述步骤(4)中,计算出每个记录中预读取扇区使用数和预读取扇区数的比值,并乘以该记录对应的权值,得出每次预读取操作预读取的扇区的加权使用率;将N次预读取的扇区的加权使用率相加,并乘以预先设定的预读取扇区数的最大值,得出当前预读取操作的预读取扇区数。
本发明所提供的方法,由于在每次预读取时都会通过前面多次预读取数据的使用比率来确定本次预读取数据的大小,因此相比现有技术使用一个固定预取值的算法,减少了垃圾扇区数的读取。而且本发明记录的历史信息内容很少,计算逻辑简单,比较适合嵌入式系统中文件系统缓存的管理。
附图说明
图1是预读取扇区使用记录的数据结构示意图;
图2是文件系统缓存块控制结构示意图;
图3是采用本发明方法的读写操作流程图;
图4是一种离散文件的分布示意图。
具体实施方式
以下结合附图及较佳实施例,对本发明的实施方式进行较为详细的说明。
本发明的方法能对基于文件系统缓存的预读取数据大小进行自适应调整,其包括以下基本处理步骤:
建立预读取扇区使用记录;
每次执行预读取操作时,在所述预读取数据使用记录中,记录预读取的扇区数;
使用预读取的扇区时,在所述预读取数据使用记录中,记录使用的预读取扇区数;
根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。
本发明的预读取扇区使用记录的数据结构至少包括预读取扇区数和预读取扇区使用数两个字段。
图1是预读取扇区使用记录的数据结构示意图,其中有预读取的扇区数(adcPreReadBlocks)字段和预读取扇区使用数(adcPreReadUsedBlocks)字段。图1所示的实施例中,数据结构还包括有权值(adcPreReadPower)字段。
adcPreReadBlocks表示每次执行预读取操作时预读取的扇区数,adcPreReadUsedBlocks表示adcPreReadBlocks个扇区中被使用的扇区数,adcPreReadUsedBlocks与adcPreReadBlocks的比值就是预读取扇区的使用率。
本发明为了使预读取的扇区数尽可能接近实际使用的扇区数量,可记录并统计多次以前的预读取操作的预读取扇区的使用率。图1所示的实施例中,设定预读取扇区使用记录的个数共有N个,分别记录最接近当前预读取操作的以前N次预读取操作的预读取扇区的使用情况。
上层用户创建块设备时,对块设备的控制结构进行初始化,同时对预读取扇区使用记录的数据结构进行初始化。当有N个记录时,首先对N个记录的数据结构进行初始化。
预读取扇区使用记录初始化时,将adcPreReadBlocks和adcPreReadUsedBlocks的值都设置为1,即历史的预读取扇区使用率为100%。可以为每个记录分配一个权值来表示其在总的使用率中占的比重,权值的分配原则是离当前预取操作越近的记录的权值越大,并且N个权值的和应为100%。如图1所示,权值共有N个,从权值1、权值2到权值N按递减的顺序排列,指针1总是指向权值1,表示最近一次预读取操作预读取的扇区的使用率的权值。根据文件系统缓存区的大小,设定一个预读取的最大值MAX_READAHEAD,首次预读取扇区的数量不大于MAX_READAHEAD。
图1中,指针2总是指向最近一次预读取扇区使用记录所在的位置。指针2的值在0到N-1之间循环递增,达到N-1后,重新从0开始。从磁盘中预读取块后,把预读取的扇区数填入指针2当前值加1的位置上的记录的adcPreReadBlocks字段中,并把该记录的adcPreReadUsedBlocks字段设置为0,然后指针2的当前值加1,使指针2继续指向最近一次预读取数据使用记录所在的位置。
在文件系统缓存的控制结构中有一个总的索引值globalIndex,该值初始化时为0,每次执行预读取操作后该值就递增1。
图2是文件系统缓存块控制结构示意图,每个缓存块控制结构中都有一个索引值indeX,及一个预读取属性字段bPreRead。当把该缓存块用来存储预读取的扇区时,把globalIndex赋给该缓存块控制结构的index,标记该缓存块是在哪次预读取操作时获取的,并且把该缓存块控制结构中的预读取属性字段bPreRead设为TRUE,表示该缓存块是通过预读取获取的。
图3是本发明的读写操作流程图。对于读缓存块操作,首先判断所读的缓存块的控制结构的bPreRead字段是否为TRUE,如果不为TRUE,表示该缓存块不是通过预读取方式获取的,不用把该缓存块使用信息记录到预读取扇区使用记录中;如果bPreRead字段为TRUE,还要继续判断globalIndex与缓存块控制结构中的index差值是否小于等于N,如果大于N,则这个缓存块的使用信息不在统计的范围之内;如果小于等于N,则把index模上N,就可以得到该缓存块使用信息记录的位置。把该位置上的adcPreReadUsedBlocks字段加1,并把该缓存块控制结构的bPreRead字段设为FALSE,表示该缓存块的使用信息已记录到预读取扇区使用记录中,下次使用时不再记录。
对于写缓存块操作,首先判断是否按扇区方式来写。如果是按字节方式写,则该缓存块的使用信息与上述的读操作一样记录在预读取扇区使用记录中;如果是按扇区边界对齐写,则该预读取的缓存块是属于预读取的垃圾数据,把该缓存块控制结构中的bPreRead字段设为FALSE。
在发起预读取操作时,要计算本次预读取扇区的数量。
首先要计算以前预读取扇区的使用率,将该使用率乘以预先设定的预读取扇区数的最大值MAX_READAHEAD,即得出本次预读取扇区的数量。
当有N个记录时,可以计算出N个记录的预读取扇区的平均使用率将该平均使用率乘以预先设定的预读取扇区数的最大值,即得出本次预读取扇区的数量。
为了使预读取的扇区数尽可能接近实际使用的扇区数,还可以计算出N个记录的加权使用率adcUseRate,计算公式如下所示:
adcUseRate=adcPreReadUsedBlocks(i)/adcPreReadBlocks(i)*adcPreReadPower(j)
其中i是从图1所示的指针2作为起始值,每次递减该值,当递减到0后再从N-1开始递减;j是从指针1作为起始值,每次递增该值,当递增到N-1后再从0开始递增。
按上述公式计算N次,可得到N个使用率,N个使用率的和便是预读取数据的加权使用率。把加权使用率乘上预先设定的预读取扇区数的最大值MAX_READAHEAD,就得到本次预读取的扇区数。
图4所示为硬盘一段连续的空间,其中白色部分是某文件占用的空间,上面的数字是文件的逻辑扇区号,灰色部分不属于该文件空间。图4中的文件属于占用空间不连续的文件。采用现有技术的固定值预读取方法,如果把预读取大小固定设为16,则每次预读取时都会读取12个扇区的垃圾数据;采用本发明的方法,如果把MAX_READAHEAD设为16,使用上述的自适应算法,则会慢慢收敛到合适的预读取大小,减少了垃圾数据的读取。
可见,采用本发明的自适应预读取方法,在文件内容分布离散的情况下,可以显著减少垃圾数据的读取。而且由于计算方法简单,即使在文件内容连续的情况下,相比使用固定预读取大小的方法,性能也不会下降。
应当说明的是,上述具体实施例仅仅是为阐述本发明的方法而列举的较佳实施方式,不应理解为对本发明的专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。

Claims (10)

1.一种基于文件系统缓存的自适应预读取方法,包括以下步骤:
(1)建立预读取扇区使用记录;
(2)每次执行预读取操作时,在所述预读取扇区使用记录中,记录预读取的扇区数;
(3)使用预读取的扇区时,在所述预读取扇区使用记录中,记录使用的预读取扇区数;
(4)根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。
2.如权利要求1所述的方法,其特征在于:所述步骤(1)中,建立N个预读取扇区使用记录,分别记录最接近当前预读取操作的以前N次预读取操作的预读取扇区的使用情况。
3.如权利要求2所述的方法,其特征在于:所述每个记录至少包括预读取扇区数和预读取扇区使用数两个字段。
4.如权利要求3所述的方法,其特征在于:所述步骤(2)中,在预读取扇区数字段中,记录某次预读取操作预读取的扇区数量;所述步骤(3)中,在预读取扇区使用数字段中,记录对该次预读取扇区的使用数量。
5.如权利要求4所述的方法,其特征在于:所述步骤(2)进一步包括,预先设定预读取扇区数的最大值,首次执行预读取操作时预读取的扇区数不大于该最大值。
6.如权利要求4所述的方法,其特征在于:所述步骤(2)进一步包括,将每次预读取的扇区存放在一个缓存块中,并在缓存块控制结构中,给每个存放预读取扇区的缓存块赋予一个索引值,记录该缓存块存放的扇区是通过哪次预读取操作预读取的。
7.如权利要求6所述的方法,其特征在于:所述步骤(3)中,在使用某个缓存块中存放的预读取扇区时,根据该缓存块的索引值确定所使用的扇区是通过哪次预读取操作预读取的,并在记录该次预读取操作预读取的扇区数的记录中,记录使用的预读取扇区数。
8.如权利要求7所述的方法,其特征在于:所述步骤(4)中,计算出每个记录中预读取扇区使用数和预读取扇区数的比值,作为一次预读取操作预读取的扇区的使用率;计算出N次预读取操作预读取的扇区的平均使用率,再乘以所述预先设定的预读取扇区数的最大值,得出当前预读取操作的预读取扇区数。
9.如权利要求7所述的方法,其特征在于:所述步骤(1)进一步包括,每个记录还包括一个权值字段,并为每个记录分配一个权值,权值的分配原则是离当前预读取操作越近的记录的权值越大,并且使所有权值的和为100%。
10.如权利要求9所述的方法,其特征在于:所述步骤(4)中,计算出每个记录中预读取扇区使用数和预读取扇区数的比值,并乘以该记录对应的权值,得出每次预读取操作预读取的扇区的加权使用率;将N次预读取的扇区的加权使用率相加,并乘以预先设定的预读取扇区数的最大值,得出当前预读取操作的预读取扇区数。
CNA2007100024487A 2007-01-22 2007-01-22 一种基于文件系统缓存的自适应预读取方法 Pending CN101231637A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2007100024487A CN101231637A (zh) 2007-01-22 2007-01-22 一种基于文件系统缓存的自适应预读取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2007100024487A CN101231637A (zh) 2007-01-22 2007-01-22 一种基于文件系统缓存的自适应预读取方法

Publications (1)

Publication Number Publication Date
CN101231637A true CN101231637A (zh) 2008-07-30

Family

ID=39898121

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2007100024487A Pending CN101231637A (zh) 2007-01-22 2007-01-22 一种基于文件系统缓存的自适应预读取方法

Country Status (1)

Country Link
CN (1) CN101231637A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101976182A (zh) * 2010-11-15 2011-02-16 记忆科技(深圳)有限公司 一种固态硬盘预读取的方法及其装置
CN102063386A (zh) * 2010-12-17 2011-05-18 曙光信息产业(北京)有限公司 一种单载体多目标的缓存系统的缓存管理方法
CN104715048A (zh) * 2015-03-26 2015-06-17 浪潮集团有限公司 一种文件系统缓存预读取方法
CN104778015A (zh) * 2015-02-04 2015-07-15 北京神州云科数据技术有限公司 一种磁盘阵列性能优化方法及系统
CN106681939A (zh) * 2017-01-03 2017-05-17 北京华胜信泰数据技术有限公司 磁盘页面的读取方法和装置
CN111309257A (zh) * 2020-02-10 2020-06-19 西安奥卡云数据科技有限公司 恒定速率读文件的预读方法、装置及计算机可读存储介质

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101976182A (zh) * 2010-11-15 2011-02-16 记忆科技(深圳)有限公司 一种固态硬盘预读取的方法及其装置
CN102063386A (zh) * 2010-12-17 2011-05-18 曙光信息产业(北京)有限公司 一种单载体多目标的缓存系统的缓存管理方法
CN102063386B (zh) * 2010-12-17 2014-07-23 曙光信息产业(北京)有限公司 一种单载体多目标的缓存系统的缓存管理方法
CN104778015A (zh) * 2015-02-04 2015-07-15 北京神州云科数据技术有限公司 一种磁盘阵列性能优化方法及系统
CN104778015B (zh) * 2015-02-04 2018-02-16 深圳神州数码云科数据技术有限公司 一种磁盘阵列性能优化方法及系统
CN104715048A (zh) * 2015-03-26 2015-06-17 浪潮集团有限公司 一种文件系统缓存预读取方法
CN104715048B (zh) * 2015-03-26 2018-06-05 浪潮集团有限公司 一种文件系统缓存预读取方法
CN106681939A (zh) * 2017-01-03 2017-05-17 北京华胜信泰数据技术有限公司 磁盘页面的读取方法和装置
CN106681939B (zh) * 2017-01-03 2019-08-23 北京华胜信泰数据技术有限公司 磁盘页面的读取方法和装置
CN111309257A (zh) * 2020-02-10 2020-06-19 西安奥卡云数据科技有限公司 恒定速率读文件的预读方法、装置及计算机可读存储介质

Similar Documents

Publication Publication Date Title
KR101894625B1 (ko) 데이터 저장 시스템들에 대한 우선순위 기반 가비지 수집
CN106909515B (zh) 面向混合主存的多核共享末级缓存管理方法及装置
CN108762664B (zh) 一种固态硬盘页级缓存区管理方法
CN108255419A (zh) 一种用于tlc类型ssd的磨损均衡方法及ssd
CN107391398B (zh) 一种闪存缓存区的管理方法及系统
CN108108128A (zh) 一种混合ssd的磨损均衡方法及ssd
CN103514110B (zh) 非易失性存储设备的缓存管理方法及装置
CN108845957B (zh) 一种置换和回写自适应的缓冲区管理方法
CN103257935A (zh) 一种缓存管理方法及其应用
CN101231637A (zh) 一种基于文件系统缓存的自适应预读取方法
CN106874213B (zh) 一种融合多种机器学习算法的固态硬盘热数据识别方法
CN109783020A (zh) 一种基于ssd-smr混合键值存储系统的垃圾回收方法
CN110413537B (zh) 一种面向混合固态硬盘的闪存转换层及转换方法
CN105389135B (zh) 一种固态盘内部缓存管理方法
CN101373445B (zh) 一种内存调度方法及装置
CN107423229B (zh) 一种面向页级ftl的缓冲区改进方法
CN106294197B (zh) 一种面向nand闪存的页面置换方法
CN102981963A (zh) 一种固态盘的闪存转换层的实现方法
CN108762671A (zh) 基于pcm和dram的混合内存系统及其管理方法
CN107943719A (zh) 一种基于请求分类的闪存转换层控制方法
CN110262982A (zh) 一种固态硬盘地址映射的方法
CN110413224A (zh) 数据存储方法、装置及存储器
CN112506445B (zh) 一种同质混合固态硬盘的分区比例自适应调整方法
CN107590084A (zh) 一种基于分类策略的页级缓冲区改进方法
CN111352593B (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
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Open date: 20080730