Skip to content

Commit 2708ca9

Browse files
committed
nvme: add show-topology delay option for nvme top
This is to monitor the system changes. Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
1 parent a2e1b83 commit 2708ca9

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

nvme.c

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ const char *output_format = "Output format: normal|binary";
191191
const char *timeout = "timeout value, in milliseconds";
192192
const char *verbose = "Increase output verbosity";
193193
const char *dry_run = "show command instead of sending";
194+
const char *delay = "iterative delay as SECS [.TENTHS]";
194195

195196
static const char *app_tag = "app tag for end-to-end PI";
196197
static const char *app_tag_mask = "app tag mask for end-to-end PI";
@@ -262,6 +263,7 @@ struct nvme_config nvme_cfg = {
262263
.output_format = "normal",
263264
.output_format_ver = 1,
264265
.timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
266+
.delay = 0,
265267
};
266268

267269
static void *mmap_registers(struct nvme_transport_handle *hdl, bool writable);
@@ -10096,7 +10098,8 @@ static int show_topology_cmd(int argc, char **argv, struct command *acmd, struct
1009610098
};
1009710099

1009810100
NVME_ARGS(opts,
10099-
OPT_FMT("ranking", 'r', &cfg.ranking, ranking));
10101+
OPT_FMT("ranking", 'r', &cfg.ranking, ranking),
10102+
OPT_DOUBLE("delay", 'd', &nvme_cfg.delay, delay));
1010010103

1010110104
err = argconfig_parse(argc, argv, desc, opts);
1010210105
if (err)
@@ -11011,6 +11014,29 @@ void register_extension(struct plugin *plugin)
1101111014
nvme.extensions->tail = plugin;
1101211015
}
1101311016

11017+
static bool handle_delay(int err)
11018+
{
11019+
struct timespec ts;
11020+
double delay_f;
11021+
double delay_i;
11022+
11023+
if (err || !nvme_cfg.delay)
11024+
return false;
11025+
11026+
delay_f = modf(nvme_cfg.delay, &delay_i);
11027+
ts.tv_sec = delay_i;
11028+
ts.tv_nsec = delay_f * 1000000000;
11029+
err = pselect(0, NULL, NULL, NULL, &ts, NULL);
11030+
if (err < 0)
11031+
return false;
11032+
11033+
err = system("clear");
11034+
if (err < 0)
11035+
return false;
11036+
11037+
return true;
11038+
}
11039+
1101411040
int main(int argc, char **argv)
1101511041
{
1101611042
int err;
@@ -11026,9 +11052,11 @@ int main(int argc, char **argv)
1102611052
if (err)
1102711053
return err;
1102811054

11029-
err = handle_plugin(argc - 1, &argv[1], nvme.extensions);
11030-
if (err == -ENOTTY)
11031-
general_help(&builtin, NULL);
11055+
do {
11056+
err = handle_plugin(argc - 1, &argv[1], nvme.extensions);
11057+
if (err == -ENOTTY)
11058+
general_help(&builtin, NULL);
11059+
} while (handle_delay(err));
1103211060

1103311061
return err ? 1 : 0;
1103411062
}

nvme.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ struct nvme_config {
5959
bool dry_run;
6060
bool no_retries;
6161
unsigned int output_format_ver;
62+
double delay;
6263
};
6364

6465
/*
@@ -109,6 +110,7 @@ extern const char *output_format;
109110
extern const char *timeout;
110111
extern const char *verbose;
111112
extern const char *dry_run;
113+
extern const char *delay;
112114
extern struct nvme_config nvme_cfg;
113115

114116
int validate_output_format(const char *format, nvme_print_flags_t *flags);

0 commit comments

Comments
 (0)