专利名称:一种基于连续度聚类和时间序列的i/o区域预取方法
技术领域:
本发明涉及存储领域,具体是指一种基于连续度聚类和时间序列的I/O区域预取方法。
背景技术:
虽然并行I/O系统(磁盘阵列)可以较大的提高存储系统的性能,但由于磁盘的固有缺陷(较长时间的寻道延迟和旋转延迟),它们之间依然存在着较大的性能差距。缓存作为一个基本的实现技术能够很好的弥补它们之间的性能差距,但单纯的增加缓存的容量已不是一个有效的解决问题的方法,预取技术则是通过预测将来的数据请求,将存储设备中的数据块在使用之前取到缓存中,使请求总能够在缓存中命中以减少CPU的停顿时间,并且通过预测缓存缺失、重叠I/O技术来消除对磁盘或通道的争用,降低磁盘存取的延迟,从而提高系统的性能。同时存储系统中数据的访问存在较强的相关性,如访问某个文件时,必然会访问这个文件的目录。系统可以利用数据访问的相关性改进预取精度,减少缓存污染和通道拥塞。但在现有的文件系统中,处于设备层的存储系统并不知道任何I/O访问的语义信息,因此不能充分利用I/O访问的语义来预取下一时刻要访问的数据,只能利用较简单的方式如I/O访问的局部性、顺序访问和循环访问等特性来实现简单的预测。同时我们知道在I/O密集的应用中,I/O访问存在着突发性的特征,可以在I/O访问较少的时刻(系统空闲时刻)一次性的预取下一个读请求密集时刻所有的数据来改善系统的性能,现有存储系统中大容量缓存也使得这种方法成为可能。因此如何利用原有信息来预测下一时刻读请求密集区域是需要解决的问题。
发明内容本发明的目的在于提供一种基于连续度聚类和时间序列的I/O区域预取方法,使用该方法可改善存储子系统的I/O性能,实用且高效的发现密集读请求访问的区域并进行准确的预取,进而提高存储系统的性能。
本发明提供的一种基于连续度聚类和时间序列的I/O区域预取方法,其步骤包括(1)在I/O请求密集时刻,将I/O流中的读请求根据物理块地址排序,形成一个对象链表;(2)将所有物理地址相连或重叠的对象合并成一个对象,其长度为各对象长度之和,按下述规则计算出所有对象的连续度设对象p的长度为1,若其左侧或右侧无相连的对象,则设其连续度Sio(p)=a1;若其左侧或右侧有一个相连的对象,则设其连续度Sio(p)=a2;若两侧均有相连的对象,则设其连续度Sio(p)=a3,其中,a3>a2>a1(3)标记连续度大于阀值Ho的对象作为核心对象,其中,阀值Ho按照公式(1)计算,其中k为对象的数量Ho≥Σi=1kSio(pi)k,i=1,Λ,k---(1)]]>(4)按照下述规则查找与每个核心对象可达或相连的所有对象,将其构造成簇(A1)以核心对象o为中心,左右两侧距离d为半径的区域称为o的d-邻域;如果D是对象集合,p∈D,o∈D,若o是核心对象,p在o的d-邻域内,则称p是从o出发关于d直接可达;(A2)若存在一个对象链p1,p2,…,pn;pi∈D,1≤i≤n-1,n为对象链中对象的个数,pi+1是从pi出发,关于d直接可达,则pn是从p1出发关于d可达;(A3)在对象集合D中,o∈D,p∈D,q∈D,若存在p和q都是从o出发,关于d的可达,则称p、q是关于d的相连;(A4)将满足下面条件的所有对象构造成簇
(I)p,q如果p∈C且q是从p出发关于d的可达,则q ∈ C;(II)p,q ∈ Cp、q是关于d的相连,则p∈C;(5)从形成的各簇中选择出连续度大于等于簇阈值Hc的簇,形成有效结果簇,其中簇阈值Hc按照公式(2)计算Hc=12[a3l-2(a3-a2)]---(2)]]>其中l为簇所占空间长度;(6)重复步骤(1)至(5),直至获取多个时间段的多个有效结果簇;否则转入步骤(7);(7)从有效结果簇中获取访问区域信息,并以多个密集I/O访问的时间构成访问时间信息,分别形成读请求区域的时间序列和访问时间的时间序列Tc(t),有效结果簇的中心点和簇半径构成访问区域,设有效结果簇的中心点值为PBA(t),对应有效结果簇的簇半径为R(t);(8)判断访问区域信息和访问时间信息是否满足ARMA时间序列是零均值的平稳时间序列,如果是,进入步骤(10),否则进入步骤(9);(9)对非平稳的序列进行平稳化处理;(10)将平稳的时间序列构造出ARMA时间序列预测模型,即PBA(t)-φ1PBA(t-1)-Λ-φkPBA(t-p)=at-θ1at-1-Λ-θqat-q(5)R(t)-φ1R(t-1)-Λ-φkR(t-p)=at-θ1at-1-Λ-θqat-q(6)Tc(t)-φ1Tc(t-1)-Λ-φkTc(t-p)=at-θ1at-1-Λ-θqat-q(7)其中,φk、θq为待定系数,at为误差系数;(11)将最近I/O请求密集时刻及以前多个I/O请求密集时刻所获取的PBA(t)、R(t)和Tc(t)值带入公式(5)、(6)和(7)中,预测下一I/O请求密集时刻预取区域和预取时间值;(12)对预测的数据进行还原处理,形成还原后的预取时间的预测值和预取区域信息的预测值;(13)判断系统是否是空闲,如果空闲,进行预取,然后进入步骤(14),否则重复步骤(13);
(14)将预取的数据与实际的读访问数据对比,若二者的误差超过所规定的门限值时,进入步骤(10),重新构造预测模型,否则进入步骤(15);(15)重复步骤(1)-(15),直到系统工作结束。
本发明从两个方面入手一是采用基于连续度的聚类算法,它能高效、可靠的发现密集读请求的区域;其次是利用ARMA(Auto-Regressive andMoving Average)时间序列模型来预测未来密集读请求可能访问的区域和访问时刻。在同一测试环境下,对采用本发明方法的存储系统和现有的RAID系统进行了对比测试,在利用3个磁盘卷的负载测试表明本发明提出的基于连续度的聚类算法能正确的聚类读请求;同时基于AMRA时间序列的预测模型的动态预测算法的准确预取密集I/O区域。总之,本发明提出的一种基于连续度聚类和时间序列的I/O区域预取方法能实用且高效的发现密集读请求访问的区域,并准确的预取密集读请求可能访问的区域,较大的提高存储系统性能。
图1为本发明方法的流程图;图2为季节性差分判断示意图;图3为聚类结果示意图;图4为预取命中率示意图。
具体实施方式本发明是根据I/O请求具有局部性的特征,在系统空闲时刻预测密集I/O访问的区域,并对预测的区域进行预取。
如图1所示,本发明方法的步骤包括(一)利用本发明所定义的基于连续度的聚类算法,对存储系统的I/O进行分析,发现密集读请求的区域。为便于描述,将读请求称之为对象。其具体过程为(1)在I/O请求密集时刻,将I/O流中的读请求根据物理块地址排序,形成一个对象链表。
(2)将所有物理地址相连或重叠的对象合并成一个对象,其长度为各对象长度之和,按下述规则计算出所有对象的连续度连续度sio(p)表示对象的连续程度,与其长度成正比。对一个对象p来说,若它的长度为1,其左侧或右侧无相连的对象,连续度为a1其左侧或右侧有一个相连的对象,连续度为a2;两侧均有相连的对象,连续度为a3,a3>a2>a1。对象处于a3状态,其存储效率最好;请求处于a1状态,其存储效率最差。因此根据上面的设定,若一个对象的长度为l’且l’>1,它的连续度为a3l′-2(a3-a2)。
(3)标记连续度大于阀值Ho的对象作为核心对象。
如果一个对象的连续度大于或等于阀值Ho,这个对象称作核心对象。核心对象阀值Ho的取值是以I/O请求密集时刻中对象的平均连续度为标准,即Ho≥Σi=1kSio(pi)k,i=1,Λ,k---(1)]]>其中k为对象的数量。
(4)找到与每个核心对象可达或相连的所有对象构造成簇(A1)以核心对象o为中心,左右两侧距离d为半径的区域称为o的d-邻域,d的取值通常为核心对象长度的一半。如果D是对象集合,p∈D,o∈D,若o是核心对象,p在o的d-邻域内,则称p是从o出发关于d直接可达。邻域内对象的连续度之和称作o在d-邻域内的连续度。
(A2)若存在一个对象链p1,p2,…pn;pi∈D(1≤i≤n-1),n为对象链中对象的个数,;pi+1是从pi出发,关于d直接可达,则pn是从p1出发关于d可达。
(A3)在对象集合D中,o∈D,p∈D,q∈D,若存在p和q都是从o出发,关于d的可达,则称p、q是关于d的相连。
(A4)满足下面条件的所有对象构造成簇。
(I)p,q如果p∈C且q是从p出发关于d的可达,则q∈C。
(II)p,q ∈ Cp、q是关于d的相连,则p∈C。
(5)从形成的各簇中选择出连续度大于等于阈值Hc的簇,形成有效结果簇。簇阈值Hc设为Hc=12[a3l-2(a3-a2)]---(2)]]>其中l为簇所占空间长度。
(6)如果是首次运行,重复步骤(1)至(5),直至获取多个时间段的多个有效结果簇;否则转入步骤(7)。有效结果簇的数量根据下面的预测模型的需要来确定,本发明所确定的数量一般为10-15个。
(二)在获得了多个密集I/O访问时间段所形成的多个有效结果簇后,采用ARMA时间序列预测模型预测出下一密集I/O访问时刻要访问的I/O区域并一次性的将其预取。
采用ARMA时间序列预测模型进行预测的具体过程为(7)从有效结果簇中获取访问区域信息,并以多个密集I/O访问的时间构成访问时间信息,分别形成读请求区域的时间序列和访问时间的时间序列Tc(t)。其中PBA(t)代表不同时间段的有效结果簇的中心点值,R(t)是对应有效结果簇的簇半径,有效结果簇的中心点和簇半径构成了访问区域。
(8)判断访问区域信息和访问时间信息是否满足ARMA时间序列是零均值的平稳时间序列,如果是,进入步骤(10),否则进入步骤(9)。
判断标准是看序列的自相关函数和偏相关函数的衰减是否缓慢,即p=1JΣk=0J|Pk|-|Pk+1||Pk|---(3)]]>其中Pk表示序列的自相关函数值,J表示最后一个超过自信区间的自相关函数值的序号。当变化率小于15%时,认为这个时间序列是非平稳的。
(9)对非平稳的序列进行平稳化处理即对非平稳的序列进行差分或零均值化处理,直到形成平稳序列。
根据等式(4)计算差分的阶数dada=[1gΣn=1NX(n)2/21gN]---(4)]]>
其中X(n)表示序列的多个样本。如果经过差分后的时间序列的自相关函数值仍有部分超过自信区间,那么我们认为这个序列具有季节性。
为了发现序列的季节性的特征,本发明采用的差分方法。如图2所示,将自相关函数中超过自信区间的值所对应的滞后系数组成一个时间序列,然后对这个序列进行一阶差分,如发现某个值在差分后的序列中出现频率超过门限值(一般为50%),那么我们就可以认为这个值为季节周期数。如果在一阶差分后没有发现其季节性特征,则采用两阶差分并以此类推,直到发现其季节性特征值。
(10)将平稳的时间序列构造出ARMA时间序列预测模型,即PBA(t)-φ1PBA(t-1)-Λ-φkPBA(t-p)=at-θ1at-1-Λ-θqat-q(5)R(t)-φ1R(t-1)-Λ-φkR(t-p)=at-θ1at-1-Λ-θqat-q(6)Tc(t)-φ1Tc(t-1)-Λ-φkTc(t-p)=at-θ1αt-1-Λ-θqat-q(7)通过常规的ARMA时间序列参数评估方法就可获取待定系数φk、θq和误差系数at。
(11)将最近I/O请求密集时刻及以前多个I/O请求密集时刻所获取的PBA(t)、R(t)和Tc(t)值带入公式(5)、(6)和(7)中,则可以预测出下一I/O读请求密集时刻预取区域和预取时间值。
(12)对预测的数据进行还原处理,形成还原后的预取时间的预测值和预取区域信息的预测值如果原有数据进行了差分,那么预测的数据需要加上被差分的数据;若原数据序列进行了零均值化处理,预测的数据需要加上原有数据的均值。
如果在建立ARMA模型前对数据进行平稳化处理,而获得的预测数据也是针对平稳化处理后的数据,因此要获得真正的实际预测数据,需要对预测的数据进行还原。
(13)判断系统是否是空闲,如果空闲,进行预取,然后进入步骤(14),否则重复步骤(13)。
经过数据还原后形成预取时间和预取区域信息,由预取时间控制何时进行预取,预取时刻必须是在系统空闲时刻,判断实际的预取时间的步骤为(B1)假定某个I/O请求为最后一个密集I/O请求,且在
时间内无I/O请求,则认为系统现处于空闲时刻,利用公式(8)计算σ的取值;10≤σ≤Hn‾-σH-tp‾-mtt‾Tio‾---(8)]]>其中Hn‾=Σi=1nHina---(9)]]>其中na为最近10个聚类区域的时间间隔,Hi为各聚类区域时间间隔,平均时间间隔为
,σH为平均时间间隔的均方差,平均密集I/O时间间隔为
磁盘或阵列的平均定位延迟为
(包括旋转延迟加上寻道延迟),传输一个数据块的时间为
,m为预取的数据块数量。
(B2)设t1、t2分别为是预取的最早时刻和最后时刻,则t1=10Tio,t2=Hn‾-σH-tp‾-mtt‾,]]>预测的预取时刻为Tc,实际预取时刻为Tp;按照下述方法得到预取时刻Tp,在Tp时刻进行预取(I)如果t2≥Tc≥t1,则Tp=Tc。
(II)如果Tc≤t1,则Tp=t1。
(III)如果Tc≥t2,则Tp=t2。
(14)将预取的数据与实际的读访问数据对比,若二者的误差超过所规定的门限值时(如50%),进入步骤(10),重新构造预测模型,否则进入步骤(15)。
(15)重复步骤(1)-(14),直到系统工作结束。
实例在本项发明的测试中,利用HP公司一段trace文件,它记录的是典型的办公环境下客户端访问服务器的3个磁盘卷(卷号为21、23和35)情况,时间跨度为191.12小时,有230370个请求数。对a1、a2和a3,本发明采用模糊定量的方法,将其赋值分别为1、2和3。
图3显示的是卷21时间跨度为191.12小时的I/O请求点和卷聚内中心结果。从图中可以看出,通过基于连续度的算法得到的是5个有效簇,即C0-C4。在整个监测过程中,实际聚类的请求数为45523,占整个过程请求数的91.16%。
图4则反映的是整个测试过程中聚类区域预取命中率过程。可以看出,其预取命中率是一个不断调整的过程。在预取1089个聚类区域时,产生了316次调节,占总预测次数的29.02%,其比率还是比较低的。在整个测试中,预取了145548个请求,占总请求数的95.37%。其平均命中率为61.12%。
权利要求
1.一种基于连续度聚类和时间序列的I/O区域预取方法,其步骤包括(1)在I/O请求密集时刻,将I/O流中的读请求根据物理块地址排序,形成一个对象链表;(2)将所有物理地址相连或重叠的对象合并成一个对象,其长度为各对象长度之和,按下述规则计算出所有对象的连续度设对象p的长度为1,若其左侧或右侧无相连的对象,则设其连续度Sio(p)=a1;若其左侧或右侧有一个相连的对象,则设其连续度Sio(p)=a2;若两侧均有相连的对象,则设其连续度Sio(p)=a3,其中,a3>a2>a1;(3)标记连续度大于阀值Ho的对象作为核心对象,其中,阀值Ho按照公式(1)计算,其中k为对象的数量Ho≥Σi=1kSio(pi)k,i=1,Λ,k---(1)]]>(4)按照下述规则查找与每个核心对象可达或相连的所有对象,将其构造成簇(A1)以核心对象o为中心,左右两侧距离d为半径的区域称为o的d-邻域;如果D是对象集合,p∈D,o∈D,若o是核心对象,p在o的d-邻域内,则称p是从o出发关于d直接可达;(A2)若存在一个对象链p1,p2,...,pn;pi∈D,1≤i≤n-1,n为对象链中对象的个数,pi+1是从pi出发,关于d直接可达,则pn是从p1出发关于d可达;(A3)在对象集合D中,o∈D,p∈D,q∈D,若存在p和q都是从o出发,关于d的可达,则称p、q是关于d的相连;(A4)将满足下面条件的所有对象构造成簇(I)p,q如果p∈C且q是从p出发关于d的可达,则q∈C;(II)p,q∈Cp、q是关于d的相连,则p∈C;(5)从形成的各簇中选择出连续度大于等于簇阈值Hc的簇,形成有效结果簇,其中簇阈值Hc按照公式(2)计算Hc=12[a3l-2(a3-a2)]---(2)]]>其中l为簇所占空间长度;(6)重复步骤(1)至(5),直至获取多个时间段的多个有效结果簇;否则转入步骤(7);(7)从有效结果簇中获取访问区域信息,并以多个密集I/O访问的时间构成访问时间信息,分别形成读请求区域的时间序列和访问时间的时间序列Tc(t),有效结果簇的中心点和簇半径构成访问区域,设有效结果簇的中心点值为PBA(t),对应有效结果簇的簇半径为R(t);(8)判断访问区域信息和访问时间信息是否满足ARMA时间序列是零均值的平稳时间序列,如果是,进入步骤(10),否则进入步骤(9);(9)对非平稳的序列进行平稳化处理;(10)将平稳的时间序列构造出ARMA时间序列预测模型,即PBA(t)-φ1PBA(t-1)-Λ-φkPBA(t-p)=at-θ1at-1-Λ-θqat-q(5)R(t)-φ1R(t-1)-Λ-φkR(t-p)=at-θ1at-1-Λ-θqat-q(6)Tc(t)-φ1Tc(t-1)-Λ-φkTc(t-p)=at-θ1at-1-Λ-θqat-q(7)其中,φk、θq为待定系数,at为误差系数;(11)将最近I/O请求密集时刻及以前多个I/O请求密集时刻所获取的PBA(t)、R(t)和Tc(t)值带入公式(5)、(6)和(7)中,预测下一I/O请求密集时刻预取区域和预取时间值;(12)对预测的数据进行还原处理,形成还原后的预取时间的预测值和预取区域信息的预测值;(13)判断系统是否是空闲,如果空闲,进行预取,然后进入步骤(14),否则重复步骤(13);(14)将预取的数据与实际的读访问数据对比,若二者的误差超过所规定的门限值时,进入步骤(10),重新构造预测模型,否则进入步骤(15);(15)重复步骤(1)-(15),直到系统工作结束。
2.根据权利要求
1所述的方法,其特征在于步骤(4)中,d为核心对象长度的一半。
3.根据权利要求
1所述的方法,其特征在于步骤(13)按照下述过程判断预取时间(B1)假定某个I/O请求为最后一个密集I/O请求,且在
时间内无I/O请求,则认为系统现处于空闲时刻,利用公式(8)计算σ的取值;10≤σ≤Hn‾-σH-tp‾-mtt‾Tio‾---(8)]]>其中Hn‾=Σi=1nHina---(9)]]>其中na为最近10个聚类区域的时间间隔,Hi为各聚类区域时间间隔,平均时间间隔为
σH为平均时间间隔的均方差,平均密集I/O时间间隔为
磁盘或阵列的平均定位延迟为
传输一个数据块的时间为
m为预取的数据块数量;(B2)设t1、t2分别为是预取的最早时刻和最后时刻,则t1=10Tio,t2=Hn‾-σH-tp‾-mtt‾,]]>预测的预取时刻为Tc,实际预取时刻为Tp;按照下述方法得到预取时刻Tp,在Tp时刻进行预取(I)如果t2≥Tc≥t1,则Tp=Tc;(II)如果Tc≤t1,则Tp=t1;(III)如果Tc≥t2,则Tp=t2。
专利摘要
本发明公开了一种基于连续度聚类和时间序列的I/O区域预取方法。本发明根据I/O请求具有局部性的特征,在系统空闲时刻预测密集I/O访问的区域,并对预测的区域进行预取。它采用基于连续度的聚类算法,能高效、可靠的发现密集读请求的区域;其次是利用ARMA时间序列模型来预测未来密集读请求可能访问的区域和访问时刻。在同一测试环境下,对采用本发明储系统和现有的RAID系统进行了对比测试,在利用3个磁盘卷的负载测试表明本发明聚类算法能正确的聚类读请求;同时基于AMRA时间序列的预测模型的动态预测算法的准确预取密集I/O区域。本发明能实用且高效的发现密集读请求访问的区域,并准确的预取密集读请求可能访问的区域,较大的提高存储系统性能。
文档编号G06F17/30GK1996226SQ200610166535
公开日2007年7月11日 申请日期2006年12月28日
发明者谢长生, 李怀阳, 刘艳, 黄建忠, 蔡斌 申请人:华中科技大学导出引文BiBTeX, EndNote, RefMan