NVME CLI -- nvme 命令查看NVME设备内部状态
文章目錄
- NVME 和 AHCI 性能比較
- NVME-CLI nvme工具使用
- 1. 安裝
- 2. 命令綜述
- 3. 基本命令演示
- 4. NVME 固件設(shè)備升級(jí)
近期在做一些rocksdb on 新硬件的性能測(cè)試(flash ssd, nvme ssd , nvme optane ssd, optane persistent memory),由于底層一些設(shè)備的實(shí)現(xiàn)對(duì)我來(lái)說(shuō)還是知識(shí)盲區(qū),一些設(shè)備IO表現(xiàn)出來(lái)的行為完全是黑盒,讓人琢磨不透。
因此利用周末時(shí)間對(duì)基礎(chǔ)的AHCI + SATA 調(diào)度的傳統(tǒng)ssd 和 基于 NVME 協(xié)議調(diào)度的ssd 做了一個(gè)入門了解。
細(xì)粒度的參考可以直接讀官方文檔:NVME-doc
NVME 和 AHCI 性能比較
NAND 閃存是傳統(tǒng)ssd的存儲(chǔ)介質(zhì)。早期的ssd通過(guò)上層的AHCI(advanced host controller interface) + SATA協(xié)議進(jìn)行操作系統(tǒng)的塊設(shè)備驅(qū)動(dòng)層到底層物理設(shè)備的IO調(diào)度,但是這樣的組合AHCI + SATA 是為了傳統(tǒng)的HDD機(jī)械硬盤設(shè)計(jì)的,在如今ssd內(nèi)部核心技術(shù)的快速發(fā)展中已經(jīng)無(wú)法發(fā)揮出底層SSD的低延時(shí)和高性能的優(yōu)勢(shì)。為了發(fā)揮SSD高性能,固件廠商為SSD量身打造了一個(gè)協(xié)議標(biāo)準(zhǔn)NVME( Non-Volatile Memeory Express),且這個(gè)標(biāo)準(zhǔn)不僅可以應(yīng)用在NAND的存儲(chǔ)介質(zhì)上,也能夠應(yīng)用在高性能和低延時(shí)的3D XPoint 新型介質(zhì)上。
整體的NVME 協(xié)議架構(gòu)如下,總共分為四層,到最底層就是 nvme的subsystem:
nvme的subsystem
NVME和AHCI 相比的優(yōu)勢(shì)主要是以下三個(gè)方面:
-
低延時(shí)(Latency)
傳統(tǒng)的HDD+sas/sata 隨機(jī)讀延時(shí)大概在ms量級(jí)
NAND ssd + sas/sata 隨機(jī)讀延時(shí)在110us 左右
基于NVME的NAND ssd 隨機(jī)讀延時(shí)在85us 左右,相比于sata的nand ssd 延時(shí)降低了20 us
當(dāng)然3D XPoint + nvme 這樣的新型存儲(chǔ)介質(zhì) 延時(shí)只有10us左右(intel Optane p4800),這樣的硬件紅利帶來(lái)的效果還是很給力的。以上的延時(shí)都會(huì)體現(xiàn)在上層的應(yīng)用之中,尤其是新型存儲(chǔ)介質(zhì)搭配nvme協(xié)議 體現(xiàn)出的低延時(shí) 對(duì)上層應(yīng)用的正向反饋還是十分給力的。而且intel 近期仍然會(huì)推出更為給力的p5800(iops 和帶寬 相比于p4800 提升一倍以上,latency會(huì)降低40%-50%)。
實(shí)現(xiàn)上來(lái)看,對(duì)硬盤存儲(chǔ)延時(shí)有影響的如下幾種:
-
存儲(chǔ)介質(zhì)層面,閃存比傳統(tǒng)的機(jī)械硬盤快很多。(NAND是通過(guò) 基于 MOS場(chǎng)效應(yīng)的浮柵晶體管 實(shí)現(xiàn)的底層0,1bit位的互換, 而 機(jī)械硬盤則是電信號(hào) 磁信號(hào)之間的轉(zhuǎn)化,還夾雜著主流程上大量的機(jī)械運(yùn)動(dòng)。一個(gè)是純化學(xué)反應(yīng),一個(gè)是機(jī)械運(yùn)動(dòng)為主體,兩者性能當(dāng)然千差萬(wàn)別)
-
控制器方面,sata ssd需要通過(guò)南僑控制器中轉(zhuǎn),再連接到CPU;而NVME的 pcie ssd主控可以和CPU直連。所以時(shí)延方面,PCIE ssd 更低。
-
軟件接口方面:NVME 縮短了CPU 到ssd的指令路徑,比如NVME減少了對(duì)寄存器的訪問(wèn)次數(shù),使用了MSI-X中斷管理;并行&多線程優(yōu)化 – NVME減少了各個(gè)CPU核之間的鎖同步操作。
-
-
高性能
理論上,IOPS= 隊(duì)列深度/IO延遲,所有IOPS的性能和隊(duì)列深度有很大的關(guān)系(但并不是正比,實(shí)際應(yīng)用中,隨著隊(duì)列深度的增加,IO延時(shí)也會(huì)增加)。
SATA ssd 市面上能做到最好的IO深度是32,但目前企業(yè)級(jí)的PCIE ssd 隊(duì)列深度能夠達(dá)到128 甚至256才能發(fā)揮出其底層ssd的最高性能。 而在NVME標(biāo)準(zhǔn)下,最大的隊(duì)列深深度能夠達(dá)到64K。 -
低功耗
NVME加入了自動(dòng)功耗狀態(tài)切換 和 動(dòng)態(tài)能耗管理功能。
NVME-CLI nvme工具使用
所以總上來(lái)看NVME 是現(xiàn)在新型存儲(chǔ)的標(biāo)準(zhǔn),所以我們做存儲(chǔ)的應(yīng)該上通應(yīng)用,下曉FM,且與時(shí)俱進(jìn)。
而且NVME 社區(qū)也維護(hù)了一套完整的工具來(lái)協(xié)助我們加深對(duì)NVME的理解NVME-CLI
關(guān)于NVME以及 NAND閃存的原理其實(shí)理解的非常淺薄,后續(xù)會(huì)持續(xù)補(bǔ)充。接下來(lái)回到本節(jié)的主題,將NVME的基本工具使用做一個(gè)整體的記錄。
1. 安裝
- on ubuntu :
https://github.com/linux-nvme/nvme-cli - on Centos/RHEL 7.x or 8x
https://github.com/linux-nvme/nvme-cli
2. 命令綜述
注意,以下命令需要在root用戶下運(yùn)行,并不是所有的自命令,只是一些比較常用的命令。
建議在測(cè)試硬盤上使用,且明確命令的含義,以下的部分命令會(huì)刪除數(shù)據(jù)。
| Command | Description |
|---|---|
| nvme list | 查看所有連接到當(dāng)前系統(tǒng)的nvme設(shè)備:名稱,序列號(hào),大小,LBA 和 serial |
| nvme id-ctrl | 展示nvme 控制器和它所支持的一些特性 |
| nvme id-ns | 展示nvme 的命名空間,優(yōu)化特性和支持特性 |
| nvme format | 安全擦除SSD上的數(shù)據(jù),格式化LBA大小或保護(hù)信息以實(shí)現(xiàn)端到端數(shù)據(jù)保護(hù) |
| nvme sanitize | 安全得擦除SSD上的所有數(shù)據(jù) |
| nvme smart-log | 查看NVME的smart log信息:page的健康狀態(tài),溫度,穩(wěn)定性情況等 |
| nvme fw-log | 查看NVME的固件日志,會(huì)打印每個(gè)entry的健康情況 |
| nvme error-log | NVME的異常日志 |
| nvme reset | 重置NVME的控制器 |
| nvme help | 查看幫助信息 |
| nvme delete-ns | 指定設(shè)備刪除一個(gè)命名空間 |
| nvme create-ns | 指定設(shè)備創(chuàng)建命名空間。比如可以為一個(gè)設(shè)備創(chuàng)建一個(gè)較小大小的命名空間,從而提升SSD的穩(wěn)定性,性能和延時(shí)?(具體原理還不太清楚) |
| nvme fw-download | 為一個(gè)設(shè)備下載一個(gè)新的固件系統(tǒng) |
| nvme fw-commit | 讓固件立即運(yùn)行 |
如下使用
nvme help
能夠看到大量的命令集
3. 基本命令演示
一些命令需要指定設(shè)備運(yùn)行,這里建議指定字符設(shè)備,即/dev/nvme0 這樣的,因?yàn)樽址O(shè)備文件獲取到的數(shù)據(jù)是直接從底層存儲(chǔ)中取出來(lái)的;如果指定/dev/nvme0n1這樣的塊設(shè)備,數(shù)據(jù)讀取會(huì)走操作系統(tǒng)buffer cache,可能有一些數(shù)據(jù)更新不及時(shí)。
-
nvme id-ctrl /dev/nvme0查看nvme controller 支持的一些特性NVME Identify Controller: vid : 0x1c5f # PCIe vendor id ssvid : 0x1c5f sn : FL172100442 # serial number mn : Z45C7032C22 fr : 2090500 # firm version 固件版本號(hào) rab : 1 ieee : 00e0cf cmic : 0 mdts : 5 cntlid : 0 ver : 0 rtd3r : 0 rtd3e : 0 oaes : 0 ... ... -
nvme list查看當(dāng)前環(huán)境的 nvme設(shè)備
-
nvme id-ns /dev/nvme0查看nvme的namespace,這個(gè)能夠非常方便得看到nvme內(nèi)部的LBA(邏輯地址和物理地址的映射表)使用情況等非常有用的信息。
如果出現(xiàn)如下錯(cuò)誤:# nvme id-ns /dev/nvme0 Error: requesting namespace-id from non-block device NVMe Status:INVALID_NS: The namespace or the format of that namespace is invalid(b) NSID:0這里就需要指定namespace的id了,通過(guò)
nvme list-ns /dev/nvme0查看當(dāng)前設(shè)備的name space# nvme list-ns /dev/nvme0 [ 0]:0x1然后再執(zhí)行
nvme id-ns --namespace-id=0x1 /dev/nvme0即可看到如下信息
使用-H 命令能夠提升輸出結(jié)果的可讀性
-
nvme smart-log /dev/nvme0查看設(shè)備smart log信息
-
nvme error-log /dev/nvme0查看設(shè)備error 信息
4. NVME 固件設(shè)備升級(jí)
ssd 供應(yīng)商會(huì)跟隨ssd的研發(fā)周期性更新固件,跟進(jìn)固件的更新能夠保證一些關(guān)于bug-fix, 穩(wěn)定性提升的補(bǔ)丁包及時(shí)得到更新。當(dāng)然,固件升級(jí)的頻率也不會(huì)很高,一般一年不會(huì)超過(guò)5次。升級(jí)前可以和供應(yīng)商核對(duì)固件升級(jí)的版本信息。
確認(rèn)固件版本:
nvme id-ctrl /dev/nvme0 |grep "fr "
下載固件并應(yīng)用起來(lái)
nvme fw-download /dev/nvme0 -
nvme fw-commit /dev/nvme0 -a 0
這里注意下commit 過(guò)程中-a指定的action 模式有種,表示不同的含義
- 0 : 下載的固件鏡像替換原有的固件鏡像,但并不會(huì)激活。即不會(huì)讓這個(gè)鏡像運(yùn)行起來(lái)
- 1:下載的固件鏡像替換原有的固件鏡像,會(huì)在NVME reset之后運(yùn)行起來(lái)。(發(fā)生了熱插拔,斷電,上電也會(huì)運(yùn)行)
- 2:由固件插槽指定的鏡像會(huì)在下次重置之后激活
- 3: 獲取到的固件鏡像會(huì)被立即激活而不需要重置
下載好的固件,加入需要重置的話可以執(zhí)行如下命令:
nvme reset /dev/nvme0
本身并不是NVME的研發(fā)人員,使用的話其實(shí)只需要獲取一些基本的設(shè)備狀態(tài)信息就可以了,后續(xù)工作中如果需要知道更加詳細(xì)的NVME 設(shè)備內(nèi)部狀態(tài)信息,會(huì)再做一些更加細(xì)致的整理。
不過(guò)關(guān)于基礎(chǔ)的NAND,3D-XPoint, NVME 等實(shí)現(xiàn)還是需要持續(xù)探索,未來(lái)的存儲(chǔ)系統(tǒng)一定會(huì)結(jié)合新硬件來(lái)做,這樣才會(huì)有更加極致的性能。
總結(jié)
以上是生活随笔為你收集整理的NVME CLI -- nvme 命令查看NVME设备内部状态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Go 语言实现字符串匹配算法 -- BF
- 下一篇: Go 分布式学习利器(17)-- Go并