本發(fā)明涉及存儲(chǔ)領(lǐng)域,具體涉及一種數(shù)據(jù)讀取方法、raid控制器及存儲(chǔ)設(shè)備。
背景技術(shù):
隨著固態(tài)硬盤(pán)(solidstatedrives,ssd)技術(shù)的飛速發(fā)展,ssd的存儲(chǔ)容量越來(lái)越大且讀寫(xiě)速度越來(lái)越快,應(yīng)用范圍越來(lái)越廣泛。但是ssd在隨著顆粒的擦寫(xiě)次數(shù)的增加,尤其是閃存芯片nandflash在快達(dá)到其磨損值的上限的時(shí)候,少量的輸入輸出(inputoutput,io)要經(jīng)過(guò)多次讀重試或是采用ssd內(nèi)的其它處理措施才能讀出正確的數(shù)據(jù),此時(shí)讀io的時(shí)延會(huì)比正常的讀io大很多,此外隨著顆粒擦寫(xiě)次數(shù)的增加,ssd整體的性能會(huì)逐步地變差,此外,由于ssd的單盤(pán)的4kb隨機(jī)讀的速率很高。
磁盤(pán)陣列(redundantarraysofinexpensivedisks,raid)磁盤(pán)陣列是由至少兩個(gè)磁盤(pán)組合成一個(gè)具有大容量的磁盤(pán)組,利用多個(gè)硬盤(pán)提供的數(shù)據(jù)讀寫(xiě)加成效果提升整個(gè)硬盤(pán)系統(tǒng)效能,所述磁盤(pán)陣列中的磁盤(pán)可以是機(jī)械硬盤(pán),也可以是ssd。
不論是ssd組成的raid還是機(jī)械硬盤(pán)組成的raid,都會(huì)存在慢io的情況,該慢io是針對(duì)讀io來(lái)說(shuō)的,即若針對(duì)io請(qǐng)求設(shè)定一個(gè)返回的時(shí)延閾值,超過(guò)該時(shí)延閾值才返回的io視為慢io,以現(xiàn)有機(jī)械硬盤(pán)組成的raid為例,解決慢io的方式為在磁盤(pán)系統(tǒng)中對(duì)于非慢io采用正常讀取的方式,對(duì)于慢io則是采用降級(jí)讀的方式,即若為磁盤(pán)陣列,在一些磁盤(pán)陣列的模式中,對(duì)于同一數(shù)據(jù)會(huì)在磁盤(pán)陣列中的兩個(gè)磁盤(pán)上同時(shí)存儲(chǔ),降級(jí)讀則是不在慢io指示的磁盤(pán)中讀取慢io所請(qǐng)求的數(shù)據(jù),而是從另外一個(gè)存儲(chǔ)有與慢io指示的磁盤(pán)同樣數(shù)據(jù)的磁盤(pán)上讀取慢io所請(qǐng)求的數(shù)據(jù)?,F(xiàn)有技術(shù)的磁盤(pán)陣列系統(tǒng)中僅設(shè)置一個(gè)時(shí)閾延值,并且這個(gè)時(shí)延閾值一旦確定,在整個(gè)運(yùn)行過(guò)程中會(huì)一直保持不變。
然而,現(xiàn)有這種在運(yùn)行過(guò)程中時(shí)延值一直保持不變的方式,并不會(huì)考慮 其他影響因素,在讀寫(xiě)io的比例和io的大小分布的變化導(dǎo)致的io的時(shí)延分布的變化,這種變化通常導(dǎo)致io的時(shí)延值變化較大,因此,不論是機(jī)械硬盤(pán)構(gòu)成的磁盤(pán)陣列還是ssd構(gòu)成的磁盤(pán)陣列,固定的延時(shí)閾值并不能很好的對(duì)超時(shí)io進(jìn)行限制達(dá)到降低整體讀io時(shí)延的水平;此外,對(duì)于ssd構(gòu)成的磁盤(pán)陣列來(lái)說(shuō),由于時(shí)延值是固定的,在時(shí)延值固定的情況下,對(duì)一個(gè)慢io來(lái)說(shuō),慢io完成的時(shí)延值并不一定慢于該慢io降級(jí)讀完成的時(shí)延值,因此通過(guò)降級(jí)讀慢io減少系統(tǒng)的平均時(shí)延的效果并不總是存在;此外,ssd的4kb隨機(jī)讀的速率很高,而io請(qǐng)求一般也都是kb級(jí)別的大小,因此,在ssd構(gòu)成的磁盤(pán)陣列中,部分io的降級(jí)讀并不會(huì)對(duì)該磁盤(pán)陣列中的其他ssd的性能造成明顯的影響,因此,固定延時(shí)閾值的方式并不能很好的適用在由ssd組成的磁盤(pán)陣列中。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)讀取方法、raid控制器及存儲(chǔ)設(shè)備,能夠有效減小系統(tǒng)平均時(shí)延,提升采用本發(fā)明實(shí)施例的raid的服務(wù)質(zhì)量(quanlityofservice,qos),將ssd的raid性能最大限度的利用,從而提高raid的io性能
有鑒于此,本發(fā)明實(shí)施例第一方面提供一種數(shù)據(jù)讀取方法,可包括:
預(yù)先根據(jù)讀io請(qǐng)求的大小預(yù)先設(shè)置至少兩個(gè)區(qū)間,這些區(qū)間構(gòu)成區(qū)間集合,并且區(qū)間集合中的每個(gè)區(qū)間均對(duì)應(yīng)設(shè)置目標(biāo)時(shí)延閾值;該目標(biāo)時(shí)延閾值并非不變的,而是每隔預(yù)設(shè)的第一周期按照預(yù)設(shè)的閾值調(diào)整策略調(diào)整每個(gè)區(qū)間對(duì)應(yīng)的目標(biāo)時(shí)延閾值;在一個(gè)第一周期內(nèi),針對(duì)主機(jī)在這個(gè)周期內(nèi)下發(fā)的讀io請(qǐng)求,按照該讀io請(qǐng)求的大小確定其對(duì)應(yīng)的區(qū)間,并監(jiān)測(cè)所有讀io請(qǐng)求的返回時(shí)的時(shí)延值;當(dāng)確定讀io請(qǐng)求的時(shí)延值超出該讀io請(qǐng)求所屬區(qū)間對(duì)應(yīng)的目標(biāo)時(shí)延閾值時(shí),對(duì)超出該目標(biāo)時(shí)延閾值的讀io請(qǐng)求進(jìn)行降級(jí)讀操作。
可以看出,由于在主機(jī)一次下發(fā)的多個(gè)讀io請(qǐng)求中,大小近似的讀io請(qǐng)求具有近似的時(shí)延值,因此通過(guò)設(shè)置不同的區(qū)間對(duì)應(yīng)不同的大小的讀io請(qǐng)求,每一區(qū)間的讀io請(qǐng)求可采用相同的目標(biāo)時(shí)延閾值作為界定是否采用降級(jí) 讀操作的標(biāo)準(zhǔn);此外,又由于主機(jī)每一次下發(fā)讀io請(qǐng)求都不相同,例如,相鄰兩次下發(fā)的讀io請(qǐng)求即便大小近似,其時(shí)延值也不一定近似,導(dǎo)致用于前一次主機(jī)下發(fā)的讀io請(qǐng)求的目標(biāo)時(shí)延閾值在后一次中并能不能很好的對(duì)需要降級(jí)讀的讀io請(qǐng)求進(jìn)行區(qū)分,因此本發(fā)明實(shí)施例中采用每隔預(yù)設(shè)的第一周期便按照預(yù)設(shè)的閾值調(diào)整策略對(duì)目標(biāo)時(shí)延值進(jìn)行調(diào)整,以滿(mǎn)足下一第一周期對(duì)目標(biāo)時(shí)延值的需求,從而能夠使得目標(biāo)時(shí)延閾值能夠動(dòng)態(tài)的調(diào)整以配合讀io請(qǐng)求,進(jìn)而達(dá)到更加合理的界定需要降級(jí)讀的讀io請(qǐng)求,最終提高磁盤(pán)陣列的性能。
在一些實(shí)施例中,調(diào)整目標(biāo)時(shí)延閾值的方式是先對(duì)每個(gè)區(qū)間設(shè)置至少兩個(gè)時(shí)延閾值,每一第一周期的目標(biāo)時(shí)延閾值則通過(guò)預(yù)設(shè)的閾值調(diào)整策略從至少兩個(gè)時(shí)延閾值中選取。
在一些實(shí)施例中,調(diào)整目標(biāo)時(shí)延閾值的方式是先對(duì)每個(gè)區(qū)間設(shè)置僅一個(gè)時(shí)延閾值,每一第一周期的目標(biāo)時(shí)延閾值是通過(guò)閾值調(diào)整策略更新該時(shí)延閾值得到的,在整個(gè)運(yùn)行過(guò)程中,每個(gè)區(qū)間對(duì)應(yīng)的時(shí)延閾值僅有一個(gè)。
其中,上述兩種方式均能夠?qū)崿F(xiàn)目標(biāo)時(shí)延閾值的調(diào)整,使得每一第一周期的目標(biāo)時(shí)延閾值均為適合該第一周期的目標(biāo)時(shí)延閾值。
在一些實(shí)施例中,若采用每個(gè)區(qū)間設(shè)置至少兩個(gè)時(shí)延閾值時(shí),具體閾值調(diào)整策略可以是,首先計(jì)算當(dāng)前第一周期內(nèi)的主機(jī)下發(fā)的讀io請(qǐng)求的時(shí)延值的時(shí)延平均值,該時(shí)延平均值能反應(yīng)該第一周期內(nèi)的讀io請(qǐng)求的分部情況,該時(shí)延平均值是當(dāng)前第一周期內(nèi)的主機(jī)下發(fā)的所有區(qū)間的讀io請(qǐng)求計(jì)算平均值獲得,之后,根據(jù)該時(shí)延平均值為區(qū)間集合的每個(gè)區(qū)間從其對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值中選取目標(biāo)時(shí)延閾值。
在一些實(shí)施例中,具體的閾值調(diào)整策略是按照兩個(gè)相鄰第一周期的時(shí)延平均值的比較結(jié)果決定下一第一周期的目標(biāo)時(shí)延閾值;舉例來(lái)說(shuō),每個(gè)區(qū)間的至少兩個(gè)時(shí)延閾值是按照從小到大排列的,如某一區(qū)間的時(shí)延閾值t1至?xí)r延閾值tm為從小到大排列,m為大于1的整數(shù),即分為1到m共m個(gè)級(jí)別,此時(shí),區(qū)間集合中的其余區(qū)間均也包括m個(gè)級(jí)別的時(shí)延閾值,每次進(jìn)行目標(biāo)時(shí)延閾值調(diào)整時(shí),是針對(duì)區(qū)間集合內(nèi)的所有區(qū)間進(jìn)行的統(tǒng)一調(diào)整;如針對(duì)對(duì)應(yīng)時(shí)延閾值t1至?xí)r延閾值tm的區(qū)間來(lái)說(shuō),具體的調(diào)整過(guò)程為,首先在第二周 期內(nèi)的第一個(gè)第一周期將區(qū)間集合中區(qū)間的的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為目標(biāo)時(shí)延閾值,其中,x大于1且小于m的整數(shù),第二周期包括至少兩個(gè)第一周期;接著統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第一時(shí)延平均值,統(tǒng)計(jì)完成之后,由于是第一個(gè)第一周期,因此直接將時(shí)延閾值tx-1作為下一個(gè)第一周期的目標(biāo)時(shí)延閾值,相當(dāng)于把目標(biāo)時(shí)延閾值調(diào)小。
在一些實(shí)施例中,在上述將時(shí)延閾值tx-1作為下一個(gè)第一周期的目標(biāo)時(shí)延閾值后,統(tǒng)計(jì)時(shí)延閾值tx-1時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第二時(shí)延平均值;接著將該第二時(shí)延平均值與第一時(shí)延平均值進(jìn)行比較,若第二時(shí)延平均值不大于第一時(shí)延平均值時(shí),將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-2確認(rèn)為目標(biāo)時(shí)延閾值??梢钥闯觯舢?dāng)前第一周期相對(duì)于上一第一周期的時(shí)延平均值變小或者相等,則表示讀io請(qǐng)求的分部情況并未發(fā)生惡化,此時(shí)會(huì)將目標(biāo)延時(shí)閾值調(diào)小,以符合當(dāng)前讀io請(qǐng)求分布情況的變化趨勢(shì)。
在一些實(shí)施例中,當(dāng)上述第二時(shí)延平均值大于第一時(shí)延平均值時(shí),將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為下一第一周期的目標(biāo)時(shí)延閾值。可以看出,若當(dāng)前第一周期相對(duì)于上一第一周期的時(shí)延平均值變大,則表示讀io請(qǐng)求的分部情況發(fā)生惡化,此時(shí)會(huì)將目標(biāo)延時(shí)閾值調(diào)大,以符合當(dāng)前讀io請(qǐng)求分布情況的變化趨勢(shì)。
在一些實(shí)施例中,在上述讀io請(qǐng)求發(fā)生惡化后將時(shí)延閾值tx確認(rèn)為下一第一周期的目標(biāo)時(shí)延閾值后;首先會(huì)統(tǒng)計(jì)時(shí)延閾值tx的第一周期內(nèi)的第三時(shí)延平均值,若該第三實(shí)驗(yàn)平均值大于第二時(shí)延平均值時(shí),表示讀io請(qǐng)求的分部情況連續(xù)兩次惡化,此時(shí),會(huì)將區(qū)間集合中的區(qū)間的時(shí)延閾值中的時(shí)延閾值tm或時(shí)延閾值tx/2-1/2確認(rèn)為下一第一周期的時(shí)延閾值,其中,對(duì)x/2-1/2取整,可見(jiàn),在連續(xù)兩次惡化的情況下,并非將目標(biāo)時(shí)延閾值調(diào)大一個(gè)級(jí)別,而是直接調(diào)到最大值,或者調(diào)整為當(dāng)前級(jí)別至最大級(jí)別的中間位置,從而實(shí)現(xiàn)快速調(diào)整至符合當(dāng)前讀io請(qǐng)求分布情況的變化趨勢(shì)。
在一些實(shí)施例中,每隔第二周期會(huì)對(duì)區(qū)間集合中所有區(qū)間的至少兩個(gè)時(shí)延閾值進(jìn)行更新,區(qū)間集合中的區(qū)間對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值可按照預(yù)設(shè)的降級(jí)讀的讀io請(qǐng)求的百分比來(lái)確定,舉例來(lái)說(shuō),計(jì)算當(dāng)前第二周期內(nèi)的每一 區(qū)間的確定為降級(jí)讀的讀io請(qǐng)求占所有讀io請(qǐng)求的比例以及對(duì)應(yīng)的目標(biāo)時(shí)延閾值的平均值,根據(jù)該比例以及目標(biāo)時(shí)延閾值的平均值對(duì)下一第二周期的至少兩個(gè)時(shí)延閾值進(jìn)行設(shè)置。
在一些實(shí)施例中,每個(gè)第二周期會(huì)統(tǒng)計(jì)主機(jī)下發(fā)的讀io請(qǐng)求的io讀寫(xiě)比例和/或io隊(duì)列深度,當(dāng)讀io請(qǐng)求的io讀寫(xiě)比例和/或io隊(duì)列深度發(fā)生變化時(shí),對(duì)區(qū)間集合中所有區(qū)間的至少兩個(gè)時(shí)延閾值進(jìn)行更新。由于讀io請(qǐng)求的io讀寫(xiě)比例和/或io隊(duì)列深度發(fā)生變化時(shí)可能導(dǎo)致讀io請(qǐng)求的時(shí)延值變化很大,有時(shí)可能是數(shù)量級(jí)的變化,因此需要將此條件作為區(qū)間對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值的設(shè)置依據(jù)。
在一些實(shí)施例中,針對(duì)執(zhí)行降級(jí)讀的讀io請(qǐng)求返回的數(shù)據(jù)和直接執(zhí)行該讀io請(qǐng)求返回的數(shù)據(jù),確定兩者之中先返回的數(shù)據(jù)作為該讀io請(qǐng)求的返回時(shí)數(shù)據(jù)。
由于,直接執(zhí)行該讀io請(qǐng)求的時(shí)延值并不一定會(huì)比通過(guò)降級(jí)讀該讀io請(qǐng)求的時(shí)延值慢,因此確定兩者之中先返回的數(shù)據(jù)作為該讀io請(qǐng)求的返回時(shí)數(shù)據(jù)能夠提高數(shù)據(jù)讀取的效率。
本發(fā)明實(shí)施例第二方面還提供一種raid控制器,可包括:
接收模塊,用于接收主機(jī)下發(fā)的讀輸入輸出io請(qǐng)求;
確定模塊,用于根據(jù)讀io請(qǐng)求的大小確定讀io請(qǐng)求所屬的區(qū)間集合中的區(qū)間,區(qū)間集合包括至少兩個(gè)區(qū)間,區(qū)間集合中的區(qū)間為預(yù)先根據(jù)io請(qǐng)求的大小劃分的,區(qū)間集合中的每個(gè)區(qū)間對(duì)應(yīng)目標(biāo)時(shí)延閾值;
調(diào)整模塊,用于每隔預(yù)設(shè)的第一周期按照預(yù)設(shè)的閾值調(diào)整策略調(diào)整區(qū)間集合中的區(qū)間的目標(biāo)時(shí)延閾值;
監(jiān)測(cè)模塊,用于監(jiān)測(cè)讀io請(qǐng)求的返回時(shí)的時(shí)延值;
降級(jí)讀模塊,用于確定讀io請(qǐng)求的時(shí)延值超出讀io請(qǐng)求所屬區(qū)間對(duì)應(yīng)的目標(biāo)時(shí)延閾值時(shí),對(duì)讀io請(qǐng)求進(jìn)行降級(jí)讀操作。
可以看出,本發(fā)明實(shí)施例中,采用確定模塊對(duì)讀io請(qǐng)求區(qū)間進(jìn)行確定,而后會(huì)通過(guò)監(jiān)測(cè)模塊監(jiān)測(cè)該讀io請(qǐng)求的返回時(shí)的時(shí)延值,由于調(diào)整模塊每個(gè)一個(gè)第一周期都會(huì)對(duì)區(qū)間的目標(biāo)時(shí)延閾值進(jìn)行調(diào)整,因此在檢測(cè)模塊監(jiān)測(cè)到該讀io請(qǐng)求的時(shí)延值之后,若該時(shí)延值超出該讀io請(qǐng)求所屬區(qū)間對(duì)應(yīng)的目 標(biāo)時(shí)延閾值時(shí),會(huì)由降級(jí)讀模塊對(duì)該讀io請(qǐng)求執(zhí)行降級(jí)讀操作。
在一些實(shí)施例中,區(qū)間集合中的每個(gè)區(qū)間對(duì)應(yīng)至少兩個(gè)時(shí)延閾值,調(diào)整模塊具體用于:
每隔預(yù)設(shè)的第一周期按照預(yù)設(shè)的閾值調(diào)整策略從區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中所選擇出目標(biāo)時(shí)延閾值。
可以看出,此時(shí)調(diào)整模塊執(zhí)行的調(diào)整方式是按照預(yù)設(shè)的閾值調(diào)整策略從至少兩個(gè)時(shí)延閾值選取出目標(biāo)時(shí)延閾值;當(dāng)然也可采用一個(gè)區(qū)間僅設(shè)置一個(gè)時(shí)延閾值,而后根據(jù)預(yù)設(shè)的閾值調(diào)整策略對(duì)該時(shí)延閾值進(jìn)行更新。
在一些實(shí)施例中,調(diào)整模塊具體用于:
計(jì)算當(dāng)前第一周期內(nèi)的主機(jī)下發(fā)的讀io請(qǐng)求的時(shí)延值的時(shí)延平均值;
根據(jù)時(shí)延平均值從區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中調(diào)整目標(biāo)時(shí)延閾值。
可以看出,具體的閾值調(diào)整策略可以是先計(jì)算當(dāng)前第一周期內(nèi)的讀io請(qǐng)求的時(shí)延值的時(shí)延平均值,而后以該時(shí)延平均值為基礎(chǔ),從區(qū)間的至少兩個(gè)時(shí)延閾值中調(diào)整目標(biāo)時(shí)延閾值,由于時(shí)延平均值反應(yīng)讀io請(qǐng)求的分部情況,因此按照時(shí)延平均值進(jìn)行調(diào)整能夠達(dá)到符合預(yù)期變化的目的。
在一些實(shí)施例中,至少兩個(gè)時(shí)延閾值包括從小到大排列中的時(shí)延閾值t1至?xí)r延閾值tm,m為大于1的整數(shù),調(diào)整模塊具體用于:
在第二周期內(nèi)的第一個(gè)第一周期將區(qū)間集合中區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為目標(biāo)時(shí)延閾值,第二周期包括至少兩個(gè)第一周期;
統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第一時(shí)延平均值,x大于1且小于m的整數(shù);
將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-1確認(rèn)為目標(biāo)時(shí)延閾值。
可以看出,上述是針對(duì)一個(gè)區(qū)間進(jìn)行的說(shuō)明,在上述區(qū)間具有m個(gè)時(shí)延閾值時(shí),區(qū)間集合內(nèi)其他區(qū)間同樣具有m個(gè)時(shí)延閾值,相當(dāng)于區(qū)間集合內(nèi)的區(qū)間的時(shí)延閾值均分為了m個(gè)級(jí)別,每次進(jìn)行調(diào)整時(shí),是對(duì)所有區(qū)間的時(shí)延閾值進(jìn)行統(tǒng)一調(diào)整,如其中一個(gè)區(qū)間調(diào)整至m-3級(jí)別,所有區(qū)間均調(diào)整為m-3級(jí)別。
在一些實(shí)施例中,調(diào)整模塊還用于:
統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx-1時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第二時(shí)延平均值;
當(dāng)?shù)诙r(shí)延平均值不大于第一時(shí)延平均值時(shí),將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-2確認(rèn)為下一第一周期的目標(biāo)時(shí)延閾值。
可以看出,若當(dāng)前第一周期相對(duì)于上一第一周期的時(shí)延平均值變小或者相等,則表示讀io請(qǐng)求的分部情況并未發(fā)生惡化,此時(shí)會(huì)將目標(biāo)延時(shí)閾值調(diào)小,以符合當(dāng)前讀io請(qǐng)求分布情況的變化趨勢(shì)。
在一些實(shí)施例中,調(diào)整模塊還用于:
當(dāng)?shù)诙r(shí)延平均值大于第一時(shí)延平均值時(shí),將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為下一第一周期的目標(biāo)時(shí)延閾值。
可以看出,若當(dāng)前第一周期相對(duì)于上一第一周期的時(shí)延平均值變大,則表示讀io請(qǐng)求的分部情況發(fā)生惡化,此時(shí)會(huì)將目標(biāo)延時(shí)閾值調(diào)大,以符合當(dāng)前讀io請(qǐng)求分布情況的變化趨勢(shì)。
本發(fā)明實(shí)施例第三方面還提供一種raid控制器,包括raid處理器和內(nèi)存,與raid處理器連接的用于連接硬盤(pán)的硬盤(pán)接口,與外部主機(jī)通信的通信接口,內(nèi)存中存儲(chǔ)有計(jì)算機(jī)執(zhí)行指令,raid處理器運(yùn)行內(nèi)存中的計(jì)算機(jī)執(zhí)行指令以執(zhí)行第一方面的數(shù)據(jù)讀取方法。
本發(fā)明實(shí)施例第四方面還提供一種存儲(chǔ)設(shè)備,包括至少兩塊硬盤(pán)和與至少兩塊硬盤(pán)均通信連接的raid控制器,raid控制器運(yùn)行存儲(chǔ)于raid控制器中的計(jì)算機(jī)執(zhí)行指令以執(zhí)行第一方面的數(shù)據(jù)讀取方法。
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):本發(fā)明實(shí)施例中將讀io請(qǐng)求按照大小分別屬于不同的區(qū)間,區(qū)間為該區(qū)間內(nèi)的讀io請(qǐng)求的大小的取值范圍,每一區(qū)間內(nèi)的讀io請(qǐng)求中具有大致類(lèi)似的大小,而后為每個(gè)區(qū)間均設(shè)置目標(biāo)時(shí)延閾值,該目標(biāo)時(shí)延閾值可以按照預(yù)設(shè)的閾值調(diào)整策略進(jìn)行調(diào)整,如可根據(jù)每次的統(tǒng)計(jì)的讀io請(qǐng)求的時(shí)延平均值從至少兩個(gè)時(shí)延閾值中選取一個(gè)作為目標(biāo)時(shí)延閾值或者對(duì)目標(biāo)時(shí)延閾值直接更新,而后在對(duì)一個(gè)區(qū)間內(nèi)的讀io請(qǐng)求進(jìn)行判斷時(shí),通過(guò)該該區(qū)間的目標(biāo)時(shí)延閾值丟該讀io請(qǐng)求是否進(jìn)行降級(jí)讀進(jìn)行判斷,當(dāng)該讀io請(qǐng)求超出該區(qū)間的目標(biāo)時(shí)延閾 值時(shí),進(jìn)行降級(jí)讀操作,可以看出,目標(biāo)時(shí)延閾值在運(yùn)行過(guò)程中并非一直不變的,而是根據(jù)不同的讀io請(qǐng)求分布情況選擇對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值中確定的目標(biāo)時(shí)延閾值或者直接對(duì)目標(biāo)時(shí)延閾值直接更新,從而能夠有效減小系統(tǒng)平均時(shí)延,提升采用本發(fā)明實(shí)施例的raid的qos,將ssd的raid性能最大限度的利用,從而提高raid的io性能。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1a是采用磁盤(pán)陣列的存儲(chǔ)系統(tǒng)的結(jié)構(gòu)示意圖;
圖1b是現(xiàn)有技術(shù)的存儲(chǔ)系統(tǒng)的結(jié)構(gòu)示意圖;
圖1c是現(xiàn)有技術(shù)的存儲(chǔ)系統(tǒng)的工作流程圖;
圖2是本發(fā)明實(shí)施例的數(shù)據(jù)讀取方法的一個(gè)實(shí)施例圖;
圖3是本發(fā)明實(shí)施例的數(shù)據(jù)讀取方法中確定目標(biāo)時(shí)延閾值的流程圖;
圖4是本發(fā)明實(shí)施例的raid控制器的一個(gè)實(shí)施例圖;
圖5是本發(fā)明實(shí)施例的raid控制器的一個(gè)實(shí)施例圖;
圖6是本發(fā)明實(shí)施例的存儲(chǔ)設(shè)備的一個(gè)實(shí)施例圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了一種數(shù)據(jù)讀取方法、raid控制器及存儲(chǔ)設(shè)備,用于通過(guò)對(duì)讀io請(qǐng)求合理分組并動(dòng)態(tài)調(diào)整時(shí)延閾值,從而有效減小系統(tǒng)平均時(shí)延,提升采用本發(fā)明實(shí)施例的raid的服務(wù)質(zhì)量。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
以下分別進(jìn)行詳細(xì)說(shuō)明。
本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”、“第三”“第四”等(如果存在)是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的實(shí)施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤4送?,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或模塊的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或模塊,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或模塊。
磁盤(pán)陣列包括多種模式,如raid0,將至少兩個(gè)磁盤(pán)合并成一個(gè)邏輯磁盤(pán)使用,數(shù)據(jù)讀寫(xiě)時(shí)對(duì)各磁盤(pán)同時(shí)操作,不同磁盤(pán)寫(xiě)入不同數(shù)據(jù),提高讀寫(xiě)性能;又如raid1,若采用兩塊磁盤(pán)時(shí),兩塊磁盤(pán)上存儲(chǔ)的相同的數(shù)據(jù),即便其中一個(gè)磁盤(pán)上的數(shù)據(jù)損壞,也能通過(guò)另一個(gè)磁盤(pán)進(jìn)行讀取,提高數(shù)據(jù)可靠性;又例如raid10,該模式相當(dāng)于結(jié)合了raid0和raid1,需要至少四塊磁盤(pán),先將兩塊磁盤(pán)組成raid1在將多個(gè)raid1組成raid0,同時(shí)提高讀寫(xiě)性能和數(shù)據(jù)可靠性,此外,還有一些其他的陣列方式會(huì)加入數(shù)據(jù)校驗(yàn),在數(shù)據(jù)損壞時(shí)可根據(jù)校驗(yàn)碼恢復(fù)數(shù)據(jù)。
請(qǐng)參閱圖1a,圖1a是采用磁盤(pán)陣列的存儲(chǔ)設(shè)備的結(jié)構(gòu)示意圖,如圖1a所示,采用這種磁盤(pán)陣列的系統(tǒng)一般包括主機(jī)101、raid系統(tǒng)102和硬盤(pán)103,該主機(jī)101可以是局域網(wǎng)中的客戶(hù)端設(shè)備,如計(jì)算機(jī),也可以是互聯(lián)網(wǎng)絡(luò)中的服務(wù)器,該raid系統(tǒng)可以是運(yùn)行在主機(jī)或者存儲(chǔ)服務(wù)器的系統(tǒng)內(nèi)的軟件模塊,或者也可以是存儲(chǔ)系統(tǒng)中的raid控制器,主機(jī)101與raid系統(tǒng)102或者之間一般采用有線方式連接,也有一部分采用無(wú)線方式連接形成遠(yuǎn)程存儲(chǔ)的系統(tǒng),這種raid系統(tǒng)上運(yùn)行有數(shù)據(jù)系統(tǒng),能夠響應(yīng)主機(jī)101下發(fā)的io請(qǐng)求,如讀io請(qǐng)求和寫(xiě)io請(qǐng)求等,返回讀io請(qǐng)求所請(qǐng)求的數(shù)據(jù)或?qū)懭雽?xiě)io請(qǐng)求中要寫(xiě)入的數(shù)據(jù)。
其中,該raid系統(tǒng)用于在軟件層面實(shí)現(xiàn)raid冗余算法(即將多塊硬盤(pán)空間拉通成統(tǒng)一空間使用,并且提供空間管理)和控制數(shù)據(jù)io下發(fā)盤(pán)的決策。并實(shí)現(xiàn)超時(shí)io的降級(jí)讀,還用于提供各個(gè)raid系統(tǒng)的降級(jí)讀功能,提 供超時(shí)io的資源釋放功能,提供頁(yè)面替換功能;還可用于對(duì)接收的讀io請(qǐng)求的超時(shí)檢測(cè)。該raid系統(tǒng)102與硬盤(pán)103之間可采用不同的接口進(jìn)行連接,若為服務(wù)器硬盤(pán)時(shí),該raid系統(tǒng)102與硬盤(pán)之間采用小型計(jì)算機(jī)系統(tǒng)接口(smallcomputersysteminterface,scsi)連接,raid系統(tǒng)102中設(shè)有scsi模塊,將用于將讀io請(qǐng)求中指示的信息組裝成硬盤(pán)能夠識(shí)別的scsi指令通過(guò)該scsi接口下發(fā)到磁盤(pán)陣列中的硬盤(pán)103;硬盤(pán)103中的底層驅(qū)動(dòng)接收scsi指令,并將根據(jù)該scsi指令驅(qū)動(dòng)硬盤(pán)103讀取數(shù)據(jù)。
圖1b是現(xiàn)有技術(shù)的存儲(chǔ)系統(tǒng),該存儲(chǔ)系統(tǒng)中raid系統(tǒng)包括raid模塊1021,用于接收讀io請(qǐng)求;io超時(shí)檢測(cè)模塊1022用于檢測(cè)讀io請(qǐng)求是否超時(shí);降級(jí)讀模塊1023,用于對(duì)超時(shí)的讀io請(qǐng)求進(jìn)行降級(jí)讀操作,scsi模塊1024,用于將讀io請(qǐng)求中指示的信息組裝成硬盤(pán)能夠識(shí)別的scsi指令通過(guò)該scsi接口下發(fā)到磁盤(pán)陣列中的硬盤(pán)103。
該存儲(chǔ)系統(tǒng)的工作流程可參見(jiàn)圖1c,圖1c是現(xiàn)有技術(shù)的存儲(chǔ)系統(tǒng)的工作流程圖,其中,主機(jī)101向raid模塊1021發(fā)送讀io請(qǐng)求,raid模塊1021執(zhí)行該讀io請(qǐng)求,并由io超時(shí)檢測(cè)模塊1022對(duì)該讀io請(qǐng)求是否超時(shí)進(jìn)行判斷,當(dāng)確定該讀io請(qǐng)求超時(shí)時(shí),會(huì)向raid模塊1021發(fā)送一個(gè)讀io請(qǐng)求超時(shí)的信息,raid模塊1021在接收到該信息后,會(huì)將該讀io請(qǐng)求發(fā)送至降級(jí)讀模塊1023進(jìn)行降級(jí)讀處理,由降級(jí)讀模塊1023對(duì)該讀io請(qǐng)求進(jìn)行處理,即找到磁盤(pán)陣列102中的另外一個(gè)存儲(chǔ)有讀io請(qǐng)求中指示的數(shù)據(jù)的物理磁盤(pán),并修改讀io請(qǐng)求中指示的數(shù)據(jù)的地址在新的物理磁盤(pán)上的地址,將該修改后的讀io請(qǐng)求發(fā)送至scsi模塊1024,由該scsi模塊1023將此修改后的讀io請(qǐng)求轉(zhuǎn)換成底層驅(qū)動(dòng)能識(shí)別的包含該修改后的讀io請(qǐng)求的scsi指令,并將該指令發(fā)送至對(duì)應(yīng)的硬盤(pán),根據(jù)該scsi指令驅(qū)動(dòng)硬盤(pán)103讀取該修改后的讀io請(qǐng)求指示的數(shù)據(jù),將該數(shù)據(jù)作為返回?cái)?shù)據(jù)依次反饋給scsi模塊1024、降級(jí)讀模塊1023和raid模塊1021,最終由raid模塊1021將該返回?cái)?shù)據(jù)反饋至主機(jī),完成一次讀io請(qǐng)求的降級(jí)讀的過(guò)程。
上述方案中,延時(shí)閾值僅有一個(gè)且在運(yùn)行過(guò)程中時(shí)延值一直保持不變,并不會(huì)考慮其他影響因素,例如在讀寫(xiě)io的比例和io的大小分布的變化導(dǎo)致的io的時(shí)延分布的變化,這種變化通常導(dǎo)致io的時(shí)延值變化較大,因此, 不論是機(jī)械硬盤(pán)構(gòu)成的磁盤(pán)陣列還是ssd構(gòu)成的磁盤(pán)陣列,固定的延時(shí)閾值并不能很好的對(duì)超時(shí)io進(jìn)行限制達(dá)到降低整體讀io時(shí)延的水平。
并且隨著qos要求的增加,時(shí)延急劇上升。在ssd組成的磁盤(pán)陣列的環(huán)境中,ssd的4kb隨機(jī)讀的速率很高,而io請(qǐng)求一般也都是kb級(jí)別的大小,因此,在ssd構(gòu)成的磁盤(pán)陣列中,部分io的降級(jí)讀并不會(huì)對(duì)該磁盤(pán)陣列中的其他ssd的性能造成明顯的影響,因此,固定延時(shí)閾值的方式并不能很好的適用在由ssd組成的磁盤(pán)陣列中,需要根據(jù)ssd的特征制定新的超時(shí)io識(shí)別處理方案以減少超時(shí)io對(duì)系統(tǒng)的影響。
為解決上述問(wèn)題,本發(fā)明的一個(gè)實(shí)施例提供一種數(shù)據(jù)讀取方法,請(qǐng)參閱圖2,圖2是本發(fā)明實(shí)施例的數(shù)據(jù)讀取方法的一個(gè)實(shí)施例圖,如圖2所示,該數(shù)據(jù)讀取方法可包括以下內(nèi)容:
201、接收主機(jī)下發(fā)的讀io請(qǐng)求。
可以理解的是,本發(fā)明實(shí)施例應(yīng)用的場(chǎng)景為主機(jī)和磁盤(pán)之間的數(shù)據(jù)交互,當(dāng)主機(jī)需要從磁盤(pán)陣列的硬盤(pán)中讀取數(shù)據(jù)時(shí),會(huì)向raid系統(tǒng)發(fā)送讀io請(qǐng)求,以使得raid系統(tǒng)根據(jù)該讀io請(qǐng)求,從磁盤(pán)陣列的硬盤(pán)中取出對(duì)應(yīng)數(shù)據(jù)反饋給主機(jī)。
202、根據(jù)讀io請(qǐng)求的大小確定讀io請(qǐng)求所屬的區(qū)間集合中的區(qū)間。
其中,區(qū)間集合包括至少兩個(gè)區(qū)間,區(qū)間集合中的區(qū)間為預(yù)先根據(jù)io請(qǐng)求的大小劃分的,區(qū)間集合中的每個(gè)區(qū)間對(duì)應(yīng)目標(biāo)時(shí)延閾值,區(qū)間的范圍值對(duì)區(qū)間內(nèi)讀io請(qǐng)求的大小的取值范圍。
需要說(shuō)明的是,每個(gè)區(qū)間除了對(duì)應(yīng)目標(biāo)時(shí)延閾值之外,還可對(duì)應(yīng)設(shè)置至少兩個(gè)時(shí)延閾值。
可以理解的是,raid在接收到一段時(shí)間內(nèi)的讀io請(qǐng)求后,會(huì)將這段時(shí)間內(nèi)的讀io請(qǐng)求按照其大小分配至不同的區(qū)間。
舉例來(lái)說(shuō),區(qū)間a對(duì)應(yīng)的區(qū)間范圍的區(qū)間是4kb至8kb,區(qū)間b對(duì)應(yīng)的區(qū)間范圍的區(qū)間是8kb至12kb,即大小在4kb至8kb之間的讀io請(qǐng)求會(huì)被劃分在區(qū)間a內(nèi),而大小為8kb至12kb之間的讀io請(qǐng)求會(huì)被劃分在區(qū)間b內(nèi),可按照此方式依次分配區(qū)間c和區(qū)間d等區(qū)間,直到覆蓋到所有的讀io請(qǐng)求。
需要說(shuō)明的是,設(shè)置區(qū)間范圍一般來(lái)說(shuō)除了端點(diǎn)之外沒(méi)有重復(fù)的部分, 并且為了使得區(qū)間劃分上更加平均,可劃分為首尾相連的連續(xù)區(qū)間,即4kb至8kb的區(qū)間、8kb至12kb的區(qū)間和12kb至16kb的區(qū)間等。當(dāng)然若是一些讀io請(qǐng)求在某一區(qū)間內(nèi)幾乎不分布,如沒(méi)有讀io請(qǐng)求的大小20kb至24kb的大小范圍,則可不設(shè)置區(qū)間為20kb至24kb的區(qū)間范圍。
203、每隔預(yù)設(shè)的第一周期按照預(yù)設(shè)的閾值調(diào)整策略調(diào)整區(qū)間集合中的區(qū)間的目標(biāo)時(shí)延閾值。
其中,該目標(biāo)時(shí)延閾值是動(dòng)態(tài)調(diào)整的,其調(diào)整間隔為每隔第一周期調(diào)整一次,一種調(diào)整方式是采用直接更新目標(biāo)時(shí)延閾值的方式,另外一種則是在區(qū)間對(duì)應(yīng)預(yù)設(shè)了至少兩個(gè)時(shí)延閾值時(shí),采用預(yù)設(shè)的閾值調(diào)整策略進(jìn)行選取。
可選的,至少兩個(gè)時(shí)延閾值包括至少兩個(gè)大小不同的時(shí)延閾值,該目標(biāo)時(shí)延閾值是從每個(gè)區(qū)間對(duì)應(yīng)的至少兩個(gè)大小不同的時(shí)延閾值中選取的一個(gè)。
可以理解的是,至少兩個(gè)時(shí)延閾值設(shè)置的目的在于對(duì)應(yīng)每個(gè)區(qū)間能夠細(xì)分延時(shí)級(jí)別,并按照延時(shí)級(jí)別調(diào)整不同的時(shí)延閾值,使得對(duì)讀io請(qǐng)求的處理更加精確和高效。
舉例來(lái)說(shuō),至少兩個(gè)時(shí)延閾值包括三個(gè)從小到大排列的時(shí)延閾值m1、m2和m3,m1對(duì)應(yīng)除最慢1%的讀io請(qǐng)求之外的99%的讀io請(qǐng)求的都返回時(shí),對(duì)應(yīng)該99%的讀io請(qǐng)求的時(shí)延平均值的兩倍,m2對(duì)應(yīng)除最慢0.5%的讀io請(qǐng)求之外的99.5%的讀io請(qǐng)求的都返回時(shí),對(duì)應(yīng)該99.8%的讀io請(qǐng)求的時(shí)延平均值的兩倍,m2對(duì)應(yīng)除最慢0.2%的讀io請(qǐng)求之外的99.8%的讀io請(qǐng)求的都返回時(shí),對(duì)應(yīng)該99.8%的讀io請(qǐng)求的時(shí)延平均值的兩倍。
此時(shí),對(duì)應(yīng)m1時(shí),表示要解決最慢1%的讀io請(qǐng)求的慢的問(wèn)題,對(duì)應(yīng)m2時(shí),表示要解決最慢0.5%的讀io請(qǐng)求的慢的問(wèn)題,對(duì)應(yīng)m3時(shí),表示要解決最慢0.2%的讀io請(qǐng)求的慢的問(wèn)題。
作為可選的,該時(shí)延閾值為區(qū)間中預(yù)設(shè)百分比的讀io請(qǐng)求都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的兩倍。
可以理解的是,該預(yù)設(shè)百分比是可調(diào)的,例如,m1是99%的讀io請(qǐng)求都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的兩倍,m2是99.1%的讀io請(qǐng)求都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的兩倍,m3是99.2%的讀io請(qǐng)求都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的兩倍,若還有m4、m5等則可以按照延時(shí)閾值從小到大的規(guī)律進(jìn)行設(shè)置, m4是99.3%的讀io請(qǐng)求都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的兩倍,m5是99.5%的讀io請(qǐng)求都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的兩倍等等。
需要說(shuō)明的是,每隔第二周期還會(huì)對(duì)區(qū)間集合中的區(qū)間對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值進(jìn)行更新,該更新是將每一個(gè)區(qū)間的至少兩個(gè)時(shí)延閾值均進(jìn)行更新;該更新時(shí)設(shè)置時(shí)延閾值的方式包括兩種,下面分別進(jìn)行說(shuō)明,第一種是區(qū)間集合中的區(qū)間對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值可按照預(yù)設(shè)的降級(jí)讀的讀io請(qǐng)求的百分比來(lái)確定。
其中,第二周期為包含至少兩個(gè)第一周期的周期,若第一周期稱(chēng)之為小周期,則第二周期對(duì)應(yīng)可稱(chēng)之為大周期。
舉例來(lái)說(shuō),計(jì)算當(dāng)前第二周期內(nèi)的每一區(qū)間的確定為降級(jí)讀的讀io請(qǐng)求占所有讀io請(qǐng)求的比例以及對(duì)應(yīng)的目標(biāo)時(shí)延閾值的平均值,根據(jù)該比例以及目標(biāo)時(shí)延閾值的平均值對(duì)下一第二周期的至少兩個(gè)時(shí)延閾值進(jìn)行設(shè)置,如上述按照需要解決的最慢的讀io請(qǐng)求的百分比設(shè)置為不同的級(jí)別。
第二種方式是統(tǒng)計(jì)主機(jī)下發(fā)的讀io請(qǐng)求的io讀寫(xiě)比例和/或io隊(duì)列深度;
當(dāng)讀io請(qǐng)求的io讀寫(xiě)比例和/或io隊(duì)列深度發(fā)生變化時(shí),更新區(qū)間的目標(biāo)時(shí)延閾值。
可以看出,影響目標(biāo)時(shí)延閾值的因素還可以是io讀寫(xiě)比例和/或io隊(duì)列深度,當(dāng)這兩個(gè)值的變化幅度較大時(shí),也可作為更新目標(biāo)時(shí)延閾值的條件,例如io讀寫(xiě)比例變大,表示讀io請(qǐng)求的量會(huì)增多,此時(shí)可適當(dāng)降低目標(biāo)延時(shí)閾值的等級(jí),又例如,當(dāng)讀io隊(duì)列深度較深時(shí),表示處理的讀io請(qǐng)求量非常大,此時(shí)也應(yīng)當(dāng)相應(yīng)降低目標(biāo)時(shí)延閾值的等級(jí)。
需要說(shuō)明的是,區(qū)間范圍一般可設(shè)定為固定的大小,如范圍是4kb、8kb等,對(duì)于讀io請(qǐng)求來(lái)說(shuō),按照4kb的范圍劃分時(shí)顯然每一區(qū)間內(nèi)的讀io請(qǐng)求明顯要少于按照8kb的范圍劃分的情況,因此,相對(duì)于8kb的范圍劃分情況,4kb的范圍劃分情況下的區(qū)間可以具有的時(shí)延閾值的數(shù)量相對(duì)8kb的情況可以減少一些,因此可按照區(qū)間范圍的大小為每一區(qū)間范圍配置具有不同數(shù)量的時(shí)延閾值的至少兩個(gè)時(shí)延閾值,即對(duì)于大區(qū)間范圍的至少兩個(gè)時(shí)延閾值的時(shí)延閾值的數(shù)量較多,對(duì)應(yīng)小區(qū)間范圍的至少兩個(gè)時(shí)延閾值的時(shí)延閾值的 數(shù)量較少。
其中,時(shí)延平均值是讀io請(qǐng)求都返回的時(shí)延值的平均值。
需要說(shuō)明的是,時(shí)延平均值對(duì)應(yīng)是讀io請(qǐng)求的時(shí)延值的分布情況,具體的,該時(shí)延平均值越小表示讀io請(qǐng)求的分布情況越好,該時(shí)延平均值越大表示讀io請(qǐng)求的分布情況越差。由于對(duì)每個(gè)區(qū)間的至少兩個(gè)時(shí)延閾值都設(shè)置了多個(gè)時(shí)延閾值,可將這些時(shí)延閾值對(duì)應(yīng)到時(shí)延平均值上,根據(jù)統(tǒng)計(jì)獲得的時(shí)延平均值即可選取對(duì)應(yīng)的時(shí)延閾值,選取的原則可以是時(shí)延平均值越小則對(duì)應(yīng)越小的時(shí)延閾值。
除了簡(jiǎn)單對(duì)應(yīng)選取之外,對(duì)于時(shí)延閾值的設(shè)置還可采用對(duì)比機(jī)制,下面進(jìn)行介紹。
作為可選的,請(qǐng)參閱圖3,圖3是本發(fā)明實(shí)施例的處理方法中確定目標(biāo)時(shí)延閾值的流程圖,其中,一個(gè)至少兩個(gè)時(shí)延閾值包括從小到大排列中的時(shí)延閾值t1至?xí)r延閾值tm,m為大于1的整數(shù),此時(shí),步驟203中目標(biāo)時(shí)延閾值的調(diào)整流程可包括:
301、在第二周期內(nèi)的第一個(gè)第一周期將區(qū)間集合中區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為目標(biāo)時(shí)延閾值。
可以理解的是,首次指的是每一個(gè)第二周期的第一個(gè)第一周期,在此第一周期確定目標(biāo)時(shí)延閾值按照的規(guī)則可以有幾種,其一是先按照將最大的時(shí)延閾值tm作為目標(biāo)時(shí)延閾值,然后再根據(jù)延時(shí)分布值選擇對(duì)應(yīng)的時(shí)延閾值,也可直接選取時(shí)延閾值t1至?xí)r延閾值tm之間某一個(gè)值tx作為目標(biāo)時(shí)延閾值,當(dāng)然,也可以選取最小的時(shí)延閾值t1作為目標(biāo)時(shí)延閾值。
302、統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第一時(shí)延平均值。
其中,x大于1且小于m。
可以理解的是,每一個(gè)時(shí)延閾值對(duì)應(yīng)一個(gè)第一周期,在確定出時(shí)延閾值tx后,就會(huì)對(duì)此第一周期內(nèi)的讀io請(qǐng)求都返回時(shí)的時(shí)延值進(jìn)行統(tǒng)計(jì),并計(jì)算出這些時(shí)延值的平均值得到第一時(shí)延平均值,該第一時(shí)延平均值是衡量是否需要變更目標(biāo)時(shí)延閾值的依據(jù),由于此第一周期是第一個(gè)第一周期,因此上一個(gè)周期的時(shí)延平均值并不存在,此時(shí)默認(rèn)相對(duì)上一周期并未發(fā)生時(shí)延平均 值對(duì)應(yīng)的讀io請(qǐng)求的分布惡化的情況,此時(shí)延閾值tx作為此第一周期內(nèi)讀io請(qǐng)求是否為需要降級(jí)讀的依據(jù),即將時(shí)延閾值tx作為時(shí)延閾值并對(duì)所有時(shí)延值超過(guò)該時(shí)延閾值tx的讀io請(qǐng)求都確定為慢io,并對(duì)這些讀io請(qǐng)求都進(jìn)行降級(jí)讀操作。
303、將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-1確認(rèn)為目標(biāo)時(shí)延閾值;
可以看出,在完成時(shí)延閾值為tx時(shí)的第一時(shí)延平均值的統(tǒng)計(jì)后,可將時(shí)延閾值tx-1確認(rèn)為目標(biāo)時(shí)延閾值,該時(shí)延閾值tx-1可作為下一第一周期的目標(biāo)時(shí)延閾值。
作為可選的,目標(biāo)時(shí)延閾值的確定流程還可包括:
304、統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx-1時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第二時(shí)延平均值;
可以理解的是,在時(shí)延閾值tx-1時(shí),相當(dāng)于經(jīng)過(guò)了一個(gè)第一周期,讀io請(qǐng)求的時(shí)延值發(fā)生了變化,此時(shí)再次統(tǒng)計(jì)得到第二時(shí)延平均值,該第二時(shí)延平均值是此第一周期中讀io請(qǐng)求都返回的時(shí)延值的平均值,此時(shí)延閾值tx-1作為此第一周期內(nèi)讀io請(qǐng)求是否需要降級(jí)讀的依據(jù),即將時(shí)延閾值tx-1作為時(shí)延閾值并對(duì)所有時(shí)延值超過(guò)該時(shí)延閾值tx-1的讀io請(qǐng)求都確定需要進(jìn)行降級(jí)讀,并對(duì)這些讀io請(qǐng)求都進(jìn)行降級(jí)讀操作。
305、將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-2確認(rèn)為目標(biāo)時(shí)延閾值。
其中,當(dāng)?shù)诙r(shí)延平均值不大于第一時(shí)延平均值時(shí),將區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-2確認(rèn)為目標(biāo)時(shí)延閾值。
可以理解的是,在獲得第二時(shí)延平均值后,為了確認(rèn)下一第一周期的時(shí)延閾值,可將該第二時(shí)延平均值與第一時(shí)延平均值進(jìn)行比較,并根據(jù)比較的結(jié)果對(duì)時(shí)延閾值進(jìn)行調(diào)整,比如,當(dāng)?shù)谝粫r(shí)延平均值不大于第二時(shí)延平均值時(shí),即相對(duì)于上一個(gè)第一周期,此第一周期中讀io請(qǐng)求的時(shí)延值的平均值沒(méi)有增加,而是保持相等或者有所減小,表示整體上來(lái)看讀io請(qǐng)求的分布情況變好,此時(shí)可將時(shí)延閾值上調(diào)一個(gè)等級(jí),即調(diào)整為比上一個(gè)第一周期更小的時(shí)延閾值,如將此第一周期的時(shí)延閾值tx-1調(diào)整為時(shí)延閾值tx-2,將時(shí)延閾 值tx-2作為下一個(gè)第一周期的時(shí)延閾值。
需要說(shuō)明的是,當(dāng)?shù)诙r(shí)延平均值大于第一時(shí)延平均值時(shí),需要進(jìn)行另外的閾值調(diào)整策略。
可選的,該方法還包括:
306、將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為目標(biāo)時(shí)延閾值。
可以看出,當(dāng)?shù)诙r(shí)延平均值大于第一時(shí)延平均值時(shí),表示當(dāng)前第一周期相對(duì)于上一第一周期的情況是惡化的,需要對(duì)時(shí)延閾值的等級(jí)進(jìn)行下調(diào),即調(diào)整為比上一個(gè)第一周期的更大的時(shí)延閾值。
作為可選的,目標(biāo)時(shí)延閾值的確定流程還可包括:
307、統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx時(shí)的讀io請(qǐng)求的第三時(shí)延平均值;
308、將區(qū)間集合中的區(qū)間的目標(biāo)時(shí)延閾值確認(rèn)為tm或tx/2-1/2。
其中,對(duì)x/2-1/2取整。當(dāng)?shù)谌龝r(shí)延平均值大于第二時(shí)延平均值時(shí),表示相對(duì)上一個(gè)第一周期情況出現(xiàn)惡化。
可以理解的是,此時(shí)連續(xù)兩次出現(xiàn)讀io請(qǐng)求的時(shí)延值的分布情況都是惡化時(shí),表示惡化比較嚴(yán)重,此時(shí)不會(huì)直接將時(shí)延閾值僅僅下調(diào)一個(gè)等級(jí),而是將其調(diào)整為最低等級(jí),即至少兩個(gè)時(shí)延閾值中的最大的時(shí)延閾值或者是當(dāng)前時(shí)延閾值與最大的時(shí)延閾值的中間等級(jí),以期能夠更快的調(diào)整至實(shí)際的時(shí)延閾值。
需要說(shuō)明的是,由于每個(gè)區(qū)間對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值的數(shù)量是相同的,即具有相同的時(shí)延閾值級(jí)別數(shù)量,在每次更新時(shí)延閾值時(shí),調(diào)整對(duì)象是所有區(qū)間,調(diào)整的時(shí)延閾值的級(jí)別的全部按照相同的級(jí)別進(jìn)行調(diào)整,舉例來(lái)說(shuō),假設(shè)每個(gè)至少兩個(gè)時(shí)延閾值具有五個(gè)時(shí)延閾值,一個(gè)區(qū)間調(diào)整為時(shí)延閾值第三時(shí)延閾值的級(jí)別,則其他所有區(qū)間均調(diào)整為第三時(shí)延閾值的級(jí)別。
309、當(dāng)?shù)谌龝r(shí)延平均值不大于第二時(shí)延平均值時(shí),將區(qū)間集合中區(qū)間的目標(biāo)時(shí)延閾值確認(rèn)為tx-1。
可以看出,上調(diào)目標(biāo)時(shí)延閾值時(shí),不論是連續(xù)多少次讀io請(qǐng)求分布情況好于上一第一周期,每次調(diào)整僅上調(diào)一個(gè)級(jí)別。
204、監(jiān)測(cè)讀io請(qǐng)求的返回時(shí)的時(shí)延值。
其中,在設(shè)定好各個(gè)區(qū)間的目標(biāo)時(shí)延閾值后,即可對(duì)區(qū)間集合的讀io請(qǐng)求進(jìn)行監(jiān)控,該監(jiān)控是以第一周期為單位或者第二周期為單位進(jìn)行的。
205、讀io請(qǐng)求進(jìn)行降級(jí)讀操作。
可以理解是,在確定出目標(biāo)時(shí)延閾值后,即可對(duì)超出該目標(biāo)時(shí)延閾值的讀io請(qǐng)求進(jìn)行判斷,將讀io請(qǐng)求的時(shí)延值超出該讀io所屬區(qū)間對(duì)應(yīng)的目標(biāo)時(shí)延閾值時(shí),該讀io請(qǐng)求確定為超時(shí)io請(qǐng)求,在確定出這些超時(shí)io請(qǐng)求之后,即可對(duì)這些超時(shí)io請(qǐng)求進(jìn)行降級(jí)讀操作。
作為可選的,步驟205具體可包括:
根據(jù)降級(jí)讀的讀io請(qǐng)求的指示從存儲(chǔ)設(shè)備中的硬盤(pán)讀取數(shù)據(jù)。
其中,硬盤(pán)中存儲(chǔ)有超時(shí)io請(qǐng)求指示的數(shù)據(jù),該硬盤(pán)與超時(shí)io請(qǐng)求中指示的raid中的硬盤(pán)不相同。
可以理解的是,對(duì)于raid0和raid10來(lái)說(shuō),raid存儲(chǔ)方式每一數(shù)據(jù)在raid中的至少兩塊硬盤(pán)上存儲(chǔ),該硬盤(pán)可以是機(jī)械硬盤(pán),也可以是ssd,在讀io請(qǐng)求被確定為需要降級(jí)讀時(shí),則從存儲(chǔ)設(shè)備中另外一個(gè)存儲(chǔ)有該讀io請(qǐng)求指示的數(shù)據(jù)的硬盤(pán)上讀取數(shù)據(jù),由于讀取的路徑發(fā)生改變,一般來(lái)說(shuō)讀取數(shù)據(jù)會(huì)先于正常執(zhí)行讀io請(qǐng)求,但是實(shí)際情況受限于降級(jí)讀指示的硬盤(pán)的負(fù)荷,降級(jí)讀也不一定先于正常讀。
可以看出,本發(fā)明實(shí)施例中將讀io請(qǐng)求按照大小分別屬于不同的區(qū)間,區(qū)間為該區(qū)間內(nèi)的讀io請(qǐng)求的大小的取值范圍,每一區(qū)間內(nèi)的讀io請(qǐng)求中具有大致類(lèi)似的大小,而后為每個(gè)區(qū)間均設(shè)置目標(biāo)時(shí)延閾值,該目標(biāo)時(shí)延閾值可以按照預(yù)設(shè)的閾值調(diào)整策略進(jìn)行調(diào)整,如可根據(jù)每次的統(tǒng)計(jì)的讀io請(qǐng)求的時(shí)延平均值從至少兩個(gè)時(shí)延閾值中選取一個(gè)作為目標(biāo)時(shí)延閾值或者對(duì)目標(biāo)時(shí)延閾值直接更新,而后在對(duì)一個(gè)區(qū)間內(nèi)的讀io請(qǐng)求進(jìn)行判斷時(shí),通過(guò)該該區(qū)間的目標(biāo)時(shí)延閾值丟該讀io請(qǐng)求是否進(jìn)行降級(jí)讀進(jìn)行判斷,當(dāng)該讀io請(qǐng)求超出該區(qū)間的目標(biāo)時(shí)延閾值時(shí),進(jìn)行降級(jí)讀操作,可以看出,目標(biāo)時(shí)延閾值在運(yùn)行過(guò)程中并非一直不變的,而是根據(jù)不同的讀io請(qǐng)求分布情況選擇對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值中確定的目標(biāo)時(shí)延閾值或者直接對(duì)目標(biāo)時(shí)延閾值直接更新,從而能夠有效減小系統(tǒng)平均時(shí)延,提升采用本發(fā)明實(shí)施例的raid的 qos,將ssd的raid性能最大限度的利用,從而提高raid的io性能。
需要說(shuō)明的是,讀io請(qǐng)求之中的超時(shí)io請(qǐng)求雖然會(huì)延時(shí)一段時(shí)間返回?cái)?shù)據(jù),但是仍舊會(huì)通過(guò)正常讀取數(shù)據(jù),該降級(jí)讀操作會(huì)通過(guò)另外一條途徑讀取同樣的數(shù)據(jù),對(duì)于系統(tǒng)來(lái)說(shuō),需要對(duì)兩種途徑讀取的數(shù)據(jù)進(jìn)行取舍。
作為可選的,方法還包括:
將執(zhí)行讀io請(qǐng)求返回的數(shù)據(jù)和通過(guò)降級(jí)讀該讀io請(qǐng)求返回的數(shù)據(jù)中先返回的數(shù)據(jù)確定為慢io的返回?cái)?shù)據(jù)。
可以理解的是,本發(fā)明實(shí)施例采取的方式是,兩者時(shí)間上先返回作為返回?cái)?shù)據(jù),而另外一個(gè)則采用忽略或者丟棄的方式進(jìn)行處理,能夠避免資源的浪費(fèi),同時(shí)提高系統(tǒng)響應(yīng)速度。
上面對(duì)本發(fā)明實(shí)施例的數(shù)據(jù)讀取方法進(jìn)行了介紹,下面以一個(gè)具體的例子對(duì)數(shù)據(jù)讀取方法進(jìn)行介紹。
在接收到主機(jī)下發(fā)的讀io請(qǐng)求后,按照區(qū)間范圍4kb對(duì)所有的讀io請(qǐng)求進(jìn)行區(qū)間劃分,例如劃分為10個(gè)區(qū)間,即區(qū)間1至區(qū)間10,此時(shí)劃分的區(qū)間1至區(qū)間10的區(qū)間范圍依次為0kb至4kb、4kb至8kb、8kb至12kb、12kb至16kb、16kb至20kb、20kb至24kb、24kb至28kb、28kb至32kb、32kb至36kb、36kb至40kb等等。
針對(duì)區(qū)間范圍4kb,可設(shè)置時(shí)延閾值數(shù)量為10個(gè)的至少兩個(gè)時(shí)延閾值,按照從小到大進(jìn)行排列,具體對(duì)應(yīng)到t1至t10共十個(gè)級(jí)別,例如對(duì)于區(qū)間1來(lái)說(shuō),設(shè)置a1至a10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間2來(lái)說(shuō),設(shè)置b1至b10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間3來(lái)說(shuō),設(shè)置c1至c10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間4來(lái)說(shuō),設(shè)置d1至d10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間5來(lái)說(shuō),設(shè)置e1至e10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間6來(lái)說(shuō),設(shè)置f1至f10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間7來(lái)說(shuō),設(shè)置g1至g10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間8來(lái)說(shuō),設(shè)置h1至h10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間9來(lái)說(shuō),設(shè)置i1至i10共10個(gè)時(shí)延閾值,對(duì)于區(qū)間10來(lái)說(shuō),設(shè)置j1至j10共10個(gè)時(shí)延閾值,具體可參見(jiàn)下表1:
表1
其中,t1至t10共十個(gè)級(jí)別分別對(duì)應(yīng)0.1%至1%的慢io,其中t10對(duì)應(yīng)99.9%的io都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的2倍,t9對(duì)應(yīng)99.8%的io都返回時(shí)對(duì)應(yīng)的時(shí)延的2倍;t8對(duì)應(yīng)99.7%的io都返回時(shí)對(duì)應(yīng)的時(shí)延的2倍;t7對(duì)應(yīng)99.6%的io都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的2倍,t6對(duì)應(yīng)99.5%的io都返回時(shí)對(duì)應(yīng)的時(shí)延的2倍;t5對(duì)應(yīng)99.4%的io都返回時(shí)對(duì)應(yīng)的時(shí)延的2倍;t4對(duì)應(yīng)99.3%的io都返回時(shí)對(duì)應(yīng)的時(shí)延平均值的2倍,t3對(duì)應(yīng)99.2%的io都返回時(shí)對(duì)應(yīng)的時(shí)延的2倍;t2對(duì)應(yīng)99.1%的io都返回時(shí)對(duì)應(yīng)的時(shí)延的2倍;ti對(duì)應(yīng)99.0%的io都返回時(shí)對(duì)應(yīng)的時(shí)延的2倍。
可以理解的是,具體時(shí)延閾值可根據(jù)實(shí)測(cè)數(shù)據(jù),在2倍微調(diào)的基礎(chǔ)上做微調(diào):x+*%的io均返回對(duì)應(yīng)的時(shí)延*2。注:這里x表示2倍的基礎(chǔ)值,是一個(gè)固定值。
具體的一個(gè)區(qū)間對(duì)應(yīng)具有多少個(gè)時(shí)延閾值的至少兩個(gè)時(shí)延閾值可按照一個(gè)大周期進(jìn)行刷新,即相當(dāng)于系統(tǒng)中為每一種區(qū)間劃分均對(duì)應(yīng)設(shè)置了多個(gè)至少兩個(gè)時(shí)延閾值,每一至少兩個(gè)時(shí)延閾值中的時(shí)延閾值的數(shù)量可以相同或者不相同。
下面對(duì)具體的調(diào)整過(guò)程進(jìn)行介紹,以單個(gè)區(qū)間的讀io請(qǐng)求的調(diào)整為例,多個(gè)區(qū)間的調(diào)整為同時(shí)調(diào)整同一級(jí)別的時(shí)延閾值,與單個(gè)區(qū)間的調(diào)整類(lèi)似,對(duì)于單個(gè)區(qū)間的io,其時(shí)延閾值先采用最大的時(shí)延閾值,比如時(shí)延閾值t10,先把大于t10這個(gè)閾值沒(méi)返回的讀io請(qǐng)求識(shí)別為慢io(t10對(duì)應(yīng)0.1%的io),經(jīng)過(guò)一定周期后,此處為一個(gè)第一周期,得到該周期內(nèi)所有讀io請(qǐng) 求都返回的一個(gè)延時(shí)分布情況,以及讀io請(qǐng)求都返回的時(shí)延值的平均值,即t10的時(shí)延平均值,該t10的時(shí)延平均值能夠反映t10時(shí)的延時(shí)分布情況,并將下一個(gè)第一周期的時(shí)延閾值調(diào)整為t9。在下一個(gè)第一周期,即時(shí)延閾值t9的第一周期內(nèi),重復(fù)上面的過(guò)程,并統(tǒng)計(jì)該周期內(nèi)所有io的時(shí)延分布情況以及t9的時(shí)延平均值:如果t9的時(shí)延平均值不大于t10的時(shí)延平均值,即分布情況變好好或者沒(méi)有明顯的變化,可以將接下來(lái)一個(gè)第一周期的時(shí)延閾值設(shè)置為時(shí)延閾值t8,繼續(xù)接下來(lái)一個(gè)第一周期的處理,重復(fù)上述處理過(guò)程,得到分布情況以及t8的時(shí)延平均值。
如果t8的時(shí)延平均值大于t9的時(shí)延平均值時(shí),表示這個(gè)第一周期的時(shí)延分布情況明顯比上一個(gè)周期惡化,則將下一個(gè)第一周期的時(shí)延閾值調(diào)整為時(shí)延閾值t9;在下一個(gè)第一周期,重復(fù)上述處理過(guò)程,得到分布情況以及第二個(gè)t9的時(shí)延平均值,并將下一個(gè)第一周期的時(shí)延閾值調(diào)整為時(shí)延閾值t8。下一個(gè)第一周期內(nèi),統(tǒng)計(jì)該周期內(nèi)所有io的時(shí)延分布情況以及第二個(gè)t8的時(shí)延平均值。如果第二個(gè)t8的時(shí)延平均值大于第二個(gè)t9的時(shí)延平均值,表示這個(gè)第一周期的時(shí)延分布情況明顯比t9周期惡化,則此時(shí)重新從t10開(kāi)始慢io的識(shí)別處理或者折半處理,折半處理即如果當(dāng)前的閾值是t1,則回退到t5。此時(shí)最優(yōu)的時(shí)延閾值就是t9,在繼續(xù)從t10到t1周期輪轉(zhuǎn)過(guò)程中,如果沒(méi)有找到比t9更優(yōu)的閾值,就一直使用該閾值t9。如果找到更優(yōu)的閾值,則更新識(shí)別慢io的基準(zhǔn)值為該更優(yōu)的閾值。若極端情況下,t8的時(shí)延分布情況一直比t9的惡化,那么將一直使用t9作為判斷慢io的基準(zhǔn)值。以此方式完成預(yù)定次數(shù)的時(shí)延閾值的變更次數(shù)值,完成一個(gè)第二周期。
上面對(duì)本發(fā)明實(shí)施例的數(shù)據(jù)讀取方法進(jìn)行了介紹,下面對(duì)本發(fā)明實(shí)施例的raid控制器進(jìn)行介紹,請(qǐng)參閱圖4,圖4是本發(fā)明實(shí)施例的raid控制器的一個(gè)實(shí)施例圖,該raid控制器4可包括:
接收模塊401,用于接收主機(jī)下發(fā)的讀輸入輸出io請(qǐng)求;
其中,該接收模塊401可以實(shí)現(xiàn)圖2所示實(shí)施例中步驟201。
確定模塊402,用于根據(jù)讀io請(qǐng)求的大小確定讀io請(qǐng)求所屬的區(qū)間集合中的區(qū)間,區(qū)間集合包括至少兩個(gè)區(qū)間,區(qū)間集合中的區(qū)間為預(yù)先根據(jù)io請(qǐng)求的大小劃分的,區(qū)間集合中的每個(gè)區(qū)間對(duì)應(yīng)目標(biāo)時(shí)延閾值;
其中,該確定模塊402可以實(shí)現(xiàn)圖2所示實(shí)施例中步驟202,具體的讀io請(qǐng)求的區(qū)間分配與圖2所示實(shí)施例中針對(duì)步驟202的說(shuō)明類(lèi)似,此處不再贅述。
調(diào)整模塊403,用于每隔預(yù)設(shè)的第一周期按照預(yù)設(shè)的閾值調(diào)整策略調(diào)整區(qū)間集合中的區(qū)間的目標(biāo)時(shí)延閾值;
其中,調(diào)整模塊403可以實(shí)現(xiàn)圖2所示實(shí)施例中步驟203,具體的目標(biāo)時(shí)延閾值的調(diào)整方式與圖2所示實(shí)施例中步驟203類(lèi)似,此處不再贅述。
監(jiān)測(cè)模塊404,用于監(jiān)測(cè)讀io請(qǐng)求的返回時(shí)的時(shí)延值;
其中,該監(jiān)測(cè)模塊404可以實(shí)現(xiàn)圖2所示實(shí)施例中步驟204,該監(jiān)控是以第一周期為單位或者第二周期為單位進(jìn)行的。
降級(jí)讀模塊405,用于確定讀io請(qǐng)求的時(shí)延值超出讀io請(qǐng)求所屬區(qū)間對(duì)應(yīng)的目標(biāo)時(shí)延閾值時(shí),對(duì)讀io請(qǐng)求進(jìn)行降級(jí)讀操作。
其中,該監(jiān)測(cè)模塊405可以實(shí)現(xiàn)圖2所示實(shí)施例中步驟205,即可對(duì)超出該目標(biāo)時(shí)延閾值的讀io請(qǐng)求進(jìn)行判斷,將讀io請(qǐng)求的時(shí)延值超出該讀io所屬區(qū)間對(duì)應(yīng)的目標(biāo)時(shí)延閾值時(shí),該讀io請(qǐng)求確定為超時(shí)io請(qǐng)求,在確定出這些超時(shí)io請(qǐng)求之后,即可對(duì)這些超時(shí)io請(qǐng)求進(jìn)行降級(jí)讀操作。
可以看出,首先通過(guò)接收模塊401接收主機(jī)下發(fā)的讀io請(qǐng)求,而后由確定模塊402確定該讀io請(qǐng)求具體所屬的區(qū)間,該區(qū)間對(duì)應(yīng)有目標(biāo)時(shí)延閾值,該目標(biāo)時(shí)延閾值是由調(diào)整模塊403按照每隔預(yù)設(shè)的第一周期根據(jù)預(yù)設(shè)的閾值調(diào)整策略進(jìn)行調(diào)整得到的,而后監(jiān)測(cè)模塊404會(huì)對(duì)該讀io請(qǐng)求的返回時(shí)的時(shí)延值進(jìn)行監(jiān)測(cè),當(dāng)該時(shí)延值超過(guò)該讀io請(qǐng)求所屬區(qū)間對(duì)應(yīng)的目標(biāo)時(shí)延值時(shí),標(biāo)識(shí)該由降級(jí)讀模塊405對(duì)該讀io請(qǐng)求進(jìn)行降級(jí)讀操作,可以看出,目標(biāo)時(shí)延閾值在運(yùn)行過(guò)程中并非一直不變的,而是根據(jù)不同的讀io請(qǐng)求分布情況選擇對(duì)應(yīng)的至少兩個(gè)時(shí)延閾值中確定的目標(biāo)時(shí)延閾值或者直接對(duì)目標(biāo)時(shí)延閾值直接更新,從而能夠有效減小系統(tǒng)平均時(shí)延,提升采用本發(fā)明實(shí)施例的raid的qos,將ssd的raid性能最大限度的利用,從而提高raid的io性能。
可選的,區(qū)間集合中的每個(gè)區(qū)間對(duì)應(yīng)至少兩個(gè)時(shí)延閾值,此時(shí)調(diào)整模塊403可具體用于:
每隔預(yù)設(shè)的第一周期按照預(yù)設(shè)的閾值調(diào)整策略從區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中所選擇出目標(biāo)時(shí)延閾值。
其中,調(diào)整模塊403的具體調(diào)整方式可以是按照預(yù)設(shè)的閾值調(diào)整策略從每個(gè)區(qū)間對(duì)應(yīng)的至少兩個(gè)大小不同的時(shí)延閾值中選取的一個(gè)作為目標(biāo)時(shí)延閾值,具體的兩種調(diào)整方式與圖2所示實(shí)施例步驟203中的兩種調(diào)整方式類(lèi)似,此處不再贅述。
需要說(shuō)明的是,除了上述預(yù)設(shè)至少兩個(gè)時(shí)延閾值,并選擇選取一個(gè)作為目標(biāo)時(shí)延閾值之外,還可按照預(yù)設(shè)的閾值調(diào)整策略直接更新目標(biāo)時(shí)延閾值,而非實(shí)現(xiàn)預(yù)設(shè)多個(gè)并從中選擇。
可選的,調(diào)整模塊403還具體用于:
計(jì)算當(dāng)前第一周期內(nèi)的主機(jī)下發(fā)的讀io請(qǐng)求的時(shí)延值的時(shí)延平均值;
根據(jù)時(shí)延平均值從區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中調(diào)整目標(biāo)時(shí)延閾值。
可以看出,具體的閾值調(diào)整策略可以是先計(jì)算當(dāng)前第一周期內(nèi)的讀io請(qǐng)求的時(shí)延值的時(shí)延平均值,而后以該時(shí)延平均值為基礎(chǔ),從區(qū)間的至少兩個(gè)時(shí)延閾值中調(diào)整目標(biāo)時(shí)延閾值,由于時(shí)延平均值反應(yīng)讀io請(qǐng)求的分部情況,因此按照時(shí)延平均值進(jìn)行調(diào)整能夠達(dá)到符合預(yù)期變化的目的。具體的時(shí)延平均值的調(diào)整策略與圖2所示實(shí)施例中步驟203的說(shuō)明中時(shí)延平均值的調(diào)整策略類(lèi)似,此處不再贅述。
可選的,至少兩個(gè)時(shí)延閾值包括從小到大排列中的時(shí)延閾值t1至?xí)r延閾值tm,m為大于1的整數(shù),調(diào)整模塊403還具體用于:
在第二周期內(nèi)的第一個(gè)第一周期將區(qū)間集合中區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為目標(biāo)時(shí)延閾值,第二周期包括至少兩個(gè)第一周期;
統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第一時(shí)延平均值,x大于1且小于m的整數(shù);
將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-1確認(rèn)為目標(biāo)時(shí)延閾值。
可以看出,上述是針對(duì)一個(gè)區(qū)間進(jìn)行的說(shuō)明,在上述區(qū)間具有m個(gè)時(shí)延閾值時(shí),區(qū)間集合內(nèi)其他區(qū)間同樣具有m個(gè)時(shí)延閾值,相當(dāng)于區(qū)間集合內(nèi)的 區(qū)間的時(shí)延閾值均分為了m個(gè)級(jí)別,每次進(jìn)行調(diào)整時(shí),是對(duì)所有區(qū)間的時(shí)延閾值進(jìn)行統(tǒng)一調(diào)整,如其中一個(gè)區(qū)間調(diào)整至m-3級(jí)別,所有區(qū)間均調(diào)整為m-3級(jí)別。具體的通過(guò)時(shí)延平均值對(duì)比的調(diào)整策略與圖3所示實(shí)施例中步驟301、步驟302和步驟303的中通過(guò)時(shí)延平均值對(duì)比的調(diào)整策略類(lèi)似,此處不再贅述。
可選的,調(diào)整模塊403還可用于:
統(tǒng)計(jì)時(shí)延閾值為時(shí)延閾值tx-1時(shí)的第一周期內(nèi)的讀io請(qǐng)求的第二時(shí)延平均值;
當(dāng)?shù)诙r(shí)延平均值不大于第一時(shí)延平均值時(shí),將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx-2確認(rèn)為下一第一周期的目標(biāo)時(shí)延閾值。
可以看出,若當(dāng)前第一周期相對(duì)于上一第一周期的時(shí)延平均值變小或者相等,則表示讀io請(qǐng)求的分部情況并未發(fā)生惡化,此時(shí)會(huì)將目標(biāo)延時(shí)閾值調(diào)小,以符合當(dāng)前讀io請(qǐng)求分布情況的變化趨勢(shì)。具體的通過(guò)時(shí)延平均值對(duì)比的調(diào)整策略與圖3所示實(shí)施例中步驟304和步驟305的中通過(guò)時(shí)延平均值對(duì)比的調(diào)整策略類(lèi)似,此處不再贅述。
可選的,調(diào)整模塊403還可用于:
當(dāng)?shù)诙r(shí)延平均值大于第一時(shí)延平均值時(shí),將區(qū)間集合中的區(qū)間的至少兩個(gè)時(shí)延閾值中的時(shí)延閾值tx確認(rèn)為下一第一周期的目標(biāo)時(shí)延閾值。
可以看出,若當(dāng)前第一周期相對(duì)于上一第一周期的時(shí)延平均值變大,則表示讀io請(qǐng)求的分部情況發(fā)生惡化,此時(shí)會(huì)將目標(biāo)延時(shí)閾值調(diào)大,以符合當(dāng)前讀io請(qǐng)求分布情況的變化趨勢(shì)。具體的通過(guò)時(shí)延平均值對(duì)比的調(diào)整策略與圖3所示實(shí)施例中步驟306的中通過(guò)時(shí)延平均值對(duì)比的調(diào)整策略類(lèi)似,此處不再贅述。
下面對(duì)本發(fā)明實(shí)施例中raid控制器的結(jié)構(gòu)進(jìn)行描述,請(qǐng)參閱圖5,圖5是本發(fā)明實(shí)施例的raid控制器的一個(gè)實(shí)施例圖,其中,raid控制器5可包括均與總線相連接的至少一個(gè)raid處理器501、至少一個(gè)通信接口502和至少一個(gè)硬盤(pán)接口503,本發(fā)明實(shí)施例涉及的raid控制器5可以具有比圖5所示出的更多或更少的部件,可以組合兩個(gè)或更多個(gè)部件,或者可以具有不同的部件配置或設(shè)置,各個(gè)部件可以在包括一個(gè)或多個(gè)信號(hào)處理和/或?qū)S眉? 電路在內(nèi)的硬件、軟件或硬件和軟件的組合實(shí)現(xiàn)。
具體的,對(duì)于圖4所示的實(shí)施例來(lái)說(shuō),該raid處理器501能實(shí)現(xiàn)圖4所示實(shí)施例中確定模塊402、調(diào)整模塊403、監(jiān)測(cè)模塊404和降級(jí)讀模塊405的功能,該通信接口502能實(shí)現(xiàn)圖4所示實(shí)施例中的接收模塊401的功能,該硬盤(pán)接口503能實(shí)現(xiàn)該raid控制器向磁盤(pán)發(fā)送降級(jí)讀的指令或者讀io請(qǐng)求的正常讀取指令。其中,硬盤(pán)接口503可包括多種類(lèi)型,例如scsi接口、和串行高級(jí)技術(shù)附件(serialadvancedtechnologyattachment,sata)接口等。
上面對(duì)采用本發(fā)明實(shí)施例的raid控制器進(jìn)行了介紹,下面對(duì)采用本發(fā)明實(shí)施例的raid控制器的存儲(chǔ)設(shè)備進(jìn)行介紹,請(qǐng)參閱圖6,圖6是本發(fā)明實(shí)施例的存儲(chǔ)設(shè)備的一個(gè)實(shí)施例圖,該存儲(chǔ)設(shè)備可包括至少兩塊硬盤(pán)602與至少兩塊硬盤(pán)均通信連接的raid控制器601,其中,該raid控制器601能夠運(yùn)行存儲(chǔ)于該raid控制器601中的計(jì)算機(jī)執(zhí)行指令以實(shí)現(xiàn)圖2所示實(shí)施例中步驟201至步驟205。
其中,在上述存儲(chǔ)設(shè)備6中,raid控制器601還會(huì)對(duì)硬盤(pán)602進(jìn)行識(shí)別,若發(fā)現(xiàn)并非預(yù)設(shè)的硬盤(pán),例如硬盤(pán)602上設(shè)置一個(gè)識(shí)別碼,raid控制器601對(duì)應(yīng)有識(shí)別碼范圍,只要發(fā)現(xiàn)接入的硬盤(pán)602沒(méi)有這種識(shí)別碼或者識(shí)別碼不在raid控制器601的識(shí)別碼范圍內(nèi),則該硬盤(pán)602無(wú)法接入磁盤(pán)陣列中。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作 為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以?xún)蓚€(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。