1. 程式人生 > >深入理解nvme協議之二:nvme 協議重點數據結構之間的關系

深入理解nvme協議之二:nvme 協議重點數據結構之間的關系

排列 vpd hal tro status phy blog 自己 理解

Physical Region Range(PRP entry)

描述一段物理空間的其實地址和長度,最重要的字段包括:

  • 起始地址(page base address)
  • 偏移大小(offset)

具體如下圖所示:
技術分享圖片

Metadata Region

特點:裏面的數據不能被split 來傳輸
Metadata may be supported for a namespace as either part of the logical block (creating an extended logical block which is a larger logical block that is exposed to the application) or it may be transferred as a separate buffer of data. The metadata shall not be split between the logical block and a separate metadata buffer. For writes, the metadata shall be written atomically with its associated logical block

complete queue

每個mition queue entry完成uiy會產生一個complete queue entry。每個complete queue entry的特地如下:

  • 至少16 bytes

  • 每個complete queue entry的數據結構如下:
    技術分享圖片

其中主要的字段包括DW0、DW1、DW2、DW3.

DW2字段

DW2字段範圍的字段記錄了返回的這個complete queue 來自哪個submit queue, 以及這個submit queue Header 的位置。如下:

技術分享圖片

DW3字段

DW3字段記錄了這個complete queue entry 是哪個command產生的,已經這個命令執行完之後的結果狀態。

技術分享圖片

其中上面Status Field的具體字段又有幾個子字段:
技術分享圖片

SCT

其中上面的SCT(staus cod ) 段含義如下:

技術分享圖片

SC

而SC(status code)字段給出了命令執行完成之後status的更具體的字段, 下表列出了幾個例子:
技術分享圖片

CMB 控制器內存buffer (controller memory buffer)

一些高級的NVME SSD控制器內部有自己的內存,可以把它映射到用戶內存空間。和使用spdk_memory_alloc從系統內存分配的內存相比,這樣能少做一次DMA拷貝。

name space list

name space list是namespace IDS的有序列表。組織如下:

技術分享圖片

controller list

同name space list 類似, controller list 是按照controller IDS升序排列的 controller ID列表。典型的結構如下:

技術分享圖片

3

深入理解nvme協議之二:nvme 協議重點數據結構之間的關系