實錘,PBlaze5擁有multiple namespaces能力(上)

memblaze_2011發表於2018-05-21

NVMe協議在不斷髮展,PBlaze5的功能也越來越多,這裡介紹一個基礎又實用的功能,multiple namespaces。文章將分為上下兩篇,上篇主要介紹namespace的相關概念,而下篇則進一步解讀multiple namespaces的優勢以及在PBlaze5上的操作。


什麼是Namespace

簡單地說,namespace是對使用者空間的邏輯劃分,就是把使用者空間這塊大披薩劃分開,大家各吃各的。

那麼大披薩長什麼樣呢?劃成一片片兒披薩又什麼樣呢?我們知道,跟其他傳統的儲存裝置一樣,非易失性儲存器也是可以格式化為邏輯塊的,每個邏輯塊都有自己的地址,俗稱logical block address,簡稱LBA,我們就是通過LBA來吃披薩(讀寫IO)的。邏輯地址長相很普通,是從0,1,2….直到最大塊地址。

邏輯塊地址計算是有講究的,嚴格依據JEDEC218A裡面定義的邏輯塊與容量關係公式。比如4KiB一個邏輯塊的話, 1.6TB就需要2646 + 244188 * 1600 = 390703446個邏輯地址了,這些邏輯塊就組成了namespace。那麼一塊SSD是否可以劃分為多個namespace來供不同的應用場景使用呢?答案是肯定的。

什麼是Multiple Namespaces


早期,單一namespace

下圖是一個NVM subsystem的典型結構圖,它包含了一個單一NVM Express controller以及一個單一的PCI Express port,也就是我們說的單埠。然後這個controller只支援單一的namespace,即圖中的NS A,它繫結它唯一的NSID,1。這個NS A包含了全部的邏輯塊,從系統看長這樣:,nvme0代表第一個controller,n1代表namespace 1。host可以訪問這個namespace就意味著可以訪問全部的邏輯塊。

1單一namespace在系統中

現在,PBlaze5Multiple namespaces

下圖是一個Multiplenamespaces NVM subsystem的典型結構圖,它包含了一個單一NVM Express controller以及一個單一的PCI Express port,也就是我們說的單埠。然後這個controller支援兩個namespace,即圖中的NS A和NS B,它們分別繫結了他們唯一的NSID,圖中是NSID 1和NSID 2,在Multiple namespaces的世界裡,controller就是通過NSID來引用特定的namespace的了。

在PBlaze5系列產品中,可以將邏輯塊按需劃分為最多32個namespace,即所謂multiple namespaces,每個namespace擁有獨立邏輯地址,各自獨立格式化和訪問。

需要指出的是,NVMe協議並沒有規定單盤最高的namespace數,各家SSD產品的規範也不盡相同,這一點有機會在產品對比測試文章中再詳談,根據Memblaze的設計以及來自客戶需求的反饋,PBlaze5目前支援32namespace,這一點是完全按照協議實現的。

Multiple namespaces NVM subsystem從系統看長下面這樣,比如/dev/nvme0n20,表示第一個controller的namespace 20。

2 multiple namespace在系統中

訪問時就是讀寫塊裝置/dev/nvme0n20,以FIO為例:

3 multiple namespace的讀寫方法

通過上述介紹,您是否覺得namespace與Windows檔案系統下的分割槽有些相似。簡單的說,兩者根本的區別在於執行劃分任務的主體不同。Windows有硬碟分割槽,Linux 也會通過樹形結構實現分割槽管理硬碟空間,但是這些是作業系統的檔案系統實現的。而namespace則是直接對硬碟的地址進行劃分,與上層系統相互獨立。namespace更接近硬碟,所以能夠實現諸如不同namespace不同方式加密等高階功能。 

本文作者:她低調的坐在辦公室一個柱子旁,降噪耳機、機械鍵盤透露著濃濃的極客風。我見過很多工程師,但是很少見這般有狹義之氣的工(da)程(jie)師(da)。這位工程師同志把NVMe1.2協議列印出來,還熟讀了,顯然我是相信的,因為我看見那本協議的時候,上面一點灰沒有。這篇文章是袁老師寫的namespace,我覺得回來她會亮劍寫點其他的,敬請期待。

相關文章