https://blog.51cto.com/alanwu/1766945
一直對閃存存儲關注的朋友對NVMe SSD一定非常熟悉,NVMe SSD是現如今性能最好的存儲盤。這種高性能盤在互聯網領域已經得到了大規模應用,但是在行業用戶還沒有得以大范圍普及。很多人對NVMe SSD也許還比較陌生,不知道如何應用該類型盤,並且給自己的業務帶來價值。和SATA/SAS SSD以及HDD相比,她到底又有何神秘之處呢?在此我想對NVMe SSD做一些介紹。
提到NVMe SSD,不得不提Fusion IO率先研制的PCIe SSD,10年前Fusion IO率先采用PCIe接口的方式研制了全球首款高性能SSD。該SSD采用服務器內置插卡的形式,和SATA/SAS等接口相比,PCIe具有極高的數據傳輸性能,解決了基於NAND Flash數據存儲的接口瓶頸問題。在采用PCIe做SSD接口的過程中,數據傳輸采用了多隊列的方式,從而可以實現單盤並發數據傳輸的目的,提高了數據接口效率。在操作系統內部,原生支持SAS/SATA接口,原生帶有SATA/SAS盤的驅動程序。但是,對於這種PCIe SSD,操作系統是沒有原生驅動的,並且在軟件棧上面也不采用傳統的SCSI軟件層,因此,這類PCIe SSD需要廠商自己提供特殊的驅動程序。PCIe SSD在歷史上有兩種產品類型,一種是Host Based SSD;另一種是Device Based SSD。這兩種盤從用戶角度來看,差別是Host Based SSD會占用主機端資源,SSD內部的數據管理軟件都是運行在主機端。這種盤的優點在於盤本身的功耗比較低,盤上的硬件資源也比較少;缺點是占用系統資源,尤其是內存資源。另一種產品類型是Device Based PCIe SSD。這類產品的思路很簡單,就是要將運行在主機端的NAND Flash存儲管理軟件卸載到SSD中去,這樣可以減少主機端的資源占用率。這種盤的優點很明顯,缺點是對SSD內部的控制器有更高要求,通常功耗比較大,並且SSD上需要更多的硬件資源,例如內存。在PCIe SSD的市場上,FusionIO、國內的寶存以及Memblaze都提供了這樣的產品。不管是Device Based還是Host Based PCIe SSD,都需要在主機端安裝廠商自己提供的驅動程序,才可以使用該類型盤。這就帶來了一個很大的問題,不同廠商提供的盤相互不兼容,需要不同的驅動軟件,因此,一個偉大的NVMe標准產生了。
NVMe標准可以簡單理解用來標准化PCIe SSD,使得不同廠商符合標准的盤都可以采用相同的驅動程序。需要注意的一點是,NVMe SSD是原來Device Based PCIe SSD的延伸。NVMe標准定義了SSD的訪問命令及操作方式,並且定義了邏輯設備接口標准;和SATA體系類比,NVMe標准替代了SATA體系中的AHCI邏輯接口以及ATA/SCSI命令規范。在一開始的時候,NVMe標准只是針對PCIe這種物理傳輸接口定義標准,隨着該標准的進一步演進,物理接口不再局限於PCIe,將更多的Fabric引入到了NVMe體系架構中來,例如RDMA以太網。該類標准為NVMe家族中的NVMe over Fabric。從這一點可以看出NVMe SSD是PCIe SSD的演進,PCIe SSD采用私有協議;NVMe SSD采用標准協議。如今,市場上主流采用PCIe接口的SSD基本都符合NVMe標准,例如Intel、Samsung以及Memblaze的產品都可以直接采用操作系統中原生的驅動程序。
NVMe標准是SSD固件研發工程師、驅動研發工程以及SSD控制器芯片設計者需要關心的協議標准。這里還有一個問題需要解決,硬件工程師在設計SSD的時候,需要采用什么樣的物理接口標准呢?如果直接采用傳統插入服務器內部的PCIe接口,可以直接參考PCIe接口規范,除此之外是否有更好的選擇呢?在物理接口這塊目前有M.2和U.2兩種接口標准。M.2主要面向消費級應用;U.2主要面向企業級應用。M.2接口是一種比較小的PCIe接口,在物理上兼容SATA;U.2是一種和傳統SATA/SAS外觀上保持一致的接口,兼容SATA/SAS和PCIe。有了這種物理接口標准之后,硬件工程師也有章可循了。從整個數據鏈路來看,從驅動程序、硬件接口、控制器邏輯接口到固件程序的命令處理方式都可以采用標准化的處理方式了。至此,我們理解了NVMe可以看成是SCSI命令和AHCI一樣的東西;U.2/M.2是一種硬件接口的標准,將SATA/SAS/PCIe進行了統一;簡單來講,NVMe SSD就是一種標准化的PCIe接口SSD。
NVMe SSD到底有什么優勢呢?其最大的優勢就在於性能。NVMe SSD的讀性能基本在3GB/s、寫性能可以達到2GB/s。當然不同容量的SSD會存在性能上的差異。和普通磁盤相比,NVMe SSD有很高性能方面的提升。我們知道一塊15000轉的SAS HDD,其讀寫性能基本在150MB/s~200MB/s之間,NVMe SSD性能提升了幾十倍。除了帶寬方面性能有所提升之外,NVMe SSD最大的好處是IOPS的提升。一個硬盤的IOPS基本在200左右,而對於一個普通的NVMe SSD,其IOPS可以達到700,000以上,也就是提升了3500倍。這是磁盤和半導體介質之間的本質差別。也正因為這種性能上的巨大飛躍,很多互聯網應用才會對NVMe SSD有如此巨大的需求。NVMe SSD可以解決互聯網事務型應用方面的IO吞吐痛點問題。
除了在性能上NVMe SSD有如此巨大的優勢,另外一個值得一提的是存儲容量。目前HDD普遍使用的單盤容量是4TB,最大可以做到10TB。2.5寸NVMe SSD目前的單盤容量可以普遍做到3.2TB,單卡可以做到6.4TB。今年NVMe SSD可以做到10TB以上,並且每年的容量都會爆發式增長,這主要得益於3D NAND Flash的廣泛應用。可以預計,若干年之后,NVMe SSD的單盤容量可以達到幾十TB以上,甚至短短幾年內可以超過100TB。這種容量上的增速是HDD所無法超越的,因此,NVMe SSD的容量密度將會遠遠高於HDD。
NVMe SSD已經在服務器端得到了廣泛支持,很多服務器廠商已經開始標配NVMe SSD的槽位。一個1U的服務器可以支持10塊NVMe SSD;一個2U的服務器目前可以最多支持48盤位的SSD;通過PCIe擴展的方式,一台服務器還可以擴展連接NVMe 的JBOF。所以,NVMe的硬件生態也在慢慢成熟。NVMe從標准的發展,SSD盤的發展,服務器的支持,操作系統的支持,慢慢的存儲軟件也開始對NVMe進行全方位支持。一個和SATA/SAS相互並存的NVMe高性能存儲展現在了大家面前,未來一定會成為存儲技術的主流。