NVMe

https://www.linuxjournal.com/content/data-flash-part-i-evolution-disk-storage-and-introduction-nvme

NVMe(非易失性內存Express,或稱非易失性內存主機控制器接口規範)是一種用於訪問高速存儲介質的新協議,該協議是相對較新的,功能豐富的協議,它是專爲通過PCIe接口直接連接到CPU的非易失性存儲介質(NAND和持久性存儲器)而設計的。該協議建立在高速PCIe通道上。PCIe Gen 3.0鏈接可提供的傳輸速度是SATA接口的兩倍以上。
NVMe
NVMe協議利用到底層介質的並行,低延遲數據路徑,類似於高性能處理器體系結構。與傳統的SAS和SATA協議相比,這提供了顯着更高的性能和更低的延遲。

NVMe驅動器技術並不是突然出現的。通過不斷髮展,我們現在將性能卓越的SSD用作主要存儲層。
近年來,固態硬盤(SSD)的市場份額持續攀升,取代了許多行業的HDD。
IBM於1956年首次亮相HDD。到1960年代,HDD成爲通用計算機中占主導地位的輔助存儲設備。容量和性能是定義HDD的主要特徵。
IBM製造的第一個硬盤驅動器350 RAMAC與兩個中型冰箱一樣大,在50個磁盤的堆棧上總容量爲3.75MB。現代HDD技術已生產出容量高達16TB的磁盤驅動器,特別是結合了SMR技術和氦氣。密封的氦氣增加了驅動器的潛在速度,同時減少了阻力和湍流。由於密度不如空氣,因此還可以在2.5英寸和3.5英寸常規磁盤驅動器使用的相同空間中堆疊更多的磁盤。
磁盤驅動器的性能通常由將驅動器磁頭移動到特定磁道或圓柱體所需的時間以及請求的扇區在磁頭下移動所需的時間(即延遲)來計算。還以傳輸數據的速率來衡量性能。

作爲機械設備,HDD的不如內存快。許多移動組件增加了等待時間,並降低了訪問數據的整體速度(用於讀取和寫入操作)。
每個HDD的內部都有磁性磁盤,通常稱爲磁盤。這些拼盤是存儲信息的地方。HDD由一根主軸綁定並一致地旋轉,一個HDD將有一個以上的盤片並排放置,它們之間的空間最小。

與留聲機唱片的工作原理類似,唱片是雙面的,每個唱片的表面都有圓形的蝕刻,稱爲軌道。每個軌道由扇區組成。隨着靠近盤片邊緣,每個軌道上的扇區數都會增加。如今,您會發現一個扇區的物理大小爲512字節或4千字節(4096字節)。在編程中,扇區通常等同於磁盤塊。

磁盤旋轉的速度會影響信息的讀取速度。這定義爲磁盤的旋轉速率,以每分鐘轉數(RPM)進行測量。這就是爲什麼現代驅動器以7200 RPM(或每秒120轉)的速度運行的原因。較舊的驅動器以較低的速度旋轉。高端驅動器可能以更高的速度旋轉。此限製造成了瓶頸。

執行器臂位於盤片上方或下方。它在其表面上延伸和縮回。手臂末端是一個讀寫頭。它位於盤子表面上方的微觀距離處。隨着磁盤旋轉,磁頭可以訪問當前磁道上的信息(不移動)。但是,如果磁頭需要移動到下一個軌道或完全不同的軌道,則會增加讀取或寫入數據的時間。從程序員的角度來看,這稱爲磁盤搜索,這造成了第二個瓶頸。
現在,儘管通過更新的磁盤訪問協議(例如串行ATA(SATA)和串行連接的SCSI(SAS))和技術,HDD的性能一直在提高,但它仍然是CPU以及整個計算機系統的瓶頸。每個磁盤協議對最大吞吐量(每秒兆字節或千兆字節)都有自己的硬性限制。數據傳輸的方法也非常串行化。這在旋轉的磁盤上很好用,但不能很好地擴展到Flash技術。

計算機內存簡史

內存有多種形式,但是在非易失性內存(NVM)出現之前,計算世界首先以隨機存取內存(RAM)的形式引入易失性內存。RAM引入了在相同的時間內向/從存儲介質的任何位置寫入/讀取數據的功能。特定數據集通常是隨機的物理位置,並不影響操作完成的速度。通過緩存經常讀取的數據或暫存需要寫入的數據,這種類型的內存的使用掩蓋了從指數級較慢的HDD訪問數據的痛苦。
RAM技術中最著名的是動態隨機存取存儲器(DRAM)。硬盤驅動器十年後的1966年,它也從IBM實驗室出來。DRAM與CPU距離更近,並且也不必處理機械組件(即HDD),因此其運行速度非常快。即使在今天,許多數據存儲技術都在努力以DRAM的速度運行。但是這有一個缺點:一旦電容器驅動的集成電路(IC)斷電,數據就會隨之消失。

DRAM技術的另一缺點是其容量非常低,每GB的價格也很高。即使按照今天的標準,與較慢的HDD和SSD相比,DRAM還是太昂貴了。

DRAM首次亮相後不久,便出現了可擦可編程只讀存儲器(EPROM)。它是由英特爾發明的,於1971年左右問世。與易失性同類產品不同,EPROM內存在系統電源關閉後立即保留其數據。EPROM在其IC中使用晶體管代替電容器。這些晶體管即使在斷電後也能夠保持狀態。
顧名思義,EPROM屬於其自己的只讀存儲器(ROM)類。通常,數據是使用特殊的設備或工具預先編程到這些芯片中的,而在生產時,它的目的是唯一的:從高速讀取數據。這種設計的結果是,EPROM立即在嵌入式和BIOS應用程序中變得很流行,後者則存儲了特定於供應商的詳細信息和配置。

靠近CPU

顯而易見,將數據(存儲)移到CPU越近,訪問(和操作)數據的速度就越快。最接近CPU的內存是處理器的寄存器。處理器可用的寄存器數量因體系結構而異。該寄存器的目的是保存少量打算用於快速存儲的數據。毫無疑問,這些寄存器是訪問小尺寸數據的最快方法。

接下來,緊隨CPU的寄存器的是CPU緩存。這是內置在處理器模塊中的硬件高速緩存,CPU可以利用它來減少從主存儲器(DRAM)訪問數據的成本和時間。它是圍繞靜態隨機存取存儲器(SRAM)技術設計的,該技術也是一種易失性存儲器。像典型的高速緩存一樣,此CPU高速緩存的目的是存儲來自最頻繁使用的主內存位置的數據副本。在現代CPU架構上,存在多個不同的獨立緩存(並且其中一些緩存甚至被拆分了)。它們按照緩存級別的層次結構進行組織:級別1(L1),級別2(L2),級別3(L3),依此類推。處理器越大,緩存級別越多,級別越高,它可以存儲的內存就越多(即從KB到MB),其位置離主CPU越遠,但它也確實引入了延遲。

首次使用處理器中的高速緩存的記錄可以追溯到1969年,然後是IBM System/360 Model 85大型機。直到1980年代,更主流的微處理器纔開始合併自己的CPU緩存。部分原因是成本。就像今天一樣,(所有類型的)RAM非常昂貴。
因此,數據訪問模型是這樣的:離CPU越遠,延遲就越大。DRAM的位置比HDD位置更靠近CPU,但不及IC中設計的寄存器或高速緩存級別那麼近。

固態硬盤

當第一批商用SSD進入市場時,公司和個人都很快就採用了該技術。即使價格更高,與HDD相比,人們還是能夠證明其合理性。時間就是金錢,如果訪問驅動器可以節省時間,則可能會增加利潤。但不幸的是,隨着第一個基於NAND的商業化SSD的推出,該驅動器並沒有將數據存儲移到更靠近CPU的地方。這是因爲早期的供應商選擇採用現有的磁盤接口協議,例如SATA和SAS。該決定的確鼓勵了消費者的採用,但同樣它限制了整體吞吐量。
儘管SSD並沒有靠近CPU,但它的確實現了該技術的新里程碑-減少了跨存儲介質的尋道時間,從而大大減少了延遲。這是因爲驅動器是圍繞IC設計的,並且不包含可移動組件。
M-Systems於1995年推出了第一款無需電源(即電池)即可維持狀態的正式SSD。它們旨在替代軍事和航空航天應用關鍵任務中的HDD。到1999年,以傳統的3.5英寸存儲驅動器外形設計並提供了基於閃存的技術,並且一直以這種方式進行開發,直到2007年新成立的革命性初創公司Fusion-io(現已成爲Western Digital的一部分)決定改變傳統存儲驅動器的性能極限形式,並將該技術直接應用於PCI Express(PCIe)總線,這種方法消除了許多不必要的通信協議和子系統,設計也離CPU越來越近,併產生了明顯的性能改進。

後來,Fusion-io的產品啓發了其他內存和存儲公司,將一些類似的技術引入了雙列直插式內存模塊(DIMM)尺寸,該尺寸可直接插入支持的主板的傳統RAM插槽中。這些類型的模塊作爲不同的內存類別註冊到CPU,並保持某種程度的保護模式。除非通過專門設計的設備驅動程序或應用程序接口完成操作,否則主系統以及相應的操作系統都不會接觸這些存儲設備。

在這裏還值得注意的是,與DRAM性能相比,基於晶體管的NAND閃存技術仍然顯得蒼白。我說的是微秒延遲與DRAM的納秒延遲。即使採用DIMM尺寸,基於NAND的模塊的性能也不如DRAM模塊好。

NAND存儲器簡介

是什麼讓SSD比傳統的HDD更快?簡單的答案是,它是由芯片構建的,沒有移動組件。固態技術就是這種特性的標誌。

SSD不會將數據保存到旋轉磁盤上,而是將相同的數據保存到NAND閃存池中。NAND技術與DRAM中使用的晶體管設計(必須每秒刷新多次)不同,NAND即使在沒有電源的情況下也能夠保持其充電狀態,因此是非易失性的。

非易失性內存Express(NVMe)

Fusion-io構建了封閉的專有產品。僅這一事實就吸引了許多行業領導者共同定義新標準,以與先驅競爭,並將更多的PCIe連接的閃存推入數據中心。擁有行業第一規範NVMe在2011年宣佈推出後,迅速上升到SSD技術的最前沿。請記住,從歷史上看,SSD是基於SATA和SAS總線構建的。這些接口對於成熟的閃存技術工作得很好,但是在所有協議開銷和總線速度限制的情況下,這些驅動器很快就經歷自己的合理性能瓶頸(和限制)。如今,現代SAS驅動器以12Gbit / s的速度運行,而現代SATA驅動器以6Gbit / s的速度運行。這就是爲什麼該技術將重點轉移到PCIe的原因。隨着總線距離CPU越來越近,PCIe能夠以越來越高的速度運行,SSD似乎正好適合。使用PCIe 3.0,現代驅動器可以達到40Gbit / s的速度。對NVMe驅動器的支持已集成到Linux 3.3主線內核(2012年)中。
NVMe真正使操作系統的舊式存儲堆棧大放異彩的原因在於其更簡單,更快速的排隊機制。這些稱爲提交隊列(SQ)和完成隊列(CQ)。每個隊列都是固定大小的循環緩衝區,操作系統使用該緩衝區將一個或多個命令提交給NVMe控制器。這些隊列中的一個或多個也可以固定到特定的內核,這樣可以進行更多不間斷的操作。再見串行通訊。現在驅動器I/O已並行化。

NVMeoF

在SAS或SATA的世界中,有存儲區域網絡(SAN)。SAN是根據SCSI標準設計的。SAN(或任何其他存儲網絡)的主要目標是通過一條或多條路徑提供對一個或多個存儲卷的訪問,以訪問網絡中的一個或多個操作系統主機。如今,最常用的SAN基於iSCSI,即基於TCP / IP的SCSI。從技術上講,NVMe驅動器可以在SAN環境中進行配置,儘管協議開銷會引入延遲,這使其成爲不太理想的實現方式。2014年,NVMe Express委員會準備採用NVMeoF標準進行糾正。

NVMeoF的目標很簡單:啓用圍繞NVMe排隊體系結構構建的NVMe傳輸橋,並避免支持的NVMe命令(端到端)以外的任何協議轉換開銷。通過這種設計,網絡等待時間會明顯下降(小於200ns)。此設計依賴於PCIe交換機的使用。基於使用遠程直接內存訪問(RDMA)的現有以太網結構的第二種設計正在取得進展。
Linux內核引入了許多支持NVMeoF的新代碼。這些補丁是英特爾,三星和其他地方的辛勤工作的開發人員共同努力的一部分。內核中修補了三個主要組件,包括常規的NVMe Target Support框架。該框架使模塊設備可以使用NVMe協議從Linux內核中導出。依賴於此框架,現在支持NVMe環回設備以及基於Fabrics RDMA目標的NVMe。如果您還記得的話,這最後一部分是另外兩個常見的NVMeoF部署之一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章