賈德明,朱明勝,古 妍
(山東鯨鯊信息技術(shù)有限公司,山東 泰安 271000)
隨著5G、云計算、大數(shù)據(jù)、物聯(lián)網(wǎng)等信息技術(shù)的發(fā)展,數(shù)據(jù)呈爆炸式增長,對存儲系統(tǒng)的海量數(shù)據(jù)存儲能力提出了高性能、多樣化的訪問要求[1]。針對數(shù)據(jù)訪問局部熱點的特性,通常將高頻訪問的數(shù)據(jù)緩存在高速存儲介質(zhì)上,以加快數(shù)據(jù)讀寫速度[2]。緩存控制策略是緩存系統(tǒng)的核心,決定了緩存空間利用的有效性[3]。傳統(tǒng)的緩存策略都是基于訪問時間或訪問頻率進行設(shè)計[4-5]。提高緩存命中率可以提高應(yīng)用程序的運行速度,這是提高緩存性能的關(guān)鍵[4]?;谠L問時間僅考慮了時間局部性,忽略歷史上的高頻訪問數(shù)據(jù);基于訪問頻率僅考慮高頻訪問數(shù)據(jù),忽略最近訪問的數(shù)據(jù)可能成為訪問熱點[6]。兩種策略均不能有效滿足現(xiàn)有熱點數(shù)據(jù)緩存需求。
緩存數(shù)據(jù)生命周期控制的核心是根據(jù)對數(shù)據(jù)價值的精準判斷,然后根據(jù)數(shù)據(jù)價值將數(shù)據(jù)分配到對應(yīng)的、性能合適的存儲設(shè)備上[7]。據(jù)研究結(jié)果表明,存儲系統(tǒng)中的數(shù)據(jù)70%~80%是靜止不動的,數(shù)據(jù)寫入后很少被訪問。經(jīng)常訪問的熱點數(shù)據(jù)占20%~30%[8]。其中間歇性熱點數(shù)據(jù)的假性降溫表現(xiàn),可能會從高速緩存介質(zhì)中移除,一旦被移除,數(shù)據(jù)塊可能因為緩存中暫時性高頻訪問數(shù)據(jù)而很難再次遷入緩存層,而導(dǎo)致后面訪問持續(xù)性延遲過高,影響上層應(yīng)用運行效率。
在較為復(fù)雜的數(shù)據(jù)訪問場景中,傳統(tǒng)基于訪問時間和基于訪問頻次的策略對于熱點數(shù)據(jù)的預(yù)測略顯不足,如圖1所示。
圖1 訪問頻次訪問時間示意圖
假設(shè)存在緩存塊D1、D2、D3,基于最近訪問時間排序,優(yōu)先級為D2,D3,D1;基于訪問頻率排序,優(yōu)先級為D1,D2,D3;在基于最近訪問時間的策略中,D1 將被淘汰,但D1會頻繁訪問數(shù)據(jù),只是最近一段時間沒有被訪問,因此D3 替換將來可能被訪問的D1;在基于訪問頻率的策略中,未考慮訪問頻率的動態(tài)性,導(dǎo)致D1 和D2 的訪問頻率相同,事實上最近訪問的高頻數(shù)據(jù)D2 再次被訪問的可能性更大,不符合實際訪問規(guī)律[9]。CVSL策略綜合考慮最近訪問時間和訪問頻率,優(yōu)先級排序為D2 >D1 >D3,能夠反映數(shù)據(jù)訪問頻率隨時間變化的變化,更能適應(yīng)熱點數(shù)據(jù)的訪問特點。因此CVSL策略克服了基于最近訪問時間和基于訪問頻率緩存策略的不足。
自動分層的數(shù)據(jù)遷移是定時執(zhí)行的,短時間內(nèi)無法快速響應(yīng)熱數(shù)據(jù)的變化[10-13]。例如,當出現(xiàn)新的熱數(shù)據(jù)時,緩存在第一次訪問時就會將其調(diào)入SSD,接下來的讀請求都能直接從SSD訪問;而分層架構(gòu),必須等待一段時間(數(shù)據(jù)遷移涉及不同層之間空間交換,必須后臺執(zhí)行),才會將新的熱數(shù)據(jù)遷移到SSD,那么在這段時間內(nèi),是無法享受到SSD的高性能的,甚至在極端的情況下,可能該數(shù)據(jù)被遷移到SSD后,熱度已過。另一方面,分層的優(yōu)點是其有足夠的時間更準確地識別冷熱數(shù)據(jù)(識別順序IO)。因此,緩存適合負載變化迅速的場景;分層適合靜態(tài)的負載(冷熱數(shù)據(jù)很少變化)。
此外,固態(tài)硬盤由于寫前擦的硬件特性,非對齊訪問會導(dǎo)致寫放大,不能充分發(fā)揮固態(tài)盤性能優(yōu)勢,而且降低了SSD使用壽命[14-19]。
基于上述問題,研究設(shè)計了一種基于虛擬存儲層的緩存控制策略,該策略引入了虛擬存儲層的概念,綜合緩存技術(shù)和自動分層技術(shù)的優(yōu)缺點,CVSL在結(jié)合訪問時間策略和訪問頻率策略基礎(chǔ)之上,引入虛擬存儲層概念,有效甄別數(shù)據(jù)訪問熱度,避免因間歇性訪問的假性冷數(shù)據(jù)被移除緩存,提高整體緩存命中率。
結(jié)合分層存儲中熱數(shù)據(jù)、溫數(shù)據(jù)、冷數(shù)據(jù)的概念,虛擬存儲層承載訪問頻次的統(tǒng)計,充分考慮間歇性局部熱點數(shù)據(jù)的訪問特點,盡量避免熱點數(shù)據(jù)因暫時冷卻被遷入低速存儲介質(zhì),將熱數(shù)據(jù)直接降級為冷數(shù)據(jù),同時對順序?qū)慖O不緩存,再沒有增加硬件成本的情況下,提高了緩存命中率,充分發(fā)揮固態(tài)硬盤優(yōu)勢,提升了綜合訪問性能。
虛擬存儲層是通過軟件劃分出的一個虛擬存儲域,邏輯上是位于高速存儲介質(zhì)和低速存儲介質(zhì)之間,存儲溫數(shù)據(jù)。對于遷入虛擬存儲層的數(shù)據(jù)塊,僅緩存其塊描述信息,對應(yīng)數(shù)據(jù)實際存儲在低速介質(zhì)中。虛擬存儲層不存儲實際數(shù)據(jù),數(shù)據(jù)會直接存儲在低速存儲介質(zhì),但在虛擬存儲層中保留數(shù)據(jù)塊的訪問時間,訪問頻次等信息。在虛擬存儲層中的數(shù)據(jù)會根據(jù)訪問熱度決定數(shù)據(jù)是重新遷入高速存儲介質(zhì)還是遷入低速存儲介質(zhì)。其中,數(shù)據(jù)塊在虛擬存儲層和低速存儲介質(zhì)之間流動,只需要移除該緩存塊的塊描述信息據(jù)即可,無須數(shù)據(jù)遷移,不會增加低速存儲介質(zhì)額外的IO負擔(dān)。
CVSL緩存控制邏輯架構(gòu)如圖2所示。
圖2 CVSL緩存控制邏輯架構(gòu)
數(shù)據(jù)物理從高速存儲介質(zhì)(SSD)和低速存儲介質(zhì)(HDD)之間遷移,邏輯上從高速存儲介質(zhì)、虛擬存儲層、低速存儲介質(zhì)之間遷移。溫數(shù)據(jù)和冷數(shù)據(jù)均存放在低速存儲介質(zhì)HDD上。
CVSL緩存系統(tǒng)由以下模塊組成,如圖3所示。
圖3 CVSL模塊組成
1)緩存控制模塊,主要負責(zé)緩存數(shù)據(jù)的基本控制功能,按照SSD物理特性設(shè)計的,根據(jù)SSD擦除塊以chunk為最小單位(默認512K)分配SSD空間,使用B+樹、最近最少使用(LRU,least recently used)鏈表、最不經(jīng)常使用(LFU,least frequently used)鏈表混合方法來跟蹤緩存數(shù)據(jù),緩存數(shù)據(jù)可以是chunk上的任意一個扇區(qū)。最大程度上減少隨機寫的代價。定期喚醒或者達到空間閾值上限回寫緩存臟數(shù)據(jù)。
緩存頁控制根據(jù)SSD擦除塊大小將SSD空間分成若干個chunk。緩存數(shù)據(jù)與元數(shù)據(jù)都是按chunk來組織的。
(1)分配器:COW(copyonwrite)式的空間分配,分配的單元是chunk,數(shù)據(jù)在chunk內(nèi)部全部都是追加寫入的,不會出現(xiàn)覆蓋寫,當有覆蓋寫時,會重定向到新的數(shù)據(jù)塊。
(2)元數(shù)據(jù)部分:B+樹節(jié)點數(shù)據(jù)是最主要的元數(shù)據(jù),也是COW式分配,對于B+樹節(jié)點的修改,需要先分配新的節(jié)點,將新數(shù)據(jù)寫入,再丟棄老的節(jié)點。
2)邏輯遷移模塊,主要負責(zé)根據(jù)數(shù)據(jù)塊的訪問時間訪問次數(shù)信息進行熱度統(tǒng)計,根據(jù)統(tǒng)計結(jié)果在虛擬存儲層和數(shù)據(jù)存儲層之間進行邏輯調(diào)度。
3)虛擬存儲模塊,主要負責(zé)維護遷入虛擬存儲層數(shù)據(jù)塊的熱度信息以及與數(shù)據(jù)存儲層的映射關(guān)系。邏輯上使用page(4k)為最小單位管理數(shù)據(jù)塊。虛擬存儲層在內(nèi)存中開辟一定空間,暫存待遷入數(shù)據(jù)塊,多個數(shù)據(jù)塊合并后按照chunk對齊遷入,降低SSD寫入次數(shù),盡量避免數(shù)據(jù)抖動影響性能。
4)數(shù)據(jù)存儲模塊,主要負責(zé)實際存儲所有的數(shù)據(jù)塊,包括虛擬存儲層的數(shù)據(jù)塊,因為數(shù)據(jù)存儲層一般容量較大,所以采用1 M為最小單位管理數(shù)據(jù)塊,后面可設(shè)計為可變模式,支持1~64 M可調(diào)節(jié)。
數(shù)據(jù)存儲格式如圖4所示。
圖4 數(shù)據(jù)存儲格式
相比傳統(tǒng)策略,CVSL綜合考慮了訪問時間策略和訪問頻率策略,兼顧了SSD的物理特點,并且緩存塊在移除緩存層時,其訪問時間訪問頻次等信息仍維護在虛擬存儲層和數(shù)據(jù)存儲層中。數(shù)據(jù)熱度信息在數(shù)據(jù)塊整個生命周期中均有效,有助于緩存層、虛擬存儲層和數(shù)據(jù)存儲層進行熱點數(shù)據(jù)追蹤。
CVSL通過緩存頁管理將熱點數(shù)據(jù)存儲在高速介質(zhì)上,虛擬存儲層位于IO緩存層和數(shù)據(jù)存儲層之間,將溫數(shù)據(jù)和冷數(shù)據(jù)邏輯隔離,防止冷熱數(shù)據(jù)頻繁遷入遷出造成抖動,造成性能波動,提高熱點數(shù)據(jù)命中率。
緩存控制模塊采用B+樹索引管理HDD和緩存數(shù)據(jù)的映射關(guān)系,建立LRU和LFU兩個鏈表,根據(jù)訪問時間和訪問次數(shù)控制緩存塊的遷入遷出。
當有上層應(yīng)用訪問未在緩存中,但對應(yīng)block在虛擬存儲層時,判定該緩存頁為熱點數(shù)據(jù),調(diào)入緩存層,根據(jù)LRU和LFU鏈表移除最長時間沒有使用以及最近最不常用的緩存頁。
當有上層應(yīng)用訪問為在緩存中,且對應(yīng)block未在虛擬存儲層時,暫不將數(shù)據(jù)塊遷入緩存層。
被移除的緩存頁由調(diào)度模塊管理,根據(jù)其數(shù)據(jù)熱度遷入虛擬存儲層,或者數(shù)據(jù)存儲層。如果緩存頁為非臟數(shù)據(jù),該過程為邏輯分層,僅涉及元數(shù)據(jù)修改,不會對機械盤進行讀寫操作。
緩存控制模塊還承載著臟數(shù)據(jù)回寫的功能。當緩存層中臟數(shù)據(jù)達到一定閾值會主動觸發(fā)回寫線程進行臟數(shù)據(jù)刷寫;內(nèi)置定時器會觸發(fā)回寫線,定時掃描臟數(shù)據(jù)塊進行臟數(shù)據(jù)回寫。
臟數(shù)據(jù)回寫時不會更新數(shù)據(jù)塊訪問次數(shù)、訪問時間等信息,直接寫入數(shù)據(jù)存儲層,防止內(nèi)部數(shù)據(jù)刷寫影響虛擬存儲層的數(shù)據(jù)熱度評估,造成緩存數(shù)據(jù)塊熱度出現(xiàn)偏差;
數(shù)據(jù)在寫入數(shù)據(jù)存儲時,合并排序?qū)懭耄浞掷脵C械盤的特性,提高數(shù)據(jù)寫入效率。
上層請求到達時,如果是順序IO,則不進行緩存,直接繞過緩存控制層;如果數(shù)據(jù)塊在SSD緩存層,則直接讀寫訪問并向上返回請求結(jié)果;如果緩存未命中,則訪問虛擬存儲層。
如果數(shù)據(jù)在虛擬存儲層,則根據(jù)映射關(guān)系在數(shù)據(jù)存儲層訪問數(shù)據(jù),向上返回請求結(jié)果,并且將該數(shù)據(jù)塊調(diào)入緩存層(此處會嘗試多個緩存頁合并調(diào)入緩存層,減少SSD寫入次數(shù))。
如果未在虛擬存儲層,則繼續(xù)向數(shù)據(jù)存儲層請求,未再虛擬存儲層的數(shù)據(jù)塊只更新訪問次數(shù)信息,不立即調(diào)入緩存層。
訪問完畢后,更新內(nèi)存中對應(yīng)block的訪問時間、讀寫次數(shù)等信息。
由于虛擬存儲層僅存儲緩存塊的塊描述信息,使用較小的空間即可存儲較大范圍的塊描述信息,即可在較大范圍內(nèi)篩選間歇性熱點數(shù)據(jù),有效提高了此類數(shù)據(jù)的緩存命中率。
IO緩存層最大程度上保護數(shù)據(jù),在系統(tǒng)異常關(guān)機時數(shù)據(jù)仍然是可靠的。因為只有在數(shù)據(jù)完全寫回存儲設(shè)備才確認寫成功。SSD的特點就是隨機IO性能很高,而對于順序IO提升卻并不大,所以會檢測順序IO并透傳給數(shù)據(jù)存儲層。
訪問流程如圖5所示。
圖5 應(yīng)用訪問流程圖
熱度統(tǒng)計線程會周期性遍歷設(shè)備所有的block,block的熱度由4個參數(shù)衡量,包括最近寫時間、被寫次數(shù)、最近讀時間、被讀次數(shù)。
邏輯上升的block滿足:1)自上次統(tǒng)計以來,被寫次數(shù)大于Whicount;或者,2)自上次統(tǒng)計以來,被讀次數(shù)大于Rhicount。滿足條件的block按被訪問時間和被訪問次數(shù)降序排列,熱數(shù)據(jù)塊在前,形成邏輯上升數(shù)據(jù)塊鏈表Queueup。
邏輯下降的block滿足:1)自上次統(tǒng)計以來被寫次數(shù)小于Wlowcount;并且,2)自上次統(tǒng)計以來被讀次數(shù)小于Rlowcount。滿足條件的block按被訪問時間和被訪問次數(shù)升序排列,冷數(shù)據(jù)塊在前,生成邏輯下降數(shù)據(jù)鏈表Queuedown。
Whicount為寫次數(shù)高水位線,Rhicount為讀次數(shù)高水位線,Wlowcount為寫次數(shù)低水位線,Rlowcount,為讀次數(shù)低水位線,可以根據(jù)實際業(yè)務(wù)調(diào)整,注意需滿足Whicount≥Wlowcount,Rhicount≥Rlowcount,默認Whicount=Wlowcount=Rhicount=Rlowcount=AVGrwcount(平均讀寫次數(shù))
熱度統(tǒng)計完畢后,熱度統(tǒng)計線程會清除數(shù)據(jù)塊中的訪問時間、讀寫次數(shù)信息。熱度統(tǒng)計流程如圖6所示。
圖6 熱度統(tǒng)計流程圖
在確定了需要向上或者向下遷移的block后,數(shù)據(jù)遷移線程將待遷移的block逐個遷移。在遷移每個block前會判斷是否停止此次遷移任務(wù)。停止的條件有:1)遷移線程工作時間限制,如果超時就中止這次遷移;2)檢查目前虛擬存儲層的邏輯利用率,如果利用率為大于95%,則只允許向下遷移任務(wù);如果利用率小于60%,則只允許執(zhí)行向上遷移任務(wù);如果利用率大于60%小于90%時,則同時允許執(zhí)行向上遷移和向下遷移任務(wù)。
該數(shù)據(jù)遷移不會對數(shù)據(jù)塊進行讀寫,僅修改虛擬存儲層的邏輯關(guān)系,不會對機械盤造成額外的性能負擔(dān)。由于緩存層管理單位為page=4 k,數(shù)據(jù)存儲層管理單位為block=1 M。所以當命中虛擬存儲層block時,僅將其訪問的page調(diào)入緩存層,不需要加載整個block。
邏輯遷移流程如圖7所示。
圖7 數(shù)據(jù)邏輯遷移流程圖
由于寫入數(shù)據(jù)存在熱數(shù)據(jù):溫數(shù)據(jù):冷數(shù)據(jù)=15%:5%:80%的特點,建議SSD:HDD容量比為(15+5)%:80%。其虛擬存儲層block總數(shù)計算公式如下:
Cblock=Vhdd×(15%+5%)÷Sblock
(1)
式中,Cblock代表虛擬存儲層管理的block總數(shù),Vhdd代表磁盤容量(單位MiB),Sblock代表block大小(單位MiB)。
為了驗證CVSL中基于虛擬存儲層設(shè)計的緩存管理和動態(tài)遷移策略的有效性,本節(jié)采用具有代表性的Linux開源緩存加速軟件dmcache和CVSL模塊進行了隨機IO性能對比測試實驗。
本實驗基于FT2000+平臺和Linux操作系統(tǒng),dmcache模塊(對應(yīng)內(nèi)核版本4.19),50GSSD+1片1TSATA機械硬盤進行測試。測試工具采用fio-3.28,direct訪問,排除服務(wù)器內(nèi)存影響。
首先使用fio分別測試SSD和HDD的4K隨機讀寫性能,測試5 min,確保SSD和HDD機械盤性能表現(xiàn)正常。
性能測試流程具體如下:
步驟一:SSD全盤trim后,使用dmcache模塊將SSD綁定為HDD的緩存設(shè)備。
步驟二:使用fio進行隨機4 K隨機讀寫預(yù)熱模擬應(yīng)用訪問,讀寫比例為4∶6,預(yù)熱時間為48 h。
步驟三:預(yù)熱完畢后,使用fio分別進行4 K隨機IO讀寫測試,測試5分鐘,記錄測試結(jié)果。
步驟四:重復(fù)步驟二和步驟三3次,并記錄測試結(jié)果。
CVSL模塊測試方法同步驟一~步驟四。
1)4 k隨機寫性能測試結(jié)果對比,如圖8所示。
圖8 四次4 k隨機寫測試結(jié)果
dmcache的4次隨機寫測試結(jié)果分別為781,712,799,752,平均值為761;CVSL的4次隨機寫測試結(jié)果分別為840,835,846,841,平均值為840,相對dmcache提升約10.5%。
2)4 k隨機讀性能測試結(jié)果對比,如圖9所示。
圖9 四次4 k隨機讀測試結(jié)果
dmcache的4次隨機讀測試結(jié)果分別為587,553,580,554,平均值為569;CVSL的4次隨機讀測試結(jié)果分別為620,621,612,627,平均值為620,相對dmcache提升約9%。
從圖8和圖9可以看出,CVSL相比dmcache模塊,隨機讀寫性能均有明顯提高,緩存加速性能提高了9%~10%。而且CVSL在進行了4次48小時的模擬應(yīng)用訪問后,4 k隨機寫IOPS穩(wěn)定在840左右,4 k隨機讀IOPS穩(wěn)定在620左右,性能值比較平穩(wěn)。從實驗結(jié)果分析,CVSL在未增加硬件成本的情況下,有效的提高了機械硬盤的性能,而且在模擬間歇性數(shù)據(jù)訪問后,性能沒有明顯波動,達到了預(yù)期設(shè)計效果。
在全球數(shù)據(jù)爆炸性增長的背景下,如何結(jié)合固態(tài)硬盤和傳統(tǒng)機械硬盤的優(yōu)勢應(yīng)對海量數(shù)據(jù)的高效存儲,具有很高的社會意義和研究價值。針對緩存數(shù)據(jù)尤其是間歇性頻繁訪問的緩存數(shù)據(jù)特點,引入虛擬存儲層概念,在傳統(tǒng)緩存策略上融合了自動分層技術(shù)并做了改進,主要有以下技術(shù)優(yōu)勢:1)綜合考慮了訪問時間和訪問頻率對緩存塊的影響,結(jié)合了傳統(tǒng)緩存適合負載變化迅速的場景自動分層適合靜態(tài)負載的特點,對熱數(shù)據(jù)判定更精準。充分利用自動分層熱點數(shù)據(jù)升溫和降溫較慢,可更準備識別熱點數(shù)據(jù)的技術(shù)原理,降低間歇性熱點數(shù)據(jù)變?yōu)槔鋽?shù)據(jù)的概率,也降低了緩存頁抖動對性能造成的影響;2)虛擬存儲層和數(shù)據(jù)存儲層之間遷移數(shù)據(jù)時,僅需修改數(shù)據(jù)塊描述信息和映射關(guān)系。緩存層淘汰非臟緩存頁時,也是僅做頁面信息修改,都不會沒有對機械硬盤進行讀寫操作,不會增加額外的磁盤IO,對訪問性能沒有影響;3)虛擬存儲層不存儲真實數(shù)據(jù),可在較大范圍內(nèi)承載因暫時不訪問被移出緩存層的間歇性熱點數(shù)據(jù),有效的提高了緩存命中率;4)數(shù)據(jù)塊的訪問時間訪問頻次具有全局性,提高了熱點數(shù)據(jù)追蹤效率;數(shù)據(jù)存儲層使用block為最小單位,降低了元數(shù)據(jù)的占用空間。相比傳統(tǒng)緩存策略,在沒有增加硬件成本的情況下,降低了緩存頁被誤判為冷數(shù)據(jù)的概率,提高了緩存命中率。
基于虛擬存儲層的SSD緩存控制策略可應(yīng)用于磁盤陣列、分布式存儲等企業(yè)級網(wǎng)絡(luò)存儲系統(tǒng),能夠有效提高在云平臺、大數(shù)據(jù)分析、數(shù)據(jù)庫等高并發(fā)隨機讀寫應(yīng)用場景下的存儲訪問性能,提高應(yīng)用系統(tǒng)的響應(yīng)時間。