自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

網(wǎng)絡(luò) 網(wǎng)絡(luò)設(shè)備 存儲(chǔ)軟件
任何新技術(shù)的出現(xiàn)都是為了解決當(dāng)前情況存在的問題。NVMe的出現(xiàn)也是為了解決當(dāng)前存在的問題。這個(gè)問題就是日益快速增長的存儲(chǔ)介質(zhì)性能與傳輸通道性能太差之間的矛盾。

前文回顧:《一篇文章講清什么是NVMe

任何新技術(shù)的出現(xiàn)都是為了解決當(dāng)前情況存在的問題。NVMe的出現(xiàn)也是為了解決當(dāng)前存在的問題。這個(gè)問題就是日益快速增長的存儲(chǔ)介質(zhì)性能與傳輸通道性能太差之間的矛盾?;赟SD的存儲(chǔ)設(shè)備性能都要上天了,但SAS和SATA接口的性能卻沒有本質(zhì)的提升。

目前基于SCSI協(xié)議的SAS和SATA只能是單個(gè)隊(duì)列而且每個(gè)隊(duì)列的深度也比較低,分別是254和32的隊(duì)列深度。而NVMe協(xié)議設(shè)計(jì)之初就考慮了該問題,它的***隊(duì)列數(shù)量可以是64K(65535個(gè)命令隊(duì)列和1個(gè)管理隊(duì)列),而每個(gè)隊(duì)列的深度可以高達(dá)64K。與SCSI協(xié)議相比,就好比一個(gè)鄉(xiāng)村的羊腸小路和一個(gè)雙向八車道的高速公路的差別。

 

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖1 美麗的鄉(xiāng)村下路和京港澳高速

NVMe基本原理

為了便于理解主機(jī)和NVMe設(shè)備的關(guān)系,我們這里簡化NVMe設(shè)備的內(nèi)部結(jié)構(gòu)。如圖2所示為NVMe白皮書中的配圖,這里主機(jī)稱為Host,而NVMe設(shè)備稱為Controller(控制器)。主機(jī)和控制器之間通過共享內(nèi)存的隊(duì)列實(shí)現(xiàn)交互。

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖2 NVMe多隊(duì)列示意圖

NVMe的隊(duì)列分為2種,其中一種是用于管理的隊(duì)列,稱為Admin Queue(管理隊(duì)列),僅有一個(gè),另外一種是命令隊(duì)列(Command Queue),最多可以有65535個(gè)。其中命令隊(duì)列的數(shù)量和模式都是通過管理隊(duì)列來設(shè)置的。其中每一個(gè)隊(duì)列實(shí)際上是一個(gè)隊(duì)列對(duì),也就是包括兩個(gè)隊(duì)列,分別是提交隊(duì)列(Submission Queue)和完成隊(duì)列(Completion Queue)。提交隊(duì)列用于主機(jī)端向NVMe設(shè)備發(fā)送NVMe命令,而完成隊(duì)列則用于NVMe設(shè)備向主機(jī)反饋命令執(zhí)行情況。實(shí)際上NVMe還有另外一種模式,就是多個(gè)提交隊(duì)列共享同一個(gè)完成隊(duì)列的情況,本文暫時(shí)不做介紹。

NVMe隊(duì)列及命令的處理流程

上文我們知道NVMe是通過隊(duì)列傳遞控制命令和命令等內(nèi)容的,那么這里的隊(duì)列實(shí)體到底是什么呢?其實(shí)這里提交隊(duì)列和完成隊(duì)列就是內(nèi)存的一個(gè)區(qū)域。在數(shù)據(jù)結(jié)構(gòu)原理上這里的隊(duì)列其實(shí)是一個(gè)環(huán)形緩沖區(qū),如圖3所示。

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖3 環(huán)形緩沖區(qū)

NVMe通過一種門鈴機(jī)制(Doorbell)來告知控制器命令隊(duì)列是否有新數(shù)請(qǐng)求/命令。也就是說每個(gè)隊(duì)列都有一個(gè)門鈴指針。對(duì)于發(fā)送隊(duì)列來說,這個(gè)指針表示的是發(fā)送隊(duì)列的尾指針。主機(jī)端將數(shù)據(jù)寫入到發(fā)送隊(duì)列后,更新映射到位于設(shè)備寄存器空間中的門鈴的尾指針。此時(shí),在控制器端就知道有新的請(qǐng)求/命令到來,接下來就可以進(jìn)行對(duì)其進(jìn)行處理。

當(dāng)控制器完成一個(gè)NVMe請(qǐng)求時(shí),通過完成隊(duì)列來把完成的結(jié)果告知主機(jī)端。與發(fā)送隊(duì)列不同,完成隊(duì)列是通過中斷機(jī)制(可以是INTx,MSI或MSIx)告訴主機(jī)端。如圖4是一個(gè)命令的完整處理流程。

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖4 命令處理完整流程

NVMe的命令格式

前面我們介紹了命令的發(fā)送和處理流程,接下來我們看看NVMe的命令長什么樣。如圖5是NMVe命令的具體格式,如果大家了解TCP/IP協(xié)議或者SCSI協(xié)議,那么理解本圖將相當(dāng)容易。在圖4中每一行為8個(gè)字節(jié),命令大小總共為64字節(jié)。

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖5 NVMe的命令格式

在這個(gè)命令格式中有幾個(gè)字段本身是比較復(fù)雜的,限于篇幅,且不打算讓大家看完本文后頭疼,本文不打算介紹所有細(xì)節(jié)。本文簡單的介紹一下該命令格式的幾個(gè)關(guān)鍵字段。其中Command Identifier標(biāo)識(shí)一個(gè)具體的命令。Namespace Identifier則表示命令發(fā)送到那個(gè)命名空間。Data Pointer 1 和Data Pointer 2則用于標(biāo)識(shí)數(shù)據(jù)的具體位置。

這里有兩點(diǎn)需要說明:

  • NVMe的一個(gè)控制器下面可以有多個(gè)命名空間(Namespace),通過Namespace ID來標(biāo)識(shí)的。
  • 命令與數(shù)據(jù)是分離的,并不像TCP那樣數(shù)據(jù)在命令后面。

我們這里重點(diǎn)介紹一下Command Identifier,該字段占用4個(gè)字節(jié)的空間。雖然僅有4個(gè)字節(jié),但有分為3大部分,6小部分,具體如圖6所示。

圖6 命令標(biāo)識(shí)格式

我們以從低位到高位的順序分別介紹一下各個(gè)字段的含義:

  • OPC: 全稱為Opcode,也就是被執(zhí)行命令的操作碼。具體來說就是想讓控制器干什么,比如讀數(shù)據(jù)、寫數(shù)據(jù)或者刷寫等。

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖7 OPC定義

  • FUSE: 全稱為Fused Operation, 用于標(biāo)識(shí)該命令是普通命令還是復(fù)合命令。如圖8是白皮書對(duì)該字段的說明。

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖8 FUSE的定義

  • PSDT: 全稱為PRP or SGL for Data Transfer,這個(gè)用于說明存儲(chǔ)數(shù)據(jù)的內(nèi)存的組織形式。

NVMe的性能

***我們看一下NVMe與SAS和SATA存儲(chǔ)設(shè)備的性能對(duì)比。為了避免廣告嫌疑,本文就布局圖說明設(shè)備的廠商和類型了。

理解NVMe的內(nèi)部實(shí)現(xiàn)原理,這一篇就夠了

圖9 性能對(duì)比

通過上圖可以清楚的看到SAS和SATA設(shè)備與NVMe設(shè)備的性能差異,特別是對(duì)于讀操作,NVMe有絕對(duì)的性能優(yōu)勢。

責(zé)任編輯:趙寧寧 來源: itworld123
相關(guān)推薦

2017-03-13 09:50:46

Python裝飾器

2020-08-03 10:00:11

前端登錄服務(wù)器

2023-04-24 08:00:00

ES集群容器

2023-02-10 09:04:27

2020-02-18 16:20:03

Redis ANSI C語言日志型

2022-06-20 09:01:23

Git插件項(xiàng)目

2020-05-14 16:35:21

Kubernetes網(wǎng)絡(luò)策略DNS

2019-04-01 08:15:21

Java線程池多核處理器

2024-04-08 10:01:33

2022-04-10 23:21:04

SSH協(xié)議網(wǎng)絡(luò)安全

2019-08-13 15:36:57

限流算法令牌桶

2022-08-01 11:33:09

用戶分析標(biāo)簽策略

2021-04-08 07:37:39

隊(duì)列數(shù)據(jù)結(jié)構(gòu)算法

2023-09-11 08:13:03

分布式跟蹤工具

2024-04-10 08:22:44

2018-05-22 08:24:50

PythonPyMongoMongoDB

2023-10-17 08:15:28

API前后端分離

2024-09-23 08:00:00

消息隊(duì)列MQ分布式系統(tǒng)

2021-05-14 23:31:50

大數(shù)據(jù)計(jì)算機(jī)開發(fā)

2020-11-06 10:01:06

Nginx
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)