當談PCIe SSD的高效能,我們在談什麼(上)

memblaze_2011發表於2019-01-29

效能一直是PCIe SSD的一大賣點,但是不同發展階段的PCIe SSD對於效能的追求也各有不同。單純的高效能峰值早已不是PCIe SSD的唯一追求。那麼當我們在談PCIe SSD的高效能,我們在談什麼?

PCIe SSD的發展階段一:效能峰值

PCIe SSD最開始追求極致的效能,這個時期從評測到宣講的各種場合,都在談順序讀、順序寫、隨機讀、隨機寫等負載場景下,PCIe SSD的效能到底能做到多高。

PCIe SSD的效能追求階段二:I/O低延遲

隨著NVMe標準的PCIe SSD普及和發展,當前NVMe SSD可以實現6GB/s讀頻寬和接近4GB/s寫頻寬,IOPS可以達到100萬,這在SATA SSD的時代都是完全不能想象的數字。但是實際上,很少有客戶把NVMe SSD的效能能夠利用到極致,這與實際應用的負載模型及壓力大小等因素有關,這就帶來了PCIe SSD第二個階段的效能追求——低延遲。

不管是什麼樣的I/O模型,不管是多小的I/O請求,每一個I/O都必須從硬碟上得到一個最及時的響應,這意味著不論什麼應用場景,請求都能夠得到最快的響應,這樣才能夠體現出整個系統的低延遲。

那麼NVMe SSD為保障極低的延遲做了什麼?從系統整體的I/O路徑來看,NVMe比原來的SATA 多了很多優勢。SATA SSD的指令需要從CPU和核心走到南橋,再通過低速(6Gb/s)、低併發(single bit,沒有多Lane併發)、高冗餘(8Bit/10Bit編碼)的SATA匯流排走到SSD上,再加上SATA 協議層的冗長低效,導致它天生延時就非常高。

而NVMe通過PCIe直接連線到CPU內部,高速(8Gb/s)、高併發(x4或x8 Lane併發)、低冗餘(128Bit/130Bit編碼)、協議優化互動設計都使得延時大幅降低。當前主流PCIe SSD寫延時(4K)都已經降到20微秒以下,Memblaze自研的產品可以做到10微秒左右。這一速度體現在大量應用中,就是順序寫、小頻寬、小壓力的寫等負載都可以得到快速響應。

寫延遲時間是從Host寫到SSD上記憶體的時間,企業級SSD都有完善的掉電保護技術保障SSD的資料可以在系統異常掉電後寫到Flash上,資料始終是安全的。消費類SSD沒有掉電保護,如果選擇開啟盤上的Cache,就需要考慮系統異常掉電時資料丟失風險。好在主流OS都提供了一定掉電處理機制,不至於讓檔案系統徹底崩潰。

在讀延時方面,NVMe SSD沒有寫延時那麼有優勢,因為寫延時只要把資料落在記憶體就結束了,但是讀請求需要獲取Flash上的資料,整個過程的最大延遲也在這個環節上。

現在主流的3D TLC Flash已經比2D NAND快很多,2D時代MLC還是接近100微秒的讀延時,而現在3D NAND有提供各種技術手段把延遲降到50-60微秒的水平。更有極致的產品,例如3D Xpoint和Z-NAND,更加進一步地把Flash上的讀延時推進到了10微秒左右的級別。新儲存介質使得NVMe SSD延時表現越來越好,對於使用者來說效能感受也就越來越好。

NVMe SSD的效能關注點已從延遲到了QoS

從階段二的效能追求轉向延遲之後,我們發現隨著硬碟越來越大,一塊硬碟4TB、8TB。一個使用者用不到這麼大的容量,就會出現兩個或多個使用者共用一塊盤的場景。這時候SSD會面臨一些新的挑戰,因為當多個應用同時在使用一塊硬碟的時候,會對對方有一些干擾。

這樣的干擾可能不會體現在IOPS,SSD整體性整體I/O效能還是挺高的,但是從每一個使用者的角度看來,都會認為感受到旁邊的應用(Noisy Neighbors)影響了自己的正常響應。


在這裡插入圖片描述
多個應用共用一塊SSD造成延遲提高(Source: facebook)

**QoS是NVMe SSD發展到第三個階段要解決的關鍵問題。**在應用共享SSD的時候,應用之間干擾造成延時的巨幅升高。比如其中一個應用程式在用的時候不停在寫,這個寫的過程就會對另外一個以讀為主的應用造成巨大的影響,因為畢竟大家訪問的硬碟只有一個。

現在有很多方案嘗試解決這個問題,比如OpenChannel,它希望通過對Flash的直接管理能夠進行QoS控制;而為PCIe SSD而生的NVMe 協議,在保障QoS方面也有自己的演進路線。NVMe 1.4中,會有I/O Determinism(下文簡稱IOD)規範的加入,其中文詞義就是I/O的確定性。

IOD的實現手段,是把SSD 分成不同的Set,或者簡單理解為邏輯磁碟。具體的Set分配方式,可以看這裡的例子:


在這裡插入圖片描述
通過NVM Sets機制對裝置進行物理隔離

比如說一個固態硬碟有4通道、8通道、10通道,每個通道上還會有4個、8個、10個LUN,這些LUN可以分別歸屬到某個Set裡,以Set為單位進行管理。同時通過NVMe協議,SSD的LBA空間可以劃分成不同的Namespace,可以在新的IOD規範中配置每一個Namespace擁有的Set。這樣當使用者訪問其中一個Namespace,這部分空間是必須要落在一個確定的Flash LUN上面,也就是一個確定的Set上面。

這樣的好處很明顯,不像磁碟只有一個磁頭,碟片在轉的時候無論何時只有一個通道能夠出資料,而Flash非常不一樣,SSD的每片Flash完全可以獨立工作,這就推匯出:

獨立的Flash →獨立的Set →獨立的Namespace→獨立的應用


在這裡插入圖片描述
NVM Set

其中在NVMe IOD的設定裡面,除了剛才說的Set,還有Endurance Group的概念(如下圖),它可以讓SSD更精準的進行磨損均衡操作。如果兩個以上NVM Set的Endurance Group ID相同,如圖示Set A和Set B(同屬Endurance Group Y),磨損均衡可以在NVM Set間進行。如果只有一個NVM Set和Endurance Group ID關聯,磨損均衡範圍不能跨越該Set,但主機端可以選擇跨Set進行壽命管理。

在這裡插入圖片描述
Endurance Group保證NVM Set間磨損均衡

本質上Endurance Group帶來的變化是允許Namespace可以跨多個Set。為什麼要跨多個Set?由於Set把Flash資源進行了隔離,每個Set只擁有一部分的Flash頻寬。如果我們再把Set聚合在一起,Flash頻寬效能也能重新聚合在一起。這樣一來,使用者在面對一個有8個Set的SSD時候,可以依據自身頻寬等需求選擇Set的數量。頻寬需求高的應用,就多分配幾個Set給它的Namespace,這樣效能隨著Set數量進行線性增長,靈活配置。

基於NVM Set的IOD技術使得NVMe SSD在多個應用共用一塊SSD時,擁有更好的QoS表現,在下篇文章中,我們將通過兩個驗證試驗對IOD的效果進行詳細解讀。

本文中提到的名稱空間等技術可以在本部落格之前的文章中找到。

相關文章