本發(fā)明涉及一種提高raid讀取性能的系統(tǒng)及方法。
背景技術(shù):
獨(dú)立磁盤(pán)冗余陣列(redundantarrayofindependentdisks,raid)在存儲(chǔ)文件時(shí),會(huì)將該文件分割成若干個(gè)預(yù)設(shè)大小的有效數(shù)據(jù)塊,并根據(jù)分割后的有效數(shù)據(jù)塊計(jì)算出相應(yīng)的多個(gè)校驗(yàn)數(shù)據(jù)塊,然后將分割的有效數(shù)據(jù)塊以及校驗(yàn)數(shù)據(jù)塊分別存儲(chǔ)到多個(gè)(至少三個(gè))磁盤(pán)中。在未出現(xiàn)損壞的磁盤(pán)時(shí),raid在讀取文件時(shí),會(huì)將該文件所分割的所有有效數(shù)據(jù)塊以及所有的校驗(yàn)數(shù)據(jù)塊都讀取出來(lái),然后忽略校驗(yàn)數(shù)據(jù)塊,將讀取的有效數(shù)據(jù)塊組合成要讀取的文件,也即所述文件讀取完成。現(xiàn)有的讀取文件的方法并沒(méi)有充分發(fā)揮raid的讀取性能。
技術(shù)實(shí)現(xiàn)要素:
鑒于以上內(nèi)容,有必要提供一種提高raid讀取性能的系統(tǒng)及方法,使得raid具有更好的讀取性能。
一種提高raid讀取性能的系統(tǒng),運(yùn)行于電子裝置中,該電子裝置與m個(gè)磁盤(pán)相連接,所述m個(gè)磁盤(pán)中有n個(gè)用于校驗(yàn)的磁盤(pán),該系統(tǒng)包括:讀取計(jì)算模塊,用于當(dāng)要讀取文件時(shí),通過(guò)預(yù)設(shè)的讀取算法根據(jù)本次要讀取的m個(gè)有效數(shù)據(jù)塊的第一個(gè)數(shù)據(jù)塊在所有有效數(shù)據(jù)塊中的編號(hào)、所有磁盤(pán)數(shù)m以及校驗(yàn)磁盤(pán)數(shù)n確定本次m個(gè)磁盤(pán)所分別要讀取的有效數(shù)據(jù)塊;讀取模塊,用于向各個(gè)磁盤(pán)發(fā)送讀取相應(yīng)的有效數(shù)據(jù)塊的命令,并將各個(gè)磁盤(pán)所讀取的有效數(shù)據(jù)塊按照一定順序拼接起來(lái),及判斷所述文件是否被完全讀取,并在所述文件被完全讀取時(shí),結(jié)束讀取操 作。
一種提高raid讀取性能的方法,應(yīng)用于電子裝置中,該電子裝置與m個(gè)磁盤(pán)相連接,所述m個(gè)磁盤(pán)中有n個(gè)用于校驗(yàn)的磁盤(pán),該方法包括:讀取計(jì)算步驟,當(dāng)要讀取文件時(shí),通過(guò)預(yù)設(shè)的讀取算法根據(jù)本次要讀取的m個(gè)有效數(shù)據(jù)塊的第一個(gè)數(shù)據(jù)塊在所有有效數(shù)據(jù)塊中的編號(hào)、所有磁盤(pán)數(shù)m以及校驗(yàn)磁盤(pán)數(shù)n確定本次m個(gè)磁盤(pán)所分別要讀取的有效數(shù)據(jù)塊;讀取步驟,向各個(gè)磁盤(pán)發(fā)送讀取相應(yīng)的有效數(shù)據(jù)塊的命令,并將各個(gè)磁盤(pán)所讀取的有效數(shù)據(jù)塊按照一定順序拼接起來(lái),及判斷所述文件是否被完全讀取,并在所述文件被完全讀取時(shí),結(jié)束讀取操作。
相較于現(xiàn)有技術(shù),本發(fā)明的提高raid讀取性能的方法在讀取文件時(shí)不必再讀取校驗(yàn)數(shù)據(jù)塊,提高了raid的讀取性能。
附圖說(shuō)明
圖1是本發(fā)明提高raid讀取性能的系統(tǒng)的較佳實(shí)施例的運(yùn)行環(huán)境示意圖。
圖2是本發(fā)明提高raid讀取性能的方法的較佳實(shí)施例的流程圖。
圖3是存儲(chǔ)文件時(shí)確定數(shù)據(jù)塊與磁盤(pán)的對(duì)應(yīng)關(guān)系的示意圖。
主要元件符號(hào)說(shuō)明
如下具體實(shí)施方式將結(jié)合上述附圖進(jìn)一步說(shuō)明本發(fā)明。
具體實(shí)施方式
參閱圖1所示,是本發(fā)明提高raid讀取性能的系統(tǒng)的較佳實(shí)施例的運(yùn)行環(huán)境示意圖。所述提高raid讀取性能的系統(tǒng)10安裝并運(yùn)行于電子裝置1中。所電子裝置1包括連接裝置11。該連接裝置11用于與多個(gè)磁盤(pán)2(下文用m表示所有磁盤(pán)的個(gè)數(shù),用n表示用于校驗(yàn)的磁盤(pán)的個(gè)數(shù))通信連接。所述電子裝置1還包括,但不限于,處理器12以及存儲(chǔ)裝置13。所述電子裝置1可以是通過(guò)硬件實(shí)現(xiàn)raid的raid控制卡,也可以是通過(guò)運(yùn)行軟件實(shí)現(xiàn)raid的計(jì)算機(jī)等裝置。所述連接裝置11可以是sata等接口。所述處理器12用于執(zhí)行電子裝置1中的程序指令段以及控制該電子裝置1中的各個(gè)裝置,其可以是raid控制卡上的raid控制芯片,也可以是計(jì)算機(jī)中的中央處理器。所述存儲(chǔ)裝置13包括用于存儲(chǔ)安裝在電子裝置1中的各個(gè)程序(例如raid中默認(rèn)的讀取程序以及寫(xiě)入程序)的程序指令段以及數(shù)據(jù)資料的第一存儲(chǔ)裝置,還包括用于存儲(chǔ)讀取以及寫(xiě)入數(shù)據(jù)的第二存儲(chǔ)裝置。所述第一存儲(chǔ)裝置可以是電子裝置1中的存儲(chǔ)器,例如只讀存儲(chǔ)器。所述第二存儲(chǔ)裝置可以是raid控制卡中的高速緩存,也可以是計(jì)算機(jī)的內(nèi)存等設(shè)備。
所述提高raid讀取性能的系統(tǒng)10用于在存儲(chǔ)文件時(shí),將該文件分割成若干個(gè)有效數(shù)據(jù)塊,并根據(jù)有效數(shù)據(jù)塊計(jì)算出若干個(gè)校驗(yàn)數(shù)據(jù)塊,并按照預(yù)設(shè)的寫(xiě)入算法確定所有有效數(shù)據(jù)塊和 校驗(yàn)數(shù)據(jù)塊所分別對(duì)應(yīng)的磁盤(pán),并將各個(gè)有效數(shù)據(jù)塊以及校驗(yàn)數(shù)據(jù)塊分別發(fā)送到對(duì)應(yīng)的磁盤(pán)進(jìn)行存儲(chǔ)。所述提高raid讀取性能的系統(tǒng)10還用于在讀取文件時(shí),根據(jù)預(yù)設(shè)的讀取算法確定m個(gè)磁盤(pán)所分別要讀取的各個(gè)有效數(shù)據(jù)塊的位置,并將讀取的有效數(shù)據(jù)塊拼接成要讀取的文件。
在本實(shí)施例中,本發(fā)明所述的提高raid讀取性能的系統(tǒng)10可以被分割成一個(gè)或多個(gè)模塊,所述一個(gè)或多個(gè)模塊均被存儲(chǔ)于存儲(chǔ)裝置13中,并由一個(gè)或多個(gè)處理器12(本實(shí)施例為一個(gè)處理器)所執(zhí)行,已完成本發(fā)明。參閱圖1所示,本發(fā)明所述的提高raid讀取性能的系統(tǒng)10被分割成分割模塊101、第一獲取模塊102、寫(xiě)入計(jì)算模塊103、寫(xiě)入模塊104、第二獲取模塊105、讀取計(jì)算模塊106以及讀取模塊107。本發(fā)明所稱的模塊是指能夠完成特定功能的一系列計(jì)算機(jī)程序段,比程序更適合于描述所述提高raid讀取性能的系統(tǒng)10在電子裝置1中的執(zhí)行過(guò)程。以下將結(jié)合圖2的流程圖來(lái)描述各個(gè)模塊的具體功能。
參閱圖2所示,是本發(fā)明提高raid讀取性能的方法的較佳實(shí)施例的流程圖。在本實(shí)施中,根據(jù)不同的需求,圖2所示的流程圖中的步驟的執(zhí)行順序可以改變,某些步驟可以省略。
步驟s201,分割模塊101在要存儲(chǔ)文件時(shí),獲取該文件并將該文件分割成若干個(gè)預(yù)設(shè)大小的有效數(shù)據(jù)塊。在本實(shí)施例中,所述的預(yù)設(shè)大小是64kb,也即將文件分割成若干個(gè)64kb大小的有效數(shù)據(jù)塊。所述文件被分割到最后一塊時(shí),若剩余的數(shù)據(jù)不足64kb,則補(bǔ)充預(yù)設(shè)格式的數(shù)據(jù)(例如補(bǔ)充全是0的數(shù)據(jù)),使得有效數(shù)據(jù)塊的大小是64kb。
步驟s202,第一獲取模塊102從所述文件分割出的所有未被存儲(chǔ)的有效數(shù)據(jù)塊中按照一定順序獲取m-n個(gè)有效數(shù)據(jù)塊。
在本實(shí)施例中,所述第一獲取模塊102在獲取前,先判斷所述文件的未被存儲(chǔ)的有效數(shù)據(jù)塊的個(gè)數(shù)是否小于m-n。若所述文件的未被存儲(chǔ)的有效數(shù)據(jù)塊的個(gè)數(shù)不小于m-n,則所述第一獲取 模塊102按照未被存儲(chǔ)的有效數(shù)據(jù)塊被分割出的先后順序依次獲取m-n個(gè)有效數(shù)據(jù)塊。若所述文件的未被存儲(chǔ)的有效數(shù)據(jù)塊的個(gè)數(shù)小于m-n,則獲取剩余的有效數(shù)據(jù)塊,并補(bǔ)充若干個(gè)指定格式的數(shù)據(jù)塊充當(dāng)有效數(shù)據(jù)塊,使得獲取的有效數(shù)據(jù)塊的個(gè)數(shù)為m-n。在本實(shí)例中,所述指定格式的數(shù)據(jù)塊是全是0的數(shù)據(jù)塊。
步驟s203,寫(xiě)入計(jì)算模塊103根據(jù)獲取的m-n個(gè)有效數(shù)據(jù)塊計(jì)算出n個(gè)校驗(yàn)數(shù)據(jù)塊。所述寫(xiě)入計(jì)算模塊103按照默認(rèn)的算法根據(jù)m-n個(gè)有效數(shù)據(jù)塊計(jì)算出n個(gè)校驗(yàn)數(shù)據(jù)塊。
步驟s204,寫(xiě)入計(jì)算模塊103通過(guò)預(yù)設(shè)的寫(xiě)入算法根據(jù)本次所要寫(xiě)入的m-n個(gè)有效數(shù)據(jù)塊的第一個(gè)有效數(shù)據(jù)塊在所有有效數(shù)據(jù)塊中的編號(hào)、所有磁盤(pán)數(shù)m以及校驗(yàn)磁盤(pán)數(shù)n確定各個(gè)有效數(shù)據(jù)塊以及校驗(yàn)數(shù)據(jù)塊所分別對(duì)應(yīng)的磁盤(pán)。
所述有效數(shù)據(jù)塊的編號(hào)指的是該有效數(shù)據(jù)塊在所有分割出的有效數(shù)據(jù)塊中的編號(hào)。例如一個(gè)文件分割出4個(gè)有效數(shù)據(jù)塊:d1、d2、d3以及d4。則有效數(shù)據(jù)塊d1的編號(hào)是1,該d1在磁盤(pán)中的存儲(chǔ)位置也即是該文件的存儲(chǔ)位置。有效數(shù)據(jù)塊d2的編號(hào)是2,該d2在磁盤(pán)中的存儲(chǔ)位置與d1的存儲(chǔ)位置相差一個(gè)預(yù)設(shè)的數(shù)據(jù)塊大小。故只要知道該文件的存儲(chǔ)位置有效數(shù)據(jù)塊在所有有效數(shù)據(jù)塊中的編號(hào),既可以得出該有效數(shù)據(jù)塊在磁盤(pán)中的存儲(chǔ)位置。
所述預(yù)設(shè)的寫(xiě)入算法包括如下步驟s2041~s2043。
步驟s2041,寫(xiě)入計(jì)算模塊103將m-n個(gè)有效數(shù)據(jù)塊以及n個(gè)校驗(yàn)數(shù)據(jù)塊按照b1,b2,...,bm-n,p1,p2,...,pn的形式進(jìn)行排序,將m個(gè)磁盤(pán)依次進(jìn)行編號(hào),并將b1,b2,...,bm-n,p1,p2,...,pn與第1磁盤(pán),第2磁盤(pán),...,第m-n磁盤(pán),第m-n+1磁盤(pán),第m-n+2磁盤(pán),...,第m磁盤(pán)一一對(duì)應(yīng)。所述b1指的是本次要被存儲(chǔ)的m-n個(gè)有效數(shù)據(jù)塊中的第1個(gè)數(shù)據(jù)塊,其對(duì)應(yīng)于第1磁盤(pán);所述bm-n指的是第m-n個(gè)有效數(shù)據(jù)塊,其對(duì)應(yīng)于第m-n磁盤(pán);所述p1指的是第1個(gè)校驗(yàn)數(shù)據(jù)塊,其對(duì)應(yīng)于第m-n+1磁盤(pán);所述pn指的是第n個(gè)校驗(yàn)數(shù)據(jù) 塊,其對(duì)應(yīng)于第m磁盤(pán)。
步驟s2042,寫(xiě)入計(jì)算模塊103根據(jù)下面的公式(1),計(jì)算出本次m個(gè)數(shù)據(jù)塊(有效數(shù)據(jù)塊和校驗(yàn)數(shù)據(jù)塊)與m個(gè)磁盤(pán)的對(duì)應(yīng)關(guān)系所要向左偏轉(zhuǎn)的位數(shù)l。需要說(shuō)明的是,第1磁盤(pán)左邊的磁盤(pán)是第m磁盤(pán)。
l=((b/(m-n)*n)%(m*n);(1)
所述b指的是本次要被存儲(chǔ)的m-n個(gè)有效數(shù)據(jù)塊中的第一個(gè)有效數(shù)據(jù)塊在所有有效數(shù)據(jù)塊中的編號(hào)。所述m指的是所有磁盤(pán)數(shù),是個(gè)固定值。所述n指的是用于校驗(yàn)的磁盤(pán)數(shù),是個(gè)固定值。所述“/”是取整的除法函數(shù),例如3/2=1。所述“%”指的是求余函數(shù)。
參閱圖3所示,是存儲(chǔ)文件時(shí)確定數(shù)據(jù)塊與磁盤(pán)的對(duì)應(yīng)關(guān)系的示意圖。第一次要寫(xiě)入的有效數(shù)據(jù)塊是d1和d2,校驗(yàn)數(shù)據(jù)塊是p1。根據(jù)上述公式(1)計(jì)算得出l=((1/(3-1)*1)%(3*1)=0。故每個(gè)數(shù)據(jù)塊(有效數(shù)據(jù)塊和校驗(yàn)數(shù)據(jù)塊)與磁盤(pán)的對(duì)應(yīng)關(guān)系不變,也即第1磁盤(pán)存儲(chǔ)d1,第2磁盤(pán)存儲(chǔ)d2,第3磁盤(pán)存儲(chǔ)p1。第二次要寫(xiě)入的有效數(shù)據(jù)塊是d3和d4,校驗(yàn)數(shù)據(jù)塊是p2。根據(jù)上述公式(1)計(jì)算得出l=((3/(3-1)*1)%(3*1)=1。本次m個(gè)數(shù)據(jù)塊與m個(gè)磁盤(pán)的對(duì)應(yīng)關(guān)系要向左偏轉(zhuǎn)1位,也即第3磁盤(pán)存儲(chǔ)d3,第1磁盤(pán)存儲(chǔ)d4,第2磁盤(pán)存儲(chǔ)p2。同理得出,第三次要寫(xiě)入的數(shù)據(jù)塊所要向左偏轉(zhuǎn)的位數(shù)是l==((5/(3-1)*1)%(3*1)=2,故第2磁盤(pán)存儲(chǔ)d5,第3磁盤(pán)存儲(chǔ)d6,第1磁盤(pán)存儲(chǔ)p3。
步驟s2043,寫(xiě)入計(jì)算模塊103根據(jù)所要偏轉(zhuǎn)的位數(shù)l重新確定各個(gè)數(shù)據(jù)塊與磁盤(pán)的對(duì)應(yīng)關(guān)系。
步驟s205,寫(xiě)入模塊104將m-n個(gè)有效數(shù)據(jù)塊和n個(gè)校驗(yàn)數(shù)據(jù)塊分別發(fā)送到對(duì)應(yīng)的磁盤(pán)進(jìn)行存儲(chǔ)操作。
步驟s206,寫(xiě)入模塊104判斷所述文件是否被完全存儲(chǔ)。若所述文件被完全存儲(chǔ),則執(zhí)行步驟s207;若所述文件未被完全存儲(chǔ),則返回步驟s202。當(dāng)所述文件分割出的所有未被存儲(chǔ)的 有效數(shù)據(jù)塊均被存儲(chǔ)時(shí),所述寫(xiě)入模塊104判斷所述文件被完全存儲(chǔ)。所述提高raid讀取性能的系統(tǒng)10可以通過(guò)一個(gè)變量記錄所有未被存儲(chǔ)的有效數(shù)據(jù)塊的個(gè)數(shù),并通過(guò)該變量來(lái)判斷是否還有有效數(shù)據(jù)塊未被存儲(chǔ)。
步驟s201~s206是所述提高raid讀取性能的系統(tǒng)將文件存儲(chǔ)到多個(gè)磁盤(pán)的過(guò)程,步驟s206與下面的步驟s207并不一定連續(xù)。
步驟s207,第二獲取模塊105在要讀取文件時(shí),獲取該文件的文件的長(zhǎng)度。
步驟s208,讀取計(jì)算模塊106通過(guò)預(yù)設(shè)的讀取算法根據(jù)本次要讀取的m個(gè)有效數(shù)據(jù)塊的第一個(gè)有效數(shù)據(jù)塊在所有有效數(shù)據(jù)塊中的編號(hào)、所有磁盤(pán)數(shù)m以及檢驗(yàn)磁盤(pán)數(shù)n確定本次m個(gè)磁盤(pán)所分別要讀取的有效數(shù)據(jù)塊。
所述讀取計(jì)算模塊106在根據(jù)預(yù)設(shè)的讀取算法確定m個(gè)磁盤(pán)所分別要讀取的有效數(shù)據(jù)塊前,先判斷未被讀取的有效數(shù)據(jù)塊的個(gè)數(shù)是否小于m。若未被讀取的有效數(shù)據(jù)塊的個(gè)數(shù)不小于m,則根據(jù)預(yù)設(shè)的讀取算法確定m個(gè)磁盤(pán)所分別要讀取的有效數(shù)據(jù)塊。若未被讀取的有效數(shù)據(jù)塊的個(gè)數(shù)小于m,則分配若干個(gè)數(shù)據(jù)塊給未被分到讀取有效數(shù)據(jù)塊的磁盤(pán)。所述若干個(gè)數(shù)據(jù)塊可以是指定位置的數(shù)據(jù)塊,例如磁盤(pán)的第一個(gè)數(shù)據(jù)塊,也可以是隨機(jī)的一個(gè)數(shù)據(jù)塊,例如磁盤(pán)的磁頭當(dāng)前所指的數(shù)據(jù)塊。
在本實(shí)施例中,所述預(yù)設(shè)的算法是按照下面的公式(2)分別計(jì)算出m個(gè)磁盤(pán)所要讀取的有效數(shù)據(jù)塊的編號(hào)addr。
addrx=(b+x-1)/(m-n)+(b+x-1)%(m-n);(2)
所述x指的是本次讀取操作中第x個(gè)磁盤(pán),故x是小于等于m的正整數(shù)。所述m指的是所有磁盤(pán)數(shù),是個(gè)固定值。所述n指的是用于校驗(yàn)的磁盤(pán)數(shù),是個(gè)固定值。所述b指的是本次要讀取操作中要讀取的第一個(gè)有效數(shù)據(jù)塊在所有有效數(shù)據(jù)塊中的編號(hào)。所述“/”是取整的除法函數(shù)。所述“%”指的是求余函數(shù)。
例如,本次要讀取的有效數(shù)據(jù)塊是d4、d5以及d6,則所述b=4。第1磁盤(pán)所有讀取的有效數(shù)據(jù)塊的編號(hào)addr1=(4+1-1)/(3-1)+(4+1-1)%(3-1)=2+2=4,也即d4。相應(yīng)的可以計(jì)算出第2磁盤(pán)所要讀取的有效數(shù)據(jù)塊的編號(hào)addr2=(4+2-1)/(3-1)+(4+2-1)%(3-1)=2+3=5,也即d5,第3磁盤(pán)所要讀取的有效數(shù)據(jù)塊的編號(hào)addr3=(4+3-1)/(3-1)+(4+3-1)%(3-1)=3+3=6,也即d6。
在其他實(shí)施例中,所述預(yù)設(shè)的算法也可以是其他算法,使得讀取計(jì)算模塊106能夠確定m個(gè)磁盤(pán)所分別要讀取的有效數(shù)據(jù)塊。
步驟s209,讀取模塊107將讀取的有效數(shù)據(jù)塊案一定順序拼接起來(lái)。所述讀取模塊107在讀取到有效數(shù)據(jù)塊后,就立即按照一定順序?qū)⒃撚行?shù)據(jù)塊拼接到相應(yīng)的有效數(shù)據(jù)塊的后面。
在本實(shí)施例中,所述讀取模塊107在將讀取的有效數(shù)據(jù)塊拼接到相應(yīng)的有效數(shù)據(jù)塊的后面前,還會(huì)判斷已經(jīng)拼接的有效數(shù)據(jù)塊的長(zhǎng)度是否小于所要讀取的文件的長(zhǎng)度。并當(dāng)已經(jīng)拼接的有效數(shù)據(jù)塊的長(zhǎng)度小于所要讀取的文件的長(zhǎng)度時(shí),才將讀取的有效數(shù)據(jù)塊拼接到已經(jīng)拼接的有效數(shù)據(jù)塊的后面。例如,已經(jīng)拼接的有效數(shù)據(jù)塊有d1、d2、d3以及d4,則當(dāng)讀取到d5時(shí),判斷已經(jīng)拼接的有效數(shù)據(jù)塊的長(zhǎng)度是否小于所要讀取的文件的長(zhǎng)度,并在已經(jīng)拼接的有效數(shù)據(jù)塊的長(zhǎng)度小于所要讀取的文件的長(zhǎng)度時(shí),將d5拼接到d4的后面,此時(shí)已經(jīng)拼接的數(shù)據(jù)塊是d1、d2、d3、d4以及d5。
步驟s210,讀取模塊107判斷所述文件是否被完全讀取。若所述文件未被完全讀取,則返回步驟s208;若所述文件被完全讀取,則流程結(jié)束。
在本實(shí)施例中,當(dāng)已經(jīng)拼接的有效數(shù)據(jù)塊的長(zhǎng)度不小于所要讀取的文件的長(zhǎng)度時(shí),所述讀取模塊107判斷所述文件被完全讀取,且所述讀取模塊107還通過(guò)從已經(jīng)拼接的有效數(shù)據(jù)塊的尾 部刪除部分?jǐn)?shù)據(jù)的方法,使得已經(jīng)拼接的有效數(shù)據(jù)塊的長(zhǎng)度與所要讀取的文件的長(zhǎng)度相同,也即已經(jīng)拼接的有效數(shù)據(jù)塊即是所要讀取的文件。
最后所應(yīng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。