diff options
author | Bryn M. Reeves <bmr@redhat.com> | 2015-08-13 17:29:15 +0100 |
---|---|---|
committer | Bryn M. Reeves <bmr@redhat.com> | 2015-08-14 13:36:50 +0100 |
commit | 9b3dc725060a243b7b6d849de9bafbdf3e9f5140 (patch) | |
tree | 7c0cf63680a82cd748534326e30ec61e8e864631 | |
parent | 4534f0fbcf6b83d29baf4af78f9027ff76fe0a7a (diff) | |
download | lvm2-9b3dc725060a243b7b6d849de9bafbdf3e9f5140.tar.gz |
dmstats: add 'interval' and 'interval_ns' report fields
Add a pair of fields to expose the current per-interval duation
estimate. The 'interval' field provides a real value in units of
seconds and the 'interval_ns' field provides the same quantity
expressed as a whole number of nanoseconds.
-rw-r--r-- | man/dmstats.8.in | 14 | ||||
-rw-r--r-- | tools/dmsetup.c | 35 |
2 files changed, 49 insertions, 0 deletions
diff --git a/man/dmstats.8.in b/man/dmstats.8.in index 3b9f03222..f8d294980 100644 --- a/man/dmstats.8.in +++ b/man/dmstats.8.in @@ -501,6 +501,20 @@ The program ID value associated with this region. .br The auxiliary data value associated with this region. .br +.HP +.B interval_ns +.br +The estimated interval over which the current counter values have +accumulated. The vaulue is reported as an interger expressed in units +of nanoseconds. +.br +.HP +.B interval +.br +The estimated interval over which the current counter values have +accumulated. The value is reported as a real number in units of +seconds. +.br .SS Basic counters Basic counters provide access to the raw counter data from the kernel, allowing further processing to be carried out by another program. diff --git a/tools/dmsetup.c b/tools/dmsetup.c index c5be193fc..6e75e283c 100644 --- a/tools/dmsetup.c +++ b/tools/dmsetup.c @@ -3376,6 +3376,39 @@ static int _dm_stats_aux_data_disp(struct dm_report *rh, return dm_report_field_string(rh, field, (const char * const*) &aux_data); } +static int _dm_stats_sample_interval_ns_disp(struct dm_report *rh, + struct dm_pool *mem __attribute__((unused)), + struct dm_report_field *field, const void *data, + void *private __attribute__((unused))) +{ + /* FIXME: use internal interval estimate when supported by libdm */ + return dm_report_field_uint64(rh, field, &_last_interval); +} + +static int _dm_stats_sample_interval_disp(struct dm_report *rh, + struct dm_pool *mem __attribute__((unused)), + struct dm_report_field *field, const void *data, + void *private __attribute__((unused))) +{ + char buf[64]; + char *repstr; + double *sortval; + + if (!(sortval = dm_pool_alloc(mem, sizeof(*sortval)))) + return_0; + + *sortval = (double)_last_interval / (double) NSEC_PER_SEC; + + if (!dm_snprintf(buf, sizeof(buf), "%2.6f", *sortval)) + return_0; + + if (!(repstr = dm_pool_strdup(mem, buf))) + return_0; + + dm_report_field_set_value(field, repstr, sortval); + return 1; +} + static int _dm_stats_rrqm_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)), struct dm_report_field *field, const void *data, @@ -3917,6 +3950,8 @@ FIELD_F(STATS, SIZ, "ASize", 5, dm_stats_area_len, "area_len", "Area length.") FIELD_F(STATS, NUM, "#Areas", 6, dm_stats_area_count, "area_count", "Area count.") FIELD_F(STATS, STR, "ProgID", 6, dm_stats_program_id, "program_id", "Program ID.") FIELD_F(STATS, STR, "AuxDat", 6, dm_stats_aux_data, "aux_data", "Auxiliary data.") +FIELD_F(STATS, NUM, "IntervalNSec", 10, dm_stats_sample_interval_ns, "interval_ns", "Sampling interval in nanoseconds.") +FIELD_F(STATS, NUM, "Interval", 8, dm_stats_sample_interval, "interval", "Sampling interval.") /* Stats derived metrics */ FIELD_F(STATS, NUM, "RRqM/s", 8, dm_stats_rrqm, "rrqm", "Read requests merged per second.") |