nvme-cli常见命令分析

server/2024/12/13 19:54:11/

一、背景

nvme-cli命令常常用于获取或者设置SSD参数,比如常见的nvme list,nvme id-ctrl等,都是获取SSD的基本信息,也有nvme admin-passthru用于读取或者设置自定义命令。作为使用者,我们并不知道nvme-cli源码怎么实现的,为了探究溯源,阅读源码探究一下nvme-cli常见命令的细节。具体的nvme-cli master代码下载地址见链接。

nvme-builtin.h可以看到,可命令支持如下:

二、常见命令

2.1 nvme list

作为最简单的nvme-cli命令,以此为基础进行分析,首先进入nvme.c函数入口,这是nvme-cli命令的入口,找到nvme list命令function:

最终调用struct print_ops的成员变量,一个函数指针list_items:

而list_items在nvme-cli-master\nvme-print-stdout.c中的struct print_ops stdout_print_ops结构体进行初始化:

在nvme-cli-master\nvme-print-stdout.c找到stdout_list_items

 stdout_simple_ns里面找到stdout_list_item,最终可以查看nvme list打印信息:

从代码上可以看到,当在host终端上输入“nvme list”后,显示的数据类型有:dev_name、genname、nvme_ns_get_serial(n)、nvme_ns_get_model(n)、nvme_ns_get_nsid(n)、usage、format、nvme_ns_get_firmware(n))。

其中usage信息有两个,前一个是nuse,另一个是nsze,这都是NVME协议里面规定的位域:

这里需要注意一点:如果SSD不支持thin provisioning,那么NUSE需要等于NCAP,否则NUSE可以小于NCAP。

 2.2 nvme list_subsys

 主要是nvme_show_subsystem_list函数,

在nvme-print.h获取print_nvme_subsystem_list 

 初始化.print_nvme_subsystem_list = stdout_subsystem_list,

 


http://www.ppmy.cn/server/47927.html

相关文章

神经网络应用场景——图像识别

神经网络在图像识别中的应用是一项重要且广泛的技术,下面将详细解释和说明神经网络在图像识别中的定义、特点以及应用场景。 一、定义 神经网络在图像识别中的应用,主要是指利用神经网络模型对图像进行特征提取和分类,从而实现对图像中物体…

力扣1438.绝对差不超过限制的最长连续子数组

力扣1438.绝对差不超过限制的最长连续子数组 难点&#xff1a;保存数组缩小后的最大最小值 用两个单调队列分别处理最大值和最小值 class Solution {public:int longestSubarray(vector<int>& nums, int limit) {deque<int> quemax,quemin;int n nums.size…

登录通用解决方案 —— 第三方登录处理

目录 01: 前言 02: 第三方平台登录解决方案流程大解析 03: QQ 开放平台流程大解析 04: QQ 登录对接流程&#xff1a;获取 QQ 用户信息 05: QQ 登录对接流程&#xff1a;跨页面信息传输 06: QQ 登录对接流程&#xff1a;认证是否已注册&#xff0c;完成 QQ …

MT2083 屠龙勇者

思路&#xff1a; 跟上题类似&#xff0c;贪心策略&#xff1a;w从小到大排序&#xff0c;每个头找到第一个>d的w 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define ll long long const int N 1e5 10; int n, m; int d[N]; int w[N]; int …

网络原理——TCP/IP--数据链路层,DNS

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 数量链路层目的地址和原地址类型校验和 DNS 数量链路层 主要的协议是以太网协议.一个横跨数据链路层和 物理层的协议,既包含了数据链路层的内容, 也包含了⼀些物理层的内容 我们来了解一…

AndroidStudio中debug.keystore的创建和配置使用

1.如果没有debug.keystore,可以按照下面方法创建 首先在C:\Users\Admin\.android路径下打开cmd窗口 之后输入命令:keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000 输入两次密码(密码不可见,打码处随便填写没关系) 2.在build…

50个常用的Docker命令及如何使用

这里整理了50个常用的Docker命令以及每个命令的使用方法。 docker version:显示Docker版本信息。 示例:docker version docker info:显示Docker系统信息。 示例:docker info docker pull <image>:从Docker Hub下载镜像。 示例:docker pull ubuntu docker run <i…

1.1 OpenCV随手简记(一)

OpenCV学习篇 OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉库&#xff0c;它提供了大量的算法和函数&#xff0c;用于图像处理、计算机视觉和机器学习等领域。 1. OpenCV 简介 1.1 OpenCV 的起源和发展 OpenCV 项目始于 1999 年&#xff0c;由 In…