自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

存儲(chǔ)極客 | 淺析固態(tài)介質(zhì)在存儲(chǔ)系統(tǒng)中的應(yīng)用方式

存儲(chǔ) 存儲(chǔ)軟件
眾所周知,傳統(tǒng)存儲(chǔ)系統(tǒng)對(duì)固態(tài)介質(zhì)的利用方式共有多種,冬瓜哥本文就針對(duì)每一種方式做個(gè)分析和總結(jié)。雖然說(shuō)論文都有個(gè)摘要,但是冬瓜哥想直奔主題,就不啰嗦了。

 “存儲(chǔ)極客”欄目再次與大家見(jiàn)面啦!在這里,只有一位大咖名叫“存儲(chǔ)”,它的粉絲我們稱為“存儲(chǔ)極客”!存儲(chǔ)極客這是一群存儲(chǔ)偏執(zhí)狂

為存儲(chǔ)而生,跟存儲(chǔ)死磕

各具獨(dú)家秘笈

有觀點(diǎn),有碰撞,有干貨

從8月18起

做客存儲(chǔ)極客欄目

與你分享存儲(chǔ)里的那點(diǎn)事兒

[[150929]]

 


眾所周知,傳統(tǒng)存儲(chǔ)系統(tǒng)對(duì)固態(tài)介質(zhì)的利用方式共有多種,冬瓜哥本文就針對(duì)每一種方式做個(gè)分析和總結(jié)。雖然說(shuō)論文都有個(gè)摘要,但是冬瓜哥想直奔主題,就不啰嗦了。

 

 

【方式1】連鍋端/AFA第一種是一刀切連鍋端,直接把機(jī)械盤替換為固態(tài)盤,這種方式獲得的性能提升最高,但無(wú)疑付出的成本也是最高的,這就是所謂All Flash Array(AFA),全閃存陣列。然而,如果不加任何改動(dòng)僅僅做簡(jiǎn)單替換的話,會(huì)發(fā)現(xiàn)AFA根本無(wú)法發(fā)揮出固態(tài)盤的性能,比如,一個(gè)24盤位的中端存儲(chǔ)系統(tǒng)控制器,如果全部換成24塊SAS SSD的話,其最大隨機(jī)讀IOPS大概只能到200K到300K之間,如果按照每塊盤隨機(jī)讀IOPS到50k的話,那么24塊的總和應(yīng)該是1200K,也就是120萬(wàn),當(dāng)然,還需要拋去做Raid等其他底層模塊的處理所耗費(fèi)的時(shí)間開銷,但是,二十到三十萬(wàn)IOPS相對(duì)于120萬(wàn)的話,這效率也太低了。

全固態(tài)陣列,是一種虛擬化設(shè)備,所謂虛擬化設(shè)備,是指從這個(gè)設(shè)備的前端只能看到虛擬出來(lái)的資源而看不到該設(shè)備后端所連接的任何物理設(shè)備(帶內(nèi)虛擬化);或者在數(shù)據(jù)路徑上可以看到后端的物理設(shè)備且可以讀寫,但是在控制路徑上需要在對(duì)物理設(shè)備進(jìn)行讀寫之前咨詢一下元數(shù)據(jù)服務(wù)器(帶外虛擬化)。帶外虛擬化性能高,但是架構(gòu)復(fù)雜不透明,需要在前端主機(jī)上安裝特殊的客戶端。帶內(nèi)虛擬化方式則可以對(duì)前端主機(jī)保持完全透明。目前的全固態(tài)陣列,為了保證充分的通用性,所以普遍使用帶內(nèi)虛擬化方式,也就是說(shuō),對(duì)于基于x86平臺(tái)的AFA,其軟硬件架構(gòu)本質(zhì)上與傳統(tǒng)存儲(chǔ)別無(wú)二致,差別就在于IO路徑的優(yōu)化力度上。傳統(tǒng)陣列的IO處理路徑無(wú)法發(fā)揮出固態(tài)介質(zhì)的性能根本原因就在于參與IO處理的模塊太多太冗長(zhǎng),因此,全固態(tài)陣列基本會(huì)在以下幾個(gè)角度上做優(yōu)化從而釋放其所連接的固態(tài)盤/閃存卡的性能。

 

 


 

[[150930]]

 

1. 簡(jiǎn)化功能比如快照重刪Thin遠(yuǎn)程復(fù)制、Raid2.0之流、自動(dòng)分層/緩存(本來(lái)也就一個(gè)層)等。所有這些模塊的存在,都會(huì)影響性能。雖然可以使用流水線化的IO處理方式來(lái)提升吞吐量,但是流水線對(duì)IO的時(shí)延是毫無(wú)幫助的,而且流水線級(jí)數(shù)越多,每個(gè)IO的處理時(shí)延就越高。吞吐量雖然是一個(gè)很重要的指標(biāo),只要底層并發(fā)度足夠大(更詳細(xì)的分析可參考冬瓜哥另一篇文章《關(guān)于IO時(shí)延你被騙了多久》),再加上流水線化,就可以達(dá)到很高的數(shù)字;但是時(shí)延的指標(biāo),對(duì)于一些場(chǎng)景來(lái)講同樣很重要,比如OLTP場(chǎng)景,時(shí)延只能靠縮減流水線級(jí)數(shù)(處理模塊的數(shù)量)或者提升每個(gè)模塊的處理速度這兩種手段來(lái)實(shí)現(xiàn),沒(méi)有任何其他途徑。然而,也并非要把所有數(shù)據(jù)管理功能全都拋掉,如果這樣的話,那么所有基于x86平臺(tái)的AFA最后就只能拼價(jià)格,因?yàn)闆](méi)有任何特色。所以,保留哪些功能,保留下來(lái)的功能模塊又怎樣針對(duì)固態(tài)介質(zhì)做優(yōu)化,就是AFA廠商需要攻克的難關(guān)了。

2. 用原有的協(xié)議棧,加入多隊(duì)列等優(yōu)化對(duì)于IO處理的主戰(zhàn)場(chǎng)來(lái)講,協(xié)議棧無(wú)疑是一道無(wú)法越繞開的城墻,拿Linux來(lái)講,協(xié)議棧從通用塊層一直延伸到底層IO通道控制器的驅(qū)動(dòng)程序(Low Layer Device Driver,LLDD),IO路徑上的這一大段,都可以統(tǒng)稱為協(xié)議棧。開發(fā)者可以完全利用現(xiàn)有Linux內(nèi)核的這些成熟的協(xié)議棧來(lái)設(shè)計(jì)AFA,但是其性能很差,比如通用塊層在較老的內(nèi)核版本中,其只有一個(gè)bio(Block IO)請(qǐng)求隊(duì)列,在機(jī)械盤時(shí)代,機(jī)械盤就像老爺車一樣,這個(gè)隊(duì)列基本都是堵得,也就是Queue Full狀態(tài),瀆指針永遠(yuǎn)追不上寫指針。

而在固態(tài)存儲(chǔ)時(shí)代,這個(gè)隊(duì)列又頻繁地欠載(Underrun),瀆指針追上了寫指針,因?yàn)榈讓拥奶幚硭俣忍炝?,以至于?duì)列中還沒(méi)有更多的IO入隊(duì),底層就把隊(duì)列中所有IO都處理完了。欠載的后果就是底層無(wú)法獲取足夠多的IO請(qǐng)求,那么吞吐量就會(huì)降下來(lái)。這就像抽水機(jī)一樣,大家可能有人見(jiàn)過(guò)工地上的抽水機(jī),咣嘰咣嘰的,活塞每運(yùn)動(dòng)一次,水流就冒出來(lái),而當(dāng)活塞退回原位從水源吸水的時(shí)候,出水端水流就小了。活塞每次能吸水的容量,就是隊(duì)列深度。

好在,在IO路徑處理上,系統(tǒng)并不是處理完隊(duì)列中所有IO之后,才允許新的IO入隊(duì),IO可以隨時(shí)入隊(duì)(上游模塊壓入隊(duì)列等待處理)或者出隊(duì)(下游模塊從隊(duì)列中取走執(zhí)行),但是,這種方式也帶來(lái)了一個(gè)問(wèn)題,就是鎖的問(wèn)題。出隊(duì)入隊(duì)操作,都要鎖住整個(gè)隊(duì)列首尾指針對(duì)應(yīng)的變量,因?yàn)椴荒茉试S多個(gè)模塊同時(shí)操作指針變量,會(huì)不一致。這一鎖定,性能就會(huì)受到影響,從而導(dǎo)致頻繁欠載。有些號(hào)稱無(wú)鎖隊(duì)列,只不過(guò)是將鎖定操作從軟件執(zhí)行變成利用硬件原子操作指令來(lái)讓硬件完成,底層還是需要鎖定的。那么,這方面如何優(yōu)化?道理很簡(jiǎn)單,大家都擠在一個(gè)隊(duì)列里操作,何不多來(lái)幾個(gè)隊(duì)列呢?隊(duì)列之間一般沒(méi)有關(guān)聯(lián),根本不需要隊(duì)列間鎖定,這就增加了并發(fā)度,能夠釋放固態(tài)介質(zhì)的性能。在最新的Linux內(nèi)核中,通用塊層已經(jīng)實(shí)現(xiàn)了多隊(duì)列。所以,如果還想利用現(xiàn)成的塊層來(lái)節(jié)約開發(fā)量,那么無(wú)疑要選擇新內(nèi)核版本了。

3. 拋棄原有的協(xié)議棧,包括塊層,自己開發(fā)新協(xié)議棧通用塊層之所以通用,就是因?yàn)樗紤]了最通用的場(chǎng)景,定義了很多像模像樣的數(shù)據(jù)結(jié)構(gòu)、接口、流程,而且加入了很多功能模塊,比如LVM,軟Raid,Device Mapper,DRBD、IO Scheduler等等,雖然這些模塊多數(shù)都可以被bypass掉,但是這些東西對(duì)于那些想完全榨干性能的架構(gòu)師來(lái)講,就多余了。

有些AFA或者一些分布式存儲(chǔ)系統(tǒng)在IO路徑中完全拋棄塊層,而自己寫了一個(gè)內(nèi)核模塊掛接到VFS層下面,接受應(yīng)用發(fā)送的IO請(qǐng)求,經(jīng)過(guò)簡(jiǎn)單處理之后直接交給底層協(xié)議棧(比如SCSI協(xié)議棧)處理。不幸的是,SCSI協(xié)議棧本身則是個(gè)比塊層還要厚的層。IO出了龍?zhí)队秩牖⒀?,?duì)于基于SATA/SAS SSD的AFA來(lái)講,SCSI層很難繞過(guò),因?yàn)檫@個(gè)協(xié)議棧太過(guò)底層,SCSI指令集異常復(fù)雜,協(xié)議狀態(tài)機(jī)、設(shè)備發(fā)現(xiàn)、錯(cuò)誤恢復(fù)機(jī)制等哪一樣都?jí)蚴艿模绻麙仐塖CSI協(xié)議棧自己開發(fā)一個(gè)新的輕量級(jí)SCSI協(xié)議棧,那是不切實(shí)際的,你會(huì)發(fā)現(xiàn)倒頭來(lái)不得不把那些重的代碼加回來(lái),因?yàn)镾CSI體系本身的復(fù)雜性已經(jīng)決定了協(xié)議棧實(shí)現(xiàn)上的復(fù)雜性。

所以,基于SATA/SAS SSD搭建的固態(tài)陣列,其性能也就那么回事,時(shí)延一定高。然而,如果使用的是PCIE閃存卡或者2.5寸盤的話,那么就可以完全拋棄SCSI協(xié)議棧。有些PCIE閃存卡的驅(qū)動(dòng)中包含了自定義的私有協(xié)議棧,其中包含了指令集、錯(cuò)誤處理、監(jiān)控等通用協(xié)議棧的大部分功能,其直接注冊(cè)到塊層;而NVMe協(xié)議棧迅速成了定海神針,參差不齊混亂不堪的協(xié)議棧,不利于行業(yè)的規(guī)模性發(fā)展,NVMe協(xié)議棧就是專門針對(duì)非易失性高速存儲(chǔ)介質(zhì)開發(fā)的輕量級(jí)協(xié)議棧,輕量級(jí)的指令集和錯(cuò)誤恢復(fù)邏輯,超高的并發(fā)隊(duì)列數(shù)量和隊(duì)列深度。AFA后端如果使用NVMe閃存卡/盤的話,那么這塊也就沒(méi)有什么可優(yōu)化的了。如果還想優(yōu)化,那就得從更底層來(lái)優(yōu)化了,也就是連NVMe協(xié)議棧也拋掉,只保留PCIE閃存卡/盤的LLDD驅(qū)動(dòng),上面的部分全部重寫,不過(guò)這樣看上去沒(méi)什么必要,因?yàn)長(zhǎng)LDD上層接口也是符合NVMe規(guī)范的,設(shè)備固件也只能處理NVMe指令,所以,針對(duì)已經(jīng)優(yōu)化過(guò)的協(xié)議棧繼續(xù)優(yōu)化,受益很低,成本很高。要想繼續(xù)優(yōu)化,還有一條路可走,那就是連內(nèi)核態(tài)驅(qū)動(dòng)都拋掉。

 

 


 

 

4.拋棄原有的協(xié)議棧和設(shè)備驅(qū)動(dòng),完全從頭開發(fā)

塊層可以拋,底層協(xié)議棧也可以拋,最底層的內(nèi)核設(shè)備驅(qū)動(dòng)是否也可以拋棄呢?若為性能故,三者皆可拋!操作系統(tǒng)內(nèi)核的存在,對(duì)性能是無(wú)益的,內(nèi)核增加了方便性和安全性,必然犧牲性能。如果要追求極致性能,就要連操作系統(tǒng)內(nèi)核都Bypass掉。當(dāng)然,運(yùn)行在OS中的程序是不可能脫離OS內(nèi)核而存在的,但是這并不妨礙其打開一個(gè)小窗口,將IO指令直接發(fā)送給硬件,無(wú)需經(jīng)過(guò)內(nèi)核模塊的轉(zhuǎn)發(fā),這就是所謂內(nèi)核Bypass,指的是IO路徑上的大部分操作不陷入內(nèi)核。

當(dāng)然,這需要PCIE閃存卡/盤廠商首先實(shí)現(xiàn)一個(gè)很小的代理驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)負(fù)責(zé)將PCIE設(shè)備的寄存器空間映射到用戶程序空間,之后還要負(fù)責(zé)響應(yīng)中斷和代理DMA操作,其他時(shí)候就不參與任何IO處理了,用戶程序可以直接讀寫設(shè)備寄存器,這樣可以實(shí)現(xiàn)更高的性能,但是對(duì)開發(fā)者能力要求甚高,其需要自行實(shí)現(xiàn)一個(gè)用戶態(tài)的IO處理狀態(tài)機(jī),或者說(shuō)IO協(xié)議棧,搞不好的話,連原生驅(qū)動(dòng)的性能都不如。所以,這已經(jīng)超出了目前多數(shù)產(chǎn)品開發(fā)設(shè)計(jì)者的可承受范圍,在如今這個(gè)互聯(lián)網(wǎng)+的浮躁時(shí)代,多數(shù)人更注重快速出產(chǎn)品,而不是十年磨一劍鑄就經(jīng)典。

5.針對(duì)多核心進(jìn)行優(yōu)化不管利用上述哪種設(shè)計(jì)模式,都需要針對(duì)多核心CPU平臺(tái)進(jìn)行優(yōu)化。有些存儲(chǔ)廠商在幾乎十年前就開始了多CPU多核心的系統(tǒng)優(yōu)化,而某大牌廠商,據(jù)冬瓜哥所知,直到幾年前才著手優(yōu)化多核心多CPU,當(dāng)時(shí),其產(chǎn)品雖然硬件配置上是多核心多CPU,其實(shí)其軟件內(nèi)部的主要IO模塊根本都是串行架構(gòu)的,也就是根本用不起來(lái)多CPU,具體廠商冬瓜哥就不提了,只是想讓大家明白一個(gè)事情,就是廠商的這些產(chǎn)品,表面吹的很光鮮,而后面的水可能很深,有時(shí)候可能也是很黑的。

6.采用專用FPGA加速存儲(chǔ)系統(tǒng)到底是否可以使用硬加速?這得首先看一下存儲(chǔ)系統(tǒng)的本質(zhì),存儲(chǔ)系統(tǒng)的最原始形態(tài),其實(shí)不是存儲(chǔ),而是網(wǎng)絡(luò),也就是只負(fù)責(zé)轉(zhuǎn)發(fā)IO請(qǐng)求即可,不做任何處理(或者說(shuō)虛擬化),如果僅僅是IO轉(zhuǎn)發(fā),那不就成了交換機(jī)了么,是的,交換機(jī)是否可以使用通用CPU來(lái)完成?可以,軟交換機(jī)就是,但是性能的確是不如硬交換機(jī)的,硬交換機(jī)直接用Crossbar或者M(jìn)UX來(lái)直接傳遞數(shù)據(jù),而CPU則需要通過(guò)至少一次內(nèi)存拷貝,收包、分析+查路由、發(fā)包,這個(gè)處理過(guò)程時(shí)延遠(yuǎn)高于硬交換,雖然可以用流水線化處理以及并行隊(duì)列的障眼法也達(dá)到較高的吞吐量,但是只要考察其時(shí)延,立馬露餡。

再來(lái)說(shuō)說(shuō)增加了很多功能的存儲(chǔ)系統(tǒng),也就是虛擬化存儲(chǔ)系統(tǒng),其內(nèi)部使用通用CPU完成所有邏輯,不僅是簡(jiǎn)單的IO轉(zhuǎn)發(fā)了,而且要處理,比如計(jì)算XOR,計(jì)算Hash,查表計(jì)算Thin卷的地址映射,Raid2.0元數(shù)據(jù)的更新維護(hù),響應(yīng)中斷,拷貝數(shù)據(jù),等等。那么上述這些工作,哪些可以硬加速呢?那些大運(yùn)算量,大數(shù)據(jù)拷貝量,模式重復(fù)固定的運(yùn)算,都可以被硬加速,比如XOR計(jì)算,重刪Hash計(jì)算,固定模式的元數(shù)據(jù)維護(hù)(比如bitmap、鏈表、bloomfilter等)、字符串匹配搜索、指令譯碼等。(詳情可參考冬瓜哥的“大話存儲(chǔ)”公眾號(hào)的第一篇文章《聊聊FPGA/CAPI/CPU》)。

 

 


 

 

至于復(fù)雜的判斷邏輯或者說(shuō)控制邏輯,尤其是全局控制部分,還得通用CPU出馬,因?yàn)樵谶@個(gè)層面上,充滿了變數(shù)。所以,即便是采用了FPGA的存儲(chǔ)系統(tǒng),其一定也是靠通用CPU來(lái)完成總體控制的,有些單片F(xiàn)PGA存儲(chǔ)系統(tǒng),那也不過(guò)是利用了FPGA內(nèi)部集成的通用CPU硬核來(lái)做總控罷了。目前市面上的FPGA,已經(jīng)不單純是一大塊可編程邏輯了,與其說(shuō)是FPGA,不如說(shuō)是帶可編程邏輯的SoC更合適,或者說(shuō)是把一堆成熟外圍器件比如DDR控制器、PCIE控制器、通用CPU、RAM、SRAM等,與FPGA可編程部分集成到一起的一個(gè)整體單片系統(tǒng),該系統(tǒng)也是什么都能做,雖然內(nèi)部集成的核心可能遠(yuǎn)比不上x86平臺(tái)的性能,但是對(duì)于專用系統(tǒng),基本已足夠。所以,用了FPGA就不需要Linux了么?非也。用了FPGA就不需要NVMe驅(qū)動(dòng)了么?非也。FPGA在這里充其量起到一個(gè)offload一些計(jì)算的作用了。

【方式2】共存但不交叉Nima,方式1這一節(jié)篇幅竟然這么長(zhǎng),冬瓜哥自己都怕了。再來(lái)說(shuō)說(shuō)方式2,共存但不交叉。這個(gè)方式是指在同一個(gè)存儲(chǔ)系統(tǒng)內(nèi),既有固態(tài)介質(zhì)又有機(jī)械盤,但是它們不被放置在同一個(gè)Raid組內(nèi),比如8個(gè)機(jī)械盤做一個(gè)Raid5,另外4個(gè)SSD又做了一個(gè)Raid10,各玩各的互不干擾。說(shuō)不干擾,是假的,這里的干擾,是一種更深層次的干擾,典型的代表是“快慢盤問(wèn)題”,能力強(qiáng)的能力弱的,在同一個(gè)體系內(nèi),會(huì)發(fā)生什么問(wèn)題?大家都清楚,能力弱的會(huì)拖慢能力強(qiáng)的。

對(duì)于存儲(chǔ)系統(tǒng),一樣的,系統(tǒng)內(nèi)的資源是有限的,比如某個(gè)鏈表,其中記錄有針對(duì)機(jī)械盤的IO的指令和數(shù)據(jù),這些IO的執(zhí)行相對(duì)于固態(tài)介質(zhì)來(lái)講簡(jiǎn)直是慢如蝸牛,那么,當(dāng)固態(tài)盤執(zhí)行完一個(gè)IO之后,由于這些被機(jī)械盤占用的資源無(wú)法釋放,新的IO就無(wú)法占用這些資源,導(dǎo)致固態(tài)盤在單位時(shí)間內(nèi)的閑置率增加,那么性能就無(wú)法發(fā)揮,被慢盤拖慢了。同樣的現(xiàn)象甚至出現(xiàn)在全機(jī)械盤系統(tǒng)內(nèi),如果某個(gè)盤有問(wèn)題,響應(yīng)時(shí)間變長(zhǎng),除了影響Raid組內(nèi)其他盤之外,也影響了其他Raid組的性能發(fā)揮。解決這類問(wèn)題,就要針對(duì)固態(tài)盤開辟專用的資源,而這又會(huì)增加不少的開發(fā)量和測(cè)試量。

【方式3】散熱設(shè)計(jì)和供電還有一種方式,是將固態(tài)介質(zhì)用作元數(shù)據(jù)的存儲(chǔ),比如存放Hash指紋庫(kù)、Thin/分層/Raid2.0的重映射表等、文件系統(tǒng)元數(shù)據(jù)等量較大的元數(shù)據(jù),這些元數(shù)據(jù)如果都被載入內(nèi)存的話恐怕放不開,因?yàn)榇鎯?chǔ)系統(tǒng)的內(nèi)存主要是被用來(lái)緩存讀寫數(shù)據(jù),從而提升性能,如果將大量空間用于元數(shù)據(jù)存放,那么性能就無(wú)法保證,但是反過(guò)來(lái),如果大部分元數(shù)據(jù)無(wú)法被載入內(nèi)存,那么性能也無(wú)法保證,因?yàn)閷?duì)于文件系統(tǒng)、分層、Raid2.0等,每筆IO都無(wú)法避免查表,而且是個(gè)同步操作,如果元數(shù)據(jù)緩存不命中,到磁盤載入,這樣性能就會(huì)慘不忍睹。所以固態(tài)盤此時(shí)派上了用場(chǎng),可以作為針對(duì)元數(shù)據(jù)的二級(jí)緩存使用,容量足夠大,讀取時(shí)響應(yīng)速度夠快,更新則可以在RAM中積累然后批量更新到Flash,所以即便Flash寫性能差,也不是問(wèn)題。

 


 

[[150931]]

 

【方式4】非易失性寫緩存/NVRAM大家都知道分布式系統(tǒng)一般是利用節(jié)點(diǎn)間鏡像來(lái)防止一個(gè)節(jié)點(diǎn)宕機(jī)之后緩存數(shù)據(jù)的丟失。而如果是所有節(jié)點(diǎn)全部掉電呢?比如某長(zhǎng)時(shí)間停電,或者雷擊等導(dǎo)致包括UPS在內(nèi)的全部電力供應(yīng)中斷,整體掉電的幾率還是存在的。此時(shí),緩存鏡像依然無(wú)法防止丟數(shù)據(jù)。而傳統(tǒng)存儲(chǔ)內(nèi)部有一個(gè)BBU或者UPS,相當(dāng)于二級(jí)保險(xiǎn)。

對(duì)于分布式系統(tǒng),要增加這種二級(jí)保險(xiǎn)的話,成本會(huì)非常高,因?yàn)榉植际较到y(tǒng)的節(jié)點(diǎn)太多,但是的確有些分布式系統(tǒng)廠商采用了NVRAM/NVDIMM來(lái)保護(hù)關(guān)鍵元數(shù)據(jù)或者Journal,而沒(méi)有用BBU來(lái)保護(hù)整個(gè)機(jī)器的內(nèi)存,因?yàn)楹笳咝枰ㄖ苹布O(shè)計(jì),服務(wù)器機(jī)箱內(nèi)無(wú)法容下BBU了。

目前,NVDIMM需要改很多周邊的軟硬件,不透明,而基于PCIE接口的NVRAM卡則可以無(wú)需修改BIOS和OS內(nèi)核即可使用,其可以模擬成塊設(shè)備,或者將卡上的RAM空間映射到用戶態(tài)。隨著NVDIMM,以及Intel Apache Pass項(xiàng)目的推進(jìn),相信后期非易失性DIMM會(huì)逐漸普及開來(lái)。

【方式5】透明分層上述介紹的混合機(jī)械盤和固態(tài)盤的方案,對(duì)應(yīng)用來(lái)講都不是透明的,都需要應(yīng)用或者系統(tǒng)管理員自行感知和安排數(shù)據(jù)的保存位置。透明分層則是一種對(duì)應(yīng)用透明的加速方案,傳統(tǒng)存儲(chǔ)產(chǎn)品最看重對(duì)應(yīng)用透明,所以自動(dòng)分層技術(shù)成為了傳統(tǒng)存儲(chǔ)的標(biāo)配特性。大家的做法類似,都是自動(dòng)統(tǒng)計(jì)每個(gè)數(shù)據(jù)塊的訪問(wèn)頻率,然后做排序,將熱點(diǎn)數(shù)據(jù)從低速介質(zhì)上移到高速介質(zhì),冷數(shù)據(jù)則下移到低速介質(zhì)。沒(méi)太大技術(shù)含量,無(wú)非就是誰(shuí)家能做更小的分塊粒度,熱點(diǎn)識(shí)別的精準(zhǔn)度就越高,但是耗費(fèi)的元數(shù)據(jù)空間越大,搜索效率越低,所有參數(shù)都是各種平衡的結(jié)果。

自動(dòng)分層有一個(gè)尷尬的地方,就是對(duì)于新寫入的數(shù)據(jù)塊的處理策略,是先寫入低速分層再向上遷移,還是與先寫入高速分層再“下沉”給應(yīng)用的體驗(yàn)有區(qū)別,哪個(gè)能始終保證寫入性能?這些策略,每個(gè)廠商都有各自的選擇。在此冬瓜哥想用一個(gè)典型設(shè)計(jì)來(lái)想大家介紹一下自動(dòng)分層方案在實(shí)際產(chǎn)品中的全貌。

目前針對(duì)自動(dòng)分層方案,業(yè)界的產(chǎn)品中,Dell在其Fluid Data系列方案中有兩個(gè)技術(shù)比較有特色。第一個(gè)是Fast Track技術(shù),也就是系統(tǒng)可以將熱數(shù)據(jù)透明的放置在磁盤的外圈,而冷數(shù)據(jù)則搬移到內(nèi)圈。外圈轉(zhuǎn)速高,等待時(shí)間短,可以獲得更高的IOPS和帶寬。

第二個(gè)則是利用寫重定向快照來(lái)實(shí)現(xiàn)讀寫分離的、基于全固態(tài)存儲(chǔ)系統(tǒng)的跨Raid級(jí)別(Raid10和Raid5)的分層方案,號(hào)稱可以以磁盤的價(jià)格實(shí)現(xiàn)全固態(tài)存儲(chǔ)的性能,這個(gè)方案冬瓜哥認(rèn)為還是非常有特色的。

首先,系統(tǒng)將Tier1層,也就是固態(tài)介質(zhì)層,分為兩個(gè)子層,一個(gè)是采用Raid10方式的且由SLC Flash構(gòu)成的子層,這個(gè)層采用無(wú)寫懲罰的Raid10冗余保護(hù)方式,而且采用壽命和性能最高的SLC規(guī)格的Flash介質(zhì),所以僅承載寫IO和針對(duì)新寫入數(shù)據(jù)的讀IO,基本不必關(guān)心壽命和性能問(wèn)題,所以又被稱為Write Intensive(WI)層,當(dāng)然,這一層的容量也不會(huì)很大;另一個(gè)是采用Raid5方式的且由MLC Flash構(gòu)成的子層,僅承載讀IO,所以Raid5的寫懲罰并不會(huì)導(dǎo)致讀性能下降,又被稱為Read Intensive(RI)層,這一層相對(duì)容量較大。如下圖所示為一種典型的固態(tài)+機(jī)械盤混合存儲(chǔ)配比方案。

 


 

 

那么,Dell流動(dòng)數(shù)據(jù)方案是如何實(shí)現(xiàn)讀寫分離的呢?其巧妙的利用了寫重定向快照技術(shù)(注:Dell Compellent系統(tǒng)里的快照被稱為“Replay”)。如下圖所示,類型一中的方式,屬于傳統(tǒng)分層方式,也就是白天統(tǒng)計(jì)訪問(wèn)頻率,傍晚或者深夜進(jìn)行排序和熱點(diǎn)判斷以及數(shù)據(jù)搬移,這種方式是目前多數(shù)廠商普遍的實(shí)現(xiàn)方式,沒(méi)有什么亮點(diǎn)。然而,Dell流動(dòng)數(shù)據(jù)方案除了支持這種傳統(tǒng)方式之外還支持另一種即圖中所示的“按需數(shù)據(jù)調(diào)度”分層方式。

 


 

 

這種比較奇特的方式可以實(shí)現(xiàn)讀寫分離,但是必須依賴于快照,也就是說(shuō),只有當(dāng)快照生成之后,這種方式才起作用,如果用戶沒(méi)有主動(dòng)做快照,那么系統(tǒng)也會(huì)后臺(tái)自動(dòng)做快照來(lái)支撐這種分層方式的執(zhí)行,冬瓜哥在此想為大家介紹一下這種方式的具體機(jī)理。

大家都知道寫重定向快照的底層原理(不了解的可以閱讀冬瓜哥的《大話存儲(chǔ)(終極版)》),快照生成之后,源數(shù)據(jù)塊只會(huì)被讀取,不會(huì)被原地覆蓋寫入,因?yàn)楦采w寫入的數(shù)據(jù)塊都會(huì)被重定向到新的空閑數(shù)據(jù)塊,在Dell流動(dòng)數(shù)據(jù)按需數(shù)據(jù)調(diào)度技術(shù)中,這些新覆蓋寫入的數(shù)據(jù)塊依然會(huì)被寫入到Raid10模式的Tier1 SSD中,也就是WI層,那么,尚存在于WI層的源數(shù)據(jù)塊后續(xù)只會(huì)被讀取(這類數(shù)據(jù)塊又被稱為“只讀活躍頁(yè)”),不會(huì)被原地覆蓋寫入,那么就沒(méi)有必要繼續(xù)在WI層中存放,可以將它們?cè)诤笈_(tái)全部轉(zhuǎn)移到Raid5模式的Tier1 SSD中也就是RI層存放,對(duì)于那些已經(jīng)被更改過(guò)一次的數(shù)據(jù)塊(新寫入數(shù)據(jù)塊被重定向,對(duì)應(yīng)的原有數(shù)據(jù)塊此時(shí)就被稱為“不再訪問(wèn)的歷史頁(yè)”),其永遠(yuǎn)不會(huì)被生產(chǎn)卷所訪問(wèn)到,那么就可以將這些數(shù)據(jù)塊直接遷移到最低性能層級(jí),也就是Tier3的機(jī)械盤中存儲(chǔ)。

如果系統(tǒng)內(nèi)當(dāng)前并沒(méi)有生成快照,或者所有快照已經(jīng)被用戶刪除,那么當(dāng)SLC的WI層級(jí)達(dá)到95%滿之后,系統(tǒng)會(huì)自動(dòng)觸發(fā)一個(gè)快照,目的是重新翻盤,將快照之后新寫入的塊寫到SLC,而之前的塊搬移到MLC層級(jí)中,已被覆寫的塊直接搬移到機(jī)械盤,后續(xù)如果再達(dá)到95%滿,就再做一次快照重新翻盤,利用這種方式,可保證SLC層級(jí)只接受寫入操作以及針對(duì)新寫入塊的讀操作,而MLC層級(jí)只接受讀操作,實(shí)現(xiàn)了讀寫分離,充分發(fā)揮了SLC和MLC各自的優(yōu)勢(shì)。戴爾建議每天至少生成一個(gè)Replay,可以安排在負(fù)載不高的時(shí)段,并根據(jù)數(shù)據(jù)寫入量來(lái)提前規(guī)劃SLC分層的容量。95%這個(gè)觸發(fā)機(jī)制只是最后一道防線。

另外,當(dāng)某個(gè)數(shù)據(jù)塊被搬移到RI層后,如果發(fā)生了針對(duì)該塊的寫入操作,那么,其被寫入之后(新塊寫到SLC層),該塊在MLC中的副本就不會(huì)再被生產(chǎn)卷訪問(wèn),系統(tǒng)會(huì)將其遷移到最低層級(jí)的機(jī)械盤從而空出MLC層的空間。另外,MLC中那些長(zhǎng)期未被讀到的數(shù)據(jù)塊,也會(huì)被系統(tǒng)遷移到磁盤層。

利用這種寫重定向快照技術(shù)和多個(gè)層級(jí)的介質(zhì),Dell Fluid Data解決方案實(shí)現(xiàn)了讀寫分離,讓寫總是寫到SLC,讀總是讀MLC,同時(shí)MLC中的數(shù)據(jù)再慢慢向下淘汰到機(jī)械盤,這種方式相比定期觸發(fā)數(shù)據(jù)搬移的傳統(tǒng)分層技術(shù)來(lái)講,更加具有實(shí)時(shí)性,在SLC層和MLC層之間的流動(dòng)性非常強(qiáng),能夠應(yīng)對(duì)突發(fā)的熱點(diǎn),更像是一種實(shí)時(shí)緩存;而在MLC和機(jī)械盤之間,流動(dòng)性較低,除了將快照中被新數(shù)據(jù)“覆蓋”的塊拷貝到機(jī)械盤之外,還定期根據(jù)長(zhǎng)期的冷熱度將MLC層中的塊搬移到機(jī)械盤,這又是傳統(tǒng)分層的思想。所以Dell Fluid Data分層解決方案是一個(gè)結(jié)合了緩存和分層各自優(yōu)點(diǎn)的,利用寫重定向快照技術(shù)充分發(fā)揮了SLC和MLC各自讀寫特長(zhǎng)的優(yōu)秀解決方案。

 


 

 

【方式6】透明緩存然而,自動(dòng)分層有個(gè)劣勢(shì),就是其識(shí)別的“熱點(diǎn)”必須是長(zhǎng)期熱點(diǎn),對(duì)于突發(fā)性短期熱點(diǎn),無(wú)能為力,因?yàn)槠浣y(tǒng)計(jì)周期一般是小時(shí)級(jí)別的,有些熱點(diǎn)恐怕幾分鐘就過(guò)去了。另外一個(gè)劣勢(shì),就是無(wú)法判斷出人為熱點(diǎn),比如5分鐘之后,管理員明確知道某個(gè)文件或者某個(gè)庫(kù)一定會(huì)招致很高的訪問(wèn)壓力,此時(shí),傳統(tǒng)的自動(dòng)分層就無(wú)能為力,因此冬瓜哥在之前的“可視化存儲(chǔ)智能解決方案”對(duì)應(yīng)的產(chǎn)品中,就加入了這種對(duì)人為熱點(diǎn)的支持,提供自動(dòng)和手動(dòng)以及混合模式,可以讓用戶靈活的決定將什么數(shù)據(jù)放在哪里,但是依然是對(duì)應(yīng)用透明的,只相當(dāng)于給存儲(chǔ)系統(tǒng)提供了準(zhǔn)確的提示信息而已。

此外,針對(duì)這種突發(fā)性實(shí)時(shí)熱點(diǎn),一個(gè)最典型的粒子就是VDI啟動(dòng)風(fēng)暴場(chǎng)景,這個(gè)突發(fā)熱點(diǎn)是分層沒(méi)法解決的,除非使用了鏈接克隆然后利用冬瓜哥在“可視化存儲(chǔ)智能解決方案”中所設(shè)計(jì)的類似技術(shù),將克隆主體數(shù)據(jù)手動(dòng)透明遷移到固態(tài)介質(zhì)上。

應(yīng)對(duì)這種突發(fā)熱點(diǎn),一種更合適的方式,就是固態(tài)介質(zhì)緩存。緩存比分層更加實(shí)時(shí),因?yàn)樗械淖x寫數(shù)據(jù)先從內(nèi)存進(jìn)入SSD緩存,再到機(jī)械盤,所有數(shù)據(jù)都有進(jìn)入緩存的機(jī)會(huì),利用LRU及其各種變種算法,能將那些短時(shí)間內(nèi)訪問(wèn)頻繁的數(shù)據(jù)留在SSD中。所以,應(yīng)對(duì)VDI啟動(dòng)風(fēng)暴這種場(chǎng)景,使用緩存方式既能保證透明又可以獲得不錯(cuò)的性能。

針對(duì)緩存解決方案,Dell的Fluid Cache for SAN 解決方案將固態(tài)介質(zhì)緩存直接放置在了主機(jī)端,利用更靠近CPU的PCIE閃存卡作為緩存介質(zhì),并且多臺(tái)服務(wù)器上的固態(tài)介質(zhì)還可以形成一個(gè)全局統(tǒng)一的緩存池。整體的拓?fù)錁?gòu)成如下圖所示:

 


 

 

一個(gè)緩存域最多由9臺(tái)服務(wù)器組成,其中至少要包含3臺(tái)緩存節(jié)點(diǎn)(插有PCIE閃存卡),其余6臺(tái)節(jié)點(diǎn)可以是客戶端節(jié)點(diǎn)(也可以是緩存節(jié)點(diǎn)),客戶端節(jié)點(diǎn)通過(guò)專用的Client向緩存節(jié)點(diǎn)直接讀取緩存數(shù)據(jù),當(dāng)然,緩存節(jié)點(diǎn)自身的應(yīng)用程序也可以直接讀取本地或者其他緩存節(jié)點(diǎn)的數(shù)據(jù)。讀寫緩存走的是萬(wàn)兆或者40GE網(wǎng)絡(luò),來(lái)保證低時(shí)延,同時(shí)這個(gè)網(wǎng)絡(luò)也承載緩存鏡像流量,每個(gè)節(jié)點(diǎn)的寫緩存,會(huì)通過(guò)RDMA鏡像到其他緩存節(jié)點(diǎn)一份,當(dāng)寫緩存被同步到后端的Compellent存儲(chǔ)系統(tǒng)之后,才會(huì)作廢對(duì)端的鏡像副本,以此來(lái)保障一個(gè)節(jié)點(diǎn)宕機(jī)之后的系統(tǒng)可用性。某個(gè)卷的數(shù)據(jù)塊可以被配置為僅緩存在本機(jī)的PCIE閃存介質(zhì)中,也可以均衡緩存到所有節(jié)點(diǎn)(默認(rèn)配置)。

緩存模式的這種強(qiáng)實(shí)時(shí)性,使得其非常適合于實(shí)時(shí)加速,比如OLTP場(chǎng)景,下圖所示為由一個(gè)8節(jié)點(diǎn)緩存集群的性能加速效果,使得可并發(fā)的用戶數(shù)量達(dá)到了6倍,同時(shí)平均響應(yīng)時(shí)間降低了99.3%。

 


 

責(zé)任編輯:小明 來(lái)源: 戴爾企業(yè)級(jí)解決方案
相關(guān)推薦

2018-01-19 08:54:18

存儲(chǔ)系統(tǒng)SILT

2011-09-06 13:58:28

MTK系統(tǒng)

2016-05-16 14:32:30

任意云戴爾微軟

2018-06-08 08:46:14

RaftPaxos系統(tǒng)

2018-05-31 08:39:18

單機(jī)存儲(chǔ)系統(tǒng)

2018-09-29 14:08:04

存儲(chǔ)系統(tǒng)分布式

2021-06-18 06:00:31

存儲(chǔ)系統(tǒng)

2018-01-31 08:44:20

數(shù)據(jù)存儲(chǔ)存儲(chǔ)設(shè)備存儲(chǔ)系統(tǒng)

2015-08-26 13:32:44

戴爾云計(jì)算

2017-07-04 10:58:57

SAN存儲(chǔ)網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)架構(gòu)

2017-11-08 11:22:46

存儲(chǔ)趨勢(shì)系統(tǒng)

2014-02-17 17:24:42

博科固態(tài)存儲(chǔ)

2017-07-24 16:53:06

戴爾超融合架構(gòu)

2020-03-04 17:37:09

存儲(chǔ)系統(tǒng)硬件層

2017-07-10 09:02:24

NAS存儲(chǔ)云存儲(chǔ)

2009-01-11 22:38:37

SSD固態(tài)盤綠色

2016-05-16 15:23:54

任意云戴爾微軟

2018-08-08 10:32:55

分布式集群存儲(chǔ)

2015-12-08 11:08:00

戴爾云計(jì)算

2016-05-24 13:36:56

任意云戴爾微軟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)