當談PCIe SSD的高效能,我們在談什麼(上)
效能一直是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的效果進行詳細解讀。
本文中提到的名稱空間等技術可以在本部落格之前的文章中找到。
相關文章
- 當談PCIe SSD的高效能,我們在談什麼(下)
- 當我們在談零信任時,我們談的是什麼?
- 當我們談論MOD時,我們在談論什麼?
- 當我們在談論極簡時,我們在談論什麼
- 當我們在談論HTTP快取時我們在談論什麼HTTP快取
- 當我們談 Java 併發的時候,你們在談什麼?Java
- 當我們談優化時,我們談些什麼優化
- 當我們談論格鬥遊戲時,我們在談論什麼遊戲
- 當我們談論Spring的時候到底在談什麼Spring
- 當我們在談論建構函式注入的時候我們在談論什麼函式
- 當我們在談論VR敘事的時候,我們究竟在談論什麼?VR
- 當我們談微服務,我們在談什麼 (3) — 如何保障微服務的穩定性微服務
- 當我們在談論高併發的時候究竟在談什麼?
- 當我們談論CloudTable時究竟在談論什麼?Cloud
- 當我們談論Promise時,我們說些什麼Promise
- 當我談跑酷遊戲時,我在談些什麼遊戲
- 當我談 HTTP 時,我談些什麼?HTTP
- 當我們談論Virtual DOM時,我們在說什麼——etch原始碼解讀原始碼
- 當我們談深度學習時,我們用它落地了什麼?深度學習
- 當我談自律的時候,我會談什麼(一)
- HMS Core Insights第三期直播預告—— 當我們在談論App的時候,我們還可以談論什麼?APP
- HMS Core Insights第三期直播回顧 – 當我們在談論App的時候,我們還可以談論什麼?APP
- 我們究竟在怕什麼?——談談恐怖遊戲的元素堆砌遊戲
- 今天我們來談談【畫素流送】到底是什麼?!
- 當我們聊kubernetes operator時,我們在聊些什麼
- 淺談入行Qt桌面端開發程式設計師-從畢業到上崗(1):當我們說到桌面端開發時,我們在談論什麼?QT程式設計師
- 85後來談談我們怎麼養老?
- 當我們在討論遊戲社群時,我們在討論什麼?遊戲
- 當我們在聊 RN 時,我們在聊什麼 | 技術點評
- 當小遊戲開始成為新的風口,讓我們從零到一的談談(上)遊戲
- 當我們談論版權保護的時候
- 當我們說外掛系統的時候,我們在說什麼
- 當我們談深度學習時,我們用它落地了什麼?阿里雲內容安全功能全新升級深度學習阿里
- 朱峰談概念設計(二):我們設計什麼
- 當提到“事件驅動”時,我們在說什麼?事件
- 當我們說開放世界的時候,我們到底在說些什麼?
- 當我們討論TCP的連線運輸管理時,我們在說什麼TCP
- 是時候談談JavaScript物件導向了!(我們什麼時候更需要它)JavaScript物件