一種固態(tài)盤陣列的數據布局方法
【技術領域】
[0001]本發(fā)明涉及計算機存儲領域,尤其是涉及一種固態(tài)盤陣列的數據布局方法。
【背景技術】
[0002]磁盤是目前主流的存儲介質,廣泛應用于個人電腦、互聯(lián)網和企業(yè)級數據存儲等領域,但是由于其機械特性的限制,讀寫性能無法進一步獲得更高的提升,基于磁盤的存儲設備逐步成為存儲系統(tǒng)的性能瓶頸。近年來,固態(tài)盤由于其讀寫性能高、能耗低、防震性好以及日漸低廉的價格等優(yōu)點,逐漸成為磁盤的有力替代品。與磁盤相比,基于閃存的固態(tài)盤沒有機械部件(如磁頭、轉軸等),其內部由半導體器件組成,因此固態(tài)盤對外服務時無需尋道時間等由機械運動引發(fā)的延時,固態(tài)盤的性能相對于磁盤有極大的提升,具體表現為尚隨機讀與性能、尚可靠性和尚能效。但是由于固態(tài)盤內部閃存芯片的特性,固態(tài)盤也存在著局限性,在寫入數據時,若原數據頁中存在著有效數據,無法在原位置中覆蓋寫入新數據。固態(tài)盤采取的是異地更新的策略,即首先將原數據置為無效,把待更新的數據寫入其它空閑頁中;當固態(tài)盤中無效頁越來越多、空閑頁數量低于系統(tǒng)所設置閾值時,會觸發(fā)垃圾回收操作,將待擦除塊中的有效數據拷貝到空閑頁后擦除該閃存塊,從而釋放更多的空間來保存新的數據。然而,閃存芯片的擦除次數是有限的,影響了固態(tài)盤的使用壽命與可靠性,在企業(yè)級服務器的應用場景下將威脅到存儲系統(tǒng)的可靠性。
[0003]在企業(yè)級服務器的應用場景下,磁盤陣列技術被廣泛用于提升磁盤存儲系統(tǒng)的性能和可靠性。相應地,將磁盤陣列技術應用于固態(tài)盤,可以構建大容量、高性能、高可靠的固態(tài)盤存儲系統(tǒng)。在固態(tài)盤陣列中,數據分布在不同固態(tài)盤上,實現了同步化的存取操作,增加了讀寫操作的并行性,提高了固態(tài)盤存儲系統(tǒng)的性能;另外,由于固態(tài)盤陣列引入了數據冗余,也提高了固態(tài)盤存儲系統(tǒng)的可靠性。而固態(tài)盤陣列的分塊大小作為固態(tài)盤陣列性能的重要影響因素之一,決定著固態(tài)盤陣列中數據的分割粒度。目前,關于固態(tài)盤陣列中最優(yōu)分塊大小的研究尚處于探索階段,如果直接采用基于磁盤陣列的最優(yōu)分塊大小,由于沒有考慮到固態(tài)盤與磁盤內部結構的差異,固態(tài)盤陣列的性能將受到限制。
[0004]Farzaneh Rajaei Salmasij Hossein Asadij and Majid GhasemiGol.1mpact ofStripe Unit Size on Performance and Endurance of SSD-Based RAID Arrays.ScientiaIranicaj Transact1ns D,2013.20(6):1978-1998.
【發(fā)明內容】
[0005]本發(fā)明的目的在于提供可綜合固態(tài)盤陣列的不同分塊大小在讀寫操作和請求大小上的優(yōu)勢,以發(fā)揮固態(tài)盤陣列最優(yōu)性能的一種固態(tài)盤陣列的數據布局方法。
[0006]本發(fā)明包括以下步驟:
[0007](I)初始化步驟,具體過程如下:
[0008](1.1)主控模塊打開已有的固態(tài)盤陣列或創(chuàng)建新的固態(tài)盤陣列,判斷該固態(tài)盤陣列是否為新創(chuàng)建的固態(tài)盤陣列,若是,則轉過程(1.2),否則轉過程(1.3);
[0009](1.2)主控模塊根據用戶指令,將新創(chuàng)建的固態(tài)盤陣列劃分為3個分區(qū),容量比例設置為2: I: 1,分區(qū)號分別設置為0、1和2,按照4KB、8KB和32KB的分塊大小對這3個分區(qū)重新進行固態(tài)盤陣列的條帶化并新建數據映射表,轉步驟(2);
[0010](1.3)主控模塊讀取保存在固態(tài)盤陣列的成員固態(tài)盤超級塊中的數據映射表和分區(qū)信息,轉步驟⑵;
[0011](2)請求處理步驟,具體過程如下:
[0012](2.1)請求處理模塊判斷固態(tài)盤陣列的請求等待隊列中是否有請求,若有,則獲取一個請求并轉過程(2.2),否則轉過程(2.3);
[0013](2.2)請求處理模塊獲取該請求的偏移量、請求大小和請求類型,轉步驟(3);
[0014](2.3)記錄超時時間,若超時時間低于系統(tǒng)設置的閾值(如1s)時,則轉過程(2.1),否則說明此時系統(tǒng)處于空閑狀態(tài),轉步驟(5);
[0015](3)數據映射步驟,具體過程如下:
[0016](3.1)數據映射模塊判斷該請求是否是讀請求,若是,則轉過程(3.5),否則轉過程(3.2);
[0017](3.2)數據映射模塊根據請求的偏移量及請求大小,判斷該請求的數據塊是否在當前數據映射表中,若是,則轉過程(3.4),否則,從分區(qū)大小為4KB的分區(qū)中獲取一個內部塊偏移,轉過程(3.3);
[0018](3.3)數據映射模塊向數據映射表中寫入新數據項,數據項中分區(qū)號置為0、時間戳設置為當前系統(tǒng)時間、計數器初始化為O ;判斷請求大小,若請求大小大于16KB,則將該數據項放入待維護隊列;操作類型設置為“寫入”,轉步驟(4);
[0019](3.4)數據映射模塊根據請求偏移量檢索數據映射表,獲取對應的數據項,并設置操作類型為“更新”,轉步驟⑷;
[0020](3.5)數據映射模塊根據請求偏移量檢索數據映射表,獲取對應的數據項,并設置操作類型為“讀取”,轉步驟⑷;
[0021](4)數據讀寫步驟,具體過程如下:
[0022](4.1)數據讀寫模塊判斷操作類型是否是“寫入”,若是,則轉過程(4.2),否則判斷數據類型是否是“讀取”,若是,則轉過程(4.3),否則轉過程(4.4);
[0023](4.2)數據讀寫模塊根據數據項中的“內部塊偏移量”寫入數據,轉步驟(2);
[0024](4.3)數據讀寫模塊判斷該數據項是否正在進行一致性維護,若是,則從緩沖區(qū)讀出數據,否則根據該數據項所在分區(qū)的“內部塊偏移量”從固態(tài)盤陣列讀出數據,轉步驟
(2);
[0025](4.4)數據讀寫模塊判斷該數據項是否正在進行一致性維護,若是,則更新緩沖區(qū)中大小為“請求大小”的數據為待寫入的數據;否則根據該數據項所在分區(qū)的“內部塊偏移量”向固態(tài)盤陣列寫入數據,并判斷該數據項的時間戳與當前系統(tǒng)時間的差值是否小于系統(tǒng)設置的超時時間(如2000ms),若是,則更新該數據項的計數器即遞增1,否則將計數器重置為O ;更新該數據項的時間戳為當前系統(tǒng)時間,轉步驟(2);
[0026](5) 一致性維護步驟,具體過程如下:
[0027](5.1) 一致性維護模塊判斷一致性維護隊列中是否有待維護的項目,若有,則從一致性維護隊列中獲取一個待維護項目,轉過程(5.2),否則轉步驟(2);
[0028](5.2) 一致性維護模塊判斷待維護項目的計數器值是否大于系統(tǒng)設置的閾值(如20),若是,則表明該項目近期被頻繁更新,無需迀移至其他分塊大小的區(qū)域,轉過程(5.4),否則表明該項目為不經常更新的項,需要將以該項目的分區(qū)號下的“內部塊偏移量”為起始地址、“請求大小”為長度的數據迀移至其他分塊大小的區(qū)域,轉過程(5.3);
[0029](5.3) 一致性維護模塊把以該維護項目所在“分區(qū)號”的“內部塊偏移量”為起始地址、“請求大小”為長度的數據寫入緩沖區(qū)中,判斷該項目的數據大小是否小于80KB,若是,則從8KB大小的分區(qū)中獲取一個內部塊偏移并設置分區(qū)號為1,否則從32KB大小的分區(qū)中獲取一個內部塊偏移量并設置分區(qū)號為2 ;然后將該數據項對應的數據迀移到以“內部塊偏移量”為起始地址的位置并更新數據映射表,轉過程(5.1);
[0030](5.4) 一致性維護模塊將該維護項目的計數器置為0,時間戳更新為當前系統(tǒng)時間,轉過程(5.1);
[0031](6)結束步驟,當用戶發(fā)出指令關閉固態(tài)盤陣列時,具體過程如下:
[0032]主控模塊將數據映射表保存到固態(tài)盤陣列的超級塊中,關閉固態(tài)盤陣列設備,釋放相關的資源。
[0033]在步驟(I)過程(1.1)中,所述固態(tài)盤陣列上設有主控模塊、請求處理模塊、數據映射模塊、數據讀寫模塊和一致性維護模塊,并設置一個數據映射表和多分塊存儲區(qū)域。
[0034]在步驟⑴過程(1.2)中,所述數據映射表包括M條映射信息,每條映射信息由6個數據項構成,各數據項依次為請求偏移量rq_0ffset、內部塊偏移量in_0ffset、請求大小Size、分區(qū)號md_Num、時間戳TS和計數器UC ;M為大于等于O的自然數。
[0035]本發(fā)明包括初始化步驟、請求處理步驟、數據映射步驟、數據讀寫步驟、一致性維護步驟和結束步驟。基于充分利用固態(tài)盤陣列的多種不同分塊大小的優(yōu)勢,并根據讀寫請求實時特性的不同,將數據塊布局于性能最優(yōu)的存儲區(qū)域。對于讀請求而言,最優(yōu)分塊大小可以充分發(fā)揮固態(tài)盤陣列的最佳并行性,而對于寫請求而言,最優(yōu)分塊大小可以在最大程度上減少寫入請求引發(fā)的固態(tài)盤陣列的校驗塊更新。本發(fā)明綜合了多個分塊大小的優(yōu)勢而不是單一地使用一種分塊大小,從而提高了固態(tài)盤陣列的性能。
[0036]另外,本發(fā)明所述的一種固態(tài)盤陣列的數據布局方法能夠和固態(tài)盤陣列功能模塊協(xié)同工作,并且可以被嵌入到現有的固態(tài)盤陣列系統(tǒng)中,包括硬件和軟件固態(tài)盤陣列系統(tǒng)。適用于構造具有尚性能、尚可用性和尚可靠性的固態(tài)盤存儲系統(tǒng)。
【附圖說明】
[0037]圖1為本發(fā)明的示意圖;
[0038]圖2為本發(fā)明的數據映射表中一條映射信息的數據項示意圖;
[0039]圖3為本發(fā)明初始化步驟的過程示意圖;
[0040]圖4為本發(fā)明請求處理步驟的過程示意圖;
[0041]圖5為本發(fā)明數據映射步驟的過程示意圖;
[0042]圖6為本發(fā)明數據讀寫步驟的過程示意圖;
[0043]圖7為本發(fā)明一致性維護步驟的過程示意圖;
[0044]圖8為本發(fā)明結束步驟的過程示意圖。
【具體實施方式】
[0045]下面以4塊固態(tài)盤組成的陣列級別5為例,結合附圖對本發(fā)明作進一步說明。
[0046]圖1為本發(fā)明的示意圖:初始化步驟完成后進入請求處理步驟,然后進入順序的數據映射步驟與數據讀寫步驟或者進入一致性維護步驟,當用戶發(fā)出關閉指令時,進入結束步驟。
[004