发明名称 一种基于连续度聚类和时间序列的I/O区域预取方法
摘要 本发明公开了一种基于连续度聚类和时间序列的I/O区域预取方法。本发明根据I/O请求具有局部性的特征,在系统空闲时刻预测密集I/O访问的区域,并对预测的区域进行预取。它采用基于连续度的聚类算法,能高效、可靠的发现密集读请求的区域;其次是利用ARMA时间序列模型来预测未来密集读请求可能访问的区域和访问时刻。在同一测试环境下,对采用本发明储系统和现有的RAID系统进行了对比测试,在利用3个磁盘卷的负载测试表明:本发明聚类算法能正确的聚类读请求;同时基于AMRA时间序列的预测模型的动态预测算法的准确预取密集I/O区域。本发明能实用且高效的发现密集读请求访问的区域,并准确的预取密集读请求可能访问的区域,较大的提高存储系统性能。
申请公布号 CN100573437C 申请公布日期 2009.12.23
申请号 CN200610166535.1 申请日期 2006.12.28
申请人 华中科技大学 发明人 谢长生;李怀阳;刘艳;黄建忠;蔡斌
分类号 G06F3/06(2006.01)I;G06F17/30(2006.01)I 主分类号 G06F3/06(2006.01)I
代理机构 华中科技大学专利中心 代理人 曹葆青
主权项 1、一种基于连续度聚类和时间序列的I/O区域预取方法,其步骤包括:(1)在I/O请求密集时刻,将I/O流中的读请求根据物理块地址排序,形成一个对象链表;(2)将所有物理地址相连或重叠的对象合并成一个对象,其长度为各对象长度之和,按下述规则计算出所有对象的连续度:设对象p的长度为1,若其左侧或右侧无相连的对象,则设其连续度S<sub>io</sub>(p)=a<sub>1</sub>;若其左侧或右侧有一个相连的对象,则设其连续度S<sub>io</sub>(p)=a<sub>2</sub>;若两侧均有相连的对象,则设其连续度S<sub>io</sub>(p)=a<sub>3</sub>,其中,a<sub>3</sub>>a<sub>2</sub>>a<sub>1</sub>;(3)标记连续度大于阀值H<sub>o</sub>的对象作为核心对象,其中,阀值H<sub>o</sub>按照公式(1)计算,其中k为对象的数量:<maths num="0001"><![CDATA[<math><mrow><msub><mi>H</mi><mi>o</mi></msub><mo>&GreaterEqual;</mo><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></munderover><msub><mi>S</mi><mi>io</mi></msub><mrow><mo>(</mo><msub><mi>p</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow><mi>k</mi></mfrac><mo>,</mo><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><mi>k</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></math>]]></maths>(4)按照下述规则查找与每个核心对象可达或相连的所有对象,将其构造成簇:(A1)以核心对象o为中心,左右两侧距离d为半径的区域称为o的d-邻域;如果D是对象集合,p∈D,o∈D,若o是核心对象,p在o的d-邻域内,则称p是从o出发关于d直接可达;(A2)若存在一个对象链p<sub>1</sub>,p<sub>2</sub>,...,p<sub>n</sub>;p<sub>i</sub>∈D,1≤i≤n-1,n为对象链中对象的个数,p<sub>i+1</sub>是从p<sub>i</sub>出发,关于d直接可达,则p<sub>n</sub>是从p<sub>1</sub>出发关于d可达;(A3)在对象集合D中,o∈D,p∈D,q∈D,若存在p和q都是从o出发,关于d的可达,则称p、q是关于d的相连;(A4)将满足下面条件的所有对象构造成簇C:(I)<img file="C2006101665350002C2.GIF" wi="112" he="39" />如果p∈C且q是从p出发关于d的可达,则q∈C;(II)<maths num="0002"><![CDATA[<math><mrow><mo>&ForAll;</mo><mi>p</mi><mo>,</mo><mi>q</mi><mo>&Element;</mo><mi>C</mi><mo>:</mo></mrow></math>]]></maths>p、q是关于d的相连,则p∈C;(5)从形成的各簇中选择出连续度大于等于簇C阈值H<sub>c</sub>的簇,形成有效结果簇,其中簇C阈值H<sub>c</sub>按照公式(2)计算:<maths num="0003"><![CDATA[<math><mrow><msub><mi>H</mi><mi>c</mi></msub><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>[</mo><msub><mi>a</mi><mn>3</mn></msub><mi>l</mi><mo>-</mo><mn>2</mn><mrow><mo>(</mo><msub><mi>a</mi><mn>3</mn></msub><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo></mrow><mo>]</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中l为簇所占空间长度;(6)如果是首次运行,重复步骤(1)至(5),直至获取多个时间段的多个有效结果簇;否则转入步骤(7);(7)从有效结果簇中获取访问区域信息,并以多个密集I/O访问的时间构成访问时间信息,分别形成读请求区域的时间序列和访问时间的时间序列T<sub>c(t)</sub>,有效结果簇的中心点和簇半径构成访问区域,设有效结果簇的中心点值为P<sub>BA(t)</sub>,对应有效结果簇的簇半径为R<sub>(t)</sub>;(8)判断访问区域信息和访问时间信息是否满足ARMA时间序列是零均值的平稳时间序列,如果是,进入步骤(10),否则进入步骤(9);(9)对非平稳的序列进行平稳化处理;(10)将平稳的时间序列构造出ARMA时间序列预测模型,即P<sub>BA(t)</sub>-φ<sub>1</sub>P<sub>BA(t-1)</sub>-…-φ<sub>k</sub>P<sub>BA(t-p)</sub>=a<sub>t</sub>-θ<sub>1</sub>a<sub>t-1</sub>-…-θ<sub>q</sub>a<sup>t-q</sup>    (5)R<sub>(t)</sub>-φ<sub>1</sub>R<sub>(t-1)</sub>-…-φ<sub>k</sub>R<sub>(t-p)</sub>=a<sub>t</sub>-θ<sub>1</sub>a<sub>t-1</sub>-…-θ<sub>q</sub>a<sub>t-q</sub>          (6)T<sub>c(t)</sub>-φ<sub>1</sub>T<sub>c(t-1)</sub>-…-φ<sub>k</sub>T<sub>c(t-p)</sub>=a<sub>t</sub>-θ<sub>1</sub>a<sub>t-1</sub>-…-θ<sub>q</sub>a<sub>t-q</sub>       (7)其中,φ<sub>k</sub>、θ<sub>q</sub>为待定系数,a<sub>t</sub>为误差系数;(11)将最近I/O请求密集时刻及以前多个I/O请求密集时刻所获取的P<sub>BA(t)</sub>、R<sub>(t)</sub>和T<sub>c(t)</sub>值带入公式(5)、(6)和(7)中,预测下一I/O请求密集时刻预取区域和预取时间值;(12)对预测的数据进行还原处理,形成还原后的预取时间的预测值和预取区域信息的预测值;(13)判断系统是否是空闲,如果系统空闲且符合下述预取时间,则进行预取,然后进入步骤(14),否则重复步骤(13);按照下述过程判断预取时间:(B1)假定某个I/O请求为最后一个密集I/O请求,且在σT<sub>io</sub>时间内无I/O请求,则认为系统现处于空闲时刻,利用公式(8)计算σ的取值;<maths num="0004"><![CDATA[<math><mrow><mn>10</mn><mo>&le;</mo><mi>&sigma;</mi><mo>&le;</mo><mfrac><mrow><mover><msub><mi>H</mi><mi>n</mi></msub><mo>&OverBar;</mo></mover><mo>-</mo><msub><mi>&sigma;</mi><mi>H</mi></msub><mo>-</mo><mover><msub><mi>t</mi><mi>p</mi></msub><mo>&OverBar;</mo></mover><mo>-</mo><mi>m</mi><mover><msub><mi>t</mi><mi>t</mi></msub><mo>&OverBar;</mo></mover></mrow><mover><msub><mi>T</mi><mi>io</mi></msub><mo>&OverBar;</mo></mover></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>8</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中:<maths num="0005"><![CDATA[<math><mrow><mover><msub><mi>H</mi><mi>n</mi></msub><mo>&OverBar;</mo></mover><mo>=</mo><mfrac><mrow><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>H</mi><mi>i</mi></msub></mrow><msub><mi>n</mi><mi>a</mi></msub></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>9</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中n<sub>a</sub>为最近10个聚类区域的时间间隔,H<sub>i</sub>为各聚类区域时间间隔,平均时间间隔为H<sub>n</sub>,σ<sub>H</sub>为平均时间间隔的均方差,平均密集I/O时间间隔为T<sub>io</sub>,磁盘或阵列的平均定位延迟为t<sub>p</sub>,传输一个数据块的时间为t<sub>t</sub>,m为预取的数据块数量;(B2)设t<sub>1</sub>、t<sub>2</sub>分别为是预取的最早时刻和最后时刻,则t<sub>1</sub>=10T<sub>io</sub>,t<sub>2</sub>=H<sub>n</sub>-σ<sub>H</sub>-t<sub>p</sub>-mt<sub>t</sub>,预测的预取时刻为T<sub>c</sub>,实际预取时刻为T<sub>p</sub>;按照下述方法得到预取时刻T<sub>p</sub>,在T<sub>p</sub>时刻进行预取:(I)如果t<sub>2</sub>≥T<sub>c</sub>≥t<sub>1</sub>,则T<sub>p</sub>=T<sub>c</sub>;(II)如果T<sub>c</sub>≤t<sub>1</sub>,则T<sub>p</sub>=t<sub>1</sub>;(III)如果T<sub>c</sub>≥t<sub>2</sub>,则T<sub>p</sub>=t<sub>2</sub>;(14)将预取的数据与实际的读访问数据对比,若二者的误差超过所规定的门限值时,进入步骤(10),重新构造预测模型,否则进入步骤(15);(15)重复步骤(1)-(15),直到系统工作结束。
地址 430074湖北省武汉市洪山区珞喻路1037号