7]圖2為本發(fā)明的數(shù)據(jù)映射表中一條映射信息的數(shù)據(jù)項(xiàng)示意圖:數(shù)據(jù)映射表中,每條映射信息由6個(gè)數(shù)據(jù)項(xiàng)構(gòu)成,分別為請(qǐng)求偏移量rq_0ffset、內(nèi)部塊偏移量in_0ffset、請(qǐng)求大小Size、分區(qū)號(hào)md_Num、時(shí)間戳TS和計(jì)數(shù)器UC0
[0048]圖3為本發(fā)明初始化步驟的過(guò)程示意圖:主控模塊根據(jù)用戶(hù)指令打開(kāi)已有的固態(tài)盤(pán)陣列或者創(chuàng)建新的固態(tài)盤(pán)陣列,判斷固態(tài)盤(pán)陣列是否是新創(chuàng)建的,若是,則主控模塊根據(jù)用戶(hù)指令,將新創(chuàng)建的固態(tài)盤(pán)陣列劃分為3個(gè)分區(qū),容量比例設(shè)置為2: I: 1,分區(qū)號(hào)分別設(shè)置為0、I和2,按照4KB、8KB和32KB的分塊大小對(duì)這3個(gè)分區(qū)重新進(jìn)行固態(tài)盤(pán)陣列的條帶化并新建數(shù)據(jù)映射表;否則讀取保存在固態(tài)盤(pán)陣列的成員固態(tài)盤(pán)超級(jí)塊中的數(shù)據(jù)映射表和分區(qū)信息。
[0049]圖4為本發(fā)明請(qǐng)求處理步驟的過(guò)程示意圖:請(qǐng)求處理模塊判斷固態(tài)盤(pán)陣列的請(qǐng)求等待隊(duì)列中是否有請(qǐng)求,若有則獲取一個(gè)請(qǐng)求并獲取該請(qǐng)求的偏移量、請(qǐng)求大小和請(qǐng)求類(lèi)型,進(jìn)入數(shù)據(jù)映射步驟;否則記錄超時(shí)時(shí)間并判斷超時(shí)時(shí)間是否低于系統(tǒng)設(shè)置的閾值(如10s),若是,則繼續(xù)判斷固態(tài)盤(pán)陣列的請(qǐng)求等待隊(duì)列中是否有請(qǐng)求,否則說(shuō)明此時(shí)系統(tǒng)處于空閑狀態(tài),進(jìn)入一致性維護(hù)步驟;
[0050]圖5為本發(fā)明數(shù)據(jù)映射步驟的過(guò)程示意圖:數(shù)據(jù)映射模塊判斷該請(qǐng)求是否是讀請(qǐng)求,若是,則根據(jù)請(qǐng)求偏移量檢索數(shù)據(jù)映射表,獲取對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并設(shè)置操作類(lèi)型為“讀取”,進(jìn)入數(shù)據(jù)讀寫(xiě)步驟;否則根據(jù)請(qǐng)求的偏移量及請(qǐng)求大小,判斷該請(qǐng)求的數(shù)據(jù)塊是否在當(dāng)前數(shù)據(jù)映射表中,若是,則根據(jù)請(qǐng)求偏移量檢索數(shù)據(jù)映射表獲取對(duì)應(yīng)的數(shù)據(jù)項(xiàng),設(shè)置操作類(lèi)型為“更新”,進(jìn)入數(shù)據(jù)讀寫(xiě)步驟;否則從分區(qū)大小為4KB的分區(qū)中獲取一個(gè)內(nèi)部塊偏移,向數(shù)據(jù)映射表中寫(xiě)入新數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng)中分區(qū)號(hào)置為0、時(shí)間戳設(shè)置為當(dāng)前系統(tǒng)時(shí)間、計(jì)數(shù)器初始化為O ;判斷請(qǐng)求大小,若請(qǐng)求大小大于16KB,則將該數(shù)據(jù)項(xiàng)放入待維護(hù)隊(duì)列;設(shè)置操作類(lèi)型為“寫(xiě)入”,進(jìn)入數(shù)據(jù)讀寫(xiě)步驟;
[0051]圖6為本發(fā)明數(shù)據(jù)讀寫(xiě)步驟的過(guò)程示意圖:數(shù)據(jù)讀寫(xiě)模塊判斷操作類(lèi)型是否是“寫(xiě)入”,若是,則根據(jù)數(shù)據(jù)項(xiàng)中的“內(nèi)部塊偏移量”寫(xiě)入數(shù)據(jù),返回請(qǐng)求處理步驟;否則判斷數(shù)據(jù)類(lèi)型是否是“讀取”,若是,則判斷該數(shù)據(jù)項(xiàng)是否正在進(jìn)行一致性維護(hù),若是,則從緩沖區(qū)讀出數(shù)據(jù),否則根據(jù)該數(shù)據(jù)項(xiàng)所在分區(qū)的“內(nèi)部塊偏移量”從固態(tài)盤(pán)陣列讀出數(shù)據(jù),返回請(qǐng)求處理步驟;否則若操作類(lèi)型不是“讀取”則判斷該數(shù)據(jù)項(xiàng)是否正在進(jìn)行一致性維護(hù),若是,則更新緩沖區(qū)中大小為“請(qǐng)求大小”的數(shù)據(jù)為待寫(xiě)入的數(shù)據(jù),否則根據(jù)該數(shù)據(jù)項(xiàng)所在分區(qū)的“內(nèi)部塊偏移量”向固態(tài)盤(pán)陣列寫(xiě)入數(shù)據(jù),并判斷該數(shù)據(jù)項(xiàng)的時(shí)間戳與當(dāng)前系統(tǒng)時(shí)間的差值是否小于系統(tǒng)設(shè)置的超時(shí)時(shí)間(如2000ms),若是,則更新該數(shù)據(jù)項(xiàng)的計(jì)數(shù)器即遞增1,否則將計(jì)數(shù)器重置為O ;更新該數(shù)據(jù)項(xiàng)的時(shí)間戳為當(dāng)前系統(tǒng)時(shí)間,返回請(qǐng)求處理步驟;
[0052]圖7為本發(fā)明一致性維護(hù)步驟的過(guò)程示意圖:一致性維護(hù)模塊判斷一致性維護(hù)隊(duì)列中是否有待維護(hù)的項(xiàng)目,若沒(méi)有則返回請(qǐng)求處理步驟,否則從一致性維護(hù)隊(duì)列中獲取一個(gè)待維護(hù)項(xiàng)目,判斷該項(xiàng)目的計(jì)數(shù)器值是否大于系統(tǒng)設(shè)置的閾值(如20),若是,則表明該項(xiàng)目近期被頻繁更新,無(wú)需迀移至其他分塊大小的區(qū)域,一致性維護(hù)模塊將該維護(hù)項(xiàng)目的計(jì)數(shù)器置為O、時(shí)間戳更新為當(dāng)前系統(tǒng)時(shí)間;否則表明該項(xiàng)目為不經(jīng)常更新的項(xiàng),需要將以該項(xiàng)目的分區(qū)號(hào)下的“內(nèi)部塊偏移量”為起始地址、“請(qǐng)求大小”為長(zhǎng)度的數(shù)據(jù)迀移至其他分塊大小的區(qū)域,一致性維護(hù)模塊把以該維護(hù)項(xiàng)目所在“分區(qū)號(hào)”的“內(nèi)部塊偏移量”為起始地址、“請(qǐng)求大小”為長(zhǎng)度的數(shù)據(jù)寫(xiě)入緩沖區(qū)中,判斷該項(xiàng)目的數(shù)據(jù)大小是否小于80KB,若是,則從8KB大小的分區(qū)中獲取一個(gè)內(nèi)部塊偏移并設(shè)置分區(qū)號(hào)為1,否則從32KB大小的分區(qū)中獲取一個(gè)內(nèi)部塊偏移量并設(shè)置分區(qū)號(hào)為2 ;然后將該數(shù)據(jù)項(xiàng)對(duì)應(yīng)的數(shù)據(jù)迀移到以“內(nèi)部塊偏移量”為起始地址的位置并更新數(shù)據(jù)映射表;
[0053]圖8為本發(fā)明結(jié)束步驟的過(guò)程示意圖:主控模塊將數(shù)據(jù)映射表保存到固態(tài)盤(pán)陣列各成員固態(tài)盤(pán)的超級(jí)塊中,然后關(guān)閉該固態(tài)盤(pán)陣列設(shè)備,釋放相關(guān)的資源。
【主權(quán)項(xiàng)】
1.一種固態(tài)盤(pán)陣列的數(shù)據(jù)布局方法,其特征在于包括以下步驟: (1)初始化步驟,具體過(guò)程如下: (1.1)主控模塊打開(kāi)已有的固態(tài)盤(pán)陣列或創(chuàng)建新的固態(tài)盤(pán)陣列,判斷該固態(tài)盤(pán)陣列是否為新創(chuàng)建的固態(tài)盤(pán)陣列,若是,則轉(zhuǎn)過(guò)程(1.2),否則轉(zhuǎn)過(guò)程(1.3); (1.2)主控模塊根據(jù)用戶(hù)指令,將新創(chuàng)建的固態(tài)盤(pán)陣列劃分為3個(gè)分區(qū),容量比例設(shè)置為2:1: 1,分區(qū)號(hào)分別設(shè)置為0、1和2,按照41^、81?和321?的分塊大小對(duì)這3個(gè)分區(qū)重新進(jìn)行固態(tài)盤(pán)陣列的條帶化并新建數(shù)據(jù)映射表,轉(zhuǎn)步驟(2); (1.3)主控模塊讀取保存在固態(tài)盤(pán)陣列的成員固態(tài)盤(pán)超級(jí)塊中的數(shù)據(jù)映射表和分區(qū)信息,轉(zhuǎn)步驟⑵; (2)請(qǐng)求處理步驟,具體過(guò)程如下: (2.1)請(qǐng)求處理模塊判斷固態(tài)盤(pán)陣列的請(qǐng)求等待隊(duì)列中是否有請(qǐng)求,若有,則獲取一個(gè)請(qǐng)求并轉(zhuǎn)過(guò)程(2.2),否則轉(zhuǎn)過(guò)程(2.3); (2.2)請(qǐng)求處理模塊獲取該請(qǐng)求的偏移量、請(qǐng)求大小和請(qǐng)求類(lèi)型,轉(zhuǎn)步驟(3); (2.3)記錄超時(shí)時(shí)間,若超時(shí)時(shí)間低于系統(tǒng)設(shè)置的閾值(如1s)時(shí),則轉(zhuǎn)過(guò)程(2.1),否則說(shuō)明此時(shí)系統(tǒng)處于空閑狀態(tài),轉(zhuǎn)步驟(5); (3)數(shù)據(jù)映射步驟,具體過(guò)程如下: (3.1)數(shù)據(jù)映射模塊判斷該請(qǐng)求是否是讀請(qǐng)求,若是,則轉(zhuǎn)過(guò)程(3.5),否則轉(zhuǎn)過(guò)程(3.2); (3.2)數(shù)據(jù)映射模塊根據(jù)請(qǐng)求的偏移量及請(qǐng)求大小,判斷該請(qǐng)求的數(shù)據(jù)塊是否在當(dāng)前數(shù)據(jù)映射表中,若是,則轉(zhuǎn)過(guò)程(3.4),否則,從分區(qū)大小為4KB的分區(qū)中獲取一個(gè)內(nèi)部塊偏移,轉(zhuǎn)過(guò)程(3.3); (3.3)數(shù)據(jù)映射模塊向數(shù)據(jù)映射表中寫(xiě)入新數(shù)據(jù)項(xiàng),數(shù)據(jù)項(xiàng)中分區(qū)號(hào)置為0、時(shí)間戳設(shè)置為當(dāng)前系統(tǒng)時(shí)間、計(jì)數(shù)器初始化為O ;判斷請(qǐng)求大小,若請(qǐng)求大小大于16KB,則將該數(shù)據(jù)項(xiàng)放入待維護(hù)隊(duì)列;操作類(lèi)型設(shè)置為“寫(xiě)入”,轉(zhuǎn)步驟(4); (3.4)數(shù)據(jù)映射模塊根據(jù)請(qǐng)求偏移量檢索數(shù)據(jù)映射表,獲取對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并設(shè)置操作類(lèi)型為“更新”,轉(zhuǎn)步驟⑷; (3.5)數(shù)據(jù)映射模塊根據(jù)請(qǐng)求偏移量檢索數(shù)據(jù)映射表,獲取對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并設(shè)置操作類(lèi)型為“讀取”,轉(zhuǎn)步驟⑷; (4)數(shù)據(jù)讀寫(xiě)步驟,具體過(guò)程如下: (4.1)數(shù)據(jù)讀寫(xiě)模塊判斷操作類(lèi)型是否是“寫(xiě)入”,若是,則轉(zhuǎn)過(guò)程(4.2),否則判斷數(shù)據(jù)類(lèi)型是否是“讀取”,若是,則轉(zhuǎn)過(guò)程(4.3),否則轉(zhuǎn)過(guò)程(4.4); (4.2)數(shù)據(jù)讀寫(xiě)模塊根據(jù)數(shù)據(jù)項(xiàng)中的“內(nèi)部塊偏移量”寫(xiě)入數(shù)據(jù),轉(zhuǎn)步驟(2); (4.3)數(shù)據(jù)讀寫(xiě)模塊判斷該數(shù)據(jù)項(xiàng)是否正在進(jìn)行一致性維護(hù),若是,則從緩沖區(qū)讀出數(shù)據(jù),否則根據(jù)該數(shù)據(jù)項(xiàng)所在分區(qū)的“內(nèi)部塊偏移量”從固態(tài)盤(pán)陣列讀出數(shù)據(jù),轉(zhuǎn)步驟(2); (4.4)數(shù)據(jù)讀寫(xiě)模塊判斷該數(shù)據(jù)項(xiàng)是否正在進(jìn)行一致性維護(hù),若是,則更新緩沖區(qū)中大小為“請(qǐng)求大小”的數(shù)據(jù)為待寫(xiě)入的數(shù)據(jù);否則根據(jù)該數(shù)據(jù)項(xiàng)所在分區(qū)的“內(nèi)部塊偏移量”向固態(tài)盤(pán)陣列寫(xiě)入數(shù)據(jù),并判斷該數(shù)據(jù)項(xiàng)的時(shí)間戳與當(dāng)前系統(tǒng)時(shí)間的差值是否小于系統(tǒng)設(shè)置的超時(shí)時(shí)間(如2000ms),若是,則更新該數(shù)據(jù)項(xiàng)的計(jì)數(shù)器即遞增1,否則將計(jì)數(shù)器重置為O;更新該數(shù)據(jù)項(xiàng)的時(shí)間戳為當(dāng)前系統(tǒng)時(shí)間,轉(zhuǎn)步驟(2); (5)一致性維護(hù)步驟,具體過(guò)程如下: (5.1) 一致性維護(hù)模塊判斷一致性維護(hù)隊(duì)列中是否有待維護(hù)的項(xiàng)目,若有,則從一致性維護(hù)隊(duì)列中獲取一個(gè)待維護(hù)項(xiàng)目,轉(zhuǎn)過(guò)程(5.2),否則轉(zhuǎn)步驟(2); (5.2) 一致性維護(hù)模塊判斷待維護(hù)項(xiàng)目的計(jì)數(shù)器值是否大于系統(tǒng)設(shè)置的閾值(如20),若是,則表明該項(xiàng)目近期被頻繁更新,無(wú)需迀移至其他分塊大小的區(qū)域,轉(zhuǎn)過(guò)程(5.4),否則表明該項(xiàng)目為不經(jīng)常更新的項(xiàng),需要將以該項(xiàng)目的分區(qū)號(hào)下的“內(nèi)部塊偏移量”為起始地址、“請(qǐng)求大小”為長(zhǎng)度的數(shù)據(jù)迀移至其他分塊大小的區(qū)域,轉(zhuǎn)過(guò)程(5.3); (5.3) 一致性維護(hù)模塊把以該維護(hù)項(xiàng)目所在“分區(qū)號(hào)”的“內(nèi)部塊偏移量”為起始地址、“請(qǐng)求大小”為長(zhǎng)度的數(shù)據(jù)寫(xiě)入緩沖區(qū)中,判斷該項(xiàng)目的數(shù)據(jù)大小是否小于80KB,若是,則從8KB大小的分區(qū)中獲取一個(gè)內(nèi)部塊偏移并設(shè)置分區(qū)號(hào)為1,否則從32KB大小的分區(qū)中獲取一個(gè)內(nèi)部塊偏移量并設(shè)置分區(qū)號(hào)為2 ;然后將該數(shù)據(jù)項(xiàng)對(duì)應(yīng)的數(shù)據(jù)迀移到以“內(nèi)部塊偏移量”為起始地址的位置并更新數(shù)據(jù)映射表,轉(zhuǎn)過(guò)程(5.1); (5.4) 一致性維護(hù)模塊將該維護(hù)項(xiàng)目的計(jì)數(shù)器置為0,時(shí)間戳更新為當(dāng)前系統(tǒng)時(shí)間,轉(zhuǎn)過(guò)程(5.1); (6)結(jié)束步驟,當(dāng)用戶(hù)發(fā)出指令關(guān)閉固態(tài)盤(pán)陣列時(shí),具體過(guò)程如下: 主控模塊將數(shù)據(jù)映射表保存到固態(tài)盤(pán)陣列的超級(jí)塊中,關(guān)閉固態(tài)盤(pán)陣列設(shè)備,釋放相關(guān)的資源。2.如權(quán)利要求1所述一種固態(tài)盤(pán)陣列的數(shù)據(jù)布局方法,其特征在于在步驟(I)過(guò)程(1.D中,所述固態(tài)盤(pán)陣列上設(shè)有主控模塊、請(qǐng)求處理模塊、數(shù)據(jù)映射模塊、數(shù)據(jù)讀寫(xiě)模塊和一致性維護(hù)模塊,并設(shè)置一個(gè)數(shù)據(jù)映射表和多分塊存儲(chǔ)區(qū)域。3.如權(quán)利要求1所述一種固態(tài)盤(pán)陣列的數(shù)據(jù)布局方法,其特征在于在步驟(I)過(guò)程(1.2)中,所述數(shù)據(jù)映射表包括M條映射信息,每條映射信息由6個(gè)數(shù)據(jù)項(xiàng)構(gòu)成,各數(shù)據(jù)項(xiàng)依次為請(qǐng)求偏移量rq_Offset、內(nèi)部塊偏移量in_Offset、請(qǐng)求大小Size、分區(qū)號(hào)md_Num、時(shí)間戳TS和計(jì)數(shù)器UC ;M為大于等于O的自然數(shù)。
【專(zhuān)利摘要】一種固態(tài)盤(pán)陣列的數(shù)據(jù)布局方法,涉及計(jì)算機(jī)存儲(chǔ)領(lǐng)域。固態(tài)盤(pán)陣列上設(shè)置四個(gè)功能模塊即主控模塊、請(qǐng)求處理模塊、數(shù)據(jù)映射模塊、數(shù)據(jù)讀寫(xiě)模塊和一致性維護(hù)模塊,并設(shè)置一個(gè)數(shù)據(jù)映射表和多分塊存儲(chǔ)區(qū)域。包括初始化步驟、請(qǐng)求處理步驟、數(shù)據(jù)映射步驟、數(shù)據(jù)讀/寫(xiě)步驟、一致性維護(hù)步驟和結(jié)束步驟。充分利用固態(tài)盤(pán)陣列的多種不同分塊大小在讀寫(xiě)操作和請(qǐng)求大小上的優(yōu)勢(shì),綜合使用多個(gè)分塊大小而非單一地使用某一種分塊大小,以提高固態(tài)盤(pán)陣列的整體性能。能夠和固態(tài)盤(pán)陣列功能模塊協(xié)同工作,并且可以被嵌入到現(xiàn)有的固態(tài)盤(pán)陣列系統(tǒng)中,包括硬件和軟件固態(tài)盤(pán)陣列系統(tǒng)。適用于構(gòu)造具有高性能、高可用性和高可靠性的固態(tài)盤(pán)存儲(chǔ)系統(tǒng)。
【IPC分類(lèi)】G06F3/06
【公開(kāi)號(hào)】CN105045540
【申請(qǐng)?zhí)枴緾N201510540940
【發(fā)明人】吳素貞, 毛波, 楊偉健, 陳驍, 林燕萍
【申請(qǐng)人】廈門(mén)大學(xué)
【公開(kāi)日】2015年11月11日
【申請(qǐng)日】2015年8月28日