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