mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 11:29:36 +03:00
Zpool iostat: remove latency/queue scaling
Bandwidth and iops are average per second while *_wait are averages per request for latency or, for queue depths, an instantaneous measurement at the end of an interval (according to man zpool). When calculating the first two it makes sense to do x/interval_duration (x being the increase in total bytes or number of requests over the duration of the interval, interval_duration in seconds) to 'scale' from amount/interval_duration to amount/second. But applying the same math for the latter (*_wait latencies/queue) is wrong as there is no interval_duration component in the values (these are time/requests to get to average_time/request or already an absulute number). This bug leads to the only correct continuous *_wait figures for both latencies and queue depths from 'zpool iostat -l/q' being with duration=1 as then the wrong math cancels itself (x/1 is a nop). This removes temporal scaling from latency and queue depth figures. Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Gregor Kopka <gregor@kopka.net> Closes #7945 Closes #7694
This commit is contained in:
parent
a7165d7255
commit
b954e36e51
@ -3755,7 +3755,7 @@ single_histo_average(uint64_t *histo, unsigned int buckets)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
nvlist_t *newnv, double scale)
|
nvlist_t *newnv)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint64_t val;
|
uint64_t val;
|
||||||
@ -3785,7 +3785,7 @@ print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
|||||||
format = ZFS_NICENUM_1024;
|
format = ZFS_NICENUM_1024;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(names); i++) {
|
for (i = 0; i < ARRAY_SIZE(names); i++) {
|
||||||
val = nva[i].data[0] * scale;
|
val = nva[i].data[0];
|
||||||
print_one_stat(val, format, column_width, cb->cb_scripted);
|
print_one_stat(val, format, column_width, cb->cb_scripted);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3794,7 +3794,7 @@ print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
print_iostat_latency(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
print_iostat_latency(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
nvlist_t *newnv, double scale)
|
nvlist_t *newnv)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint64_t val;
|
uint64_t val;
|
||||||
@ -3824,7 +3824,7 @@ print_iostat_latency(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
|||||||
/* Print our avg latencies on the line */
|
/* Print our avg latencies on the line */
|
||||||
for (i = 0; i < ARRAY_SIZE(names); i++) {
|
for (i = 0; i < ARRAY_SIZE(names); i++) {
|
||||||
/* Compute average latency for a latency histo */
|
/* Compute average latency for a latency histo */
|
||||||
val = single_histo_average(nva[i].data, nva[i].count) * scale;
|
val = single_histo_average(nva[i].data, nva[i].count);
|
||||||
print_one_stat(val, format, column_width, cb->cb_scripted);
|
print_one_stat(val, format, column_width, cb->cb_scripted);
|
||||||
}
|
}
|
||||||
free_calc_stats(nva, ARRAY_SIZE(names));
|
free_calc_stats(nva, ARRAY_SIZE(names));
|
||||||
@ -3972,9 +3972,9 @@ print_vdev_stats(zpool_handle_t *zhp, const char *name, nvlist_t *oldnv,
|
|||||||
print_iostat_default(calcvs, cb, scale);
|
print_iostat_default(calcvs, cb, scale);
|
||||||
}
|
}
|
||||||
if (cb->cb_flags & IOS_LATENCY_M)
|
if (cb->cb_flags & IOS_LATENCY_M)
|
||||||
print_iostat_latency(cb, oldnv, newnv, scale);
|
print_iostat_latency(cb, oldnv, newnv);
|
||||||
if (cb->cb_flags & IOS_QUEUES_M)
|
if (cb->cb_flags & IOS_QUEUES_M)
|
||||||
print_iostat_queues(cb, oldnv, newnv, scale);
|
print_iostat_queues(cb, oldnv, newnv);
|
||||||
if (cb->cb_flags & IOS_ANYHISTO_M) {
|
if (cb->cb_flags & IOS_ANYHISTO_M) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
print_iostat_histos(cb, oldnv, newnv, scale, name);
|
print_iostat_histos(cb, oldnv, newnv, scale, name);
|
||||||
|
Loading…
Reference in New Issue
Block a user