專利名稱:基于存儲區(qū)域網絡的高速固態(tài)存儲設備的實現(xiàn)方法
技術領域:
基于存儲區(qū)域網絡的高速固態(tài)存儲設備的實現(xiàn)方法屬于存儲區(qū)域網絡SAN存儲技術領域。
背景技術:
隨著近年來CPU和主存性能的大幅提升,外存儲器的I/O能力逐漸成為計算機系統(tǒng)真正的瓶頸。特別是隨著寬帶互聯(lián)網的普及、移動終端數(shù)量的增長及多媒體應用的日益豐富,越來越多的信息系統(tǒng)采用集群系統(tǒng)來進行事務處理,如大規(guī)模在線事務處理,高性能計算等,這樣信息系統(tǒng)對存儲系統(tǒng)提出越來越高的要求更大的存儲容量,更快的存儲速度,更經濟的存儲價格。存儲區(qū)域網絡(SAN)技術的出現(xiàn)很好的滿足了信息系統(tǒng)對存儲系統(tǒng)在容量和價格上的要求,然而采用SAN技術的存儲系統(tǒng)的性能需要得到進一步的提高以更好的滿足信息系統(tǒng)對存儲系統(tǒng)性能上的要求。
事實上,SAN系統(tǒng)中傳統(tǒng)的磁盤由于驅動器的機械特性,性能一直無法得到大幅提高,對于目前規(guī)模越來越大的數(shù)據(jù)帶寬需求來說,其可期望的性能提高十分有限。另外,機械磁盤的尋道和旋轉延遲是導致系統(tǒng)響應時間過長的主要原因。尋道和旋轉延遲同時導致了磁盤性能的不穩(wěn)定,以及大量并發(fā)請求情況下性能的急劇降低。其表現(xiàn)為每秒處理的I/O請求數(shù)量不穩(wěn)定,平均數(shù)值很低,遠遠達不到某些關鍵應用的要求。
另一方面,由于隨機訪問DRAM內存資源沒有尋道和旋轉延遲,并且近年來DRAM的存儲密度不斷增長,單位存儲價格不斷降低,DRAM的性能也不斷提高,使用DRAM資源作為大容量存儲設備的性價比越來越高。因此,可以利用DRAM快速設備來提高系統(tǒng)的性能,滿足某些關鍵應用在存儲上的要求?;诖鎯^(qū)域網絡的高速固態(tài)存儲設備TH-SSD(TsingHua-Solid State Disk)就是一種利用存儲區(qū)域網絡系統(tǒng)的DRAM內存資源形成的高性能存儲設備,它是一種虛擬的固態(tài)磁盤(SSD),使用計算機的一部分系統(tǒng)內存作為外部存儲,類似于一個高速的硬盤。其優(yōu)點是存取速率與系統(tǒng)主存相當,系統(tǒng)主存直接使用前端總線,故其速度比基于其它總線的SSD設備要快很多。
本發(fā)明采用軟件方式實現(xiàn),不需要額外的附加快速存儲硬件來進行支持,充分利用存儲區(qū)域網絡上已有的前端服務器和目標器端節(jié)點的富余DRAM內存,使用虛擬技術實現(xiàn)了高速固態(tài)存儲設備TH-SSD。這樣,用戶通過將應用程序頻繁訪問的數(shù)據(jù)文件提前調入到TH-SSD設備中,以對TH-SSD中數(shù)據(jù)的訪問代替對磁盤數(shù)據(jù)的訪問,可以大大提高整個存儲區(qū)域網絡系統(tǒng)的I/O性能。
發(fā)明內容
本發(fā)明的目的在于提出一種基于存儲區(qū)域網絡實現(xiàn)高速固態(tài)存儲設備的方法,它可以充分利用存儲區(qū)域網絡上已有的DRAM內存資源,將這些富余的內存空間虛擬成高速虛擬磁盤設備,以代替?zhèn)鹘y(tǒng)的磁盤對前端服務提供高速穩(wěn)定的數(shù)據(jù)訪問。這種方法消除了由磁盤的機械特性帶來的系統(tǒng)性能瓶頸,提高了系統(tǒng)每秒鐘處理的I/O操作數(shù)量(IOPS),能夠滿足存儲區(qū)域網絡中對大規(guī)模數(shù)據(jù)訪問的帶寬需求。
本發(fā)明的特征在于,這是一種把存儲區(qū)域網絡中前端服務器和目標服務器端節(jié)點上富余的DRAM內存資源組織起來形成高速的虛擬磁盤設備,為用戶提供與普通磁盤一致的讀寫訪問接口,以代替磁盤為前端應用程序提供高速穩(wěn)定的數(shù)據(jù)訪問的方法,所述的實現(xiàn)方法依次含有以下步驟步驟(1)依次按以下步驟,重新組織SAN的前端服務器和目標服務器節(jié)點的DRAM內存資源,生成虛擬磁盤SSD步驟(1.1)所述的SSD均通過SSD驅動程序實現(xiàn)在前端服務器上,設定本地SSD驅動程序,該驅動程序經SCSI驅動程序連接到文件系統(tǒng),同時該驅動程序又與本地SSD互連,所述本地SSD驅動程序負責處理前端應用程序對本地SSD的數(shù)據(jù)訪問操作;在作為存儲管理節(jié)點的目標服務器端,設定目標服務器端SSD驅動程序,該驅動程序在與目標服務器端SSD互連的同時又與SCSI模擬目標器中間層互連,而該SCSI模擬目標器中間層又經SCSI子系統(tǒng)與磁盤子系統(tǒng)互連;步驟(1.2)所述的SSD驅動程序加載時通過掃描內核對象e820map結構來檢測系統(tǒng)的內存,將系統(tǒng)內存中那些為SSD預留的內存區(qū)域的起始地址和大小記錄在SSD驅動程序用于記錄可用于SSD的內存段的結構中,將物理上可能不連續(xù)的內存空間轉換為邏輯上連續(xù)的虛擬磁盤空間,并使用以下公式計算該內存區(qū)域在虛擬磁盤SSD中的起始地址本次掃描的內存區(qū)域在虛擬磁盤SSD中的起始地址=上次掃描過的內存區(qū)域在虛擬磁盤中的起始地址+上次掃描過的內存區(qū)域的大小,其中“+”表示相加,把原本物理上可能不連續(xù)的內存空間映射成邏輯上連續(xù)的虛擬磁盤空間,在前端服務器和目標服務器端生成虛擬磁盤SSD;步驟(2)按照SCSI文檔,本地SSD驅動程序從SCSI驅動程序獲得前端應用程序發(fā)往本地SSD的數(shù)據(jù)訪問的SCSI命令請求,目標服務器端SSD驅動程序從SCSI模擬目標器中間層獲得前端應用發(fā)往目標器服務器端SSD的數(shù)據(jù)訪問的SCSI命令請求;步驟(3)對于非讀寫的命令請求,該命令請求的數(shù)據(jù)緩沖區(qū)中保存有所述非讀寫命令執(zhí)行完畢后返回的數(shù)據(jù),則依次按照服下步驟處理步驟(3.1)SSD驅動程序使用內核數(shù)據(jù)結構scatterlist來表示命令請求的數(shù)據(jù)緩沖區(qū),每一個scatterlist結構中都有一個地址域和一個長度域,其中地址域用于存儲所表示的數(shù)據(jù)緩沖區(qū)的起始地址,長度域用于存儲所表示的數(shù)據(jù)緩沖區(qū)的大??;步驟(3.2)SSD驅動程序按照SCSI的命令處理格式把該非讀寫命令請求執(zhí)行完畢后返回的數(shù)據(jù)填充到此命令的scatterlist結構所表示的緩沖區(qū)中;步驟(4)對于讀寫命令請求,則SSD驅動程序按照以下步驟依次處理步驟(4.1)SSD驅動程序按照步驟(3.1)所述的方法使用scatterlist結構表示該讀寫命令請求的數(shù)據(jù)緩沖區(qū)步驟(4.2)SSD驅動程序從SCSI命令中解析出此命令要進行讀寫操作的數(shù)據(jù)所在的虛擬磁盤地址以及數(shù)據(jù)長度;步驟(4.3)SSD驅動程序根據(jù)SCSI命令所請求的數(shù)據(jù)在虛擬磁盤中的起始地址和請求數(shù)據(jù)的長度,順次掃描SSD驅動程序用于記錄可用于SSD的內存段的結構,以確定該SCSI命令所要訪問的虛擬磁盤中的數(shù)據(jù)段在哪些物理內存段,并獲取此數(shù)據(jù)段所在相應的物理內存段中的起始地址以及長度;步驟(4.4)將所獲得數(shù)據(jù)段在各個物理內存段中的地址空間映射到內核空間,對于讀請求,把虛擬磁盤存儲空間中的數(shù)據(jù)拷貝到與該請求對應的scatterlist結構所表示的數(shù)據(jù)緩沖區(qū);對于寫請求,把該請求對應的scatterlist結構所表示的數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)拷貝到虛擬磁盤的存儲空間段中,并進行磁盤備份;步驟(4.5)將步驟(4.4)中所述的地址映射撤銷。
測試結果表明與使用傳統(tǒng)磁盤的存儲區(qū)域網絡系統(tǒng)的I/O性能相比較,目標器端采用了基于系統(tǒng)DRAM內存資源實現(xiàn)的SSD的存儲區(qū)域網絡系統(tǒng)的I/O性能有了明顯的提高在光纖網絡環(huán)境下,對于比較典型的隨機請求塊大小為4KB的100%讀請求,系統(tǒng)的IOPS提高了131.9倍,對于隨機請求塊大小為4KB的100%寫請求,系統(tǒng)的IOPS提高了46.2倍;在千兆以太網環(huán)境下,對于上述類型的讀寫請求,系統(tǒng)的IOPS分別提高了92.4倍和72.9倍。而前端服務器采用了SSD的存儲區(qū)域網絡系統(tǒng)的性能提高更大在千兆以太網環(huán)境下,對于上述類型的讀寫請求,系統(tǒng)的IOPS分別提高了234.1和103.6倍。
圖1存儲區(qū)域網絡示意圖。
圖2存儲管理節(jié)點的硬件結構。
圖3采用TH-SSD的存儲區(qū)域網絡系統(tǒng)(以光纖網絡為例)的軟件結構。
圖4系統(tǒng)程序流程圖。
圖5x86平臺上的內存擴展方案。
圖6x86平臺上物理擴展模式下三級頁表映射方式。
圖7雙日志雙備份磁盤鏡像策略示意圖。
具體實施例方式
本發(fā)明將存儲區(qū)域網絡中前端服務器和目標服務器節(jié)點上富余的DRAM內存資源組織起來形成高速的虛擬磁盤設備,為用戶提供與普通磁盤一致的讀寫訪問接口。本發(fā)明實現(xiàn)的高速存儲設備采用虛擬技術將原本分散的內存空間通過映射轉換成連續(xù)的虛擬磁盤地址空間,前端應用發(fā)出的對高速存儲設備的數(shù)據(jù)訪問請求均是對虛擬磁盤的訪問。本發(fā)明在存儲區(qū)域網絡中的前端服務器和目標服務器上都實現(xiàn)了這種虛擬磁盤,均是通過SSD驅動程序來實現(xiàn)的本地SSD驅動程序運行在前端服務器上,負責接收處理前端應用對本地SSD的數(shù)據(jù)訪問請求;目標服務器端SSD驅動程序運行在目標服務器上,負責接收處理前端應用對目標服務器端SSD的數(shù)據(jù)訪問請求。使用高速存儲設備依次含有以下步驟(1)重新組織SAN的前端服務器和目標服務器節(jié)點的DRAM內存資源,生成高速虛擬磁盤設備SSD。SSD驅動程序加載時通過掃描內核對象e820map結構來檢測系統(tǒng)的內存,將為SSD預留的內存區(qū)域的起始地址和大小記錄在SSD驅動程序用于記錄可用于SSD的內存段的結構中,將物理上可能不連續(xù)的內存空間轉換為邏輯上連續(xù)的虛擬磁盤空間,并使用以下公式計算該內存區(qū)域在虛擬磁盤SSD中的起始地址本次掃描的內存區(qū)域在虛擬磁盤SSD中的起始地址=上次掃描過的內存區(qū)域在虛擬磁盤中的起始地址+上次掃描過的內存區(qū)域的大小,把原本物理上可能不連續(xù)的內存空間映射成邏輯上連續(xù)的虛擬磁盤空間。這樣,在前端服務器和目標服務器節(jié)點上就形成了高速虛擬磁盤設備。
(2)按照SCSI文檔,本地SSD驅動程序從SCSI驅動程序獲得前端發(fā)往本地SSD的數(shù)據(jù)訪問的SCSI命令請求,目標服務器端SSD驅動程序從SCSI模擬目標器中間層獲得前端發(fā)往目標器服務器端SSD的數(shù)據(jù)訪問的SCSI命令請求;(3)對于非讀寫的命令請求,該命令請求的數(shù)據(jù)緩沖區(qū)中保存有所述非讀寫命令執(zhí)行完畢后返回的數(shù)據(jù),SSD驅動程序使用內核數(shù)據(jù)結構scatterlist來表示命令請求的數(shù)據(jù)緩沖區(qū),每一個scatterlist結構中都有一個地址域和一個長度域,其中地址域用于存儲所表示的數(shù)據(jù)緩沖區(qū)的起始地址,長度域用于存儲所表示的數(shù)據(jù)緩沖區(qū)的大小,SSD驅動程序按照SCSI的命令處理格式把該非讀寫命令請求執(zhí)行完畢后返回的數(shù)據(jù)填充到此命令的scatterlist結構所表示的緩沖區(qū)中;(4)對于讀寫命令請求,SSD驅動程序使用scatterlist結構表示該讀寫命令請求的數(shù)據(jù)緩沖區(qū)。在SSD驅動程序從SCSI命令中解析出此命令要進行讀寫操作的數(shù)據(jù)所在的虛擬磁盤地址以及數(shù)據(jù)長度,SSD驅動程序根據(jù)SCSI命令所請求的數(shù)據(jù)在虛擬磁盤中的起始地址和請求數(shù)據(jù)的長度,順次掃描SSD驅動程序用于記錄可用于SSD的內存段的結構,以確定該SCSI命令所要訪問的虛擬磁盤中的數(shù)據(jù)段在哪些物理內存段,并獲取此數(shù)據(jù)段所在相應的物理內存段中的起始地址以及長度。SSD驅動程序將所獲得數(shù)據(jù)段在各個物理內存段中的地址空間映射到內核空間,對于讀請求,把虛擬磁盤存儲空間中的數(shù)據(jù)拷貝到與該請求對應的scatterlist結構所表示的數(shù)據(jù)緩沖區(qū);對于寫請求,把該請求對應的scatterlist結構所表示的數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)拷貝到虛擬磁盤的存儲空間段中,并進行磁盤備份。在讀寫操作完成之后,SSD驅動程序將地址映射撤銷,以釋放占用的內核地址空間。
存儲區(qū)域網絡將存儲設備與主機分離,對存儲空間進行統(tǒng)一管理和分配,其結構如圖1所示。
服務器節(jié)點的硬件子系統(tǒng)包括INTEL CPU、標準的PCI總線、SCSI接口卡、標準的光纖網絡接口卡(FC HBA)、以太網絡接口卡、硬盤。服務器節(jié)點可以運行WINDOWS 2000等多種操作系統(tǒng)和WEB服務器軟件系統(tǒng)。
光纖交換機采用Brocade 3200系列交換機。管理主機采用商用PC機,使用以太網絡接口卡連接到以太網絡,管理存儲區(qū)域網絡。
作為存儲管理節(jié)點的目標服務器采用商業(yè)化商用PC機如聯(lián)想天瑞3130,硬件子系統(tǒng)的模塊結構如圖2。
目標服務器的主板采用商用的服務器主板,如Supermicro(超微)公司X5DA8、X5DAE主板等,所有的CPU采用INTEL公司XEON系列CPU。目標服務器節(jié)點包括2個商用的光纖通道HBA,如QLOGIC公司的QLA2310F系列,它們之間可以實現(xiàn)容錯備份或者捆綁功能。目標服務器節(jié)點包括2-3個商用的SCSI接口卡,如ADAPTEC公司的7XXX系列接口卡,他們連接高密度的磁盤陣列子系統(tǒng)如ISD PinnacleRAID 500。電源子系統(tǒng)采用目前標準的、商用的N+1方式電源如山特公司的3C3系列,F(xiàn)LASH DISK負責存儲各種軟件,如M-SYSTEMS公司的DOC2000系列。Myrinet接口卡采用Myricom公司的LANai9系列接口卡。
本項發(fā)明基于存儲區(qū)域網絡的高速固態(tài)存儲設備TH-SSD在SSD驅動中實現(xiàn),在存儲區(qū)域網絡中有兩個實現(xiàn)位置本地SSD驅動位于本地文件系統(tǒng)下層,運行在前端服務器結點上;而目標器端SSD驅動位于SCSI目標模擬器中間層模塊上層,與存儲區(qū)域網絡的目標器軟件一起運行在目標服務器節(jié)點上。存儲區(qū)域網絡的軟件結構以及SSD驅動的位置如圖3所示。為了使軟件在光纖網絡和以太網絡上都能很好地運行,本發(fā)明抽象出了FC和iSCSI協(xié)議處理中使用到的一系列公共接口,實現(xiàn)了對FC和iSCSI協(xié)議的集成。在附圖中,為了描述方便,系統(tǒng)中使用的連接網絡及其協(xié)議分別用光纖網絡和FC協(xié)議代替。下同。
存儲區(qū)域網絡系統(tǒng)中各軟件模塊的功能如下表
表1存儲區(qū)域網絡系統(tǒng)的軟件功能列表SSD驅動程序作為內核模塊,在前端服務器的操作系統(tǒng)和目標服務器端的嵌入式操作系統(tǒng)中運行(操作系統(tǒng)在圖3中沒有給出,實際上所有軟件部分包括的模塊都運行在操作系統(tǒng)當中)。系統(tǒng)程序流程如圖4所示。
SSD驅動程序將前端服務器和存儲網絡目標服務器節(jié)點上富余的DRAM內存虛擬成高速磁盤設備TH-SSD,以代替?zhèn)鹘y(tǒng)磁盤對前端服務器發(fā)出的數(shù)據(jù)訪問請求做出響應。其過程如下(1)重新組織存儲區(qū)域網絡的前端服務器和目標服務器節(jié)點的DRAM內存資源,生成高速虛擬磁盤設備TH-SSD。
SSD驅動程序在加載時檢測系統(tǒng)內存,這是通過掃描內核對象e820map實現(xiàn)的。
e820map對象記錄了每片連續(xù)內存區(qū)域的起始地址、大小和用途類型。被預留作SSD用的內存區(qū)域會在其用途類型中注明,其內存起始地址和大小在虛擬磁盤的存儲空間段結構中做記錄,并將它在虛擬磁盤中與已掃描過的SSD內存區(qū)域拼接起來,形成連續(xù)的虛擬磁盤空間。它在虛擬磁盤中的起始地址遵循以下公式本次掃描的SSD內存區(qū)域在虛擬磁盤中的起始地址=上次掃描過的SSD內存區(qū)域在虛擬磁盤中的起始地址+上次掃描過的SSD內存區(qū)域大小。這樣,每片為SSD預留的物理內存區(qū)域都用虛擬磁盤的一個存儲空間段表示,并且將原本可能不連續(xù)的SSD內存區(qū)域被映射成連續(xù)的虛擬磁盤空間。
在對系統(tǒng)內存進行檢測的過程中,我們利用了x86平臺上的內存擴展技術,內存擴展方案如圖5所示。為此在x86平臺上采用物理地址擴展模式,該模式下,CPU啟用自身的36根地址線和內存管理單元的三級頁表映射方式,三級頁表映射方式如圖6所示。在該模式下,頁目錄指針項、頁目錄項、頁表項都是64位,其中頁表項的32-36位包含了36位物理地址的高4位。用線性地址的最高2位索引CR3寄存器指向的頁目錄指針表,以36位物理地址定位頁目錄表,后繼9位在頁目錄表中定位頁表的36位物理地址,再接著9位在頁表中定位頁的36位物理地址,最后12位為4K頁中的偏移量,最終將32位線性地址轉換成36位物理地址。由于啟用了36根地址線,系統(tǒng)可支持的最大物理內存擴充到236B=64GB。
系統(tǒng)啟動時僅為操作系統(tǒng)保留少量維持基本運行所需的物理內存,剩下的為SSD預留和大于4GB的物理地址空間都將映射到不到1GB的內核地址空間中。為此,我們采用了分段動態(tài)映射機制完成物理內存空間到內核空間的映射,即在進行讀寫操作前先將所要讀寫的數(shù)據(jù)段映射到內核空間,待讀寫操作完畢后撤消映射關系,使得內核空間可為其他讀寫請求所用。
為了便于管理虛擬磁盤,SSD驅動以塊為單位對虛擬磁盤空間進行劃分,并采用位圖記錄每個塊的使用情況,如果有請求更改了某一內存塊的數(shù)據(jù),則在位圖中將其標記為“臟”,表明此內存塊數(shù)據(jù)應當寫回備份磁盤以保證數(shù)據(jù)的完整性。
此過程完畢后,在前端服務器和遠端目標器節(jié)點上已經形成連續(xù)一致的虛擬磁盤空間,即生成了高速存儲設備TH-SSD,接下來可接收前端應用發(fā)出的對TH-SSD設備的訪問請求。
(2)本地SSD驅動程序從SCSI驅動程序獲得前端發(fā)往本地TH-SSD的數(shù)據(jù)訪問請求,目標服務器端SSD驅動從SCSI目標模擬中間層獲得前端發(fā)往目標服務器端TH-SSD的數(shù)據(jù)訪問請求。這個過程遵循標準的SCSI命令處理流程,具體實現(xiàn)可參見SCSI文檔。
(3)對于非讀寫的命令請求(命令詳細結構請查閱SCSI文檔),它的數(shù)據(jù)緩沖區(qū)中通常會存放命令執(zhí)行完畢后返回的結果。例如READ_CAPACITY是用于查詢虛擬磁盤容量的命令,則命令執(zhí)行完后其數(shù)據(jù)緩沖區(qū)中就記錄了虛擬磁盤的容量大小。在這里,我們使用了分散/聚集映射的I/O處理技術,使得系統(tǒng)可以使用虛擬磁盤進行DMA操作以提高系統(tǒng)性能。具體實現(xiàn)方法是首先,SSD驅動將命令請求數(shù)據(jù)緩沖區(qū)的類型轉換為內核數(shù)據(jù)結構scatterlist類型。這一類型中有一個地址域,它指向了將要進行DMA傳輸?shù)臄?shù)據(jù)塊。其次,SSD驅動將命令執(zhí)行的結果按照標準SCSI的命令處理格式填充地址域指向的緩沖區(qū)域。例如上面的READ_CAPACITY命令執(zhí)行完畢后,緩沖區(qū)域的低4個字節(jié)記錄了虛擬磁盤的塊數(shù)目,高4個字節(jié)記錄了塊大小。具體的命令格式可參見標準SCSI指令集。最后向前端返回結果,命令執(zhí)行結束。
(4)對于讀寫命令請求,SSD驅動首先根據(jù)SCSI命令格式找到要求進行讀寫操作的虛擬磁盤地址。例如READ_10讀命令的命令緩沖區(qū)中的第2-第5字節(jié)記錄了要讀取的數(shù)據(jù)在虛擬磁盤中的塊地址,將塊地址與塊大小相乘即得到數(shù)據(jù)在虛擬磁盤中的地址。然后SSD驅動將讀寫請求數(shù)據(jù)緩沖區(qū)的類型轉換為scatterlist內核數(shù)據(jù)類型。同非讀寫命令一樣,其地址域指向了存放讀寫數(shù)據(jù)的緩沖區(qū)。接下來,SSD驅動根據(jù)請求數(shù)據(jù)在虛擬磁盤中的起始地址和大小,順次掃描虛擬磁盤的內存空間段,以定位出該數(shù)據(jù)塊位于哪些內存空間段。SSD驅動使用內核映射函數(shù)ioremap()將所訪問數(shù)據(jù)在這些內存空間段的物理地址空間映射到內核地址空間。
對于讀請求,需要將虛擬磁盤存儲空間段中的數(shù)據(jù)拷貝到scatterlist類型中address成員指向的讀緩沖區(qū);對于寫請求,需要將scatterlist類型中地址域指向的寫緩沖區(qū)中的數(shù)據(jù)拷貝到虛擬磁盤的存儲空間段。在此期間,每讀寫一塊緩沖區(qū)中的數(shù)據(jù),都需要將scatterlist類型的數(shù)據(jù)緩沖區(qū)映射到內核空間,讀寫完畢后撤消該映射。此外,如果SSD驅動程序在加載時指定了備份磁盤,則需要將備份磁盤的信息填充到寫請求結構的設備域中,使用內核提供的SCSI命令接口函數(shù)將命令和數(shù)據(jù)發(fā)往備份磁盤,系統(tǒng)會啟動一個工作線程對磁盤進行異步寫操作,即寫操作無需等待磁盤寫操作的完成即可向前端返回。
讀寫操作完畢后,撤消虛擬磁盤的存儲空間段地址到內核地址空間的映射,釋放讀寫緩沖區(qū)占用的內存空間,向前端返回執(zhí)行結果。
由于系統(tǒng)采用易失性的內存作為高速存儲設備,在系統(tǒng)發(fā)生崩潰或重啟時其中的數(shù)據(jù)會丟失。因此需要一種機制保證TH-SSD中數(shù)據(jù)的完整性,這就是使用備份磁盤的目的。在這里,我們使用了雙日志雙備份磁盤鏡像策略,其示意圖如圖7。
寫請求對虛擬磁盤的某個塊寫入數(shù)據(jù)后,會在位圖中將塊標識為“臟”。虛擬磁盤工作線程啟動后,會設置一個緩沖隊列,將此時刻后到來的I/O操作緩存起來,然后將標識為“臟”的內存塊寫回到備份磁盤。寫完畢后再將緩沖隊列中的內容寫回內存塊并在位圖中標記其為“臟”。
為方便表述,將磁盤A記為A,磁盤B記為B,日志A記為A(L),日志B記為B(L),虛擬磁盤工作線程記為C。每次工作線程啟動后的備份過程如下初始狀態(tài)A處于T(1)時刻的完整狀態(tài),A(L)記錄了T(0)時刻到T(1)時刻的變化量Δ(0);B處于T(2)時刻的完整狀態(tài),B(L)記錄了T(1)時刻到T(2)之間的變化量Δ(1)。在T(3)時刻,C將向A中寫入T(2)到T(3)時刻之間的變化量Δ(2),寫入步驟如下步驟(1)在此過程中B是T(2)時刻的完整狀態(tài),而A不完整步驟(2)在此過程中A是T(2)時刻完整狀態(tài),B是T(2)時刻的完整狀態(tài),A(L)不完整步驟(3)在此過程中B是T(2)時刻完整狀態(tài),A不完整寫入結束時可保證B是T(2)時刻完整狀態(tài),B(L)記錄了T(1)時刻到T(2)之間的變化量Δ(2),A是T(3)時刻的完整狀態(tài),A(L)記錄了T(2)時刻到T(3)時刻的變化量Δ(2)。這樣,一個備份處理過程結束,只需交換A、B的角色,即可繼續(xù)下一個備份過程。
以上每個操作均在完成后在日志中做標記,如果沒有該標記則證明上一次的寫入操作失敗。系統(tǒng)重新啟動之后可以選擇處于某時刻完整狀態(tài)的磁盤向不完整的磁盤同步。同步的時候,如果是在步驟1失敗,則只需將B(L)寫入A,此時A、B處于同一時刻的完整狀態(tài)(T(2));如果在步驟2失敗,只需作廢A(L),這時A、B均處于相同時刻的完整狀態(tài)(T(2));如果在步驟3失敗,只需將A(L)寫入A,這時A、B處于不同時刻的完整狀態(tài)(AT(3),BT(2))。
我們在光纖網絡和千兆以太網絡環(huán)境下,對帶有SSD驅動程序的存儲區(qū)域網絡系統(tǒng)的I/O性能進行了測試,采用的測試工具是Iometer,使用100%隨機讀寫命令流,并將結果與傳統(tǒng)磁盤的I/O性能進行了對比。結果如下表2傳統(tǒng)磁盤的讀寫性能
表3目標服務器使用SSD的存儲區(qū)域網絡系統(tǒng)在光纖網絡環(huán)境下的讀寫性能
表4目標服務器使用SSD的存儲區(qū)域網絡系統(tǒng)在千兆以太網環(huán)境下的讀寫性能
表5前端服務器使用SSD的存儲區(qū)域網絡系統(tǒng)在千兆以太網環(huán)境下的讀寫性能
測試結果表明與使用傳統(tǒng)磁盤的存儲區(qū)域網絡系統(tǒng)的I/O性能相比較,目標服務器采用了基于系統(tǒng)DRAM內存資源實現(xiàn)的高速存儲設備TH-SSD的存儲區(qū)域網絡系統(tǒng)的I/O性能有了明顯的提高在光纖網絡環(huán)境下,對于比較典型的隨機請求塊大小為4KB的100%讀請求,系統(tǒng)的IOPS提高了131.9倍,對于隨機請求塊大小為4KB的100%寫請求,系統(tǒng)的IOPS提高了46.2倍;在千兆以太網環(huán)境下,對于上述類型的讀寫請求,系統(tǒng)的IOPS分別提高了92.4倍和72.9倍。而前端服務器采用了TH-SSD的存儲區(qū)域網絡系統(tǒng)的性能提高更大在千兆以太網環(huán)境下,對于上述類型的讀寫請求,系統(tǒng)的IOPS分別提高了234.1和103.6倍。
基于存儲區(qū)域網絡的高速固態(tài)存儲設備具有如下特點1、充分利用了存儲區(qū)域網絡前端服務器和目標服務器節(jié)點上富余的DRAM內存資源,提高了系統(tǒng)的資源利用率;2、在x86平臺上采用物理地址擴展技術使系統(tǒng)可支持多達64GB的物理內存,使用虛擬技術可將物理內存地址分段、動態(tài)地映射到內核空間,大大擴展了虛擬磁盤的容量,從而支持對大容量TH-SSD的數(shù)據(jù)訪問。
3、采用雙日志雙備份磁盤鏡像策略保護TH-SSD中數(shù)據(jù)的完整性。該策略保證在任意時刻都至少有一塊磁盤包含了TH-SSD在某一時刻的完整數(shù)據(jù)。這樣在系統(tǒng)崩潰或重啟后,TH-SSD可以從包含完整數(shù)據(jù)的備份磁盤中恢復之前的數(shù)據(jù)。
4、無縫地實現(xiàn)了對FC SAN與IP SAN的支持。我們通過一系列的開關語句使得兩個差異較大的軟件模塊合并成了一個軟件模塊,用戶只需要在編譯軟件模塊的時候通過簡單的添加相應的選項就可以把相關的開關語句打開,實現(xiàn)對用戶需要的SAN系統(tǒng)的支持。實驗結果表明,TH-SSD在光纖網絡和以太網絡中都能很好地運行,并達到非常優(yōu)越的性能。
權利要求
1.基于存儲區(qū)域網絡的高速固態(tài)存儲設備的實現(xiàn)方法,其特征在于,這是一種把存儲區(qū)域網絡中前端服務器和目標服務器端節(jié)點上富余的DRAM內存資源組織起來形成高速的虛擬磁盤設備,為用戶提供與普通磁盤一致的讀寫訪問接口,以代替磁盤為前端應用程序提供高速穩(wěn)定的數(shù)據(jù)訪問的方法,在以下的敘述中除非另有說明,存儲區(qū)域網絡都簡稱為SAN,高速固態(tài)存儲設備簡稱為SSD,所述的實現(xiàn)方法依次含有以下步驟步驟(1)依次按以下步驟,重新組織SAN的前端服務器和目標服務器節(jié)點的DRAM內存資源,生成虛擬磁盤SSD步驟(1.1)所述的SSD均通過SSD驅動程序實現(xiàn)在前端服務器上,設定本地SSD驅動程序,該驅動程序經SCSI驅動程序連接到文件系統(tǒng),同時該驅動程序又與本地SSD互連,所述本地SSD驅動程序負責處理前端應用程序對本地SSD的數(shù)據(jù)訪問操作;在作為存儲管理節(jié)點的目標服務器端,設定目標服務器端SSD驅動程序,該驅動程序在與目標服務器端SSD互連的同時又與SCSI模擬目標器中間層互連,而該SCSI模擬目標器中間層又經SCSI子系統(tǒng)與磁盤子系統(tǒng)互連;步驟(1.2)所述的SSD驅動程序加載時通過掃描內核對象e820map結構來檢測系統(tǒng)的內存,將系統(tǒng)內存中那些為SSD預留的內存區(qū)域的起始地址和大小記錄在SSD驅動程序用于記錄可用于SSD的內存段的結構中,將物理上可能不連續(xù)的內存空間轉換為邏輯上連續(xù)的虛擬磁盤空間,并使用以下公式計算該內存區(qū)域在虛擬磁盤SSD中的起始地址本次掃描的內存區(qū)域在虛擬磁盤SSD中的起始地址=上次掃描過的內存區(qū)域在虛擬磁盤中的起始地址+上次掃描過的內存區(qū)域的大小,其中“+”表示相加,把原本物理上可能不連續(xù)的內存空間映射成邏輯上連續(xù)的虛擬磁盤空間,在前端服務器和目標服務器端生成虛擬磁盤SSD;步驟(2)按照SCSI文檔,本地SSD驅動程序從SCSI驅動程序獲得前端應用程序發(fā)往本地SSD的數(shù)據(jù)訪問的SCSI命令請求,目標服務器端SSD驅動程序從SCSI模擬目標器中間層獲得前端應用發(fā)往目標器服務器端SSD的數(shù)據(jù)訪問的SCSI命令請求;步驟(3)對于非讀寫的命令請求,該命令請求的數(shù)據(jù)緩沖區(qū)中保存有所述非讀寫命令執(zhí)行完畢后返回的數(shù)據(jù),則依次按照服下步驟處理步驟(3.1)SSD驅動程序使用內核數(shù)據(jù)結構scatterlist來表示命令請求的數(shù)據(jù)緩沖區(qū),每一個scatterlist結構中都有一個地址域和一個長度域,其中地址域用于存儲所表示的數(shù)據(jù)緩沖區(qū)的起始地址,長度域用于存儲所表示的數(shù)據(jù)緩沖區(qū)的大??;步驟(3.2)SSD驅動程序按照SCSI的命令處理格式把該非讀寫命令請求執(zhí)行完畢后返回的數(shù)據(jù)填充到此命令的scatterlist結構所表示的緩沖區(qū)中;步驟(4)對于讀寫命令請求,則SSD驅動程序按照以下步驟依次處理步驟(4.1)SSD驅動程序按照步驟(3.1)所述的方法使用scatterlist結構表示該讀寫命令請求的數(shù)據(jù)緩沖區(qū);步驟(4.2)SSD驅動程序從SCSI命令中解析出此命令要進行讀寫操作的數(shù)據(jù)所在的虛擬磁盤地址以及數(shù)據(jù)長度;步驟(4.3)SSD驅動程序根據(jù)SCSI命令所請求的數(shù)據(jù)在虛擬磁盤中的起始地址和請求數(shù)據(jù)的長度,順次掃描SSD驅動程序用于記錄可用于SSD的內存段的結構,以確定該SCSI命令所要訪問的虛擬磁盤中的數(shù)據(jù)段在哪些物理內存段,并獲取此數(shù)據(jù)段所在相應的物理內存段中的起始地址以及長度;步驟(4.4)將所獲得數(shù)據(jù)段在各個物理內存段中的地址空間映射到內核空間,對于讀請求,把虛擬磁盤存儲空間中的數(shù)據(jù)拷貝到與該請求對應的scatterlist結構所表示的數(shù)據(jù)緩沖區(qū);對于寫請求,把該請求對應的scatterlist結構所表示的數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)拷貝到虛擬磁盤的存儲空間段中,并進行磁盤備份;步驟(4.5)將步驟(4.4)中所述的地址映射撤銷。
2.由于本方法是利用存儲區(qū)域網絡內前端服務器和目標服務器端富余的DRAM內存資源來實現(xiàn)高速固態(tài)存儲設備的,數(shù)據(jù)具有易失性,因此我們根據(jù)權利要求1所述,對于寫命令請求依次按以下步驟使用了雙日志雙備份磁盤鏡像策略來保證系統(tǒng)在斷電或者發(fā)生故障而重起的情況下SSD中數(shù)據(jù)的能夠從磁盤中得到最近一次完整的數(shù)據(jù)并將SSD中的數(shù)據(jù)恢復成這些完整的數(shù)據(jù),在這里我們定義雙磁盤中某一個磁盤的數(shù)據(jù)為完整的,在寫入到SSD中的數(shù)據(jù)還沒有開始備份到磁盤的時候或者是當寫入SSD中的數(shù)據(jù)塊被成功的完全(而不是部分的)備份到此磁盤的時候步驟(1)在寫請求虛擬磁盤中的某個塊寫入數(shù)據(jù)后,置位位圖中相應的位以表示虛擬磁盤中與之相對應數(shù)據(jù)塊為“臟”數(shù)據(jù)塊(位圖結構加載SSD驅動程序的時候被初始化,位圖中的每一位都被初始化為“0”,SSD在邏輯上被劃分為大小一致的塊,位圖中的每一位都與某一個塊相對應,當位圖中某一位為“0”時,表示相應的SSD塊中的數(shù)據(jù)是“干凈”的,即SSD塊中的數(shù)據(jù)不需要備份到磁盤,當位圖中某一位被置為“1”時,表示相應的SSD塊中的數(shù)據(jù)是“臟”的,即SSD塊中的數(shù)據(jù)需要備份到磁盤);步驟(2)在虛擬磁盤工作流程啟動后,會設置一個緩沖隊列,把此時刻到來的I/O操作予以緩存;步驟(3)然后把標記為“臟”的虛擬磁盤塊寫回到備份磁盤;步驟(4)再把緩沖隊列中的內容寫回到內存塊,在位圖中標記相應的位為“臟”。
3.根據(jù)權利要求1所述的基于存儲區(qū)域網絡的高速固態(tài)存儲設備的實現(xiàn)方法,其特征在于在所述步驟(1.2)中檢測系統(tǒng)內存時,利用了在X86平臺上的物理地址擴展模式,在該模式下,CPU啟用了自身的36根地址線和內存管理單元的三級頁表映射方式,以把32位線性地址轉換成36位物理地址,使系統(tǒng)支持的最大物理內存擴展到64GB。
4.根據(jù)權利要求1所述的基于存儲區(qū)域網絡的固態(tài)高速存儲設備的方法,其特征在于位于作為存儲管理節(jié)點的目標服務器上的SSD驅動程序通過一系列的開關語句使得目標服務器端的SSD可以無縫的分別支持通過光纖互連的存儲區(qū)域網絡以及通過以太網互連的存儲區(qū)域網絡,即可以分別支持通過FC以及IP傳輸?shù)腟CSI協(xié)議,這樣用戶只需要在重新編譯SSD驅動程序通過簡單的配置選項以打開相應的開關即可以使得SSD與用戶使用的互連網絡相兼容。
全文摘要
本發(fā)明屬于存儲區(qū)域網絡SAN存儲技術領域,其特征在于它將SAN中前端服務器和目標服務器節(jié)點上富余的DRAM內存資源組織起來形成高速虛擬磁盤設備TH-SSD,為用戶提供與普通磁盤一致的讀寫訪問接口。此方法采用虛擬技術將原本分散的內存資源映射到連續(xù)一致的虛擬磁盤地址空間,前端應用發(fā)出的對TH-SSD的數(shù)據(jù)訪問請求均為對虛擬磁盤的請求。在實現(xiàn)上,采用了x86平臺的內存擴展技術,擴展了可用的虛擬磁盤空間;采用了雙日志雙備份磁盤鏡像策略保證TH-SSD中數(shù)據(jù)的完整性;實現(xiàn)了對FC SAN與IP SAN的無縫支持,使得TH-SSD在光纖網絡和以太網絡環(huán)境下都能很好地工作。
文檔編號G06F3/06GK1945537SQ20061008893
公開日2007年4月11日 申請日期2006年7月27日 優(yōu)先權日2006年7月27日
發(fā)明者舒繼武, 薛巍, 于冰, 鄭緯民 申請人:清華大學