葉 晨,張延園
( 西北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,陜西 西安 710129)
隨著信息技術(shù)的發(fā)展,當(dāng)前不論是面向終端用戶的應(yīng)用系統(tǒng),還是面向科學(xué)計(jì)算的系統(tǒng),都越來越多地依賴于存儲(chǔ)系統(tǒng)的性能。在以計(jì)算技術(shù)為中心的時(shí)代,數(shù)據(jù)量很少,I/O 問題[1]往往為人們所忽視,人們更加關(guān)注的是處理器與內(nèi)存之間性能的差距,并稱之為“內(nèi)存墻(Memory Wall)”[2]。隨著網(wǎng)絡(luò)存儲(chǔ)的發(fā)展,以計(jì)算為中心轉(zhuǎn)變成了以數(shù)據(jù)為中心,海量數(shù)據(jù)依賴磁盤進(jìn)行存儲(chǔ),I/O 問題逐漸為人們所重視,處理器與磁盤之間的性能差距稱為“磁盤墻(Disk Wall)”[3]。由于訪問磁盤數(shù)據(jù)的速度遠(yuǎn)遠(yuǎn)低于處理器計(jì)算的速度,“磁盤墻”逐漸取代“內(nèi)存墻”,I/O 瓶頸成為阻礙系統(tǒng)性能的主要瓶頸。
在一些面向服務(wù)的應(yīng)用,如電子商務(wù)、搜索引擎、社交網(wǎng)絡(luò)等,它們面對(duì)的是PB 級(jí)的數(shù)據(jù)量,僅僅使用單級(jí)緩存已經(jīng)不能滿足它們的性能需求,在這類的應(yīng)用中經(jīng)常使用多級(jí)緩存架構(gòu)。近年來有很多管理多級(jí)緩存空間的解決方案被提出,這種基于內(nèi)存的多級(jí)緩存架構(gòu)[4],雖然能夠有效地提高系統(tǒng)性能,但從價(jià)格和功耗角度卻十分浪費(fèi),所以對(duì)于大規(guī)模數(shù)據(jù)中心需要一種性價(jià)比更高的緩存架構(gòu)來滿足數(shù)據(jù)訪問的性能需求。近年新興的基于閃存的固態(tài)存儲(chǔ)盤(Solid State Disk,SSD)的出現(xiàn)給數(shù)據(jù)中心緩存架構(gòu)帶來了新的機(jī)遇。
圖1所示的是一種基于DRAM+SSD的兩級(jí)緩存架構(gòu)圖。通過訪問SSD 代替訪問普通硬盤來降低請(qǐng)求響應(yīng)時(shí)間,特別是隨機(jī)訪問模式的數(shù)據(jù),SSD 二級(jí)緩存的實(shí)現(xiàn)來解決這一問題,充分發(fā)揮出SSD的性能。
綜上所述,當(dāng)前存儲(chǔ)技術(shù)[5]的發(fā)展受到磁盤陣列訪問時(shí)間的制約,需要在保證系統(tǒng)可靠性的條件下,通過緩存技術(shù)提高磁盤陣列性能,促進(jìn)存儲(chǔ)技術(shù)的發(fā)展。
圖1 基于DRAM+SSD 兩級(jí)緩存的存儲(chǔ)系統(tǒng)架構(gòu)
針對(duì)的磁盤陣列都是具有冗余控制器的,同時(shí)在這兩個(gè)冗余控制器上都有各自獨(dú)有的DRAM,這里稱為一級(jí)緩存(Level1 Cache,簡稱L1),而通過加入SSD 盤來構(gòu)筑的二級(jí)緩存(Level2 Cache,簡稱L2),是在磁盤陣列上共有的,允許多個(gè)應(yīng)用程序同時(shí)使用L2[6],它會(huì)自動(dòng)檢測數(shù)據(jù)是否在SSD中,不需要根據(jù)應(yīng)用程序做特定的調(diào)整。構(gòu)筑完L2 之后,L1 和L2之間將進(jìn)行協(xié)同交互工作。
將L2 整合到現(xiàn)有的存儲(chǔ)系統(tǒng)的思想,同時(shí)要考慮SSD 性能潛力盡可能被發(fā)掘,影響存儲(chǔ)性能的因素必然會(huì)包括策略設(shè)計(jì)和系統(tǒng)部署方面的問題[7]。
(1)評(píng)價(jià)性能的最重要的因素往往是要結(jié)合SSD磁盤性能鑒別出最影響性能的區(qū)塊,現(xiàn)有的緩存替換策略是基于時(shí)間局部性,例如LRU(Least Recently Used)等。根據(jù)實(shí)驗(yàn)調(diào)查發(fā)現(xiàn),使用SSD 得到的性能更大程度上取決于負(fù)載訪問模式,所以尋找另一種兼并考慮這兩種因素的替換策略。
(2)有效使用訪問歷史來準(zhǔn)確判斷訪問模式,采用合適的存儲(chǔ)方式來記錄訪問歷史數(shù)據(jù)痕跡,例如對(duì)于讀寫模式要區(qū)分開記錄,鑒別熱數(shù)據(jù)等。
(3)為了避免對(duì)現(xiàn)有系統(tǒng)內(nèi)核做大的改變,在高效的實(shí)現(xiàn)混合管理策略時(shí),混合存儲(chǔ)系統(tǒng)應(yīng)該改進(jìn)系統(tǒng)性能而不干擾改變上層組件(例如文件系統(tǒng))或者根本上改變其他組件共享的通用接口。
本文從功能的角度來分析和實(shí)現(xiàn)兩級(jí)緩存機(jī)制,并把二級(jí)緩存作為一個(gè)組件放入海量存儲(chǔ)系統(tǒng)中進(jìn)行管理。
二級(jí)緩存結(jié)構(gòu)中的SSD 以塊設(shè)備的形式工作,它的上層組件,如文件系統(tǒng),將SSD 看作一個(gè)簡單的塊設(shè)備[5],而不用關(guān)心內(nèi)部的復(fù)雜結(jié)構(gòu)。用戶可以用SSD 盤創(chuàng)建池,并建立邏輯磁盤,后進(jìn)行分區(qū)和配置文件系統(tǒng),和普通硬盤一樣其緩存系統(tǒng)模塊劃分如圖2所示。
圖2 緩存系統(tǒng)模塊劃分
緩存模塊由3個(gè)部分組成,即重映射模塊(Remapping),數(shù)據(jù)分析模塊(Data Analyze)和數(shù)據(jù)遷移模塊(Data Migration)。重映射模塊維護(hù)一個(gè)映射表來記錄緩存到SSD 上的塊與HDD中塊的對(duì)應(yīng)關(guān)系。當(dāng)有新來的請(qǐng)求到達(dá)重映射模塊,先查找映射表。如果被請(qǐng)求的塊在SSD中,請(qǐng)求被重定向到SSD,否則直接操作HDD。這個(gè)重映射的過程類似于軟RAID控制器。重映射模塊也將I/O 請(qǐng)求攔截并且轉(zhuǎn)發(fā)到數(shù)據(jù)分析模塊,數(shù)據(jù)分析模塊收集I/O 請(qǐng)求并且更新塊表來描述負(fù)載訪問模式。數(shù)據(jù)分析模塊周期性地分析數(shù)據(jù)訪問歷史,鑒別哪些塊應(yīng)該被重映射到SSD,并且請(qǐng)求數(shù)據(jù)遷移模塊通過存儲(chǔ)設(shè)備重新定位數(shù)據(jù)塊。數(shù)據(jù)分析模塊既能在內(nèi)核態(tài)也能在用戶態(tài)運(yùn)行。數(shù)據(jù)遷移模塊負(fù)責(zé)向塊設(shè)備發(fā)出I/O 命令并更新映射表來反映最新的映射變化。重映射模塊主要涉及重映射表(Remapping Table),它維護(hù)一個(gè)映射表來記錄緩存到SSD 上的塊與HHD中塊的對(duì)應(yīng)關(guān)系。
從管理軟件的角度來說,管理磁盤陣列的過程可以看作按照硬件接口進(jìn)行Socket 通信的過程,通信的字節(jié)流稱為電文。客戶端通過管理軟件發(fā)送請(qǐng)求,iSMsvr 作為中轉(zhuǎn)的服務(wù)器對(duì)用戶請(qǐng)求進(jìn)行解析,并向磁盤陣列發(fā)送硬件命令。
在磁盤管理系統(tǒng)中有命令行和GUI 兩種方式可以構(gòu)筑二級(jí)緩存。本文將以命令行[9]的方式描述構(gòu)筑過程。
此存儲(chǔ)管理系統(tǒng)的兩個(gè)術(shù)語概念:(1)Pool(池)[10],使用一組磁盤驅(qū)動(dòng)器按照RAID 類型組成的存儲(chǔ)池邏輯概念,一個(gè)磁盤驅(qū)動(dòng)器只能位于一個(gè)池中,一個(gè)存儲(chǔ)系統(tǒng)中可以有零個(gè)或多個(gè)池。(2)LD(Logical Disk,邏輯磁盤),在池中建立的邏輯存儲(chǔ)單元,后分割為業(yè)務(wù)端存儲(chǔ)數(shù)據(jù),在其上建立文件系統(tǒng)或者應(yīng)用程序。
二級(jí)緩存構(gòu)筑就會(huì)建立一個(gè)服務(wù)線程,首先是建立池,類似普通池的建立,指定的Pdlist 需要同類型SSD,包括磁盤轉(zhuǎn)速、容量等屬性的比較,構(gòu)筑完電文頭信息和數(shù)據(jù)信息,二級(jí)緩存池結(jié)構(gòu)體如下:
用戶請(qǐng)求構(gòu)筑命令向iSMsvr 發(fā)送構(gòu)筑dynamic pool類型設(shè)定電文,由iSMsvr 向磁盤陣列發(fā)送硬件命令。
然后根據(jù)持久寫屬性,構(gòu)筑2個(gè)二級(jí)緩存LD 或者3個(gè)二級(jí)緩存LD。若沒有持久寫屬性,則構(gòu)筑2個(gè),1個(gè)LD 服務(wù)于控制器0,1個(gè)LD 服務(wù)于控制器1,同時(shí)每個(gè)LD的容量為池容量的一半;若有持久寫屬性,則構(gòu)筑3個(gè),1個(gè)LD 服務(wù)于控制器0,1個(gè)LD服務(wù)于控制器1,1個(gè)LD 服務(wù)于持久寫Cache,持久寫Cache 容量等于控制器上DRAM的容量,控制器上兩個(gè)二級(jí)緩存LD 平分剩余的容量。配置好邏輯磁盤構(gòu)筑類型設(shè)定電文序列,發(fā)送至iSMsvr,由iSMsvr 向磁盤陣列發(fā)送硬件命令構(gòu)筑LD。
最后,使得二級(jí)緩存構(gòu)筑有效,經(jīng)過電文的接收和電文數(shù)據(jù)解析,任務(wù)調(diào)度由iSMsvr 向磁盤陣列發(fā)送硬件命令。
此二級(jí)緩存支持構(gòu)筑RAID1 或者10 類型的緩存池,根據(jù)冗余性屬性,計(jì)算池的容量。如果構(gòu)筑無冗余的二級(jí)緩存,那么二級(jí)緩存池的容量占用100%;如果構(gòu)筑有冗余的二級(jí)緩存,那么二級(jí)緩存池的容量占用50%,帶冗余的二級(jí)緩存擁有更高的冗錯(cuò)能力。另外,每個(gè)磁盤陣列只可以創(chuàng)建一個(gè)二級(jí)緩存池。
陣列中的每個(gè)控制器都能訪問L2 并利用固態(tài)硬盤的優(yōu)勢,當(dāng)實(shí)現(xiàn)二級(jí)緩存后,緩存到L1 上的數(shù)據(jù)也能映射到L2(一級(jí)高速緩存分布在控制器里)。每個(gè)控制器都有一個(gè)映射表駐留在其L1 緩存,為了安全性,這個(gè)映射表的副本也保持在L2 本身。L2 高速緩存映射表就是一個(gè)地址表,在32kB 塊中包含一個(gè)描述了L2中緩存數(shù)據(jù)的位置信息的索引。當(dāng)L2 機(jī)能配置L2 緩存池和三個(gè)邏輯磁盤L2 后,第一個(gè)邏輯磁盤為控制器0,第二個(gè)為控制器1,最后一個(gè)是指定一個(gè)持久寫區(qū)域。
在初始化L1、L2 緩存時(shí),都是從HDD中讀取數(shù)據(jù),并將數(shù)據(jù)映射到緩存中,在緩存空間不足,或者達(dá)到預(yù)先設(shè)定的上限值,為了保證緩存空間可用,在L1和L2 緩存替換算法[11]上都采用LRU,讀寫緩存的工作機(jī)制如圖3所示。
圖3 讀寫緩存工作流程
這里回寫策略的設(shè)定,是結(jié)合讀寫塊大小和存儲(chǔ)空間利用率兩個(gè)因素考慮的,減少小塊寫帶來的開銷和減小寫入放大系數(shù)。在回寫狀態(tài)下,數(shù)據(jù)只有在要被從緩存中清除時(shí)才寫到磁盤上?;貙懶枰獜木彺嬷邢虼疟P上寫數(shù)據(jù),并把更新的數(shù)據(jù)寫入緩存中。由于一個(gè)數(shù)據(jù)可能多次被寫入緩存中,而沒有進(jìn)行磁盤存取,所以回寫的效率非常高。
為了驗(yàn)證此架構(gòu)使海量存儲(chǔ)系統(tǒng)得到優(yōu)化,通過構(gòu)筑L2 緩存前后對(duì)比進(jìn)行性能測試。測試的結(jié)果以數(shù)據(jù)傳輸速率(MBps)為單位衡量。測試工具為IOmetor,版本為2006.07.27。
測試環(huán)境[12]如下:業(yè)務(wù)機(jī)CPU 配置Intel(R)Core(TM)i5 CPU760@2.80GHz,內(nèi)存4GB,操作系統(tǒng)Microsoft Windows XP Professional Version 2002,Service Pack 3,NTFS 文件系統(tǒng),通過FC 光纖連接遠(yuǎn)程具有兩個(gè)控制器的磁盤陣列,SSD 使用規(guī)格Intel SSD 510 Series 120GB,并在其上建立4個(gè)類型是raid5 容量為60G的LD,把4個(gè)LD 通過對(duì)應(yīng)的業(yè)務(wù)端WWPN 號(hào)添加在該服務(wù)器,在服務(wù)器上初始化加載的新盤,在其上建立NTFS 文件系統(tǒng),此時(shí)磁盤已經(jīng)可以在服務(wù)器上使用了,接著設(shè)定LD分別將二級(jí)緩存的機(jī)能設(shè)成無效和有效,進(jìn)行性能測試。
測試結(jié)果如圖4所示。
圖4 有無L2 緩存數(shù)據(jù)傳輸速率對(duì)比
從圖4的測試結(jié)果可以看到,傳輸數(shù)據(jù)塊小于32kB,磁盤的數(shù)據(jù)傳輸速率都在遞增,同時(shí)二級(jí)緩存機(jī)能有效時(shí)的數(shù)據(jù)傳輸速率平均高于二級(jí)緩存機(jī)能無效時(shí)的2 倍;當(dāng)傳輸數(shù)據(jù)塊大于32kB,磁盤的數(shù)據(jù)傳輸速率開始遞減,同時(shí)二級(jí)緩存機(jī)能有效時(shí)的數(shù)據(jù)傳輸速率低于二級(jí)緩存機(jī)能無效時(shí)的數(shù)據(jù)傳輸速率。所以,此二級(jí)緩存能夠有效解決小數(shù)據(jù)文件的小讀寫問題,在傳輸數(shù)據(jù)塊大于32kB 時(shí),使用二級(jí)緩存性能的優(yōu)勢就體現(xiàn)不太明顯。
隨著二級(jí)緩存技術(shù)發(fā)展成熟,性能也在優(yōu)化和提升,其在網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)中也越來越得到普遍應(yīng)用。本文設(shè)計(jì)實(shí)現(xiàn)的DRAM+SSD 二級(jí)緩存,通過分析其架構(gòu)各模塊,并結(jié)合有效的工作機(jī)制詳細(xì)描述了讀寫流程,最后結(jié)合性能測試數(shù)據(jù)來有效驗(yàn)證了二級(jí)緩存性能的優(yōu)勢。這里需要注意的是決定在存儲(chǔ)系統(tǒng)[13-14]中使用二級(jí)緩存之前,應(yīng)該分析應(yīng)用程序工作負(fù)載特征。二級(jí)緩存對(duì)所有類型的I/O 配置文件的幫助程度并非完全相同。例如,具有較大I/O 大小的順序流可能不會(huì)導(dǎo)致出現(xiàn)任何二級(jí)緩存提升,因?yàn)檫@些I/O流可能不會(huì)多次訪問同一數(shù)據(jù)塊,而這是發(fā)生二級(jí)緩存提升的必要條件。順序應(yīng)用程序(如備份)的I/O通常也不會(huì)導(dǎo)致任何二級(jí)緩存提升。只有清楚了應(yīng)用程序工作負(fù)載特征之后,再選擇合適的緩存策略,使得SSD 充分發(fā)揮出其應(yīng)有的性能。
[1]Riedel E,Gibson G.Understanding customer dissatisfaction with underutilized distributed file servers [C]// The 5th Goddard Conference on Mass Storage Systems and Technologie.1996:371-387.
[2]Sun Xianhe.Remove the memory wall:From performance modeling to architecture optimization [C]// The 20th IEEE International Parallel and Distributed Processing Symposium.2006.
[3]Zhang Xiaodong.Research issues and challenges to advance system software for multicore processors and data-intensive applications[C]// The 2008 IEEE/IFIP International Conference on Embedded and Ubiquitous Computing.2008:4.
[4]王超,張惠臻,周學(xué)海,等.異質(zhì)存儲(chǔ)系統(tǒng)中的高速緩存機(jī)制研究[J].電子學(xué)報(bào),2011,39(6):1267-1271.
[5]Garth A Gibson,Rodney Van Meter.Network attached storage architecture[J].Communications of the ACM,2000,43(11):37-45.
[6]趙英杰.網(wǎng)絡(luò)存儲(chǔ)服務(wù)器緩存替換策略研究[D].長沙:國防科學(xué)技術(shù)大學(xué),2010.
[7]李晉琳.RAID中固態(tài)盤二級(jí)緩存機(jī)制研究與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2011.
[8]Thanos Makatos,Yannis Klonatos,Manolis Marazakis,et al.Using transparent compression to improve SSD-based I/O caches[C]// Proceedings of the 5th European Conference on Computer Systems.2010:1-14.
[9]Stevens W R,Rago S A.UNIX 環(huán)境高級(jí)編程(英文版)(第2 版)[M].北京:人民郵電出版社,2006:355-420.
[10]易安信電腦系統(tǒng)(中國)有限公司.EMC CLARiiON,Celerra Unified,and FAST Cache WP[DB/OL].http://china.emc.com/collateral/software/white-papers/h8046-clariion-celerra-unified-fast-cache-wp.pdf,2011-07-01.
[11]蘭麗.多級(jí)緩存模式下的數(shù)據(jù)塊替換優(yōu)化算法[J].計(jì)算機(jī)工程,2013,39(4):78-81.
[12]賀秦祿,李戰(zhàn)懷,王樂曉,等.磁盤存儲(chǔ)測試技術(shù)研究[J].計(jì)算機(jī)科學(xué),2012,39(6):1-5.
[13]羅舟,趙躍龍.基于存儲(chǔ)區(qū)域網(wǎng)(SAN)的數(shù)據(jù)備份[J].現(xiàn)代電子技術(shù),2004,27(22):33-36.
[14]馮丹.網(wǎng)絡(luò)存儲(chǔ)關(guān)鍵技術(shù)的研究及進(jìn)展[J].移動(dòng)通信,2009(11):35-39.