在過去十幾年中,CPU的性能提升了100倍以上,而傳統的HDD硬盤(Hard Disk Drive)才提升了1.5倍不到,這種不均衡的計算存儲技術發展,極大地影響了IT系統整體性能的提升。直到固態硬盤SSD(Solid State Drive)被髮明出來,其性能有了顛覆性的提升,才解決了存儲的瓶頸問題。然而,SSD作為一項新技術,仍然存在一些固有的缺陷,如何充分發揮SSD的優勢,是一個值得研究的方向。下面從性能、持久性、使用成本等方面對此話題做一些探討。
首先,我們來看看傳統HDD的使用方式:協議一般都採用SAS、SATA接口;Linux的IO調度需要用電梯算法來對IO進行重排以優化磁頭的路徑;企業級存儲通常使用Raid卡做數據保護。
在接口協議方面,隨着SSD的發明,NVMe協議應運而生。相較於SAS、SATA的單隊列機制,NVMe最多可以有65535個隊列,並且直接採用PCIe接口,消除了鏈路和協議瓶頸。
在控制卡生態方面,各大廠商也紛紛推出自己的NVMe控制卡芯片,有PMC(現屬於Microchip)、LSI、Marvel、Intel、慧榮以及國內的得瑞等,技術也已經非常成熟。
在Linux 驅動和IO協議棧方面,也做了相應的優化,如下圖所示,NVMe驅動可以直接繞過那些傳統的、專為HDD設計的調度層,大大縮短了處理路徑。
到目前為止,為了充分發揮SSD的性能,上面提到的三個傳統HDD的問題中前兩個已經得到了解決,然而在企業級市場上,基於NVMe的Raid始終沒有太好的方案。傳統企業最廣泛使用的Raid5/Raid6數據保護機制(N+1, N+2),通常是把數據條帶化分片,然後計算出冗餘的Parity Code(奇偶校驗碼),將數據存放到多塊硬盤,寫入新數據通常是一種“讀改寫”的機制。這種機制本身就成為了性能瓶頸,並且“讀改寫”對SSD的使用壽命有很大的損耗。另外,因為NVMe協議把控制卡放到了NVMe盤的內部,IO都由NVMe盤內部的DMA模塊來完成,這就給基於NVMe的Raid卡設計帶來了更大的困難。目前市場上這類Raid控制卡可用方案也很少,並且性能上也無法發揮出NVMe的優勢,因此沒能被廣泛使用。
基於目前這種狀況,很多企業級存儲方案仍然在使用SAS/SATA的SSD加傳統的Raid卡,這種方式又會出現前面已經解決的兩個問題,SSD的性能得不到充分發揮。
然而,這樣的情況也在發生改變,由Lightbits Labs發明的NVMe over TCP(NVMe/TCP)存儲集羣解決方案就對這個問題做了很好的處理。該解決方案通過自主研發的一塊數據加速卡,採用Erasure Code(糾刪碼)機制可以做到超過1M IOPS的隨機寫性能,並且可以避免“讀改寫”帶來的使用壽命損耗。另外,Lightbits提出了Elastic Raid機制,該機制提供彈性的N+1保護(類似於Raid5),相較於傳統的Raid5需要熱備盤或者需要及時替換損壞盤,該機制在一塊硬盤發生損壞之後能自動平衡形成新的保護。比如一個節點內原先有10塊盤,採用9+1的保護,當某塊盤損壞後,系統會自動切換成8+1的保護狀態,並且把原先的數據再平衡到新的保護狀態,從而在可維護和數據安全性方面實現了大幅提升。此外,該數據加速卡還能做到100Gb的線速壓縮,顯著提高了可用容量,進而能大幅降低系統使用成本。
目前使用最廣泛的SSD是基於NAND顆粒的,而NAND一個與生俱來的問題就是持久性(endurance)。並且隨着技術的發展,NAND的密度也越來越高,最新一代已經到了QLC(4bits per Cell),同時每個Cell可被擦寫的次數也在減少(1K P/E Cycles)。發展趨勢如下圖所示。
另外,對NAND的使用有一個特點,就是可擦的最小單位比較大,如下圖所示,寫的時候可以4KB為單位往裏面寫,但是擦的時候(比如修改原有數據)卻只能以256KB為顆粒來操作(不同的SSD大小不一樣,但原理都一樣)。這就容易形成空洞而觸發SSD的GC(Garbage collection)數據搬移,進而導致所謂的寫放大現象,對盤的持久性會產生進一步影響。
在企業級存儲中,通常使用Raid5/6這種“讀改寫”的機制,會對盤的寫操作數量進一步放大,一般使用場景下大約是直接寫入方式的2倍損耗。此外,很多Raid5還會啓動Journal機制,對盤的使用壽命會進一步損耗。
最後,對於最新的QLC來説,使用中還需要考慮另一個因素——Indirection Unit (IU)。比如有些QLC盤使用 16KB的IU,如果要寫入較小的IO,也會觸發內部“讀改寫”,對使用壽命又多一重損傷。
由此可以看出,基於NAND的SSD還是比較嬌弱的。不過,只要能正確地使用,還是可以避免這些問題。比如以某常用的QLC盤為例,通過如下兩組關於性能和持久性相關的參數可以看出,在持久性上順序寫是隨機寫的5倍,而性能更是26倍:
順序寫 0.9 DWPD, 隨機4K寫0.18 DWPD;
順序寫 1600 MB/s, 隨機4K寫15K IOPS(60MB/s)。
通過上面的分析發現,能把盤使用在一個最佳的工作狀態至關重要。好消息是目前一些先進的解決方案,比如Lightbits的全NVMe集羣存儲解決方案就可以解決這個問題。該方案通過把隨機IO變成順序IO的方式,以及獨有的Elastic Raid技術避免了Raid“讀改寫”的弊端,從而能大幅提高盤的持久性及隨機性能。
由於SSD相對於HDD而言是一項新技術,再加上產業的生產規模和需求量的矛盾,目前價格相比HDD仍然偏高。那麼如何降低SSD使用成本就變得非常重要。
降低使用成本最重要的一環就是要把SSD充分使用起來,無論是容量還是性能。不過就目前而言,大多數NVMe盤都是直接插在應用服務器上使用,而這種方式非常容易造成大量的容量和性能浪費,因為只有這台服務器上的應用才能使用它。根據調研發現,使用這種DAS(Direct Attached Storage,直連式存儲)方式,SSD的利用率大概在15%-25%。
針對這個問題比較好的解決方法是近幾年來市場上被廣泛接受的“解耦合”架構。解耦合之後,把所有的NVMe盤變成一個大的存儲資源池,應用服務器用多少就拿多少,只要控制總數量夠用就行,可以非常容易地將利用率推到80%。另外,因為資源集中起來,可以有更多的手段和方法用於降低成本,比如壓縮。例如,平均應用數據壓縮比在2:1,就相當於多了一倍的可用容量,也相當於每GB價格降了一半。當然壓縮本身也會帶來一些問題,比如壓縮本身比較費CPU,另外很多存儲解決方案在開啓壓縮之後性能就會大大降低。
針對壓縮方面的問題,Lightbits的NVMe/TCP集羣存儲解決方案可以通過存儲加速卡來予以解決。該卡可以做到100Gb的線速壓縮能力,並且不消耗CPU,不增加延遲。利用這樣的解決方案,壓縮功能幾乎沒有額外的成本。此外,正如前面在介紹提高持久性時所提到的,Lightbits解決方案能提高使用壽命並支持使用QLC盤,從整個使用週期來看,在使用成本方面也會有非常大的降低。總的來説,通過解耦合提高使用效率,壓縮提高可用容量,優化提高使用壽命或啓用QLC,經過這樣的重重提升,SSD的使用成本可以得到極大的控制。
以上從性能、持久性、使用成本三個方面分析瞭如何用好SSD盤,可以看到要用好NVMe SSD盤還是不容易的。因此,對一般用户而言,選擇一個好的存儲解決方案就至關重要。為此,以色列創新公司Lightbits以充分發揮NVMe盤的最大價值為使命,發明了NVMe/TCP協議,並推出了新一代的全NVMe集羣存儲解決方案,可以幫助使用者輕鬆地將SSD盤用好。