淺析U.2介面NVMe SSD雙埠模式(上)——應用模式與設計實現
看這名就知道文章特別乾貨,雙埠對於SSD和資料中心來講著實是個重要特性,Memblaze工程師汪洋傾力打造了上下兩篇雙埠文章,從應用模型、設計實現到可靠性和效能測試,都介紹一遍。這篇是上篇,介紹了雙埠應用模式和設計實現。
雙資料路徑(或多路徑)對企業級應用並不陌生。原來,電腦都通過單一路徑連線到一個裝置。隨著時間的推移,這種實現模式逐漸暴露出了種種弊端。在單路徑場景中,如果從主機到驅動器本身的資料路徑受到破壞,則無法訪問資料,這為雙路徑(或多路徑)概念鋪平道路。
SCSI裝置是第一個使用兩個物理連線實現雙埠功能的裝置。隨著序列連線的SCSI(SAS)的出現,通過一個物理連線來實現雙埠連線成為可能。由於雙埠允許資料從兩個埠獨立傳輸,因此該技術可以為任何一條資料路徑提供容錯。雙埠很快成為流行的配置。
隨著NVMe SSD技術的飛速發展,雙埠技術在企業級儲存系統中的應用也成為必然,由於其在高效能高可靠性上的優勢,有著更為廣闊的前景及市場。
雙埠NVMe SSD支援單個主機記憶體在的兩條資料路徑,同時通過兩個控制器訪問相同的儲存裝置實現冗餘。在另一種常見的應用場景中,兩個主機系統也可以同時使用雙埠訪問同一儲存系統。如果在一條資料路徑丟失時發生系統故障或電源丟失,可用的資料路徑將繼續執行,對業務連續無影響,就好像沒有發生故障,對QoS的影響達到最小。
雙埠應用模型
根據雙埠應用的場景,可以分為雙活,主從,以及鏈路冗餘等模式。如下圖所示,
圖1 - 雙活模式
Server A 與server B分別通過PCIe switch連線同一塊NVMe SSD,兩者能夠同時訪問相同的儲存空間,互相做儲存資料的冗餘備份。當然整個系統可以有多塊PBlaze5,這要看伺服器的配置而定。
圖2 - 主從模式
Server A 與server B 分別通過PCIe switch 連線到多塊NVMe SSD,兩個server通過心跳線互為雙機熱備,在一條路徑失敗的情況下,可以保證服務不中斷。
圖3 - 鏈路冗餘模式
一個Server分別通過兩個PCIe switch連線到同一塊NVMe SSD,相當於對資料鏈路做了冗餘,在這種模型下,server可以看到2個x2的PCIe裝置,即2個NVMe裝置,通過作業系統本身的multiple path等技術使能鏈路冗餘。
雙埠設計實現
雙埠PBlaze5 PCIe NVMe SSD既可以應用於常規的server採用單埠模式,提供PCIe3.0 x4的頻寬,又可以接入雙埠伺服器自動適配成雙埠模式,每個控制器達到PCIe3.0 x2的頻寬。在雙埠模式下,兩個埠完全獨立,控制器提供兩組PCIe介面的埠暫存器,包括埠控制,埠狀態,時鐘狀態暫存器。由於儲存裝置是獨立供電的,每一個server完全獨立於另一個server實現上電或者下電,互不影響。
圖4 - 單埠與雙埠模式對比
另外,由於NVMe 協議支援multiple namespace,將multiple namespace擴充套件到雙埠NVMe SSD將會使企業級儲存系統更加靈活和多元化。
圖5 - multiple namespace下雙埠模式
Namespace在NVMe協議裡有詳細的定義,Multiple namespaces是指根據盤的邏輯地址劃分多個namespace空間,多個空間可以獨立的進行格式化等操作,與雙埠一樣也是是PBlaze5的重要特性。下圖是一個Linux中32個namespace的PBlaze5。(Multiple namespaces更多細節將由我們另一位工程師解讀,這裡不再贅述。)
這節就先寫到這,後續有一個多圖進階篇,介紹雙埠盤的可靠性測試,並展示雙埠模式下各種場景中的效能效果。好看的還在後面。
相關文章
- 淺析U.2介面NVMe SSD雙埠模式(下)——可靠性及效能測試模式
- 設計模式 | 介面卡模式及典型應用設計模式
- iOS 設計模式淺析 0 – 前言iOS設計模式
- 【設計模式】介面卡模式以及原始碼應用設計模式原始碼
- javascript設計模式與應用JavaScript設計模式
- Go 實現常用設計模式(四)介面卡模式Go設計模式
- 淺談設計模式及python實現設計模式Python
- 用Python實現設計模式——單例模式Python設計模式單例
- 用Python實現設計模式——工廠模式Python設計模式
- 淺析pplx庫的設計與實現。
- Go語言實現GoF設計模式:介面卡模式Go設計模式
- 設計模式學習-使用go實現介面卡模式設計模式Go
- PBlaze5 510/516低功耗雙埠U.2 SSD通過PCI-SIG實錄
- 《JavaScript設計模式與開發實踐》模式篇(14)—— 介面卡模式JavaScript設計模式
- 用Python實現設計模式——建造者模式和原型模式Python設計模式原型
- setXfermode 模式淺析模式
- Scala 與設計模式(五):Adapter 介面卡模式設計模式APT
- 設計模式 | 策略模式及典型應用設計模式
- 設計模式:介面卡模式設計模式
- PHP 設計模式之流介面模式PHP設計模式
- 設計模式-介面卡模式設計模式
- 設計模式----介面卡模式設計模式
- 【設計模式】介面卡模式設計模式
- 設計模式--介面卡模式/代理模式設計模式
- 淺談設計模式——單例模式設計模式單例
- 淺談設計模式——工廠模式設計模式
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- 設計模式 | 中介者模式及典型應用設計模式
- 設計模式 | 外觀模式及典型應用設計模式
- 設計模式 | 模板方法模式及典型應用設計模式
- 設計模式 | 組合模式及典型應用設計模式
- 設計模式 | 享元模式及典型應用設計模式
- JavaScript設計模式與實踐--代理模式JavaScript設計模式
- 設計模式學習筆記(八)介面卡模式介紹及其應用設計模式筆記
- Go 實現常用設計模式(九)模式Go設計模式
- 設計模式——命令模式實現撤銷設計模式
- Swift 中的設計模式 #3 外觀模式與介面卡模式Swift設計模式
- 重學 Java 設計模式:實戰介面卡模式Java設計模式