亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種快速數(shù)據(jù)讀取方法及裝置制造方法

文檔序號(hào):6639840閱讀:138來(lái)源:國(guó)知局
一種快速數(shù)據(jù)讀取方法及裝置制造方法
【專利摘要】本申請(qǐng)?zhí)峁┮环N快速數(shù)據(jù)讀取方法及裝置,其中該方法包括:接收來(lái)自上層應(yīng)用的數(shù)據(jù)讀命令,根據(jù)預(yù)設(shè)的映射關(guān)系確定該數(shù)據(jù)讀命令在RAID陣列上對(duì)應(yīng)的條帶,其中所述RAID陣列包括多個(gè)硬盤(pán);向操作系統(tǒng)的IO調(diào)度層下發(fā)與條帶中每個(gè)條塊對(duì)應(yīng)的讀取子命令;獲取IO調(diào)度層返回的各個(gè)條塊的數(shù)據(jù),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。相較于現(xiàn)有技術(shù),本申請(qǐng)?jiān)诤芏囗樞蜃x數(shù)據(jù)的場(chǎng)景下較大幅度地提高的硬盤(pán)讀寫(xiě)的速度,且有利于延長(zhǎng)硬盤(pán)的使用壽命。
【專利說(shuō)明】一種快速數(shù)據(jù)讀取方法及裝置

【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及存儲(chǔ)技術(shù),尤其涉及一種快速數(shù)據(jù)讀取方法及裝置。

【背景技術(shù)】
[0002]受惠于計(jì)算機(jī)硬件技術(shù)的發(fā)展,計(jì)算機(jī)的基礎(chǔ)硬件,比如處理器以及內(nèi)存一直基本遵循著摩爾定律在演進(jìn)。對(duì)于目前典型的計(jì)算機(jī)結(jié)構(gòu)而言,處理器以及內(nèi)存,乃至顯卡等硬件往往并非計(jì)算機(jī)整體處理速度的瓶頸,計(jì)算機(jī)整體處理速度的瓶頸一般是硬盤(pán)。受限于諸多原因,傳統(tǒng)硬盤(pán)(比如磁盤(pán)類硬盤(pán))讀寫(xiě)速度的提升相對(duì)比較緩慢。對(duì)于小規(guī)模計(jì)算系統(tǒng)而言,比如PC,其可以通過(guò)使用SSD硬盤(pán)來(lái)彌補(bǔ)這個(gè)缺陷。SSD硬盤(pán)的訪問(wèn)速度遠(yuǎn)遠(yuǎn)高于傳統(tǒng)硬盤(pán)的訪問(wèn)速度,目前有很多高端PC都配備了一定容量的SSD硬盤(pán)。
[0003]在大規(guī)模計(jì)算/存儲(chǔ)系統(tǒng)中,SSD硬盤(pán)受限于容量/價(jià)格等諸多因素而難以被廣泛使用。比如說(shuō)對(duì)于一個(gè)在線視頻服務(wù)提供商而言,其數(shù)據(jù)中心依然會(huì)使用磁盤(pán)類硬盤(pán)來(lái)存儲(chǔ)視頻。在大規(guī)模計(jì)算/存儲(chǔ)系統(tǒng)中,硬盤(pán)的使用方式通常是RAID陣列的方式。RAID技術(shù)是一種廣泛使用的存儲(chǔ)技術(shù),其優(yōu)勢(shì)非常明顯。RAID技術(shù)可以將數(shù)據(jù)并發(fā)寫(xiě)入多個(gè)硬盤(pán),或者從多個(gè)硬盤(pán)中并發(fā)讀出數(shù)據(jù),數(shù)據(jù)讀寫(xiě)速度可以大幅度提升。
[0004]請(qǐng)參考圖1,RAID技術(shù)廣泛應(yīng)用于數(shù)據(jù)中心等大規(guī)模存儲(chǔ)器同中,比如說(shuō),普通用戶訪問(wèn)WWW.youku.com上的某個(gè)視頻時(shí),優(yōu)酷的應(yīng)用服務(wù)器可以通過(guò)存儲(chǔ)網(wǎng)絡(luò)(比如FC網(wǎng)絡(luò)或iSCSI網(wǎng)絡(luò))訪問(wèn)到存儲(chǔ)設(shè)備,存儲(chǔ)設(shè)備從下掛的RAID陣列中獲得其所需要的視頻數(shù)據(jù)返回給應(yīng)用服務(wù)器,由應(yīng)用服務(wù)器返回給用戶。然而對(duì)于RAID陣列的數(shù)據(jù)訪問(wèn)而言,仍然有較大的技術(shù)改善空間。


【發(fā)明內(nèi)容】

[0005]有鑒于此,本申請(qǐng)?zhí)峁┮环N快速數(shù)據(jù)讀取裝置,應(yīng)用于存儲(chǔ)設(shè)備,該裝置包括:
[0006]命令處理單元,接收來(lái)自上層應(yīng)用的數(shù)據(jù)讀命令,根據(jù)預(yù)設(shè)的映射關(guān)系確定該數(shù)據(jù)讀命令在RAID陣列上對(duì)應(yīng)的條帶,其中所述RAID陣列包括多個(gè)硬盤(pán);
[0007]命令下發(fā)單元,向操作系統(tǒng)的1調(diào)度層下發(fā)與條帶中每個(gè)條塊對(duì)應(yīng)的讀取子命令,以便于1調(diào)度層能夠最大限度地將針對(duì)單個(gè)硬盤(pán)上多個(gè)讀取子命令進(jìn)行合并;其中每個(gè)條帶至少包括存有應(yīng)用數(shù)據(jù)的數(shù)據(jù)條塊以及存有校驗(yàn)數(shù)據(jù)的校驗(yàn)條塊;
[0008]數(shù)據(jù)整理單元,獲取1調(diào)度層返回的各個(gè)條塊的數(shù)據(jù),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。
[0009]本申請(qǐng)還提供一種快速數(shù)據(jù)讀取方法,應(yīng)用于存儲(chǔ)設(shè)備上,該方法包括:
[0010]接收來(lái)自上層應(yīng)用的數(shù)據(jù)讀命令,根據(jù)預(yù)設(shè)的映射關(guān)系確定該數(shù)據(jù)讀命令在RAID陣列上對(duì)應(yīng)的條帶,其中所述RAID陣列包括多個(gè)硬盤(pán);
[0011]向操作系統(tǒng)的1調(diào)度層下發(fā)與條帶中每個(gè)條塊對(duì)應(yīng)的讀取子命令,以便于1調(diào)度層能夠最大限度地將針對(duì)單個(gè)硬盤(pán)上多個(gè)讀取子命令進(jìn)行合并;其中每個(gè)條帶至少包括存有應(yīng)用數(shù)據(jù)的數(shù)據(jù)條塊以及存有校驗(yàn)數(shù)據(jù)的校驗(yàn)條塊;
[0012]獲取1調(diào)度層返回的各個(gè)條塊的數(shù)據(jù),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。
[0013]相較于現(xiàn)有技術(shù),本申請(qǐng)?jiān)诤芏囗樞蜃x數(shù)據(jù)的場(chǎng)景下較大幅度低提高的硬盤(pán)讀寫(xiě)的速度,且有利于延長(zhǎng)硬盤(pán)的使用壽命。

【專利附圖】

【附圖說(shuō)明】
[0014]圖1是一個(gè)典型的用戶通過(guò)網(wǎng)絡(luò)訪問(wèn)RAID陣列上數(shù)據(jù)的過(guò)程。
[0015]圖2是一個(gè)典型的RAID陣列中條帶的結(jié)構(gòu)示意圖。
[0016]圖3是一個(gè)典型的條帶中數(shù)據(jù)分布示意圖。
[0017]圖4A是一個(gè)例子中存儲(chǔ)設(shè)備的硬件結(jié)構(gòu)圖。
[0018]圖4B是一個(gè)例子中快速數(shù)據(jù)讀取裝置的邏輯結(jié)構(gòu)圖。
[0019]圖5是一個(gè)例子中快速數(shù)據(jù)讀取方法的處理流程圖。
[0020]圖6是另一個(gè)例子中快速數(shù)據(jù)讀取方法的處理流程圖。
[0021]圖7是一個(gè)例子中快速數(shù)據(jù)讀取方法在數(shù)據(jù)合并上的效果對(duì)比圖。
[0022]圖8A是一個(gè)測(cè)試?yán)又鞋F(xiàn)有技術(shù)的數(shù)據(jù)讀取效果示意圖。
[0023]圖8B是圖8A同一場(chǎng)景下本申請(qǐng)數(shù)據(jù)讀取效果示意圖。
[0024]圖9A是另一個(gè)測(cè)試?yán)又鞋F(xiàn)有技術(shù)的數(shù)據(jù)讀取效果示意圖。
[0025]圖9B是圖9A同一場(chǎng)景下本申請(qǐng)數(shù)據(jù)讀取效果示意圖。

【具體實(shí)施方式】
[0026]請(qǐng)參考圖1以及圖2,存儲(chǔ)設(shè)備下掛有存儲(chǔ)空間巨大的RAID陣列,其可以同時(shí)為多個(gè)位于前端的主機(jī)(比如各種應(yīng)用服務(wù)器)提供存儲(chǔ)服務(wù)。從服務(wù)的形式上來(lái)說(shuō),存儲(chǔ)設(shè)備會(huì)給主機(jī)提供邏輯意義上的存儲(chǔ)資源,其對(duì)于主機(jī)而言就好像主機(jī)本地的一個(gè)邏輯盤(pán)一樣。主機(jī)上運(yùn)行的各種上層應(yīng)用程序都可以訪問(wèn)邏輯盤(pán)上的數(shù)據(jù)。
[0027]請(qǐng)參考圖2,以順序讀數(shù)據(jù)為例,對(duì)于主機(jī)的應(yīng)用程序而言,其讀取邏輯盤(pán)的數(shù)據(jù)是依次讀取的,比如說(shuō)讀取圖2中DO到D15這16個(gè)地址連續(xù)的數(shù)據(jù)塊中的數(shù)據(jù)。然而這些數(shù)據(jù)事實(shí)上是存放在RAID陣列上的,讀取這些數(shù)據(jù)要經(jīng)過(guò)存儲(chǔ)設(shè)備的處理。存儲(chǔ)設(shè)備通常保存著邏輯盤(pán)與物理硬盤(pán)之間的地址映射關(guān)系,也就是說(shuō)針對(duì)邏輯盤(pán)的訪問(wèn)可以映射到針對(duì)物理硬盤(pán)的訪問(wèn)。主機(jī)應(yīng)用程序訪問(wèn)了一段連續(xù)邏輯地址空間中的數(shù)據(jù),但是存儲(chǔ)設(shè)備讀取的卻并非是連續(xù)物理地址空間中的數(shù)據(jù)。
[0028]在RAID陣列中,數(shù)據(jù)是按照條帶(Stripe)的方式組織的,條塊(Block)是陣列中一塊物理硬盤(pán)上的一些連續(xù)扇區(qū),是組成陣列的基本單元,多個(gè)條塊(通常位于不同硬盤(pán)同一位置)組成陣列的條帶。假設(shè)一個(gè)3+1的RAID5陣列,條塊大小為32KB,則條帶大小為3*32KB = 96KB,其中3個(gè)條塊為數(shù)據(jù)條塊,存放有用的應(yīng)用數(shù)據(jù)(也稱為“業(yè)務(wù)數(shù)據(jù)”),剩余一個(gè)校驗(yàn)條塊中存儲(chǔ)本條帶的校驗(yàn)數(shù)據(jù),并非真實(shí)的業(yè)務(wù)數(shù)據(jù),故不計(jì)入條帶大小。
[0029]在RAID陣列處于正常狀態(tài)(具有冗余性)時(shí),針對(duì)讀業(yè)務(wù),由于沒(méi)有故障硬盤(pán),不需要讀校驗(yàn)條塊數(shù)據(jù),直接讀取命中的數(shù)據(jù)條塊,讀取成功后,將命令返回成功。在RAID陣列某一個(gè)硬盤(pán)故障之后,此時(shí)陣列處于降級(jí)狀態(tài),校驗(yàn)數(shù)據(jù)將發(fā)揮作用。此時(shí)針對(duì)讀業(yè)務(wù),如果有一個(gè)需要讀取的數(shù)據(jù)條塊位于故障硬盤(pán)無(wú)法讀取,那么需要讀出同一條帶中校驗(yàn)條塊和其它數(shù)據(jù)條塊中的數(shù)據(jù),使用這些數(shù)據(jù)按照預(yù)定RAID算法(比如異或算法)計(jì)算出故障條塊的數(shù)據(jù),然后返回成功。對(duì)于一些級(jí)別更高的RAID陣列,比如RAID6陣列,處理更為復(fù)雜一些,但基本原理相同,不再贅述。
[0030]從上一段的描述可以看出,對(duì)于現(xiàn)有的RAID陣列的讀命令(讀10)而言,陣列的校驗(yàn)條塊中的校驗(yàn)數(shù)據(jù)僅在需要恢復(fù)故障數(shù)據(jù)條塊時(shí)才會(huì)讀取。如果條帶的每個(gè)條塊都正常,則讀數(shù)據(jù)時(shí)并不需要讀取校驗(yàn)條塊,直接讀取命令對(duì)應(yīng)的數(shù)據(jù)條塊即可。請(qǐng)參考圖3,假設(shè)一個(gè)陣列是2+1的RAID5陣列,對(duì)于陣列的順序讀數(shù)據(jù)業(yè)務(wù)而言,比如讀取視頻數(shù)據(jù)這樣的業(yè)務(wù),假設(shè)目前陣列狀態(tài)正常,校驗(yàn)條塊和數(shù)據(jù)條塊的分布如圖3所示。順序讀數(shù)據(jù)業(yè)務(wù)會(huì)連續(xù)讀取陣列中所有數(shù)據(jù)條塊,跳過(guò)所有校驗(yàn)條塊。從單塊硬盤(pán)的角度看,是每隔一個(gè)條塊(校驗(yàn)條塊)可以讀取兩個(gè)連續(xù)條塊(數(shù)據(jù)條塊),即所有的需要讀取的數(shù)據(jù)在硬盤(pán)上的存儲(chǔ)地址空間并不是連續(xù)的。
[0031]這種地址空間的不連續(xù)對(duì)于存儲(chǔ)設(shè)備操作系統(tǒng)的1調(diào)度層面的利用效率而言是不利的。以存儲(chǔ)設(shè)備上應(yīng)用最為廣泛的Linux系統(tǒng)為例,Linux系統(tǒng)的塊1子系統(tǒng)(10調(diào)度層面)有1調(diào)度機(jī)制,該機(jī)制會(huì)對(duì)下發(fā)過(guò)來(lái)的讀命令(本例中的讀取子命令)進(jìn)行排序和合并,只有地址連續(xù)的多個(gè)讀命令(讀10)才能合并起來(lái)變成一個(gè)讀10。這里的地址連續(xù)通常是指一個(gè)命令的首地址和另一個(gè)命令的尾地址在物理硬盤(pán)上的Iba地址剛好是連續(xù)的。此時(shí)對(duì)照?qǐng)D3來(lái)看,由于存儲(chǔ)設(shè)備會(huì)通過(guò)解析確定所有需要讀取的數(shù)據(jù)條塊,然后相應(yīng)下發(fā)多個(gè)讀10,此時(shí)多個(gè)讀1在塊1子系統(tǒng)調(diào)度時(shí),單次可以合并的1數(shù)目就非常有限。以圖3為例,一次最多只能合并兩個(gè)讀10,即對(duì)硬盤(pán)來(lái)說(shuō),將兩次讀取操作合并為一次讀取操作。
[0032]請(qǐng)參考圖4A以及圖4B,在一個(gè)例子中,本申請(qǐng)為存儲(chǔ)設(shè)備提供一種快速數(shù)據(jù)讀取方案。其中存儲(chǔ)設(shè)備可以包括處理器、內(nèi)存、非易失性存儲(chǔ)器(比如硬盤(pán))以及內(nèi)部總線,當(dāng)然存儲(chǔ)設(shè)備在實(shí)際使用時(shí)一般都會(huì)通過(guò)接口掛接一個(gè)或者多個(gè)RAID陣列。上述方案可以通過(guò)計(jì)算機(jī)軟件實(shí)現(xiàn),也可以通過(guò)硬件或邏輯器件實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,所述處理器可以將相應(yīng)的計(jì)算機(jī)程序指令從非易失性存儲(chǔ)器讀入內(nèi)存中然后運(yùn)行,在邏輯意義上形成快速數(shù)據(jù)讀取裝置。在邏輯層面,該快速數(shù)據(jù)讀取裝置包括:命令處理單元、命令下發(fā)單元以及數(shù)據(jù)整理單元。請(qǐng)參考圖5,該裝置在圖像處理設(shè)備上運(yùn)行的過(guò)程中,執(zhí)行如下處理方法。
[0033]步驟501,命令處理單元,接收來(lái)自上層應(yīng)用的數(shù)據(jù)讀命令,根據(jù)預(yù)設(shè)的映射關(guān)系確定該數(shù)據(jù)讀命令在RAID陣列上對(duì)應(yīng)的條帶,其中所述RAID陣列包括多個(gè)硬盤(pán);
[0034]步驟502,命令下發(fā)單元,向操作系統(tǒng)的1調(diào)度層下發(fā)與條帶中每個(gè)條塊對(duì)應(yīng)的讀取子命令,以便于1調(diào)度層能夠最大限度地將針對(duì)單個(gè)硬盤(pán)上多個(gè)讀取子命令進(jìn)行合并;其中每個(gè)條帶至少包括存有應(yīng)用數(shù)據(jù)的數(shù)據(jù)條塊以及存有校驗(yàn)數(shù)據(jù)的校驗(yàn)條塊;
[0035]步驟503,數(shù)據(jù)整理單元,獲取1調(diào)度層返回的各個(gè)條塊的數(shù)據(jù),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。
[0036]以下結(jié)合更為詳細(xì)的例子來(lái)介紹上述方案的優(yōu)勢(shì)。RAID陣列上存儲(chǔ)的數(shù)據(jù)通常隸屬于各種上層應(yīng)用,當(dāng)然這些上層應(yīng)用只能“看到”數(shù)據(jù)存儲(chǔ)在邏輯盤(pán)上。上層應(yīng)用對(duì)數(shù)據(jù)的讀取一般包括兩種類型,一種類型是順序讀取,另一種是隨機(jī)讀取。本申請(qǐng)的方案在順序讀取上具有較大的技術(shù)優(yōu)勢(shì)。視頻等多媒體應(yīng)用通常是典型的順序讀取數(shù)據(jù)的應(yīng)用,比如說(shuō)視頻服務(wù)器讀取為用戶終端讀取視頻數(shù)據(jù),這些視頻數(shù)據(jù)在邏輯盤(pán)上通常都是順序存放的。但如前所述,在物理硬盤(pán)上,包括視頻數(shù)據(jù)在內(nèi)的各種應(yīng)用數(shù)據(jù)通常卻不是順序存放。
[0037]請(qǐng)參考圖6,如前所述上層應(yīng)用下發(fā)讀命令之后,存儲(chǔ)設(shè)備會(huì)根據(jù)預(yù)先創(chuàng)建的映射關(guān)系來(lái)確定當(dāng)前讀取的邏輯地址空間所對(duì)應(yīng)的物理地址空間。這種映射關(guān)系是存儲(chǔ)設(shè)備向主機(jī)提供邏輯盤(pán)時(shí)預(yù)先創(chuàng)建好的。假設(shè)上層應(yīng)用要讀寫(xiě)的邏輯地址是101-250長(zhǎng)度為150的一段數(shù)據(jù)。值得注意的是,這里長(zhǎng)度大小僅僅為方便理解本發(fā)明所做出的示例。請(qǐng)參考圖7,假設(shè)這段長(zhǎng)度為150的數(shù)據(jù)分別映射在DO到D14這15個(gè)數(shù)據(jù)條塊中。按照目前的處理方式,存儲(chǔ)設(shè)備會(huì)根據(jù)上述映射關(guān)系確定出DO到D14這15個(gè)數(shù)據(jù)條塊,然后下發(fā)15個(gè)對(duì)應(yīng)的讀取子命令到自身操作系統(tǒng)的1調(diào)度層面。與傳統(tǒng)技術(shù)不同的是,本申請(qǐng)根據(jù)映射關(guān)系確定出對(duì)應(yīng)的條帶是StripeO到Stripe5,此時(shí)存儲(chǔ)設(shè)備生成的子命令除了包括對(duì)應(yīng)DO到D14這15個(gè)數(shù)據(jù)條塊的子命令,還包括對(duì)應(yīng)于PO到P4這5個(gè)校驗(yàn)條塊中的校驗(yàn)數(shù)據(jù)。
[0038]相對(duì)于現(xiàn)有技術(shù)而言,此時(shí)存儲(chǔ)設(shè)備需要讀取的數(shù)據(jù)長(zhǎng)度增加了 50,增幅約為33.3%,下發(fā)給操作系統(tǒng)1調(diào)度層面的子命令數(shù)量也增加了約33.3%,而且這些額外讀取的數(shù)據(jù)是校驗(yàn)數(shù)據(jù),對(duì)于上層應(yīng)用而言是沒(méi)有意義的。按照一般的技術(shù)思路來(lái)看,多讀取數(shù)據(jù)無(wú)疑會(huì)降低響應(yīng)速度。然而本申請(qǐng)充分考慮了 1調(diào)度機(jī)制的實(shí)現(xiàn),通過(guò)增加讀取長(zhǎng)度來(lái)使得其讀取速度更快。請(qǐng)參考圖7所示,在本申請(qǐng)中,對(duì)于硬盤(pán)I的讀取而言,操作系統(tǒng)1調(diào)度層面會(huì)針對(duì)D0、D3、D6、P3、D12這5個(gè)條塊中數(shù)據(jù)進(jìn)行處理,由于D0、D3、D6、P3、D12這5個(gè)條塊的地址空間是連續(xù)的,因此操作系統(tǒng)1調(diào)度層面可以將其合并為一個(gè)讀命令(起始地址為1,結(jié)束地址為50),而針對(duì)其他硬盤(pán)處理是一樣的。這也就是說(shuō)經(jīng)過(guò)操作系統(tǒng)1調(diào)度層面的處理之后,20個(gè)讀取子命令被合并為4個(gè)讀命令,經(jīng)過(guò)SCSI等處理之后通過(guò)驅(qū)動(dòng)分別下發(fā)給4個(gè)硬盤(pán)。請(qǐng)繼續(xù)參考圖7橫向虛線以下部分,反觀現(xiàn)有技術(shù),由于其并沒(méi)有讀取校驗(yàn)條塊的讀取子命令,最終經(jīng)過(guò)操作系統(tǒng)1調(diào)度層面處理之后,針對(duì)單個(gè)硬盤(pán)而言,將會(huì)下發(fā)2個(gè)讀命令,也就是說(shuō)操作系統(tǒng)1調(diào)度層面下發(fā)到4個(gè)硬盤(pán)的讀命令為8個(gè)。
[0039]對(duì)于硬盤(pán)而言,尤其是磁盤(pán)類硬盤(pán)而言,讀取數(shù)據(jù)量的大小固然會(huì)影響到響應(yīng)速度,而讀數(shù)據(jù)的次數(shù)也對(duì)響應(yīng)速度有較大的影響。對(duì)于磁盤(pán)類硬盤(pán)來(lái)說(shuō),其是通過(guò)馬達(dá)帶動(dòng)磁頭轉(zhuǎn)動(dòng)到盤(pán)面上相應(yīng)位置來(lái)讀取數(shù)據(jù)的,磁頭不斷變化起始位置事實(shí)上也會(huì)對(duì)讀取速度有很大影響。從以上描述可以看出,雖然讀取數(shù)據(jù)量有了一定幅度的增加,針對(duì)硬盤(pán)的讀命令顯著減少,因此整體的響應(yīng)速度卻有相當(dāng)不錯(cuò)的提升。此外,磁盤(pán)類硬盤(pán)的壽命與讀寫(xiě)次數(shù)有關(guān),讀命令越多,則硬盤(pán)的使用壽命越短。因此本申請(qǐng)不但可以提升讀取數(shù)據(jù)的響應(yīng)速度,還可以提升硬盤(pán)的使用壽命。
[0040]請(qǐng)繼續(xù)參考圖6,在讀命令下發(fā)之后,數(shù)據(jù)被讀取上來(lái),此時(shí)驅(qū)動(dòng)可以針對(duì)錯(cuò)誤情況進(jìn)行一些處理,具體可以參考現(xiàn)有技術(shù)。接下來(lái)經(jīng)過(guò)驅(qū)動(dòng)到達(dá)操作系統(tǒng)1調(diào)度層面。由于1調(diào)度層面保存了子命令的合并關(guān)系,因此可以確定出哪些子命令獲得了返回(即獲得返回的條塊中的數(shù)據(jù)),如果沒(méi)有全部返回則可以繼續(xù)等待。子命令的返回的情況分為兩種,一種是返回成功,一種是返回錯(cuò)誤。當(dāng)所有子命令都返回之后,此時(shí)可以判斷是否存在讀錯(cuò)誤。如果存在數(shù)據(jù)條塊讀錯(cuò)誤,則可以進(jìn)入恢復(fù)處理。如果沒(méi)有,則可以在步驟203進(jìn)行過(guò)濾等處理之后結(jié)束。
[0041]在恢復(fù)處理過(guò)程中,并非所有讀錯(cuò)誤都能恢復(fù),這取決于錯(cuò)誤數(shù)量以及RAID的級(jí)另IJ,其基本原則是:若錯(cuò)誤數(shù)量不大于一個(gè)條帶中校驗(yàn)條塊的數(shù)量,則根據(jù)RAID算法可以將存在讀錯(cuò)誤的數(shù)據(jù)條塊中的數(shù)據(jù)恢復(fù)出來(lái)。以RAID5為例,在一個(gè)數(shù)據(jù)條塊讀取失敗的情況下:此時(shí)可以使用讀取上來(lái)的校驗(yàn)條塊和其它讀取成功數(shù)據(jù)條塊中的數(shù)據(jù)進(jìn)行異或校驗(yàn),恢復(fù)出讀錯(cuò)誤的數(shù)據(jù)條塊的應(yīng)用數(shù)據(jù)。
[0042]對(duì)于步驟203的過(guò)濾而言,其實(shí)現(xiàn)方式可以有多種,一種速度較快的方式是通過(guò)管理內(nèi)存空間來(lái)實(shí)現(xiàn)。在所有子命令都返回后,如果數(shù)據(jù)條塊都沒(méi)有發(fā)生讀錯(cuò)誤(也稱為“讀失敗”)的情況,裝載校驗(yàn)條塊數(shù)據(jù)的內(nèi)存空間將被釋放,讀命令返回成功給上層應(yīng)用。如果發(fā)生一個(gè)數(shù)據(jù)條塊讀取失敗的情況,使用讀上來(lái)的校驗(yàn)條塊數(shù)據(jù),和其它讀取成功的數(shù)據(jù)條塊數(shù)據(jù)進(jìn)行異或校驗(yàn),恢復(fù)出讀取失敗條塊的數(shù)據(jù),命令返回成功。這樣處理的好處是:無(wú)需等到數(shù)據(jù)條塊發(fā)生讀取失敗后,才下發(fā)讀取校驗(yàn)條塊的子命令,縮短數(shù)據(jù)恢復(fù)及命令返回時(shí)間。也就是說(shuō)額外讀取的校驗(yàn)條塊中的校驗(yàn)數(shù)據(jù),在出現(xiàn)數(shù)據(jù)條塊讀錯(cuò)誤時(shí)可以立刻發(fā)揮作用,進(jìn)一步提升數(shù)據(jù)讀取速度。
[0043]以下通過(guò)幾組數(shù)據(jù)來(lái)說(shuō)明本申請(qǐng)?jiān)诩夹g(shù)上的顯著優(yōu)勢(shì)。
[0044]測(cè)試一:創(chuàng)建2+1的RAID5陣列,選用當(dāng)前主流硬盤(pán),RAID條塊大小為4KB,陣列空間為500GB,進(jìn)行大壓力順序讀取業(yè)務(wù)測(cè)試。查詢物理磁盤(pán)性能統(tǒng)計(jì)信息(1stat命令),采用傳統(tǒng)技術(shù)獲得的結(jié)果可以參考圖8A。全部陣列空間讀取完成耗時(shí)約95分鐘。而采用本申請(qǐng)技術(shù)方案時(shí),查詢物理硬盤(pán)性能統(tǒng)計(jì)信息,請(qǐng)參考圖8B的結(jié)果,可以看出讀命令合并1個(gè)數(shù)(rrqm/s)和性能(rsec/s)明顯優(yōu)于修改前。全部陣列空間讀取完成耗時(shí)約84分鐘。讀取速度明顯提升。針對(duì)圖8A以及圖SB中涉及的參數(shù)說(shuō)明如下,供本領(lǐng)域普通技術(shù)人員參考。
[0045]rrqm/s:每秒進(jìn)行 merge 的讀操作數(shù)目,即 delta (rmerge) /s
[0046]wrqm/s:每秒進(jìn)行 merge 的寫(xiě)操作數(shù)目,即 delta (wmerge) /s
[0047]r/s:每秒完成的讀I/O設(shè)備次數(shù),即delta (r1)/s
[0048]w/s:每秒完成的寫(xiě)I/O設(shè)備次數(shù),即delta (w1)/s
[0049]rsec/s:每秒讀扇區(qū)數(shù),即 delta(rsect)/s
[0050]wsec/s:每秒寫(xiě)扇區(qū)數(shù),即 delta (wsect)/s
[0051]rkB/s:每秒讀K字節(jié)數(shù),是rsect/s的一半,因?yàn)槊可葏^(qū)大小為512字節(jié)。
[0052]wkB/s:每秒寫(xiě)K字節(jié)數(shù),是wsect/s的一半。
[0053]avgrq-sz:平均每次設(shè)備I/O操作的數(shù)據(jù)大小,delta(rsect+wsect)/delta (r1+w1)
[0054]avgqu-sz:平均 I/O 隊(duì)列長(zhǎng)度,即 delta (aveq)/s/1000 (aveq 的單位為毫秒)
[0055]await:平均每次設(shè)備I/O操作的等待時(shí)間(毫秒),即delta(ruse+wuse) /delta (r1+w1)
[0056]svctm:平均每次設(shè)備1/0操作的服務(wù)時(shí)間(毫秒),即delta (use)/delta (r1+w1)
[0057]% unitl:表征硬盤(pán)的使用率。
[0058]測(cè)試二:創(chuàng)建2+1的RAID5陣列,選用當(dāng)前主流硬盤(pán),RAID條塊大小為4KB,陣列空間為500GB,進(jìn)行固定順序讀取業(yè)務(wù)測(cè)試,測(cè)試結(jié)果請(qǐng)參考圖9A與圖9B的對(duì)比,顯然圖9B中本申請(qǐng)技術(shù)方案的測(cè)試結(jié)果顯示出的數(shù)據(jù)讀取性能優(yōu)勢(shì)更加明顯,且硬盤(pán)使用率率更低,有助于提升硬盤(pán)的使用壽命。
[0059]以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種快速數(shù)據(jù)讀取裝置,應(yīng)用于存儲(chǔ)設(shè)備,其特征在于,該裝置包括: 命令處理單元,接收來(lái)自上層應(yīng)用的數(shù)據(jù)讀命令,根據(jù)預(yù)設(shè)的映射關(guān)系確定該數(shù)據(jù)讀命令在RAID陣列上對(duì)應(yīng)的條帶,其中所述RAID陣列包括多個(gè)硬盤(pán); 命令下發(fā)單元,向操作系統(tǒng)的1調(diào)度層下發(fā)與條帶中每個(gè)條塊對(duì)應(yīng)的讀取子命令,以便于1調(diào)度層能夠最大限度地將針對(duì)單個(gè)硬盤(pán)上多個(gè)讀取子命令進(jìn)行合并;其中每個(gè)條帶至少包括存有應(yīng)用數(shù)據(jù)的數(shù)據(jù)條塊以及存有校驗(yàn)數(shù)據(jù)的校驗(yàn)條塊; 數(shù)據(jù)整理單元,獲取1調(diào)度層返回的各個(gè)條塊的數(shù)據(jù),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。
2.如權(quán)利要求1所述的裝置,其特征在于,所述數(shù)據(jù)整理單元進(jìn)一步用于在與各個(gè)子命令對(duì)應(yīng)的各個(gè)條塊的數(shù)據(jù)全部返回后,確定所有數(shù)據(jù)條塊均未發(fā)生讀錯(cuò)誤時(shí),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。
3.如權(quán)利要求2所述的裝置,其特征在于,所述數(shù)據(jù)整理單元進(jìn)一步用于在確定與各個(gè)子命令對(duì)應(yīng)的各個(gè)條塊的數(shù)據(jù)全部返回后且確定數(shù)據(jù)條塊發(fā)生讀錯(cuò)誤時(shí),根據(jù)讀錯(cuò)誤數(shù)量判斷是否可以恢復(fù)出數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù),如果是,則根據(jù)未發(fā)生讀錯(cuò)的數(shù)據(jù)條塊以及校驗(yàn)條塊中的數(shù)據(jù)使用RAID算法恢復(fù)出發(fā)生讀錯(cuò)誤的數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)。
4.如權(quán)利要求2所述的裝置,其特征在于,所述數(shù)據(jù)整理單元進(jìn)一步用于將各個(gè)條塊數(shù)據(jù)被保存在內(nèi)存中,所述過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用具體包括:將校驗(yàn)條塊中的校驗(yàn)數(shù)據(jù)所占用的內(nèi)存空間釋放掉。
5.如權(quán)利要求1所述的裝置,其特征在于,所述硬盤(pán)為磁盤(pán)類硬盤(pán)。
6.一種快速數(shù)據(jù)讀取方法,應(yīng)用于存儲(chǔ)設(shè)備上,其特征在于,該方法包括: 接收來(lái)自上層應(yīng)用的數(shù)據(jù)讀命令,根據(jù)預(yù)設(shè)的映射關(guān)系確定該數(shù)據(jù)讀命令在RAID陣列上對(duì)應(yīng)的條帶,其中所述RAID陣列包括多個(gè)硬盤(pán); 向操作系統(tǒng)的1調(diào)度層下發(fā)與條帶中每個(gè)條塊對(duì)應(yīng)的讀取子命令,以便于1調(diào)度層能夠最大限度地將針對(duì)單個(gè)硬盤(pán)上多個(gè)讀取子命令進(jìn)行合并;其中每個(gè)條帶至少包括存有應(yīng)用數(shù)據(jù)的數(shù)據(jù)條塊以及存有校驗(yàn)數(shù)據(jù)的校驗(yàn)條塊; 獲取1調(diào)度層返回的各個(gè)條塊的數(shù)據(jù),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。
7.如權(quán)利要求6所述的方法,其特征在于,還包括: 在與各個(gè)子命令對(duì)應(yīng)的各個(gè)條塊的數(shù)據(jù)全部返回后,確定所有數(shù)據(jù)條塊均未發(fā)生讀錯(cuò)誤時(shí),過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用。
8.如權(quán)利要求7所述的方法,其特征在于,還包括: 在確定與各個(gè)子命令對(duì)應(yīng)的各個(gè)條塊的數(shù)據(jù)全部返回后且確定數(shù)據(jù)條塊發(fā)生讀錯(cuò)誤時(shí),根據(jù)讀錯(cuò)誤數(shù)量判斷是否可以恢復(fù)出數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù),如果是,則根據(jù)未發(fā)生讀錯(cuò)的數(shù)據(jù)條塊以及校驗(yàn)條塊中的數(shù)據(jù)使用RAID算法恢復(fù)出發(fā)生讀錯(cuò)誤的數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)。
9.如權(quán)利要求7所述的方法,其特征在于,其中各個(gè)條塊數(shù)據(jù)被保存在內(nèi)存中,所述過(guò)濾出其中屬于數(shù)據(jù)條塊中的應(yīng)用數(shù)據(jù)返回給上層應(yīng)用具體包括:將校驗(yàn)條塊中的校驗(yàn)數(shù)據(jù)所占用的內(nèi)存空間釋放掉。
10.如權(quán)利要求6所述的方法,其特征在于,所述硬盤(pán)為磁盤(pán)類硬盤(pán)。
【文檔編號(hào)】G06F3/06GK104484135SQ201410812463
【公開(kāi)日】2015年4月1日 申請(qǐng)日期:2014年12月23日 優(yōu)先權(quán)日:2014年12月23日
【發(fā)明者】王麗紅, 郭永強(qiáng) 申請(qǐng)人:浙江宇視科技有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1