吳苑
對(duì)公司和企業(yè)來(lái)說(shuō),用于服務(wù)和保存數(shù)據(jù)的存儲(chǔ)系統(tǒng)變得越來(lái)越重要。磁盤(pán)冗余陣列(RAID)被應(yīng)用于存儲(chǔ)市場(chǎng)以提供冗余、提高性能并降低成本。RAID可以通過(guò)操作系統(tǒng)上層的軟件仿真或者專(zhuān)用的硬件磁盤(pán)陣列來(lái)實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)對(duì)磁盤(pán)陣列相應(yīng)的數(shù)據(jù)流管理。
過(guò)去,由于硬件磁盤(pán)陣列卡擁有專(zhuān)門(mén)的電路來(lái)處理所有磁盤(pán)陣列驅(qū)動(dòng)器的數(shù)據(jù)計(jì)算,而不需要處理器并且可以提供優(yōu)越的性能,專(zhuān)門(mén)的硬件磁盤(pán)陣列卡被廣泛使用。與此同時(shí),硬件磁盤(pán)陣列卡的高成本以及其對(duì)BIOS兼容性的要求成為了主要瓶頸。
為了解決這種問(wèn)題,更多人把目光投向了軟件磁盤(pán)陣列。軟件RAID是在操作系統(tǒng)上層利用軟件仿真的。在軟件仿真RAID中,需要占用普通計(jì)算環(huán)境中的處理器計(jì)算周期來(lái)專(zhuān)門(mén)處理RIAD接口的必要任務(wù)。與硬件RAID相比,軟件RAID很快發(fā)展成為一種具有成本效益和靈活性的解決方案。在云存儲(chǔ)成為存儲(chǔ)市場(chǎng)的新概念時(shí),軟件RAID由于其低成本及高可擴(kuò)展性將在存儲(chǔ)市場(chǎng)得到更廣泛的應(yīng)用。
盡管軟件RAID有很多優(yōu)勢(shì),其最關(guān)鍵的問(wèn)題是系統(tǒng)性能的下降。隨著處理器、內(nèi)存、磁盤(pán)驅(qū)動(dòng)器以及RAID級(jí)別的不同,它在任何環(huán)節(jié)都可能發(fā)生并損失5%甚至更高的性能。由于軟件RAID通常建立在性能一般價(jià)格便宜的磁盤(pán)上,數(shù)據(jù)保護(hù)和完整性非常重要。軟件RAID會(huì)記錄數(shù)據(jù)的校驗(yàn)和并在每次讀取數(shù)據(jù)時(shí)進(jìn)行驗(yàn)證。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí),軟件RAID會(huì)修正校驗(yàn)和。由于軟件RAID是建立在操作系統(tǒng)核心上并且依賴于處理器來(lái)進(jìn)行這些計(jì)算,處理器成為了軟件RAID的潛在性能瓶頸,同樣也為使用新一代CPU來(lái)提升軟件RAID的性能提供了機(jī)會(huì)。
Zettabyte文件系統(tǒng)(ZFS)是一種開(kāi)源的文件系統(tǒng),采用新的軟件RAID模式RAID-Z。RAID-Z和RAID-5類(lèi)似,但采用了可變條帶寬帶來(lái)消除RAID-5的寫(xiě)入漏洞。RAID-Z全部是全條帶寫(xiě)入,沒(méi)有讀-修改-寫(xiě)入的損失,沒(méi)有寫(xiě)入漏洞,也不需要硬件的非易失性隨機(jī)訪問(wèn)存儲(chǔ)器(NVRAM)。ZFS還支持校驗(yàn)功能以確保數(shù)據(jù)完整性。由于ZFS擁有上述優(yōu)勢(shì),本文選擇ZFS作為軟件RAID性能優(yōu)化的對(duì)象。
1.1 ZFS校驗(yàn)和終端對(duì)終端校驗(yàn)是ZFS強(qiáng)大的功能之一,使得ZFS可以發(fā)現(xiàn)并修正很多種其他產(chǎn)品不能發(fā)現(xiàn)或修真的錯(cuò)誤。在文件系統(tǒng)級(jí)別啟用校驗(yàn),可以降低在應(yīng)用程序級(jí)別啟用校驗(yàn)的需要。ZFS提供了多種校驗(yàn)算法,如fletcher2,fletcher4和SHA256.
fletcher2是ZFS上默認(rèn)的校驗(yàn)算法。然而,它的算法非常簡(jiǎn)單,只是并行運(yùn)行兩個(gè)8位的fletcher校驗(yàn)。每一個(gè)校驗(yàn)操作從間隔的64字符數(shù)據(jù)中讀取,再將產(chǎn)生的4個(gè)64位的數(shù)量連接在一起形成了256位的結(jié)果。數(shù)據(jù)源中的單個(gè)位錯(cuò)誤會(huì)影響最多128位的校驗(yàn)和。然而這種校驗(yàn)算法的可靠性不是很高,存在缺陷。例如,只有50%的機(jī)會(huì)捕捉到一個(gè)磁盤(pán)塊上任意64比特字中最重要的比特中的一個(gè)單比特的錯(cuò)誤或任何連續(xù)的單比特錯(cuò)誤。Fletcher2可以提供的數(shù)據(jù)沖突可能性是2-8。
SHA256是一個(gè)安全的哈希散列算法。它使用256比特的塊大小作為輸出,為每個(gè)數(shù)據(jù)塊的數(shù)據(jù)和元數(shù)據(jù)技術(shù)哈希值,并將其作為校驗(yàn)和存儲(chǔ)。當(dāng)相關(guān)數(shù)據(jù)被讀取時(shí),ZFS會(huì)比較校驗(yàn)和來(lái)確保數(shù)據(jù)完整性。由于SHA256使用了256比特塊大小的哈希值,它可以提供的數(shù)據(jù)沖突可能性是2-256。它與fletcher2相比更加安全可靠。
然而,由于SHA256會(huì)占據(jù)過(guò)多的處理器周期來(lái)進(jìn)行計(jì)算并導(dǎo)致系統(tǒng)性能的大幅度下降,ZFS使用了fletcher2作為系統(tǒng)默認(rèn)的校驗(yàn)算法。盡管SHA256對(duì)數(shù)據(jù)更加安全,由于性能較差,現(xiàn)階段很難實(shí)現(xiàn)用SHA256進(jìn)行數(shù)據(jù)校驗(yàn)。
1.2 瓶頸分析
本文使用filebench作為性能基準(zhǔn)測(cè)試工具,并用dtrace來(lái)分析性能和尋找瓶頸。
下表是使用英特爾nehalem處理器在ZFS上啟用不同校驗(yàn)算法得到的性能測(cè)試結(jié)果,如表1所示:
從表中可以看出,當(dāng)啟用SHA256進(jìn)行數(shù)據(jù)校驗(yàn)時(shí),系統(tǒng)延時(shí)有非常大的增加。
使用dtrace進(jìn)行分析的報(bào)告,如表2所示:
表2 dtrace性能分析報(bào)告
從中可以看出SHA256占據(jù)了100%的處理器并使得系統(tǒng)性能迅速下降。從分析結(jié)果中可以看出,由于SHA256占據(jù)了過(guò)多的處理器周期來(lái)進(jìn)行SHA256轉(zhuǎn)換塊計(jì)算,處理器成為在ZFS上啟用SHA256進(jìn)行校驗(yàn)的性能瓶頸。
1.3 測(cè)試方法
本文使用英特爾core i5 650處理器,在ZFS上使用不同校驗(yàn)算法對(duì)順序讀取的性能包括帶寬、延時(shí)等進(jìn)行了測(cè)試。該處理器是英特爾Westmere處理器并且發(fā)布了最新的AES(Advanced Encryption Standard)指令集。
英特爾發(fā)布的不同代處理器比較,如表3所示:
表3 測(cè)試中使用的不同代英特爾處理器比較
從表中可以看出core i7到core i5沒(méi)有結(jié)構(gòu)上的變化,甚至core i7由于具有更多的核和緩存會(huì)有更好的特性。Core i5最明顯的改善在于AES指令集的啟用。
盡管該指令集是針對(duì)AES而不是直接對(duì)SHA256, 它同樣可以加快部分的哈希計(jì)算。由于SHA256是一種哈希散列算法,它在英特爾啟用了AES指令集的Westmere處理器上同樣可以獲得性能提升。
1.4 存在的問(wèn)題
在使用Westmere處理器進(jìn)行性能測(cè)試時(shí),首先得到的結(jié)果中SHA256與其他校驗(yàn)算法有類(lèi)似的延遲。在評(píng)估根本原因的過(guò)程中,發(fā)現(xiàn)當(dāng)使用SATA硬盤(pán)進(jìn)行測(cè)試時(shí),硬盤(pán)的輸入、輸出性能取代處理器成為了瓶頸。因此,我們改用了固態(tài)硬盤(pán)(SSD)來(lái)繼續(xù)測(cè)試處理器改善帶來(lái)的性能提升。
然而,當(dāng)使用fletcher2或者fletcher4進(jìn)行數(shù)據(jù)校驗(yàn)時(shí),硬盤(pán)仍然是性能瓶頸,因?yàn)檫@兩種校驗(yàn)方法只是使用簡(jiǎn)單的數(shù)列和計(jì)算而并不需要如此的依賴處理器進(jìn)行計(jì)算。
在使用英特爾不同代處理器及啟用不同校驗(yàn)算法進(jìn)行性能測(cè)試之后,可以得出如下結(jié)論:
(1)當(dāng)啟用SHA256進(jìn)行數(shù)據(jù)校驗(yàn),使用英特爾最新Westmere處理器,相比酷睿2系統(tǒng)可以獲得28%的帶寬提升,相比迅馳(Nehalem)可以獲得11%的帶寬提升。
(2)與fletcher2獲得的性能提升相比,SHA256獲得的提升仍然不足夠。這是由于Westmere處理器的AES指令集只能加速SHA256的部分哈希散列運(yùn)算。
從測(cè)試結(jié)果可以看出,如圖1-圖4所示:
圖1 不同代處理器的性能測(cè)試結(jié)果 –帶寬
圖2 不同代處理器的性能測(cè)試結(jié)果 –延時(shí)
圖3 不同代處理器的性能測(cè)試結(jié)果 –處理器百分比
圖4 不同代處理器的性能測(cè)試結(jié)果 –處理器時(shí)間/操作
這里我們只測(cè)試了使用SHA256作為校驗(yàn)算法的ZFS的性能改善,并與前幾代如迅馳和酷睿2處理器進(jìn)行對(duì)比。由于不同的處理器有不同數(shù)量的多核,我們禁用了迅馳處理器上的兩個(gè)核以便在雙核的基礎(chǔ)上進(jìn)行性能比較。除此之外,由于在使用fletcher進(jìn)行校驗(yàn)時(shí)處理器使用率并不高,性能的瓶頸在于硬盤(pán)而非處理器。這也導(dǎo)致了最終測(cè)試結(jié)果中,當(dāng)使用fletcher進(jìn)行校驗(yàn),在迅馳處理器上帶寬和延時(shí)性能較好于Westmere處理器。
SHA256同樣能在ZFS的去除冗余功能中使用。當(dāng)然這會(huì)占據(jù)更多的處理器和內(nèi)存資源來(lái)進(jìn)行數(shù)據(jù)計(jì)算。我們可能會(huì)在ZFS的去除冗余功能中看到更多的性能提升。
數(shù)據(jù)去除冗余對(duì)存儲(chǔ)的優(yōu)化來(lái)說(shuō)非常重要。它可以消除大量占據(jù)磁盤(pán)空間的冗余數(shù)據(jù)以節(jié)省磁盤(pán)空間。此外,由于只有一個(gè)數(shù)據(jù)副本,它也可能會(huì)提高系統(tǒng)性能。系統(tǒng)將不需要在多個(gè)磁盤(pán)上搜索特定的數(shù)據(jù)塊。
但是ZFS上的去除冗余還有許多性能問(wèn)題。例如,當(dāng)啟用去除冗余來(lái)刪除較大的文件或文件夾時(shí),可能會(huì)造成服務(wù)器掛起。使用Westmere處理器對(duì)SHA256的性能提升有可能會(huì)幫助解決去除數(shù)據(jù)冗余上這種性能問(wèn)題并使它更快成為一種產(chǎn)品。
由于我們使用了一款較為低端的Westmere處理器,Westmere上的性能測(cè)試結(jié)果并不盡如人意。盡管如此,基于現(xiàn)在對(duì)ZFS上啟用SHA256得到的性能測(cè)試結(jié)果,可以證明我們的想法是可以實(shí)現(xiàn)的。
(1)使用SHA256進(jìn)行校驗(yàn),在Westmere處理器上可以獲得迅馳處理器上1.1倍的帶寬和90%的延時(shí)。英特爾的Westmere處理器可以幫助提高SHA256校驗(yàn)的性能并提升軟件RAID的性能。
(2)在Westmere處理器中,使用SHA256可以獲得默認(rèn)校驗(yàn)算法fletcher2的70%的帶寬以及1.4倍的延時(shí)。SHA256的性能仍然沒(méi)有好到可以作為默認(rèn)的選項(xiàng)。
(3)如果處理器的設(shè)計(jì)可以特別為SHA256提供指令集,SHA256可能會(huì)獲得更多的性能提升。
[1]http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide#Tuning_ZFS_Checksums[OL]
[2]Yu Sasaki,Lei Wang,and Kazumaro Aoki,Preimage Attacks on 41-Step SHA-256 and 46-Step SHA-512,[M]accessed 3 Jan 2010
[3]Intel?Advanced Encryption Standard(AES)[C]Instructions Set.
[4]Benadjila,R.Billet1,O.Gueron,S.and M.J.B.Robshaw.The Intel AES[C]Instructions Set and the SHA-3 Candidates