魏登萍,陳浩穩(wěn),謝徐超,袁 遠,高文強
(1.國防科技大學(xué)計算機學(xué)院,湖南 長沙 410073;2.北京憶恒創(chuàng)源科技有限公司,北京 100192)
隨著大數(shù)據(jù)時代的到來,各領(lǐng)域產(chǎn)生的數(shù)據(jù)呈指數(shù)級增長。以海量數(shù)據(jù)分析處理為基礎(chǔ)的數(shù)據(jù)密集型應(yīng)用對帶寬、吞吐率等存儲性能和數(shù)據(jù)可靠性提出了更高的要求,存儲系統(tǒng)已經(jīng)成為制約計算機系統(tǒng)性能提升的主要因素之一。
近年來,閃存(Flash)[1]、相變存儲器PCM(Phase Change Memory)[2]、鐵電隨機存儲器FRAM(Ferroelectric Random Access Memory)[3]、磁阻隨機存儲器MRAM(Magnetoresistive Random Access Memory)[4]、憶阻器RRAM(Resistive Random Access Memory)[5]等各種新型存儲介質(zhì)相繼出現(xiàn),為提升存儲系統(tǒng)的性能提供了良好的機遇?;陂W存的固態(tài)盤SSD(Solid State Driver)因閃存存儲介質(zhì)具有較優(yōu)的訪問性能、更低的功耗和更好的工藝成熟度,已率先在大規(guī)模存儲系統(tǒng)中廣泛應(yīng)用。針對應(yīng)用對存儲容量和性能不斷增長的需求,研究者將獨立磁盤冗余陣列RAID(Redundant Array of Independent Disks)[6]與固態(tài)盤結(jié)合,提出了全閃存陣列RAIS(Redundant Array of Independent SSDs)技術(shù)[7],將大量固態(tài)盤組織起來為上層應(yīng)用提供穩(wěn)定可靠的大容量、更高性能的數(shù)據(jù)存儲訪問能力,并提供系統(tǒng)級的數(shù)據(jù)保護能力。NetApp[8]、EMC[9]和PureStorage[10]等各大公司相繼推出了全閃存存儲產(chǎn)品,以滿足各領(lǐng)域?qū)Ω咝阅艽鎯Ξa(chǎn)品的需求。
基于RAID的存儲系統(tǒng),當(dāng)一塊磁盤出現(xiàn)故障時,需要通過數(shù)據(jù)重構(gòu)操作恢復(fù)該故障盤的所有數(shù)據(jù),并使陣列恢復(fù)正常工作狀態(tài),重構(gòu)時間會隨著故障硬盤容量的增大線性增加。在數(shù)據(jù)重構(gòu)時,用戶I/O和數(shù)據(jù)重構(gòu)I/O混合在一起,競爭使用系統(tǒng)資源,導(dǎo)致上層應(yīng)用性能急劇下降,重構(gòu)時間變得更長,并加大了數(shù)據(jù)丟失風(fēng)險。在重構(gòu)過程中,恢復(fù)數(shù)據(jù)會寫入熱備盤中,而熱備盤也會成為系統(tǒng)的性能瓶頸,使得重構(gòu)性能無法隨著硬盤數(shù)量的增加而提高。處于“攻擊窗口”的重構(gòu)期間[11],數(shù)據(jù)丟失風(fēng)險加大,應(yīng)用I/O訪問的性能下降,重構(gòu)效率對于系統(tǒng)的可靠性和性能都產(chǎn)生了重大影響,因此,如何在數(shù)據(jù)重構(gòu)時盡可能地減少用戶I/O請求的影響,成為基于RAIS的存儲系統(tǒng)研究的重點之一。
針對上述RAIS存儲系統(tǒng)中的數(shù)據(jù)重構(gòu)問題,研究工作主要圍繞數(shù)據(jù)布局和重構(gòu)調(diào)度策略展開。一方面,設(shè)計更優(yōu)的數(shù)據(jù)布局方案,減少數(shù)據(jù)重構(gòu)時間。Wan等人[12]提出一種新的RAID結(jié)構(gòu),將RAID中的硬盤分為多個分區(qū),利用其它分區(qū)創(chuàng)建子RAID,使得重構(gòu)過程可以并發(fā)執(zhí)行,加快重構(gòu)速度。Google[13]則結(jié)合RAIS和虛擬化技術(shù),在多個SSD之上建立虛擬存儲池,在存儲池上建立RAIS,通過動態(tài)地址映射建立RAIS到底層SSD的地址映射,將讀寫壓力更均勻地分散在各個成員磁盤上,以加速I/O請求和重構(gòu)操作。文獻[14]對Declustered RAID系統(tǒng)中的數(shù)據(jù)布局方式進行了評價,結(jié)果顯示Declustered RAID能夠有效減少數(shù)據(jù)恢復(fù)時間。Zhang等人[15,16]提出一種叫作RAID+的RAID構(gòu)建機制,該機制采用latin square結(jié)構(gòu)來組織數(shù)據(jù),讓更多的硬盤參與數(shù)據(jù)服務(wù)和數(shù)據(jù)重構(gòu)操作,以同步提高用戶I/O和重構(gòu)I/O的性能。另一方面,設(shè)計重構(gòu)請求調(diào)度策略,在一定程度上均衡用戶I/O和重構(gòu)I/O的請求處理,提高系統(tǒng)性能。Tian等人[17]提出根據(jù)數(shù)據(jù)的訪問頻率確定重構(gòu)請求順序,經(jīng)常訪問的數(shù)據(jù)優(yōu)先重構(gòu),提高了重構(gòu)效率并減輕了重構(gòu)對用戶I/O請求的影響。Wu等人[18]提出了WordOut策略,在重構(gòu)時將寫請求和經(jīng)常訪問的讀請求交給代理 RAID處理,以縮短重構(gòu)時間。文獻[19]針對固態(tài)盤垃圾回收操作對RAIS系統(tǒng)性能的影響,提出了垃圾回收操作引導(dǎo)的RAID實現(xiàn)系統(tǒng)GC-Steering,以提高RAIS系統(tǒng)的性能和可靠性。
本文設(shè)計實現(xiàn)了一個采用底層存儲虛擬化的SSD存儲池,叫作NV-BSP(NVMe Burst Storage Pool),將多塊SSD盤的存儲空間劃分為更細粒度的大塊,并利用RAIS技術(shù)在大量來自不同固態(tài)盤的大塊上構(gòu)建虛擬盤以供用戶使用;由于虛擬盤的訪問最終落在多塊固態(tài)盤的并發(fā)訪問上,對計算資源提出了更高的需求,設(shè)計了多核并發(fā)I/O處理架構(gòu),以提升I/O性能;提出了負載感知的I/O調(diào)度策略,在保證用戶I/O服務(wù)質(zhì)量的同時,盡量縮短重構(gòu)時間,在系統(tǒng)出現(xiàn)故障后能快速恢復(fù)到正常狀態(tài)。
Figure 1 Architecture of NV-BSP
基于存儲虛擬化技術(shù),本文設(shè)計實現(xiàn)了一個基于固態(tài)盤的存儲池(簡稱NV-BSP),其架構(gòu)如圖1所示。所有SSD盤的存儲空間被劃分為固定大小的大塊,并被池化到一個存儲池中。存儲池中維護了系統(tǒng)中所有的空閑大塊,這些空閑大塊通過資源分配器分配到RAID組中,并通過RAID技術(shù)構(gòu)建一個具有數(shù)據(jù)保護能力的存儲資源容器。資源分配算法采用隨機的分配算法,根據(jù)各硬盤的裕量情況和磨損情況隨機地從存儲池中選取條帶長度數(shù)量的硬盤,并從各個硬盤中選取一個大塊,組成RAID組,使得每個存儲盤上的資源均勻利用,且一個RAID組中的大塊資源之間不存在相關(guān)性。根據(jù)容量需求,多個RAID組構(gòu)成一個虛擬盤,通過塊設(shè)備接口的方式對外提供服務(wù)。同一個虛擬盤中,每個RAID組的數(shù)據(jù)保護級別和容量相同;不同虛擬盤中的RAID組可以具有不同的數(shù)據(jù)保護級別和大塊構(gòu)成方式。
為避免一塊SSD損壞時導(dǎo)致數(shù)據(jù)無法恢復(fù),資源分配器在分配大塊時,最多只為一個RAID組分配一個來自某個SSD的一個大塊,保證一個RAID組內(nèi)不存在2個來自同一個SSD的空閑大塊。同時,為了保證用戶I/O請求性能和數(shù)據(jù)重構(gòu)性能能夠隨著硬盤數(shù)量擴展,在資源分配時需考慮大塊的離散性,盡量均勻利用每個SSD盤上的大塊存儲資源。
假設(shè)要在4塊容量為1 TB的SSD上創(chuàng)建存儲池,大塊容量設(shè)置為8 MB,并創(chuàng)建一個容量為24 GB的虛擬盤,數(shù)據(jù)保護級別設(shè)置為RAID5,且每個條帶中具有3個數(shù)據(jù)單元。NV-BSP會根據(jù)要求的數(shù)據(jù)保護級別和條帶中的數(shù)據(jù)單元數(shù)量,為每個RAID組分配4個容量為8 MB的大塊,并構(gòu)建RAID5,每個RAID組的數(shù)據(jù)容量為24 MB,則24 GB的虛擬盤需要構(gòu)建1 024個RAID組。虛擬盤根據(jù)RAID組的組成順序地從0開始編址,則每個邏輯地址LBA與虛擬盤中RAID組的編號RAID_index的映射關(guān)系定義為:
RAID_index(LBA)=LBA/Capactiy_R
(1)
其中,Capacity_R為虛擬盤中RAID組的容量。
存儲池I/O訪問請求主要指對RAID組數(shù)據(jù)條帶進行讀寫的I/O請求,主要分為用戶I/O和內(nèi)部I/O 2大類。用戶I/O請求主要指上層應(yīng)用對RAID組數(shù)據(jù)條帶的訪問請求;內(nèi)部I/O請求主要指存儲池內(nèi)部觸發(fā)的I/O請求,主要包括數(shù)據(jù)重構(gòu)和數(shù)據(jù)遷移2大類。由上述存儲池的架構(gòu)可以看出,存儲池的I/O請求對虛擬盤的訪問最終轉(zhuǎn)為對存儲池中所有SSD的并發(fā)訪問,再加上SSD的訪問速度比傳統(tǒng)磁盤更快,這就對存儲池中的計算資源提出了更高的需求。為了使存儲池的并發(fā)I/O處理能力能夠充分發(fā)揮,NV-BSP將最大限度地利用CPU資源,為每個存儲池分配多個CPU核心,以創(chuàng)建多個獨有的I/O線程處理器,以并發(fā)處理用戶I/O請求和內(nèi)部I/O請求。
NV-BSP為每個虛擬盤中的每個RAID組分配一個I/O線程處理器,負責(zé)處理該RAID組所有的I/O請求和內(nèi)部I/O請求。當(dāng)虛擬盤中的RAID組個數(shù)大于I/O線程處理器個數(shù)時,可以將多個RAID組按照編址順序均勻分配給一組I/O線程處理器。每個I/O線程處理器負責(zé)虛擬盤中一系列RAID組的訪問處理。
假設(shè)存儲池所分配的I/O線程處理器個數(shù)為IO_N,組成虛擬盤的RAID組個數(shù)為RAID_N。為了使I/O線程處理器的負載盡可能均衡,某個編號為RAID_index的RAID組與分配到的I/O線程處理器編號的映射關(guān)系定義為:
Thread(RAID_index)=RAID_index%IO_N
(2)
則0≤Thread(RAID_index)≤IO_N-1。
當(dāng)存儲池中的一塊磁盤出現(xiàn)故障或者掉電時,包含該故障盤中某個大塊的RAID組的數(shù)據(jù)保護能力降級,需要進行數(shù)據(jù)重構(gòu)以恢復(fù)正常工作狀態(tài)。根據(jù)2.2節(jié)介紹,按照RAID組的編號,將RAID組按照其I/O線程處理器進行分組。如圖2所示,每個I/O線程處理器負責(zé)處理m個RAID組,包含故障盤大塊的RAID組用灰色表示,將會進行數(shù)據(jù)重構(gòu)操作。用戶I/O請求隊列中有p個用戶請求,重構(gòu)I/O請求隊列中有q個重構(gòu)I/O請求,每個I/O線程處理器負責(zé)的RAID組集合中,每個RAID組都有若干個用戶I/O請求和重構(gòu)I/O請求。
Figure 2 Diagram of I/O thread processor request
當(dāng)存儲池觸發(fā)數(shù)據(jù)重構(gòu)操作時,會產(chǎn)生大量的對RAID組中條帶的I/O讀寫操作。通常,存儲池重構(gòu)操作采用固定策略,如用戶I/O模式策略、重構(gòu)I/O模式策略和固定調(diào)度比例模式等。在用戶I/O模式下,若有用戶I/O請求,則延遲重構(gòu)操作的執(zhí)行,直到用戶I/O執(zhí)行完畢,這樣將會加大再次發(fā)生大塊失效時數(shù)據(jù)丟失的風(fēng)險;在重構(gòu)I/O模式下,出現(xiàn)故障盤時,立即執(zhí)行數(shù)據(jù)重構(gòu)操作。數(shù)據(jù)重構(gòu)操作會占用大量的I/O帶寬,耗時也較長,用戶I/O需要等待重構(gòu)操作完成后才能進行處理,這勢必會影響用戶I/O的服務(wù)質(zhì)量;在固定調(diào)度比例策略模式下,根據(jù)調(diào)度比例,分別從用戶I/O和重構(gòu)I/O隊列中調(diào)度對應(yīng)數(shù)量的I/O請求進行處理,用戶I/O和重構(gòu)I/O可能造成各RAID組的負載不均衡,并競爭訪問存儲池中的SSD,影響用戶I/O的服務(wù)質(zhì)量和重構(gòu)效率。
基于存儲池的動態(tài)冗余管理機制與傳統(tǒng)RAIS相比,由于整個存儲池中的固態(tài)盤都同時參與數(shù)據(jù)重構(gòu),因此相同數(shù)據(jù)容量的數(shù)據(jù)重構(gòu)時間比傳統(tǒng)RAIS的重構(gòu)時間要少得多。由于存儲池在向上層應(yīng)用提供服務(wù)時,其用戶I/O負載是動態(tài)變化的,假若以固定比例來調(diào)度用戶I/O請求與重構(gòu)I/O請求,則會影響用戶I/O的服務(wù)質(zhì)量和內(nèi)部數(shù)據(jù)重構(gòu)的進度。
針對上述問題,本文提出基于QoS的請求調(diào)度策略,根據(jù)用戶I/O負載情況高效調(diào)度數(shù)據(jù)重構(gòu)I/O請求與用戶I/O請求,在盡量保證I/O服務(wù)質(zhì)量的同時,保證數(shù)據(jù)重構(gòu)操作能夠盡快完成,不影響數(shù)據(jù)保護能力。
由于用戶I/O負載是動態(tài)變化的,該調(diào)度策略根據(jù)用戶I/O負載的情況,每隔一個單位時間段動態(tài)調(diào)整不同的調(diào)度比例,且調(diào)度比例隨著時間的推移而動態(tài)變化。該策略將用戶I/O請求與內(nèi)部I/O請求的調(diào)度比例設(shè)置為多種不同的級別,以10%為步長,從10%增加到90%。調(diào)度比例為10%,表明在該時間段內(nèi),調(diào)度的用戶I/O請求數(shù)量與內(nèi)部I/O請求數(shù)量的比例為1∶9。如圖3所示,在時間段1內(nèi),調(diào)度比例為30%;到了時間段2,用戶I/O請求負載加重,則相應(yīng)調(diào)高一級調(diào)度比例,為40%,依次類推。當(dāng)然,在當(dāng)前時間段里,若發(fā)現(xiàn)用戶I/O請求負載比起前一個時間段的壓力減小,則相應(yīng)調(diào)低一級調(diào)度比例。
Figure 3 I/O scheduling strategy based on QoS
根據(jù)用戶I/O負載的動態(tài)變化情況,確定當(dāng)前時間段內(nèi)用戶I/O請求和重構(gòu)I/O請求的調(diào)度比例,并根據(jù)調(diào)度比例分別從用戶I/O隊列和內(nèi)部I/O請求隊列中選取合適數(shù)量的請求進行調(diào)度處理。
當(dāng)存儲池中出現(xiàn)故障盤時,會引起若干包含該故障盤大塊的RAID組的數(shù)據(jù)重構(gòu)操作。RAID組之間的數(shù)據(jù)重構(gòu)操作執(zhí)行的先后順序?qū)?shù)據(jù)一致性無影響,且數(shù)據(jù)重構(gòu)操作對延遲不敏感。為了使得重構(gòu)I/O請求與用戶I/O請求盡量減少訪問沖突,使得調(diào)度的數(shù)據(jù)重構(gòu)I/O請求與用戶I/O請求盡量均衡地訪問不同的硬盤,需要根據(jù)存儲池中各個SSD的負載特征,確定重構(gòu)I/O請求的調(diào)度優(yōu)先級。
在一個時間段內(nèi),根據(jù)存儲池中每個SSD硬盤的負載情況選擇合適的重構(gòu)請求,使重構(gòu)請求盡量不與用戶I/O請求競爭存儲池中SSD的帶寬,在不增加用戶I/O請求延遲的情況下提高重構(gòu)I/O帶寬。由于用戶I/O負載是動態(tài)變化的,因此需要在每個時間窗口內(nèi)更新存儲池中SSD的I/O負載情況,并由此確定重構(gòu)I/O請求的調(diào)度優(yōu)先級。
設(shè)存儲池中包含的SSD集合為SSDs={D1,D2,D3,…,DM}(M為存儲池包含的SSD個數(shù)),每個盤Dj(Dj∈SSDs,1≤j≤M)可劃分為固定大小的多個大塊,用BS(Dj)表示,即BS(Dj)={B1,B2,B3,…,BN}(N為Dj中包含的大塊數(shù)量)。每個虛擬盤由多個RAID組的集合構(gòu)成,即RAID={RAID1,RAID2,RAID3,…,RAIDK}(K為虛擬盤中包含的RAID組個數(shù),由虛擬盤的容量和RAID組的容量確定)。每個RAID組包含P個大塊,P由創(chuàng)建虛擬盤設(shè)定的數(shù)據(jù)條帶單元和RAID級別確定,例如虛擬盤的數(shù)據(jù)條帶單元數(shù)為4,RAID級別設(shè)置為RAID5,則虛擬盤中每個RAID組中的大塊數(shù)量P為5。編號為index的RAID組包含P個大塊,其集合表示成:
B(index)={B1,B2,…,BP}
(Bi∈BS(Dj),1≤i≤P,1≤j≤M)
(3)
RAID組中某大塊Bi與底層SSD集合的映射由存儲池中的資源分配器確定,定義為:
BD:Bi→Dj,1≤i≤P,1≤j≤M
(4)
編號為index的RAID組中大塊來源的SSD集合定義為:
DS(index)={BD(B1),BD(B2),…,
BD(BP)},Bi∈B(index)
(5)
在當(dāng)前時間窗口內(nèi),假定整個存儲池中所有用戶I/O請求集合為R={r1,r2,r3,…,rQ},每個用戶I/O請求ri(1≤i≤Q)最終會以條帶的方式訪問存儲池中的P個SSD。
由式(1),根據(jù)每個用戶I/O請求ri(1≤i≤Q)訪問的邏輯地址LBA(表示為ri.LBA)確定所訪問的RAID組的編號為:
RAID_index(ri.LBA)=ri.LBA/Capacity_R
(6)
則該請求ri最終訪問的SSD集合定義為:
D(rj)=DS(RAID_index(ri.LBA))
(7)
存儲池中每個SSD與用戶I/O請求ri之間的關(guān)系定義為:
Dj∈SSDs,1≤j≤M
(8)
存儲池中每個SSD的負載定義為:
Dj∈SSDs,1≤j≤M
(9)
在一個時間段內(nèi),每個I/O線程處理器根據(jù)存儲池中的每個SSD的負載確定重構(gòu)I/O請求BR={b1,b2,b3,…,bL}中每個bi(1≤i≤L)的重構(gòu)優(yōu)先級。bi的重構(gòu)優(yōu)先級Pro(bi)定義為:
(10)
實驗硬件環(huán)境采用超微NVMe存儲服務(wù)器,配置如下:2個Intel Xeon Gold 6128 3.4 GHz 6核CPU(支持超線程),196 GB內(nèi)存,最大支持10個NVMe硬盤,配置8塊Intel DC P4510系列2.0 TB NVMe硬盤。實驗軟件環(huán)境為:操作系統(tǒng)為CentOS 7.7,內(nèi)核版本為4.19.46;NVMe存儲池管理軟件為NV-BSP。
4.2.1 數(shù)據(jù)重構(gòu)時間
為了評測基于存儲池的多線程并發(fā)I/O處理的效果,創(chuàng)建了3類虛擬盤:(1)RAID(3+1,5 020 GB):由4塊SSD組成的存儲池,RAID組配置為3塊數(shù)據(jù)盤和1塊校驗盤組成的RAID5,虛擬盤容量為存儲池中所有可用空間容量5 020 GB;(2)RAID(7+1,11 714 GB):由8塊盤組成的存儲池,RAID組配置為7塊數(shù)據(jù)盤和1塊校驗盤組成的RAID5,虛擬盤容量為整個存儲池的可用空間容量11 714 GB;(3)RAID(7+1,5 020 GB):由8塊盤組成的存儲池,RAID組配置為7塊數(shù)據(jù)盤和1塊校驗盤組成的RAID5,虛擬盤容量為5 020 GB。存儲池設(shè)置了從1~24的不同I/O線程處理器數(shù)量。
Figure 4 Time of data reconstruction
圖4列出了在一塊物理盤掉電或出現(xiàn)故障時,在沒有用戶I/O情況下不同配置的虛擬盤數(shù)據(jù)重構(gòu)時間。整體來看,不同配置的虛擬盤的數(shù)據(jù)重構(gòu)時間都隨著I/O線程處理器數(shù)量的增加而降低,說明增加存儲池中的I/O線程處理器數(shù)量能夠增加虛擬盤中各個RAID組進行數(shù)據(jù)重構(gòu)的并發(fā)性,從而降低數(shù)據(jù)重構(gòu)時間。在4塊盤組成的存儲池中,當(dāng)I/O線程處理器數(shù)量大于4時,虛擬盤RAID(3+1,5 020 GB)的重構(gòu)時間基本趨于平穩(wěn),也就是說在沒有用戶I/O的情況下,4個I/O線程處理器能夠較好地處理虛擬盤RAID(3+1,5 020 GB)的數(shù)據(jù)重構(gòu),再增加I/O線程處理器數(shù)量,數(shù)據(jù)重構(gòu)時間不會顯著降低。在虛擬盤RAID(3+1,5 020 GB)中,每個RAID組都來自存儲池中的4塊硬盤,每個I/O線程處理器負責(zé)的數(shù)據(jù)重構(gòu)操作會競爭訪問存儲池中的4塊硬盤。當(dāng)I/O線程處理器數(shù)不斷增加時,整個虛擬盤的重構(gòu)效率會受限于硬盤的訪問性能,這時增加I/O線程處理器已不能顯著縮短數(shù)據(jù)重構(gòu)時間,還會增加計算資源的開銷。同理,在8塊盤組成的存儲池中,不論虛擬盤容量的大小,在沒有用戶I/O請求的情況下,當(dāng)I/O線程處理器數(shù)量達到8時,重構(gòu)時間基本趨于平穩(wěn),此時增加I/O線程處理器數(shù)量已不能顯著提高重構(gòu)性能。
4.2.2 負載自適應(yīng)的I/O調(diào)度策略
為了驗證負載自適應(yīng)的請求調(diào)度策略,在NV-BSP中創(chuàng)建了一個由4塊SSD組成的存儲池,RAID組配置為2塊數(shù)據(jù)盤和1塊校驗盤組成的RAID5,虛擬盤容量為1 000 GB。通過運行FIO測試程序(job數(shù)量為1)模擬用戶I/O負載,在FIO運行過程中,每隔1 min調(diào)整用戶I/O和數(shù)據(jù)重構(gòu)I/O的調(diào)用比例,記錄用戶I/O帶寬和重構(gòu)I/O帶寬。調(diào)整步驟如下所示:
(1)在FIO程序運行1 min后,將某塊存儲池中的硬盤掉電,存儲池啟動重構(gòu)操作,這時用戶I/O和重構(gòu)I/O的比例為9∶1,即用戶I/O占90%;
(2)在FIO程序運行2 min后,調(diào)整用戶I/O和重構(gòu)I/O比例為1∶4,即用戶I/O占20%;
(3)在FIO程序運行3 min后,調(diào)整用戶I/O和重構(gòu)I/O比例為9∶1,即用戶I/O占90%;
(4)在FIO程序運行4 min后,終止FIO程序運行,調(diào)低用戶I/O和重構(gòu)I/O比例直到數(shù)據(jù)重構(gòu)完成。
圖5展示了用戶I/O帶寬和重構(gòu)I/O帶寬隨著用戶I/O和重構(gòu)I/O數(shù)量比例的調(diào)整而變化的情況。從圖5可以看出,當(dāng)存儲池觸發(fā)重構(gòu)操作后,由于用戶I/O和重構(gòu)I/O的調(diào)度比例為9∶1,用戶I/O的性能基本沒受影響,約為2.0 GB/s。當(dāng)用戶I/O和重構(gòu)I/O的調(diào)度比例調(diào)整為1∶4以后,在當(dāng)前時間段按照該比例調(diào)度一定數(shù)量的用戶I/O請求和重構(gòu)I/O請求進入待執(zhí)行隊列,由于待執(zhí)行隊列中的用戶I/O請求數(shù)量急劇變少,而重構(gòu)I/O請求數(shù)量增加,因此用戶I/O的帶寬從2.0 GB/s左右急劇下降到620 MB/s左右,重構(gòu)I/O的性能從200 MB/s左右快速上升到1.2 GB/s左右。當(dāng)用戶I/O和重構(gòu)I/O的調(diào)度比例重新調(diào)整為9∶1時,待執(zhí)行隊列中的用戶I/O數(shù)量急劇增多,因此用戶I/O請求的帶寬又快速上升。當(dāng)用戶I/O請求處理完畢時,調(diào)低用戶I/O和重構(gòu)I/O比例,重構(gòu)性能又隨之上升。整個過程展示了NV-BSP支持隨著用戶負載的變化而調(diào)節(jié)用戶I/O和重構(gòu)I/O的調(diào)度比例。
Figure 5 Bandwidth of I/O requests
針對傳統(tǒng)RAIS系統(tǒng)數(shù)據(jù)重構(gòu)時間長,且重構(gòu)時影響用戶I/O性能的問題,本文設(shè)計實現(xiàn)了一種多線程并發(fā)處理的存儲池,能夠并發(fā)處理用戶I/O和重構(gòu)I/O,提高存儲池的訪問性能?;谠摯鎯Τ靥岢鲆环N負載自適應(yīng)的I/O調(diào)度策略,根據(jù)用戶負載的變化動態(tài)調(diào)整用戶I/O請求和重構(gòu)I/O請求的調(diào)度比例,保證用戶I/O服務(wù)質(zhì)量的同時,提升數(shù)據(jù)重構(gòu)效率。實驗結(jié)果表明,基于存儲池的多線程并發(fā)I/O處理架構(gòu)能夠有效減少數(shù)據(jù)重構(gòu)時間,負載自適應(yīng)的I/O調(diào)度策略能夠支持用戶I/O和重構(gòu)I/O調(diào)度比例的動態(tài)變化,在保證用戶I/O請求服務(wù)質(zhì)量的同時,盡量保證重構(gòu)I/O請求與用戶I/O請求的并行執(zhí)行,提高重構(gòu)效率。下一步工作將圍繞存儲池的全局磨損均衡、負載特征的自適應(yīng)優(yōu)化等方面展開,以完善和優(yōu)化NV-BSP的功能和性能。