Skip to content

Commit 2a0fb7a

Browse files
committed
nvme: add delay option for nvme top
This is to monitor the system changes. Signed-off-by: Tokunori Ikegami <[email protected]>
1 parent a2e1b83 commit 2a0fb7a

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

nvme.c

Lines changed: 30 additions & 3 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);
@@ -11011,6 +11013,29 @@ void register_extension(struct plugin *plugin)
1101111013
nvme.extensions->tail = plugin;
1101211014
}
1101311015

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

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

1103311060
return err ? 1 : 0;
1103411061
}

nvme.h

Lines changed: 3 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
/*
@@ -76,6 +77,7 @@ struct nvme_config {
7677
"disable retry logic on errors\n"), \
7778
OPT_UINT("output-format-version", 0, &nvme_cfg.output_format_ver, \
7879
"output format version: 1|2"), \
80+
OPT_DOUBLE("delay", 'd', &nvme_cfg.delay, delay), \
7981
OPT_END() \
8082
}
8183

@@ -109,6 +111,7 @@ extern const char *output_format;
109111
extern const char *timeout;
110112
extern const char *verbose;
111113
extern const char *dry_run;
114+
extern const char *delay;
112115
extern struct nvme_config nvme_cfg;
113116

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

0 commit comments

Comments
 (0)