本發(fā)明涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,特別涉及一種基于全閃存陣列的隨機(jī)io順序化方法及裝置。
背景技術(shù):
隨著現(xiàn)代社會科技的發(fā)展,ssd(solidstatedisk,固態(tài)硬盤)技術(shù)得到了高速的發(fā)展。ssd盤在性能、壽命、可靠性和容量上已經(jīng)達(dá)到了企業(yè)級別使用的程度,所以在近幾年基于全閃存存儲介質(zhì)的陣列研究如火如荼,但在前期的使用中,一些產(chǎn)品僅是將傳統(tǒng)的磁盤替換為ssd盤,沒有做io棧上的優(yōu)化,沒有發(fā)揮出ssd的全部優(yōu)勢。
相比于傳統(tǒng)磁盤,ssd盤有以下一些不同點(diǎn):ssd盤的性能高一個數(shù)量級,傳統(tǒng)磁盤都是10毫秒級別的時延,而ssd盤可以達(dá)到50微妙甚至更低的讀寫時延;傳統(tǒng)磁盤使用磁介質(zhì)來存儲數(shù)據(jù),同一個位置可以反復(fù)覆蓋寫,而ssd盤則由于自己本身的特性需要將之前位置的數(shù)據(jù)擦除之后才能再寫數(shù)據(jù),由于這個特性,ssd盤也需要進(jìn)行垃圾回收保證可用容量;ssd盤的壽命與擦寫次數(shù)有關(guān),傳統(tǒng)磁盤的壽命則與寫的次數(shù)沒有特別大的相關(guān)關(guān)系。由于存在以上的不同點(diǎn),需要對傳統(tǒng)的io棧進(jìn)行優(yōu)化才能適配ssd的這些特性,提升全閃存陣列的性能和ssd盤的使用壽命。
現(xiàn)有技術(shù)中,一些廠家在對傳統(tǒng)的io棧進(jìn)行優(yōu)化時,往往是基于ssd盤的物理位置來做順序化的存儲,不能很好的和raid(redundantarraysofindependentdisks,獨(dú)立硬盤冗余陣列)機(jī)制結(jié)合,并不能對隨機(jī)io進(jìn)行順序化處理,令ssd盤的使用壽命會受到一定影響,并且在改造已有磁盤陣列產(chǎn)品時有一定的難度。因此,如何更好的與raid機(jī)制結(jié)合,對隨機(jī)io進(jìn)行順序化處理,提升全閃存陣列的性能和使用壽命,減輕傳統(tǒng)磁盤陣列向全閃存陣列轉(zhuǎn)換難度,是現(xiàn)今急需解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種基于全閃存陣列的隨機(jī)io順序化方法及裝置,以通過使用偏移和raid條帶映射的方式實(shí)現(xiàn)傳統(tǒng)磁盤陣列和全閃存陣列的結(jié)合,提升了全閃存陣列的性能和使用壽命,減輕了傳統(tǒng)磁盤陣列向全閃存陣列轉(zhuǎn)換難度。
為解決上述技術(shù)問題,本發(fā)明提供一種基于全閃存陣列的隨機(jī)io順序化方法,包括:
接收寫io數(shù)據(jù)后,將所述寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊;
從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄所述寫數(shù)據(jù)塊各自的lba與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,并將所述寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中;其中,可用的條帶包括未填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶;
對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤。
可選的,所述將所述寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中,包括:
依次將所述寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中。
可選的,所述從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,包括:
根據(jù)所述寫數(shù)據(jù)塊的數(shù)量,從全部可用的條帶中,依次選取使用次數(shù)最少且對應(yīng)的條帶號最小的所述目標(biāo)條帶。
可選的,所述將所述寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊,包括:
將所述寫io數(shù)據(jù)按4kb或8kb的長度切割為所述寫數(shù)據(jù)塊。
可選的,該方法還包括:
接收讀io請求后,構(gòu)建讀io數(shù)據(jù)并將所述讀io數(shù)據(jù)按所述預(yù)設(shè)長度切割為讀數(shù)據(jù)塊;
根據(jù)所述讀數(shù)據(jù)塊各自的lba分別查詢所述映射表中是否存在對應(yīng)的條帶號;
若是,則讀取所述條帶號對應(yīng)的條帶的數(shù)據(jù)表,并下盤讀取相應(yīng)的數(shù)據(jù);
若否,則將lba不存在對應(yīng)的條帶號的讀數(shù)據(jù)塊填充0。
此外,本發(fā)明還提供了一種基于全閃存陣列的隨機(jī)io順序化裝置,包括:
寫切割模塊,用于接收寫io數(shù)據(jù)后,將所述寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊;
處理模塊,用于從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄所述寫數(shù)據(jù)塊各自的lba與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,并將所述寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中;其中,可用的條帶包括未填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶;
下盤模塊,用于對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤。
可選的,所述處理模塊,包括:
填充子模塊,用于依次將所述寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中。
可選的,所述處理模塊,包括:
選取子模塊,用于根據(jù)所述寫數(shù)據(jù)塊的數(shù)量,從全部可用的條帶中,依次選取使用次數(shù)最少且對應(yīng)的條帶號最小的所述目標(biāo)條帶。
可選的,所述寫切割模塊,包括:
寫切割子模塊,用于將所述寫io數(shù)據(jù)按4kb或8kb的長度切割為所述寫數(shù)據(jù)塊。
可選的,該裝置還包括:
讀切割模塊,用于接收讀io請求后,構(gòu)建讀io數(shù)據(jù)并將所述讀io數(shù)據(jù)按所述預(yù)設(shè)長度切割為讀數(shù)據(jù)塊;
判斷模塊,用于根據(jù)所述讀數(shù)據(jù)塊各自的lba分別查詢所述映射表中是否存在對應(yīng)的條帶號;若是,則向讀取模塊發(fā)送讀取信號;若否,則向填充模塊發(fā)送填充信號;
所述讀取模塊,用于接收所述讀取信號,讀取所述條帶號對應(yīng)的條帶的數(shù)據(jù)表,并下盤讀取相應(yīng)的數(shù)據(jù);
所述填充模塊,用于接收所述填充信號,將lba不存在對應(yīng)的條帶號的讀數(shù)據(jù)塊填充0。
本發(fā)明所提供的一種基于全閃存陣列的隨機(jī)io順序化方法,包括:接收寫io數(shù)據(jù)后,將所述寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊;從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄所述寫數(shù)據(jù)塊各自的lba與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,并將所述寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中;其中,可用的條帶包括未填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶;對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤;
可見,本發(fā)明通過從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄寫數(shù)據(jù)塊各自的lba(logicblockaddress,邏輯塊地址)與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,可以使用偏移和raid條帶映射的方式將數(shù)據(jù)塊填充到對應(yīng)的目標(biāo)條帶,使得目標(biāo)條帶中填充的內(nèi)容均為數(shù)據(jù)塊,不存在空的填充內(nèi)容,使得隨機(jī)io可以順序化填充到目標(biāo)條帶中;通過對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤,可以使數(shù)據(jù)塊可以順序化存儲到存儲介質(zhì)中,使得隨機(jī)io也可以進(jìn)行順序化存儲,提升了全閃存陣列的性能和使用壽命,并且實(shí)現(xiàn)了傳統(tǒng)磁盤陣列和全閃存陣列的結(jié)合,減輕了傳統(tǒng)磁盤陣列向全閃存陣列轉(zhuǎn)換難度,提升了用戶體驗(yàn)。此外,本發(fā)明還提供了一種基于全閃存陣列的隨機(jī)io順序化裝置,同樣具有上述有益效果。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例所提供的一種基于全閃存陣列的隨機(jī)io順序化方法的流程圖;
圖2為本發(fā)明實(shí)施例所提供的一種基于全閃存陣列的隨機(jī)io順序化方法的映射表的示意圖;
圖3為本發(fā)明實(shí)施例所提供的另一種基于全閃存陣列的隨機(jī)io順序化方法的流程圖;
圖4為本發(fā)明實(shí)施例所提供的一種基于全閃存陣列的隨機(jī)io順序化裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請參考圖1和圖2,圖1為本發(fā)明實(shí)施例所提供的一種基于全閃存陣列的隨機(jī)io順序化方法的流程圖;圖2為本發(fā)明實(shí)施例所提供的一種基于全閃存陣列的隨機(jī)io順序化方法的映射表的示意圖。該方法可以包括:
步驟101:接收寫io數(shù)據(jù)后,將寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊。
其中,本步驟中接收寫io數(shù)據(jù),可以為主機(jī)直接接收用戶發(fā)送的io數(shù)據(jù),也可以為主機(jī)接收用戶發(fā)送的寫io請求和對應(yīng)的io數(shù)據(jù)。對于主機(jī)接收寫io數(shù)據(jù)的具體方式,也就是主機(jī)接收需要存儲到如ssd盤的存儲介質(zhì)的io數(shù)據(jù)的具體方式,可以采用與現(xiàn)有技術(shù)相同或相似的方式,也可以由設(shè)計人員根據(jù)實(shí)用場景或用戶需求自行設(shè)置,本實(shí)施例對此不做任何限制。
可以理解的是,本步驟中將寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊,也就是將需要存儲的io數(shù)據(jù)按預(yù)設(shè)長度劃分為一個或多個小的數(shù)據(jù)塊,對于預(yù)設(shè)長度的具體數(shù)值設(shè)置,也就是每個寫數(shù)據(jù)塊的具體大小的設(shè)置,可以由設(shè)計人員根據(jù)實(shí)用場景和用戶需求自行設(shè)置,優(yōu)選的,可以設(shè)置為4kb或8kb,本實(shí)施例對此不做任何限制。
需要說明的是,對于將寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊的具體方式,可以采用與現(xiàn)有技術(shù)相似的方式,也可以采用其他設(shè)計人員自行設(shè)置的方式,本實(shí)施例對此不做任何限制。
步驟102:從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄寫數(shù)據(jù)塊各自的lba與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,并將寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中;其中,可用的條帶包括未填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶。
可以理解的是,本步驟中從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶的具體方式,可以為根據(jù)寫數(shù)據(jù)塊的數(shù)量,從全部可用的條帶中,依次選取使用次數(shù)最少且對應(yīng)的條帶號最小的目標(biāo)條帶,也就是先選取一個目標(biāo)條帶,若該目標(biāo)條帶可以填充全部寫數(shù)據(jù)塊,則在映射表中記錄全部寫數(shù)據(jù)塊各自的lba與該目標(biāo)條帶的條帶號的映射關(guān)系,并將全部寫數(shù)據(jù)塊填充到該目標(biāo)條帶中;若該目標(biāo)條帶不可以填充全部寫數(shù)據(jù)塊,則在映射表中記錄全部寫數(shù)據(jù)塊中可填充在該目標(biāo)條帶的部分寫數(shù)據(jù)塊各自的lba與該目標(biāo)條帶的條帶號的映射關(guān)系,并將該部分寫數(shù)據(jù)塊填充到該目標(biāo)條帶中,然后再選取下一目標(biāo)條帶,執(zhí)行與上述相似的步驟,直至全部寫數(shù)據(jù)各自的lba與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系均記錄在映射表中,并將全部寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中。也可以為根據(jù)寫數(shù)據(jù)塊的數(shù)量,從全部可用的條帶中,直接選取使用次數(shù)最少且對應(yīng)的條帶號最小的目標(biāo)條帶,也就是直接選取填充全部寫數(shù)據(jù)塊所需的目標(biāo)條帶。對于從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶的具體方式,可以由設(shè)計人員自行設(shè)置,本實(shí)施例對此不受任何限制。
同樣的,對于將寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中的具體方式,可以為依次將寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中,如若先選取出一個目標(biāo)條帶,則全部寫數(shù)據(jù)塊按順序填充到該目標(biāo)條帶可填充的位置,若該目標(biāo)條帶已填充滿而全部寫數(shù)據(jù)塊未填充完,則等待選取出的下一目標(biāo)條帶再對剩余未填充的寫數(shù)據(jù)塊進(jìn)行填充,直至全部寫數(shù)據(jù)塊填充完;也可以為并行將寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中,如若選取出填充全部寫數(shù)據(jù)塊所需的目標(biāo)條帶后,全部寫數(shù)據(jù)塊按照每個目標(biāo)條帶可填充的位置的數(shù)量,直接將全部寫數(shù)據(jù)塊并行填充到對應(yīng)的目標(biāo)條帶。對于寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中的具體方式,可以由設(shè)計人員自行設(shè)置,本實(shí)施例對此同樣不受任何限制。
具體的,對于在映射表中記錄寫數(shù)據(jù)塊各自的lba與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系的具體方式,可以采用與上述將寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中的方式相對應(yīng)的方式,本實(shí)施例對此不受任何限制。其中,記錄表中l(wèi)ba與目標(biāo)條帶的映射關(guān)系可以如圖2所示,圖中l(wèi)ba中深色方格可以表示為寫數(shù)據(jù)塊的lba,通過將寫數(shù)據(jù)塊的lba映射到條帶(目標(biāo)條帶)中,可以避免現(xiàn)有技術(shù)中,條帶存在空的填充內(nèi)容的情況發(fā)生,如現(xiàn)有技術(shù)中可以將每5個lba的方格劃分為一個條帶,那么第一個條帶中只存在一個寫數(shù)據(jù)塊的lba,存在4個空的填充內(nèi)容,使得寫數(shù)據(jù)塊并不能順序化存儲到存儲介質(zhì)中。圖中,stride-offset可以為每個lba對應(yīng)的條帶號。
需要說明的是,本步驟與步驟103并不存在邏輯上必然的先后關(guān)系,可以為在執(zhí)行本步驟的過程中,執(zhí)行步驟103,如本步驟選取一個目標(biāo)條帶后,可以在映射表中記錄全部寫數(shù)據(jù)塊中可填充在該目標(biāo)條帶的部分寫數(shù)據(jù)塊各自的lba與該目標(biāo)條帶的條帶號的映射關(guān)系,并將該部分寫數(shù)據(jù)塊填充到該目標(biāo)條帶中,然后執(zhí)行步驟103,將填充滿對應(yīng)的寫數(shù)據(jù)塊的該目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤,等待數(shù)據(jù)下盤后再執(zhí)行本步驟選取下一目標(biāo)條帶或在數(shù)據(jù)下盤的過程中執(zhí)行本步驟選取下一目標(biāo)條帶;也可以在執(zhí)行本步驟之后,再執(zhí)行步驟103,如執(zhí)行本步驟依次選取多個目標(biāo)條帶,并將全部數(shù)據(jù)塊填充到多個目標(biāo)條帶后,再執(zhí)行步驟103將多個目標(biāo)條帶中已填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤。本實(shí)施例對此不受任何限制。
步驟103:對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤。
其中,數(shù)據(jù)下盤可以為將目標(biāo)條帶中的寫數(shù)據(jù)塊存儲到對應(yīng)的存儲介質(zhì)。對于本步驟中將填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤的具體過程,可以采用與現(xiàn)有技術(shù)相同或相似的方式,也可以由設(shè)計人員自行設(shè)置其它方式,本實(shí)施例對此不受任何限制。
可以理解的是,由于步驟102中目標(biāo)條帶的選取可以是每填充滿一個目標(biāo)條帶并進(jìn)行本步驟的數(shù)據(jù)下盤后,再選取的下一目標(biāo)條帶,所以本步驟中對于全部寫數(shù)據(jù)塊填充的目標(biāo)條帶而言,可以對全部目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤,如全部寫數(shù)據(jù)塊剛好填充滿全部目標(biāo)條帶;也可以為對全部目標(biāo)條帶中除一個未填充滿的目標(biāo)條帶外的其他目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤,如全部寫數(shù)據(jù)塊的部分寫數(shù)據(jù)塊填充滿上述其他目標(biāo)條帶后,剩余的寫數(shù)據(jù)塊未填充滿下一個目標(biāo)條帶。本實(shí)施例對此不受任何限制。
需要說明的是,對于未填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶,可以通過步驟102等待下一次寫io數(shù)據(jù)切割的寫數(shù)據(jù)塊再進(jìn)行填充;也可以直接進(jìn)行數(shù)據(jù)下盤。本實(shí)施例對此不受任何限制。
本實(shí)施例中,本發(fā)明實(shí)施例通過從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄寫數(shù)據(jù)塊各自的lba(logicblockaddress,邏輯塊地址)與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,可以使用偏移和raid條帶映射的方式將數(shù)據(jù)塊填充到對應(yīng)的目標(biāo)條帶,使得目標(biāo)條帶中填充的內(nèi)容均為數(shù)據(jù)塊,不存在空的填充內(nèi)容,使得隨機(jī)io可以順序化填充到目標(biāo)條帶中;通過對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤,可以使數(shù)據(jù)塊可以順序化存儲到存儲介質(zhì)中,使得隨機(jī)io也可以進(jìn)行順序化存儲,提升了全閃存陣列的性能和使用壽命,并且實(shí)現(xiàn)了傳統(tǒng)磁盤陣列和全閃存陣列的結(jié)合,減輕了傳統(tǒng)磁盤陣列向全閃存陣列轉(zhuǎn)換難度,提升了用戶體驗(yàn)。
基于上一實(shí)施例,展示了基于全閃存陣列的隨機(jī)io順序化方法的寫操作的具體流程,對于基于全閃存陣列的隨機(jī)io順序化方法的讀操作的具體流程,可以通過本發(fā)明實(shí)施例進(jìn)行展示。具體的請參考圖3,圖3為本發(fā)明實(shí)施例所提供的另一種基于全閃存陣列的隨機(jī)io順序化方法的流程圖。該方法可以包括:
步驟201:接收讀io請求后,構(gòu)建讀io數(shù)據(jù)并將讀io數(shù)據(jù)按預(yù)設(shè)長度切割為讀數(shù)據(jù)塊。
其中,本步驟中的預(yù)設(shè)長度可以與上一實(shí)施例中的預(yù)設(shè)長度相同。
可以理解的是,對于本步驟中主機(jī)接收用戶發(fā)送的讀io請求后,根據(jù)讀io請求構(gòu)建讀io數(shù)據(jù)并將讀io數(shù)據(jù)按預(yù)設(shè)長度切割為讀數(shù)據(jù)塊的具體方式,可以采用與現(xiàn)有技術(shù)相同或相似的方式,本實(shí)施例對此不受任何限制。
步驟202:根據(jù)讀數(shù)據(jù)塊各自的lba分別查詢映射表中是否存在對應(yīng)的條帶號;若是,則進(jìn)入步驟203;若否,則進(jìn)入步驟204。
可以理解的是,本步驟可以為分別根據(jù)每個讀數(shù)據(jù)塊的lba依次查詢映射表中是否存在對應(yīng)的條帶號,如分別判斷每個讀數(shù)據(jù)塊的lba是否存在對應(yīng)的條帶號;也可以為對全部讀數(shù)據(jù)塊各自的lba查詢映射表中是否存在對應(yīng)的條帶號,如直接判斷全部讀數(shù)據(jù)塊各自的lba是否均存在對應(yīng)的條帶號。本實(shí)施例對此不受任何限制。
步驟203:讀取條帶號對應(yīng)的條帶的數(shù)據(jù)表,并下盤讀取相應(yīng)的數(shù)據(jù)。
其中,數(shù)據(jù)表可以為上一實(shí)施例中對目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤時生成的數(shù)據(jù)表,對于數(shù)據(jù)表的具體生成方式,可以采用與現(xiàn)有技術(shù)相同或相似的方式,本實(shí)施例對此不受任何限制。
可以理解的是,本步驟中條帶號對應(yīng)的條帶可以為上一實(shí)施例中寫數(shù)據(jù)塊填充的目標(biāo)條帶。對于本步驟中的具體過程,可以采用與現(xiàn)有技術(shù)相同或相似的方式,本實(shí)施例對此不受任何限制。
步驟204:將lba不存在對應(yīng)的條帶號的讀數(shù)據(jù)塊填充0。
可以理解的是,本步驟可以為選取出全部讀數(shù)據(jù)塊各自的lba中不存在對應(yīng)的條帶號的lba,將該lba對應(yīng)的讀數(shù)據(jù)塊填充0。
具體的,對于將lba不存在對應(yīng)的條帶號的讀數(shù)據(jù)塊填充0的具體方式,可以采用與現(xiàn)有技術(shù)相同或相似的方式,本實(shí)施例對此不受任何限制。
本實(shí)施例中,本發(fā)明實(shí)施例通過根據(jù)讀數(shù)據(jù)塊各自的lba分別查詢映射表中是否存在對應(yīng)的條帶號,可以根據(jù)映射表獲取每個讀數(shù)據(jù)塊的lba對應(yīng)的條帶號,從而查找到對應(yīng)的條帶,避免了查詢找不到讀數(shù)據(jù)塊對應(yīng)的條帶的情況發(fā)生。
請參考圖4,圖4為本發(fā)明實(shí)施例所提供的一種基于全閃存陣列的隨機(jī)io順序化裝置的結(jié)構(gòu)圖。該裝置可以包括:
寫切割模塊100,用于接收寫io數(shù)據(jù)后,將寫io數(shù)據(jù)按預(yù)設(shè)長度切割為寫數(shù)據(jù)塊;
處理模塊200,用于從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄寫數(shù)據(jù)塊各自的lba與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,并將寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中;其中,可用的條帶包括未填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶;
下盤模塊300,用于對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤。
可選的,處理模塊200,可以包括:
填充子模塊,用于依次將寫數(shù)據(jù)塊填充到各自對應(yīng)的目標(biāo)條帶中。
可選的,處理模塊200,可以包括:
選取子模塊,用于根據(jù)寫數(shù)據(jù)塊的數(shù)量,從全部可用的條帶中,依次選取使用次數(shù)最少且對應(yīng)的條帶號最小的目標(biāo)條帶。
可選的,寫切割模塊100,可以包括:
寫切割子模塊,用于將寫io數(shù)據(jù)按4kb或8kb的長度切割為寫數(shù)據(jù)塊。
可選的,該裝置還可以包括:
讀切割模塊,用于接收讀io請求后,構(gòu)建讀io數(shù)據(jù)并將讀io數(shù)據(jù)按預(yù)設(shè)長度切割為讀數(shù)據(jù)塊;
判斷模塊,用于根據(jù)讀數(shù)據(jù)塊各自的lba分別查詢映射表中是否存在對應(yīng)的條帶號;若是,則向讀取模塊發(fā)送讀取信號;若否,則向填充模塊發(fā)送填充信號;
讀取模塊,用于接收讀取信號,讀取條帶號對應(yīng)的條帶的數(shù)據(jù)表,并下盤讀取相應(yīng)的數(shù)據(jù);
填充模塊,用于接收填充信號,將lba不存在對應(yīng)的條帶號的讀數(shù)據(jù)塊填充0。
本實(shí)施例中,本發(fā)明實(shí)施例通過處理模塊200從全部可用的條帶中,按預(yù)設(shè)規(guī)則選取目標(biāo)條帶,在映射表中記錄寫數(shù)據(jù)塊各自的lba(logicblockaddress,邏輯塊地址)與各自對應(yīng)的目標(biāo)條帶的條帶號的映射關(guān)系,可以使用偏移和raid條帶映射的方式將數(shù)據(jù)塊填充到對應(yīng)的目標(biāo)條帶,使得目標(biāo)條帶中填充的內(nèi)容均為數(shù)據(jù)塊,不存在空的填充內(nèi)容,使得隨機(jī)io可以順序化填充到目標(biāo)條帶中;通過下盤模塊300對填充滿對應(yīng)的寫數(shù)據(jù)塊的目標(biāo)條帶進(jìn)行數(shù)據(jù)下盤,可以使數(shù)據(jù)塊可以順序化存儲到存儲介質(zhì)中,使得隨機(jī)io也可以進(jìn)行順序化存儲,提升了全閃存陣列的性能和使用壽命,并且實(shí)現(xiàn)了傳統(tǒng)磁盤陣列和全閃存陣列的結(jié)合,減輕了傳統(tǒng)磁盤陣列向全閃存陣列轉(zhuǎn)換難度,提升了用戶體驗(yàn)。
說明書中各個實(shí)施例采用遞進(jìn)的方式描述,每個實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個實(shí)施例之間相同相似部分互相參見即可。對于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲器(ram)、內(nèi)存、只讀存儲器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動磁盤、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上對本發(fā)明所提供的基于全閃存陣列的隨機(jī)io順序化方法及裝置進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。