1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-03 05:18:29 +03:00

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.
This commit is contained in:
Bryn M. Reeves 2015-08-13 17:29:15 +01:00
parent 4534f0fbcf
commit 9b3dc72506
2 changed files with 49 additions and 0 deletions

View File

@ -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.

View File

@ -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.")