nvmecontrol: improve namespace size unit of devlist command output
Add an option of -h --human to output human readable size unit instead of the fixed unit (MB). Signed-off-by: Wanpeng Qian <wanpengqian@gmail.com> Reviewed by: imp, bcr Differential Revision: https://reviews.freebsd.org/D32957
This commit is contained in:
parent
34aac98e35
commit
9c1bec9c21
@ -34,6 +34,8 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <libutil.h>
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -51,10 +53,27 @@ __FBSDID("$FreeBSD$");
|
|||||||
|
|
||||||
static cmd_fn_t devlist;
|
static cmd_fn_t devlist;
|
||||||
|
|
||||||
|
static struct options {
|
||||||
|
bool human;
|
||||||
|
} opt = {
|
||||||
|
.human = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct opts devlist_opts[] = {
|
||||||
|
#define OPT(l, s, t, opt, addr, desc) { l, s, t, &opt.addr, desc }
|
||||||
|
OPT("human", 'h', arg_none, opt, human,
|
||||||
|
"Show human readable disk size"),
|
||||||
|
{ NULL, 0, arg_none, NULL, NULL }
|
||||||
|
};
|
||||||
|
#undef OPT
|
||||||
|
|
||||||
static struct cmd devlist_cmd = {
|
static struct cmd devlist_cmd = {
|
||||||
.name = "devlist",
|
.name = "devlist",
|
||||||
.fn = devlist,
|
.fn = devlist,
|
||||||
.descr = "List NVMe controllers and namespaces"
|
.descr = "List NVMe controllers and namespaces",
|
||||||
|
.ctx_size = sizeof(opt),
|
||||||
|
.opts = devlist_opts,
|
||||||
|
.args = NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
CMD_COMMAND(devlist_cmd);
|
CMD_COMMAND(devlist_cmd);
|
||||||
@ -81,7 +100,9 @@ devlist(const struct cmd *f, int argc, char *argv[])
|
|||||||
struct nvme_namespace_data nsdata;
|
struct nvme_namespace_data nsdata;
|
||||||
char name[64];
|
char name[64];
|
||||||
uint8_t mn[64];
|
uint8_t mn[64];
|
||||||
|
uint8_t buf[7];
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
uint64_t size;
|
||||||
int ctrlr, fd, found, ret;
|
int ctrlr, fd, found, ret;
|
||||||
|
|
||||||
if (arg_parse(argc, argv, f))
|
if (arg_parse(argc, argv, f))
|
||||||
@ -115,11 +136,15 @@ devlist(const struct cmd *f, int argc, char *argv[])
|
|||||||
continue;
|
continue;
|
||||||
sprintf(name, "%s%d%s%d", NVME_CTRLR_PREFIX, ctrlr,
|
sprintf(name, "%s%d%s%d", NVME_CTRLR_PREFIX, ctrlr,
|
||||||
NVME_NS_PREFIX, i + 1);
|
NVME_NS_PREFIX, i + 1);
|
||||||
printf(" %10s (%lldMB)\n",
|
size = nsdata.nsze * (uint64_t)ns_get_sector_size(&nsdata);
|
||||||
name,
|
if (opt.human) {
|
||||||
nsdata.nsze *
|
humanize_number(buf, sizeof(buf), size, "B",
|
||||||
(long long)ns_get_sector_size(&nsdata) /
|
HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
|
||||||
1024 / 1024);
|
printf(" %10s (%s)\n", name, buf);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
printf(" %10s (%luMB)\n", name, size / 1024 / 1024);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Ic devlist
|
.Ic devlist
|
||||||
|
.Op Fl h
|
||||||
.Nm
|
.Nm
|
||||||
.Ic identify
|
.Ic identify
|
||||||
.Op Fl v
|
.Op Fl v
|
||||||
@ -209,6 +210,13 @@
|
|||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
NVM Express (NVMe) is a storage protocol standard, for SSDs and other
|
NVM Express (NVMe) is a storage protocol standard, for SSDs and other
|
||||||
high-speed storage devices over PCI Express.
|
high-speed storage devices over PCI Express.
|
||||||
|
.Ss devlist
|
||||||
|
List all NVMe controllers and namespaces along with their device nodes.
|
||||||
|
With the
|
||||||
|
.Fl h
|
||||||
|
argument, use unit suffixes: Byte, Kibibyte, Mebibyte, Gibibyte, Tebibyte
|
||||||
|
and Pebibyte (based on powers of 1024) when showing the disk space.
|
||||||
|
By default, uses Mebibyte.
|
||||||
.Ss identify
|
.Ss identify
|
||||||
The identify commands reports information from the drive's
|
The identify commands reports information from the drive's
|
||||||
.Dv IDENTIFY_CONTROLLER
|
.Dv IDENTIFY_CONTROLLER
|
||||||
|
Loading…
Reference in New Issue
Block a user