NVMe簡介2

共分2部分,這里是第2部分。

NVMe數據結構

NVMe協議中規定每個提交命令的大小為64字節,完成命令大小為16字節,NVMe命令分為Admin和IO兩類,NVMe的數據塊組織方式有PRP和SGL兩種。提交命令的格式如圖5所示。
在這里插入圖片描述
圖5 提交命令數據格
NVMe提交命令的數據格式屬性如下:
(1)Opcode(OPC):命令操作碼,不同操作命令的Opcode都有相應的值;
(2)Fused Operation(FUSE):融合操作,可選字段,用于將兩個命令融合為一條命令;
(3)PRP or SGL for Data Transfer(PSDT):PRP或SGL數據傳輸;
(4)Command Identifier(CID):命令ID;
(5)Namespace Identifier(NSID):命名空間ID;
(6)Metadata Pointer(MPTR):元數據指針;
(7)PRP Entry 1/2:物理區域頁項;
(8)SGL Entry:散列聚合列表。

Admin命令集定義了可以提交到Admin SQ的命令。NVM命令集定義了可以提交到IO SQ的命令。表1和表2分別列出了Admin命令集和NVM命令集中的常用命令、操作碼和簡要的功能描述。
表1 Admin命令集
在這里插入圖片描述
表2 NVM命令集在這里插入圖片描述
接下來分析NVMe協議中的尋址方式。在NVMe協議中定義了兩種尋址方式,PRP和SGL。通過PRP和SGL來記錄Host內存中物理頁的位置。NVMe命令中的PRP和SGL字段用來向NVMe SSD傳遞將要讀寫數據在內存中的位置。NVMe協議中規定Admin命令只能通過PRP告訴NVMe SSD命令在內存中物理地址。而SGL主要是在NVMeoF中使用,因此本設計將采用PRP尋址方式。

Host可以通過配置NVMe Controller的CC.MPS寄存器來設定物理頁的大小,物理頁的大小可設定的范圍是4KB~128MB之間。物理頁對應的地址記錄在PRP Entry中,PRP Entry的數據格式。PRP Entry的數據格式由物理頁起始地址和頁偏移地址兩部分組成,如圖6所示。由于物理地址只能是四字節對齊,因此將偏移地址的最低2bit置為0。此外,圖6中n的取值與設置的物理頁大小有關,例如,將物理頁大小設置為4KB,則n=11,通過偏移地址[11:2]來表示在一個內存頁內的偏移地址。
在這里插入圖片描述
圖6 NVMe之PRP數據格式

一個PRP Entry只能指向一個物理頁。NVMe協議中只定義了兩個PRP Entry,當傳輸數據量大小大于兩個內存頁大小時,PRP Entry2將不指向物理頁,而是指向由若干個PRP組成的PRP List。如圖7所示,NVMe命令中的PRP1指向第一個內存頁,PRP2指向一個新的PRP鏈表的首地址。如果需要指定更大的內存空間可以通過每一個PRP List的最后一個PRP Entry指向新的PRP List。
在這里插入圖片描述
圖7 NVMe命令中的 原理示意圖

完成命令的數據格式如圖8所示。
在這里插入圖片描述
圖8 NVMe完成命令格式
NVMe完成隊列的命令格式屬性如下:

(1)SQ Header pointer:SQ頭指針;
(2)SQ Identifier:SQ ID;
(3)Command Identifier:命令ID;
(4)P:相位標志phase tag,完成隊列沒有head/tail交互,通過相位標志實現完成隊列項的釋放;
(5)Status Field:狀態域。

4 NVMe工作流程
NVMe協議中的Admin命令和IO命令執行流程相同,主要通過SQ、CQ和DB寄存器三個關鍵部件之間的相互協作來完成。NVMe的命令處理流程分為了8個步驟,如圖9所示。

在這里插入圖片描述
圖9 NVMe簡介完成命令處理流程

Host和SSD之間通過更新DB(DoorBell)寄存器的值來實現隊列信息的交互。每個SQ和CQ都擁有一個Head寄存器和Tail寄存器。對于SQ而言,Host是生產者,負責向隊列發送提交命令,SSD是消費者,負責執行命令,因此Host負責更新Tail DB寄存器,SSD負責更新Head DB寄存器。對于CQ而言,SSD是生產者,負責向隊列發送完成命令,Host是消費者,負責檢查完成信息,因此SSD負責更新Tail DB寄存器,Host負責更新Head DB寄存器。而DB寄存器都存在于SSD內,且只能進行寫操作,不能進行讀操作。因此NVMe協議中規定SSD通過完成信息向Host反饋CQ Tail和SQ Head寄存器的值。

NVMe命令處理的步驟如下:

(1)主機提交新的NVMe命令。主機生成新的NVMe命令并添加ID號后,將其存放在SQ Tail指針指向的內存空間中;
(2)主機更新SQ Tail DB寄存器。主機通過Memory Write事務更新SQ Tail DB寄存器的值,以通知NVMe SSD控制器去主機端讀取SQ中緩存的命令;
(3)NVMe SSD讀取命令。NVMe SSD控制器檢測到SQ Tail DB寄存器的變化后,通過Memory Read事務去讀取SQ內緩存的命令,這個過程,NVMe SSD進行突發讀取,一次讀取多條命令,等待取命令完成后更新SQ Head DB寄存器的值;
(4)NVMe SSD執行命令。NVMe SSD控制器根據內部的仲裁機制來執行讀取到的NVMe命令,其執行過程并不是按照隊列的先后順序來執行命令;
(5)NVMe SSD控制器將完成命令寫入CQ。NVMe SSD控制器將NVMe命令的執行結果寫入主機的CQ內存區域中,完成命令包括NVMe命令中的ID號和SQ Head DB寄存器的值;
(6)NVMe SSD通知主機檢查完成命令。NVMe SSD控制器通過Memory Write事務向主機發出MSI-X中斷信號,告知主機檢查CQ中的完成信息。在本設計中,取消了完成隊列的設計,而采用FPGA的并行處理方式,通過主機端實時監測CQ信息,以節省硬件資源和提高NVMe命令處理速度;
(7)主機檢查完成命令。主機從CQ內存中讀取完成信息,并根據狀態字段判斷NVMe命令的執行情況。若命令已經執行完成,主機會釋放該ID號對應的提交命令空間,以便給新的命令使用;
(8)主機更新CQ Head DB寄存器。主機通過Memory Write事務更新CQ Head DB寄存器的值,以通知NVMe SSD控制器CQ中的完成信息已經檢查。
對相關NVM安e設計感興趣的可以看本博客,或視頻見B站 用戶: 專注與守望

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83041.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高壓啟動電路--學習記錄

常見反激的啟動電路 優點:電路設計簡單,價格便宜 缺點:損壞大,輸入寬范圍的時候,為了保證低壓能正常啟動,啟動電阻阻值需要選小,那么高壓時損耗會非常大,設計的不好很容易在高壓時損…

VS打印printf、cout或者Qt的qDebug等傳出的打印信息

在vs中打印printf、cout或者Qt的qDebug等常見的打印信息有時也是必要的,簡單的敘述一下過程: 1、在vs中打開你的解決方案。 2、鼠標移動到你的項目名稱上,點擊鼠標右鍵,再點擊屬性,此刻會此項目的屬性頁。 3、在配置…

蒼穹外賣--新增菜品

1.需求分析和設計 產品原型 業務規則: 菜品名稱必須是唯一的 菜品必須屬于某個分類下,不能單獨存在 新增菜品時可以根據情況選擇菜品的口味 每個菜品必須對應一張圖片 接口設計: 根據類型查詢分類(已完成) 文件上傳 新增菜品 根據類型…

如何高效集成MySQL數據到金蝶云星空

MySQL數據集成到金蝶云星空:SC采購入庫-深圳天一-OK案例分享 在企業信息化建設中,數據的高效流轉和準確對接是實現業務流程自動化的關鍵。本文將聚焦于一個具體的系統對接集成案例——“SC采購入庫-深圳天一-OK”,詳細探討如何通過輕易云數據…

【springcloud學習(dalston.sr1)】使用Feign實現接口調用(八)

該系列項目整體介紹及源代碼請參照前面寫的一篇文章【springcloud學習(dalston.sr1)】項目整體介紹(含源代碼)(一) (一)Feign的理解 前面文章【springcloud學習(dalston.sr1)】服務消費者通過restTemplat…

SpringbBoot nginx代理獲取用戶真實IP

為了演示多級代理場景,我們分配了以下服務器資源: 10.1.9.98:充當客戶端10.0.3.137:一級代理10.0.4.105:二級代理10.0.4.129:三級代理10.0.4.120:服務器端 各級代理配置 以下是各級代理的基本配…

實驗九視圖索引

設計性實驗 1. 創建視圖V_A包括學號,姓名,性別,課程號,課程名、成績; 一個語句把學號103 課程號3-105 的姓名改為陸君茹1,性別為女 ,然后查看學生表的信息變化,再把上述數據改為原…

typeof運算符和深拷貝

typeof運算符 識別所有值類型識別函數判斷是否是引用類型(不可再細分) //判斷所有值類型 let a; typeof a //undefined const strabc; typeof str //string const n100; typeof n //number const …

NAT/代理服務器/內網穿透

目錄 一 NAT技術 二 內網穿透/內網打洞 三 代理服務器 一 NAT技術 跨網絡傳輸的時候,私網不能直接訪問公網,就引入了NAT能講私網轉換為公網進行訪問,主要解決IPv4(2^32)地址不足的問題。 1. NAT原理 當某個內網想訪問公網,就必…

Git的安裝和配置(idea中配置Git)

一、Git的下載和安裝 前提條件:IntelliJ IDEA 版本是2023.3 ,那么配置 Git 時推薦使用 Git 2.40.x 或更高版本 下載地址:CNPM Binaries Mirror 操作:打開鏈接 → 滾動到頁面底部 → 選擇2.40.x或更高版本的 .exe 文件&#xf…

【教程】Docker更換存儲位置

轉載請注明出處:小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你,歡迎[點贊、收藏、關注]哦~ 目錄 背景說明 更換教程 1. 停止 Docker 服務 2. 創建新的存儲目錄 3. 編輯 Docker 配置文件 4. 遷移已有數據到新位置 5. 啟動 Docker 服務 6…

PostgreSQL 配置設置函數

PostgreSQL 配置設置函數 PostgreSQL 提供了一組配置設置函數(Configuration Settings Functions),用于查詢和修改數據庫服務器的運行時配置參數。這些函數為數據庫管理員提供了動態管理數據庫配置的能力,無需重啟數據庫服務。 …

sql server 2019 將單用戶狀態修改為多用戶狀態

記錄兩種將單用戶狀態修改為多用戶狀態,我曾經成功過的方法,供參考 第一種方法 USE master; GO -- 終止所有活動連接 DECLARE kill_connections NVARCHAR(MAX) ; SELECT kill_connections KILL CAST(session_id AS NVARCHAR(10)) ; FROM sys.dm_ex…

主機A向主機B發送一個長度為L字節的文件,假設TCP的MSS為1460字節,則在TCP的序號不重復使用的前提下,L的最大值是多少?

📘題干回顧: 主機A向主機B發送一個長度為L字節的文件,假設TCP的MSS為1460字節,則在TCP的序號不重復使用的前提下,L的最大值是多少? 這個問題關鍵在于“TCP序號不重復使用”。 ? 正確答案是:D.…

一次因校時服務器異常引起的性能差異分析

一次因校時服務器異常引起的性能差異分析 一.背景知識1. **TSC 頻率**:硬件級高精度計時2. **gettimeofday**:用戶態時間接口3. **adjtimex**:系統時鐘的軟件校準4. **`clock_adjtime(CLOCK_REALTIME, {modes=ADJ_TICK})`**: 用于修改系統時鐘中斷間隔(`tick` 值)。5. 關系…

acwing 4275. Dijkstra序列

題目背景 輸入 輸出 完整代碼 #include<bits/stdc.h> using namespace std; int n,m,k,a[1010],dist[1010],g[1010][1010],st[1010];int dij(int u){memset(st,0,sizeof st);memset(dist,0x3f,sizeof dist);dist[u]0;for(int i0;i<n;i){int ta[i];for(int j1;j<n;…

[思維模式-37]:什么是事?什么是物?什么事物?如何通過數學的方法闡述事物?

一、基本概念 1、事&#xff08;Event) “事”通常指的是人類在社會生活中的各種活動、行為、事件或情況&#xff0c;具有動態性和過程性&#xff0c;強調的是一種變化、發展或相互作用的流程。 特點 動態性&#xff1a;“事”往往涉及一系列的動作、變化和發展過程。例如&a…

Linux常用命令40——alias設置命令別名

在使用Linux或macOS日常開發中&#xff0c;熟悉一些基本的命令有助于提高工作效率&#xff0c;alias命令來自英文單詞alias&#xff0c;中文譯為“別名”&#xff0c;其功能是設置命令別名信息。我們可以使用alias將一些較長的命令進行簡寫&#xff0c;往往幾十個字符的命令會變…

310. 最小高度樹

題目 樹是一個無向圖&#xff0c;其中任何兩個頂點只通過一條路徑連接。 換句話說&#xff0c;任何一個沒有簡單環路的連通圖都是一棵樹。 給你一棵包含 n 個節點的樹&#xff0c;標記為 0 到 n - 1 。給定數字 n 和一個有 n - 1 條無向邊的 edges 列表&#xff08;每一個邊都…

Axure 縱向滾動隱藏滾動條 Axure 滑動開關(屬性開關)on-off

文章目錄 I 滑動開關(屬性開關)操作說明block 矩形操作說明round小圓圈操作說明on-off 屬性開關組合操作說明II Axure 縱向滾動隱藏滾動條思路包含圖片的動態面板1操作說明包含動態面板的頂級動態面板I 滑動開關(屬性開關)操作說明 block 矩形操作說明 在畫布中添加一個矩形…