nvme-cli常见命令分析

一、背景

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,

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值