因為NVMe的出現,硬盤的性能得到了極大的提升。這個極大是多少呢?讀帶寬從500MB/s提高到了3200MB/s,寫帶寬從400MB/s提高到了1200MB/s左右。而讀IOPS則達到了50萬,甚至更高。也就是說,現在一塊基于NVMe的SSD硬盤的性能比一個企業級磁盤陣列還要好。
牛皮吹了這么多,那到底什么是NVMe呢?NVMe的全稱是Non-Volatile Memory Express,如果翻譯過來就是非易失性內存主機控制器接口規范。你可能還是一頭霧水,那我們上搜索引擎搜索一下這個關鍵詞,可能會得到如下圖片。
圖1 NVMe存儲
廢話說了半天,到底什么是NVMe呢?首先它是一種接口規范,其次它是用于存儲設備的接口規范。準確的說是目前最新的存儲設備通信協議。這個協議就好比SAS和SATA一樣,用于定義硬件接口和傳輸協議。
關于存儲的幾個概念
為了徹底搞清楚什么是NVMe,我們先理清楚幾個關于存儲的概念。
尺寸外形:也就是設備的形狀和大小,通常存儲設備的尺寸外形包括如下:
- 2.5寸或者3.5寸驅動器(在SFF標準中定義)
- M.2 和 PCI Express(PCIe)(在PCI-SIG標準中定義)
接口:也就是設備如何與計算機通信。常見的存儲設備接口包括:
- SATA接口,通常用于2.5寸和3.5寸硬盤,有時候一些M.2設備也會使用
- PCI Express(PCIe)接口, 用于M.2和PCIe設備
- SAS(串行SCSI)和FC(Fibre Channel)接口,僅用于服務器領域和數據中心
- PCIe接口要比SATA接口快的多,SATA3最大帶寬是6Gb/s,而基于4X PCIe的M.2接口最大可以達到32Gb/s。
協議:定義了如何在計算機與設備之間傳輸數據。常見的協議包括:
- 用于SATA接口的AHCI或者ATA協議,
- 用于PCIe接口的NVMe協議
到這里我們應該比較清晰了,NVMe是運行在某種接口上的通信協議,用于規范計算機與存儲設備的數據傳輸。上述設備尺寸、接口和協議通常是可以組合的。下面是常見的集中組合形式。
- 一個2.5寸SSD硬盤,基于SATA接口,通信協議是AHCI或者ATA。具體設備大概如圖2所示。
圖2 SATA接口的SSD
- 一個M.2的SSD, 基于PCIe接口,通信協議是NVMe。具體設備大概如圖3所示。
圖3 M.2的SSD
- 一個PCIe的SSD,基于PCIe接口,通信協議是NVMe。具體設備大概如圖4所示。
圖4 PCIe的SSD
這里只是給出了幾個具體的例子,便于大家理解接口、設備和協議的關系。具體來說,還有其它很多種組合形式,本文不在贅述。
為什么NVMe會這么快
上面我們介紹了什么是NVMe,下面本文將介紹一下為什么NVMe如此之快(注意:這里說的快是基于SSD設備的,如果是機械硬盤則不然)。由于SSD本身的物理特性,其數據的訪問已經非常快了,性能的瓶頸就是出在計算機與設備連接的接口和協議上面。
我們舉一個簡單的例子。比如我們有一個倉庫會不斷的生產出產品來,我們可以機械手將產品從倉庫拿到其它地方(如圖5所示)。對于SATA的SSD,類似于一個單臂的機器人,倉庫生產的很快,但機器人每次只能拿一個,搬移的速度就比較慢。
圖5 單臂機器人
然而對于基于NVMe的SSD呢?相當于這個機器人長了數百只手,這樣速度顯然就比前者快的多了。
圖6 多臂機器人
NVMe協議的原理也是如此,它本質是上建立了多個計算機與存儲設備的通路,這樣搬運數據的速度自然就提高了。在NVMe協議中,多個通路其實就是多個隊列,具體如圖7所示。在SATA中計算機與存儲設備只能有一個隊列,即使是多CPU情況下,所有請求只能經過這樣一個狹窄的道路。而NVMe協議可以最多有64K個隊列,每個CPU或者核心都可以有一個隊列,這樣并發程度大大提升,性能也自然更高了。
圖7 NVMe的多隊列