王大鵬 劉 飛 王 建
1(遼寧師范大學計算機與信息技術學院 遼寧 大連 116081)2(大連醫科大學現代教育技術中心 遼寧 大連 116044)
一種基于Windows操作系統的存儲虛擬化在線擴展技術
王大鵬1劉 飛2*王 建2
1(遼寧師范大學計算機與信息技術學院 遼寧 大連 116081)2(大連醫科大學現代教育技術中心 遼寧 大連 116044)
云計算、大數據等傳統應用系統中的存儲系統往往以虛擬化的形式運行在開源的Linux平臺上,隨著存儲虛擬化技術不斷成熟并向多元化發展 ,用戶同樣需要基于Windows平臺的存儲虛擬化服務。針對這些需求,提出一種基于Windows操作系統平臺提供存儲虛擬化服務的軟件,可實現在Windows操作系統中創建虛擬的本地磁盤供用戶使用,磁盤中的數據以條帶化的形式平均分布在底層各個物理磁盤上。該軟件基于海量存儲網絡系統TH-MSNS,在存儲區域網SAN環境中為用戶提供虛擬磁盤服務并支持在線容量擴展。通過測試后證明,條帶卷在進行在線擴展時可以保證前臺應用不中斷,并且能夠快速準確地完成大規模的數據遷移。當用戶需要擴充虛擬磁盤的容量時,使用此項技術既可保證虛擬磁盤的可靠性又可提高擴容之后的讀寫性能。
存儲虛擬化 存儲區域網 在線擴展
當前信息技術在各項科研領域中均發揮著重要作用,在處理大規模數據應用時往往考慮使用云計算技術,而自身的存儲系統服務質量直接影響著海量數據的高效流轉、數據挖掘的精準定位等應用。面對科研工作中越發龐大復雜的大數據應用,在選擇存儲系統結構時可以考慮使用帶外結構的存儲區域網SAN,利用異構的底層設備與高速網絡相結合,將數據流與控制流相分離,此舉可以減少管理節點的帶寬壓力并大幅提高數據傳輸效率。
云數據中心作為科研工作當中的重要依托,以存儲虛擬化系統作為主要的底層存儲環境。利用SAN的優勢,可將原有存儲設備融合到新的存儲系統中來,通過統一的元數據服務器集中管理所有物理磁盤,達到將磁盤資源高度整合并合理高效利用的目的;在需要對虛擬磁盤進行容量擴展時,如何實現透明化的磁盤擴容,從而保證前端應用不受影響就顯得十分重要。在實際使用過程中,Linux系統的局限性已逐漸體現出來,而Windows系統仍然是當今應用最為廣泛的操作系統,正是基于這個需求,本文提出了基于SAN環境,可應用于Windows操作系統的存儲虛擬化軟件VA(Virtualization Agent)。該軟件作為存儲虛擬化系統TH-MSNS[1]的一部分,能夠在Windows系統中形成一個虛擬的盤符,數據以條帶的方式分布在底層物理磁盤。利用帶外結構的優勢[1],通過高速網絡完成數據從應用層到底層的傳輸。在虛擬磁盤由于空間所限需要容量擴展時,利用條帶卷在線擴展技術,可以實時地完成大規模數據遷移,并同時擴展虛擬磁盤的容量和性能。擴展的同時還能保證業務不中斷并保證數據的完整性。
當前,Windows操作系統仍然是市場主流,在云計算、大數據應用越發廣泛應用的背景下,眾多的科研工作者在處理數量與日俱增且體積越發龐大的海量數據時同樣需要使用海量存儲系統,但之前的此類應用大多基于Linux系統,因此迫切需要在Windows平臺上找到使用存儲系統的辦法。近年來,隨著技術的不斷發展,成本的不斷降低,大家對存儲虛擬化技術的認知度也越來越高,對存儲虛擬化系統的諸多特性,特別是實用性、可靠性、節能等方面的需求也越來越多。
目前市面上,IBM、EMC、HP等主流廠商的存儲虛擬化產品,經過長期的研發和實踐,確實積累出各自獨特的技術優勢,但也存在一些例如兼容性差,操作繁瑣等缺陷,在實際使用過程尤為明顯。硬件方面過于依賴單一廠商、單獨品牌的磁盤設備,各自廠商的虛擬化產品各行其道,必須使用專用的存儲虛擬化軟件與專門的磁盤驅動程序相配合才能正常工作。單一型號的存儲控制器只能配套安裝指定型號的磁盤陣列,若要進行升級必須控制器和陣列同時更新,利舊困難,容易造成硬件資源的嚴重浪費。長此以往不利于用戶對存儲系統的后續升級,從長遠考慮,對用戶整個存儲虛擬化系統的可持續發展都極為不利。
本文提出的基于Windows平臺的存儲虛擬化軟件VA可以有效地避免上述情況的發生。因為在使用過程中,TH-MSNS具備良好的兼容性和擴展性,能夠兼容和整合原有設備上的物理磁盤和HBA卡,提高虛擬存儲系統升級后整體的可用性。虛擬磁盤服務和相關的基本功能都在Windows操作系統的內核態實現,因此不存在硬件兼容性差導致資源不可用的問題。當用戶需要對現有存儲系統進行擴展時,無論Windows中的本地磁盤還是存儲系統本身,都不必考慮現有環境中的磁盤屬性,直接將新購入的磁盤陣列并入到當前系統中,并在軟件中實現盤符的擴容。這樣用戶在購買新的存儲設備時就有了更多的選擇,不必受單一品牌限制,減少了額外的購置成本。
2.1 系統架構設計
VA主要由三大部分組成,如圖1所示:用戶態的通信模塊(AUI)、內核態的驅動模塊(MAGICDISK)以及與元數據服務器的通信模塊。AUI作為用戶使用虛擬磁盤的入口,負責系統的啟動與關閉,連接應用層與底層設備的通信;MAGICDISK模塊作為虛擬磁盤的驅動程序,工作在Windows系統內核的驅動棧中間層,虛擬磁盤的創建與部署、 I/O訪問從邏輯卷到物理磁盤的地址映射,以及實現虛擬磁盤的各種額外功能都由MAGICDISK模塊負責完成。通信模塊負責轉發來自元數據服務器MDS(Meta Data Server)的各項功能指令,并將執行結果實時反饋[2]。

圖1 系統架構設計
作為虛擬磁盤的核心部分,MAGICDISK模塊與Windows內核態當中的掛載管理器(Mount Manager)、I/O管理器以及I/O系統服務相配合。當元數據服務器發出指令后,可在Windows系統中建立一塊虛擬磁盤并將其掛載到指定的盤符上,整個過程對用戶完全透明,用戶無需考慮該盤符所在的磁盤設備的具體屬性,所有與底層磁盤有關的操作全部在驅動程序中完成。AUI是基于C++開發的圖形界面軟件,負責在SAN環境下從元數據服務器接收存儲虛擬化指令并向下轉發到內核態,包括虛擬磁盤到物理磁盤的地址映射表以及其他相關的配置信息等。將接收到的所有指令通過IOCTL機制轉發到MAGICDISK模塊,并將底層設備的執行結果實時向上反饋,通過用戶態和內核態同時確認的有效機制確保數據和服務的完整性。此外還可以實時監控當前虛擬磁盤的性能指標。
2.2 通信機制簡介
用戶在虛擬盤符上的每一步操作都會產生一個新的I/O請求,在Windows系統中,這些I/O請求都是以IRP(I/O Request Packet)的形式存在的,實際上任何Windows系統驅動程序的編寫都是圍繞著IRP進行的。虛擬磁盤上運行的應用程序都來自用戶態,在發出I/O請求后再由Windows內核態打包成IRP的形式交給驅動程序處理。在MAGICDISK模塊中,要將新生成IRP進行從邏輯到物理的地址映射,并將處理結果發回給MDS。在IRP結構中設有專門的數據緩存區,用來存放指令交互過程中的邏輯地址映射信息,將本次請求的地址信息歸納成一份完整的地址映射表。這樣下次訪問同樣的地址空間時就可以直接從緩存中讀取相應的地址[3]。在此過程中,由用戶態的AUI模塊新建一個專用線程負責指令的交互。虛擬磁盤中I/O的通信流程如圖2所示。

圖2 通信機制
當用戶態發出I/O請求后,首先由AUI模塊負責接收,同時把請求的邏輯地址和相關配置信息寫入IRP緩存區,為保證數據正確性,此時會將這段邏輯地址置為等待狀態,類似于暫時凍結這段邏輯地址的所有屬性,鑒于現在CPU的運算速度極快,這段時間可以忽略不計。然后MAGICDISK模塊從IRP緩存區中讀取請求的邏輯地址和映射表,完成邏輯地址到物理地址的映射關系。無論是數據更改還是映射表更改,都會先由AUI從MDS接收當前的映射表,再更新IRP的緩存區,通過IOCTL機制向下發送給MAGICDISK模塊。讀取映射表后,還需要經過校驗,確保本次映射操作的準確性,驗證無誤后方可完成本次映射,再使用IOCTL將正確的結果發回MDS。
2.3 工作原理分析
傳統的邏輯卷普遍采用串行I/O的方式,線性劃分存儲空間,在容量和性能上都存在局限性。條帶化的邏輯卷采用并行I/O,如圖3所示,分段劃分磁盤空間,類似RAID 0。條帶化是指在存儲虛擬化系統中,將一塊虛擬磁盤中所有數據所在的邏輯地址段分塊,以條帶的方式,按一定順序劃分到若干個物理磁盤上,實現在同一時刻,從多個物理磁盤上并發讀寫數據。采用這種方法能夠明顯提高磁頭的尋道效率和I/O的吞吐率[4]。較之傳統邏輯卷的串行I/O,在大規模的數據運算過程中,條帶卷的并行I/O能夠大幅地提高讀寫性能。

圖3 條帶卷與傳統的邏輯卷結構對比
對于每一次地址映射,每當用戶態的I/O請求傳遞到驅動程序時,首先將IRP以條帶化的形式進行拆分[5]。在請求的首尾邏輯地址范圍內,以條帶數為單位,先將主IRP拆分成幾個子IRP,這些子IRP由鏈表READ_SPLIT_LIST統一維護。在該結構中,等待列表(pendinglist)負責訪問控制,將待處理的IRP掛起;環鎖開關(spinlock)負責維護數據一致性;完成列表(completelist)負責保存子IRP的計算結果。MAGICDISK從子IRP中獲取拆分后的邏輯起始地址和映射長度。在映射表中,用Area域表示底層物理磁盤信息,子IRP分別負責在各自的Area域完成邏輯地址向磁盤扇區的地址映射操作[6]。子IRP每完成一個映射,完成列表completlist就遞增,相應的等待列表pendinglist就遞減。最后,所有子IRP都完成映射后,釋放READ_SPLIT_LIST鏈表,同時將計算結果返回父IRP,至此完成本次I/O請求。條帶卷的并行I/O處理流程如圖4所示。

圖4 條帶卷的并行I/O處理流程
2.4 在線擴展技術的具體實現
存儲虛擬化本身具備靈活的空間擴展功能,結合Windows系統的磁盤工具可以很方便地對盤符進行擴展。當需要擴充條帶卷的容量時,需要將部分數據從原有的條帶遷移到新的條帶中去,在此過程中,由VA與MDS進行數據交互來保證服務不中斷。通過“寫時請求”的方法,實現數據遷移和I/O訪問同時完成[7]。條帶數增加后,虛擬磁盤在容量上得到了擴展,I/O帶寬的增加提高了磁盤的性能,條帶上數據的重新分布也隨即完成[8]。
條帶卷在線擴展技術的具體實現過程如圖5所示。在數據遷移的過程中用模式切換的方法來保證數據的一致性。在擴展指令發出以前,即平常狀態下,MAGICDISK模塊保存一份原始的虛擬磁盤總體映射表,用戶態的I/O訪問都通過該表完成地址映射,這里稱為CACHE模式。

圖5 在線擴展技術的具體實現過程
當條帶卷需要在線擴展操作時,首先由MDS發出擴展指令,由于涉及到數據的重新分布,當新的I/O到來時,MAGICDISK中原有的映射表信息已不再準確。此時,再次到達虛擬磁盤的IRP就需要歸入特殊的隊列統一處理。采用“寫時請求”的方法,即對于每一個實時到達的I/O訪問,先從IRP中獲取邏輯起始地址,并封裝為請求映射信息包REQUEST,在AUI模塊中將請求包發送給MDS,MDS接收到請求包后,先查找當前與之對應的最新的映射表信息,并將其封裝為返回包RESPONSE,通過AUI發送回VA。隨后,MAGICIDISK模塊根據當前獲得的最新映射表信息完成本次映射操作,這種方式稱為NOCACHE模式。與CACHE模式相比,NOCACHE模式時每一次I/O訪問都需要與MDS進行通信。
存儲虛擬化的各項功能特性對用戶都是完全透明的,在擴展時,數據遷移的過程對用戶必須是無感知的,因此映射表的準確性和可用性就尤為關鍵。在NOCACHE模式下,為了保證每次映射都準確無誤,即使當前I/O訪問請求的邏輯地址與上一次完全相同,也必須重新向MDS端發送請求,這樣才能保證數據的準確性。在此過程中,頻繁通信不可避免地會造成一定的性能損失。當數據遷移完成后,MDS端完成了磁盤元數據信息的重新分布,這時再為擴展后的條帶卷保存一份新的總體映射表,再重新切換回CACHE模式,至此所有I/O訪問就根據這份最新的映射表完成后續的地址映射。
測試系統采用Windows Server 2008 R2,先為用戶創建一個由2個條帶組成,容量為200 GB的條帶卷,即每個條帶100 GB。在操作系統中生成一個新的盤符并格式化為NTFS文件系統。在該盤符中寫入若干文件,或者安裝并實時運行一個程序,并提取MD5校驗碼。在正常使用時,進行磁盤容量的擴展,由MDS發出指令在原來基礎上再為其擴展2個條帶,使總容量擴充到400 GB,磁盤運行一段時間后,再增加4個條帶,并在磁盤管理器中做相應容量調整,使總容量擴充到800 GB。為驗證效果,使用測試工具IOMETER進行擴展期間的性能測試,測試數據塊的閾值為64 KB~16 MB。分別測試在該條帶卷上順序讀和順序寫的性能,指標包括I/O讀寫帶寬(柱形圖)和I/O平均響應時間(線形圖)。根據測試結果,對比條帶卷在進行在線擴展前后的性能差異,為了保證磁盤的可用性,最后還需要通過MD5對照文件是否正確。
測試結果如圖6和圖7所示,可以看出,條帶卷在經過擴展之后,I/O的讀寫性能顯著提高,I/O平均響應時間明顯變小,并且,條帶擴展得越多性能提升越明顯,并且文件校驗無誤。實驗證明,條帶化的虛擬磁盤經過在線擴展的過程后,首先能夠保證已有文件的正確性,并且程序能夠正常運行;其次,條帶卷不僅能夠在容量上得到在線的擴充,而且在性能上還得到了顯著提高。

圖6 條帶卷在線擴展時順序寫的性能測試結果

圖7 條帶卷在線擴展時順序讀的性能測試結果
面對科研工作中對存儲虛擬化系統在多樣化平臺運行的需求,給出了一種能夠應用在Windows操作系統的存儲虛擬化軟件VA。該軟件基于存儲虛擬化系統TH-MSNS,通過在Windows操作系統的內核態開發驅動程序,可實現虛擬磁盤的基本服務和許多功能特性。經過測試證明,該軟件可在Windows平臺下提供穩定可靠的虛擬存儲服務。使用條帶化的虛擬磁盤,將數據平均分布在底層物理設備上,運用在線擴展技術可以保證虛擬磁盤中的正常業務不中斷,并實現虛擬磁盤從容量到性能的雙重擴展。
[1] 舒繼武,薛巍,李必剛,等. 一種高可擴展存儲網絡系統TH-MSNS的研究與實現[J].計算機學報,2005, 28(3):326-333.
[2]ZhangGuangyan,ShuJi-wu,XueWei,etal.DesignandImplementationofanOut-of-bandvirtualizationsystemforlargeSANs[J].IEEETransonComputers, 2007, 56(12): 1654-1665.
[3] 陜光,凌玲,胡于進. 內存映射文件在提取有限元模態結果中的應用[J]. 計算機應用,2012, 32(5):1429-1431,1435.
[4] 孫志卓,張全新,李元章,等. 連續數據存儲中面向RAID5的寫操作優化設計[J]. 計算機研究與發展,2013, 50(8):1604-1612.
[5] 雷立群.WDM在全軟件數控系統中的應用研究[J]. 機床與液壓,2014 (22):158-160.
[6] 張美玲,張剛.Java調用DLL實現讀寫磁盤扇區[J].計算機工程與設計,2013, 34(4):1451-1461.
[7] 宋麗娜,戴華東,任怡. 基于海量數據存儲系統多級存儲介質的熱點數據區分方法[J]. 計算機研究與發展,2012, 49(z1):6-11.
[8] 黃冬梅,杜艷玲,賀琪. 混合云存儲中海洋大數據遷移算法的研究[J]. 計算機研究與發展,2014, 51(1):200-205.
AN ONLINE EXPANSION TECHNOLOGY OF STORAGE VIRTUALIZATION BASED ON WINDOWS OPERATING SYSTEM
Wang Dapeng1Liu Fei2*Wang Jian2
1(CollegeofComputerandInformationTechnology,LiaoningNormalUniversity,Dalian116081,Liaoning,China)2(ModernEducationalTechnologyCenter,DalianMedicalUniversity,Dalian116044,Liaoning,China)
Cloud computing, large data and other traditional applications in the storage system is often the form of virtualization to run on the open source Linux platform, as storage virtualization technology continues to mature and diversify, users also need Windows-based storage virtualization services. Aiming at these requirements, this paper presents a software based on Windows operating system platform to provide storage virtualized service, which can be used to create virtual local disk in Windows operating system. The data in the disk is evenly distributed across the underlying physical disks in striped form. The software is based on the mass storage network system TH-MSNS, in the storage area network SAN environment to provide users with virtual disk services and support online capacity expansion After testing, it proves that the striped volume can guarantee uninterrupted foreground application and carry out large-scale data migration quickly and accurately. When users need to expand the capacity of the virtual disk, the use of this technology can guarantee the reliability of the virtual disk can also improve the read and write performance after expansion.
Storage virtualization Storage area network Online-extension
2016-04-21。2015年度遼寧省教育科學“十二五”規劃課題(JG15DB104)。王大鵬,講師,主研領域:計算機網絡。劉飛,助理工程師。王建,高級工程師。
TP333
A
10.3969/j.issn.1000-386x.2017.05.004