住房与城乡建设部违法举报网站,陕西省建设厅的网站,贵州省建设厅公示网站,公司建设网站需要固定ip吗一、背景
nvme-cli命令常常用于获取或者设置SSD参数#xff0c;比如常见的nvme list#xff0c;nvme id-ctrl等#xff0c;都是获取SSD的基本信息#xff0c;也有nvme admin-passthru用于读取或者设置自定义命令。作为使用者#xff0c;我们并不知道nvme-cli源码怎么实现…一、背景
nvme-cli命令常常用于获取或者设置SSD参数比如常见的nvme listnvme 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,